Énoncé
Saisir N avec 1 ≤ N ≤ 20, puis remplir une matrice carrée M de N lignes et N colonnes d’entiers. Calculer séparément les sommes des diagonales principale et secondaire et les afficher. Utiliser Saisir, Remplir, Calculer et Afficher.
Exemples et cas limites
Saisissez ces valeurs dans la console pour vérifier votre résultat :
Saisir N, puis les N × N entiers de M, ligne par ligne. Les exemples ne fixent pas les valeurs de votre matrice.
Entrée
N = 3 m[0,0] = 1 m[0,1] = 2 m[0,2] = 3 m[1,0] = 4 m[1,1] = 5 m[1,2] = 6 m[2,0] = 7 m[2,1] = 8 m[2,2] = 9
Sortie attendue
15 15
Entrée
N = 2 m[0,0] = 1 m[0,1] = 2 m[1,0] = 4 m[1,1] = 8
Sortie attendue
9 6
Entrée
N = 1 m[0,0] = -4
Sortie attendue
-4 -4
Complétez les modules marqués par un commentaire dans le code de départ. Les modules déjà écrits permettent de saisir vos données. Exécutez les cas de test et comparez la sortie attendue, ou ouvrez directement l’onglet Correction.
Code algorithmique
| 1 | algorithme diagonales_matrice |
| 2 | debut |
| 3 | saisir(n) |
| 4 | remplir(m, n, n) |
| 5 | calculer(m, n, principale, secondaire) |
| 6 | afficher(principale, secondaire) |
| 7 | fin |
| 8 | |
| 9 | procedure saisir(@n : entier) |
| 10 | debut |
| 11 | repeter |
| 12 | ecrire("N = ") |
| 13 | lire(n) |
| 14 | jusqua 1 ≤ n ≤ 20 |
| 15 | fin |
| 16 | |
| 17 | procedure remplir(@m : mat, l : entier, c : entier) |
| 18 | debut |
| 19 | pour i de 0 à l - 1 faire |
| 20 | pour j de 0 à c - 1 faire |
| 21 | ecrire("m[" + convch(i) + "," + convch(j) + "] = ") |
| 22 | lire(m[i,j]) |
| 23 | fin_pour |
| 24 | fin_pour |
| 25 | fin |
| 26 | |
| 27 | procedure calculer(m : mat, n : entier, @principale : entier, @secondaire : entier) |
| 28 | debut |
| 29 | // compléter le traitement demandé dans l’énoncé. |
| 30 | fin |
| 31 | |
| 32 | procedure afficher(principale : entier, secondaire : entier) |
| 33 | debut |
| 34 | ecrire_nl(principale, " ", secondaire) |
| 35 | fin |
| 1 | algorithme diagonales_matrice |
| 2 | debut |
| 3 | saisir(n) |
| 4 | remplir(m, n, n) |
| 5 | calculer(m, n, principale, secondaire) |
| 6 | afficher(principale, secondaire) |
| 7 | fin |
| 8 | |
| 9 | procedure saisir(@n : entier) |
| 10 | debut |
| 11 | repeter |
| 12 | ecrire("N = ") |
| 13 | lire(n) |
| 14 | jusqua 1 ≤ n ≤ 20 |
| 15 | fin |
| 16 | |
| 17 | procedure remplir(@m : mat, l : entier, c : entier) |
| 18 | debut |
| 19 | pour i de 0 à l - 1 faire |
| 20 | pour j de 0 à c - 1 faire |
| 21 | ecrire("m[" + convch(i) + "," + convch(j) + "] = ") |
| 22 | lire(m[i,j]) |
| 23 | fin_pour |
| 24 | fin_pour |
| 25 | fin |
| 26 | |
| 27 | procedure calculer(m : mat, n : entier, @principale : entier, @secondaire : entier) |
| 28 | debut |
| 29 | principale ← 0 |
| 30 | secondaire ← 0 |
| 31 | pour i de 0 à n - 1 faire |
| 32 | principale ← principale + m[i,i] |
| 33 | secondaire ← secondaire + m[i,n - 1 - i] |
| 34 | fin_pour |
| 35 | |
| 36 | fin |
| 37 | |
| 38 | procedure afficher(principale : entier, secondaire : entier) |
| 39 | debut |
| 40 | ecrire_nl(principale, " ", secondaire) |
| 41 | fin |
Méthode
- La diagonale principale utilise m[i,i].
- La diagonale secondaire utilise m[i,N − 1 − i].
Comprendre la correction
Déroulement sur un exemple
- Pour M = [[1, 2, 3], [4, 5, 6], [7, 8, 9]], la diagonale principale contient 1, 5 et 9.
- La diagonale secondaire contient 3, 5 et 7. Les indices de colonne sont N − 1 − i : 2, 1 puis 0.
- Les deux sommes valent 15. Le centre 5 appartient aux deux diagonales et contribue à chaque somme séparément.
Erreurs à éviter
- La diagonale secondaire utilise N − 1 − i. N − i dépasserait la dernière colonne dès i = 0.
- Ne retirez pas le centre d’une des sommes : on demande deux sommes distinctes.