Transcript Example 2

Structured Data
(Lecture 11)
By:
Dr. Norazah Yusof
FSKSM, UTM
1
Data Types
■ Primitive data types - defined as a basic part of the
language.
bool
int
unsigned long int
char
long int
float
unsigned char
unsigned short int double
short int
unsigned int
long double
■ Abstract Data Type (ADT) – created by the programmer
■
and is composed of one or more primitive data types.
Have own range (or domain) of data and own set of
operations that may be performed on them.
2
Abstract Data Type
■ Example: Write a program to simulate a
12-hour clock.
3
Abstract Data Type
■ Example: Write a program to simulate a 12-hour clock.
■ The program could contain three ADTs:
1. Hours
2. Minutes
3. Seconds
■ The range of values
1. Hours : integers 1 through 12
2. Minutes : integers 0 through 59
3. Seconds : integers 0 through 59
■ If an Hours object is set to 12 and then incremented, it
will then take on the value 1.
■ If an Minutes object or Seconds object is set to 59 and
then incremented, it will then take on the value 0.
4
Combining Data into Structures
■ Structure – group several variables together
into a single item
■ Declaration format of a structure:
struct tag
{
variable declaration;
//more declaration;
};
5
Example: Structure declaration of Time
struct Time
{
int hours;
int minutes;
int seconds;
};
6
Definition of Structure Variables
■ Structure declaration does not define a
variable. It only create a new data type.
■ Variable(s) of this type can be defined.
■ Format:
tag varname;
■ Example: Define structure variable named
now of type Time.
Time now;
7
Memory layout of structure variable, now
Time
hours
Members
minutes
seconds
8
Example 2
■ Declare a structure named PayRoll that has the following
members:
1. Employee number: integer
2. Employee’s name : array of characters
3. Hours worked : floating point numbers
4. Hourly pay rate : floating point numbers
5. Gross pay : floating point numbers
■ Define three PayRoll variables: deptHead, foreman,
associate
■ Draw the memory layout.
9
Example 2: Structure declaration of PayRoll
and variables definition.
cont int SIZE = 25;
struct PayRoll
{
int empNumber;
char name[SIZE];
double hourWork, hourPayRate, grossPay;
};
PayRoll deptHead, foreman, associate;
10
Memory Layout of PayRoll variables
deptHead
foreman
empNumber
empNumber
name
name
hourWork
hourWork
hourPayRate
hourPayRate
grossPay
grossPay
associate
empNumber
name
hourWork
hourPayRate
grossPay
11
Assessing Structure Members
■ Dot operator (.) allows you to access structure members
■
■
■
in a program.
Example 1: Access the empNumber member of
deptHead by assigning value of 475 to it.
Example 2: Access the name, hourWork, and
hourPayRate by assigning values of Muhammad, 200,
and 15 to it, respectively. Then, assign the value to
the grossPay by assigning the result of arithmetic
operation: hourWork x hourPayRate
Example 3: Display the contents of deptHead’s member
12
Assessing Structure Members
deptHead.empNumber = 475;
strcpy(deptHead.name, "Muhammad");
deptHead.hourWork = 200;
deptHead.hourPayRate = 15;
deptHead.grossPay =
deptHead.hourWork *
deptHead.hourPayRate;
13
Assessing Structure Members
■ Example 3: Display the contents of deptHead’s
member.
– Cannot display the content by passing the entire variable:
cout << deptHead; //will not work!
14
Assessing Structure Members
■ Example 3: Display the contents of deptHead’s
member. Each member must be passed to cout,
separately.
cout
cout
cout
cout
cout
cout
<<
<<
<<
<<
<<
<<
"Name: " << deptHead.name << endl;
"ID Number: " << deptHead.empNumber << endl;
"Hours worked: " << deptHead.hourWork;
endl;
"Hourly pay rate: " << deptHead.hourPayRate;
endl;
cout << "Gross pay: " << deptHead.grossPay << endl;
15
Read data from the keyboard
■ Change Example 2: Read data from the
keyboard for the members name,
hourWork, and hourPayRate.
16
Read data from the keyboard
cout << "Enter the employee number:";
cin >> deptHead.empNumber;
cout << "Enter the employee’s name:";
cin.ignore(); //ignore the next character in
// the input buffer.
cin.getline(deptHead.name, SIZE);
cout << "How many hours did the employee work?";
cin >> deptHead.hourWork;
cout << "What is the employee’s hourly pay
rate?";
cin >> deptHead.hourPayRate;
17
Comparing Structure Variables
■ Cannot perform comparison operations directly on
structure variables.
if (deptHead == foreman) //Error!
■ To compare between two structures, need to
compare individual members, as follows:
if (deptHead.hourWork == foreman.hourWork)
:
if (strcmp(deptHead.name,foreman.name) == 0)
:
18
Initializing a Structure
■ The members of a structure variable may be
■
initialized with starting values when it is defined.
Example: Declare a structure variable named
CityInfo. Define a variable named location with
initialization values.
structure CityInfo
{
char cityName[30];
char state[3];
long population;
int distance;
};
19
Initializing a Structure
structure CityInfo
{
char cityName[30];
char state[3];
long population;
int distance;
};
i. CityInfo location = {"Johor Bahru", "JH", 80000, 280};
ii. CityInfo location = {"Kuantan", "PH", 50000};
iii. CityInfo location = {"Ipoh", "PK"};
iv. CityInfo location = {"Kuala Terengganu"};
v. CityInfo location = {"Seremban", "NS", ,68};//illegal!
20