Vous êtes sur la page 1sur 2

ALGORITHMIQUE ET LANGAGE C – L1S2–MPI TD 5 – GROUPE D1

ROSELINE DESCOUT-RENIER JEUDI 06 MARS 2014

Objectifs de la séance :
• Déclaration et parcours de tableau à deux dimensions ;
• Conception d’algorithme sur un tableau à deux dimensions ;
• Révision de l’emploi des générations aléatoires.

Exercices étudiés pendant la séance : 6 TD3.

Conception de l’algorithme :
1. Taille du tableau :
Tableau de notes de taille N × M
Il faut ajouter une colonne pour les moyennes de chaque étudiant.
Il faut aussi ajouter une ligne pour les moyennes par matière.
→ allouer de la mémoire pour un tableau de taille (N+1) × (M+1)

Penser à définir les valeurs de N et M avant de déclarer le tableau (par un #define en début de code).

2. Parcours du tableau :
Une case du tableau est repérée par deux indices : i allant de 0 à N, j allant de 0 à M → tab[i][j]
Pour parcourir les notes des étudiants : i de 0 à N – 1 et j de 0 à M – 1.
→ deux boucles for imbriquées.
Génération aléatoire des notes, comprises entre 0 et 20 : commande rand()%21.

Pour faire le calcul d’une moyenne d’étudiant :


• déclarer une variable initialement nulle (ici ligne)
• parcourir le tableau ligne par ligne, puis case par case au sein d’une ligne
• ajouter à ligne la valeur de chaque case
• en fin de parcours (de 0 à M – 1), diviser par le nombre de notes, soit M.
• remplir la case (i, M) avec cette valeur de moyenne
• réinitialiser à 0 la valeur de ligne pour démarrer le calcul de la moyenne suivante.

Pour faire le calcul d’une moyenne de matière :


• même processus, mais pour une colonne
• parcourir le tableau colonne par colonne, puis case par case au sein d’une colonne

→ impossible de réaliser les deux processus au sein d’une même double boucle for.

3. Construction du code :
Deux possibilités :
• parcourir le tableau pour générer les notes, puis refaire des parcours calculer les moyennes par étudiant
(colonne M) et par matière (ligne N)
→ séparation des entrées et des traitements
• parcourir une première fois le tableau pour générer les notes (par exemple ligne par ligne) et calculer la
moyenne à placer en fin de ligne, puis parcourir une deuxième fois le tableau pour les moyennes par
matière.
→ diminution du nombre de boucles à coder

4. Affichage des moyennes :


Les moyennes se trouvant dans la dernière colonne et dans la dernière ligne, il n’y a qu’une boucle for à réaliser à
chaque fois :
• moyennes par étudiant : dernière colonne (indice i = M), j allant de 0 à N – 1
• moyennes par matière : dernière ligne (indice j = N), i allant de 0 à M – 1
Code :
#include <stdio.h>
#include <sys/types.h>
#include <time.h>

#define N 5
#define M 4

int main(void) {
/* Entrées */
int i, j, ligne, colonne;
int notes[N+1][M+1];

srand(time(0));

/* Génération du tableau de notes */


for (i = 0; i < N; i++) {
ligne = 0;
for (j = 0; j < M; j++) {
notes[i][j] = rand()%21;
ligne += notes[i][j];
}
notes[i][M] = ligne / M;
}

for (j = 0; j < M; j++) {


colonne = 0;
for (i = 0; i < N; i++) {
colonne += notes [i][j];
}
notes[N][j] = colonne / N;
}

/* Affichage des moyennes */


printf("\nMoyennes des étudiants :\n");
for (i = 0; i < N; i++) {
printf("%d ", notes[i][M]);
}

printf("\nMoyennes par matière :\n");


for (j = 0; j < M; j++) {
printf("%d ", notes[N][j]);
}

printf("\n");

return 0;
}