Presentation is loading. Please wait.

Presentation is loading. Please wait.

C++ Programming Lecture 10 Functions – Part II

Similar presentations


Presentation on theme: "C++ Programming Lecture 10 Functions – Part II"— Presentation transcript:

1 C++ Programming Lecture 10 Functions – Part II
By Ghada Al-Mashaqbeh The Hashemite University Computer Engineering Department

2 The Hashemite University
Outline Introduction. Random numbers generation in C++. enum data type identification and usage. Examples. The Hashemite University

3 Random Number Generation I
Random number generation is used mainly in simulation and game playing based application. The rand() function is used in C++ to generate random integer numbers between 0 and a maximum specified value. rand() function takes nothing (i.e. void) as its arguments and returns an unsigned integer. In order to use this function you must Load <cstdlib> or <stdlib.h> The Hashemite University

4 Random Number Generation II
rand function syntax: int i = rand(); Generates a pseudorandom number between 0 and RAND_MAX (usually 32767) RAND_MAX is a symbolic constant defined in the stdlib header file. 0 <= rand() <= RAND_MAX. A pseudorandom number is a preset sequence of "random" numbers. The same sequence is generated upon every program execution, is this preferred?. This repeated behavior is essentially in programming debug and verification in simulation and other random-based applications. The Hashemite University

5 Random Numbers Seeding I
srand function Jumps to a seeded location in a "random" sequence. Similar to rand() function, srand function is defined in the <stdlib.h> library. Takes an unsigned integer as a seed (i.e. as an argument). It does not return any value (returns void), it just change the random sequence (randomizing the rand() function). Can be called more than once within the same program. Still you need to use the rand() function to get the random numbers. The Hashemite University

6 Random Numbers Seeding II
srand syntax: srand( seed ); seed can be any unsigned integer entered manually be the user or initialized through the program. If the same seed is used every time the program is run we will get the same random sequence (i.e. the same without seed). The Hashemite University

7 Random Numbers Seeding III
To initialize seed value automatically use the following syntax: srand( time( 0 ) ); time( 0 ) Returns the current calendar time in seconds. time() function takes a pointer as an argument and returns unsigned integer. Changes the seed every time the program is run, thereby allowing rand() to generate random numbers. So, it is much better than manual seeding. Need to include the <ctime> or <time.h> library to use the time() function. The Hashemite University

8 Changing Random Numbers Range I
Scaling and shifting Reduces random number to a certain range Modulus ( % ) operator Reduces number between 0 and RAND_MAX to a number between 0 and the scaling factor: Number = offset (shift value) + rand() % scaling_factor Example i = rand() % 6 + 1; Generates a number between 1 and 6 The Hashemite University

9 Changing Random Numbers Range II
Scaling and shifting equations: Lets assume the range is [min, max], then: Offset = min. Scaling factor = max – min + 1 Lets assume the range is [min, max)  [min, max-1], then: Scaling factor = max – min Lets assume the range is (min, max][min+1, max], then: Offset = min + 1. Continue for other possibilities ..... The Hashemite University

10 Changing Random Numbers Range III
All the previous equations are used to generate integers but what about floating point random numbers? First: convert the floating point range into an integer range by multiplying the range by 10^n where n is at least the number of digits after the decimal point. Second: find the values of both the offset and scaling factor based on the equations in the previous slide. Third: divide the resulting random number on 10^n to get a floating point random number in the specified range. Note that n controls the difference value (lets call it the step width) between the generated random numbers. The Hashemite University

11 The Hashemite University
Examples Generate random numbers in the following ranges: 100 <= n <= 200  int n = rand()%101 100 <= n < 500  int n = rand()%400 50 < n <= 200  int n = 51 + rand()%150 100 < n < 200  int n = rand()%99 0.01 <= n <= 0.08  double n = (1 + rand()%8)/ with step width = 0.01 0.02 <= n <= 0.9  double n = (20 + rand()%821)/ with step width = 0.001 The Hashemite University

12 The Hashemite University
1 // Fig. 3.7: fig03_07.cpp 2 // Shifted, scaled integers produced by 1 + rand() % 6 3 #include <iostream> 4 5 using std::cout; 6 using std::endl; 7 8 #include <iomanip> 9 10 using std::setw; 11 12 #include <cstdlib> 13 14 int main() 15 { 16 for ( int i = 1; i <= 20; i++ ) { cout << setw( 10 ) << ( 1 + rand() % 6 ); 18 if ( i % 5 == 0 ) cout << endl; 21 } 22 23 return 0; 24 } Notice rand() % 6 . This returns a number between 0 and 5 (scaling). Add 1 to get a number between 1 and 6. Executing the program again gives the same "random" dice rolls. The Hashemite University

