1 CSE1301 Computer Programming Lecture 21 Structures (Part 2)

Slides:



Advertisements
Similar presentations
Programming in C Chapter 10 Structures and Unions
Advertisements

C Language.
C Structures and Memory Allocation There is no class in C, but we may still want non- homogenous structures –So, we use the struct construct struct for.
Chapter 6 Structures By C. Shing ITEC Dept Radford University.
David Notkin Autumn 2009 CSE303 Lecture 13 This space for rent.
C Structures Basics of structures Typedef. Data Hierarchy Byte –8 bits (ASCII character ‘A’ = ) Field –Group of characters (character string “Fred”)
Structures Spring 2013Programming and Data Structure1.
Structures in C.
What is a pointer? First of all, it is a variable, just like other variables you studied So it has type, storage etc. Difference: it can only store the.
Winter2015 COMP 2130 Intro Computer Systems Computing Science Thompson Rivers University C: Advanced Topics.
Pointers Typedef Pointer Arithmetic Pointers and Arrays.
1 Introduction to Computing Lecture 15 Arrays (Part 1) Dr. Bekir KARLIK Yasar University Department of Computer Engineering
CSE1303 Part A Data Structures and Algorithms Lecture A6 – Dynamic Memory.
1 CSC 1401 S1 Computer Programming I Hamid Harroud School of Science and Engineering, Akhawayn University
Kymberly Fergusson CSE1303 Part A Data Structures and Algorithms Summer Semester 2003 Lecture A6 – Dynamic Memory.
1 CSE1301 Computer Programming Lecture 26: Case Study.
1 CSE1301 Computer Programming Lecture 22 Structures (Part 1)
Topic 2 Pointers CSE1303 Part A, Summer Semester,2002 Data Structures and Algorithms.
Kymberly Fergusson CSE1303 Part A Data Structures and Algorithms Summer Semester 2003 Lecture A2 – Pointers (Revision)
1 CSE1301 Computer Programming Lecture 31: List Processing (Search)
1 CSE1301 Computer Programming Lecture 22 Structures (Part 1)
1 CSE1301: Structures 2 Linda M c Iver. 2 Structures 2 - Topics Structures revision Passing structures as parameters Returning structures from functions.
1 CSE1301 Computer Programming Lecture 20 Structures (Part 1)
1 CSE1301 Computer Programming Lecture 24 Structures (Part 2)
1 CSE1301 Computer Programming Lecture 23 Structures (Part 1)
1 CSE1301 Computer Programming: Lecture 30 Linked Lists (Part 2)
1 CSE1301 Computer Programming: Lecture 25 Software Engineering 2.
1 CSE1301 Computer Programming Lecture 18 Arrays (Part 1)
1 CSE1301 Computer Programming Lecture 23 Structures (Part 2)
CMSC 104, Version 8/061L22Arrays1.ppt Arrays, Part 1 of 2 Topics Definition of a Data Structure Definition of an Array Array Declaration, Initialization,
Lecture No: 16. The scanf() function In C programming language, the scanf() function is used to read information from standard input device (keyboard).
Structs. Structures We already know that arrays are many variables of the same type grouped together under the same name. Structures are like arrays except.
CSE1301 Computer Programming: Lecture 26 List Processing (Search)
Edited from Powerpoint Slides provided by Thomson Learning
1 Structures UniMAP SEM I - 11/12EKT 120 Computer Programming.
Week 9 - Monday.  What did we talk about last time?  Time  GDB.
Chapter 9 Structured Data: Structs and ADTs (Data Base Programs with C++) Mr. Dave Clausen La Cañada High School.
1 COMP 2130 Introduction to Computer Systems Computing Science Thompson Rivers University.
Spring 2005, Gülcihan Özdemir Dağ Lecture 11, Page 1 BIL104E: Introduction to Scientific and Engineering Computing, Spring Lecture 11 Outline 11.1.
Struct 1. Definition: Using struct to define a storage containing different types. For example it can contain int, char, float and array at the same time.
C Lecture Notes 1 Structures & Unions. C Lecture Notes Introduction Structures –Collections of related variables (aggregates) under one name Can.
Structures. Outline Introduction Structure Definitions and declarations Initializing Structures Operations on Structures members Structures as Functions.
1. 2 Introduction Structure Definitions and Declarations Initializing Structures Operations on Structures Members Structures as Functions Parameters Array.
1 Introduction to Computer Programming Lecture 17 Structures (Part 2) Assist. Prof. Dr. Nükhet ÖZBEK Ege University Department of Electrical & Electronics.
Introduction to Computers and Programming Class 24 Structures (structs) Professor Avi Rosenfeld.
1 Pointers: Parameter Passing and Return. 2 Passing Pointers to a Function Pointers are often passed to a function as arguments  Allows data items within.
1 CSC103: Introduction to Computer and Programming Lecture No 17.
1 CSE1301 Computer Programming: Where are we now in the CSE1301 syllabus?
Chapter 11 Structures, Unions and Typedef 11.1 Structures Structures allow us to group related data items of different types under a common name. The individual.
Lecture 10: Structures. Outline Introduction Structure Definitions and declarations Initializing Structures Operations on Structures members Structures.
Pointers (Revision). 2 Overview Revision of Pointers Pointers and structs Basic Pointer Arithmetic Pointers and Arrays.
CS1010 Programming Methodology
CSI 121 Structure Programming Language Lecture 17 Arrays (Part 1)
EECE.2160 ECE Application Programming
2011/11/20: Lecture 15 CMSC 104, Section 4 Richard Chang
CSI 121 Structured Programming Language Lecture 23 Structures (Part 1)
Introduction to Computer Programming Lecture 17 Structures (Part 2)
CSI 121 Structured Programming Language Lecture 24 Structures (Part 2)
EKT150 : Computer Programming
EECE.2160 ECE Application Programming
EECE.2160 ECE Application Programming
EECE.2160 ECE Application Programming
Introduction to Computer Programming Lecture 16 Structures (Part 1)
EECE.2160 ECE Application Programming
Exam #1 February 23rd (Next Friday)
Programming in C Pointer Basics.
CSCE 206 Lab Structured Programming in C
EECE.2160 ECE Application Programming
EECE.2160 ECE Application Programming
EECE.2160 ECE Application Programming
Presentation transcript:

