0% found this document useful (0 votes)
42 views40 pages

Eee145 ch5 Arrays8591

The document discusses arrays in C++. It begins by motivating the use of arrays to define multiple variables of the same type without writing repetitive code. It then provides examples of using arrays, including to find the average grade of 300 students, identify students below the average, calculate variance, create a histogram, and check for symmetry. The document notes that arrays have a fixed size set at compile-time, and discusses passing arrays as function parameters.

Uploaded by

Sems Krks
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPTX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
42 views40 pages

Eee145 ch5 Arrays8591

The document discusses arrays in C++. It begins by motivating the use of arrays to define multiple variables of the same type without writing repetitive code. It then provides examples of using arrays, including to find the average grade of 300 students, identify students below the average, calculate variance, create a histogram, and check for symmetry. The document notes that arrays have a fixed size set at compile-time, and discusses passing arrays as function parameters.

Uploaded by

Sems Krks
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPTX, PDF, TXT or read online on Scribd
You are on page 1/ 40

EEE 145

Programming in C++
Arrays

0
Motivation
• You may need to define many variables of
the same type.
– Defining so many variables one by one is
cumbersome.
• Probably you would like to execute similar
statements on these variables.
– You wouldn't want to write the same
statements over and over for each variable.

1
Example #1
• Write a program that reads the grades
of 300 students in EEE145 and finds the
average.

2
Example #1 (cont'd)
• Soln:
#include <iostream>
using namespace std;

int main()
{ int i, sum=0, grade; float avg;

for (i=0; i<300; i++)


This was simple.
{ cin>>grade; Since we don't need to store all
sum += grade; values, taking the sum is enough.
So, we don't need an array.
}
avg = sum/300.0;
cout<<"Average = " <<avg<<endl;
return 0;
}
3
Example #2
• Write a program that reads the grades
of 300 students in EEE145 and finds
those that are below the average.

4
Example #2 (cont'd)
• Soln #1:
#include <iosteam>
using namespace std;
int main()
{ int i, sum=0, grade; float avg;
for (i=0; i<300; i++)
{ cin>>grade;
sum += grade;
} WRONG!
avg = sum/300.0; "grade" contains the score of the
last student.
for (i=0; i<300; i++) You have already lost the
if (grade<avg) previous 299 scores.
cout<<"Below avg: " <<grade<<endl;
return 0;
}

5
Example #2 (cont'd)
• Soln #2:
#include <iostream>
using namespace std;
int main()
{ int i,sum,gr0,gr1,gr2,...,gr349; You cannot skip these with "..."
float avg; You have to repeat each of
cin>>gr0; these statements 300 times.
cin>>gr1;
cin>>gr2;
...
sum = gr0+gr1+gr2+...+gr349;
avg = sum/300.0;
if (gr0<ave)
cout<<"Below avg: " << gr0 << endl; What is still wrong here?
if (gr1<ave)
cout<<"Below avg: " << gr1 << endl;
if (gr2<ave)
cout<<"Below avg: " << gr2 << endl;
...
if (gr299<ave)
cout<<"Below avg: " << gr299 << endl;
return 0;
}

6
Example #2 (cont'd) Defines an array consisting of 350
integer values.
In the definition, the value in the
brackets is the number of
• Soln #3: elements (size).
#include <iostream>
using namespace std;
int main()
{ int i, sum=0, grade[300]; float avg;
This means the ith
for (i=0; i<300; i++) element of the array.
{ cin >> grade[i]; Here, the value in the
sum += grade[i]; brackets is the index,
} not the size.
avg = sum/300.0;
for (i=0; i<300; i++)
if (grade[i]<avg)
cout<<"Below avg: "<<grade[i]<<endl;
return 0;
}

7
Arrays
• An array is a variable that is a collection of multiple values of the
same type.
• Syntax:
type array_name[int_constant_value]={initializer_list};
• The size has to be of int type and must be a fixed value (i.e., known
at compile time).
• You can define an array of any type (eg: int, float, enum
student_type, etc.)
• All elements of the array have the same type.
• You cannot use the {} format for initialization after variable
definition,
ie, int a[3]={5,8,2} is correct, but

