Coit29222 structured programming lecture week 07
This presentation is the property of its rightful owner.
Sponsored Links
1 / 38

COIT29222-Structured Programming Lecture Week 07 PowerPoint PPT Presentation


  • 101 Views
  • Uploaded on
  • Presentation posted in: General

COIT29222-Structured Programming Lecture Week 07 . Reading: Study Guide Book 2, Module 11 Textbook (4 th Ed.), Chapter 4 Textbook (6 th Ed.), Chapter 7 This week, we will cover the following topics: Introduction to Arrays Declaring Arrays Accessing Arrays

Download Presentation

COIT29222-Structured Programming Lecture Week 07

An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

Presentation Transcript


Coit29222 structured programming lecture week 07

COIT29222-Structured Programming Lecture Week 07

  • Reading: Study Guide Book 2, Module 11

    Textbook (4th Ed.), Chapter 4

    Textbook (6th Ed.), Chapter 7

  • This week, we will cover the following topics:

    • Introduction to Arrays

    • Declaring Arrays

    • Accessing Arrays

    • Passing Arrays to Functions

      NOTE: Arrays should not be used in Assignment 1


Arrays

Arrays

  • In this class we introduce Arrays which are very useful for storing, searching and sorting data.

  • An array is a collection of memory locations which have same name and same type

  • The idea is quite simple – to begin, let’s go back to the beginning


Variables

Variables

write “Number of marks in exam ==> “

read NbrMarks

write “Student’s mark ==> “

read StudentMark

set Percentage to 100 * StudentMark / NbrMarks

write “ Student’s percentage: “

write Percentage

This design uses 3 variables:

NbrMarks, StudentMark, Percentage


Variables1

