1 Structures des données. 2  Le tableau permettait de désigner sous un seul nom un ensemble de valeurs de même type, chacune d'entre elles étant repérée.

Slides:



Advertisements
Présentations similaires
La programmation orientée objet avec Java L3-MIAGE Plan
Advertisements

Premier programme en C :
La boucle for : init7.c et init71.c
Rappels C.
Initiation à la programmation et algorithmique cours 4
C++ 6ème cours Patrick Reuter maître de conférences
C.
Structures et unions types énumérés Qu'est-ce qu'une structure
Tableaux Certains problèmes nécessitent beaucoup de variables du même type. Exemple : relevé de températures matin et soir dans 10 villes pour 10 jours.
Fonctions Dans un programme : certaines opérations (ou séquences d'opérations) peuvent se répéter plusieurs fois : affichage de tableau, saisie, ou même.
FLSI602 Génie Informatique et Réseaux
FLSI602 Génie Informatique et Réseaux
FLSI602 Génie Informatique et Réseaux
8. Les tableaux P. Costamagna – ISEN N1.
Initiation à la programmation et algorithmique cours 3
B.Shishedjiev - Informatique II
Regrouper des éléments de même type et pouvoir y accéder à laide dun identificateur et dun indice. Objectif des tableaux.
Récursivité.
RESUMES Module II1 SOMMAIRE CYCLE 1 : Saisir – Afficher – Données
8PRO100 Éléments de programmation Allocation dynamique de la mémoire.
TRAITEMENT DE STRUCTURES
Les fichiers et les chaînes de caractères
FICHIERS.
Leçon 2 : Surcharge des opérateurs IUP 2 Génie Informatique Méthode et Outils pour la Programmation Françoise Greffier Université de Franche-Comté.
Les pointeurs Modes d’adressage de variables. Définition d’un pointeur. Opérateurs de base. Opérations élémentaires. Pointeurs et tableaux. Pointeurs et.
Structures de données IFT-2000
Contrôle de types Les types en programmation Expressions de types Un contrôleur de types Equivalence de types Conversions de types Généricité.
IFT 6800 Atelier en Technologies d’information
8PRO100 Éléments de programmation Les types composés.
Structures de données IFT-2000
LANGAGE C LP A2I IUT St DIE
Procédures et fonctions
L’essentiel du langage C
Structures des données
Le langage C Structures de données
Les pointeurs L'opérateur &.
Le langage C Rappel Pointeurs & Allocation de mémoire.
4 Introduction des objets. Les chaînes et tableaux
LES PILES ET FILES.
Les Pointeurs et les Tableaux Statiques et Tableaux Dynamiques
La notion de type revisitée en POO
et quelques rappels sur certains éléments du langage C
Les adresses des fonctions
1 FICHIERS. 2 Les Fichiers  Les "entrées-sorties conversationnelles" échangent des informations entre le programme et l'utilisateur.  Le terme de fichier.
SIF-1053 Architecture des ordinateurs
ALGORITHMIQUE ET PROGRAMMATION C
Un survol du language C.
Labo 4 : Les structures et les entrées et sorties
Cours C++ Fonctions Surcharge d’opérateurs Passage d’arguments
Tutorat en bio-informatique
5ième Classe (Mercredi, 19 octobre) Prog CSI2572.
Les classes et les objets Les données finales class A { … private final int n = 20 ; // la valeur de n est définie dans sa déclaration … } class A { public.
Les types composés Les enregistrements.
Les surcharges d'opérateurs
TABLEAUX des POINTEURS TRAITEMENT DE STRUCTURES
8PRO100 Éléments de programmation Les pointeurs de caractères.
Cours LCS N°4 Présenté par Mr: LALLALI
Fiabilisation des lectures au clavier. Problèmes liés à scanf: rencontre de caractères invalides Sans arrêt prématuré: compte = scanf(``%d%c``;&n,&c);
Classe 1 CSI2572 Autres modificateurs de déclaration de variables: & volatile & register & static & auto & extern & const volatile Indique au compilateur.
Conception de Programmes - IUT de Paris - 1ère année Conception de Programmes Objectifs et organisation du cours Introduction à la P.O.O.
Introduction au langage C Structures de données
8PRO107 Éléments de programmation Les adresses et les pointeurs.
8PRO107 Éléments de programmation Les tableaux. Étude de cas 1 Description du problème : Lire une liste d’entiers et l’afficher d’abord dans le même ordre.
PRO-1027 Programmation Scientifique en C
Langage de Programmation Orientée Objet : C++
Conception de Programmes - IUT de Paris - 1ère année Les classes Introduction Déclaration d’une classe Utilisation d’une classe Définition des.
Informatique 2A Langage C 5ème séance. Déroulement de la séance 5 1 ère partie Étude des chaînes de caractères 2 ème partie Les structures 3.
Informatique 2A Langage C 2 è séance. Objectifs de la séance 2 Début de la modularité avec les fonctions Création d’une première bibliothèque.
M. BENJELLOUN : 2005 Le but final est de programmer un jeu où l'ordinateur choisira un nombre aléatoire entre 0 et 100 que vous devez deviner.
Transcription de la présentation:

1 Structures des données

2  Le tableau permettait de désigner sous un seul nom un ensemble de valeurs de même type, chacune d'entre elles étant repérée par un indice.  La structure va nous permettre de désigner sous un seul nom un ensemble de valeurs pouvant être de types différents.  L'accès à chaque élément de la structure (nommé champ) se fera non plus par une indication de position, mais par son nom au sein de la structure.

3 Structures des données DÉCLARATION D'UNE STRUCTURE  Première méthode  Ce modèle s'appelle ici personne et il précise le nom et le type de chacun des "champs" constituant la structure.  Le modèle de structure ne réserve pas de variables correspondant à cette structure. struct personne {char nom[20]; char prenom[20]; int no_employe; }; On définit un modèle de structure

4 Structures des données DÉCLARATION D'UNE STRUCTURE  Première méthode  Une fois un tel modèle défini, on peut déclarer des "variables" du type correspondant. struct personne p1,p2; On réserve deux emplacements p1 et p2 du type personne. nomprenomno_employenomprenom no_employe 20 octets 2 octets20 octets 20 octets 2 octets 84 octets p1 p2

5 Structures des données DÉCLARATION D'UNE STRUCTURE  Deuxième méthode struct {char nom[20]; char prenom[20]; int no_employe; } p1,p2; On déclare des variables de type structure sans utiliser un modèle de structure.

6 Structures des données DÉCLARATION D'UNE STRUCTURE  Troisième méthode struct personne {char nom[20]; char prenom[20]; int no_employe; } p1,p2;... struct personne pers1,pers2,pers3; On peut combiner déclaration du modèle de structure et déclaration de variables.

7 Structures des données DÉCLARATION D'UNE STRUCTURE  Quatrième méthode – avec TYPEDEF struct personne {char nom[20]; char prenom[20]; int no_employe; };... typedef struct personne PERSONNE; PERSONNE p1,p2; Variant A typedef struct {char nom[20]; char prenom[20]; int no_employe; }personne; personne p1,p2,*p3,p4[5]; Variant B

8 Structures des données DÉCLARATION D'UNE STRUCTURE LA PORTÉE DU MODÈLE DE STRUCTURE  La "portée" d'un modèle de structure dépend de l'emplacement de sa déclaration:  si elle se situe au sein d'une fonction (y compris, la "fonction main"), elle n'est accessible que depuis cette fonction;  si elle se situe en dehors d'une fonction, elle est accessible de toute la partie du fichier source qui suit sa déclaration; elle peut ainsi être utilisée par plusieurs fonctions;  il est possible de placer un certain nombre de déclarations de modèles de structures dans un fichier séparé que l'on incorpore par #include.

9 Structures des données Accès aux membres des structures  L'opérateur de sélection de membre qui se note. (point) ou bien -> (flèche). personne p1,p2,*p3,p4[5];... p1.no_employe p2.nom p3 -> no_employe ou bien(*p3).no_employe p4[0].no_employe

10 Structures des données UTILISATION D'UNE STRUCTURE  Utilisation des champs d'une structure  Utilisation globale d'une structure p1.no_employe=12345; printf (“%d", p1.no_employe); scanf(“%d”,& p1.no_employe); p3 -> no_employe=2345; p4[0].no_employe=5678; strcpy(p1.prenom,”Lili”); personne x,y; x = y; Le champ peut être manipulé comme n'importe quelle variable L'affectation globale n'est pas possible entre tableaux.

11 Structures des données INITIALISATION D'UNE STRUCTURE  Lors de sa déclaration.  Lors d’exécution du programme. struct personne p = {"Jean", "Dupond", 7845}; struct personne p; printf(“Entrer le nom:”); gets(p.nom); printf(“Entrer le prenom:”); gets(p.prenom); printf(“Entrer le no_employe:”); scanf(“%d”,&p.no_emploe); En utilisant constantes ou des expressions constantes

12 Structures des données IMBRICATION DE STRUCTURES  Chacun des champs d'une structure peut être d'un type absolument quelconque: pointeur, tableau, structure,...  Champ - tableau struct personne {char nom[30] ; char prenom [20] ; double heures [31] ; } employe ; employe.heures[4] désigne le cinquième élément du tableau heures de la structure employe.

13 Structures des données IMBRICATION DE STRUCTURES  Chacun des champs d'une structure peut être d'un type absolument quelconque: pointeur, tableau, structure,...  Champ structure struct s_date {int jour; int mois; int an; }; struct personne {char nom[20]; int numero; struct s_date naissance; } p; p.nom désigne le nom p.naissance.mois désigne le mois

14 Structures des données TABLEAUX DE SRUCTURES  point est un nom de modèle de structure.  courbe représente effectivement un ''objet'' de type "tableau de 50 éléments du type point".  courbe[i].nom représente le nom du point de rang i du tableau courbe. struct point {char nom ; int x ; int y ; }; struct point courbe[50]; un point d'un plan représente un ensemble de 50 points du type défini struct point

15 Structures des données Exemple  Faire un programme C de: 1) remplir une structure imbriquée personne avec les champs (nom, numéro, date de naissance) en utilisant la structure date (avec les champs: jour, mois, an); 2) afficher la structure remplie. Utiliser les fonctions: saisir la date; saisir la personne, afficher la personne. #include 1/5 struct s_date { int jour; int mois; int an; }; struct personne { char nom[20]; int numero; struct s_date naissance; }; Les déclarations des modèles des structures

