c++ derived data types

37
1 BITG 1113: BITG 1113: DERIVED DATA TYPES DERIVED DATA TYPES (ENUMERATED DATA TYPE AND STRUCTURE) (ENUMERATED DATA TYPE AND STRUCTURE) LECTURE 11

Upload: paancute8982

Post on 27-Nov-2014

1.058 views

Category:

Documents


5 download

TRANSCRIPT

Page 1: C++ Derived Data Types

1

BITG 1113:BITG 1113: DERIVED DATA TYPES DERIVED DATA TYPES

(ENUMERATED DATA TYPE AND (ENUMERATED DATA TYPE AND STRUCTURE)STRUCTURE)

LECTURE 11

Page 2: C++ Derived Data Types

OBJECTIVES:

To understand the concept of enum & structure

To understand the differences between array

and structure

To understand how to use structure in program

To understand structure containing array and

array of structure

2

Page 3: C++ Derived Data Types

3

Page 4: C++ Derived Data Types

4

• An enumerated data type is a programmer-defined data type.

•It consists of values known as enumerators, which represent

integer constants.

•Use symbolic names rather than number – makes program much

more readable.

Enumerated Data Type

Page 5: C++ Derived Data Types

5

Enumerated Data Type• Format of enumerated tag :

•Example: An enumerated data type for the working days in a week is

shown below, followed by a variable definition.

enum Day { MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY };

Day workDay;

Note that :

The enumerators which are listed inside the braces, are not strings.

They represent the values that belong to the Day data type.

workDay is a variable of the Day type.

enum Tag { enumerators };

Tag variable_identifier;

Page 6: C++ Derived Data Types

6

• We may assign any of the enumerators MONDAY, TUESDAY,

WEDNESDAY, THURSDAY, or FRIDAY to a variable of the Day type.

Example:

workDay = WEDNESDAY;

•So, what is an enumerator?

It as an integer named constant. Internally, the compiler assigns integer

values to the enumerators, beginning at 0.

• When you don’t tell C++ what values you want to use, it simply starts at

0 and then equates each enumerated constant to the next higher integral

number.

Enumerated Data Type

Page 7: C++ Derived Data Types

7

Enumerated Data Type

• Therefore, MONDAY equates to 0, TUESDAY equates to 1, and so

forth, until we get to FRIDAY, which equates to 4.

•Using the Day declaration, the following code...

cout << MONDAY << " "

<< WEDNESDAY << " "

<< FRIDAY << endl;

...will produce this output:

0 2 4

Page 8: C++ Derived Data Types

8

•To equate each working days to its normal value, such as the value 1

for MONDAY, its done with assigning operator as shown below:

enum Day {MONDAY=1,TUESDAY=2, WEDNESDAY=3, THURSDAY=4,

FRIDAY=5};

• Here’s Day coded in the shorter way.

enum Day {MONDAY=1,TUESDAY, WEDNESDAY, THURSDAY, FRIDAY};

Enumerated Data Type

Page 9: C++ Derived Data Types

9

• C++ allows you to assign the same integer to multiple enumeration

constants in the same definition. For example, in the enumerated Day

below, we have assigned the same number to WEDNESDAY and

THURSDAY:

enum Day {MONDAY,TUESDAY, WEDNESDAY, THURSDAY=2, FRIDAY};

Enumerated Data Type

Page 10: C++ Derived Data Types

10

• You can assign an enumerator value to an int variable.

• However we cannot assign an integer value to an enum variable, unless

we cast it.

• Example :

enum Day {MONDAY,TUESDAY, WEDNESDAY,THURSDAY, FRIDAY};Day day1, day2; // Define two Day variables.int x; // Define an int variable.

day1 = MONDAY; // OK. So day1 is 0.

day2 = 1; // ERROR. Cannot store int value // in an enum variable

day2 = static_cast<Day>(1); // OK. The solution to the // error above.

x = FRIDAY; //OK. So x is 4.

Enumerated Data Type

Page 11: C++ Derived Data Types

11

Program 11-1

Page 12: C++ Derived Data Types

PROGRAM 11-1 (CONTINUED)

12

Page 13: C++ Derived Data Types

Program 11-1 shows enumerators used to control a loop:

int index;

// Get the sales for each day.

for (index = MONDAY; index <= FRIDAY; index++){ cout << "Enter the sales for day " << index << ": "; cin >> sales[index];}

13

Page 14: C++ Derived Data Types

