Si c'est en C que tu dois résoudre cet exercice, alors il te faudra mener de front deux problèmes distincts :
- La problématique proprement dite (trouver les éléments adéquats) ;
- L'allocation dynamique de mémoire pour gérer les tableaux dont tu ne connais pas la taille à l'avance.
Je te conseille donc de laisser de côté le point numéro 2 et de choisir à l'avance une matrice de taille fixe dont tu établiras les dimensions avec des « #define ». Tu recompileras le programme si tu veux en changer. Tu définira donc ta matrice dans un tableau à deux dimensions :
int matrice [lignes][colonnes];
Ensuite, dans le « pire » cas où la matrice ne serait pas creuse mais pleine, ton premier tableau doit contenir l'équivalent d'exactement une colonne de plus que ta matrice, pour contenir le nombre d'éléments non nuls, puis les positions de chaque colonne: Soit (colonnes+1)×lignes.
Enfin, ton deuxième tableau doit contenir, toujours au pire, tous les éléments de ta matrice. Il doit donc faire exactement la même taille. Donc colonnes×ligne.
Une fois que c'est fait, tu définis deux variables d'index qui commencent à zéro et servant à remplir tes tableaux. Chaque fois que tu ajoutes une valeur, quelle qu'elle soit, dans un de ces deux tableaux, tu incrémentes l'index correspondant. Puis tu déclares deux variables i et j servant d'indices de boucle, et tu fais deux « for » imbriqués. Le premier servant à parcourir chaque ligne et le second, pour chaque ligne, à parcourir les colonnes.
À l'intérieur de ces de boucles, tu examines l'élément [i][j] et s'il est non nul, tu ajoutes respectivement l'élément à ton second tableau.
Pour remplir le premier tableau, il te faut une dernière variable, temporaire, qui sert à se souvenir de l'index de ton premier tableau au fur et à mesure que tu vas le remplir, pour tenir à jour le compte d'éléments que tu vas recenser. Tu mets cette variable à jour à chaque fois que tu finis une ligne, c'est-à-dire juste après la fin du for(j); mais avant la fin du for(i).
J'évite volontairement de te donner du code tout fait.
Partager