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

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

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

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

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

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

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

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

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

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

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

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

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

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