SlideShare une entreprise Scribd logo
1  sur  23
LES TABLEAUX: dans le langage c et l'algorithme
Présenté par: AYMANE EL FELLAH
AYOUB EL BHAITTI
LE PLAN:
I. Les tableau à une dimension:
 Déclaration et mémorisation
 Initialisation et réservation automatique
 Accès aux composantes
 Affichage et affectation
II. Les tableaux à deux dimensions:
 Déclaration et mémorisation
 Initialisation et réservation automatique
 Accès aux composantes
 Affichage et affectation
I. Les tableau à une dimension:
Définitions
• Un tableau (uni-dimensionnel) A est une variable structurée formée d'un nombre entier N de variables simples
du même type, qui sont appelées les composantes du tableau. Le nombre de composantes N est alors
la dimension du tableau.
A :
N COMPOSANTES
En faisant le rapprochement avec les mathématiques, on dit encore que "A est
un vecteur de dimension N".
. . . .
Déclaration et mémorisation
• Déclaration
Déclaration de tableaux en langage algorithmique
<TypeSimple> tableau <NomTableau>[<Dimension>]
Déclaration de tableaux en C
<TypeSimple> <NomTableau>[<Dimension>];
Exemples
• Les déclarations suivantes en langage algorithmique se laissent traduire en C par:
entier tableau A[25] int A[25]; ou bien long A[25]; ou bien…
réel tableau B[100] float B[100]; ou bien double B[100]; ou bien…
booléen tableau C[10] int C[10];
caractère tableau D[30] char D[30];
• Mémorisation
• En C, le nom d'un tableau est le représentant de l'adresse du premier élément du tableau. Les adresses des autres
composantes sont calculées (automatiquement) relativement à cette adresse.
Exemples
Exemple:
short A[5] = {1200, 2300, 3400, 4500, 5600};
Si un tableau est formé de N composantes et si une composante a besoin de M octets en mémoire, alors le
tableau occupera de N*M octets.
Initialisation et réservation automatique
• Initialisation
Lors de la déclaration d'un tableau, on peut initialiser les composantes du tableau, en indiquant la
liste des valeurs respectives entre accolades.
Exemple
Il faut évidemment veiller à ce que le nombre de valeurs dans la liste corresponde à la dimension du
tableau. Si la liste ne contient pas assez de valeurs pour toutes les composantes, les composantes restantes
sont initialisées par zéro.
int A[5] = {10, 20, 30, 40, 50};
float B[4] = {-1.05, 3.33, 87e-5, -12.3E4};
int C[10] = {1, 0, 0, 1, 1, 1, 0, 1, 0, 1};
• Réservation automatique
Si la dimension n'est pas indiquée explicitement lors de l'initialisation, alors l'ordinateur réserve
automatiquement le nombre d'octets nécessaires.
Exemples
int A[] = {10, 20, 30, 40, 50};
==> réservation de 5*sizeof(int) octets (dans notre cas: 10 octets)
float B[] = {-1.05, 3.33, 87e-5, -12.3E4};
==> réservation de 4*sizeof(float) octets (dans notre cas: 16 octets)
int C[] = {1, 0, 0, 1, 1, 1, 0, 1, 0, 1};
==> réservation de 10*sizeof(int) octets (dans notre cas: 20 octets)octets
Accès aux composantes
• En déclarant un tableau par:
nous avons défini un tableau A avec cinq composantes, auxquelles on peut accéder par:
Exemples
Exemple
MAX = (A[0]>A[1]) ? A[0] : A[1]; A[4] *= 2;
Attention !
Considérons un tableau T de dimension N:
En C,
- l'accès au premier élément du tableau se fait par T[0]
- l'accès au dernier élément du tableau se fait par T[N-1]
En langage algorithmique,
- l'accès au premier élément du tableau se fait par T[1]
- l'accès au dernier élément du tableau se fait par T[N]
:
int A[5];
A[0], A[1], ... , A[4]
Affichage et affectation
• La structure for se prête particulièrement bien au travail avec les tableaux. La plupart des applications se laissent implémenter par simple modification des exemples-
types de l'affichage et de l'affectation.
Affichage du contenu d'un tableau
• Traduisons le programme AFFICHER du langage algorithmique en C:
programme AFFICHER
| entier tableau A[5]
| entier I (* Compteur *)
| pour I variant de 1 à 5 faire
| écrire A[I] |
fpour
Fprogramme
main() {
int A[5];
int I; /* Compteur */
for (I=0; I<5; I++)
printf("%d ", A[I]);
return 0;
printf("n");
}
Remarques
* Avant de pouvoir afficher les composantes d'un tableau, il faut évidemment leur affecter des valeurs.
* Rappelez-vous que la deuxième condition dans la structure for n'est pas une condition d'arrêt, mais une
condition de répétition! Ainsi la commande d'affichage sera répétée aussi longtemps que I est inférieur à
5. La boucle sera donc bien exécutée pour les indices 0,1,2,3 et 4 !
* Par opposition à la commande simplifiée écrire A[I] du langage algorithmique, la
commande printf doit être informée du type exact des données à afficher. (Ici: %d ou %i pour des
valeurs du type int)
* Pour être sûr que les valeurs sont bien séparées lors de l'affichage, il faut inclure au moins un espace
dans la chaîne de format. Autres possibilités:
printf("%dt", A[I]); /* tabulateur */
printf("%7d", A[I]); /* format d'affichage */
• Affectation
- Affectation avec des valeurs provenant de l'extérieur
Traduisons le programme REMPLIR du langage algorithmique en C:
programme REMPLIR
| entier tableau A[5]
| entier I (* Compteur *)
| pour I variant de 1 à 5 faire
| lire A[I]
| fpour
fprogramme
main()
{
int A[5];
int I; /* Compteur */
for (I=0; I<5; I++)
scanf("%d", &A[I]);
return 0;
}
Remarques:
• Comme scanf a besoin des adresses des différentes
composantes du tableau, il faut faire précéder le terme
A[I] par l'opérateur adresse '&'.
• La commande de lecture scanf doit être informée du
type exact des données à lire. (Ici: %d ou %i pour lire des
valeurs du type int)
• Exercice 7.1
Ecrire un programme qui lit la dimension N d'un tableau T du type int (dimension maximale: 50 composantes),
remplit le tableau par des valeurs entrées au clavier et affiche le tableau.
Calculer et afficher ensuite la somme des éléments du tableau.
• Exercice 7.2
Ecrire un programme qui lit la dimension N d'un tableau T du type int (dimension maximale: 50 composantes),
remplit le tableau par des valeurs entrées au clavier et affiche le tableau.
Effacer ensuite toutes les occurrences de la valeur 0 dans le tableau T et tasser les éléments restants. Afficher le
tableau résultant.
• Exercice 7.3
Ecrire un programme qui lit la dimension N d'un tableau T du type int (dimension maximale: 50 composantes),
remplit le tableau par des valeurs entrées au clavier et affiche le tableau.
Copiez ensuite toutes les composantes strictement positives dans un deuxième tableau TPOS et toutes les
valeurs strictement négatives dans un troisième tableau TNEG. Afficher les tableaux TPOS et TNEG.
II.Les tableaux à deux dimensions:
Définitions
• En C, un tableau à deux dimensions A est à interpréter comme un tableau (uni-dimensionnel) de dimension L
dont chaque composante est un tableau (uni-dimensionnel) de dimension C.
• On appelle L le nombre de lignes du tableau et C le nombre de colonnes du tableau. L et C sont alors les
deux dimensions du tableau. Un tableau à deux dimensions contient donc L*C composantes.
• On dit qu'un tableau à deux dimensions est carré, si L est égal à C.
• En faisant le rapprochement avec les mathématiques, on peut dire que "A est un vecteur de L vecteurs de
dimension C", ou mieux:
• "A est une matrice de dimensions L et C".
Exemples:
• Considérons un tableau NOTES à une dimension pour mémoriser les notes de 20 élèves d'une classe dans un
devoir: int NOTE[20] = {45, 34, ... , 50, 48};
Pour mémoriser les notes des élèves dans les 10 devoirs d'un trimestre, nous pouvons rassembler plusieurs de
ces tableaux uni-dimensionnels dans un tableau NOTES à deux dimensions :
int NOTE[10][20] = {{45, 34, ... , 50, 48},
{39, 24, ... , 49, 45},
... ... ...
{40, 40, ... , 54, 44}};
Dans une ligne nous retrouvons les notes de tous les élèves dans un devoir. Dans une colonne, nous retrouvons toutes les notes d'un élève.
Déclaration et mémorisation
• Déclarations
Déclaration de tableaux à deux dimensions en lang. Algorithmique:
Déclaration de tableaux à deux dimensions en C:
Exemples
• Les déclarations suivantes en langage algorithmique, se laissent traduire en C par:
entier tableau A[10,10] int A[10,10]; ou bien long A[10,10];ou bien…
réel tableau B[2,20] float B[2,20];ou bien double B[2,20];ou bien…
booléen tableau C[3,3] int C[3,3];
caractère tableau D[15,40] char D[15,40];
<TypeSimple> tableau <NomTabl>[<DimLigne>,<DimCol>]
<TypeSimple> <NomTabl>[<DimLigne>][<DimCol>];
Mémorisation
• Comme pour les tableaux à une dimension, le nom d'un tableau est le représentant de l'adresse du premier
élément du tableau (c.-à-d. l'adresse de la première ligne du tableau). Les composantes d'un tableau à deux
dimensions sont stockées ligne par ligne dans la mémoire.
Exemple: Mémorisation d'un tableau à deux dimensions:
Un tableau de dimensions L et C, formé de composantes dont chacune a besoin de M octets, occupera L*C*M
octets en mémoire.
Exemple
En supposant qu'une variable du type double occupe 8 octets (c.-à-d.: sizeof(double)=8), pour le tableau T déclaré
par: double T[10][15];
C réservera L*C*M = 10*15*8 = 1200 octets en mémoire.
short A[3][2] = {{1, 2 },
{10, 20 },
{100, 200}};
Initialisation et réservation automatique
Initialisation
• Initialisation
• Lors de la déclaration d'un tableau, on peut initialiser les composantes du tableau, en indiquant la liste des
valeurs respectives entre accolades. A l'intérieur de la liste, les composantes de chaque ligne du tableau sont
encore une fois comprises entre accolades. Pour améliorer la lisibilité des programmes, on peut indiquer les
composantes dans plusieurs lignes.
Exemples
Lors de l'initialisation, les valeurs sont affectées ligne par ligne en passant de gauche à droite. Nous ne devons
pas nécessairement indiquer toutes les valeurs: Les valeurs manquantes seront initialisées par zéro. Il est
cependant défendu d'indiquer trop de valeurs pour un tableau.
int A[3][10] ={{ 0,10,20,30,40,50,60,70,80,90},
{10,11,12,13,14,15,16,17,18,19},
{ 1,12,23,34,45,56,67,78,89,90}};
float B[3][2] = {{-1.05, -1.10 },
{86e-5, 87e-5 },
{-12.5E4,-12.3E4}};
Réservation automatique:
• Si le nombre de lignes L n'est pas indiqué explicitement lors de l'initialisation, l'ordinateur réserve
automatiquement le nombre d'octets nécessaires.
int A[3][10] ={{ 0,10,20,30,40,50,60,70,80,90},
{10,11,12,13,14,15,16,17,18,19},
{ 1,12,23,34,45,56,67,78,89,90}};
réservation de 3*10*2 = 60 octets
float B[3][2] = {{-1.05, -1.10 },
{86e-5, 87e-5 },
{-12.5E4,-12.3E4}};
réservation de 3*2*4 = 24 octets
Exemple
Accès aux composantes
• Accès à un tableau à deux dimensions en lang. Algorithmique
• Accès à un tableau à deux dimensions en C
• Les éléments d'un tableau de dimensions L et C se présentent de la façon suivante:
<NomTableau>[<Ligne>, <Colonne>]
<NomTableau>[<Ligne>][<Colonne>]
/ 
| A[0][0] A[0][1] A[0][2] . . . A[0][C-1]|
| A[1][0] A[1][1] A[1][2] . . . A[1][C-1] |
| A[2][0] A[2][1] A[2][2] . . . A[2][C-1] |
| . . . . . . . . . . . . . . . |
| A[L-1][0] A[L-1][1] A[L-1][2] . . . A[L-1][C-1] |
 /
Attention !
Attention !
Considérons un tableau A de dimensions L et C.
En C,
- les indices du tableau varient de 0 à L-1, respectivement de 0 à C-1.
- la composante de la Nième ligne et Mième colonne est notée:
A[N-1][M-1]
En langage algorithmique,
- les indices du tableau varient de 1 à L, respectivement de 1 à C.
- la composante de la Nième ligne et Mième colonne est notée: A[N,M]
Affichage et affectation
• Lors du travail avec les tableaux à deux dimensions, nous utiliserons deux indices (p.ex: I et J), et la structure for, souvent imbriquée, pour parcourir les lignes
et les colonnes des tableaux.
- Affichage du contenu d'un tableau à deux dimensions
Traduisons le programme AFFICHER du langage algorithmique en C:
programme AFFICHER
| entier tableau A[5,10]
| entier I,J
| (* Pour chaque ligne ... *)
| pour I variant de 1 à 5 faire
| (* ... considérer chaque composante *)
| pour J variant de 1 à 10 faire
| écrire A[I,J]
| fpour
| (* Retour à la ligne *)
| écrire
| fpour
fprogramme
main()
{
int A[5][10];
int I,J;
/* Pour chaque ligne ... */
for (I=0; I<5; I++)
{
/* ... considérer chaque composante */
for (J=0; J<10; J++)
printf("%7d", A[I][J]);
/* Retour à la ligne */
printf("n");
}
return 0;
• Remarques
* Avant de pouvoir afficher les composantes d'un tableau, il faut leur affecter des valeurs.
* Pour obtenir des colonnes bien alignées lors de l'affichage, il est pratique d'indiquer la largeur minimale de l'affichage dans la
chaîne de format. Pour afficher des matrices du type int (valeur la plus 'longue': -32768),nous pouvons utiliser la chaîne de format
printf("%7d", A[I][J]);
Affectation avec des valeurs provenant de l'extérieur
Traduisons le programme REMPLIR du langage algorithmique en C:
programme REMPLIR
| entier tableau A[5,10]
| entier I,J
| (* Pour chaque ligne ... *)
| pour I variant de 1 à 5 faire
| (* ... considérer chaque composante *)
| pour J variant de 1 à 10 faire
| lire A[I,J]
| fpour
| fpour
fprogramme
"%7d"
main()
{
int A[5][10];
int I,J;
/* Pour chaque ligne ... */
for (I=0; I<5; I++)
/* ... considérer chaque composante */
for (J=0; J<10; J++)
scanf("%d", &A[I][J]);
return 0;
}
Exercice 7.5
Ecrire un programme qui lit les dimensions L et C d'un tableau T à deux dimensions du type int (dimensions
maximales: 50 lignes et 50 colonnes). Remplir le tableau par des valeurs entrées au clavier et afficher le tableau ainsi
que la somme de tous ses éléments.
Exercice 7.6
Ecrire un programme qui lit les dimensions L et C d'un tableau T à deux dimensions du type int (dimensions
maximales: 50 lignes et 50 colonnes). Remplir le tableau par des valeurs entrées au clavier et afficher le tableau ainsi
que la somme de chaque ligne et de chaque colonne en n'utilisant qu'une variable d'aide pour la somme.