1 CSE1301 Computer Programming Lecture 21 Structures (Part 2)

2 Topics Structure Arrays of structs typedef structs and functions Pointers to structs structs within structs Data structures and modular design

3 Recall: #include #define MAXLEN 50 #define MAXN 20 struct StudentRec { char lastname[MAXLEN]; float mark; }; typedef struct StudentRec Student; marks4a.c Record of student last names and marks

4 Student readRecord ( void ) { Student newStudent; printf("Enter last name and mark: "); scanf("%s %f", newStudent.lastname, &(newStudent.mark) ); return newStudent; } Recall: Functions to read and print a student record void printRecord ( Student item ) { printf("Last name: %s\n", item.lastname); printf(" Mark: %.1f\n\n", item.mark); } marks4a.c

5 int main() { int count = 0; Student class[MAXN]; int i; printf("How many students? "); scanf("%d", &count); if (count > MAXN) { printf("Not enough space.\n"); exit(1); } for (i=0; i < count; i++) { class[i] = readRecord(); } printf("\nClass list:\n\n"); for (i=0; i < count; i++) { printRecord(class[i]); } return 0; } marks4a.c Recall: Sample main: an array of student records

6 Passing a struct Variable lastname : mark: studentA: int main() { Student studentA; studentA = readRecord(); return 0; }

7 Student readRecord ( void ) { Student newStudent; printf("Enter last name and mark: "); scanf("%s %f", newStudent.lastname, &(newStudent.mark)); return newStudent; } lastname: mark: newStudent: int main() { Student studentA; studentA = readRecord(); return 0; } Version 1 Passing a struct Variable (cont) lastname : mark: studentA:

