1) Declararea unei înregistrări şi folosirea acesteia (rezolvare...)
2) Se va scrie un program C ce va evidenţia diferenţele între folosirea unei structuri şi a unei uniuni (rezolvare...)
a) se va folosi o structură de înregistrări
b) se va folosi o structură tip uniune
3) Să se realizeze o aplicaţie care realizează prelucrări cu numere complexe, adică citire, afişare, modul, sumă şi produs între două astfel de numere (rezolvare...)
4) Să se realizeze o aplicaţie pentru lucrul cu numere raţionale (valori numerice ce pot fi scrise sub formă de fracţie) şi anume: citirea, afişarea, sumarea şi produsul a două numere astfel de numere (rezolvare...)
5) Să se scrie un program care sa administreze un parc de automobile. Informaţiile
relative la un automobil sunt: numărul de locuri, puterea (în cai putere), marca, culoarea,
anul fabricaţiei maşinii (rezolvare...)
a) se vor citi informatiile relative la cele n automobile din parcul de autoturisme. Se vor afisa doar acele automobilele care au 5 locuri;
b) sa se ordoneze crescator dupa putere automobilele – se vor afisa datele ordonate;
c) sa se scrie o functie care afiseaza toate automobilele fabricate într-un anumit an dat ca parametru.
C: Structuri de date - aplicatii rezolvate
Rezolvari
#include<stdio.h> /* structurile declarate, in principiu vor fi declarate in afara oricarei functii, pentru a putea fi utilizata in intreg programul */ struct angajat { int cod_angajat; char* nume; char* prenume; struct { int an; char luna; char zi; }data_angajarii; float sal_incadrare; }; void main() { angajat x; x.cod_angajat=1021; x.nume="Popescu"; x.prenume="Ioan"; x.data_angajarii.an=2002; x.data_angajarii.luna=9; x.data_angajarii.zi=10; x.sal_incadrare=1250; printf("angajat: %s %s\n",x.nume,x.prenume); printf("data angajarii: %d/%d/%d\n",x.data_angajarii.zi, x.data_angajarii.luna, x.data_angajarii.an); printf("salariu incadrare: %.2f",x.sal_incadrare); getchar(); int k; scanf("%d", &k); }
#include<stdio.h> struct exemplu { long int a; char* b; char* c; }; void main() { exemplu x; printf("Spatiul ocupat de o variabila la structura: %d\n",sizeof(x)); x.a=10; x.b="ABCD"; x.c="EFG"; printf("%ld\n",x.a); printf("%s\n",x.b); printf("%s\n",x.c); getchar(); int k; scanf("%d", &k); }
b) se va folosi o structură tip uniune:
#include<stdio.h> union exemplu { long int a; char* b; char* c; }; void main() { exemplu x; printf("Spatiul ocupat de o variabila la uniune: %d\n",sizeof(x)); x.a=10; x.b="ABCD"; x.c="EFG"; printf("%ld\n",x.a); printf("%s\n",x.b); printf("%s\n",x.c); getchar(); int k; scanf("%d", &k); }
#include<stdio.h> #include<math.h> typedef struct{ float a; //partea reala float b; //partea imaginara }complex; //numele structurii //citirea unui nr. complex void citire(complex* z,char s[]) //s retine numele nr. complex { printf("Introducem nr. complex %s:\n",s); printf("\tpartea reala: "); scanf("%f",&(*z).a); printf("\tpartea imaginara: "); scanf("%f",&z->b); //alt mod de scriere } //afisarea unui nr. complex void afisare(complex z,char s[]) { printf("Nr. complex %s: ",s); if(z.b>=0) printf("%.2f+%.2fi\n",z.a,z.b); else printf("%.2f%.2fi\n",z.a,z.b); } //modulul unui nr. complex float modul(complex z) { return sqrt(pow(z.a,2)+pow(z.b,2)); } //conjugatul unui numar complex complex conjugat(complex z) { complex t; t.a=z.a; t.b=-z.b; return t; } //suma a doua nr. complexe (varianta cu transfer prin tipul rezultat) complex suma1(complex x,complex y) { complex z; z.a=x.a+y.a; z.b=x.b+y.b; return z; } //suma a doua nr. complexe (varianta cu transfer prin linia de parametri) void suma2(complex x,complex y,complex* z) { z->a=x.a+y.a; //(*z).a=x.a+y.a; z->b=x.b+y.b; } //produsul a doua nr. complexe complex produs(complex x,complex y) { complex z; z.a=x.a*y.a-x.b*y.b; z.b=x.a*y.b+x.b*y.a; return z; } //functia principala in rulare void main() { complex z1,z2; //citirea celor doua nr. complexe citire(&z1,"z1"); citire(&z2,"z2"); printf("\n"); //afisarea celor doua nr. complexe afisare(z1,"z1"); afisare(z2,"z2"); printf("\n"); //modulele celor doua nr. complexe printf("Modulul lui z1: %.2f\n",modul(z1)); printf("Modulul lui z2: %.2f\n",modul(z2)); printf("\n"); //conjugatele celor doua numere complexe afisare(conjugat(z1),"conjugat z1"); afisare(conjugat(z2),"conjugat z2"); //suma a doua nr. complexe - varianta 1 complex s1; s1=suma1(z1,z2); afisare(s1,"z1+z2"); //suma a doua nr. complexe - varianta 2 complex s2; suma2(z1,z2,&s2); afisare(s2,"z1+z2"); //produsul a doua nr. complexe complex p; p=produs(z1,z2); afisare(p,"z1*z2"); getchar(); int k; scanf("%d", &k); }
#include<stdio.h> #include<math.h> typedef struct { int a,b; int cmmdc(int x,int y) { if(x==y) return x; else if(x>y) return cmmdc(x-y,y); else return cmmdc(x,y-x); } void ireductibil() { if(b<0) { a=-a; b=-b; } if(!a) b=1; else if(abs(a)!=1 && abs(b)!=1) { int d=cmmdc(abs(a),abs(b)); a=a/d; b=b/d; } } }rational; void citire(rational* x, char c) { printf("Dati numarul rational %c:\n",c); printf("\tnumaratorul: "); scanf("%d",&x->a); int n; do { printf("\tnumitorul: "); scanf("%d",&n); } while(n==0); x->b=n; x->ireductibil(); } void afisare(rational x, char c[]) { printf("Numarul rational %s: %d/%d\n",c,x.a,x.b); } rational adunare(rational x, rational y) { rational r; r.a=x.a*y.b+x.b*y.a; r.b=x.b*y.b; r.ireductibil(); return r; } rational inmultire(rational x, rational y) { rational r; r.a=x.a*y.a; r.b=x.b*y.b; r.ireductibil(); return r; } void main() { rational x,y; citire(&x,'x'); citire(&y,'y'); afisare(x,"x"); afisare(y,"y"); rational s; s=adunare(x,y); afisare(s,"x+y"); rational p; p=inmultire(x,y); afisare(p,"x*y"); getchar(); int k; scanf("%d", &k); }
#include<stdio.h> #include<conio.h> typedef struct //declarare structura { char marca[20]; char model[20]; char cul[20]; int an; struct //definire structura { char nl; int put; }date; //lista variabile la structura }automobil; //nume structura typedef automobil masini[20]; //tip de date propriu void citire(masini a, int *n) //introducere date { int i; printf("Dati nr. de automobile: "); scanf("%d",n); for(i=0; i<*n; i++) { printf("Introduceti datele despre automobilul %d\n",i+1); printf("\tmarca: "); scanf("%s",a[i].marca); printf("\tmodelul: "); scanf("%s",a[i].model); printf("\tculoarea: "); scanf("%s",a[i].cul); printf("\tanul: "); scanf("%d",&a[i].an); printf("\tnumarul de locuri: "); scanf("%d",&a[i].date.nl); printf("\tputerea in cai putere: "); scanf("%d",&a[i].date.put); } } void afisare(masini a,int n) //afisare date { int i; for (i=0;i<n;i++) { printf("Automobil [%d]:\n",i+1); printf("\tmarca: %s\n",a[i].marca); printf("\tmodelul: %s\n",a[i].model); printf("\tculoarea: %s\n",a[i].cul); printf("\tan fabr.: %d\n",a[i].an); printf("\tnr locuri: %d\n",a[i].date.nl); printf("\tputerea: %d\n\n",a[i].date.put); } } void an(masini a,int n,int p) { int i; for(i=0;i<n-1;i++) { if(a[i].an=p) //atribuire valori membrilor structurii { printf("Automobil [%d]:\n",i+1); printf("\tmarca: %s\n",a[i].marca); printf("\tmodelul: %s\n",a[i].model); printf("\tculoarea: %s\n",a[i].cul); printf("\tan fabr.: %d\n",a[i].an); printf("\tnr locuri: %d\n",a[i].date.nl); printf("\tputerea: %d\n\n",a[i].date.put); } } } void main() { masini a; int n,aux,i,j,p; citire(a,&n); afisare(a,n); for(i=0;i<n;i++) { if(a[i].date.nl=5) //atribuire valori membrilor structurii { printf("Automobil [%d]:\n",i+1); printf("\tmarca: %s\n",a[i].marca); printf("\tmodelul: %s\n",a[i].model); printf("\tculoarea: %s\n",a[i].cul); printf("\tan fabr.: %d\n",a[i].an); printf("\tnr locuri: %d\n",a[i].date.nl); printf("\tputerea: %d\n\n",a[i].date.put); } } for(i=0;i<n-1;i++) for(j=i+1;j<n;j++) { if(a[i].date.put>a[j].date.put) { aux=i; i=j; j=aux; } } afisare(a,n); printf("\n\tDati anul dupa care vor fi afisate masinile: "); scanf("%d",&p); an(a,n,p); getchar(); int k; scanf("%d", &k); }