13 The Hashemite University
1 // Fig. 3.9: fig03_09.cpp 2 // Randomizing die-rolling program 3 #include <iostream> 4 5 using std::cout; 6 using std::cin; 7 using std::endl; 8 9 #include <iomanip> 10 11 using std::setw; 12 13 #include <cstdlib> 14 15 int main() 16 { 17 unsigned seed; 18 19 cout << "Enter seed: "; 20 cin >> seed; 21 srand( seed ); 22 23 for ( int i = 1; i <= 10; i++ ) { cout << setw( 10 ) << 1 + rand() % 6; 25 if ( i % 5 == 0 ) cout << endl; 28 } 29 30 return 0; 31 } The Hashemite University

14 The Hashemite University
Enter seed: 67 Enter seed: 432 Notice how the die rolls change with the seed. Program Output The Hashemite University

15 The Hashemite University
Enumeration I It is the counterpart of symbolic constants found in C (to assign integer values to symbolic constants). The main difference is that enum can define a new data type within the program. Enumeration - set of integers with identifiers enum typeName {constant1, constant2…}; Constants start at 0 (default), incremented by 1 Unique constant names The Hashemite University

16 The Hashemite University
Enumeration II If you don't specify values for enum constants, the values start at zero and increase by one with each move down the list. E.g: enum MyEnumType { ALPHA, BETA, GAMMA }; ALPHA has a value of 0, BETA has a value of 1, and GAMMA has a value of 2. If you want, you may provide explicit values for enum constants, as in enum Size { SMALL = 10, MEDIUM = 100, LARGE = 1000 }; Or enum Size { SMALL = 10, MEDIUM, LARGE }; //here MEDIUM will have the value of 11 and LARGE will have the value of 12 You can assign positive and negative integer values to enum constants (but not floating point values which will be a syntax error). The Hashemite University

17 The Hashemite University
Enumeration III There are two kinds of enum type declarations. One kind creates a named type, as in enum MyEnumType { ALPHA, BETA, GAMMA }; If you give an enum type a name, you can use that type for variables, function arguments and return values, and so on: E.g: enum MyEnumType x; /* legal in both C and C++ */ MyEnumType y; // legal only in C++ The other kind creates an unnamed type. This is used when you want names for constants but don't plan to use the type to declare variables, function arguments, etc. For example, you can write enum { HOMER, MARGE, BART, LISA, MAGGIE }; The Hashemite University

18 C++ enum type conversion rules
There is an implicit conversion from any enum type to int. E.g: enum MyEnumType { ALPHA, BETA, GAMMA }; Then the following lines are legal: int i = BETA; // give i a value of 1 int j = 3 + GAMMA; // give j a value of 5 On the other hand, there is not an implicit conversion from int to an enum type: MyEnumType x = 2; // syntax error MyEnumType y = 123; // syntax error The Hashemite University

19 The Hashemite University
Enumeration Example I #include<iostream.h> int main() { enum cars{BMW, MAZDA, KIA, BENZ}; cars mycar; int money, i, BMW_price = 1000, MAZDA_price = 100, KIA_price = 500, BENZ_price = 2000; cout << "Enter the car type (BMW = 0, MAZDA = 1, KIA = 2, BENZ = 3):\n"; cin >> i; mycar = (cars)i; cout << "Enter the money balance:\n"; cin >> money; The Hashemite University

20 Enumeration Example II
switch(mycar) { case BMW: if(money >= BMW_price) cout << "You cannot bye car " << mycar << endl; else break; case MAZDA: if(money >= MAZDA_price) The Hashemite University

21 Enumeration Example II
case KIA: if(money >= KIA_price) cout << "You cannot bye car " << mycar << endl; else break; case BENZ: if(money >= BENZ_price) } return 0; The Hashemite University

22 The Hashemite University
Example Output Try it and find the output by your self. The Hashemite University

23 The Hashemite University
Additional Notes This lecture covers the following material from the textbook: Fourth Edition: Chapter 3: Sections 3.8 and 3.9 The Hashemite University


Download ppt "C++ Programming Lecture 10 Functions – Part II"

Similar presentations


Ads by Google