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

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

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

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

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

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

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

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

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

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

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

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

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

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

Sign up to vote on this title
UsefulNot useful