C: Structuri de date - aplicatii rezolvate


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.

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);

}
Acest site utilizeaza cookie-uri. Navigand in continuare va exprimati acordul asupra folosirii cookie-urilor.