Structures - Part II aggregate operations arrays of type struct nested structures

Post on 12-Jan-2016

38 views 7 download

Tags:

description

Structures - Part II aggregate operations arrays of type struct nested structures compared to classes. Aggregate Operations. OperationArraysStructs I/ONo ( except strings )No AssignmentNo Yes ArithmeticNoNo ComparisonNoNo - PowerPoint PPT Presentation

Transcript of Structures - Part II aggregate operations arrays of type struct nested structures

Structures - Part II

aggregate operations

arrays of type struct

nested structures

compared to classes

Aggregate Operations

Operation Arrays Structs

I/O No (except strings) No

Assignment No Yes

Arithmetic No No

Comparison No NoParameter pass. Ref. only Either

value or ref.

Funct. return value No Yes

Arrays of Structures

struct Salaried{ char dept[5];

int salary; int vac_days;

};

// array of 20 elements, each of type // array of 20 elements, each of type SalariedSalariedSalaried emp[20];

Arrays of Structures

emp[0].dept = “Purc”;emp[0].salary = 34560;emp[0].vac_days = 14;...emp[2].salary = 32100;emp[2].dept = “Ship”;emp[2].vac_days = 10;

…emp[19].dept = “Acct”;emp[19].salary = 22500;emp[19].vac_days = 12;

Arrays of Structures

struct Payroll{

int id;char name[15];double payrate;

};

// an array of 3 records of type Payroll// an array of 3 records of type PayrollPayroll employee[3];

Arrays of Structures// load array -- there are other ways to load the array// load array -- there are other ways to load the array

Payroll employee[3] = { {11, “Begay”, 7.25}, {12, “Gioseffi”, 6.50}, {13, “Marra”, 9.00} };

// display array// display array

for(ndx = 0; ndx < 3; ndx++)cout << ‘\n’ << employee[ndx].id << setw(20) << employee[ndx].name << setw(20) << employee[ndx].payrate;

Arrays of Structures

struct Payroll{ int id; char name[15]; double payrate; };

*

// prototypesvoid loadarray(Payroll [3]); void showarray(Payroll [3]);

Arrays of Structures

void main(){ //declare array of 3 records of type Payroll//declare array of 3 records of type Payroll // and initialize the first record// and initialize the first record Payroll employee[3] = { 11, "Begay", 7.25 };

loadarray(employee); // calls// calls showarray(employee);

cout << endl<<endl; // for formatting// for formatting} // end main()// end main()

Arrays of Structures

// load array - data typically entered via file input// load array - data typically entered via file inputvoid loadarray(PayrollPayroll staff[3])

{ // begin at 1 because [0] already entered// begin at 1 because [0] already entered for(int ndx = 1; ndx < 3; ndx++) { cout << "Enter the ID, name, and pay rate: "; cin >> staff[ndx].id >> staff[ndx].name >> staff[ndx].payrate; cout << endl; }}

Arrays of Structures

void showarray(PayrollPayroll staff[3]){ cout << setiosflags(ios::fixed) << setprecision(2);

for(int ndx = 0; ndx < 3; ndx++) cout << '\n' << setw(5) << staff[ndx].id << setw(13) << staff[ndx].name << setw(10) << staff[ndx].payrate;}

In Class Assign. 3Elementat. num at. mass densitytungsten (W) 74 183.850 19.300sulfur (S) 16 32.064 2.07carbon (C) 6 12.011 2.260

9. Write a program which:a. creates an array of structures b. uses a global constant for the array sizec. contains functions to load and to displayd. format similar to the above chart

In Class Assign. 3-ans.#include<iostream>#include<iomanip>using namespace std;struct Element{ char name[20];

char symbol; int at_num; double at_mass; double density; };

const int ARR_SIZE = 5;

void getData(Element *); // used pointer// used pointer to cycle thru arrayto cycle thru arrayvoid showData(Element *); // See filearray.cc sent on 4/30// See filearray.cc sent on 4/30

void main(){ //declare array - type Element//declare array - type Element Element FiveElements[5];// first 3 records are initialized in main// first 3 records are initialized in main getData(&FiveElements[3]); // 1// 1stst call gets address of 4 call gets address of 4thth struct struct showData(FiveElements);// 2nd call gets beginning address of array// 2nd call gets beginning address of array cout << ‘\n’; } // end main()// end main()

Nested Structuresstruct Date{ int month;

int day;int year; };

struct Vital_Data{ char name[15];

char dept[10];int ID;Date birth; // Date must be // Date must be previouslypreviously defined defineddouble payrate;

};*

Nested StructuresVital_Data Courtney;Vital_Data Courtney; // declaration of an object// declaration of an object// assignments of data to an object// assignments of data to an object strcpy (Courtney.name,“Lawrence”);strcpy (Courtney.dept,“personnel”);Courtney.ID = 1234;Courtney.birth.month = 10;// birth is a struct// birth is a structCourtney.birth.day = 25; // note: two // note: two periodsperiodsCourtney.birth.year = 77; // individually assigned// individually assignedCourtney.payrate = 12.75;Vital_Data Personnel[2]; // an array of structs// an array of structs// this assignment syntax works on our Unix compiler// this assignment syntax works on our Unix compiler

Nested Structures

1. Write the cin statements for thedepartment and the birthday.

2. Write the cout statements for thedepartment and the birthday.

Nested Structuresvoid loadarray(vital_Data personnel[2]) { for(int i = 0; i < 2 ; i++) { cout << "\nEnter the name: "; cin >> cout << "Enter the department: "; cin >> cout << "Enter the id# and the payrate: "; cin >> >> cout << "Enter the birth date (dd mm yy) "; cin >> >> >> } }

personnel[i].name;personnel[i].name;

personnel[i].dept;personnel[i].dept;

personnel[i].IDpersonnel[i].ID personnel[i].payrate;personnel[i].payrate;

personnel[i].birth.yearpersonnel[i].birth.year;;personnel[i].birth.monthpersonnel[i].birth.monthpersonnel[i].birth.daypersonnel[i].birth.day

* * ** *

Formatted Output ID# name department birthday payrate1234 Lawrence personnel 10/ 5/77 12.75 765 Newman shipping 2/29/59 13.11

cout << setiosflags(ios::fixed | ios::right);setiosflags(ios::fixed | ios::right); for(int i = 0; i < 2 ; i++) cout << '\n' << setw(5) << setprecision(0)setprecision(0) << personnel[i].ID << setw(12) << personnel[i].name << setw(11) << personnel[i].dept << setw(5) << personnel[i].birth.day <<'/' << setw(2) << personnel[i].birth.month <<'/' << setw(2) << personnel[i].birth.year << setw(7) << setprecision(2)setprecision(2) << personnel[i].payrate;

Structure vs. Class

By defaultBy default:

struct have public member variables

class have private member variables

Class

Class syntax:Class syntax:

class Classname{

private:list of private variable declarations

public:list of function prototypes

};

Class

An example:An example:class Date{

private:int day;int month;int year;

public:(member functions)

};

Imagination Imagination

is more importantis more important

than knowledge.than knowledge.

Albert EinsteinAlbert Einstein