Biologie | Chimie | Didactica | Fizica | Geografie | Informatica | |
Istorie | Literatura | Matematica | Psihologie |
Lucrarea de laborator nr.4
Problema 2.1. Sa se citeasca de la tastatura n numere naturale, care se adauga, pe masura ce se citesc, intr-o stiva implementata dinamic, apoi sa se adauge aceste numere intr-un arbore binar de cautare de unde se vor lista : toate numerele din arbore in preordine, in ordine si in postordine, toate numerele divizibile cu un numar furnizat de la tastatura, toate patratele perfecte si sa se calculeze media lor aritmetica.
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<alloc.h>
#include<conio.h>
#include<math.h>
struct stiva;
struct stiva *vf;
struct nod;
nod *primul_nod;
int i,nr;
int v[100];
int adaug_stiva(int *x)
ptrnr->cont=*x;
ptrnr->urm=vf;
vf=ptrnr;
return 1;
int transfer(int *ptr)
void inserare_nod(int wnrnod)
else
else
}
if(wnrnod<nod3->info)
else
}
return;
void preordine(nod *rad)
void inordine(nod *rad)
void postordine(nod *rad)
void divizibil(nod *rad,int x)
if(k==0)
printf('n nu exista numere divizibile cu numarul %d',x);
void patrate_perfecte(nod *rad)
if(k==0)
printf('n nu exista patrate perfecte');
int verf(int d)
void medie(nod *rad)
if(k==0) printf('n nu exista medie');
else
void main(void)
printf('n numerele au fost introduse in arbore');
break;
case'3':printf('n Vectorul de parcurgere al arborelui in preordine:');
i=0;
preordine(primul_nod);
nr=i;
for(i=0;i<nr;i++)
printf('%d ;',v[i]);
break;
case'4':printf('n Vectorul de parcurgere al arborelui in ordine:');
i=0;
inordine(primul_nod);
nr=i;
for(i=0;i<nr;i++)
printf('%d ;',v[i]);
break;
case'5':printf('n Vectorul de parcurgere al arborelui in postordine:');
i=0;
postordine(primul_nod);
nr=i;
for(i=0;i<nr;i++)
printf('%d ;',v[i]);
break;
case'6':printf('n Dati numarul dorit: ');
scanf('%d',&x);
printf('n Toate numerele divizibile: ');
divizibil(primul_nod,x);
break;
case'7':printf('n Patratele perfecte sunt: ');
patrate_perfecte(primul_nod);
break;
case'8':printf('n Media numerelor este: ');
medie(primul_nod);
break;
case't':terminat=1;
break;
default:printf('n Operatie aleasa gresit');
getch();
Problema 2.2. Sa se implementeze un arbore unde fiecare nod are maxim 3 copii, aranjati dupa urmatoarea regula:
- numarul nodului copilului din stanga este mai mic decat jumatate din numarul nodul radacina (numarul nodului din stanga < numarul nodului radacina impartit la 2)
- numarul nodului copilului din mijloc este cuprins intre numarul nodului radacina impartit la 2 si numarul nodului radacina.
- numarul nodului copilului din dreapta este mai mare decat numarul nodului radacina.
Dupa crearea arborelui de mai sus sa se listeze in postordine, in ordine si in postordine vectorii de parcurgere ai arborelui.
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<alloc.h>
struct nod;
nod *primul_nod;
int i,nr;
int v[100];
void inserare_nod(int wnrnod)
else
else
else
}
}
if(wnrnod<(nod3->info)/2)
else
else
}
}
return;
void preordine(nod *rad)
void ordine(nod *rad)
void postordine(nod *rad)
void main(void)
getch();
}
Problema 2.3. Evidenta articolelor dintr-un magazin se tine intr-un arbore binar de cautare cu stocurile articolelor si printr-un arbore binar de cautare cu tranzactiile efectuate (intrari si iesiri din magazin). Pentru fiecare nod din arborele stoc se retine: cod articol, un numar intreg cuprins intre 100 si 999), denumire articol (un text alfabetic si numeric), unitatea de masura, un sir de 2 caractere (bc, kg, ml, mp, mc, t, l), pret, cantitate iar pentru fiecare nod din arborele cu tranzactii se retine: cod tranzactie (1- intrare articole in gestiune, 2 iesire articole din gestiune (vanzari)), cod articol, un numar intreg cuprins intre 100 si 999), denumire articol (un text alfabetic si numaric), unitatea de masura, un sir de 2 caractere (bc, kg, ml, mp, mc, t, l), pret, cantitate Gestiunea articolelor din magazin se tine printr-un meniu de comenzi de forma :
i → intrare articole in magazin
e → iesire articole din magazin (vanzari)
s → operarea tranzactiilor in arborele cu stocuri (stoc articol = stoc initial + intari - iesiri)
1 → lista intrarilor in magazin (fizic si valoric)
2 → lista iesirilor din magazin (vanzarile fizice si valorice)
0 → lista stocurilor finale din magazin (fizice si valorice)
s → stergerea din arborele de stocuri a articolelor care au stocurile epuizate (zero)
Observatie : Pentru toate informatiile tastate se vor face validarile necesare
#include<stdio.h>
#include<conio.h>
#include<ctype.h>
#include<string.h>
struct tipcat
struct tipstoc
struct tiptran
struct nodcat
struct nodstoc
struct nodtran
nodcat *primul_nod_cat;
nodstoc *primul_nod_stoc;
nodtran *primul_nod_tran;
struct tipcat wcat;
struct tipstoc wstoc;
struct tiptran wtran;
int i,nr_noduri_cat,nr_noduri_stoc,nr_noduri_tran;
int vector_parcurgere_cat[100];
int vector_parcurgere_stoc[100];
int vector_parcurgere_tran[100];
FILE *pfstoc,*pfcat,*pftran;
int testalpha(char siralpha[])
void inserare_nod_cat(struct tipcat wcat)
else
if(wcat.codart<nod2->strinf.codart)
else
}
if(wcat.codart<nod3->strinf.codart)
else
}
return;
void inserare_nod_stoc(struct tipstoc wstoc)
else
if(wstoc.codart<nod2->strinf.codart)
else
}
if(wstoc.codart<nod3->strinf.codart)
else
}
return;
void inserare_nod_tran(struct tiptran wtran)
else
if(wtran.codtran<nod2->strinf.codtran)
else
}
if(wtran.codtran<nod3->strinf.codtran)
else
}
return;
void preordine_cat(nodcat *rad)
void inordine_cat(nodcat *rad)
void postordine_cat(nodcat *rad)
void lista_cat(nodcat *rad)
void preordine_stoc(nodstoc *rad)
void inordine_stoc(nodstoc *rad)
void postordine_stoc(nodstoc *rad)
void initializare_tranz_stocuri(nodstoc *rad)
void calcul_stocuri_finale(nodstoc *rad)
void lista_stoc(nodstoc *rad)
void preordine_tran(nodtran *rad)
void inordine_tran(nodtran *rad)
void postordine_tran(nodtran *rad)
void lista_tran(nodtran *rad)
int cautarestoc(nodstoc *rad,tiptran wtran)
return 0;
void operare_stoc(nodstoc *rad,tiptran wtran)
if(wtran.tipt==2)
wcat.codart=wtran.codart;
strcpy(wcat.denart,wtran.denart);
strcpy(wcat.um,wtran.um);
wcat.pret=wtran.pret;
inserare_nod_cat(wcat);
return;
};
operare_stoc(rad->dr,wtran);
}
else
if(wtran.tipt==1)
if(wtran.tipt==2)
}
void operare_tranzactii(nodtran *rad)
void creare_fstoc(nodstoc *rad)
void creare_ftran(nodtran *rad)
void creare_fcat(nodcat *rad)
void salvare_arbori()
creare_fstoc(primul_nod_stoc);
fclose(pfstoc);
if((pftran=fopen('ftran','wb'))==NULL)
;
creare_ftran(primul_nod_tran);
fclose(pftran);
if((pfcat=fopen('fcat','wb'))==NULL)
;
creare_fcat(primul_nod_cat);
fclose(pfcat);
void restaurare_arbori()
fread(&wstoc,sizeof(tipstoc),1,pfstoc);
while(!feof(pfstoc))
fclose(pfstoc);
if((pftran=fopen('ftran','rb'))==NULL)
;
fread(&wtran,sizeof(tiptran),1,pftran);
while(!feof(pftran))
fclose(pftran);
if((pfcat=fopen('fcat','rb'))==NULL)
;
fread(&wcat,sizeof(tipcat),1,pfcat);
while(!feof(pfcat))
fclose(pftran);
void main(void)
while((wcat.codart<1)||(wcat.codart>99));
do
while(testalpha(wcat.denart));
do
while(testalpha(wcat.um));
do
while((wcat.pret<0)||(wcat.pret>1000));
inserare_nod_cat(wcat);
break;
case '2': printf('n parcurgere arbore catalog in preordine');
printf('n vectorul de parcurgere arbore catalog in preordine:');
i=0;
preordine_cat(primul_nod_cat);
nr_noduri_cat=i;
for(i=0;i<nr_noduri_cat;i++)
printf(' %d',vector_parcurgere_cat[i]);
break;
case '3': printf('n parcurgere arbore catalog in ordine');
printf('n vectorul de parcurgere arbore catalog in ordine:');
i=0;
inordine_cat(primul_nod_cat);
nr_noduri_cat=i;
for(i=0;i<nr_noduri_cat;i++)
printf(' %d',vector_parcurgere_cat[i]);
break;
case '4': printf('n parcurgere arbore catalog in postordine');
printf('n vectorul de parcurgere arbore catalog in postordine:');
i=0;
postordine_cat(primul_nod_cat);
nr_noduri_cat=i;
for(i=0;i<nr_noduri_cat;i++)
printf(' %d',vector_parcurgere_cat[i]);
break;
case '5': printf('n lista cu articolele din catalog ordonta dupa cod articol');
printf('n = = = = = = = = = = = = = = = = = = = = = = =');
printf('n cod art denumire um pret');
printf('n = = = = = = = = = = = = = = = =');
i=0;
lista_cat(primul_nod_cat);
printf('n = = = = = = = = = = = = = = = =');
break;
case '6': printf('n inserare nod stoc in arbore');
printf('n dati informatiile unui articol:');
do
while((wstoc.codart<1)||(wstoc.codart>99));
do
while(testalpha(wstoc.denart));
do
while(testalpha(wstoc.um));
do
while((wstoc.pret<0)||(wstoc.pret>1000));
wcat.codart = wstoc.codart;
strcpy(wcat.denart, wstoc.denart);
wcat.pret = wstoc.pret;
strcpy(wcat.um, wstoc.um);
do
while((wstoc.cantsi<0)||(wstoc.cantsi>1000));
wstoc.cantint=0;
wstoc.canties=0;
wstoc.cantsf=wstoc.cantsi;
inserare_nod_stoc(wstoc);
inserare_nod_cat(wcat);
break;
case '7': printf('n parcurgere arbore stoc in preordine');
printf('n vectorul de parcurgere arbore stoc in preordine:');
i=0;
preordine_stoc(primul_nod_stoc);
nr_noduri_stoc=i;
for(i=0;i<nr_noduri_stoc;i++)
printf(' %d',vector_parcurgere_stoc[i]);
break;
case '8': printf('n parcurgere arbore stoc in ordine');
printf('n vectorul de parcurgere arbore stoc in ordine:');
i=0;
inordine_stoc(primul_nod_stoc);
nr_noduri_stoc=i;
for(i=0;i<nr_noduri_stoc;i++)
printf(' %d',vector_parcurgere_stoc[i]);
break;
case '9': printf('n parcurgere arbore stoc in postordine');
printf('n vectorul de parcurgere arbore stoc in postordine:');
i=0;
postordine_stoc(primul_nod_stoc);
nr_noduri_stoc=i;
for(i=0;i<nr_noduri_stoc;i++)
printf(' %d',vector_parcurgere_stoc[i]);
break;
case 'a': printf('n lista cu articolele din stoc ordonta dupa cod articol');
printf('n = = = = = = = = = = = = = = = = = = = = = = = = =');
printf('n cod denumire articol um pret stoc init intrari iesiri stoc final');
printf('n = = = = = = = = = = = = = = = = = = = = = = = = =');
i=0;
lista_stoc(primul_nod_stoc);
printf('n = = = = = = = = = = = = = = = = = = = = = = = = =');
break;
case 'b': printf('n inserare nod tranzactii in arbore');
printf('n dati informatiile unui articol:');
do
while((wtran.tipt<0)||(wtran.tipt>2));
do
while(wtran.codtran<1);
do
while((wtran.codart<1)||(wtran.codart>99));
nodstoc *nod;
nod = primul_nod_stoc;
while ((nod!=NULL) && (nod->strinf.codart!=wtran.codart))
if (nod == NULL) printf('articol inexistent in stoc');
else
while((wtran.cantran<0)||(wtran.cantran>1000));
inserare_nod_tran(wtran);
}
break;
case 'c': printf('n parcurgere arbore tranzactii in preordine');
printf('n vectorul de parcurgere arbore tranzactii in preordine:');
i=0;
preordine_tran(primul_nod_tran);
nr_noduri_tran=i;
for(i=0;i<nr_noduri_tran;i++)
printf(' %d',vector_parcurgere_tran[i]);
break;
case 'd': printf('n parcurgere arbore tranzactii in ordine');
printf('n vectorul de parcurgere arbore tranzactii in ordine:');
i=0;
inordine_tran(primul_nod_tran);
nr_noduri_tran=i;
for(i=0;i<nr_noduri_tran;i++)
printf(' %d',vector_parcurgere_tran[i]);
break;
case 'e': printf('n parcurgere arbore tranzactii in postordine');
printf('n vectorul de parcurgere arbore tranzactiiin postordine:');
i=0;
postordine_tran(primul_nod_tran);
nr_noduri_tran=i;
for(i=0;i<nr_noduri_tran;i++)
printf(' %d',vector_parcurgere_tran[i]);
break;
case 'f': printf('n lista cu articolele din tranzactii ordonta dupa cod tranzactie');
printf('n = = = = = = = = = = = = = = = = = = = = = = =');
printf('n tipt cod tran cod art denumire um pret cantitate');
printf('n = = = = = = = = = = = = = = = = = = = = = = =');
i=0;
lista_tran(primul_nod_tran);
printf('n = = = = = = = = = = = = = = = = = = = = = = =');
break;
case 'g': printf('n operare tranzactii in arborele de stocuri');
initializare_tranz_stocuri(primul_nod_stoc);
operare_tranzactii(primul_nod_tran);
calcul_stocuri_finale(primul_nod_stoc);
break;
case 'h': printf('n salvare arbori in fisiere pe disc');
salvare_arbori();
break;
case 'i': printf('n restaurare arbori din fisierele de pe disc');
restaurare_arbori();
break;
case 't': terminat=1;
break;
default: printf('n operatie aleasa gresit');
getch();
}
}
Problema 2.4. Sa se creeze un arbore de cautare pentru n numere complexe, in care fiecare nod va contine ca informatie utila partea reala si partea imaginara a unui numar complex de forma x + iy.
sa se parcurga in postordine, in ordine si in postordine arborele binar creat listandu-se numerele complexe, conjugatele acestora, si modulele lor.
sa se listeze numerele complexe care au partea reala nula.
sa se listeze numerele complexe care au partea imaginara nula.
sa se listeze numerele complexe care au partea reala nula.
utilizand-se o functie, adecvat definita, sa se stearga din arbore numerele complexe care au partea reala si partea imaginara egala si apoi sa se listeze din nou numerele complexe ramase
#include<stdio.h>
#include<string.h>
#include<conio.h>
#include<math.h>
struct complex;
struct nod;
nod *primul_nod;
struct complex cnr,sir_cnr[100];
int i,nr_noduri;
float modul(struct complex wcnr)
struct complex conjugatul(struct complex cnr)
void afis_cmp(struct complex cnr)
void inserare_nod(struct complex wcnr)
else
else
}
if(modul(wcnr)<modul(nod3->nr))
else
}
void ordine(nod *radacina)
void preordine(nod *radacina)
void postordine(nod *radacina)
struct complex stergere_nod(struct complex cnr)
tmp = tmp1;
if (tmp1->dr==NULL)
else
if (tmp1->st == NULL)
else
tmp1->nr = tmp->nr;
tmp2->st = NULL;
delete tmp;
}
return a;
void main(void)
break;
case'3':printf('n Afisarea arborelui in ordine: ');
printf('n Numarult');
printf('Complexult');
printf('Modulul');
printf('n = = = = = = = = = = = = = = = = = n');
i=0;
ordine(primul_nod);
nr_noduri=i;
for(i=0;i<nr_noduri;i++)
break;
case'4':printf('n Afisarea arborelui in postordine: ');
printf('n Numarult');
printf('Complexult');
printf('Modulul');
printf('n = = = = = = = = = = = = = = = = = n');
i=0;
postordine(primul_nod);
nr_noduri=i;
for(i=0;i<nr_noduri;i++)
break;
case'5':printf('n Afisarea numerelor complexe cu partea reala nula: ');
i=0;
ordine(primul_nod);
nr_noduri=i;
for(i=0;i<nr_noduri;i++)
break;
case'6':printf('n Afisarea numerelor complexe cu partea imaginara nula: ');
i=0;
ordine(primul_nod);
nr_noduri=i;
for(i=0;i<nr_noduri;i++)
break;
case'7':printf('n Stergerea numerelor care au partea reala egala cu partea imaginara: ');
i=0;
ordine(primul_nod);
nr_noduri=i;
for(i=0;i<nr_noduri;i++)
printf('n Numarult');
printf('Complexult');
printf('Modulul');
printf('n = = = = = = = = = = = = = = = = = n');
i=0;
ordine(primul_nod);
nr_noduri=i;
for(i=0;i<nr_noduri;i++)
if((sir_cnr[i].re!=0)||(sir_cnr[i].im!=0))
break;
case't':terminat=1;
break;
default:printf('n Operatie aleasa gresit');
getch();
}
Politica de confidentialitate |
Copyright © 2024 - Toate drepturile rezervate