Contenu connexe

Tendances

Coursalgorithmique
CoursalgorithmiqueCoursalgorithmique
Coursalgorithmique
nicodeff
 
Ch8 correction exercices (1)
Ch8 correction exercices (1)Ch8 correction exercices (1)
Ch8 correction exercices (1)
abdellah12
 
exercices-corriges-dalgorithmique
exercices-corriges-dalgorithmiqueexercices-corriges-dalgorithmique
exercices-corriges-dalgorithmique
fast xp
 
exercices en C
exercices en Cexercices en C
exercices en C
coursuniv
 
Tdi e passage_pratique_2012_v1
Tdi e passage_pratique_2012_v1Tdi e passage_pratique_2012_v1
Tdi e passage_pratique_2012_v1
Issam Lahbib
 
Sujets de preparation bac tp (sayari)
Sujets de preparation bac tp (sayari)Sujets de preparation bac tp (sayari)
Sujets de preparation bac tp (sayari)
mohamed_SAYARI
 

Tendances (20)

algorithme tronc commun lycée
algorithme tronc commun lycéealgorithme tronc commun lycée
algorithme tronc commun lycée
 
Coursalgorithmique
CoursalgorithmiqueCoursalgorithmique
Coursalgorithmique
 
Ch8 correction exercices (1)
Ch8 correction exercices (1)Ch8 correction exercices (1)
Ch8 correction exercices (1)
 