8 Student readRecord ( void ) { Student newStudent; printf("Enter last name and mark: "); scanf("%s %f", newStudent.lastname, &(newStudent.mark)); return newStudent; } lastname: mark: studentA : lastname: mark: newStudent: Version 1 Passing a struct Variable (cont) int main() { Student studentA; studentA = readRecord(); return 0; }

9 Passing a struct Variable (cont) lastname: mark: studentA : int main() { Student studentA; studentA = readRecord(); return 0; }

10 int main() { Student studentA; studentA = readRecord(studentA); return 0; } Student readRecord ( Student newStudent ) { printf("Enter last name and mark: "); scanf("%s %f", newStudent.lastname, &(newStudent.mark) ); return newStudent; } Version 2 A similar thing happens here Passing a struct Variable (cont)

11 What if the struct is huge? Passing a struct Variable (cont) Student readRecord ( Student newStudent ) { printf("Enter last name and mark: "); scanf("%s %f", newStudent.lastname, &(newStudent.mark) ); return newStudent; } int main() { Student studentA; studentA = readRecord(StudentA); return 0; } Version 2

12 Passing a struct Pointer Pass a pointer to the struct variable instead! lastname: mark: studentA: studentPtr:

13 void readRecord ( Student *studentPtr ) { /* De-reference pointer here. */ } int main() { Student studentA; readRecord( &(studentA) ); return 0; } Passing a struct Pointer lastname: mark: studentA: studentPtr: lastname:

14 To de-reference a pointer to a struct variable: Style 1: Use the * operator void readRecord ( Student *studentPtr ) { printf("Enter last name and mark: "); scanf("%s %f", (* studentPtr ).lastname, & ( (* studentPtr ).mark) ); } marks4b.c Passing a struct Pointer studentPtr: mark: studentA: lastname:

15 To de-reference a pointer to a struct variable: Style 2: Use the -> operator void readRecord ( Student *studentPtr ) { printf("Enter last name and mark: "); scanf("%s %f", studentPtr -> lastname, & (studentPtr -> mark) ); } marks4c.c Passing a struct Pointer studentPtr: mark: studentA: lastname:

16 Example: Pointers to Structs-1 #include #define MAXLEN 50 #define MAXN 20 struct StudentRec { char lastname[MAXLEN]; float mark; }; typedef struct StudentRec Student; void readRecord ( Student *studentPtr ) { printf("Enter last name and mark: "); scanf("%s %f", studentPtr->lastname, &(studentPtr->mark)); } void printRecord ( Student *item ) { printf("Last name: %s\n", (*item).lastname); printf(" Mark: %.1f\n\n", (*item).mark); } marks4c.c

17 #include #define MAXLEN 50 #define MAXN 20 struct StudentRec { char lastname[MAXLEN]; float mark; }; typedef struct StudentRec Student; void readRecord ( Student *studentPtr ) { printf("Enter last name and mark: "); scanf("%s %f", studentPtr->lastname, &(studentPtr->mark) ); } void printRecord ( Student *item ) { printf("Last name: %s\n", (*item).lastname); printf(" Mark: %.1f\n\n", (*item).mark); } marks4c.c Example: Pointers to Structs-1 (cont)

18 #include #define MAXLEN 50 #define MAXN 20 struct StudentRec { char lastname[MAXLEN]; float mark; }; typedef struct StudentRec Student; void readRecord ( Student *studentPtr ) { printf("Enter last name and mark: "); scanf("%s %f", studentPtr->lastname, &(studentPtr->mark) ); } void printRecord ( Student *item ) { printf("Last name: %s\n", (*item).lastname); printf(" Mark: %.1f\n\n", (*item).mark); } marks4c.c Example: Pointers to Structs-1 (cont)

19 int main() { int count = 0; Student class[MAXN]; int i; printf("How many students? "); scanf("%d", &count); if (count > MAXN) { printf("Not enough space.\n"); exit(1); } for (i=0; i < count; i++) { readRecord( &(class[i]) ); } printf("\nClass list:\n\n"); for (i=0; i < count; i++) { printRecord( &(class[i]) ); } return 0; } marks4c.c Example: Pointers to Structs-2

