الفصل الثاني

Download Report

Transcript الفصل الثاني

1
‫ عال‬113 ‫مقرر‬
‫الفصل الثاني‬
Chapter 2- Arrays
2.1
Introduction
• Arrays
– Structures of related data items
– Static entity (same size throughout program)
 2003 Prentice Hall, Inc. All rights reserved.
2
4.2
Arrays
• Array
– Consecutive group of memory locations
– Same name and type (int, char, etc.)
• To refer to an element
– Specify array name and position number (index)
– Format: arrayname[ position number ]
– First element at position 0
• N-element array c
c[ 0 ], c[ 1 ] … c[ n - 1 ]
– Nth element as position N-1
 2003 Prentice Hall, Inc. All rights reserved.
3
4.2
Arrays
• Array elements like other variables
– Assignment, printing for an integer array c
c[ 0 ] = 3;
cout << c[ 0 ];
• Can perform operations inside subscript
c[ 5 – 2 ] same as c[3]
 2003 Prentice Hall, Inc. All rights reserved.
4
4.2
Name
that
this
same
Arrays
of array (Note
all elements of
array have the
name, c)
c[0]
-45
c[1]
6
c[2]
0
c[3]
72
c[4]
1543
c[5]
-89
c[6]
0
c[7]
62
c[8]
-3
c[9]
1
c[10]
6453
c[11]
78
Position number of the
element within array c
 2003 Prentice Hall, Inc. All rights reserved.
5
4.3
Declaring Arrays
• When declaring arrays, specify
– Name
– Type of array
• Any data type
– Number of elements
– type arrayName[ arraySize ];
int c[ 10 ]; // array of 10 integers
float d[ 3284 ]; // array of 3284 floats
• Declaring multiple arrays of same type
– Use comma separated list, like regular variables
int b[ 100 ], x[ 27 ];
 2003 Prentice Hall, Inc. All rights reserved.
6
4.4
Examples Using Arrays
• Initializing arrays
– For loop
• Set each element
– Initializer list
• Specify each element when array declared
int n[ 5 ] = { 1, 2, 3, 4, 5 };
• If not enough initializers, rightmost elements 0
• If too many syntax error
– To set every element to same value
int n[ 5 ] = { 0 };
– If array size omitted, initializers determine size
int n[] = { 1, 2, 3, 4, 5 };
• 5 initializers, therefore 5 element array
 2003 Prentice Hall, Inc. All rights reserved.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
7
// Fig. 4.3: fig04_03.cpp
// Initializing an array.
#include <iostream>
Outline
fig04_03.cpp
(1 of 2)
using std::cout;
using std::endl;
#include <iomanip>
using std::setw;
int main()
{
int n[ 10 ];
Declare a 10-element array of
integers.
to 0 using a
for loop. Note that the array
nhas
to elements
0
n[0] to n[9].
array
// n is an array of Initialize
10 integers
// initialize elements of array
for ( int i = 0; i < 10; i++ )
n[ i ] = 0;
// set element at location i to 0
cout << "Element" << setw( 13 ) << "Value" << endl;
// output contents of array n in tabular format
for ( int j = 0; j < 10; j++ )
cout << setw( 7 ) << j << setw( 13 ) << n[ j ] << endl;
 2003 Prentice Hall, Inc.
All rights reserved.
26
27
28
return 0;
// indicates successful termination
8
Outline
} // end main
Element
0
1
2
3
4
5
6
7
8
9
Value
0
0
0
0
0
0
0
0
0
0
fig04_03.cpp
(2 of 2)
fig04_03.cpp
output (1 of 1)
 2003 Prentice Hall, Inc.
