GEF 243B Programmation informatique appliquée Types dérivés, structures et tableaux §8.1 - 8.3.

Slides:



Advertisements
Présentations similaires
Module Systèmes d’exploitation
Advertisements

GEF 243B Programmation informatique appliquée Listes chaînées I – Tableaux de structures §15.1 – 15.2.
GEF 435 Principes des systèmes d’exploitation
GEF 243B Programmation informatique appliquée
Hiver 2010JGA Beaulieu GEF 243B Programmation informatique appliquée Structure de base des programmes en C.
GEF 243B Programmation informatique appliquée
Premier programme en C :
Introduction a L’algorithme
Introduction au Langage C,C++
Algorithmique (suite)
Portée des variables VBA & Excel
Calculs de complexité d'algorithmes
GEF 243B Programmation informatique appliquée Boucles §
GEF 243B Programmation Informatique Appliquée
GEF 243B Programmation informatique appliquée
GEF 243B Programmation informatique appliquée Structures §12.3.
GEF 243B Programmation informatique appliquée Expressions et opérateurs §
GEF 243B Programmation informatique appliquée
GEF 243B Programmation informatique appliquée
GEF 243B Programmation informatique appliquée Tableaux et pointeurs §10.1.
GEF 243B Programmation informatique appliquée Listes chaînées II §15.1 – 15.2.
GEF 243B Programmation informatique appliquée Pointeurs et adresses §9.1.
GEF 243B Programmation informatique appliquée Décisions de design avec structures de données §15.1 – 15.2.
GEF 243B Programmation informatique appliquée Flot de contrôle et énoncés de sélection §
GEF 243B Programmation informatique appliquée Expressions et opérateurs.
Hiver 2005Maj JGA Beaulieu & Capt MWP LeSauvage GEF 243B Programmation informatique appliquée Types, variables et constantes.
GEF 243B Programmation informatique appliquée
GEF 243B Programmation informatique appliquée Expressions de type mixte et blocs §
GEF 243B Programmation informatique appliquée
GEF 243B Programmation informatique appliquée
Hiver 2010JGA Beaulieu GEF 243B Programmation informatique appliquée Fonctions.
Hiver 2010JGA Beaulieu GEF 243B Programmation informatique appliquée Modules et masquage dinformation.
Hiver 2010JGA Beaulieu GEF 243B Programmation informatique appliquée Tableaux et pointeurs §10.1.
Exercices Algorithmiques
C.
Paramètres et pointeurs
FLSI602 Génie Informatique et Réseaux
8. Les tableaux P. Costamagna – ISEN N1.
Introduction à la programmation (420-PK2-SL) cours 15 Gestion des applications Technologie de linformation (LEA.BW)
Algorithme et programmation
Initiation à la programmation et algorithmique cours 3
Points importants de la semaine Les commentaires. Les variables. Les instructions conditionnelles. Les instructions itératives (les boucles).
Regrouper des éléments de même type et pouvoir y accéder à laide dun identificateur et dun indice. Objectif des tableaux.
Langage C Révision.
Introduction à la programmation (420-PK2-SL) cours 12 Gestion des applications Technologie de linformation (LEA.BW)
Récursivité.
Points importants de la semaine Les boucles. Les types arithmétiques. Les opérateurs.
RESUMES Module II1 SOMMAIRE CYCLE 1 : Saisir – Afficher – Données
8PRO100 Éléments de programmation Allocation dynamique de la mémoire.
TRAITEMENT DE STRUCTURES
CYCLE 1 : Saisir – Afficher – Données Déclarer des Constantes dans un programme 1- Rôle de la déclaration de constante 2- Syntaxe de la déclaration de.
Les pointeurs Enormément utilisé en C/C++ ! Pourquoi? A quoi ça sert?
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
IFT 6800 Atelier en Technologies d’information
COURS DE PROGRAMMATION ORIENTEE OBJET :
CSI 1502 Principes fondamentaux de conception de logiciels
Tableaux Introduction aux tableaux à une dimension. Déclaration, stockage, initialisation et accès en lecture ou en écriture aux composantes d’un tableau.
Structures de données IFT-2000
Structures des données
Stocker plusieurs valeurs de même type dans une variable
1 Notations Asymptotiques Et Complexité Notations asymptotiques : 0 et  Complexité des algorithmes Exemples de calcul de complexité.
Le langage C Rappel Pointeurs & Allocation de mémoire.
Les Pointeurs et les Tableaux Statiques et Tableaux Dynamiques
Les adresses des fonctions
Un survol du language C.
Cours LCS N°4 Présenté par Mr: LALLALI
ALGORITHME ET PROGRAMMATION RÉVISION Informatique et Sciences du Numérique.
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 1A Langage C 6 ème séance 1. Objectifs de la séance 6  Allocation dynamique de mémoire  Application à la création de tableaux 2.
Transcription de la présentation:

GEF 243B Programmation informatique appliquée Types dérivés, structures et tableaux §