16 Structures des données Exemple void afficher( struct personne ); 2/5 struct s_date SaisirDate( void ); void SaisirPersonne( struct personne *f ); /* programme principal */ main() { struct personne p; SaisirPersonne(&p); afficher(p); return 0; } Les déclarations des fonctions Nom? Lili Numero? 123 Jour? 9 Mois? 8 Annee? 1978 Affichage de la personne Nom: Lili Numero: 123 Date de naissance: 9/8/1978

17 Structures des données Exemple void afficher( struct personne f ) { 3/5 printf("Affichage de la personne"); printf("Nom : %s\n", f.nom ); printf("Numero : %d\n", f.numero); printf("Date de naissance : %d/%d/%d\n", f.naissance.jour, f.naissance.mois, f.naissance.an ); } La définition de la fonction d’affichage

18 Structures des données Exemple struct s_date SaisirDate( void ) { 4/5 struct s_date date; printf("Jour ? "); scanf("%d", &date.jour); printf("Mois ? "); scanf("%d", &date.mois); printf("Annee ? "); scanf("%d", &date.an); return date; } La définition de la fonction de saisie date

19 Structures des données Exemple void SaisirPersonne( struct personne *f ) { 5/5 printf("Nom ? "); gets( f->nom ); printf("Numero ? "); scanf("%d", &f->numero); f->naissance = SaisirDate(); } La définition de la fonction de saisie personne

