…b uilding your own AT f ramework … 21 November, 2003 Se a n Hanly shanly@exoftware
Arrays Hanly - Chapter 7 Friedman-Koffman - Chapter 9.
-
date post
20-Dec-2015 -
Category
Documents
-
view
226 -
download
0
Transcript of Arrays Hanly - Chapter 7 Friedman-Koffman - Chapter 9.
Arrays
• Hanly - Chapter 7
• Friedman-Koffman - Chapter 9
3/13/02
• Program 4 questions?– revised test1 and my version of the program– program should always process at least one
customer
• Program 6 (and HW2) may be done by two people working together
2
9.1 The Array Data Type• Array collection of elements with a common name
– Entire array is referenced through the name
• Array elements are of the same type — the base type– Base type can be any fundamental, library-
defined, or programmer -defined type• For now: arrays are static - they have a fixed
number of elements
4
Array Elements• Individual elements of the array are referenced by
sub_scripting the group name– Subscripts are denoted as expressions within
brackets: [ ]– The index type is integer and the index range
must be 0 ... n-1• where n is the number of elements in the array
6
Array Declaration
Type ofvalues in
list
BaseType Id [ SizeExp ] ;
Nameof list
Bracketedconstantexpressionindicatingnumber ofelements in
list
7
Sample Declarations
• Supposeconst int N = 20;
const int M = 40;
const int MaxStringSize = 80;
const int MaxListSize = 1000;
8
Sample Declarations
• Then the following are all correct array declarations.int A[10];
char B[MaxStringSize];
float C[M*N];
int Values[MaxListSize];
Rational D[N-15];
Array Initialization
• An array can be initialized at the time it is declaredchar grades[5] = {'A', 'B', 'C', 'D', 'F'};
int primes[] = {1, 2, 3, 5, 7, 11, 13, 17, 19, 23}
• if values provided do not fill the array, remainder of elements will be 0double x[10] = {1.5, 2.5, 3.5, 4.5, 5.5}
9
Subscripting• Suppose
int A[10]; // array of 10 ints
• To access an individual element we must apply a subscript to array name A– A subscript is a bracketed expression
• The expression in the brackets is known as the index
– First element of A has index 0A[0]
10
Subscripting– Second element of A has index 1, and so on
A[1]– Last element has an index one less than the size
of the array
A[9]
• Incorrect indexing is a common error– be careful not to index past the end of the array
11
Array Elements
• Supposeint A[10]; // array of 10 uninitialized ints
• To access an individual element we must apply a subscript to array name A
-- -- ----AA[4] A[5] A[6]A[3]A[0] A[2] A[8] A[9]A[7]A[1]
-- -- ---- -- --
12
Array Element Manipulation• Given the following:
int i = 7, j = 2, k = 4;A[0] = 1;A[i] = 5;A[j] = A[i] + 3;A[j+1] = A[i] + A[0];A[A[j]] = 12;
13
Array Element Manipulation
cin >> A[k]; // where the next input value is 3
-- 8 61AA[4] A[5] A[6]A[3]A[0] A[2] A[8] A[9]A[7]A[1]
-- -- 53 --12
Array Processing
• None of the operators are defined for an array– << >> arithmetic comparison
• To do the same thing to every element in an array, use a loop
14
Inputting Into An Array int A[MaxListSize];
int n = 0;
int CurrentInput;
while((n < MaxListSize) && (cin >> CurrentInput))
{
A[n] = CurrentInput;
++n;
}
15
Displaying An Array
// List A of n elements has
// already been set
for (int i = 0; i < n; ++i)
{cout << A[i] << " ";
}
cout << endl;
Partially filled arrays
• You don't have to use all the elements of an array– don't always know how many elements you will
need– declare array big enough to handle all cases
• it is your job to keep track of how many elements are valid
3/15/01
• HW 2: Planning for program 6– you may do this in pairs– look at P6 handout for ideas– this is a planning exercise - you are not writing
code
• P5 - start thinking about how to organize the main playing loop of a Yahtzee game
Cheating
• making copies of other students programs is NOT appropriate behavior
• I will be comparing all Program 4 submissions to check for copying
• Acknowledge anyone that you get help from in your readme
17
Access to Array Elements
• Sequential Access– Process elements in sequential order starting
with the first
• Random Access– you can access elements in random order
23
9.3 Array Elements
• Use <, ==, >, +, - to test and modify array elements
• At times it might benefit you to pass an entire array to a function
• Can pass array elements to functions– actual function callswap (s[3], s[5]);
24
swap.cpp
// FILE: Exchange.cpp// Exchanges two type float values
void exchange (float& a1, float& a2){ float temp;
temp = a1; a1 = a2; a2 = temp;}
25
Arrays as Function Arguments• Arrays are always passed by reference
– Passing the array address– contents can be changed
• Points to remember– function definition needs only [] to indicate
that the actual argument is an array– You can use the reserved word const to
prevent the contents of an array from being changed
30
9.4 Reading Part of an Array
• Sometimes it is difficult to know how many elements will be in an array
• Scores example– 150 students– 200 students
• Always allocate enough space at compile time
• Remember to start with index [0]
37
9.5 Searching and Sorting Arrays
• Look at 2 common array problems– Searching– Sorting
• How do we go about finding the smallest number in an array?– Assume 1st is smallest and save its position– Look for one smaller – If you locate one smaller save its position
43
Linear Search
• The idea of a linear search is to walk through the entire until a target value is located
• If the target is not located some type of indicator needs to be returned
46
Sorting in Ascending OrderSelection Sort
• Idea of the selection sort is to locate the smallest value in the array
• Then switch positions of this value and that in position [0]
• We then increment the index and look again for the next smallest value and swap
• Continue until sorted
Section 1 3/18/02
character arrays
• arrays can have any base type
• char arrays are useful for storing text
• C used a char array for strings– use null character to designate the end of the
string
• C++ has a string class
literal strings
• A literal string constant is a sequence of zero or more characters enclosed in double quotes
"Are you aware?\n"• Individual characters of string are stored in
consecutive memory locations• The null character ('\0') is appended to strings so
that the compiler knows where in memory strings ends
C-style strings
• array of char with a null character as the last element– null character has ASCII code 0– '\0'
'w' 'o' 'r' 'd' '\0'
operators = and == not defined for C-style strings
Declaring and initializing
• Declaring uninitializedchar cstr[15];
• Declaration with initializationchar letters[] = "abcde";char grades[] = {'A', 'B', 'C', 'D', 'F', '\0'}char notString[] = {'A', 'B', 'C', 'D',}
• In first case above, the null character is appended for you
string.h
int strlen( char[]) number of characters in array; doesn't count '\0'
void strcpy( char[], char[])
copy one C-style string to another
int strcmp( char[] char[]) compare two C-style strings
void strcat( char[], char[]) append one C-style string to another
length vs number of elements
char word = "word";
• word has 5 elements
• BUT strlen( word) = 4
assigning values
• NOT ALLOWEDchar a[] = "stuff", b[];
b = a;
• How do you do this?strcpy( b, a);
Now b also contains "stuff"
comparing C-style strings
• == not defined for strings– use strcmpstrcmp( a, b)
• returns 0 if the strings are the same• returns a number >0 if a comes after b
lexicographically• returns a number < 0 if a comes before b
reading strings
char a[10];cin >> a;
• whitespace delimited
• to read multiple words, use getlncin.getline( a, 10);
the number is the number of elements in the array
concatenating C-style strings
char str1[]="cat", str2[]="top";
strcat(str2, str1);
after this code has executed, str2 will contain "topcat"
42
C++ string class
• library is string (no .h)
• declaration and initialization
string Class
#include <string>
• Various operations on strings are defined– assignment with =– comparison with ==– concatenation with +, +=– length() function returns the string length– c_str() returns a C-style string as const
16
Remember• Arrays are always passed by reference• Can use const if array elements are not to
be modified• You do not need to include the array size
within the brackets when defining an array parameter
• Initialize array with 0 or some other known value
65
9.9 Common Programming Errors
• Watch non int subscripts (ASCII value)• Enumerated types can be used• Out of range errors
– C++ no range error checking
• Lack of subscript to gain access• Subscript reference to non-array variable• Type mixing when using with functions• Initialization of arrays
66
Common Programming Errors
• No prefix to reference a struct member
• Incorrect prefix reference to a struct member
• Missing ; following definition of struct
• Initialization of struct members