Ingineria Sistemelor de Programe (ISP), autor Sef de lucrari Dr. Ing.

Mihail Buricea

Laborator nr 3 Structuri complexe de date in ingineria programarii
1. Probleme rezolvate cu liste. Problema 1.1. Sa se ceeze o lista dublu inlantuita cu coordonatele spatiale ale mai multor puncte din spatiu si apoi sa se afiseze pe ecran punctele cu coordonatele lor de la inceput spre sfarsit si invers. #include<stdio.h> #include<stdlib.h> #include<alloc.h> #include<conio.h> void main(void) { struct tip_punct { float x; float y; float z; struct tip_punct *anterior; struct tip_punct *urmator; } *var_punct,*primul_punct,*ultimul_punct; float wx,wy,wz; char raspuns; int n=0,nf; /* citirea coordonatelor primului punct */ primul_punct=(struct tip_punct*)malloc(sizeof(struct tip_punct)); if(primul_punct==NULL) { printf("\n memorie insuficienta ptr primul punct"); return; } printf("\n abscisa punctului P(%d),x%d=",n,n); scanf("%f",&wx); printf("\n ordonata punctului P(%d),y%d=",n,n); scanf("%f",&wy); printf("\n cota punctului P(%d),z%d=",n,n); scanf("%f",&wz); primul_punct->x=wx; primul_punct->y=wy; primul_punct->z=wz; primul_punct->anterior=NULL; primul_punct->urmator=NULL; ultimul_punct=primul_punct; var_punct=primul_punct; printf("\n continuati adaugarea de puncte?(d/n):"); raspuns=getche(); while((raspuns=='d')||(raspuns=='d')) { /* citirea coordonatelor unui alt punct */ n++; printf("\n abscisa punctului P(%d),x%d=",n,n); scanf("%f",&wx); printf("\n ordonata punctului P(%d),y%d=",n,n); scanf("%f",&wy); printf("\n cota punctului P(%d),z%d=",n,n); scanf("%f",&wz); ultimul_punct=(struct tip_punct*)malloc(sizeof(struct tip_punct)); if(ultimul_punct==NULL) {

1