exercices-corriges-dalgorithmique
exercices-corriges-dalgorithmiqueexercices-corriges-dalgorithmique
exercices-corriges-dalgorithmique
 
Les enregistrements
Les enregistrements Les enregistrements
Les enregistrements
 
Chapitre3 tableauxcpp
Chapitre3 tableauxcppChapitre3 tableauxcpp
Chapitre3 tableauxcpp
 
01 correction-td smia-s2-info2
01 correction-td smia-s2-info201 correction-td smia-s2-info2
01 correction-td smia-s2-info2
 
exercices en C
exercices en Cexercices en C
exercices en C
 
Exo algo
Exo algoExo algo
Exo algo
 
Chapitre 02 : Variables, Expressions et Instructions
Chapitre 02 : Variables, Expressions et InstructionsChapitre 02 : Variables, Expressions et Instructions
Chapitre 02 : Variables, Expressions et Instructions
 
02 correction-td smi-s3-algo2
02 correction-td smi-s3-algo202 correction-td smi-s3-algo2
02 correction-td smi-s3-algo2
 
Tdi e passage_pratique_2012_v1
Tdi e passage_pratique_2012_v1Tdi e passage_pratique_2012_v1
Tdi e passage_pratique_2012_v1
 
Travaux dirigés 1: algorithme & structures de données
Travaux dirigés 1: algorithme & structures de donnéesTravaux dirigés 1: algorithme & structures de données
Travaux dirigés 1: algorithme & structures de données
 
