210 likes | 324 Views
Computers and programming 1. The 11 th lecture Jiří Šebesta. TOPIC – programming with dynamic variables. Coupling with dynamic variables Dynamic database - example. Approach using array of pointers
E N D
Computers and programming1 The11th lecture Jiří Šebesta
TOPIC – programming with dynamic variables Coupling with dynamic variables Dynamic database - example
Approach using array of pointers • Allocated static array of pointer to dynamic variable (structure) – max. number of structures is fixed in advance Coupling with dynamic variables (1/13)
Linear list approach • The first pointer to the first structure is only allocated in memory. Each structure has pointer to the following structure as item – max. number of structures is restricted only by memory capacity. Coupling with dynamic variables (2/13)
Linear list approach - modified • Two static pointers to the first and last structure (for simple implementation). Coupling with dynamic variables (3/13)
Linear list – insertion of unknown number of competitors (broad jumpers) in to the list including results (length of jump) Coupling with dynamic variables (4/13) • Structure and global variables typedef struct comp // competitor record { charname[10]; intjump; struct comp *next; }t_comp; t_comp *first;// ptr to the first comp. - global t_comp *last;// ptr to the last comp. - global intcnt=0;// the number of recorded comp. - global comp is structure namespace t_compis type namespace
Function for adding of a competitor and his length of jump to the linear list Coupling with dynamic variables (5/13) voidadd(char*cname, int cjump)// add comp. record { t_comp *ccomp;// ptr to a comp ccomp =(t_comp*)malloc(sizeof(t_comp)); strcpy(ccomp->name, cname);// record filling ccomp->jump = cjump; cnt++;// the number of records plus one if(cnt==1) { first = ccomp;// add the first record last = ccomp; } else { last->next=ccomp;// add next record last=ccomp; } }
List of competitors printing including length of jump according to insertion order (from the first to the last) Coupling with dynamic variables (6/13) voidshow(void) { t_comp *scomp; int acnt=cnt; scomp=first; do { printf("%s: %d cm\n", scomp->name, scomp->jump); scomp=scomp->next; } while(--acnt >0); }
main()function for application with commands Coupling with dynamic variables (7/13) int main(void) { char cmd, aname[10]; int ajump; printf("\nA: Add, S: Show, Q: Quit\n"); scanf("%c", &cmd); fflush(stdin); while(!(cmd =='Q'|| cmd =='q')) { if(cmd=='A'|| cmd=='a') { printf("\nName:"); scanf("%s", aname); fflush(stdin); printf("\nJump [cm]:"); scanf("%d",&ajump); fflush(stdin); add(aname, ajump); }
if(cmd=='S'|| cmd=='s') show(); printf("\nA: Add, S: Show, Q: Quit"); scanf("%c",&cmd); fflush(stdin); } return0; } Coupling with dynamic variables (8/13) Example: Ex71.c
Modification of the previous example by algorithm for searching of the best competitor Coupling with dynamic variables (9/13) • Replenishment of the function add() voidadd(char*cname, int cjump)// add comp. record { // the same as in the example 71 if(cnt==1) { first = ccomp;// add the first record last = ccomp; } else { last->next=ccomp;// add next record last=ccomp; } last->next= NULL;// last points to null address }
void results(void) { t_comp *scomp,*gold; int mjump = first->jump; gold = first; scomp = first->next; do { if(scomp->jump > mjump) { gold = scomp; mjump = gold->jump; } scomp=scomp->next; } while(scomp != NULL); printf("\nWin %s (%d cm)\n", gold->name, gold->jump); } Coupling with dynamic variables (10/13) Example: Ex72.c
Stack approach • One static pointer to the top of stack (heap) – system LIFO (last in – first out). Coupling with dynamic variables (11/13)
Tree approach Coupling with dynamic variables (12/13)
Complicated coupling of structures – family tree Coupling with dynamic variables (13/13) strcpy(me->p_sists[0]->Name,”Jana”); me->p_sists[0]-> p_mother = me-> p_mother; //uncles: me->p_mother-> p_brths[x] me->p_father-> p_brths[x]
Submission: Dynamic database - example (1/5) • Build-up a console application, which dynamically generate a database of competitors (broad jumpers). Each structure consists of competitor’s name, competitor’s country, length of the jump, and pointer to the other structure of competitor. Create a function for appending of the competitor including length of jump and function for printing of the competitors including their results. • Modify the function for appending of competitor: a new competitor have to be add to the linear list according to his result (length of the jump) – list is always sorted regarding the length of the jump.
Linear sorted list Dynamic database - example (2/5)
Linear list – insertion of unknown number of competitors (broad jumpers) to the list including result (length of the jump) Dynamic database - example (3/5) • Structure and global variables typedef struct t_comp // competitor record { charname[10]; char country[10]; intjump; t_comp *next; }; t_comp *first;// ptr to the first comp. - global t_comp *last;// ptr to the last comp. - global int count=0;// the number of recorded comp. - global
Modified function for appending of the competitor and his length of the jump to the linear list with automatic sorting regarding the result Dynamic database - example (4/5) void add(char*cname, char*ccountry, int cjump) { t_comp *ccomp, *prevcomp, *nextcomp; ... • Programming in lecture
Records releasing from memory Dynamic database - example (5/5) Complete application will be issued in web pages in December, 5 as Ex73sol.c Example: Ex73.c
TOPIC OF THE NEXT LECTURE Advanced algorithms in C THANK YOUFOR YOUR ATTENTION