Variables

  • Each variable can hold a single value

  • Each variable is associated with a single memory location

  • After running this program (previous slide) with the following inputs (50 and 30)

  • The memory locations used by this program hold the following values

    • NbrMarks: 50

    • StudentMark: 30

    • Percentage: 60

  • Each variable is associated with one memory location and can hold one value

    Number of marks in exam ==> 50


  • Arrays1

    Arrays

    • An array can hold more than one value

    • An array called Marks might hold the collection of marks from an exam

    • We refer to values in an array using square brackets and a position number of the value of interest:

      Marks[1]

      Marks[17]

      Marks[123]


    Arrays2

    Arrays

    • In some languages, the first value in an array is at position 1

    • However, in C++, the first value in an array is at position 0

    • In our examples, we will adopt this 0-based convention

      Marks[0]  first value held in Marks

      Marks[1]  second value held in Marks

      Marks[2]  third value held in Marks


    Arrays3

    Arrays

    • To display the first three values in Marks, we can write (in pseudocode):

      writeMarks[0]

      writeMarks[1]

      writeMarks[2]

    • We’ll look at arrays in C++ in detail later – to output array values we write:

      cout << Marks[0];

      cout << Marks[1];

      cout << Marks[2];


    Arrays4

    Arrays

    • We assign values to an array using the same notation:

      readMarks[0] (read value and assign as first in Marks)

      setMarks[5] =0(assign sixth value in Marks to 0)

    • No surprises here in C++:

      cin >> Marks[0];

      Marks[5] = 0;


    Arrays5

    Arrays

    • The power of arrays comes from the ability to refer to values stored in an array using a variable

      ( display first mark )

      setMarkNbr=0

      write Marks[MarkNbr]

      ( display second mark )

      setMarkNbr=1

      write Marks[MarkNbr]


    Activity

    Activity

    • If Marks holds the values shown on the right, what output will the following design produce?

      setNbrMarks=3

      setMarkNbr=0

      whileMarkNbr < NbrMarks

      write”Mark number “, MarkNbr, ” = “

      write Marks[MarkNbr]

      writeNewLine

      setMarkNbr=MarkNbr +1

      ( end of loop over marks )

    Marks

    [0]

    [1]

    [2]

    17

    29

    8


    Activity feedback

    Activity Feedback

    • If Marks holds the values shown on the right, this design will produce the following output?

      Mark number 0 = 17

      Mark number 1 = 29

      Mark number 2 = 8

    Marks

    [0]

    [1]

    [2]

    17

    29

    8


    Declaring arrays in c

    Declaring Arrays in C++

    • We must specify the type, array name and array size as follows:

      Type ArrayName [ArraySize];

      Type is data type in C++ eg., int, float, char, etc.

      ArraySize is either a value or a defined variable

    • Below we declare an array to hold 10 integer numbers:

      int Results[10];

    • Our ten integer numbers are held in positions 0 to 9:

      Results[0]

      Results[1]

      :

      Results[9]


    Declaring arrays in c1

    Declaring Arrays in C++

    • A constant is sometimes used to hold the number of values in an array

      const int NBR_RESULTS = 10;

      int Results[NBR_RESULTS];

    • A constant is useful when looping, and also makes it easy to change the array size:

      for (ResultNbr = 0;

      ResultNbr < NBR_RESULTS;

      ResultNbr++)

      cout << “Result[“ << ResultNbr

      << “]: “ Results[ResultNbr]


    Declaring arrays in c2

    Declaring Arrays in C++

    • Take care with loop conditions – one common form is:

      for (ResultNbr = 0;

      ResultNbr < NBR_RESULTS;

      ResultNbr++)

      :

    • An alternative form is:

      for (ResultNbr = 0;

      ResultNbr <= NBR_RESULTS - 1;

      ResultNbr++)

      :


    Initialising arrays in c

    Initialising Arrays in C++

    • To initialise values in an array, enclose the initial values in braces:

      const NBR_RESULTS = 3;

      int Results[NBR_RESULTS] = {0,1,2};

    • You can initialise all values in an array of integers to zero using:

      int Results[NBR_RESULTS] = {0};

    • If you do not provide enough initial values, others are set to zero!

      int Results[NBR_RESULTS] = {1,2};


    Initialising arrays in c1

    Initialising Arrays in C++

    • If the array size is omitted when it is declared, the compiler canautomatically determine the size from initial values

      int Primes[] = {1, 3, 5, 7, 11};

      is equivalent to

      int Primes[5] = {1, 3, 5, 7, 11};

    • We will get a syntax error, if the number of initialisers is greater than the number of elements.

      int numbers[4] = { 5, 2, 6, 4, 7};

      The above declarationis invalid because there are only 4 array elements and 5 initialisers.


    Referencing arrays

    Referencing Arrays

    • We normally use an integer literal, or an integer variable, to refer to a value of interest in an array

      Results[0]

      Results[ResultNbr]

    • Also, an integer expression can be used

      Results[CurrentPos - 1]

    • A common error when using arrays is to refer to an element that does not exist

    • That is: to use an index value that is outside the acceptable range


    Coit29222 structured programming lecture week 07

    A Common Error Using Arrays Activity

    • Can you see how this code refers to an array element that does not exist?

      #include <iostream.h>

      void main()

      {

      const NBR_RESULTS = 3;

      int Results[NBR_RESULTS] = {0};

      for (int i = 0; i <= NBR_RESULTS; i++)

      cout << Results[i];

      }


    Coit29222 structured programming lecture week 07

    Activity Feedback

    • In the last trip through the loop below, the code refers to Results[3], which does not exist

      #include <iostream.h>

      void main()

      {

      const NBR_RESULTS = 3;

      int Results[NBR_RESULTS] = {0};

      for (int i = 0; i <= NBR_RESULTS; i++)

      cout << Results[i];

      }


    Coit29222 structured programming lecture week 07

    A Common Error Using Arrays

    • C++ does notgive an error when using an index value that is out-of-range

    • It is the programmer’s responsibility to ensure that array references are always within the acceptable range

    • If, in an expression, you refer to an array element that does not exist:

      -Results are unpredictable – the program may give erroneous output, or go into an infinite loop


    Coit29222 structured programming lecture week 07

    A Common Error Using Arrays

    • If you assign a value to an array elementthat does not exists:

      -With luck, you’ll get a memory violation error – so you know there’s a problem

      -Without luck, results are unpredictable:

      • Erroneous output produced

      • Infinite loops lock-up the program

      • Memory used by the operating system is overwritten causing a system crash


    Passing arrays to functions

    Passing Arrays to Functions

    • Arrays are always passed to functions by reference–but, no ampersand (&) appears before the parameter name

    • Consider a program using an array called Results as shown on the next slide


    Passing arrays to functions1

    Passing Arrays to Functions

    main

    Results

    NbrResults

    Results

    Results

    NbrResults

    GetResults

    DisplayResults

    Results

    NbrResults

    SortResults


    Coit29222 structured programming lecture week 07

    void GetResults(int Results[], int &NbrResults);

    void SortResults(int Results[], int NbrResults);

    void DisplayResults(int Results[], int NbrResults);

    const int MAX_NBR_RESULTS = 10;

    void main (void)

    {

    int Results[MAX_NBR_RESULTS] = {0},

    NbrResults = 0;

    GetResults(Results, NbrResults);

    SortResults(Results, NbrResults);

    DisplayResults(Results, NbrResults);

    }

    notes: here, the maximum number of results is defined

    as a global constant – it is used to define the size of

    the Results array and will also be used to avoid an

    out-of-range error in the GetResults function


    Coit29222 structured programming lecture week 07

    void GetResults(int Results[], int &NbrResults);

    void SortResults(int Results[], int NbrResults);

    void DisplayResults(int Results[], int NbrResults);

    const int MAX_NBR_RESULTS = 10;

    void main (void)

    {

    int Results[MAX_NBR_RESULTS] = {0},

    NbrResults = 0;

    GetResults(Results, NbrResults);

    SortResults(Results, NbrResults);

    DisplayResults(Results, NbrResults);

    }

    notes: the NbrResults parameter is an output of the

    GetResults function, so an ampersand appears before

    its name in the GetResults header and declaration


    Coit29222 structured programming lecture week 07

    void GetResults(int Results[], int &NbrResults);

    void SortResults(int Results[], int NbrResults);

    void DisplayResults(int Results[], int NbrResults);

    const int MAX_NBR_RESULTS = 10;

    void main (void)

    {

    int Results[MAX_NBR_RESULTS] = {0},

    NbrResults = 0;

    GetResults(Results, NbrResults);

    SortResults(Results, NbrResults);

    DisplayResults(Results, NbrResults);

    }

    notes: the Results array is also an output of the

    GetResults function, but an ampersand does not appear

    before its name in GetResults header and declaration


    Coit29222 structured programming lecture week 07

    void GetResults(int Results[], int &NbrResults);

    void SortResults(int Results[], int NbrResults);

    void DisplayResults(int Results[], int NbrResults);

    const int MAX_NBR_RESULTS = 10;

    void main (void)

    {

    int Results[MAX_NBR_RESULTS] = {0},

    NbrResults = 0;

    GetResults(Results, NbrResults);

    SortResults(Results, NbrResults);

    DisplayResults(Results, NbrResults);

    }

    notes: square brackets appear in header and declaration

    to show that a parameter is an array


    Coit29222 structured programming lecture week 07

    void GetResults(int Results[], int &NbrResults);

    void SortResults(int Results[], int NbrResults);

    void DisplayResults(int Results[], int NbrResults);

    const int MAX_NBR_RESULTS = 10;

    void main (void)

    {

    int Results[MAX_NBR_RESULTS] = {0},

    NbrResults = 0;

    GetResults(Results, NbrResults);

    SortResults(Results, NbrResults);

    DisplayResults(Results, NbrResults);

    }

    notes: square brackets do not appear in the function call


    Coit29222 structured programming lecture week 07

    void GetResults(int Results[], int &NbrResults);

    void SortResults(int Results[], int NbrResults);

    void DisplayResults(int Results[], int NbrResults);

    const int MAX_NBR_RESULTS = 10;

    void main (void)

    {

    int Results[MAX_NBR_RESULTS] = {0},

    NbrResults = 0;

    GetResults(Results, NbrResults);

    SortResults(Results, NbrResults);

    DisplayResults(Results, NbrResults);

    }

    notes: one does not need to specify the size of an array

    that appears as a parameter in a function header or

    declaration – it is normal practice to not specify the size

    of a parameter that is an array


    Coit29222 structured programming lecture week 07

    void GetResults(int Results[], int &NbrResults);

    void SortResults(int Results[], int NbrResults);

    void DisplayResults(int Results[], int NbrResults);

    const int MAX_NBR_RESULTS = 10;

    void main (void)

    {

    int Results[MAX_NBR_RESULTS] = {0},

    NbrResults = 0;

    GetResults(Results, NbrResults);

    SortResults(Results, NbrResults);

    DisplayResults(Results, NbrResults);

    }

    notes: however, called functions need to know how many

    values have been stored in the array


    Passing arrays to functions2

    Passing Arrays to Functions

    • The DisplayResults function may look like this

    void DisplayResults(int Results[], int NbrResults)

    {

    cout << "Results: " << endl;

    for (int i = 0; i < NbrResults; i++)

    {

    cout << " Result[" << i

    << "]: " << Results[i] << endl;

    }

    }


    Passing arrays to functions3

    Passing Arrays to Functions

    • It is possible to protect the elements of an array passed as an input to a function:

      • Putconstin front of the parameter declaration

      • Any attempt by the function to assign a value to the array will result in anerror when compiled

    void DisplayResults(const int Results[],

    int NbrResults)


    Passing arrays elements to functions

    Passing Arrays Elements to Functions

    • We can pass a single array element to a function

      • Whole arrays are always reference parameters

      • Individual elements of an array can be passed as a value or reference parameter

    • Activity: what output do you think the following code will produce?


    Activity1

    #include <iostream.h>

    void PassByValue(int ArrayElement);

    void PassByReference(int &ArrayElement);

    void main(void)

    {

    int Marks[3] = {10,20,30};

    PassByValue(Marks[0]);

    PassByReference(Marks[1]);

    for (int Mark = 0; Mark <= 2; Mark++)

    cout << “Marks[“ << Mark << “]: “ << Marks[Mark] << endl;

    }

    void PassByValue(int ArrayElement)

    {

    ArrayElement++;

    }

    void PassByReference(int &ArrayElement)

    {

    ArrayElement++;

    }

    Activity


    Coit29222 structured programming lecture week 07

    Activity Feedback

    • Output produced by this program is:

    Marks[0]: 10

    Marks[1]: 21

    Marks[2]: 30


    Coit29222 structured programming lecture week 07

    Activity

    • Write a function named Smallest, that accepts an array of double precision real numbers, and returns the smallest value stored in the array

      double Smallest(const double Array[],int NbrValues)

      {

      }


    Coit29222 structured programming lecture week 07

    Some Jargon Used With Arrays

    • element: a value held in an array

    • index : an integer value that refers to an element in an array; we say C++ arrays are zero-indexed – the first position is zero

    • subscript : can be used instead of index – as in “subscript out of range”; can also be used to describe the expression that appears between the brackets to refer to an element in an array

    • dimension : the number of elements in an array - the size of the array


    Summary

    Summary

    • Simple variables hold a single value

    • Arrays hold a collection of related values

    • First value in a C++ array is at position 0

    • Arrays can be defined for any of the basic data types – int, float, double, char, etc.

    • Arrays can be passed to functions


  • Login