Bac info 2000-2015 (Tunisie)
Bac info 2000-2015 (Tunisie)Bac info 2000-2015 (Tunisie)
Bac info 2000-2015 (Tunisie)
 
Travaux dirigés 1: algorithme & structures de données (corrigés)
Travaux dirigés 1: algorithme & structures de données (corrigés)Travaux dirigés 1: algorithme & structures de données (corrigés)
Travaux dirigés 1: algorithme & structures de données (corrigés)
 
Algorithmique
AlgorithmiqueAlgorithmique
Algorithmique
 
Algorithmique
AlgorithmiqueAlgorithmique
Algorithmique
 
Algorithme & structures de données Chap III
Algorithme & structures de données Chap IIIAlgorithme & structures de données Chap III
Algorithme & structures de données Chap III
 
Exercices en turbo pascal sur les nombres
Exercices en turbo pascal sur les nombresExercices en turbo pascal sur les nombres
Exercices en turbo pascal sur les nombres
 
Sujets de preparation bac tp (sayari)
Sujets de preparation bac tp (sayari)Sujets de preparation bac tp (sayari)
Sujets de preparation bac tp (sayari)
 

Similaire à LES TABLEAUX: dans le langage c et l'algorithme

Rappel_Structure programmatio. 2 smi.ppté
Rappel_Structure programmatio.  2 smi.pptéRappel_Structure programmatio.  2 smi.ppté
Rappel_Structure programmatio. 2 smi.ppté
JihadKhalili
 
coursexcel2016ddes cours en excel bien detailler pour une meilleur comprehens...
coursexcel2016ddes cours en excel bien detailler pour une meilleur comprehens...coursexcel2016ddes cours en excel bien detailler pour une meilleur comprehens...
coursexcel2016ddes cours en excel bien detailler pour une meilleur comprehens...
Ablaye2
 

Similaire à LES TABLEAUX: dans le langage c et l'algorithme (20)