20 Structs within Structs A struct can be a member of another struct Example: –A student record contains the last name, mark (ID Number, first name, etc) –A class list is a collection of student records (number of students, subject code, etc) –A departmental database is a collection of class lists (department name, number of subjects, etc)

21 Example: Student Record lastname: mark: struct StudentRec { char lastname[MAXLEN]; float mark; }; typedef struct StudentRec Student;

22 class: lastname: mark: lastname: mark: lastname: mark: Student class[MAXN]; struct StudentRec { char lastname[MAXLEN]; float mark; }; typedef struct StudentRec Student ; Example: Class Record

23 Information required to maintain a class list Number of students in the class (<= MAXN) Subject code class: lastname: mark: lastname: mark: lastname: mark: Student class[MAXN]; Example: Class Record (cont)

24 Information required to maintain a class list Number of students in the class (<= MAXN) Subject code char subjCode[MAXLEN]; int count; Student class[MAXN]; count : class : lastname: mark: lastname: mark: lastname: mark: subjCode : Example: Class Record (cont)

25 struct ClassRec { char subjCode[MAXLEN]; int count; Student class[MAXN]; }; typedef struct ClassRec ClassList; Example: Class Record (cont) count: class: lastname: mark: lastname: mark: lastname: mark: subjCode: “Encapsulates” the data needed to maintain a class list

26 ClassList subject[MAXSUBJ]; Example: Department Database subject:

27 char deptName[MAXLEN]; int count; ClassList subject[MAXSUBJ]; Example: Department Database (cont) subject: deptName : count :

28 Example: Department Database (cont) subject: deptName: count: struct DatabaseRec { char deptName[MAXLEN]; int count; ClassList subject[MAXSUBJ]; }; typedef struct DatabaseRec Database; “Encapsulates” the data needed to maintain a database

29 Access to Struct Members subject: deptName: count: How do I put the mark 97.5 there? Database finalMarks; Suppose we declare a struct variable:

30 Access to Struct Members (cont) finalMarks subject: deptName: count: finalMarks:

31 Access to Struct Members (cont) finalMarks.subject[1] subject: deptName: count: finalMarks:

32 Access to Struct Members (cont) finalMarks.subject[1].list[0] subject: deptName: count: finalMarks:

33 Access to Struct Members (cont) finalMarks.subject[1].list[0].mark = 97.5; subject: deptName: count: finalMarks:

34 Access to Struct Members (cont) finalMarks.subject[1].list[0].mark = 97.5; subject: deptName: count: finalMarks: Is there a simpler way?

35 Data Structures and System Design: Structure Charts A modular design makes handling of complex data structures easy A module handles operations on each data structure The level of the module in the structure chart should (more or less) correspond to the size of the data they handle More on Structure Charts in Lecture 22

36 Example: Data and Modules Student Record ( Student ) Class Record ( ClassList ) Department Database ( Database ) readRecordprintRecord readListprintListinitList readDBaseprintDBaseinitDBase main

37 Example: Data and Modules Student Record ( Student ) Class Record ( ClassList ) Department Database ( Database ) printRecord Student readRecord Student main

38 Example: Data and Modules Student Record ( Student ) Class Record ( ClassList ) Department Database ( Database ) main printRecord Student printList ClassList readList ClassList initList ClassList readRecord Student

39 Example: Data and Modules Student Record ( Student ) Class Record ( ClassList ) Department Database ( Database ) main printDBase Database readDBase Database initDBase Database printRecord Student printList ClassList readList ClassList initList ClassList readRecord Student More on Structure Charts in Lecture 22

40 Example: Modules for Student Record struct StudentRec { char lastname[MAXLEN]; float mark; }; typedef struct StudentRec Student; void readRecord ( Student *studentPtr ); void printRecord ( const Student *item ); dbase2a.c

41 Example: Modules for Student Record (cont) void readRecord ( Student *studentPtr ) { printf("Enter last name and mark: "); scanf("%s %f", studentPtr->lastname, &(studentPtr->mark)); } void printRecord ( const Student *item ) { printf("Last name: %s\n", item->lastname); printf(" Mark: %.1f\n\n", item->mark); } dbase2a.c