All rights reserved.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
// Fig. 4.4: fig04_04.cpp
// Initializing an array with a declaration.
#include <iostream>
using std::cout;
using std::endl;
9
Outline
fig04_04.cpp
(1 of 1)
#include <iomanip>
using std::setw;
Note the use of the initializer
int main()
list.
{
// use initializer list to initialize array n
int n[ 10 ] = { 32, 27, 64, 18, 95, 14, 90, 70, 60, 37 };
cout << "Element" << setw( 13 ) << "Value" << endl;
// output contents of array n in tabular format
for ( int i = 0; i < 10; i++ )
cout << setw( 7 ) << i << setw( 13 ) << n[ i ] << endl;
return 0;
// indicates successful termination
} // end main
 2003 Prentice Hall, Inc.
All rights reserved.
Element
0
1
2
3
4
5
6
7
8
9
Value
32
27
64
18
95
14
90
70
60
37
10
Outline
fig04_04.cpp
output (1 of 1)
 2003 Prentice Hall, Inc.
All rights reserved.
11
4.4
Examples Using Arrays
• Array size
– Can be specified with constant variable (const)
• const int size = 20;
– Constants cannot be changed
– Constants must be initialized when declared
– Also called named constants or read-only variables
 2003 Prentice Hall, Inc. All rights reserved.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
12
// Fig. 4.5: fig04_05.cpp
// Initialize array s to the even integers from 2 to 20.
#include <iostream>
Outline
fig04_05.cpp
(1 of 2)
using std::cout;
using std::endl;
#include <iomanip>
using std::setw;
Note use of const keyword.
can
int main()
Only const variables
{
specify array sizes.
// constant variable can be used to specify array size
const int arraySize = 10;
int s[ arraySize ];
// array s has 10 elements
for ( int i = 0; i < arraySize; i++ )
s[ i ] = 2 + 2 * i;
// set the values
cout << "Element" << setw( 13 ) << "Value" << endl;
The program becomes more
scalable when we set the array
size using a const variable.
We can change arraySize,
and all the loops will still
work (otherwise, we’d have to
update every loop in the
program).
 2003 Prentice Hall, Inc.
All rights reserved.
24
25
26
27
28
29
30
// output contents of array s in tabular format
for ( int j = 0; j < arraySize; j++ )
cout << setw( 7 ) << j << setw( 13 ) << s[ j ] << endl;
return 0;
// indicates successful termination
13
Outline
fig04_05.cpp
(2 of 2)
} // end main
Element
0
1
2
3
4
5
6
7
8
9
Value
2
4
6
8
10
12
14
16
18
20
fig04_05.cpp
output (1 of 1)
 2003 Prentice Hall, Inc.
All rights reserved.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// Fig. 4.6: fig04_06.cpp
// Using a properly initialized constant variable.
#include <iostream>
Outline
fig04_06.cpp
(1 of 1)
using std::cout;
using std::endl;
int main()
{
const int x = 7;
14
Proper initialization of
const variable.
fig04_06.cpp
output (1 of 1)
// initialized constant variable
cout << "The value of constant variable x is: "
<< x << endl;
return 0;
// indicates successful termination
} // end main
The value of constant variable x is: 7
 2003 Prentice Hall, Inc.
All rights reserved.
1
2
3
4
5
6
7
8
9
10
11
12
// Fig. 4.7: fig04_07.cpp
// A const object must be initialized.
int main()
{
const int x;
// Error: x
Uninitialized const results
in a syntax error. Attempting
to modify the const is
must
be initialized
another
error.
x = 7;
// Error: cannot modify a const variable
return 0;
// indicates successful termination
15
Outline
fig04_07.cpp
(1 of 1)
fig04_07.cpp
output (1 of 1)
} // end main
d:\cpphtp4_examples\ch04\Fig04_07.cpp(6) : error C2734: 'x' :
const object must be initialized if not extern
d:\cpphtp4_examples\ch04\Fig04_07.cpp(8) : error C2166:
l-value specifies const object
 2003 Prentice Hall, Inc.
