TABLEAUX des POINTEURS TRAITEMENT DE STRUCTURES
Traitement des tableaux des structures Faire un programme C de création et traitement d'un tableau d'éléments de type structuré (avec un nombre maximal 30). Afficher tous les étudiants d’un faculté donné. Chaque structure est composée des champs suivants: a) nom - chaîne de caractères; b) faculté - chaîne de caractères; c) note moyenne - nombre réel. Utiliser les fonctions suvantes: Entrer les éléments dans le tableau Afficher le tableau Afficher les étudiants d’un faculté donné au bien un message (s’il n’y a aucun étudiant)
Traitement des tableaux des structures nom faculté note Les structures etudiant *tab[MAX]
Traitement des tableaux des structures La définition de la structure typedef struct { char nom[30]; char faculte[10]; float note; } etudiant; int entrer(etudiant *s[ ]); void sortir(etudiant *s[ ],int n); void sortir_el(etudiant *s); void chercher(etudiant *s[ ],int n,char fac_d[]); Les prototypes des fonctions
Traitement des tableaux des structures #include <stdio.h> 1/5 #include <conio.h> #include <string.h> #include <stdlib.h> #define MAX 30 #define RET "" typedef struct { char nom[30]; char faculte[10]; float note; } etudiant; int entrer(etudiant *s[]); void sortir(etudiant *s[],int n); void sortir_el(etudiant *s); void chercher(etudiant *s[],int n,char fac_d[]); Les directives La définition de la structure Les prototypes des fonctions
Traitement des tableaux des structures void main() 2/5 { int n; char fac_d[10]; etudiant *tab[MAX]; printf("Entrer les donnees des " "etudiants.\n"); n=entrer(tab); printf("\n La liste donnee\n"); sortir(tab,n); printf("Entrer faculte donne:"); gets(fac_d); chercher(tab,n,fac_d); } Appel de la fonction d’entré du tableau Appel de la fonction d’affichage du tableau Appel de la fonction d’affichage d’ éléments de la faculté donné
Traitement des tableaux des structures La définition de la fonction d’entré int entrer(etudiant *s[]) 3/5 { char *buf=(char*)malloc(31); int n=0; while(1) { printf("Entrer Nom ou bien RET:"); if(strcmp(gets(buf),RET)==0 || n==MAX) break; else { s[n]=(etudiant*)malloc(sizeof(etudiant)); strcpy(s[n]->nom,buf); printf("Entrer faculte:"); gets(s[n]->faculte); printf("Entrer note:"); s[n]->note=atof(gets(buf)); } n++; free(buf); free(s); return n; Entrer les donnees des etudiants. Entrer Nom ou bien RET: Ana Entrer faculte: FOE Entrer note: 4.50 Entrer Nom ou bien RET: Ivan Entrer faculte: FETT Entrer note: 5.50 Entrer Nom ou bien RET: Lili Entrer note: 3.50
Traitement des tableaux des structures void sortir(etudiant *s[],int n) 4/5 { int i; for(i=0;i<n;i++) { sortir_el(s[i]); } void sortir_el(etudiant *s) { printf("Nom: %s\n",s -> nom); printf("faculte: %s\n",s -> faculte); printf("note: %.2f\n",s -> note); La définition de la fonction d’affichage du tableau La liste donnee Nom: Ana faculte: FOE note: 4.50 Nom: Ivan faculte: FETT note: 5.50 Nom: Lili note: 3.50 La définition de la fonction d’affichage d’un élément
Traitement des tableaux des structures La définition de la fonction d’affichage d’ éléments de la faculté donné void chercher(etudiant *s[],int n,char fac_d[]) 5/5 { int trouve=0; int i; for (i=0; i<n;i++) if (strcmp(s[i]->faculte,fac_d)==0) { sortir_el(s[i]); trouve=1; } if(!trouve) printf("On n'a pas trouve etudiant de faculte %s \n",fac_d); Entrer faculte donne:FETT Nom: Ivan faculte: FETT note: 5.50
Traitement des tableaux des structures dynamiques nom groupe note Les structures student *array
Traitement des tableaux des structures dynamiques Faire un programme C de création et affichage d'un tableau dynamique d'éléments de type structuré. Chaque structure est composée des champs suivants: a) nom - chaîne de caractères; b) groupe; c) note. Utiliser les fonctions suivantes: Création du tableau dynamique Remplissage d’une structure Affichage du tableau
Traitement des tableaux des structures dynamiques #include <stdio.h> #include <stdlib.h> #include <string.h> #include <memory.h> #define NBR 2 struct etud { char nom[20]; int groupe; float note; }; typedef struct etud STUDENT; STUDENT inputStudent(); STUDENT * addStudentFromKey(short *); void printArray(STUDENT *,short );
Traitement des tableaux des structures dynamiques int main() { STUDENT *array; short i; array=addStudentFromKey(&i); printArray(array,i ); return 0; } STUDENT inputStudent() { STUDENT a; printf("\nEntrer le nom:"); gets(a.nom); printf("\nEntrer le groupe:"); scanf("%d",&a.groupe); printf("\nEntrer la note:"); scanf("%f",&a.note); return a;
Traitement des tableaux des structures dynamiques STUDENT *addStudentFromKey(short *i) { STUDENT a, *array; char word[4]; int n=NBR; *i=0; array=(STUDENT*)malloc(NBR*sizeof(STUDENT)); if(array==NULL) { free (array); exit(1);} while(printf("Structure suivante? –" " (yes/no)"),strcmp(gets(word),"yes")==0) { if(*i == n) { n=n*NBR; array=(STUDENT*)realloc(array,n*sizeof(STUDENT)); }
Traitement des tableaux des structures dynamiques printf("\nEtudiant %d: ",*i+1); a=inputStudent(); memcpy(&array[*i],&a,sizeof(STUDENT)); (*i)++; fflush(stdin); } return array; void printArray(STUDENT *array,short n) { int i; printf("\t\t\tTableau dynamique des structures\ \nNUMERO\t NOM \t\t\t GROUPE NOTE\n"); for(i=0;i<n;i++) printf("%-5d %-28s %-2d\t %10.2f\n", i+1,array[i].nom,array[i].groupe,array[i].note);
Traitement des tableaux des structures dynamiques