21-Jan-14 2 JGA Beaulieu Revue Pourquoi est-ce que les organigrammes sont utiles? Faites un organigramme pour le problème suivant: Ouvre le fichier lecture Lit le premier caractère Tant que monChar est différent de '\0' Lit le prochain caractère du fichier Si monChar est plus grand que 'Z' Imprime "minuscule" Sinon imprime "majuscule" Quand touts les caractères sont traités, ferme le fichier

21-Jan-14 3 JGA Beaulieu Synopsis Concept dun type dérivé Concept des structures de données Tableaux et fonctions Tableaux à une dimension Tableaux à deux dimensions Tableaux à multi dimensions

21-Jan-14 4 JGA Beaulieu Concept dun type dérivé Comme nous lavons vue, il y a quatre types principaux en C On ne peut pas déclarer des variables void Même si ces types sont utiles, il nous donnent seulement une capacité de base pour traiter les données et linformation Si nous avions seulement ces types, nous limiterions la puissance dexpression de nos programmes Ou nous compliquerions la façon dont nos programmes sont écrits

21-Jan-14 5 JGA Beaulieu Rappel - Types en C

21-Jan-14 6 JGA Beaulieu Concept dun type dérivé Les types dérivés nous permettent de combiner des types de bases (standard) pour augmenter notre capacité de représenter et manipuler linformation Donc nous combinons les types de données de base pour créer de nouveaux types Mais comment allons nous organiser ces types? …et voici les structures

21-Jan-14 7 JGA Beaulieu Types Dérivés en C

21-Jan-14 8 JGA Beaulieu Concept des structures de données Imaginez que vous voulez traiter 20 integers. Nous voulons lire chaque entier du clavier Ensuite nous voulons les traiter, et même les afficher/imprimer Pour ce faire, nous devons stocker ces integers en mémoire pour quelque temps Nous avons donc besoin dune référence symbolique pour chacun de ces entiers: 20 variables

21-Jan-14 9 JGA Beaulieu Concept des structures de données Chaque fois que nous voulons lire, traiter,.. les entiers comme un groupe, nous devons avoir 20 énoncés, chacun contenant un nom de variable : int nombre1, nombre2,…,int nombre20; … printf(Cest le nombre1 : %d, nombre1); printf(Cest le nombre2 : %d, nombre2); … printf(Cest le nombre20 : %d, nombre20);

21-Jan JGA Beaulieu Concept des structures de données Même si couper et coller fonctionne, nous voulons être capable dexprimer la même chose en moins de lignes de code. Notre exemple avait seulement 20 nombres, maintenant imaginez que nous avons 20,000 integers!!! Nous voulons exploiter la puissance des boucles (itérations) Pour utiliser les itérations, nous avons besoin dun genre de structure qui nous donne une collection séquentielle dinformation: Le tableau! ( array )

21-Jan JGA Beaulieu Tableaux à une dimension Une séquence déléments de longueur fixe du même type Donc un tableau a un type, il a aussi un nom et un nombre déléments fixe Ce qui suit est une déclaration/définition pour trois tableaux dérivés des types standard : int scores [10]; char firstName [25]; float averages [12]; * C-99 introduit les tableaux de longueur variable. Nous nous limitons aux tableaux de longueur fixe

21-Jan JGA Beaulieu Tableaux à une dimension Si nous voulons utiliser la puissance des boucles pour itérer dans un tableau, nous avons besoin dune façon daccéder chaque élément. Pour ce faire on prend un index Un index est une expression integer. Les tableaux en C sont indexés à partir de zéro Le premier index est 0 et le dernier est sizeof(monTableau)-1 Ex. int monTableau[10] est indexé entre 0 et 9

21-Jan JGA Beaulieu Tableaux à une dimension Donc comment est-ce que C sait où le i ème élément se trouve? Le nom du tableau est une référence symbolique au premier octet du tableau: Cest une adresse Parce que tout les éléments dans un tableau sont du même type et dans une séquence, le compilateur peut calculer un offset à partir du début du tableau. Si vous utilisez un index qui est hors du tableau, le compilateur ne vous le dira pas!!!

21-Jan JGA Beaulieu Tableaux à une dimension - init Linitialisation dun tableau peut être fait au temps de la déclaration tout comme les variables. Il y a quelques façons de faire linitialisation: int nombres [5] = {1,6,9,12,321}; int nombres [] = {54,8,-2}; int nombres [5] = {3,8}; int nombres [5] ={0};

21-Jan JGA Beaulieu Tableaux à une dimension - init Accès aux éléments dun tableau: nombres [2] = 1; myInt = nombres[0]; Vous ne pouvez pas affecter tout un tableau à la fois, même si le type et la grandeur sont pareils Vous devez itérer au travers: for (i=0; i<5; i++) secondNum[i] = premierNum[i];