while(var_punct->urmator!=NULL) { printf("\n P%d(%f. printf("\n ============================================="). var_punct=primul_punct.var_punct->x. return. ultimul_punct->y=wy.n=0.var_punct->x. Ing. Se va continua aceasta procedura de prelucrare a datelor referitoare la punctele consecutive pana cand variabila var_punct va avea valoarea egala cu variabila ultimul_punct. /* listarea punctelor de la sfarsit catre inceput */ printf("\n lista punctelor de la sfarsit catre inceput:").var_punct->x.var_punct->x). } printf("\n P%d(%f. Daca in variabila de tip pointer var_punct se pune continutul variabilei primul_punct. urmator).contine cota primului punct. printf("\n =============================================").n. Referirea la un camp al variabilei dinamice de tip punct se face prin var_punct-> urmat de numele campului: var_punct-> x .var_punct->x).n=0. } Variabilele alocate dinamic vor fi memorate in zona Heap. Mihail Buricea printf("\n memorie insuficienta ptr ultimul punct").%f.%f)". sau cand campul var_punct->urmator va avea valoarea NULL. printf("\n continuati adaugarea de puncte?(d/n):"). } /* listarea punctelor de la inceput pana la sfarsit */ printf("\n lista punctelor de la inceput pana la sfarsit:").contine abscisa primului punct. De asemenea se poate initia un sir de instructiuni pentru a extrage pe rand datele referitoare la punctele memorate astfel: var_punct = var_punct->urmator (var_punct va contine adresa de memorie in care a fost memorat urmatorul punct) Referirea la campurile noului punct se va face la fel ca mai inainte.var_punct->x. respectiv ultimului punct memorat.%f)".Ingineria Sistemelor de Programe (ISP).n.var_punct->x). nf--. ultimul_punct->z=wz. 2 . } printf("\n P%d(%f.%f. Se observa ca variabilele dinamice (de tip pointer) pot interveni in program in doua moduri. autor Sef de lucrari Dr.var_punct->x. var_punct=ultimul_punct. nf=n. var_punct=var_punct->anterior.%f. cu ajutorul variabilelor de tip pointer incluse in variabilele dinamice (anterior.var_punct->x).var_punct->x.%f)".n. var_punct=var_punct->urmator.contine ordonata primului punct.contine adresa unde este memorat urmatorul punct.n. raspuns=getche(). n++. Parcurgerea si extragerea datelor referitoare la puncte sunt permise numai secvential.var_punct->x. var_punct->urmator . ultimul_punct->urmator=NULL. Locurile din memorie ale celorlalte puncte sunt necunoscute. var_punct -> z . var_punct -> y . printf("\n ============================================="). while(var_punct->anterior!=NULL) { printf("\n P%d(%f.%f. ultimul_punct->anterior=var_punct. } ultimul_punct->x=wx. atunci var_punct = primul_punct si se poate referi primul punct prin var_punct. printf("\n ============================================="). var_punct->urmator=ultimul_punct.%f)". var_punct=ultimul_punct.var_punct->x. La finalul executiei programului se poate sti adresa primului.

hl. etc.ml.kg.h> struct tipart { int ca. artcurent->urm=NULL. printf("\n denumire articol:").ml. char umas[3].mp.h> #include<conio..&artcurent->ca).l.&artcurent->denumire). } void citestelista() { artcurent=artprim. printf("\n pret articol(real):"). scanf("%s". printf("\n unitate de masura (bc. caz in care singurele operatii permise intre ele sunt cele de atribuire (initializarea unei variabile dinamica cu constanta NULL sau tansferul continutului intre variabile dinamice de acelasi tip). Mihail Buricea Primul.artcurent->denumire. denumirea produsului un camp alfanumeric de maximum 15 caractere.mp. } else /*nu e primul apel */ artanterior->urm=artcurent. Al doilea mod este cand se foloseste ca si referire la o variabila dinamica (var_dinamica1-> var_dinamica2->) caz in care se lucreaza cu variabile dinamice. scanf("%s". char raspuns. cand se foloseste variabila simplu.l. int primapel=1. artcurent->umas.kg. Problema 1.h> #include<float. void adaugare() { artcurent=(struct tipart*)malloc(sizeof(struct tipart)).*artanterior. struct tipart *artprim. scanf("%ld". if(artcurent==NULL) { printf("\n memorie insuficienta ptr articolul curent").Ingineria Sistemelor de Programe (ISP). #include<stdio.h> #include<string. primapel=0. } void listare() { printf("\n %4d %-15s %-2s %7ld".artcurent->pret). Sa se creeze o lista simplu inlantuita de articole cu structura:cod produs un camp numeric de maximum 4 caractere.9999):"). char denumire[15].&artcurent->umas). fara referire.artcurent->ca. in ordinea introducerii de la tastatura si apoi sa se afiseze pe ecran lista. return.2. }. unitatea de masura un camp de 2 caractere alfabetice(bc.mc. 3 .h> #include<alloc. Ing. struct tipart *urm. artanterior=artcurent. scanf("%d".hl.) si pretul produsului.&artcurent->pret). } if(primapel==1) { artprim=artcurent. long int pret. autor Sef de lucrari Dr.etc):").*artcurent. printf("\n cod articol(1.mc.

} citestelista(). ordonare si listare). } void main(void) { printf("\n creati lista de articole?(d/n):"). int media. prenume si media.Ingineria Sistemelor de Programe (ISP). if(studprim==NULL) { printf("\n memorie insuficienta ptr primul student"). while(artcurent->urm!=NULL) { listare(). ordonarea dupa medie si afisarea listei studentilor folosindu-se cate o functie adecvata pentru fiecare operatie (creare. struct tipstud *ant. printf("\n nume student:"). artanterior=NULL. } listare(). pret "). int nrstud. char raspuns. printf("\n ================================="). raspuns=getche(). }. artcurent=artcurent->urm. raspuns=getche(). #include<stdio.auxp[20]. Ing.m.ok. struct tipstud *urm. void creare() { studprim=(struct tipstud*)malloc(sizeof(struct tipstud)). } Problema 1. struct tipstud *studprim. return.*studultim.auxcm. while((raspuns=='d')||(raspuns=='D')) { adaugare().*student. printf("\n =================================").h> #include<conio. } do { printf("\n cod matricol (1-99):").3. Sa se scrie programul in C pentru crearea. printf("\n adaugati in lista de articole?(d/n):"). char auxn[20].&studprim->cm). char prenume[20]. 4 . autor Sef de lucrari Dr.h> #include<alloc.*studcurent. char nume[20].h> #include<string. nume. } while ((studprim->cm<1)||(studprim->cm>99)). scanf("%d". Se considera o lista dublu inlantuita de studenti cu structura:cod matricol.h> struct tipstud { int cm. primapel=1.auxmed. Mihail Buricea printf("\n cod denumire u.h> #include<float.

nrstud++. studultim=studprim.&studultim->cm). raspuns=getche(). return. return.&studultim->media). printf("\n continuati adaugarea unui student in lista ?(d/n):"). return. if(studcurent==NULL) { printf("\n memorie insuficienta ptr studentul curent").Ingineria Sistemelor de Programe (ISP). studprim->ant=NULL. printf("\n prenume student:"). } free(studcurent). printf("\n nume student:"). autor Sef de lucrari Dr. studcurent=studprim. scanf("%s". if(studultim==NULL) { printf("\n memorie insuficienta ptr ultimul student").studprim->nume). studultim->ant=studcurent. studcurent=studultim.studultim->prenume). } while ((studultim->cm<1)||(studultim->cm>99)). Mihail Buricea scanf("%s".studultim->nume). } do { printf("\n cod matricol (1-99):"). Ing. printf("\n continuati adaugarea unui student in lista ?(d/n):"). studultim->urm=NULL. nrstud=1. scanf("%s".&studprim->media). } while ((studprim->media<1)||(studprim->media>10)). printf("\n prenume student:"). studprim->urm=NULL. studcurent->urm=studultim. scanf("%d". raspuns=getche(). } void listare() { studcurent=(struct tipstud*)malloc(sizeof(struct tipstud)). scanf("%d". } while ((studultim->media<1)||(studultim->media>10)).studprim->prenume). 5 . } printf("\n doriti afisarea listei de studenti?(d/n):"). scanf("%s". while((raspuns=='d')||(raspuns=='d')) { studultim=(struct tipstud*)malloc(sizeof(struct tipstud)). scanf("%d". do { printf("\n media (1-99):"). do { printf("\n media (1-99):").

while((raspuns=='d')||(raspuns=='d')) { studcurent=studprim. strcpy(studcurent->urm->prenume. while (studcurent->urm!=NULL) { printf("\n %5d %-10s %-10s %3d". studcurent->urm->media=auxmed. return. studcurent->urm->cm=auxcm. studcurent=studcurent->urm. studcurent->cm=studcurent->urm->cm.auxp). } 6 . printf("\n ======================================="). studcurent=studcurent->urm. Mihail Buricea raspuns=getche(). return. } free(studcurent). autor Sef de lucrari Dr. printf("\n matricol nume prenume media"). } void ordonare() { printf("\n doriti ordonarea dupa medii a listei?(d/n):").studcurent->prenume). strcpy(auxp.Ingineria Sistemelor de Programe (ISP). do if(studcurent->media>studcurent->urm->media) { auxcm=studcurent->cm. ok=1. studcurent->media=studcurent->urm->media. } printf("\n %5d %-10s %-10s %3d". while(ok==1) { ok=0. studcurent=(struct tipstud*)malloc(sizeof(struct tipstud)). Ing. strcpy(studcurent->nume.auxn).studcurent->urm->nume). while (studcurent->urm!=NULL). strcpy(studcurent->urm->nume.studcurent->urm->prenume).studcurent->media). strcpy(auxn. } while((raspuns=='d')||(raspuns=='d')) { ok=1. raspuns=getche(). studcurent->prenume. studcurent->prenume. printf("\n doriti afisarea listei de studenti?(d/n):"). auxmed=studcurent->media.studcurent->nume. if(studcurent==NULL) { printf("\n memorie insuficienta ptr studentul curent").studcurent->cm.studcurent->nume.studcurent->media). } else studcurent=studcurent->urm. printf("\n =======================================").studcurent->cm. raspuns=getche().studcurent->nume). studcurent=studprim. strcpy(studcurent->prenume.

pstud->urm=NULL. Mihail Buricea printf("\n doriti ordonarea dupa medii a listei?(d/n):").4. void adaugare(int wcm. autor Sef de lucrari Dr. } } /* sf procedura de adaugare*/ void stergere(struct tipstud *pstud) { struct tipstud *qstud. struct tipstud *prim. ultim=pstud. pstud=(struct tipstud*)malloc(sizeof(struct tipstud)).h> struct tipstud { int cm. return.h> #include<alloc. } free(studcurent). }. listare(). } Problema 1. actualizare (adaugari si stergeri) si afisarea listei studentilor promovati. ordonare(). Se considera o lista simplu inlantuita de studenti cu structura:cod matricol. if(pstud==NULL) { printf("\n memorie insuficienta").Ingineria Sistemelor de Programe (ISP). raspuns=getche(). float media. else { ultim->urm=pstud. listare(). Ing. } void main(void) { creare(). if(prim==pstud) { prim=pstud->urm. pstud->cm=wcm. Sa se scrie programul in C pentru crearea. } 7 .h> #include<conio.*ultim. if(prim==NULL) prim=ultim=pstud. if(!pstud) return. pstud->media=wmedia. free(studprim).h> #include<process.h> #include<string. char nume[20]. struct tipstud *urm. nume si media. #include<stdio.wnume). } strcpy(pstud->nume. if(prim==NULL) ultim=NULL. free(studultim).float wmedia) { struct tipstud *pstud. a studentilor bursieri(peste media 8) si a studentilor restantieri.char *wnume.

printf("\n ===============================\n"). printf("\n Numarul studentilor:"). printf("\n ==============================="). qstud=pstud->urm. } printf("\n lista studentilor bursieri: ").wnume. pstud=qstud. if(pstud==ultim) ultim=qstud. adaugare(wcm.scanf("%d".pstud=pstud->urm) printf("\n %d %-20s %5. { if(qstud->urm==NULL) { printf("/n nodul nu apartine listei").pstud=pstud->urm) if(pstud->media>=8) printf("\n %d %-20s %5. } } void main(void) { char wnume[20].2f".pstud->media).*qstud. float wmedia. while(pstud!=NULL) { if(pstud->media<5) { printf("\n %d %-20s %5.pstud->cm. scanf("%s". Ing. } else pstud=pstud->urm. pstud=prim.pstud->nume. printf("\n Nume:"). } 8 .i++) { printf("\n Codul matricol:").&wcm). printf("\n ===============================").Ingineria Sistemelor de Programe (ISP). printf("\n lista studentilor promovati ").2f".pstud!=NULL. Mihail Buricea else { for(qstud=prim. stergere(pstud). int i. printf("\n ===============================\n"). } qstud->urm=pstud->urm.wnume).pstud->media).pstud->nume. } free(pstud).pstud->nume. struct tipstud *pstud. printf("\n ==============================="). for (i=0.&wmedia). return.(qstud->urm!=pstud)&&(qstud->urm!=NULL). printf("\n lista studentilor restantieri: "). for(pstud=prim.pstud->cm.pstud->cm. for(pstud=prim.2f".scanf("%f". printf("\n Media:"). int wcm.wmedia). } printf("\n ===============================\n"). scanf("%d". autor Sef de lucrari Dr.i<n.pstud!=NULL. prim=ultim=NULL.pstud->media).qstud=qstud->urm).&n).n.

Evenimentele care pot avea loc cu aceasta stiva de containere sunt: sosirea unuinou container pentru stivuire simulata prin apasarea tastei S si incarcarea intr-un mijloc de transport a unui container simulata prin apasarea tastei I.struct tipdata *ptrdata.int *wgreutate) { struct tipstiva *ptrcontainer. /* descrierea functiei push() */ int push(int *wcc. continutul. Ing. luna si an) si greutatea in kg. ptrcontainer->greutate=*wgreutate. adica primul element din lista de containere (ultimul asezat in stiva). data ambalarii (zi. ptrcontainer->urm=varf.luna=wdata->luna.zi=wdata->zi.int *ptrgreutate) { 9 .h> #include<conio. autor Sef de lucrari Dr.char *ptrcontinut. }. Sa se simuleze activitatile de stivuire si de incarcare intr-un mijloc de transport a containerelor din stiva. Pentru un container sosit pentru stivuire se vor cere:codul. struct tipdata data. ptrcontainer=(struct tipstiva*)malloc(sizeof(struct tipstiva)). Se considera o stiva de containere cu caracteristicile:cod container un numar cuprins intre 1 si 99. identificata prin variabila varf care arata containerul vizibil din varful stivei. if(ptrcontainer==NULL) { printf("\n memorie insuficienta ptr memorarea unui container "). Stiva containerelor se va implementa ca o lista simplu inlantuita. struct tipstiva *varf. char continut[20]. }. ptrcontainer->data. Probleme rezolvate cu stive si cozi. continut un camp alfanumeri de 20 caractere. struct tipstiva { int cc.h> struct tipdata { int zi. Functia pop() va oferi informatii.char *wcontinut.h> #include<string. int an. prin intermediul parametrilor sai. return 1.an=wdata->an. Mihail Buricea 2. return 0. data ambalarii si greutatea iar la incarcarea sa intr-un mijloc de transport pentru plecare se afisaza aceleasi informatii. Problema 2. int luna. despre containerul scos din stiva pentru expediere si va returna valoarea 1 daca in stiva nu mai sunt containere si valoarea 0 in caz contrar.Ingineria Sistemelor de Programe (ISP).struct tipdata *wdata. strcpy(ptrcontainer->continut. Intrucat toate operatiile asupra unei stive se fac pe la capatul de inceput al listei. ptrcontainer->data. } /* descrierea functiei de extragere din stiva */ int pop(int *ptrcc.1. varf=ptrcontainer.wcontinut). int greutate. #include<stdio.h> #include<alloc. ptrcontainer->data. } ptrcontainer->cc=*wcc. Functia push() va simula asezarea unui nou container in stiva si va returna valoarea 0 in cazul in care nu s-a reusit alocarea dinamica a spatiului de memorie necesar pentru introducerea unui nou element (informatiile containerului) in stiva de containere si valoarea 1 in caz contrar. nu este necesara memorarea adresei ultimului element din lista (care a fost asezat primul in stiva). struct tipstiva *urm.

printf("\n s . printf("\n continut container:"). rasp=getche(). int terminat=0.ptrcontainer->continut).luna.an).&wgreutate).&wdata. break.scanf("%s".wdata.scanf("%d".wcontinut.&wdata. varf=ptrcontainer->urm. *ptrcc=ptrcontainer->cc.zi.scanf("%d".wcontinut.din %d/%d/%d a fost scos din stiva". case 's': if(pop(&wcc.&wcontinut). printf("\n Alegeti operatia dorita:"). free(ptrcontainer). ptrcontainer=varf. case 't': terminat=1. char wcontinut[20]. *ptrgreutate=ptrcontainer->greutate.terminare program"). Mihail Buricea struct tipstiva *ptrcontainer.zi.&wdata. struct tipdata wdata. break. printf("\n anul ambalarii:").scoatere container din stiva").&wcc). while(!terminat) { clrscr().zi).%s.Ingineria Sistemelor de Programe (ISP).&wgreutate)) printf("\n containerul a fost asezat in stiva"). varf=NULL.asezare container in stiva"). char rasp.wdata.&wdata. printf("\n greutate container:").an.&wdata. else printf("\n nu mai exista containere").scanf("%d".an). autor Sef de lucrari Dr. if(push(&wcc. int wgreutate. } printf("\n Apasati o tasta pentru continuare:"). printf("\n a . ptrdata->zi=ptrcontainer->data. Ing. switch (rasp) { case 'a': printf("\n cod container:"). } void main(void) { int wcc. getch(). ptrdata->luna=ptrcontainer->data.wgreutate.luna. wcc.wdata.%d kg.wcontinut. else printf("\n memorie insuficienta ptr container"). break.scanf("%d". ptrdata->an=ptrcontainer->data.scanf("%d". strcpy(ptrcontinut. printf("\n luna ambalarii:"). default: printf("\n operatie aleasa gresit"). return 1. if(!varf) return 0. printf("\n t . printf("\n ziua ambalarii:").&wgreutate)) printf("\n containerul %d.luna). } } 10 .

return ptrmasina[recupos-1]. }. int recupos=0. la o statie de alimentare cu benzina. Functia qstore() va simula asezarea unei noi masini la coada si verifica daca lista este completa. Listarea masinilor din coada presupune afisarea acelorasi informatii pentru toate masinile care sunt la coada si urmeaza sa se alimenteze cu benzina. #include<stdio. cu caracteristicile: numarul de inmatriculare un camp alfanumeric de 10 caractere. } /* descrierea functiei de extragere masina din coada */ struct tipmasina *qretrieve(void) { if(recupos==freepos) { printf("\n nu mai sunt masini la coada"). eliminarea din coada a masinii alimentate simulata prin apasarea tastei e si listarea masinilor din coada simulata prin apasarea tastei l. return NULL. freepos++. int freepos=0. culoarea si capacitatea rezervorului iar la plecarea masinii dupa ce a fost alimentata se vor afisa aceleasi informatii. tipul.h> #include<conio. do 11 . struct tipmasina masina. } void adaugare() { char r. Toate operatiile asupr unei cozi se fac pe la ambele capate ale listei si constau fie din adaugarea unei structuri de tip masina la sfarsitul cozii fie din extragerea (stergera) unei structuri de tip masina la inceputul cozii.h> #define MAX 20 struct tipmasina { char numar[10]. culoarea un camp alfanumeric de 10 caractere. autor Sef de lucrari Dr. int capacitate.2. char culoare[10].*qretrive(void). Pentru o masina sosita la coada se vor cere:numarul de inmatriculare. Ing.*ptrmasina. struct tipmasina *ptrmasina[MAX]. tipul masinii un camp alfanumeric de 15 caractere.h> #include<alloc.Ingineria Sistemelor de Programe (ISP). Mihail Buricea Problema 2. eliminarea din capul cozii a masinii alimentate si listarea tuturor masinilor din coada folosindu-se cate o functie adecvat definite. adaugare() */ void qstore(struct tipmasina *q) { if(freepos==MAX) { printf("\n lista plina"). Functia qretrieve() simuleaza eliberarea unei masini din coada si va returna NULL daca nu mai sunt masini in coada si va returna pozitia urmatoarei masini care va fi eliberata. Coada masinilor se va implementa ca un tablou de pointeri spre articole de tip structura care se initializeaza cu valoarea NULL. Se considera o coada de masini. simulata prin apasarea tastei a. /* descrierea functiei de adaugare masina la coada. Sa se simuleze activitatile de alimentare cu benzina ale masinilor din coada: adaugarea unei masini la coada. Evenimentele care pot avea loc cu aceasta coada sunt: adaugarea unei noi masini la coada. } ptrmasina[freepos]=q.h> #include<process. return.h> #include<string. char tip[15]. } recupos++. permitand in acest mod afisarea informatiilor despre masina care va fi eliberata.

autor Sef de lucrari Dr. switch (rasp) { 12 .++t) ptrmasina[t]=NULL. } while ((r!='d')&&(r!='D')). } /* descrierea functiei de stocare a unei masini */ void main(void) { int t. printf("\n date despre masina iesita de la coada").alimentare si iesire masina de la coada"). scanf("%s". } /* descrierea functiei de extragere (stergere) din stiva */ void stergere() { \ struct tipmasina *ptrmasina. qstore(ptrmasina).ptrmasina[t]->numar. ptrmasina[t]->culoare. printf("\n masina %-10s.freepos+1).++t) printf("\n %-10s%-15s %-10s %5d". printf("\n l .%-15s.t<freepos. printf("\n ==============================================="). printf("\n e . for(t=0. scanf("%s". ptrmasina=(struct tipmasina*)malloc(sizeof(struct tipmasina)). r=getche().t<MAX. for(t=recupos. printf("\n capacitatea rezervorului:").ptrmasina->capacitate). ptrmasina->culoare. Ing.&ptrmasina->numar). scanf("%s". printf("\n ================================================").%-10s.consultare si listare masini din coada").asezare masina la coada ptr alimentare"). if(!ptrmasina) { printf("\n memorie insuficienta ptr o noua alocare"). Mihail Buricea { printf("\n introduceti in coada masina %d ?(d/n):".%3d l". rasp=getche(). printf("\n ===================================================").Ingineria Sistemelor de Programe (ISP). printf("\n a .ptrmasina->numar.ptrmasina[t]->capacitate). getch(). printf("\n t . getch(). if((ptrmasina=qretrieve())==NULL) return.&ptrmasina->tip). char rasp.ptrmasina->tip. printf("\n tipul masinii:"). return.&ptrmasina->capacitate). } printf("\n numarul de inmatriculare al masinii:"). printf("\n numar tip culoare capacitate(l)"). printf("\n ==================================================="). } void listare() { int t. for(. printf("\n Alegeti operatia dorita:").. scanf("%d".&ptrmasina->culoare).terminare program"). printf("\n culoarea masinii:").) { clrscr().ptrmasina[t]->tip.

tip articol .camp de tip numeric apartinind multimii [100. break. repere) de organizare secventiala. printr-o coada corespunzatoare si sa se afiseze lista tuturor tirurilor care au fost incarcate si au plecat. cantitatea transportata. pornind de la informatiile introduse de la tastatura si efectuindu-se validarile corespunzatoare. Problema 3. hl).2. Problema 3. stergere(). unitate de masura si pret) si sa se ordoneze crescator lista de produse dupa cod de produs.3.7.6. mc. 1=articol de intrare. Tema de casa nr 2. Sa se creeze un fisier de articole (materiale.60. lista tirurilor care asteapta sa fie incarcate impreuna cu toate caracteristicile acestora (numar de inmatriculare.denumirea articolului .20. proprietar.cod gestiune. mp.data de creare sau data ultimei actualizari despachetata luata din sistemul de operare.camp numeric de o cifra zecimala cu semnificatiile: 0=articol de stoc. Problema 3. Sa se simuleze activitatile de garare si de iesire din garare pentru formarea unei garnituri de tren a cate 10 vagoane din stiva de vagoane. . .1. ml.50.80. Totodata trebuie sa pastram adresa ultimului articol generat. 4. luna si an) si greutatea in tone. denumire.camp alfanumeric de 20 caractere. Mihail Buricea case 'a': printf("\n soseste si se introduce o noua masina la coada"). cu urmatoarea structura a articolelor: . anterior rezolvata care sa permita listarea articolelor in ordinea inversa introducerii datelor. produse.4. dintr-un depozit de marfuri alimentare (sosirea si plecarea). Pornind de la fisierul anterior creeat sa se creeze o lista dublu inlantuita de articole in zona de memorie heap 13 . Problema 3. case 'l': printf("\n se listeaza masinile care se gasesc la coada").30. . Sa se creeze o lista dublu inlantuita de produse dintr-un nomenclator de produse cu structura: cod produs. Sa se creeze o lista liniara simplu si invers inlantuita de articole cu structura din problema 1. exit(0). Se considera o linie de garare a 100 vagoane de marfa (stiva) cu caracteristicile:cod vagon un numar cuprins intre 100 si 999. listare(). 4. stergerea cat si modificarea datelor unui articol ca urmare a intrarilor si iesirilor de articole) urmata de listarea la cerere a tuturor articolelor.5. . break. a celor sterse si a celor noi adaugate in lista. Problema 3.70. break. Probleme propuse pentru rezolvare. Ing. 2=articol de iesire material din stoc. adaugare(). . kg.. sofer. . anterior rezolvata care sa permita exploatarea directa cat si inversa a listei (adica listarea produselor din lista).cantitatea – camp real cu 5 cifre partea intreaga si 3 cifre pentru zecimale. Sa se simuleze activitatile legate de incarcarea tirurilor de marfuri alimentare. dupa denumire si dupa pret afisandu-se aceste liste si in ordine descrescatoare prin parcurgerea inversa a acestor liste.camp de tip numeric apartinand multimii gestiunilor (10. Sa se creeze o lista dublu inlantuita cu angajatii unei firme ordonata dupa numele si prenumele angajatilor si sa se actualizeze aceasta lista (adaugarea la locul potivit a unui nou angajat. prêt si valoare). } } } 3. Problema 3. stergerea cat si modificarea datelor unui angajat) urmata de listarea la cerere a tuturor angajatilor. cu acelasi tip de aliment. Problema 3. Sa se creeze o lista dublu inlantuita cu stocurile articolelor de marfuri dintr-o firma ordonata dupa codurile marfurilor si sa se actualizeze aceasta lista (adaugarea la locul potivit a unui articol .999]. Sa se creeze o lista liniara dublu inlantuita de produse cu structura de la problema 2. case 't': printf("\n terminarea gestionarii cozii de masini"). .2. Indicatie: Pentru rezolvarea problemei va trebui sa introducem in corpul fiecarui articol un camp in care sa se memoreze adresa articolului anterior. data incarcarii (zi.1. continut vagonului camp alfanumeri de 20 caractere. .valoarea .camp alfabetic din multimii (buc. case 'e': printf("\n se alimenteaza si iese prima masina de la coada").camp de tip real pozitiv cu 7 cifre pentru partea intreaga si 2 cifre pentru partea fractionara. a celor care au suerit modificari.40.pret .cod articol . 4.camp de tip real si se obtine prin inmultirea dintre valoarea campului cantitate si valoarea campului pret. autor Sef de lucrari Dr.unitate masura .2.90). l. tone.2.Ingineria Sistemelor de Programe (ISP).

Apoi sa se listeze pe ecran continutul listei de stocuri finale si sa se salveze intr-un fisier adecvat stocurile finale. Pornind de la lista anterior sortata sa se creeze o noua lista care sa contina stocurile de articole (pentru un acelasi cod de articol. 4. printrun meniu adecvat.Ingineria Sistemelor de Programe (ISP).4. Sa se recreeze lista de stocuri finale pornind de la fisierul anterior salvat si sa se actualizeze. Ing.5. aceasta lista (adaugari. stocul final=stocul initial+intrari de articole-iesiri de articole. Mihail Buricea 4. 4. modificari si stergeri de articole in lista) apoi sa se listeze pe ecran lista astfel actualizata. Precizare : Aplicatia se va proiecta utilizandu-se tehnica meniurilor pentru selectarea unei actiuni precizate in tema 14 . utilizindu-se un algoritm de sortare cunoscut. autor Sef de lucrari Dr.3. Sa se sorteze crescator lista de articole dupa cod articol si tip articol (in aceasta ordine) care se va lista.

Sign up to vote on this title
UsefulNot useful