Remember, though, we cannot use the ++ operator on an enum variable. So, the following loop will NOT work

14

Day workDay; // Define a Day variable

// ERROR!!! This code will NOT work.for (workDay = MONDAY; workDay <= FRIDAY; workDay++){ cout << "Enter the sales for day " << workDay << ": "; cin >> sales[workDay];}

Page 15: C++ Derived Data Types

You must rewrite the loop’s update expression using a cast instead of ++:

15

Day workDay; // Define a Day variable

for (workDay = MONDAY; workDay <= FRIDAY; workDay = static_cast<Day>(workDay + 1)){ cout << "Enter the sales for day " << workDay << ": "; cin >> sales[workDay];}

Page 16: C++ Derived Data Types

16

• Structure – is a collection of related elements, possibly of different

types, having a single name.

• Each element in a structure is called a field.

• A field is the smallest element of named data that has meaning.

• The different between an array and a structure is that all elements

in an array must be of the same type, while the elements in a

structure can be of the same or different types.

Structure

Page 17: C++ Derived Data Types

17

5 7

1234 F A T I MA /0H 3.7

Structure

•The first example fraction, has two fields, both of which are

integers. The second example, student, has three fields, an

integer number, an array and a floating point number.

Page 18: C++ Derived Data Types

18

• To declare a structure type, use the keyword struct followed

by the name of the type and its field list.

General Format: struct <structName>{

type1 field1;type2 field2;. . .

};

• To define its variables, use the structure tag (name) as the

variable’s type.

Structure Declaration and Definition

Page 19: C++ Derived Data Types

19

structure tag

structure members

studentID

name

yearInSchool

gpa

bill

Structure Declaration and Definition

Example :

Page 20: C++ Derived Data Types

20

• A structure can be initialized.

• The rules for structure initialization are similar to the rules for array

initialization:

(1) the initializers are enclosed in braces and separated by commas;

(2) the initializers must match their corresponding types in the

structure declaration;

(3) if use a nested structure, the nested initializers must be enclosed in

their own set of braces.

Structure Initialization

Page 21: C++ Derived Data Types

21

Example :

Structure Initialization

struct SAMPLE{

int x;int y;float t;char u;

};SAMPLE sam1 = { 2, 5, 3.2, ’A’ };

SAMPLE sam2 = { 7, 3 };

sam2

sam1

Page 22: C++ Derived Data Types

22

• We can read data into and write data from structure members just as we can from individual variables.

• For example the value for the field of the sample structure can be read from the keyboard and placed in sam2 using the input statement below.

cin >> sam2.x >>sam2.y >>sam2.t >>sam2.u;

Referencing Individual Field

R

Page 23: C++ Derived Data Types

23

• The structure is an entity that can be treated as a whole.

• However, only one operation, assignment is allowed on the structure

itself. In other words, a structure can only be copied to another structure of

the same type using the assignment operator.

• Example :

Structure Operation

Page 24: C++ Derived Data Types

struct STUDDATA{int id;char name[20];float gradePoint;};

void main( ){ STUDDATA studBITG1113; cout << "Please enter your id"; cin >> studBITG1113.id; cout << "\nPlease enter your name"; cin.getline(studBITG1113.name,19); cout << "\nPlease enter your gradePoint"; cin >> studBITG1113.gradePoint;

cout << "\nYour id is :"<<studBITG1113.id; cout << "\nYour name is :"<<studBITG1113.name; cout << "\nYour grade point is :"<<studBITG1113.gradePoint;

if(studBITG1113.gradePoint > 3.5)

cout<<"Excellent!"}

24

Program 11-2 : A struct to keep a set

of data

Page 25: C++ Derived Data Types

25

• We can have structures as members of a structures.

•When a structure includes another structure, it is a nested structure.

• For example, we can have a structure called STAMP that stores the date and the time.

•The DATE is in turn a structure that stores the month, day and year.

•The TIME is also structure, one that stores the hour, minute and second.

Nested Structure

Page 26: C++ Derived Data Types

26

•This structure design as :

struct DATE{ int month; int day; int year;};struct TIME{ int hour; int min; int sec;}; struct STAMP{ DATE date; TIME time;};

STAMP stamp;

Page 27: C++ Derived Data Types

27

• It is possible to nest the same structure type more than once in a declaration.Example :

struct JOB

{

STAMP startTime;

STAMP endTime;

};

JOB job;

Page 28: C++ Derived Data Types

28

• When access a nested structure, we must include each level from the highest (stamp) to the component being referenced.

