Exercice sur un Tableau à 2 dimensions

Fermé
T1tou - Modifié le 23 sept. 2021 à 21:33
Phil_1857 Messages postés 1872 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024 - 24 sept. 2021 à 09:50
Bonjour,

Je suis étudiant et j'aurais besoin d'aide en langage C sur l'un des exercice de mon TD en Informatique. Le but de cet exercice est :

Ecrire un programme qui transfère un tableau M à deux dimensions L et C (dimensions maximales: 10 lignes et 10 colonnes) dans un tableau V à une dimension L*C.

Mon programme ne fonctionne pas, pourtant je n'ai aucune erreur et même aucun affichage. Je galère dessus, depuis 2-3jours et pour autant aucune solution en vue....

Voici mon code :
#include<stdio.h>
#include<stdlib.h>
#include<time.h>

main(){
 int line, line_counter=0;
 int max_column, column, column_counter=0;
 int counter=0, i, j, inter;
 int tab_m[10][10], tab_v[100];

 srand((unsigned) time(NULL));

 // L'utilisateur choisis une taille superficielle à son Tableau 2D :
 printf("Bienvenue cher utilisateur, Choisissez les dimensions de votre tableau 2D.\n");
 printf("::: ATTENTION ::: Le nombre de question doit être inf ou egal a 100.\n");
 printf("Choisissez le nombre de colonne : ");
 scanf("%d", &column);
 printf("\n");
 printf("Choisissez le nombre de ligne : ");
 scanf("%d", &line);

 // Vérifications des donnees entre par l'utilisateur :
 while(column<0 || column>100){
  column = rand() % 101;
  printf("Votre nombre de colonne a été générer aléatoirement entre 0 et 100.\n");
  printf("Le voici : %d", column);
 }
  // Répétition pour améliorer comprehension du code :
 while(line<0 || line>100){
  line = rand() % 101;
  printf("Votre nombre de colonne a été générer aléatoirement entre 0 et 100.\n");
  printf("Le voici : %d", line);
 }

 // Attribution de valeur au Tableau 2D :
 for(i=0; i<max_column; i++){
  for(i=0; i<column; i++){
   tab_m[i][line_counter] = rand() % 100;
   counter+=1;
   column_counter+=1;
   if(column_counter==column){
    column_counter=0;
    line_counter+=1;
   }
  }
 }

 // Réinitialisation des compteurs :
 i = 0;
 j = 0;
 counter = 0;
 line_counter = 0;
 column_counter = 0;


 // Le nombre de colonnes que possède le Tableau 1D est en f(Tableau 2D) :
 max_column = column*line;

 // Insertion données de "tab_m" vers "tab_v" :
 for(i=0; i<max_column; i++){
  for(i=0; i<column; i++){
   tab_v[counter] = tab_m[i][line_counter];
   counter+=1;
   column_counter+=1;
   if(column_counter==column){
    column_counter=0;
    line_counter+=1;
   }
  }
 }

 // Affichage Tableau 2D & 1D :
 printf("\n");
 printf("Votre tableau à 2D : ");
 for(i=0;i<max_column; i++){
  printf("%d", tab_m[i][line_counter]);
  if((i+1)==max_column){
   // Dans le cas où l'on serait arrivé à la fin du Tableau 2D et que l'on voudrait afficher Tableau 1D : 
   if(line_counter==line){
    printf("\n");
    printf("Votre tableau à 1D : |");
    for(j=0;j<max_column;j++){
     printf("%d|", tab_v);
     break;
    }
  }
   line_counter+=1;
  }
 }

 return 0;
}


Merci de votre aide,

EDIT : Ajout du LANGAGE dans les balises de code (la coloration syntaxique).
Explications disponibles ici :
https://codes-sources.commentcamarche.net/faq/10686-le-nouveau-codes-sources-comment-ca-marche#balises-code

Merci d'y penser dans tes prochains messages.
----
A voir également:

3 réponses

Si vous pourriez m'indiquer mes erreurs, cela m'aiderait grandement ^^
0
Phil_1857 Messages postés 1872 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024 168
24 sept. 2021 à 09:50
Si vous pouviez, pas si vous pourriez ...
0
Dalfab Messages postés 706 Date d'inscription dimanche 7 février 2016 Statut Membre Dernière intervention 2 novembre 2023 101
23 sept. 2021 à 22:44
Bonjour,

As-tu activé les warnings de ton compilateur? Le mien indique:
1>C:\Users\Project\Source.c(83,28): warning C4477: 'printf' : la chaîne de format '%d' nécessite un argument de type 'int', mais l'argument variadique 1 est de type 'int *'
1>C:\Users\Project\Source.c(8,26): warning C4101: 'inter' : variable locale non référencée
1>C:\Users\Project\Source.c(36): warning C4700: variable locale 'max_column' non initialisée utilisée
Le 1er et le 3ième signalent des problèmes importants.

Ensuite, ce que tu fais est plutôt compliqué. On veut transférer les données d'un tableau dans un autre. Chaque élément
tab_v[k]
va recevoir une valeur
tab_m[i][j]
. Avec un petit dessin on peut rapidement trouver
k
en fonction de
i
,
j
et de
column
. En on évite des tas de variables.
Et pour l'affichage, tu compliques aussi. Il faut afficher les 2 tableaux. Là aussi
i
,
j
,
k
,
column
et
line
sont plus que suffisantes pour gérer tout cela.
0
Re -

Merci énormément Dalfab !!! J'ai trouvé comment utiliser "matrice". En plus de ta réponse, je suis retourné dans mon cours et me suis concentrer sur "plus que suffisantes". Je me suis pris énormément la tête alors que j'avais la réponse.

J'ai fait un petit programme pour "m'entraîner" avant de me mettre sur la "bête", voici :


#include<stdio.h>
#include<stdlib.h>
#include<time.h>

int main(){
int i, j;
int k, c, l;
int tab[100], matrice[10][10];

srand((unsigned) time(NULL));

// L'utilisateur choisis une taille superficielle à son Tableau 2D :
printf("Bienvenue cher utilisateur, Choisissez les dimensions de votre tableau 2D.\n");
printf("::: ATTENTION ::: Le nombre en question doit être inf ou egal a 10.\n");
printf("Choisissez le nombre de colonne : ");
scanf("%d", &c);
printf("\n");
printf("Choisissez le nombre de ligne : ");
scanf("%d", &l);

while(c<0 || c>10 || l<0 || l>10){
printf("\nChoisissez le nombre de colonne : ");
scanf("%d", &c);
printf("\n");
printf("Choisissez le nombre de ligne : ");
scanf("%d", &l);
}

for(i=0;i<c; i++){
for(j=0; j<l; j++){
matrice[j][i]=(rand() % 21);
}
}

for(i=0;i<c; i++){
for(j=0; j<l; j++){
printf("%d ", matrice[j][i]);
}
printf("\n");
}

return 0;
}


Dans ce code j'utilise un e fonction random de stdlib pour remplir mon tableau, appelé "matrice". Je laisse ça ici pour ceux que ça pourra aider <3

Prenez soin de vous et à la prochaine !!
Merci infiniment <3
0