20 Structures des données TRANSMISSION D'UNE STRUCTURE EN ARGUMENT D'UNE FONCTION  Transmission de la valeur d'une structure #include struct enreg { int a; double b; }; void fct (struct enreg y); int main(void) {struct enreg x; x.a = 1; x.b = 12.5; printf ("\navant appel fct: %d %.2f",x.a,x.b); fct (x); printf ("\n au retour dans main: %d %.2f", x.a, x.b); } void fct (struct enreg s) {s.a = 0; s.b=1; printf ("\ndans fct: %d %.2f", s.a, s.b); } avant appel fct : dans fct : au retour dans main :

21 Structures des données TRANSMISSION D'UNE STRUCTURE EN ARGUMENT D'UNE FONCTION  Transmission de l'adresse d'une structure: l'opérateur -> #include struct enreg { int a; float b; }; void fct (struct enreg *); int main(void) {struct enreg x; x.a = 1; x.b = 12.5; printf ("\navant appel fct: %d %.2f",x.a,x.b); fct (&x); printf ("\n au retour dans main : %d %.2f", x.a, x.b); retunr 0 ; } void fct (struct enreg * ads) {ads->a = 0; ads->b = 1; printf ("\ndans fct: %d %.2f", ads->a, ads->b); } avant appel fct : dans fct : au retour dans main :

22 Structures des données TABLEAUX DE STRUCTURES - modèle 1  Exemple - Faire un programme C de création d'un tableau d'éléments – étudiants (nombre maximale 20), de type structuré. Chaque structure est composée des champs suivants: a) nom - chaîne de caractères; b) note - nombre réel. Trier le tableau selon le champ note en ordre décroissant. Afficher le tableau créé et le tableau après le tri.

23 TABLEAUX DE STRUCTURES - modèle 1 nom note pointeur nom note nom note... nom note El. 1 El. 2 El. n Structures des données