21-Jan JGA Beaulieu Indexes de tableaux MatLab les indexes commencent à 1comme en Basic et dautres langages En C cest 0 Tableau de 10 éléments en MatLab indexé nom(1), nom(2), …, nom(10) Tableau de 10 éléments en C indexé nom[0], nom[1], …, nom[9]

21-Jan JGA Beaulieu Tableaux et fonctions Vous pouvez passer un élément dans un tableau à nimporte quelle fonction, tant que le type de lélément est le même que celui du paramètre formel: float DivisePar3 (int monInt); … int nombres [5] = {7,9,14,20,323}; float resultaDeDivPar3 [5]; … for (i=0; i<5; i++) resultaDeDivPar3[i] = DivisePar3(nombres[i]);

21-Jan JGA Beaulieu Tableaux et fonctions Le dernier exemple utilise les valeurs du tableau nombres mais ces valeurs nont pas étés modifiées. Mais que ce passe-t-il si nous voulons traiter 20,000 valeurs; nous allons avoir à faire 20,000 appels de fonction!!! Il serait grandement plus efficace de passer les tableaux en paramètre à la fonction appelée et de la laisser modifier le tableau float directement

21-Jan JGA Beaulieu Tableaux et fonctions #define MAX_ELEMENTS 5 void DivisePar3 (int monInt[], float resDiv[], int grandeur); int main (void) { int nombres [MAX_ELEMENTS] = {7,9,14,20,323}; float resultaDeDivPar3 [MAX_ELEMENTS]; … DivisePar3(nombres, resultaDeDivPar3, MAX_ELEMENTS); //appel } //end main void DivisePar3 (int x[], float y[], int grandeur) { int i; for (i=0, i < grandeur,i++) //notez utilisation de grandeur y[i] = x[i] / 3; }

21-Jan JGA Beaulieu Tableaux à deux dimensions En mémoire, les valeur dans un tableau sont entreposées en séquence linéaire. Ceci est compréhensible parce que la mémoire, par définition, est une séquence doctets (un array) Cependant, plusieurs problèmes que nous voulons résoudre demandent que nous soyons capable de penser et dêtre capable de traiter les données comme étant à deux dimensions pour appliquer certains algorithmes : table ou matrice (rangées et colonnes)

21-Jan JGA Beaulieu Tableaux à deux dimensions En langage C, les matrices sont traités comme un tableau de tableaux. En math et dans plusieurs langages, si vous voulez accéder un élément dans un tableau 2-D, vous utilisez A(1,2) – rangée 1 colonne 2 En C vous utilisez A[3][2] – Troisième tableau, deuxième élément dans le tableau Vous déclarez un tableau 2-D comme ceci: int numTable [5][4]; //5 rangées 4 colonnes

21-Jan JGA Beaulieu Tableaux à deux dimensions Il y a quelques façons dinitialiser une matrice int numTable [2][3] = {2,5,8,1,9,11}; //bla! int numTable [2][3] = { {2,5,8}, {1,9,11} }; //préférée int numTable [][3] = { {2,5,8}, {1,9,11} }; //ne faites pas ça

21-Jan JGA Beaulieu Tableaux à deux dimensions Accès à un élément: numTable[i][j] = unInt; Passage de paramètres: Un élément par valeur void MaFonction(int unInt); … MaFonction(numTable[i][j]); //un élém par valeur Quand on passe un paramètre par valeur leffet est limité à la fonction qui est appelée

21-Jan JGA Beaulieu Tableaux à deux dimensions Passage de paramètres: Une rangée, par référence #define MAX_RANGÉES2 #define MAX_COLONNES3 void MaFonction(int rangéeDeInts[]); //déclaration int main(void) { int rangée; int numTable[2][3]; //init comme il y a deux slides for (rangée=0; rangée < MAX_RANGÉES; rangée++) MaFonction(numTable[rangée]); //1 rangée par ref } void MaFonction(int rangéeDeInts[]) //définition {énoncés… } //traite 1 rangée Effets trouvés aussi dans la fonction qui appèle

21-Jan JGA Beaulieu Tableaux à deux dimensions Passage de paramètre: Tableau entier (2-D) #define MAX_RANGÉES 2 #define MAX_COLONNES 3 void MaFonction(int tableDeInts[][MAX_COLONNES]); int main(void) { int rangée; int numTable[2][3]; //init est la même quavant MaFonction(numTable); //Tout le tableau } void MaFonction(int tableDeInts[][MAX_COLONNES]) {énoncés… //Traite tout le tableau }

21-Jan JGA Beaulieu Tableaux Multi dimensions Les tableaux multi dimensions sont une extension des tableaux 2-D. Ceci fonctionne pour les déclarations, initialisations et laccès aux valeurs La dimension de plus pour un tableau 3-D est appelée un plan. En C, on voit un tableau 3-D comme un tableau de tableaux de tableaux Ce concept est vrai pour les autres dimensions > 3

21-Jan JGA Beaulieu Quiz Time Que représentent les trois dimensions i, j et k pour un tableau 3-D A[i][j][k]