Ch5-les tableaux et les pointeurs.pdf
Ch5-les tableaux et les pointeurs.pdfCh5-les tableaux et les pointeurs.pdf
Ch5-les tableaux et les pointeurs.pdf
 
Chapitre3TableauxEnCppV2019
Chapitre3TableauxEnCppV2019Chapitre3TableauxEnCppV2019
Chapitre3TableauxEnCppV2019
 
Chapitre 8 - Les tableaux et les pointeurs.pdf
Chapitre 8 - Les tableaux et les pointeurs.pdfChapitre 8 - Les tableaux et les pointeurs.pdf
Chapitre 8 - Les tableaux et les pointeurs.pdf
 
Cours Algorithme: Tableau
Cours Algorithme: TableauCours Algorithme: Tableau
Cours Algorithme: Tableau
 
eExercices corrigesdivers
eExercices corrigesdiverseExercices corrigesdivers
eExercices corrigesdivers
 
Excel ppt.ppt
Excel ppt.pptExcel ppt.ppt
Excel ppt.ppt
 
Les tableaux en Java
Les tableaux en JavaLes tableaux en Java
Les tableaux en Java
 
Corrige iscae informatique 2017 CPGE ECT
Corrige iscae informatique 2017 CPGE ECTCorrige iscae informatique 2017 CPGE ECT
Corrige iscae informatique 2017 CPGE ECT
 
Tableau a deux dimensions (1).pptx
Tableau a deux dimensions (1).pptxTableau a deux dimensions (1).pptx
Tableau a deux dimensions (1).pptx
 
POO-chapitre6.pptx
POO-chapitre6.pptxPOO-chapitre6.pptx
POO-chapitre6.pptx
 
Rappel_Structure programmatio. 2 smi.ppté
Rappel_Structure programmatio.  2 smi.pptéRappel_Structure programmatio.  2 smi.ppté
Rappel_Structure programmatio. 2 smi.ppté
 
coursexcel2016ddes cours en excel bien detailler pour une meilleur comprehens...
coursexcel2016ddes cours en excel bien detailler pour une meilleur comprehens...coursexcel2016ddes cours en excel bien detailler pour une meilleur comprehens...
coursexcel2016ddes cours en excel bien detailler pour une meilleur comprehens...
 
Chap 1 Initiation.pptx
Chap 1 Initiation.pptxChap 1 Initiation.pptx
Chap 1 Initiation.pptx
 
Initiation r
Initiation rInitiation r
Initiation r
 
Chapitre 1 rappel
Chapitre 1 rappelChapitre 1 rappel
Chapitre 1 rappel
 
langage C++
langage C++langage C++
langage C++
 
resume algo 2023.pdf
resume algo 2023.pdfresume algo 2023.pdf
resume algo 2023.pdf
 
TABLEUR Excel
TABLEUR ExcelTABLEUR Excel
TABLEUR Excel
 
Ch2-Notions de base & actions élémentaires.pdf
Ch2-Notions de base & actions élémentaires.pdfCh2-Notions de base & actions élémentaires.pdf
Ch2-Notions de base & actions élémentaires.pdf
 
Tp1 matlab
Tp1 matlab Tp1 matlab
Tp1 matlab
 

Dernier

Dernier (6)

rapport de stage Organisme d’accueil Centre National d'Etudes & de Recherche...
rapport de stage Organisme d’accueil  Centre National d'Etudes & de Recherche...rapport de stage Organisme d’accueil  Centre National d'Etudes & de Recherche...
rapport de stage Organisme d’accueil Centre National d'Etudes & de Recherche...
 
La constellation d'Andromède.présentation.pptx
La constellation d'Andromède.présentation.pptxLa constellation d'Andromède.présentation.pptx
La constellation d'Andromède.présentation.pptx
 
La face cachée des jeux vidéo - Conférence de 15/05 2024
La face cachée des jeux vidéo - Conférence de 15/05 2024La face cachée des jeux vidéo - Conférence de 15/05 2024
La face cachée des jeux vidéo - Conférence de 15/05 2024
 
Intervention dans le cadre de la journée SOUND du 26 avril 2024
Intervention dans le cadre de la journée SOUND du 26 avril 2024Intervention dans le cadre de la journée SOUND du 26 avril 2024
Intervention dans le cadre de la journée SOUND du 26 avril 2024
 
MÉMOIRE DE MASTER EN DIAGNOSTIC DES SYSTÈMES ÉNERGÉTIQUES
MÉMOIRE DE MASTER EN DIAGNOSTIC DES SYSTÈMES ÉNERGÉTIQUESMÉMOIRE DE MASTER EN DIAGNOSTIC DES SYSTÈMES ÉNERGÉTIQUES
MÉMOIRE DE MASTER EN DIAGNOSTIC DES SYSTÈMES ÉNERGÉTIQUES
 
RAPPORT PFE Projet urbain: -«El-Hamma d'un quartier à une ville» -«La créat...
RAPPORT  PFE Projet urbain: -«El-Hamma d'un quartier à une ville»  -«La créat...RAPPORT  PFE Projet urbain: -«El-Hamma d'un quartier à une ville»  -«La créat...
RAPPORT PFE Projet urbain: -«El-Hamma d'un quartier à une ville» -«La créat...
 

