Structures de dates en C - Applications resolues
1) Declarer un enregistrements et leur utilisation.
#include<stdio.h> /* structurile declarate, in principiu vor fi declarate in afara oricarei functii, pentru a putea fi utilizata in intreg programul */ struct employe { int code_employe; char* nom; char* prenom; struct { int annee; char mois; char jour; }date_engagement; float salaire_encadrement; }; void main() { employe x; x.code_employe=1021; x.nom="Popescu"; x.prenom="Ion"; x.date_engagement.annee=2002; x.date_engagement.mois=9; x.date_engagement.jour=10; x.salaire_encadrement=1250; printf("employe: %s %s\n",x.nom,x.prenom); printf("date engagement: %d/%d/%d\n",x.date_engagement.jour, x.date_engagement.mois, x.date_engagement.annee); printf("salaire encadrement: %.2f",x.salaire_encadrement); getchar(); int k; scanf("%d", &k); }
2) Allons ecrire un programme C qui mettra en evidence les differences entre l'utilisation d'une structure et d'une union.
a) va utiliser une structure d'enregistrement:
#include<stdio.h> struct exemple { long int a; char* b; char* c; }; void main() { exemple x; printf("L'espace occupe par une structure variable: %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) utilisez une structure de type union:
#include<stdio.h> union exemple { long int a; char* b; char* c; }; void main() { exemple x; printf("L'espace occupe par la variable d'union: %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); }
3) Faire une application, qui traite des nombres complexes, c'est à dire, à la lire, l'affichage, le mode, et la somme du produit de deux tels nombres.
#include<stdio.h> #include<math.h> typedef struct{ float a; // le reel float b; //l’imaginaire }complexe; //nom de structure // lire d'un nombre complexe void lire (complexe* z,char s[]) //s retien le nom du nombre complexe { printf("Introduire le nombre complexe%s:\n",s); printf("\tpartie reelle: "); scanf("%f",&(*z).a); printf("\tpartie imaginaire: "); scanf("%f",&z->b); //autre moyen d’ecrire } //affichez un nombre complexe void affichage(complexe z,char s[]) { printf("Nr. complexe %s: ",s); if(z.b>=0) printf("%.2f+%.2fi\n",z.a,z.b); else printf("%.2f%.2fi\n",z.a,z.b); } // Module d'un nombre complexe float module(complexe z) { return sqrt(pow(z.a,2)+pow(z.b,2)); } // conjugue d'un nombre complexe complexe conjugue (complexe z) { complexe t; t.a=z.a; t.b=-z.b; return t; } //la somme de deux nombres complexes (version avec transfert par le type resulte) complexe somme1(complexe x,complexe y) { complexe z; z.a=x.a+y.a; z.b=x.b+y.b; return z; } // la somme de deux nombres complexes (version avec transfert par la ligne des parametres) void somme2(complexe x,complexe y,complexe* z) { z->a=x.a+y.a; //(*z).a=x.a+y.a; z->b=x.b+y.b; } //le produit a deux nombres complexes complexe produit(complexe x,complexe y) { complexe z; z.a=x.a*y.a-x.b*y.b; z.b=x.a*y.b+x.b*y.a; return z; } // fonction principale d'execution void main() { complexe z1,z2; //lire de deux nombres complexex lire(&z1,"z1"); lire(&z2,"z2"); printf("\n"); //affichage de eux nombres complexex affichage(z1,"z1"); affichage(z2,"z2"); printf("\n"); //les modules de deux nombres complexex printf("Module de z1: %.2f\n",module(z1)); printf("Module de z2: %.2f\n",module(z2)); printf("\n"); // conjugues de deux nombres complexes affichage(conjugue(z1),"conjugue z1"); affichage(conjugue(z2),"conjugue z2"); //la somme de deux nombres complexex - version 1 complexe s1; s1=somme1(z1,z2); affichage(s1,"z1+z2"); // la somme de deux nombres complexex - version 2 complexe s2; somme2(z1,z2,&s2); affichage(s2,"z1+z2"); //produit de deux nombres complexes complexe p; p=produit(z1,z2); affichage(p,"z1*z2"); getchar(); int k; scanf("%d", &k); }
4) Faire une application pour travailler avec des nombres rationnels
(Les valeurs numeriques qui peuvent être ecrites sous forme de fraction), à savoir: la lire, l'affichage, la somme et le produit de deux tels nombres.
#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 irreductiblel() { 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; } } }rationel; void lire(rationel* x, char c) { printf("Enterer nombre rationel %c:\n",c); printf("\tcontrer: "); scanf("%d",&x->a); int n; do { printf("\tdenominateur: "); scanf("%d",&n); } while(n==0); x->b=n; x->irreductiblel(); } void affichage(rationel x, char c[]) { printf("nombre rationel %s: %d/%d\n",c,x.a,x.b); } rationel addition(rationel x, rationel y) { rationel r; r.a=x.a*y.b+x.b*y.a; r.b=x.b*y.b; r.irreductiblel(); return r; } rationel multiplication(rationel x, rationel y) { rationel r; r.a=x.a*y.a; r.b=x.b*y.b; r.irreductiblel(); return r; } void main() { rationel x,y; lire(&x,'x'); lire(&y,'y'); affichage(x,"x"); affichage(y,"y"); rationel s; s=addition(x,y); affichage(s,"x+y"); rationel p; p=multiplication(x,y); affichage(p,"x*y"); getchar(); int k; scanf("%d", &k); }
5) Ecrire un programme pour gerer une flotte de vehicules. Les informations relatives à une voiture sont: le nombre de sièges, la puissance (en chevaux-vapeur), la marque, la couleur, l'annee de fabrication de voiture.
a) va lire les donnees sur le parc automobile voiture n. Affichera uniquement les vehicules qui ont 5 sièges;
b) la puissance ascendante de commander les voitures - sera affiche donnees ordonnees;
c) ecrire une fonction qui affiche toutes les voitures fabriquees dans une annee donnee comme paramètre.
a) va lire les donnees sur le parc automobile voiture n. Affichera uniquement les vehicules qui ont 5 sièges;
b) la puissance ascendante de commander les voitures - sera affiche donnees ordonnees;
c) ecrire une fonction qui affiche toutes les voitures fabriquees dans une annee donnee comme paramètre.
#include<stdio.h> #include<conio.h> typedef struct //declarer la structure { char marque[20]; char modele[20]; char cul[20]; int an; struct //definir la structure { char nl; int put; }date; //liste variabiles de la structure }voiture; //nom structure typedef voiture car[20]; //type de dates propre void lire(car a, int *n) //introduire les dates { int i; printf("Ecrire le numero des voitures: "); scanf("%d",n); for(i=0; i<*n; i++) { printf("Ecrire les dates sur la voiture %d\n",i+1); printf("\tmarque: "); scanf("%s",a[i].marque); printf("\tmodele: "); scanf("%s",a[i].modele); printf("\tculeur: "); scanf("%s",a[i].cul); printf("\tan: "); scanf("%d",&a[i].an); printf("\tnombre places: "); scanf("%d",&a[i].date.nl); printf("\tpuissance en cheveux: "); scanf("%d",&a[i].date.put); } } void affichage(car a,int n) //affichagee dates { int i; for (i=0;i<n;i++) { printf("Voiture [%d]:\n",i+1); printf("\tmarque: %s\n",a[i].marque); printf("\tmodele: %s\n",a[i].modele); printf("\tculeur: %s\n",a[i].cul); printf("\tan fabr.: %d\n",a[i].an); printf("\tnombre places: %d\n",a[i].date.nl); printf("\tpuissance: %d\n\n",a[i].date.put); } } void an(car a,int n,int p) { int i; for(i=0;i<n-1;i++) { if(a[i].an=p) //attribution de valeur aux membres de la structure { printf("Voiture [%d]:\n",i+1); printf("\tmarque: %s\n",a[i].marque); printf("\tmodele: %s\n",a[i].modele); printf("\tculeur: %s\n",a[i].cul); printf("\tan fabr.: %d\n",a[i].an); printf("\tnombre places: %d\n",a[i].date.nl); printf("\tpuissance: %d\n\n",a[i].date.put); } } } void main() { car a; int n,aux,i,j,p; lire(a,&n); affichage(a,n); for(i=0;i<n;i++) { if(a[i].date.nl=5) //attribution de valeur aux membres de structure { printf("Voiture [%d]:\n",i+1); printf("\tmarque: %s\n",a[i].marque); printf("\tmodele: %s\n",a[i].modele); printf("\tculeur: %s\n",a[i].cul); printf("\tan fabr.: %d\n",a[i].an); printf("\tnombre places: %d\n",a[i].date.nl); printf("\tpuisance: %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; } } affichage(a,n); printf("\n\tDonne l'annee d'après seront affichees les voitures: "); scanf("%d",&p); an(a,n,p); getchar(); int k; scanf("%d", &k); }