CM9 Tableaux
Télécharger le CM9 Tableaux en pdf
Pages : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
Page 1 : INFORMATIQUE 1I X . L E S TA B L E A U X S TAT I Q U E SEva Ansermin & Romuald Grignon v1.1
Page 2 : I. Principe des tableauxEva ANSERMIN & Romuald GRIGNON2
Page 3 : ●Je veux écrire un algorithme pour gérer les notes du devoir de la promo les consulter, calculer la moyenne générale, l’écart type, trouver la plus basse etc… .●Problème : vous êtes 330 ! Le problème avec les variables classiques…Eva ANSERMIN & Romuald GRIGNON3
Page 4 : ●Je veux écrire un algorithme pour gérer les notes du devoir de la promo les consulter, calculer la moyenne générale, l’écart type, trouver la plus basse etc… .●Problème : vous êtes 330 ! Le problème avec les variables classiques…PROGRAMME noteetudiantVARIABLEmoy: réelnote1 : réelnote2 : reelnote3: reel…note330 : reelDEBUT:moy- note1+note2+…+note330/330Eva ANSERMIN & Romuald GRIGNON4
Page 5 : ●Un tableau est un ensemble de variables ordonnées de même type.Les tableaux Un Tableau d’entiers ●Manipuler un tableau avec beaucoup de « cases » est plus simple que de manipuler plein de variables séparément. Eva ANSERMIN & Romuald GRIGNON5
Page 6 : ●Un tableau est un ensemble de variables ordonnées de même type.●Le nombre de cases d’un tableau est sa taille.●Dans cet exemple, la taille du tableau est 10.Les tableaux Un Tableau d’entiers Eva ANSERMIN & Romuald GRIGNON6
Page 7 : ●Un tableau est un ensemble de variables ordonnées de même type.Les tableaux Eva ANSERMIN & Romuald GRIGNON7
Page 8 : ●Un tableau est un ensemble de variables ordonnées de même type.Les tableaux La première case a l’indice 0 !Eva ANSERMIN & Romuald GRIGNON8
Page 9 : ●Pour accéder à une case du tableau : Les tableaux NomTableauindice de la caseEva ANSERMIN & Romuald GRIGNON9
Page 10 : ●Pour accéder à une case du tableau : Les tableaux NomTableauindice de la casenote1= note4= note10=noteEva ANSERMIN & Romuald GRIGNON10
Page 11 : ●Pour accéder à une case du tableau : Les tableaux NomTableauindice de la casenote1= 13note4= 14note10= la case n’existe pas!noteEva ANSERMIN & Romuald GRIGNON11
Page 12 : Le tableau dans la mémoire●Les cases d’un tableau sont stockées à la suite dans la mémoire.●Ex : tab : 10, 23, 10 ,8 // tableau de taille 4tab1tab0tab2tab3Eva ANSERMIN & Romuald GRIGNON12
Page 13 : Le tableau dans la mémoire●Les cases d’un tableau sont stockées à la suite dans la mémoire.tab1tab0tab2tab3L’adresse de tab2 est l’adresse de tab0+2L’indice du tableau indique donc où l’ordinateurdoit aller chercher la variable dans la mémoire.Eva ANSERMIN & Romuald GRIGNON13
Page 14 : Le tableau dans la mémoire●Les cases d’un tableau sont stockées à la suite dans la mémoire.tab1tab0tab2tab3tab4 est « en dehors » de l’espace mémoire réservé pour le tableau!tab4 indique la case mémoire tab0+4tab4Eva ANSERMIN & Romuald GRIGNON14
Page 15 : Attention aux indices des tableaux !●Si on déclare un tableau de taille N, on ne peut que utiliser des indices entre 0 et N-1.●Si on utilise un indice incorrect tableau-1, tableauN, tableauN+10, on essaye d’accéder à une partie de la mémoire sans en avoir l’autorisation.●C’est la Segmentation fault.Eva ANSERMIN & Romuald GRIGNON15
Page 16 : II. Tableaux en pseudo-codeEva ANSERMIN & Romuald GRIGNON16
Page 17 : Déclaration et manipulation d’un tableau : pseudo-code●Déclaration d’un tableau statique :nomTableautaille : TABLEAU DE typeoLe tableau possède taille cases contenant une variable de typeoLa première case est nomTableau0 la dernière nomTableautaille-1●Manipulation :Accéder à la i+1ème case : nomTableaui, 0 i taille.●Initialisation :Par défaut les valeurs ne sont pas initialiséesOn peut initialiser un tableau de la manière suivante :nomTableau - val1, val2, val3…Dans ce cas, les cases non indiquées sont mises à zéro. Eva ANSERMIN & Romuald GRIGNON17
Page 18 : Déclaration et manipulation d’un tableau : pseudo-code●ExemplePROGRAMME noteetudiantVARIABLEmoy: réelnote330: tableau de réelsDEBUT:note - 0 // Met toutes les cases à 0 !note0 - 15note10 - 13ECRIRE“Le premier étudiant a la note de ”+note0…FINEva ANSERMIN & Romuald GRIGNON18
Page 19 : Parcours d’un tableau●Soit le tableau suivant : tab10: tableau d’entiers●On souhaite afficher son contenu. Eva ANSERMIN & Romuald GRIGNON19
Page 20 : Parcours d’un tableau●Soit le tableau suivant : tab10: tableau d’entiers●On souhaite afficher son contenu. ECRIREtab●Il faut afficher toutes les cases du tableau une par une ! Eva ANSERMIN & Romuald GRIGNON20
Page 21 : Parcours d’un tableau●Soit le tableau suivant : tab10: tableau d’entiers●Il faut afficher toute les cases du tableau une par une ! DEBUT ECRIREtab0Eva ANSERMIN & Romuald GRIGNON21
Page 22 : Parcours d’un tableau●Soit le tableau suivant : tab10: tableau d’entiers●Il faut afficher toute les cases du tableau une par une ! DEBUT ECRIREtab0ECRIREtab1Eva ANSERMIN & Romuald GRIGNON22
Page 23 : Parcours d’un tableau●Soit le tableau suivant : tab10: tableau d’entiers●Il faut afficher toute les cases du tableau une par une ! DEBUT ECRIREtab0ECRIREtab1ECRIREtab2Eva ANSERMIN & Romuald GRIGNON23
Page 24 : Parcours d’un tableau●Soit le tableau suivant : tab10: tableau d’entiers●Il faut afficher toute les cases du tableau une par une ! DEBUT ECRIREtab0ECRIREtab1ECRIREtab2…Eva ANSERMIN & Romuald GRIGNON24
Page 25 : Parcours d’un tableau●Soit le tableau suivant : tab10: tableau d’entiers●Il faut afficher toute les cases du tableau une par une ! DEBUT ECRIREtab0ECRIREtab1ECRIREtab2…ECRIREtab9FINEva ANSERMIN & Romuald GRIGNON25
Page 26 : Parcours d’un tableau●Soit le tableau suivant : tab10: tableau d’entiers●Il faut afficher toute les cases du tableau une par une ! POUR i de 0 à 10 FAIREECRIREtabiFIN POUR Eva ANSERMIN & Romuald GRIGNON26
Page 27 : Parcours d’un tableau●Pour réaliser une opération sur un tableau, il faut parcourir toutes ses cases.POUR i de 0 à taille FAIREinstructionFIN POUR Eva ANSERMIN & Romuald GRIGNON27
Page 28 : Parcours d’un tableau●Exemple : remplir un tableau de note aléatoire:PROGRAMME noteetudiantVARIABLEmoy: réelnote330: tableau de reelsi : entierDEBUT:POUR i de 0 à 330 FAIRE notei - ALEA 20 FIN POUR FINEva ANSERMIN & Romuald GRIGNON28
Page 29 : ●On peut directement passer un tableau en argument d’une fonction.PROCEDURE affichertabtab330: tableau de réelsVARIABLEi : entierDEBUTPOUR i de 0 à 330 FAIREECRIREtabiFIN POUR FIN Passage de tableaux à une fonctionEva ANSERMIN & Romuald GRIGNON29
Page 30 : ●Pour l’appel à la fonction, il suffit de donner le nom du tableau PROCEDURE affichertabtab330: tableau de réelsVARIABLEi : entierDEBUTPOUR i de 0 à 330 FAIREECRIREtabiFIN POUR FINVARIABLE note330: tableau de reelsDEBUTaffichertabnote Passage de tableaux à une fonctionEva ANSERMIN & Romuald GRIGNON30
Page 31 : ●Plus général !PROCEDURE affichertabtab: tableau de reels, taille : entierVARIABLEi : entierDEBUTPOUR i de 0 à taille FAIREECRIREtabiFIN POUR FINVARIABLE note330: tableau de reelsDEBUTaffichertabnote, 330 Passage de tableaux à une fonctionEva ANSERMIN & Romuald GRIGNON31
Page 32 : Passage de tableaux à une fonction●Si un tableau passé en argument est modifié dans une fonction, il sera modifié dans le reste du programme sans avoir besoin d’utiliser de return! PROCEDURE incremtabtab: tableau de reels, taille : entierVARIABLEi : entierDEBUTPOUR i de 0 à taille FAIREtabi - tabi+1FIN POUR FINVARIABLE note330: tableau de reelsDEBUTincremtabnote, 330 // note sera modifiée !! Eva ANSERMIN & Romuald GRIGNON32
Page 33 : III. Tableaux en CEva ANSERMIN & Romuald GRIGNON33
Page 34 : Déclaration et manipulation d’un tableau : langage C●Déclaration d’un tableau statique :type nomTableautaille●Manipulation :Accéder à la i+1ème case : nomTableaui, 0 i taille.●Initialisation :On peut initialiser toutes les cases du tableau lors de la déclaration:type nomTableautaille=val1, val2, val3, …Les cases non indiquées sont mises à zérosEva ANSERMIN & Romuald GRIGNON34
Page 35 : Déclaration et manipulation d’un tableau : langage C●Exempleint mainfloat note330=0; // met toutes les cases à 0note0=15;note10=13;printf“La note du premier étudiant est f”,note0;return 0;Eva ANSERMIN & Romuald GRIGNON35
Page 36 : Parcours d’un tableau : langage C●Exempleint mainfloat note330=0; // met toutes les cases à 0note0=15;note10=13;printf“Les notes des étudiants sont:”;for i=0; i330 ; i++// boucle pour parcourir le tableauprintf“f”,notei;return 0;Eva ANSERMIN & Romuald GRIGNON36
Page 37 : Passage de tableaux à une fonction : langage Cvoid affichertabfloat tab, int taille // /!\ au int i;for i=0;itaille;i++printf“f”,tabi;int mainfloat note330;…affichertabnote, 330;return 0;Eva ANSERMIN & Romuald GRIGNON37
Page 38 : IV. Les constantesEva ANSERMIN & Romuald GRIGNON38
Page 39 : Gestion de la taille du tableau ●La taille du tableau est fixe. Il faut donc toujours utiliser la même valeur dans le code.●3 possibilités :○Ecrire la valeur qui correspond à sa taille tout le temps ! comme on a fait jusqu’ici Eva ANSERMIN & Romuald GRIGNON39
Page 40 : Gestion de la taille du tableau ●La taille du tableau est fixe. Il faut donc toujours utiliser la même valeur dans le code.●3 possibilités :○Ecrire la valeur qui correspond à sa taille tout le temps ! comme on a fait jusqu’ici ○Points négatifs : ■Il faut s’en souvenir ■Si on souhaite changer entre deux exécutions, il faudra changer la valeur partout !Eva ANSERMIN & Romuald GRIGNON40
Page 41 : Gestion de la taille du tableau Eva ANSERMIN & Romuald GRIGNON41●La taille du tableau est fixe. Il faut donc toujours utiliser la même valeur dans le code.●3 possibilités :○Ecrire la valeur qui correspond à sa taille tous le temps ! comme on a fait jusqu’ici ○Ecrire la taille du tableau dans une variable.
Page 42 : Gestion de la taille du tableau ●La taille du tableau est fixe. Il faut donc toujours utiliser la même valeur dans le code.●3 possibilités :○Ecrire la valeur qui correspond à sa taille tous le temps ! comme on a fait jusqu’ici ○Ecrire la taille du tableau dans une variable.■Points négatifs : ●C’est dangereux : il ne faut pas modifier la valeur de la variable en cours de code !●Certains compilateurs ne l’acceptent pas. Eva ANSERMIN & Romuald GRIGNON42
Page 43 : Gestion de la taille du tableau ●La taille du tableau est fixe. Il faut donc toujours utiliser la même valeur dans le code.●3 possibilités :○Ecrire la valeur qui correspond à sa taille tous le temps ! comme on a fait jusqu’ici ○Ecrire la taille du tableau dans une variable.○Utiliser une constante. Eva ANSERMIN & Romuald GRIGNON43
Page 44 : Les constantes●Les constantes sont des données dont la valeur est fixée au contraire des variables.●Les constantes sont dites globales : elle sont accessibles par l’ensemble du code au contraire des variables locales qui ne sont valables que dans les fonctions dans lesquelles elles sont déclarées.●Par convention, le nom des constantes en est MAJUSCULE●Pratique pour les tailles de tableaux qui ne doivent pas être modifiées !Eva ANSERMIN & Romuald GRIGNON44
Page 45 : Les constantes●En pseudo-code PROGRAMME testtableauConstante TAILLE1 - 10Constante TAILLE2 - 200VARIABLEtab1TAILLE1: tableau de reelstab2TAILLE2 :tableau d’entiers…DEBUTPOUR i de 0 à TAILLE1 FAIRE…Partout dans le code TAILLE1 sera remplacé par 10 et TAILLE2 par 200Eva ANSERMIN & Romuald GRIGNON45
Page 46 : Les constantes●En langage Cincludestdio.hdefine TAILLE1 10define TAILLE2 200int mainfloat tab1TAILLE1;int tab2TAILLE2;…for i=0; iTAILLE1;i++…Partout dans le code TAILLE1 sera remplacé par 10 et TAILLE2 par 200Eva ANSERMIN & Romuald GRIGNON46
Page 47 : Définition de constantes en Chttp://www.spencerauthor.com/pblproblems/●On peut utiliser define pour remplacer une expression par une autre.Syntaxe : define symbole expression : define N 10define VRAI 1defince FAUX 0define PI 3.141592655359●Les commandes commençant par sont toujours en premier dans le code. Ces commandes sont des directives du compilateur. On les appelle directives du préprocesseur.Eva ANSERMIN & Romuald GRIGNON47
Page 48 : Structure générale d’un fichier .c Instructions du préprocesseur inclusion bibliothèque+ définition constante Code de la fonction 1Code de la fonction 2….Code de la fonction mainEva ANSERMIN & Romuald GRIGNON48
Page 49 : V. Les chaînes de caractèresEva ANSERMIN & Romuald GRIGNON49
Page 50 : Tableau en C : cas des chaînes de caractères. ●Le type chaîne de caractères n’existe pas directement en C. Ceci est dû au fait qu’on ne connait pas le nombre de caractères nécessaire à l’avance. ●Une chaîne de caractères est une suite ordonnée de caractères.Eva ANSERMIN & Romuald GRIGNON50
Page 51 : Tableau en C : cas des chaînes de caractères. ●Le type chaîne de caractères n’existe pas directement en C. Ceci est dû au fait qu’on ne connait pas le nombre de caractères nécessaire à l’avance. ●Une chaîne de caractères est une suite ordonnée de caractères.●Pour gérer un ensemble de caractères, on va utiliser un tableau de caractères.BonjourEva ANSERMIN & Romuald GRIGNON51
Page 52 : •Si on veut stocker/ afficher un mot on peut donc faire ceci: Tableau en C : cas des chaînes de caractères. int i=0;char chaine6; // Tableau de 6 char pour stocker S-a-l-u-tchaine0 = 'S’; //toujours mettre les ‘ ‘ quand on manipule des caractèreschaine1 = 'a';chaine2 = 'l';chaine3 = 'u';chaine4 = ‘t’;// On peut écrire aussi directement chaine= " Salut" !// afficher le mot: fori=0;i5;i++printf“c“, chainei;Eva ANSERMIN & Romuald GRIGNON52
Page 53 : •Problème : on ne connait pas toujours le nombre de caractères nécessaire! •Pour cela, un utilise un caractère de fin de chaîne : ‘\0’ ; •Exemple : char maChaine8 = ‘Salut’;Salut\0maChaineTableau en C : cas des chaînes de caractères. Eva ANSERMIN & Romuald GRIGNON53
Page 54 : •Pour afficher un mot/ phrase sans en connaitre la taille : Tableau en C : cas des chaînes de caractères. int i=0;// afficher le mot: whilechainei != ‘\0 ’printf“c“, chainei;i++Eva ANSERMIN & Romuald GRIGNON54
Page 55 : •Heureusement le C peut faire cela automatiquement grâce au format s.Tableau en C : cas des chaînes de caractères. char nom100; // pourquoi 100 ?printf“Comment tu t’appelles? “;scanf“s“,nom; // rempli automatiquement le tableau nom et met \0 à la fin, pas de & !!!printf“Bonjour s”, nom; //affiche les cases de nom jusqu’à ‘\0’•La bibliothèque string.h comporte des fonctions utiles à la gestion des chaînes de caractères.Eva ANSERMIN & Romuald GRIGNON55
Page 56 : VI. Les tableaux à deux dimensionsEva ANSERMIN & Romuald GRIGNON56
Page 57 : •Les tableaux peuvent avoir deux ou plusieurs dimensions !•Les tableau à deux dimensions peuvent être vus comme des matrices. •On manipule alors deux indices : l’un représentant les lignes, l’autre les colonnes. Tableau à deux dimensions : principe1 10 15 ..……203……………16……………77……………5010……………1618……………713……………12Eva ANSERMIN & Romuald GRIGNON57
Page 58 : •Les tableaux peuvent avoir deux ou plusieurs dimensions !•Les tableau à deux dimensions peuvent être vus comme des matrices. •On manipule alors deux indices : l’un représentant les lignes, l’autre les colonnes. Tableau à deux dimensions : principe012……Nombre colonne -2Nombre colonne -101 10 15 ..……2013……………126……………7…7……………50…10……………16Nombre ligne -218……………7Nombre ligne -113……………12Indice ligneIndice colonneEva ANSERMIN & Romuald GRIGNON58
Page 59 : •En pseudo –code :•Déclaration du tableau :nomTableau nbLignes, nbColonnes : TABLEAU DE type•Accéder à la ième ligne, jème colonne : nomTableaui,j, 0 i nbLignes, 0 j nbColonnesTableau à deux dimensions : déclaration•En C : •Déclaration : type monTab2DnbLignesnbColonnes; exemple : int monTab2D34 // Tableau de 3 lignes et 4 colonnes ;•Accéder à la ième ligne, jème colonne : nomTableauij, 0 i nbLignes, 0 j nbColonnesEva ANSERMIN & Romuald GRIGNON59
Page 60 : Tableau à deux dimensions•C’est ce principe qui est utilisé pour l’initiation d’un tableau: T - 0, 1, 1, 0, 0, -2, 0, 7, -1, 1, 0, 0 01100-207-1100•Un tableau 2D peut également être vu comme un tableau de tableaux : chaque ligne est un sous-tableau.Eva ANSERMIN & Romuald GRIGNON60
Page 61 : •Dans la mémoire le stockage des valeurs est consécutif ! Mémoire 01100-207-110001100-207-1100Seconde ligneT00T10T20Première ligneTroisième ligneEva ANSERMIN & Romuald GRIGNON61
Page 62 : •Un tableau 2D en C est équivalent à un tableau de taille : nombreligne nombrecolonne.•Lors de la manipulation du tableau le calcul suivant est donc effetcué :tab2Dij ⇔case du tableau n° i nombrecolonne + jMémoire 01100-207-1100Seconde ligneT00T10T20Première ligneTroisième ligneEva ANSERMIN & Romuald GRIGNON62
Page 63 : •Les tableaux permettent de stocker un ensemble de variables. Ils peuvent avoirplusieurs dimensions et sont de taille fixe.•Les valeurs du tableau sont stockées les unes à la suite des autres dans la mémoire. •Attention aux indices !En résumé Eva ANSERMIN & Romuald GRIGNON63
Pages : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63