LES TABLEAUX: dans le langage c et l'algorithme

  • 1. LES TABLEAUX: dans le langage c et l'algorithme Présenté par: AYMANE EL FELLAH AYOUB EL BHAITTI
  • 2. LE PLAN: I. Les tableau à une dimension:  Déclaration et mémorisation  Initialisation et réservation automatique  Accès aux composantes  Affichage et affectation II. Les tableaux à deux dimensions:  Déclaration et mémorisation  Initialisation et réservation automatique  Accès aux composantes  Affichage et affectation
  • 3. I. Les tableau à une dimension: Définitions • Un tableau (uni-dimensionnel) A est une variable structurée formée d'un nombre entier N de variables simples du même type, qui sont appelées les composantes du tableau. Le nombre de composantes N est alors la dimension du tableau. A : N COMPOSANTES En faisant le rapprochement avec les mathématiques, on dit encore que "A est un vecteur de dimension N". . . . .
  • 4. Déclaration et mémorisation • Déclaration Déclaration de tableaux en langage algorithmique <TypeSimple> tableau <NomTableau>[<Dimension>] Déclaration de tableaux en C <TypeSimple> <NomTableau>[<Dimension>]; Exemples • Les déclarations suivantes en langage algorithmique se laissent traduire en C par: entier tableau A[25] int A[25]; ou bien long A[25]; ou bien… réel tableau B[100] float B[100]; ou bien double B[100]; ou bien… booléen tableau C[10] int C[10]; caractère tableau D[30] char D[30];
  • 5. • Mémorisation • En C, le nom d'un tableau est le représentant de l'adresse du premier élément du tableau. Les adresses des autres composantes sont calculées (automatiquement) relativement à cette adresse. Exemples Exemple: short A[5] = {1200, 2300, 3400, 4500, 5600}; Si un tableau est formé de N composantes et si une composante a besoin de M octets en mémoire, alors le tableau occupera de N*M octets.
  • 6. Initialisation et réservation automatique • Initialisation Lors de la déclaration d'un tableau, on peut initialiser les composantes du tableau, en indiquant la liste des valeurs respectives entre accolades. Exemple Il faut évidemment veiller à ce que le nombre de valeurs dans la liste corresponde à la dimension du tableau. Si la liste ne contient pas assez de valeurs pour toutes les composantes, les composantes restantes sont initialisées par zéro. int A[5] = {10, 20, 30, 40, 50}; float B[4] = {-1.05, 3.33, 87e-5, -12.3E4}; int C[10] = {1, 0, 0, 1, 1, 1, 0, 1, 0, 1};
  • 7. • Réservation automatique Si la dimension n'est pas indiquée explicitement lors de l'initialisation, alors l'ordinateur réserve automatiquement le nombre d'octets nécessaires. Exemples int A[] = {10, 20, 30, 40, 50}; ==> réservation de 5*sizeof(int) octets (dans notre cas: 10 octets) float B[] = {-1.05, 3.33, 87e-5, -12.3E4}; ==> réservation de 4*sizeof(float) octets (dans notre cas: 16 octets) int C[] = {1, 0, 0, 1, 1, 1, 0, 1, 0, 1}; ==> réservation de 10*sizeof(int) octets (dans notre cas: 20 octets)octets
  • 8. Accès aux composantes • En déclarant un tableau par: nous avons défini un tableau A avec cinq composantes, auxquelles on peut accéder par: Exemples Exemple MAX = (A[0]>A[1]) ? A[0] : A[1]; A[4] *= 2; Attention ! Considérons un tableau T de dimension N: En C, - l'accès au premier élément du tableau se fait par T[0] - l'accès au dernier élément du tableau se fait par T[N-1] En langage algorithmique, - l'accès au premier élément du tableau se fait par T[1] - l'accès au dernier élément du tableau se fait par T[N] : int A[5]; A[0], A[1], ... , A[4]
  • 9. Affichage et affectation • La structure for se prête particulièrement bien au travail avec les tableaux. La plupart des applications se laissent implémenter par simple modification des exemples- types de l'affichage et de l'affectation. Affichage du contenu d'un tableau • Traduisons le programme AFFICHER du langage algorithmique en C: programme AFFICHER | entier tableau A[5] | entier I (* Compteur *) | pour I variant de 1 à 5 faire | écrire A[I] | fpour Fprogramme main() { int A[5]; int I; /* Compteur */ for (I=0; I<5; I++) printf("%d ", A[I]); return 0; printf("n"); }
  • 10. Remarques * Avant de pouvoir afficher les composantes d'un tableau, il faut évidemment leur affecter des valeurs. * Rappelez-vous que la deuxième condition dans la structure for n'est pas une condition d'arrêt, mais une condition de répétition! Ainsi la commande d'affichage sera répétée aussi longtemps que I est inférieur à 5. La boucle sera donc bien exécutée pour les indices 0,1,2,3 et 4 ! * Par opposition à la commande simplifiée écrire A[I] du langage algorithmique, la commande printf doit être informée du type exact des données à afficher. (Ici: %d ou %i pour des valeurs du type int) * Pour être sûr que les valeurs sont bien séparées lors de l'affichage, il faut inclure au moins un espace dans la chaîne de format. Autres possibilités: printf("%dt", A[I]); /* tabulateur */ printf("%7d", A[I]); /* format d'affichage */
  • 11. • Affectation - Affectation avec des valeurs provenant de l'extérieur Traduisons le programme REMPLIR du langage algorithmique en C: programme REMPLIR | entier tableau A[5] | entier I (* Compteur *) | pour I variant de 1 à 5 faire | lire A[I] | fpour fprogramme main() { int A[5]; int I; /* Compteur */ for (I=0; I<5; I++) scanf("%d", &A[I]); return 0; } Remarques: • Comme scanf a besoin des adresses des différentes composantes du tableau, il faut faire précéder le terme A[I] par l'opérateur adresse '&'. • La commande de lecture scanf doit être informée du type exact des données à lire. (Ici: %d ou %i pour lire des valeurs du type int)
  • 12. • Exercice 7.1 Ecrire un programme qui lit la dimension N d'un tableau T du type int (dimension maximale: 50 composantes), remplit le tableau par des valeurs entrées au clavier et affiche le tableau. Calculer et afficher ensuite la somme des éléments du tableau. • Exercice 7.2 Ecrire un programme qui lit la dimension N d'un tableau T du type int (dimension maximale: 50 composantes), remplit le tableau par des valeurs entrées au clavier et affiche le tableau. Effacer ensuite toutes les occurrences de la valeur 0 dans le tableau T et tasser les éléments restants. Afficher le tableau résultant. • Exercice 7.3 Ecrire un programme qui lit la dimension N d'un tableau T du type int (dimension maximale: 50 composantes), remplit le tableau par des valeurs entrées au clavier et affiche le tableau. Copiez ensuite toutes les composantes strictement positives dans un deuxième tableau TPOS et toutes les valeurs strictement négatives dans un troisième tableau TNEG. Afficher les tableaux TPOS et TNEG.
  • 13. II.Les tableaux à deux dimensions: Définitions • En C, un tableau à deux dimensions A est à interpréter comme un tableau (uni-dimensionnel) de dimension L dont chaque composante est un tableau (uni-dimensionnel) de dimension C. • On appelle L le nombre de lignes du tableau et C le nombre de colonnes du tableau. L et C sont alors les deux dimensions du tableau. Un tableau à deux dimensions contient donc L*C composantes. • On dit qu'un tableau à deux dimensions est carré, si L est égal à C. • En faisant le rapprochement avec les mathématiques, on peut dire que "A est un vecteur de L vecteurs de dimension C", ou mieux: • "A est une matrice de dimensions L et C".
  • 14. Exemples: • Considérons un tableau NOTES à une dimension pour mémoriser les notes de 20 élèves d'une classe dans un devoir: int NOTE[20] = {45, 34, ... , 50, 48}; Pour mémoriser les notes des élèves dans les 10 devoirs d'un trimestre, nous pouvons rassembler plusieurs de ces tableaux uni-dimensionnels dans un tableau NOTES à deux dimensions : int NOTE[10][20] = {{45, 34, ... , 50, 48}, {39, 24, ... , 49, 45}, ... ... ... {40, 40, ... , 54, 44}}; Dans une ligne nous retrouvons les notes de tous les élèves dans un devoir. Dans une colonne, nous retrouvons toutes les notes d'un élève.
  • 15. Déclaration et mémorisation • Déclarations Déclaration de tableaux à deux dimensions en lang. Algorithmique: Déclaration de tableaux à deux dimensions en C: Exemples • Les déclarations suivantes en langage algorithmique, se laissent traduire en C par: entier tableau A[10,10] int A[10,10]; ou bien long A[10,10];ou bien… réel tableau B[2,20] float B[2,20];ou bien double B[2,20];ou bien… booléen tableau C[3,3] int C[3,3]; caractère tableau D[15,40] char D[15,40]; <TypeSimple> tableau <NomTabl>[<DimLigne>,<DimCol>] <TypeSimple> <NomTabl>[<DimLigne>][<DimCol>];
  • 16. Mémorisation • Comme pour les tableaux à une dimension, le nom d'un tableau est le représentant de l'adresse du premier élément du tableau (c.-à-d. l'adresse de la première ligne du tableau). Les composantes d'un tableau à deux dimensions sont stockées ligne par ligne dans la mémoire. Exemple: Mémorisation d'un tableau à deux dimensions: Un tableau de dimensions L et C, formé de composantes dont chacune a besoin de M octets, occupera L*C*M octets en mémoire. Exemple En supposant qu'une variable du type double occupe 8 octets (c.-à-d.: sizeof(double)=8), pour le tableau T déclaré par: double T[10][15]; C réservera L*C*M = 10*15*8 = 1200 octets en mémoire. short A[3][2] = {{1, 2 }, {10, 20 }, {100, 200}};
  • 17. Initialisation et réservation automatique Initialisation • Initialisation • Lors de la déclaration d'un tableau, on peut initialiser les composantes du tableau, en indiquant la liste des valeurs respectives entre accolades. A l'intérieur de la liste, les composantes de chaque ligne du tableau sont encore une fois comprises entre accolades. Pour améliorer la lisibilité des programmes, on peut indiquer les composantes dans plusieurs lignes. Exemples Lors de l'initialisation, les valeurs sont affectées ligne par ligne en passant de gauche à droite. Nous ne devons pas nécessairement indiquer toutes les valeurs: Les valeurs manquantes seront initialisées par zéro. Il est cependant défendu d'indiquer trop de valeurs pour un tableau. int A[3][10] ={{ 0,10,20,30,40,50,60,70,80,90}, {10,11,12,13,14,15,16,17,18,19}, { 1,12,23,34,45,56,67,78,89,90}}; float B[3][2] = {{-1.05, -1.10 }, {86e-5, 87e-5 }, {-12.5E4,-12.3E4}};
  • 18. Réservation automatique: • Si le nombre de lignes L n'est pas indiqué explicitement lors de l'initialisation, l'ordinateur réserve automatiquement le nombre d'octets nécessaires. int A[3][10] ={{ 0,10,20,30,40,50,60,70,80,90}, {10,11,12,13,14,15,16,17,18,19}, { 1,12,23,34,45,56,67,78,89,90}}; réservation de 3*10*2 = 60 octets float B[3][2] = {{-1.05, -1.10 }, {86e-5, 87e-5 }, {-12.5E4,-12.3E4}}; réservation de 3*2*4 = 24 octets Exemple
  • 19. Accès aux composantes • Accès à un tableau à deux dimensions en lang. Algorithmique • Accès à un tableau à deux dimensions en C • Les éléments d'un tableau de dimensions L et C se présentent de la façon suivante: <NomTableau>[<Ligne>, <Colonne>] <NomTableau>[<Ligne>][<Colonne>] / | A[0][0] A[0][1] A[0][2] . . . A[0][C-1]| | A[1][0] A[1][1] A[1][2] . . . A[1][C-1] | | A[2][0] A[2][1] A[2][2] . . . A[2][C-1] | | . . . . . . . . . . . . . . . | | A[L-1][0] A[L-1][1] A[L-1][2] . . . A[L-1][C-1] | / Attention ! Attention ! Considérons un tableau A de dimensions L et C. En C, - les indices du tableau varient de 0 à L-1, respectivement de 0 à C-1. - la composante de la Nième ligne et Mième colonne est notée: A[N-1][M-1] En langage algorithmique, - les indices du tableau varient de 1 à L, respectivement de 1 à C. - la composante de la Nième ligne et Mième colonne est notée: A[N,M]
  • 20. Affichage et affectation • Lors du travail avec les tableaux à deux dimensions, nous utiliserons deux indices (p.ex: I et J), et la structure for, souvent imbriquée, pour parcourir les lignes et les colonnes des tableaux. - Affichage du contenu d'un tableau à deux dimensions Traduisons le programme AFFICHER du langage algorithmique en C: programme AFFICHER | entier tableau A[5,10] | entier I,J | (* Pour chaque ligne ... *) | pour I variant de 1 à 5 faire | (* ... considérer chaque composante *) | pour J variant de 1 à 10 faire | écrire A[I,J] | fpour | (* Retour à la ligne *) | écrire | fpour fprogramme
  • 21. main() { int A[5][10]; int I,J; /* Pour chaque ligne ... */ for (I=0; I<5; I++) { /* ... considérer chaque composante */ for (J=0; J<10; J++) printf("%7d", A[I][J]); /* Retour à la ligne */ printf("n"); } return 0;
  • 22. • Remarques * Avant de pouvoir afficher les composantes d'un tableau, il faut leur affecter des valeurs. * Pour obtenir des colonnes bien alignées lors de l'affichage, il est pratique d'indiquer la largeur minimale de l'affichage dans la chaîne de format. Pour afficher des matrices du type int (valeur la plus 'longue': -32768),nous pouvons utiliser la chaîne de format printf("%7d", A[I][J]); Affectation avec des valeurs provenant de l'extérieur Traduisons le programme REMPLIR du langage algorithmique en C: programme REMPLIR | entier tableau A[5,10] | entier I,J | (* Pour chaque ligne ... *) | pour I variant de 1 à 5 faire | (* ... considérer chaque composante *) | pour J variant de 1 à 10 faire | lire A[I,J] | fpour | fpour fprogramme "%7d"
  • 23. main() { int A[5][10]; int I,J; /* Pour chaque ligne ... */ for (I=0; I<5; I++) /* ... considérer chaque composante */ for (J=0; J<10; J++) scanf("%d", &A[I][J]); return 0; } Exercice 7.5 Ecrire un programme qui lit les dimensions L et C d'un tableau T à deux dimensions du type int (dimensions maximales: 50 lignes et 50 colonnes). Remplir le tableau par des valeurs entrées au clavier et afficher le tableau ainsi que la somme de tous ses éléments. Exercice 7.6 Ecrire un programme qui lit les dimensions L et C d'un tableau T à deux dimensions du type int (dimensions maximales: 50 lignes et 50 colonnes). Remplir le tableau par des valeurs entrées au clavier et afficher le tableau ainsi que la somme de chaque ligne et de chaque colonne en n'utilisant qu'une variable d'aide pour la somme.