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

atunci var_punct = primul_punct si se poate referi primul punct prin var_punct. 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.%f)". var_punct -> y . Se observa ca variabilele dinamice (de tip pointer) pot interveni in program in doua moduri.contine cota primului punct.%f)". /* listarea punctelor de la sfarsit catre inceput */ printf("\n lista punctelor de la sfarsit catre inceput:"). return. printf("\n continuati adaugarea de puncte?(d/n):").%f. } ultimul_punct->x=wx.contine abscisa primului punct. while(var_punct->urmator!=NULL) { printf("\n P%d(%f. autor Sef de lucrari Dr.n.var_punct->x).var_punct->x). cu ajutorul variabilelor de tip pointer incluse in variabilele dinamice (anterior. 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. var_punct=ultimul_punct.Ingineria Sistemelor de Programe (ISP). sau cand campul var_punct->urmator va avea valoarea NULL. } Variabilele alocate dinamic vor fi memorate in zona Heap. var_punct=ultimul_punct.n=0.var_punct->x.var_punct->x.var_punct->x. ultimul_punct->urmator=NULL.%f.var_punct->x. ultimul_punct->z=wz. ultimul_punct->anterior=var_punct. 2 . Parcurgerea si extragerea datelor referitoare la puncte sunt permise numai secvential.var_punct->x. respectiv ultimului punct memorat. La finalul executiei programului se poate sti adresa primului.var_punct->x). nf=n. Locurile din memorie ale celorlalte puncte sunt necunoscute.%f.contine ordonata primului punct.var_punct->x).n. var_punct=primul_punct.var_punct->x. var_punct->urmator=ultimul_punct. Ing. Mihail Buricea printf("\n memorie insuficienta ptr ultimul punct"). printf("\n =============================================").contine adresa unde este memorat urmatorul punct. } printf("\n P%d(%f. } /* listarea punctelor de la inceput pana la sfarsit */ printf("\n lista punctelor de la inceput pana la sfarsit:").%f. Daca in variabila de tip pointer var_punct se pune continutul variabilei primul_punct.n=0.%f)".n. var_punct -> z . printf("\n =============================================").%f)". n++. } printf("\n P%d(%f. 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. urmator). while(var_punct->anterior!=NULL) { printf("\n P%d(%f. var_punct->urmator . printf("\n ============================================="). nf--.var_punct->x.n. raspuns=getche(). printf("\n ============================================="). var_punct=var_punct->urmator. ultimul_punct->y=wy. var_punct=var_punct->anterior.

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

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

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

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

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

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

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

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

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

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

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

printrun meniu adecvat. aceasta lista (adaugari. utilizindu-se un algoritm de sortare cunoscut. Sa se sorteze crescator lista de articole dupa cod articol si tip articol (in aceasta ordine) care se va lista. Sa se recreeze lista de stocuri finale pornind de la fisierul anterior salvat si sa se actualizeze.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. stocul final=stocul initial+intrari de articole-iesiri de articole. autor Sef de lucrari Dr. Ing. modificari si stergeri de articole in lista) apoi sa se listeze pe ecran lista astfel actualizata.3. Mihail Buricea 4. Precizare : Aplicatia se va proiecta utilizandu-se tehnica meniurilor pentru selectarea unei actiuni precizate in tema 14 . 4.4. 4.5.