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 :
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 | #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..." ); } |