engineering problem solving with c++ an object based approach chapter 6 one-dimensional arrays

24
Engineering Problem Solving With C++ An Object Based Approach Chapter 6 One-Dimensional Arrays

Post on 20-Dec-2015

222 views

Category:

Documents


3 download

TRANSCRIPT

Page 1: Engineering Problem Solving With C++ An Object Based Approach Chapter 6 One-Dimensional Arrays

Engineering Problem Solving With C++

An Object Based ApproachChapter 6

One-Dimensional Arrays

Page 2: Engineering Problem Solving With C++ An Object Based Approach Chapter 6 One-Dimensional Arrays

Arrays

• An array is a collection of data which shares a common identifier and data type.

• Individual elements of the array are specified using offsets referred to as subscripts or indices.

• In C++ the offsets or subscripts always start with 0.

Page 3: Engineering Problem Solving With C++ An Object Based Approach Chapter 6 One-Dimensional Arrays

Defining Arrays

• General formdata_type array_identifier[size];The size of the array may be specified by a defined constant or constant literal.

• Example:double m[8];

m[0] m[1] m[2] m[3] m[4] m[5] m[6] m[7]

Page 4: Engineering Problem Solving With C++ An Object Based Approach Chapter 6 One-Dimensional Arrays

Initializing Arrays• Initializing the array when declared

char vowels[5] = {'a', 'e', 'i', 'o', 'u'};bool ansKey[] ={true, true, false, true, false, false};char word[] = "Hello";double rainfall[] = {.25, 0.0, 0.0, .5, .3, 0.0, 0.0}

vowels 'a' 'e' 'i' 'o' 'u'

true falsefalsetruefalsetrueansKey

word 'H' 'e' 'l' 'l' 'o' '\0'

.25 0.0 0.0 .5 .3 0.0 0.0rainfall

Page 5: Engineering Problem Solving With C++ An Object Based Approach Chapter 6 One-Dimensional Arrays

Accessing Array Elements

• Subscripts are used to access individual elements of an array.

• General format:array_identifier[index]

• Examplefor (int I=0; I<8; I++)

m[I] = double(I) + 0.5;• Subscripts may be any integer expression.

Page 6: Engineering Problem Solving With C++ An Object Based Approach Chapter 6 One-Dimensional Arrays

Functions and arrays

• An array identifier references the first element of the array. When arrays are passed as arguments to functions, the address of the array is passed, thus by default, arrays are always passed by reference.

• Generally we specify additional parameters with the array to provided information regarding the number of elements in the array.

Page 7: Engineering Problem Solving With C++ An Object Based Approach Chapter 6 One-Dimensional Arrays

Example

#include <iostream>using namespace std;const int maxSize=20;//function prototypesvoid ReadArray(double a[], int &howMany);int FindMin(const double a[], int howMany);

int main( ){ double darr[maxSize];

int cnt, where;ReadArr(darr, cnt);where = FindMin(darr, cnt);cout << "The smallest value in the array is "

<< darr[where] << endl;}

Page 8: Engineering Problem Solving With C++ An Object Based Approach Chapter 6 One-Dimensional Arrays

// This function inputs values into an array until –99 or array

// limit reachedvoid ReadArray(double a[], int & howMany){ double temp;

howMany = 0;cin >> temp;while ((howMany < maxSize) && (temp != -99)){ a[howMany] = temp;

howMany++;cin >> temp;

}}

Page 9: Engineering Problem Solving With C++ An Object Based Approach Chapter 6 One-Dimensional Arrays

//This function returns the subscript of the minimum value

// in an array int FindMin(const double a[], int howMany){ int minElem = 0;

for (int I=1; I<howMany; I++)if (a[I] < a[minElem])

minElem = I;return minElem;

}

Page 10: Engineering Problem Solving With C++ An Object Based Approach Chapter 6 One-Dimensional Arrays

Function overloading

• In C++ we can have many functions with the same name provided the function signature is different.

• The function signature includes the name of the function and the parameter list.

Page 11: Engineering Problem Solving With C++ An Object Based Approach Chapter 6 One-Dimensional Arrays

#include <iostream>using namespace std;int Area (int Side); // Area of Squareint Area (int Length, int Width); // Area of Rectangledouble Area (double Radius); // Area of Circleconst double PI= 3.14159;int main() { cout << "Area of Square:" << Area(10) << endl;

cout << "Area of Rect:" << Area(8,12) << endl; cout << "Area of Circle: " << Area(2.5) << endl;

return 0; }

Example

Page 12: Engineering Problem Solving With C++ An Object Based Approach Chapter 6 One-Dimensional Arrays

int Area (int Side) // Area of Square

{ return (Side * Side);

}

