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

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

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

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

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

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

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

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

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

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

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

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

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

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

Sign up to vote on this title
UsefulNot useful