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

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

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

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

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

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

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

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

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

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

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

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

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

utilizindu-se un algoritm de sortare cunoscut. aceasta lista (adaugari. 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. Sa se sorteze crescator lista de articole dupa cod articol si tip articol (in aceasta ordine) care se va lista. Apoi sa se listeze pe ecran continutul listei de stocuri finale si sa se salveze intr-un fisier adecvat stocurile finale. 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. autor Sef de lucrari Dr.5. 4. 4. stocul final=stocul initial+intrari de articole-iesiri de articole.3.Ingineria Sistemelor de Programe (ISP).4. printrun meniu adecvat. Ing. Sa se recreeze lista de stocuri finale pornind de la fisierul anterior salvat si sa se actualizeze.

Sign up to vote on this title
UsefulNot useful