int a[3];
...
a={5,8,2} is wrong.

8
Arrays
• The index must of int type.
int k[5];
k[k[4]/k[1]]=2; /* Correct as long as k[4]/k[1] is nonnegative*/
k[1.5] = 3; /* Error since 1.5 is not int */

9
Arrays
• The lower bound must be nonnegative.
float m[8]; int i;

m[-2] = 9.2; /* Syntax error */

i=-2;
m[i] = 9.2; /* Run-time error */

10
Initializing Arrays
• The elements of a local array are
arbitrary (as all other local variables).
• The elements of a global array are
initialized to zero by default (as all other
global variables).

11
Initializing Arrays
• You may initialize an array during
definition as follows:
int array[5] = {10, 8, 36, 9, 13};
• However, you cannot perform such an
initialization after the definition, i.e.,
int array[5];
array = {10, 8, 36, 9, 13};
is syntactically wrong.

12
Initializing Arrays
• If the number of initializers is less than the
size of the array:
– initialization starts by assigning the first value to
the first element and continues as such,
– remaining elements are initialized to zero (even if
the array was local)
• Eg: For the definition
int array[5] = {10, 8, 36};
the first 3 elements get the values 10, 8, and 36,
respectively. array[3] and array[4] become 0.

13
Initializing Arrays
• If the number of initializers is more than the
size of the array, it is a syntax error.
• It is also possible to skip the size of the array
iff the array is explicitly initialized.
– In this case, the compiler fills in the size to the
number of initializers.
– Eg: For the definition
int array[ ] = {5, 9, 16, 3, 5, 2, 4};
the compiler acts as if the array was defined as
follows:
int array[7] = {5, 9, 16, 3, 5, 2, 4};

14
Example #3
• Read 100 integers and find the unbiased variance.

#include<iostream>
using namespace std;
int main()
{ int X[100], i;
Unbiased variance of a sample is
float avg=0,var=0; defined as

for (i=0; i<100; i++) N


{ cin >> X[i]; (X
i 1
i   ) 2

avg += X[i];
} N 1
avg /= 100;
for (i=0; i<100; i++)
var += (X[i]-avg) * (X[i]-avg);
var /= 99;
cout<<"variance: " << var << endl;;
return 0;
}

15
Example #4
• Find the histogram of the scores in Midterm 1.

#include <iostream>
using namespace std;
int main()
{ int i, hist[101]={0}, score;

for (i=0; i<300; i++)


{ cin >> score;
hist[score]++;
}
for (i=0; i<101; i++)
cout<<hist[i]<<" student(s) got “<< i <<endl;
return 0;
}

16
Example #5
• Check if the array in the input is symmetric (eg: 8, 10, 6, 2, 6, 10, 8)

#include <iostream>
#define SIZE 10
using namespace std;

int main()
{ int numbers[SIZE], i;

for (i=0; i<SIZE; i++)


cin>>numbers[i];
for (i=0; i<SIZE/2; i++)
if (numbers[i] != numbers[SIZE-1-i])
break;
cout<< "It is ";
if (i!=SIZE/2)
cout<<"not ";
cout<<"symmetric“<<endl;
return 0;
}

17
Arrays Have Fixed Size!
• The size of an array must be stated at
compile time.
• This means you cannot define the size
when you run the program. You should fix
it while writing the program.
• This is a very serious limitation for
arrays. Arrays are not fit for dynamic
programming.
– You should use pointers for this purpose.

18
Arrays Have Fixed Size!
• What you can do is to define very large
arrays, making the size practically infinite
 Wastes too much memory.
• Your program may exceed the maximum
memory limit for the process.

19
Arrays as Parameters
• Although you write like a value parameter,
an array is always passed by reference
(variable parameter).
– Therefore, when you make a change in an
element of an array in the function, the
change is visible from the caller.

20
Example #7
• Fill in an array of integer from input.
#include <iostream>
using namespace std;
void read_array(int ar[10])
{ int i;
for (i=0; i<10; i++)
cin >> ar[i];
}
int main()
{ int a[10], i;
read_array(a);
for (i=0; i<10; i++)
cout<< a[i]<< " ";
return 0;
}

