Presentation is loading. Please wait.

Presentation is loading. Please wait.

0657.104 Introduction to Computer Science 2 Slide 1 Enumerated types We already know some data types int, float, char good for problems that involve int,

Similar presentations


Presentation on theme: "0657.104 Introduction to Computer Science 2 Slide 1 Enumerated types We already know some data types int, float, char good for problems that involve int,"— Presentation transcript:

1 0657.104 Introduction to Computer Science 2 Slide 1 Enumerated types We already know some data types int, float, char good for problems that involve int, float, char What about problems that don’t eg representing a pack of cards—suits (hearts, clubs, diamonds, spades), ranks (2-10, Jack - Ace) representing grading schemes A++, A+, A, A-, B+ etc… Could simulate by manipulating strings etc unwieldy, error prone We want to define our own types—called user-defined types or enumerated types Advantages allow us to specify a restricted range of values for our type—type safety increase readability of our programs

2 0657.104 Introduction to Computer Science 2 Slide 2 Enumerated types Declare Use Effect the compiler will make sure that only TRUE or FALSE are assigned to a variable of type boolean you’ve reduced the chance of errors in your program you’ve made your program more readable….. enum boolean {FALSE, TRUE}; reserved word identifier for your type list of valid values boolean ok = FALSE; boolean checkval; checkval = TRUE;

3 0657.104 Introduction to Computer Science 2 Slide 3 Enumerated types enum suit {Clubs, Diamonds, Hearts, Spades}; enum rank {Two, Three, Four, Five, Six, Seven,Eight, Nine, Ten, Jack, Queen, King, Ace}; suit s1, s2, s3; rank rank1; s1 = Clubs; s2 = Hearts; rank1 = Six; if (rank1 < Ten) { cout << “Loser!” << endl; } if (s2 > s1) { cout << “Winner!” << endl;} Why can we make comparisons like this? because the values are enumerated values begin at 0 enum suit {Clubs 0, Diamonds 1, Hearts 2, Spades 3 }; enum rank {Two 0, Three 1, Four 2, Five 3, Six 4, Seven 5, Eight 6, Nine 7, Ten 8, Jack 9, Queen 10, King 11, Ace 12 };

4 0657.104 Introduction to Computer Science 2 Slide 4 Switch and enums Switch is really useful with enum: Consider enum day {Sunday, Monday, Tuesday, …}; day today; … // read in today’s value somewhere switch (today) { case Saturday: pay_factor = 1.5; break; case Sunday: pay_factor = 2.0; break; case default: pay_factor = 1.0; }

5 0657.104 Introduction to Computer Science 2 Slide 5 Writing out enum values Because you create the enumerated values, you have to deal with writing them out yourself – so not like int, compiler knows nothing about what they represent: void print_day(day today) { switch (today) { case Monday: cout << “Monday”; break; case Tuesday: cout << “Tuesday”; break; … case default: cout << “ERROR”; }

6 0657.104 Introduction to Computer Science 2 Slide 6 Records (a.k.a. Structures) We already know some data types int, float, char, enumerated good for problems that involve a single type per object to be represented What about a student? name (string) age (integer) gender (enumerated) id number (integer) grade point average (float) One solution Seems OK….. ?? char name[40]; int age; gender_type gender; int id; float gpa;

7 0657.104 Introduction to Computer Science 2 Slide 7 Records (a.k.a. Structures) How appropriate is that solution for the 104 class? We would need to repeat all of the declarations for every student in the class use a different variable name for each student add new variables if we have a new attribute of a student to store eg address char student1_name[40]; int student1_age; gender_type student1_gender; int student1_id; float student1_gpa; char student2_name[40]; int student2_age; gender_type student2_gender; int student2_id; float student2_gpa;. charstudent270_name[40;

8 0657.104 Introduction to Computer Science 2 Slide 8 Declaring Structures Ideally we would like to describe a student by grouping together multiple variables that may be of different types Structures allow us to do this generally enum gender_type {Male, Female}; struct { char name[40]; int age; gender_type gender; int id; float gpa; } student1, student2, student3; struct { ;. ; } ;

9 0657.104 Introduction to Computer Science 2 Slide 9 Accessing structure members The structure variables (student1, student2, student3) are made up of multiple members or fields Members are accessed using a selector which indicates the required structure variable and member Combine the variable and member with a full stop eg enum gender_type {Male, Female}; struct { char name[40]; int age; gender_type gender; int id; float gpa; } student1, student2, student3; student1.gpa = 5.6; student2.id = 965051; cout << student1.gpa << endl;

10 0657.104 Introduction to Computer Science 2 Slide 10 Visualising structures A structure variable refers to a group of data items A member name refers to a data item contained with a structure variable student1 name gender age id gpa

11 0657.104 Introduction to Computer Science 2 Slide 11 Defining structured types The current approach combines the definition of the structure members and the structure variables Not very flexible! We can define structured types, and then use them to define variables enum gender_type {Male, Female}; struct studentType { char name[40]; int age; gender_type gender; int id; float gpa; }; type name no variable identifies

12 0657.104 Introduction to Computer Science 2 Slide 12 Defining structured types Now we can declare multiple variables of this type enum gender_type {Male, Female}; struct studentType { char name[40]; int age; gender_type gender; int id; float gpa; }; studentType student1; studentType student2; studentType student3, student4, student5;

13 0657.104 Introduction to Computer Science 2 Slide 13 Defining structured types Name of members will NOT conflict with other variables of the same name is OK because the members require a selector that includes the variable name BUT be careful - can be confusing! enum gender_type {Male, Female}; struct studentType { char name[40]; int age; gender_type gender; int id; float gpa; }; studentType student1; studentType student2; studentType student3, student4, student5; int id; float gpa;

14 0657.104 Introduction to Computer Science 2 Slide 14 Initialising structure variables Structure variable members can be initialised in a single statement Values in initialisations MUST appear in same order as members of the structure Accessing members of a structure Can only assign between complete structs of the same type CANNOT test equality or inequality with == or != MUST test each member in turn studentType student_1 = {“steve”, 19, Male, 991654, 8.5}; studentType student_2 = {“sally”, 40, Female, 997652, 9.5}, student_3, student_4; cout << “Name : “ << student_1.name << endl; cout << “Id : “ << student_1.id << endl; cout << “Age : “ << student_1.age << endl; student_3.gpa = 7.3; student_4 = student_2;

15 0657.104 Introduction to Computer Science 2 Slide 15 There's still a problem Although we have now grouped all the data items for a student within a structure we still need multiple variables to represent multiple students How can we group students together to represent a class? What data structure do you know about that groups data items of the same type? HINT: studentType students[200]; students[0].name = “john”; students[1].name = “sally”;


Download ppt "0657.104 Introduction to Computer Science 2 Slide 1 Enumerated types We already know some data types int, float, char good for problems that involve int,"

Similar presentations


Ads by Google