All rights reserved.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
// Fig. 4.8: fig04_08.cpp
// Compute the sum of the elements of the array.
#include <iostream>
using std::cout;
using std::endl;
int main()
{
const int arraySize = 10;
16
Outline
fig04_08.cpp
(1 of 1)
fig04_08.cpp
output (1 of 1)
int a[ arraySize ] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
int total = 0;
// sum contents of array a
for ( int i = 0; i < arraySize; i++ )
total += a[ i ];
cout << "Total of array element values is " << total << endl;
return 0;
// indicates successful termination
} // end main
Total of array element values is 55
 2003 Prentice Hall, Inc.
All rights reserved.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
17
// Fig. 4.9: fig04_09.cpp
// Histogram printing program.
#include <iostream>
Outline
fig04_09.cpp
(1 of 2)
using std::cout;
using std::endl;
#include <iomanip>
using std::setw;
int main()
{
const int arraySize = 10;
int n[ arraySize ] = { 19, 3, 15, 7, 11, 9, 13, 5, 17, 1 };
cout << "Element" << setw( 13 ) << "Value"
<< setw( 17 ) << "Histogram" << endl;
// for each element of array n, output a bar in histogram
for ( int i = 0; i < arraySize; i++ ) {
Prints asterisks corresponding
cout << setw( 7 ) << i << setw( 13 )
to size of array element,
<< n[ i ] << setw( 9 );
n[i].
for ( int j = 0; j < n[ i ]; j++ )
cout << '*';
// print one bar
 2003 Prentice Hall, Inc.
All rights reserved.
27
28
29
30
31
32
33
34
18
cout << endl;
// start next line of output
} // end outer for structure
return 0;
// indicates successful termination
Value
19
3
15
7
11
9
13
5
17
1
fig04_09.cpp
(2 of 2)
fig04_09.cpp
output (1 of 1)
} // end main
Element
0
1
2
3
4
5
6
7
8
9
Outline
Histogram
*******************
***
***************
*******
***********
*********
*************
*****
*****************
*
 2003 Prentice Hall, Inc.
