You are on page 1of 37

BITG 1113:

DERIVED DATA TYPES


(ENUMERATED DATA TYPE AND
STRUCTURE)

LECTURE 11
1
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
3
Enumerated Data Type

• 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.

4
Enumerated Data Type
• Format of enumerated tag :

enum Tag { enumerators };


Tag variable_identifier;

•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. 5

workDay is a variable of the Day type.


Enumerated Data Type
• 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
6
number.
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:

7
0 2 4
Enumerated Data Type
•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};

8
Enumerated Data Type

• 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};

9
Enumerated Data Type
• 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. 10
x = FRIDAY; //OK. So x is 4.
Program 11-1

11
PROGRAM 11-1 (CONTINUED)

12
 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
 Remember, though, we cannot use the ++ operator on an enum
variable. So, the following loop will NOT work

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];
} 14
 You must rewrite the loop’s update expression using a
cast instead of ++:

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];
}
15
Structure

• 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. 16
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.

5 7

1234 F A T I M A H /0 3.7
17
Structure Declaration and Definition

• 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.
18
Structure Declaration and Definition
Example :

structure tag

structure members

bill
studentID
name
yearInSchool

gpa
19
Structure Initialization

• 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


20
their own set of braces.
Structure Initialization
Example :
struct SAMPLE
{
int x;
int y; sam1
float t;
char u;
};
SAMPLE sam1 = { 2, 5, 3.2, ’A’ };

SAMPLE sam2 = { 7, 3 };
sam2

21
Referencing Individual Field
• 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;

22
Structure Operation
• 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 :

23
struct STUDDATA
{
int id; Program 11-2 : A
char name[20]; struct to keep a set
float gradePoint;
};
of data

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
Nested Structure

• 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.
25
•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;
};
26

STAMP stamp;
• It is possible to nest the same structure type more than once
in a declaration.Example :
struct JOB
{
STAMP startTime;
STAMP endTime;
};
JOB job;

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

28
Structure Containing Array
• Structures can have one or more arrays as members.

/*Global declarations */
struct PUPIL
{
char name[26];
int midterm[3];
int final;
};
29
PUPIL student;
struct STUDDATA
{
Program 11-3 : A
char name[20]; struct with array
float test[3]; members
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
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
Output :

32
Array of Structure
• 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.

33
Example : Array of Structure
struct PELAJAR
{
int id;
char name[31];
float project_mark;
int test_mark;
int final_mark;
char gred;
};

PELAJAR rekod_pelajar[3];

OR with initialization :
struct pelajar rekod_pelajar[] = {
{1342, "Zulaiha Ismail", 10.2, 10, 20, ‘F’},
{1343, "Aina Ahmad", 51.4, 60, 60, ‘C’},
34
{1344, "Maria Musa", 90.0, 99, 99, ‘A’}
};
Example : Array of Structure

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;
}

35
struct STUDDATA
{ Program 11-4 :
char name[20];
float test[3]; Array with struct as
float ass[5]; its elements
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
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

You might also like