30
Thursday, January 04, 2007 I think and think for months and years. Ninety-nine times, the conclusion is false. The hundredth time I am right. - Albert Einstein

Thursday, January 04, 2007 I think and think for months and years. Ninety-nine times, the conclusion is false. The hundredth time I am right. - Albert

  • View
    213

  • Download
    0

Embed Size (px)

Citation preview

Thursday, January 04, 2007

I think and think for months and years. Ninety-nine times, the

conclusion is false. The hundredth time I am right.

- Albert Einstein

Arrays Review

Arrays used for grouping of related variables.

int a1; int a[5];int a2;

int a3;

int a4;

int a5;Individual elements of array accessed by

indices.Easier to use in loops.

Arrays Reviewint a[5] = {10, 20, 30, 40, 50};a[0] is 10a[1] is 20a[2] is 30a[3] is 40a[4] is 50No boundary checking of arrays because of

efficiency reasons.Error checking can slow down the program

execution.

A variable is a named memory location that may be assigned a value.

10

20

30

40

50

a[0]

a[1]

a[2]

a[3]

a[4]

0x0012F578

0x0012F57C

0x0012F580

0x0012F584

0x0012F588

What is the difference between two memory addresses?

Static array declaration requires a constantint my_array[10]; //ok

const int x=10;int my_array[x]; //also ok

#define size 10int main(){

int a[size]; //also okreturn 0;

}

What is wrong here?

const int x;

The word "algorithm" itself is quite interesting; at first glance it may look as though someone intended to write "logarithm" but jumbled up the first four letters. The word did not appear in Webster's New World Dictionary as late as 1957; we find only the older form "algorism" with its ancient meaning, i.e., the process of doing arithmetic using Arabic numerals. In the middle ages, abacists computed on the abacus and algorists computed by algorism. Following the middle ages, the origin of this word was in doubt, and early linguists attempted to guess at its derivation by making combinations like algiros [painful] + arithmos [number]; others said no, the word comes from "King Algor of Castile."

Finally, historians of mathematics found the true origin of the word algorism: it comes from the name of a famous Persian textbook author, Abu Ja`far Mohammed ibn Mûsa al-Khowârizmî - literally, "Father of Ja´far, Mohammed, son of Moses, native of Khowârizm." Khowârizm is today the small Soviet city of Khiva. Al-Khowârizmî wrote the celebrated book Kitab al jabr w'al-muqabala ("Rules of restoration and reduction"); another word, "algebra", stems from the title of his book, although the book wasn't really very algebraic.

Gradually the form and meaning of "algorism" became corrupted; and changed from "algorism" to "algorithm”.

Sorting an array

double dArray[10]={34, 5.6, 0.9, 345.7, 54.1, 23.5, 2.5, 6.78, 12.4, 13.9};

Sorting an arrayint main(void){

double dArray[10]={34, 5.6, 0.9, 345.7, 54.1, 23.5, 2.5, 6.78, 12.4, 13.9};int i, j, size=10;double temp;for (i=0; i<size; i++){

for (j=i+1; j<size; j++){if (dArray[j]<dArray[i]){

temp=dArray[j];dArray[j]=dArray[i];dArray[i]=temp;

}}

} //in-place sortingreturn 0; }

Self Test: Sorting an arrayModify the previous program so that it does not

do in-place sorting, but instead stores the sorted list in another array.

Self Test: Sorting an array// Using the bubble sort to order an array.

int main()

{

int nums[10];

int a, b, t;

int size;

size = 10; // number of elements to sort

// give the array some random initial values

for(t=0; t<size; t++) nums[t] = rand();

Self Test: Sorting an array (Simulate) // This is the bubble sort.

for(a=1; a<size; a++)

for(b=size-1; b>=a; b--) {

if(nums[b-1] > nums[b]) { // if out of order

// exchange elements

t = nums[b-1];

nums[b-1] = nums[b];

nums[b] = t;

}

} // This is the end of the bubble sort.

Two Dimensional Arrays

C++ supports multi-dimensional arrays type array_name[row_size][column_size] int matrix[3][4];

row[0]

row[1]

row[2]

Accessing Array Elements

int matrix[3][4]; matrix has 12 integer elements matrix[0][0] element in first row, first column matrix[2][3] element in last row, last column

int main()

{

int i, j, num[3][4];

for(i=0; i<3; ++i) {

for(j=0; j<4; ++j) {

num[i][j] = (i*4)+j+1;

cout << num[i][j] << “\t“;

}

cout << “\n”;

}

return 0;

} // output?

Two Dimensional Arrays

Output:1 2 3 45 6 7 89 10 11 12

int main()

{

int i, j, num[2][6];

for(i=0; i<2; ++i) {

for(j=0; j<6; ++j) {

num[i][j] = (i*6)+j+1;

cout << num[i][j] << “ “;

}

cout << “\n”;

}

return 0;

} // output?

Two Dimensional ArraysWhat happens if I change [3][4] to [2][6]?

Output:1 2 3 4 5 67 8 9 10 11 12

Self Test: Arrays

Print the transpose of a 2-D array.

Two dimensional arrays

int E[][2]={

1,2,

3,4

};

Matrix Multiplication

Nested Loops Review int main()

{

int i, j;

for(i=0; i<3; i++) {

for(j=0; j <= 4; j++)

cout<<“The value of i=” <<i<<“ and j= ”<<j<<“\n”;

cout<<”Out of the inner for-loop\n";

}

return 0;

}

Nested Loops Review The value of i=0 and j=0

The value of i=0 and j=1

The value of i=0 and j=2

The value of i=0 and j=3

The value of i=0 and j=4

Out of the inner for-loop

The value of i=1 and j=0

The value of i=1 and j=1

The value of i=1 and j=2

The value of i=1 and j=3

The value of i=1 and j=4

Out of the inner for-loop

The value of i=2 and j=0

The value of i=2 and j=1

The value of i=2 and j=2

The value of i=2 and j=3

The value of i=2 and j=4

Out of the inner for-loop

Practice Exercise!

Write down the code to multiply two matrices of sizes NxM and MxQ respectively.

StringsOne dimensional arrays is used to create character

stringsIn C++, a string is defined as a character array that is

terminated by a nullA null is specified using ‘\0’ and is zeroBecause of the null terminator, it is necessary to declare

a character to be one character longer than the largest string it will hold.

Character Arrays

char word[6] = “fruit”; //word has size 6

char list[6] = {‘f’,’r’,’u’,’i’,’t’, ‘\0’};

//list of characters, not a string

Not necessary to add null terminator at end of string constants.

Character Arrays

char word[] = “fruit”; //word has size 6

What is wrong with the following?

char name[5]="class";

int MyArray[];

cout<<'3';

cout<<',';

cout<<'\n';

'a' and "a" are different