21
Arrays as Parameters
• The size you specify in the function header is not important; you
may even skip it.
• Eg:
void func(int arr[5])
{ int i;
for (i=0; i<10; i++)
arr[i]=i;
}
int main()
{ int a[10], i;
func(a);
for (i=0; i<10; i++)
cout<< a[i]<< " ";
return 0;
}
• This will work without any problems though the function header is
misleading.

22
Example #8
• Write a function that inverts its array
parameter.
void invert(int ar[10])
{ int i, temp;
for (i=0; i<10; i++)
What is wrong
{ temp=ar[i];
here?
ar[i] = ar[9-i];
ar[9-i] = temp;
}
}

23
Example #9: Bubble Sort
• Sort the values in an array in ascending order.
#include <iostream>
using namespace std;
void read_array(int ar[], int size)
{ int i;
for (i=0; i<size; i++)
cin>> ar[i];
}

void print_array(int ar[], int size)


{ int i;
for (i=0; i<size; i++)
cout<< ar[i] << " ";
cout<<"\n";
}

void swap(int *a, int *b)


{ int temp;
temp = *a;
*a = *b;
*b = temp;
}

24
Example #9: Bubble Sort (cont'd)
void bubble_sort(int ar[], int size)
{ int i, j;
for (i = 0; i < size; i++)
for (j = i + 1; j < size; j++)
if (ar[i] > ar[j])
swap(&ar[i],&ar[j]);
}

int main()
{ int ar[10];
read_array(ar,10);
bubble_sort(ar,10);
print_array(ar,10);
return 0;
}

25
Multi-dimensional arrays

26
Motivation
• If the problem implies a physical context
of several dimensions, a multidimensional
array may be used.
– Chairs in a classroom
– Rooms on different floors of a building
– Coordinates on a map
– Coordinates in space
– A timetable (hours versus days)

27
2D Arrays
• In a classroom where the chairs are
organized as a grid of 8 rows and 10
columns
int chair[8][10];
for (i=0; i<8; i++)
for (j=0; j<10; j++)
cin>>chair[i][j];

28
Example #1
• Construct a student's timetable. Read
course code (assume all courses have
distinct codes).
int table[8][5];
for (i=0; i<8; i++)
for (j=0; j<5; j++)
cin>> table[i][j];

29
Example #2
• Store a map of every pixel on the screen
(256 colors/pixel). Assume a resolution of
1024x768.
unsigned char screen[1024][768];

30
Example #3
• Read the number of inhabitants in every
flat in a building. Assume there are 10
floors with 5 flats in every floor. Find the
flats that have occupancy above the
average.

31
Example #3
int flat[10][5], i, j, sum=0;
float avg;

for (i=0; i<10; i++)


for (j=0; j<5; j++)
{ cin>> flat[i][j];
sum += flat[i][j];
}
avg = sum/50.0;
for (i=0; i<10; i++)
for (j=0; j<5; j++)
if (flat[i][j]>avg)
cout<<“On floor “<<i<<“ in flat “<<j;

32
Example #4
• Mark every soldier with "1" on a map. Rest
is all zeros.
• Find the coordinates of all soldiers that
can reach a given coordinate in 10 steps.

33
Example #4
#define ABS(x) ((x)<0) ? -(x) : (x)
int map[1000][1000], int coord_x, coord_y, i, j;

for (i=0; i<1000; i++)


for (j=0; j<1000; j++)
cin>> map[i][j];
cin>> coord_x >> coord_y; /* Read coordinates*/

for (i=coord_x-10; i<=coord_x+10; i++)


for (j=coord_y-10; j<=coord_y+10; j++)
if (map[i][j])
if ((ABS(coord_x-i)+ABS(coord_y-j) <= 10)
cout<< i <<“ “<< j;

34
35
36
37
38
Homework
1. Write a function to calculate the trace
of a square matrix.
2. Write a function to find the dot product
of two vectors.
3. Write a function that calculate the
transpose of a matrix.
4. Write a program that inputs a matrix,
then finds the maximum element
together with its row and column index.
39

You might also like