EXERCICE VII
Structures des donnees
1.
Faire un programme d’entrer les
données (nom et numéro) de deux étudiants en utilisant le
type structure. Afficher les données d’étudiant après
l’entré. Afficher les données d’étudiant dont le
numéro est plus grand. Utiliser fonctions différentes d’entré
et sortie d’information de la structure.
#include <stdio.h>
typedef struct
{ char nom[20];
int numero;
} etudiant;
etudiant saisir(void);
void afficher(etudiant *);
void main()
{ etudiant man1, man2, *s_ptr;
printf("Entrer les données
du premier étudiant ");
man1 =
saisir();
afficher(&man1);
printf("Entrer
les données du deuxième étudiant ");
man2 = saisir();
afficher(&man2);
s_ptr=(man1.numero>man2.numero)?&man1:&man2;
printf("\nL’etudiant dont le numero est
plus grand:\n");
afficher(s_ptr);
}
etudiant saisir(void)
{ etudiant
a;
printf("\n nom=> ");
gets(a.nom);
printf(" numero => ");
scanf("%d",&a.numero);
fflush(stdin);
return (a);
}
void afficher(etudiant *ptr_str)
{
printf("Nom d’étudiant:
%s\n",ptr_str -> nom);
printf("Numero d’ étudiant: %d\n", ptr_str -> numero);
}
2.
Modifier le programme de p.1
en ajoutant un troisième
champ de la structure - note. Afficher l’étudiant dont la
note est plus petite.
3.
Faire un programme de création d’un tableau de
structures - étudiants (structures ont les champs :
nom et numéro). Le nombre maximal d’éléments du
tableau est 30.
Déterminer l'étudiant avec le numéro maximal et afficher
à l'écran l'information d'étudiant trouvé. Utiliser fonctions
différentes: 1) d’entré et sortie d’information d’une structure
(utiliser les fonctions saisir et afficher de p.1) ; 2)
d’entré et sortie du tableau des structures (entrer_tab et afficher_tab) ; 3) de détermination
d’étudiant ayant le numéro maximal (max_numero).
#include <stdio.h>
#define MAX 30
typedef struct
{ char nom[20];
int numero;
} etudiant;
etudiant saisir(void);
void afficher(etudiant
*ptr_str);
void afficher_tab(etudiant *,int);
int entrer_tab(etudiant *t );
etudiant * max_numero(etudiant *ptr_str,int n);
void main()
{ etudiant tab[MAX], *s_ptr;
int
n;
printf("Entrer les donnees des etudiants\n");
n=entrer_tab(tab);
printf("Les etudiants
sont.\n");
afficher_tab(tab,n);
s_ptr = max_numero(tab,n);
printf("\nL’etudiant dont le numero est plus grand:\n");
afficher(s_ptr);
}
etudiant saisir(void)
{ etudiant a;
printf("\n nom=> ");
fflush(stdin);
gets(a.nom);
printf(" numero => ");
scanf("%d",&a.numero);
fflush(stdin);
return (a);
}
void afficher(etudiant *ptr_str)
{ printf("Nom d’etudiant: %s\n",ptr_str
-> nom);
printf("Numero d’etudiant: %d\n", ptr_str -> numero);
}
void afficher_tab(etudiant
*ptr_str,int n)
{ int i;
for(i=0;i<n;i++,ptr_str++)
{ afficher(ptr_str);
}
}
int entrer_tab(etudiant *t )
{ int i,n;
do{
printf("Entrer
nombre d'etudiants:");
scanf("%d",&n);
}while(n>MAX);
for(i=0;i<n;i++,t++)
{ printf("Etudiant
%d:",i+1);
*t=saisir();
}
return n;
}
etudiant * max_numero(etudiant *ptr_str,int n)
{ int i,max=ptr_str->numero;
etudiant
*temp= ptr_str;
for(i=0;i<n;i++,ptr_str++)
{
if(ptr_str->numero > max)
{ max= ptr_str->numero;
temp=ptr_str;
}
}
return temp;
}
4.
Modifier
le programme de p 3 en ajoutant un troisième champ de la structure - note. Faire une fonction nouvelle d’afficher l’étudiant
dont la note est plus petite.
5.
Faire un programme de création d’un tableau
d’étudiants (structures ayants les champs nom,
numéro et note) en utilisant un
tableau des pointeurs sur les structures.
Afficher le tableau cree. Utiliser fonctions différentes de: 1)
remplissage du tableau – saisir ; 2) affichage du tableau – afficher.
#include<stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAX 30
#define STOP
"*"
typedef struct
{ char nom[80];
int numero;
float note;
} etudiant;
int saisir(etudiant *s[]);
void afficher(etudiant *s[],int n);
void main()
{ etudiant *t[MAX];
int n;
n=saisir(t);
afficher(t,n);
free (t);
}
int saisir(etudiant
*s[])
{ int i=0;
char t[10];
while(1)
{ printf("Entrer etudiant %d\n",i+1);
s[i]=(etudiant *)malloc(sizeof(etudiant));
if(s[i]==NULL) { printf("Pas de
place.\n"); exit(1); }
printf("Entrer nom ou bien %c\n",STOP);
if(strcmp(gets(s[i]->nom),STOP)==0||i==MAX)break;
printf("Entrer numero:");
s[i]->numero=atoi(gets(t));
printf("Entrer note:");
s[i]->note=atof(gets(t));
i++;
}
return i;
}
void afficher(etudiant *s[],int l)
{ int i;
for(i=0;i<l;i++)
printf("%s\t%d\t%6.2f\n",s[i]->nom,s[i]->numero,s[i]->note);
}
Faire les actions suivantes:
1.
Remplir le tableau ;
2.
Afficher le tableau ;
3.
Afficher les informations des médicaments,
ayants un nom donné, produits
pendant une année donnée dont le prix est inférieur à un prix donné ;
4.
Calculer le prix
moyen des médicaments ;
5.
Trier les médicaments
selon le champ prix en ordre
croissant.
6.
Effacer les médicaments
avec le prix supérieur à un
prix donné.
Utiliser les fonctions suivantes: a) remplissage
du tableau; b) affichage du tableau; c) pour toutes les actions
différentes.
Faire les deux modèles de traitement :
1.
En utilisant un tableau des
pointeurs sur les structures (le nombre maximal des structures 50) ;
2.
En utilisant un tableau dynamique.