int Area (int Length, int Width) // Area of Rectangle

{ return (Length * Width);

}

double Area (double Radius) // Area of Circle

{ return (PI* Radius * Radius);

}

Overloaded Function Implementations

Page 13: Engineering Problem Solving With C++ An Object Based Approach Chapter 6 One-Dimensional Arrays

Sorting Algorithms

• Sorting algorithms arrange the data into either ascending or descending order, based on the values in the array.

• Sorting algorithms to be discussed– Selection sort– Quick sort – covered in Data Structures

Page 14: Engineering Problem Solving With C++ An Object Based Approach Chapter 6 One-Dimensional Arrays

Basic Premise of Selection Sort

• Find minimum value, place it in the first position.

• Find next minimum value, place it in the second position.

• Continue doing this until you have placed the second to the largest value in the second to the last position.

Page 15: Engineering Problem Solving With C++ An Object Based Approach Chapter 6 One-Dimensional Arrays

Practice!

• Fill in the following table to show how the array is sorted into ascending order using the selection sort. arr[0] arr[1] arr[2] arr[3] arr[4]

29 45 18 51 36

18 45 29 51 36swap min and arr[1] 18 29 45 51 36

18 29 36 51 45

18 29 36 45 51

swap min and arr[0]

Page 16: Engineering Problem Solving With C++ An Object Based Approach Chapter 6 One-Dimensional Arrays

Searching Unordered Arrays

• Simple Sequential Search– Examine each element starting with the first

one, until either a match is found or the end of the list is reached

• Can be implemented with a function which returns true if in the list and false if not found

• Can be implemented with a function which returns the location of the element if found, or –1 if not found

Page 17: Engineering Problem Solving With C++ An Object Based Approach Chapter 6 One-Dimensional Arrays

Searching Ordered Lists

• Modified Sequential Search– Stops either when item is found, or when

the element examined is past where the item should be in the list.

• Binary Search– Examine middle element, if not found

determine if item should be in top part or bottom part of list.

– Repeat with appropriate sublist, until sublist is empty.

Page 18: Engineering Problem Solving With C++ An Object Based Approach Chapter 6 One-Dimensional Arrays

Example of Binary Search for 48

7059564337282214115arr[0] arr[9]

arr[mid] arr[9]arr[5]

4337

arr[5] arr[6]mid is 5

43arr[6]

arr[mid]

mid is 6

mid is 7 7059564337

Page 19: Engineering Problem Solving With C++ An Object Based Approach Chapter 6 One-Dimensional Arrays

Character Strings

• C style strings– array of characters terminated by \0 character– remember when declaring the character array

to add an extra space to the array for '\0'– literal string constants are enclosed in double

quote marks, "a string"– file names when using file I/O must be C style

strings.

Page 20: Engineering Problem Solving With C++ An Object Based Approach Chapter 6 One-Dimensional Arrays

Input and strings

• >> uses whitespace (' ', '\t', '\n') to determine the beginning and end of data

• whitespace characters can not be read using >>, to read strings with embedded whitespace use getline()

char phrase[30];getline(phrase, 30);

• peek() returns the next character in a stream without removing it from the stream

Page 21: Engineering Problem Solving With C++ An Object Based Approach Chapter 6 One-Dimensional Arrays

C++ functions for C style strings

#include <iostream>#include <cstring>uses namespace std;int main(){ char str1[30]="John", str2[30]="Johnson";

char phrase[20]="'s shirt was green", sentence[30];if (strcmp(str1,str2) < -1) strcpy (sentence, str1); // puts "John" into sentenceelse strcpy (sentence,str2); // puts "Johnson into sentencestrcat(sentence, phrase);cout << "Sentence is: " << sentence << endl;return 0;

}

Page 22: Engineering Problem Solving With C++ An Object Based Approach Chapter 6 One-Dimensional Arrays

The string class

• include <string>• declaring string objects

string word="Engineering";string word2;

• string member functions– size( )– empty( )– substr (int start, int len)– c_str()

Page 23: Engineering Problem Solving With C++ An Object Based Approach Chapter 6 One-Dimensional Arrays

Overloaded operators for string class

• relational operators < > == <= >=

• concatenation + +=

• assignment =

Page 24: Engineering Problem Solving With C++ An Object Based Approach Chapter 6 One-Dimensional Arrays

Example Using string Class

#include <iostream>#include <string>uses namespace std;int main(){ string str1="John", str2="Johnson";

string phrase = "'s shirt was green", sentence;if (str1 < str2) sentence = str1; // puts "John" into sentenceelse sentence = str2; // puts "Johnson into sentencesentence += phrase;cout << "Sentence is: " << sentence << endl;return 0;

}