42 struct ClassRec { char subjCode[MAXLEN]; int count; }; typedef struct ClassRec ClassList; void initList ( ClassList *list ); void readList ( ClassList *list ); void printList ( const ClassList *list ); Example: Modules for Class Record dbase2b.c Student student[MAXN];

43 void initList ( ClassList *list ) { printf("\nEnter subject code: "); scanf("%s", list->subjCode); printf("How many students? "); scanf("%d", &(list->count) ); if (list->count > MAXN) { printf("Not enough space.\n"); exit(1); } dbase2b.c Example: Modules for Class Record (cont)

44 void printList ( const ClassList *list ) { int i; printf("\nClass list for %s:\n\n", list->subjCode); for (i=0; i count; i++) { } void readList ( ClassList *list ) { int i; for (i=0; i count; i++) { } Example: Modules for Class Record (cont) dbase2b.c readRecord(&(list->student[i])); printRecord(&(list->student[i]));

45 struct DatabaseRec { char deptName[MAXLEN]; int count; }; typedef struct DatabaseRec Database; void initDBase ( Database *dbase ); void readDBase ( Database *dbase ); void printDBase ( const Database *dbase ); Example: Modules for Database dbase2c.c ClassList subject[MAXSUBJ};

46 void initDBase ( Database *dbase ) { printf("\nEnter department or faculty code: "); scanf("%s", dbase->deptName); printf("How many subjects? "); scanf("%d", &(dbase->count) ); if (dbase->count > MAXSUBJ) { printf("Not enough space.\n"); exit(1); } Example: Modules for Database (cont) dbase2c.c

47 Example: Modules for Database (cont) void printDBase ( const Database *dbase ) { int i; printf("\nDEPARTMENT/FACULTY CODE: %s\n", dbase->deptName); for ( i=0; i count; i++ ) { } dbase2c.c printList(&(dbase->subject[i])); void readDBase ( Database *dbase ) { int i; for ( i=0; i count; i++ ) { } initList(&(dbase->subject[i])); readList(&(dbase->subject[i]));

48 #include #define MAXLEN 50 #define MAXN 100 #define MAXSUBJ 5 #include "dbase2a.c" #include "dbase2b.c" #include "dbase2c.c" int main() { Database finalMarks; return 0; } Example: Test Main Program dbase2.c initDBase(&finalMarks); readDBase(&finalMarks); printDBase(&finalMarks);

49 Example: Change definition of student record which modules/files do I need to modify in order to use student ID instead of last name? main printDBase Database readDBase Database initDBase Database printRecord Student printList ClassList readList ClassList initList ClassList readRecord Student

50 Example: Change definition of student record (cont) struct StudentRec { long IDNumber; float mark; }; typedef struct StudentRec Student; void readRecord ( Student *studentPtr ); void printRecord ( const Student *item ); void readRecord ( Student *studentPtr ) { printf("Enter ID Number and mark: "); scanf(”%ld %f", &(studentPtr->IDNumber), &(studentPtr->mark)); } void printRecord ( const Student *item ) { printf(”ID Number: %ld\n", item->IDNumber); printf(" Mark: %.1f\n\n", item->mark); } dbase1a.c

51 Documentation of Structs Data documentation, like function documentation, is very important Can determine a team’s success in completing a large software project Should include information on: –assumptions and limitations –operations and corresponding modules –correct usage

52 /***********************************************************\ * DATA: * Database * * DESCRIPTION: * A database is a collection of class lists for subjects * conducted by a school or department. * * USAGE: * A database variable can store class lists for up to * MAXSUBJ subjects. The member `count' keeps track of * the number of class lists in the database. * * A data of this type needs to be initialized using the * function initDBase() before use. The member `count' * has to be initialized to a valid value. * * Use the function readDBase() to initialize and read * data into each class list. Use the function printDBase() * to print the content of the entire database. * \***********************************************************/ Example: Data documentation

53 Reading Deitel and Deitel - Sections 10.1 to 10.7