All rights reserved.
19
4.4
Examples Using Arrays
• Strings (more in ch. 5)
– Arrays of characters
– All strings end with null ('\0')
– Examples
• char string1[] = "hello";
– Null character implicitly added
– string1 has 6 elements
• char string1[] = { 'h', 'e', 'l', 'l',
– Subscripting is the same
String1[ 0 ] is 'h'
string1[ 2 ] is 'l'
 2003 Prentice Hall, Inc. All rights reserved.
'o', '\0’ };
20
4.4
Examples Using Arrays
• Input from keyboard
char string2[ 10 ];
cin >> string2;
– Puts user input in string
• Stops at first whitespace character
• Adds null character
– If too much text entered, data written beyond array
• We want to avoid this (section 5.12 explains how)
• Printing strings
– cout << string2 << endl;
• Does not work for other array types
– Characters printed until null found
 2003 Prentice Hall, Inc. All rights reserved.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
// Fig. 4_12: fig04_12.cpp
// Treating character arrays as strings.
#include <iostream>
using std::cout;
using std::cin;
using std::endl;
int main()
{
char string1[ 20 ],
// reserves 20 characters
char string2[] = "string literal"; // reserves 15 characters
// read string from user into array string2
cout << "Enter the string \"hello there\": ";
cin >> string1; // reads "hello" [space terminates input]
21
Outline
fig04_12.cpp
(1 of 2)
Two different ways to declare
strings. string2 is
initialized, and its size
determined automatically .
Examples of reading strings
from the keyboard and
printing them out.
// output strings
cout << "string1 is: " << string1
<< "\nstring2 is: " << string2;
cout << "\nstring1 with spaces between characters is:\n";
 2003 Prentice Hall, Inc.
All rights reserved.
24
25
26
27
28
29
30
31
32
33
// output characters until null character is reached
for ( int i = 0; string1[ i ] != '\0'; i++ )
cout << string1[ i ] << ' ';
cin >> string1; // reads "there"
cout << "\nstring1 is: " << string1 << endl;
return 0;
// indicates successful termination
22
Outline
Can access the characters in a
fig04_12.cpp
string using array notation.
of 2)
The loop ends when the (2
null
character is found.
fig04_12.cpp
output (1 of 1)
} // end main
Enter the string "hello there": hello there
string1 is: hello
string2 is: string literal
string1 with spaces between characters is:
h e l l o
string1 is: there
 2003 Prentice Hall, Inc.
All rights reserved.
23
4.9
Multiple-Subscripted Arrays
• Multiple subscripts
– a[ i ][ j ]
– Tables with rows and columns
– Specify row, then column
– “Array of arrays”
• a[0] is an array of 4 elements
• a[0][0] is the first element of that array
Row 0
Column 0
a[ 0 ][ 0 ]
Column 1
a[ 0 ][ 1 ]
Column 2
a[ 0 ][ 2 ]
Column 3
a[ 0 ][ 3 ]
Row 1
a[ 1 ][ 0 ]
a[ 1 ][ 1 ]
a[ 1 ][ 2 ]
a[ 1 ][ 3 ]
Row 2
a[ 2 ][ 0 ]
a[ 2 ][ 1 ]
a[ 2 ][ 2 ]
a[ 2 ][ 3 ]
Column subscript
Array name
Row subscript
 2003 Prentice Hall, Inc. All rights reserved.
24
4.9
Multiple-Subscripted Arrays
• To initialize
– Default of 0
– Initializers grouped by row in braces
int b[ 2 ][ 2 ] = { { 1, 2 }, { 3, 4 } };
Row 0
Row 1
int b[ 2 ][ 2 ] = { { 1 }, { 3, 4 } };
 2003 Prentice Hall, Inc. All rights reserved.
1
2
3
4
1
0
3
4
25
4.9
Multiple-Subscripted Arrays
• Referenced like normal
cout << b[ 0 ][ 1 ];
– Outputs 0
1
0
3
4
– Cannot reference using commas
cout << b[ 0, 1 ];
• Syntax error
• Function prototypes
– Must specify sizes of subscripts
• First subscript not necessary, as with single-scripted arrays
– void printArray( int [][ 3 ] );
 2003 Prentice Hall, Inc. All rights reserved.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
26
// Fig. 4.22: fig04_22.cpp
// Initializing multidimensional arrays.
#include <iostream>
using std::cout;
using std::endl;
void printArray( int [][ 3 ] );
Outline
Note the format of the
prototype.
fig04_22.cpp
(1 of 2)
Note the various initialization
styles. The elements in
array2 are assigned to the
first row and then the second.
int main()
{
int array1[ 2 ][ 3 ] = { { 1, 2, 3 }, { 4, 5, 6 } };
int array2[ 2 ][ 3 ] = { 1, 2, 3, 4, 5 };
int array3[ 2 ][ 3 ] = { { 1, 2 }, { 4 } };
cout << "Values in array1 by row are:" << endl;
printArray( array1 );
cout << "Values in array2 by row are:" << endl;
printArray( array2 );
cout << "Values in array3 by row are:" << endl;
printArray( array3 );
return 0;
// indicates successful termination
} // end main
 2003 Prentice Hall, Inc.
All rights reserved.
28
29
30
31
32
33
34
35
36
37
38
39
40
41
27
For loops are often used to
// function to output array with two rows and three columns
iterate through arrays. Nested
void printArray( int a[][ 3 ] )
loops are helpful with
{
multiple-subscripted
arrays.
for ( int i = 0; i < 2; i++ ) {
// for
each row
for ( int j = 0; j < 3; j++ )
cout << a[ i ][ j ] << ' ';
cout << endl;
Outline
fig04_22.cpp
(2 of 2)
// output column values
fig04_22.cpp
output (1 of 1)
// start new line of output
} // end outer for structure
} // end function printArray
Values in array1 by row are:
1 2 3
4 5 6
Values in array2 by row are:
1 2 3
4 5 0
Values in array3 by row are:
1 2 0
4 0 0
 2003 Prentice Hall, Inc.
All rights reserved.