24 Structures des données TABLEAUX DE STRUCTURES - modèle 1  Exemple #include #define MAX 20 struct etud { char nom[81]; float note; }; typedef struct etud STUD; int enter(STUD *ps); int print(STUD s); void sort(STUD *s,int n); Le modèle de la structure Les prototypes des fonctions

25 Structures des données TABLEAUX DE STRUCTURES - modèle 1 int main() {STUD fac[MAX]; int n, res, i, flag; do { printf("nombre: "); scanf("%d", &n); } while(n MAX); printf ("\nEntrer les etudiants\n"); for (i=0, flag = 1; i<n && flag == 1; i++) { res = enter(&fac[i]); if(res == 0) flag = 0; } if(flag == 0) n = i;

26 Structures des données TABLEAUX DE STRUCTURES - modèle 1 printf("\nListe des etudiants\n"); printf("nom \t\t\t note\n"); for (i=0; i<n; i++) if(print (fac[i]) == 0) printf("problem d'affichage!\n"); sort(fac,n); printf("\nListe des etudiants apres le tri\n"); printf("nom \t\t\t note\n"); for (i=0; i<n; i++) if(print (fac[i]) == 0) printf("problem d'affichage!\n"); }

27 Structures des données TABLEAUX DE STRUCTURES - modèle 1 int enter(STUD *ps) {int res; if(ps == NULL) return 0; fflush(stdin); printf("\nnom: "); if(gets(ps->nom) == NULL) return 0; // CTRL/Z if(ps->nom[0] == '\0')//la chaine vide est entre strcpy(ps->nom, "?"); if(strlen(ps->nom) > 80) ps->nom[80] = '\0'; do { fflush(stdin); printf("\nnote: "); res = scanf("%f", &(ps->note)); if (res == EOF) return 0; } while( res==0 || ps->note note > 6.0); return 1; } res: 0 (erreur en entrant les donnees) res:1 (entre les donnees sans erreur)

28 Structures des données TABLEAUX DE STRUCTURES - modèle 1 int print(STUD s) {int res; res = printf("%-20s\t%4.2f\n", s.nom,s.note); if(res < 0) return 0; else return 1; }

29 Structures des données TABLEAUX DE STRUCTURES - modèle 1 void sort(STUD*s,int n) {STUD temp; int i,j,f=1; while(f!=0) {f=0; for(i=0; i<n-1; i++) if(s[i].note < s[i+1].note) { temp=s[i]; s[i]=s[i+1]; s[i+1]=temp; f=1; } } }

30 Structures des données TABLEAUX DE STRUCTURES - modèle 1

31 Structures des données TABLEAUX DE STRUCTURES - modèle 1

32 Structures des données TABLEAUX DE STRUCTURES - modèle 2  Exemple – avec deux structures embriquées #include 1/4 #include #define MAX 20 typedef struct { char nom[80]; float note; }etud; struct tab { etud tbl[MAX]; int size; }; Les modèles des structures

33 Structures des données TABLEAUX DE STRUCTURES - modèle 2  Exemple – avec deux structures embriquées void entrer(struct tab *s); 2/4 void print(struct tab s); void sort(struct tab *s); void main() { struct tab s; entrer(&s); print(s); sort(&s); printf("Apres le tri\n"); print(s); } Les prototypes des fonctions entrer nombre de structures:3 nom:Lili note:3.50 nom:Ivan note:5.50 nom:Ana note:4.00 Lili3.50 Ivan5.50 Ana4.00 Apres le tri Ivan5.50 Ana4.00 Lili3.50

34 Structures des données TABLEAUX DE STRUCTURES - modèle 2  Exemple – avec deux structures embriquées void entrer(struct tab *s) 3/4 { int n,i; do { printf("entrer nombre de structures:"); scanf("%d",&n); } while(n>MAX); fflush(stdin); for(i=0;i<n;i++) { printf("nom:"); gets((*s).tbl[i].nom); printf("note:"); scanf("%f",&(*s).tbl[i].note); fflush(stdin); } (*s).size=n; } La définition de la fonction d’entré

35 Structures des données TABLEAUX DE STRUCTURES - modèle 2  Exemple – avec deux structures embriquées void print(struct tab s) 4/4 { int i; for(i=0;i<s.size;i++) printf("%s\t%6.2f\n",s.tbl[i].nom,s.tbl[i].note); } void sort(struct tab *s) { etud temp; int i,j,f=1; while(f!=0) { f=0; for(i=0; i<(*s).size-1; i++) if((*s).tbl[i].note < (*s).tbl[i+1].note) { temp=(*s).tbl[i]; (*s).tbl[i]=(*s).tbl[i+1]; (*s).tbl[i+1]=temp; f=1; } } } La définition de la fonction de tri La définition de la fonction d’affichage