Exercice langage C : Un programme qui affiche un tableau rectangulaire U de nombres flottants
Rédigé par BENKIRANE Fatima Ezzahra, Publié le 25 Février 2012, Mise à jour le Lundi, 07 Novembre 2022 13:38Travail à Faire :
Écrivez un programme qui affiche un tableau rectangulaire U de nombres flottants, comme ceci :
1.0 2.0 3.0 4.5 | 10.5
5.0 6.0 7.5 8.0 | 26.5
9.0 10.2 11.3 12.0 | 42.5
--------------------------------------------------
15.0 18.2 21.8 24.5 | 79.5
La dernière colonne est faite des sommes des lignes, la dernière ligne des sommes de colonnes. Le nombre de lignes et le nombre de colonnes de U sont connus à l’avance.
Au début, U est entièrement fait de zéros. Ensuite, votre programme doit répéter indéfiniment les opérations suivantes :
• lecture de trois nombres v, w et ? (v, w entiers, ? flottant). Convention : v négatif indiquera la fin du programme ;
• remplacement de la valeur courante de Uv w par ? et mise à jour des sommes correspondantes.
Il s'agit de réaliser une sorte d'ancêtre (très éloigné) d'un tableur comme Excel.
En première analyse on peut penser que ce problème va nous obliger à parcourir intégralement les lignes et les colonnes d'un tableau rectangulaire (ou matrice) en additionnant les coefficients. En réalité il n'y en a aucun besoin, puisque le tableau est construit de proche en proche, en ne changeant qu'un coefficient à la fois et à partir d'une matrice entièrement faire de zéros.
Il suffira, à chaque lecture d'un coefficient, de mettre à jour la somme de la ligne correspondante, celle de la colonne et la somme générale. Cela ne demande aucun parcours.
Voici notre programme, en supposant que 3 lignes et 4 colonnes sont souhaitées :
#include
#define NL 3
#define NC 4
float t[NL + 1][NC + 1], x;
int i, j, k;
main() {
for (i 0; i NL; i++)
for (j 0; j NC; j++)
t[i][j] 0;
for (;;) {
/* affichage du tableau */
for (i 0; i NL; i++) {
for (j 0; j NC; j++)
printf("%8.2f ", t[i][j]);
printf("|%8.2f\n", t[i][NC]);
}
for (j 0; j NC; j++)
printf("---------");
printf("+--------\n");
for (j 0; j NC; j++)
printf("%8.2f ", t[NL][j]);
printf("|%8.2f\n", t[NL][NC]);
/* lecture d'un coefficient */
printf("\ni j x ? ");
scanf("%d", &i);
if (i 0)
break;
scanf("%d%f", &j, &x);
/* mise à jour du tableau et des sommes */
t[i][NC] t[i][NC] - t[i][j] + x;
t[NL][j] t[NL][j] - t[i][j] + x;
t[NL][NC] t[NL][NC] - t[i][j] + x;
t[i][j] x;
}
printf("Au revoir...");
}