Referencing Nested Structure

Page 29: C++ Derived Data Types

29

• Structures can have one or more arrays as members.

Structure Containing Array

/*Global declarations */struct PUPIL{char name[26];int midterm[3];int final;};

PUPIL student;

Page 30: C++ Derived Data Types

struct STUDDATA{char name[20];float test[3];float ass[5];float quiz[2];float final;float total;float project;};

void main( ){ STUDDATA studBITG1113; float totTest =0, totAss = 0, totQuiz=0; cout << "\nPlease enter your name : "; cin.getline(studBITG1113.name,19); for( int i = 0; i < 3; i++ ){ cout << "\nPlease enter the score for test : "<< i+1; cin >> studBITG1113.test[i];

totTest += studBITG1113.test[i]; }

30

Program 11-3 : A struct with array

members

Page 31: C++ Derived Data Types

for(i=0; i<5; i++){ cout << "\nPlease enter the score for assignment"<<i+1<<" : "; cin >> studBITG1113.ass[i];

totAss += studBITG1113.ass[i]; }

for(i=0; i<2; i++){ cout << "\nPlease enter the score for quiz"<<i+1 <<" : "; cin >> studBITG1113.quiz[i];

totQuiz += studBITG1113.quiz[i]; }

cout << "\nPlease enter the score for final : "; cin >> studBITG1113.final;

cout << "\nPlease enter the score for project : "; cin >> studBITG1113.project;

studBITG1113.total = totTest + totAss + totQuiz + studBITG1113.final + studBITG1113.project;

cout << "\nYour score for this subject is : ” << studBITG1113.total;}

31

Page 32: C++ Derived Data Types

32

Output :

Page 33: C++ Derived Data Types

33

• As a programmer, you will encounter many situations that require you to create an array of structures.

• By putting the data in an array, we can quickly and easily work with the data.

• Example array of structures might look.

Array of Structure

Page 34: C++ Derived Data Types

34

struct PELAJAR{int id;char name[31];float project_mark;int test_mark;int final_mark;char gred;};

PELAJAR rekod_pelajar[3];

Example : Array of Structure

struct pelajar rekod_pelajar[] = {{1342, "Zulaiha Ismail", 10.2, 10, 20, ‘F’},{1343, "Aina Ahmad", 51.4, 60, 60, ‘C’},{1344, "Maria Musa", 90.0, 99, 99, ‘A’}};

OR with initialization :

Page 35: C++ Derived Data Types

35

To print the elements in rekod_pelajar : for(i=0; i<3;i++){ cout << rekod_pelajar[i].id <<endl;

cout << rekod_pelajar[i].name <<endl;cout << rekod_pelajar[i].project_mark <<endl;cout << rekod_pelajar[i].test_mark <<endl;cout << rekod_pelajar[i].final_mark <<endl;cout << rekod_pelajar[i].gred <<endl;

}

Example : Array of Structure

Page 36: C++ Derived Data Types

struct STUDDATA{

char name[20]; float test[3];float ass[5];float quiz[2];float final;float total;float project;

};

void main( ){ STUDDATA studBITG1113[50]; float totTest = 0, totAss = 0, totQuiz = 0;

for( int i = 0; i < 50< i++ ){ cout << "\nPlease enter your name : "; cin.getline(studBITG1113[i].name,19); for( i=0; i<3;i++ ){ cout << "\nPlease enter the score for test : "<<i+1; cin >> studBITG1113[i].test[i];

totTest += studBITG1113[i].test[i]; }

36

Program 11-4 : Array with struct as

its elements

Page 37: C++ Derived Data Types

for( i = 0; i < 5; i++ ){ cout << "\nPlease enter the score for assignment"<<i+1<<" : "; cin >> studBITG1113[i].ass[i];

totAss += studBITG1113[i].ass[i]; }

for( i = 0; i < 2; i++ ){ cout << "\nPlease enter the score for quiz"<<i+1 <<" : "; cin >> studBITG1113[i].quiz[i];

totQuiz += studBITG1113[i].quiz[i]; }

cout << "\nPlease enter the score for final : "; cin >> studBITG1113[i].final;

cout << "\nPlease enter the score for final : "; cin >> studBITG1113[i].project;

studBITG1113[i].total = totTest + totAss + totQuiz + studBITG1113[i].final + studBITG1113[i].project;

cout <<"\nYour score for this subject is : ” <<studBITG1113[i].total; }} 37