Exercices C/C++ pour débutants

Transposer une matrice en C et C++

Dans cette leçon, vous allez afficher la transposée d'une matrice en échangeant le rôle des lignes et des colonnes.

Introduction

Transposer une matrice, c'est transformer les lignes en colonnes et les colonnes en lignes : la valeur à la ligne i et à la colonne j passe à la ligne j et à la colonne i. Une matrice de 2 lignes et 3 colonnes devient, une fois transposée, une matrice de 3 lignes et 2 colonnes.

Points importants

  • Activez les avertissements du compilateur (compiler warnings) et corrigez-les tous.
  • Comprenez bien le type et la durée de vie (lifetime) de chaque valeur.
  • Vérifiez toujours les données d'entrée et les limites des indices de tableau.

Voir comment ça marche

Appuyez sur transpose pour échanger lignes et colonnes. Pointez une case pour voir sa nouvelle position et son décalage en mémoire.

Exemples de code C et C++

C
Exécuter →
main.c
#include <stdio.h>
int main(void) {
    int matrix[2][3] = {{1, 2, 3}, {4, 5, 6}};
    // Visit columns first to print the transposed shape.
    for (int column = 0; column < 3; ++column) { for (int row = 0; row < 2; ++row) printf("%s%d", row ? " " : "", matrix[row][column]); puts(""); }
}
Résultat de l’exécution
1 4
2 5
3 6
C++
Exécuter →
main.cpp
#include <array>
#include <iostream>
int main() {
    std::array<std::array<int, 3>, 2> matrix{{{{1, 2, 3}}, {{4, 5, 6}}}};
    // Visit columns first to print the transposed shape.
    for (size_t column = 0; column < 3; ++column) { for (size_t row = 0; row < 2; ++row) std::cout << (row ? " " : "") << matrix[row][column]; std::cout << '\n'; }
}
Résultat de l’exécution
1 4
2 5
3 6

Comparaison entre C et C++

Au lieu de créer une nouvelle matrice, le programme inverse l'ordre des deux boucles : la boucle extérieure parcourt les colonnes et la boucle intérieure les lignes. Chaque colonne de la matrice d'origine s'affiche donc comme une ligne, ce qui donne 1 4, 2 5 et 3 6.

C

C utilise de petites fonctions procédurales et montre ouvertement comment les données sont représentées en mémoire.

C++

C++ permet toujours de travailler à bas niveau, mais ajoute des types de bibliothèque et des abstractions plus sûres.

Exercices d'approfondissement

Exécutez les deux versions, puis modifiez le code pour observer la différence de sécurité qu'apporte chaque langage.

  • Testez des entrées invalides et des valeurs limites.
  • Compilez avec les options -Wall -Wextra -Wpedantic pour activer davantage d'avertissements.
  • Placez les déclarations communes dans un fichier d'en-tête et l'implémentation dans un fichier séparé.

S'entraîner avec un défi

Utilisez le contenu de cette leçon pour résoudre un vrai problème. Chaque défi s'exécute dans le navigateur, avec des tests instantanés et une revue par l'IA.

Tous les défis