Exercice sur un Tableau à 2 dimensions

T1tou -  
Phil_1857 Messages postés 1872 Date d'inscription   Statut Membre Dernière intervention   -
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

T1tou
 
Si vous pourriez m'indiquer mes erreurs, cela m'aiderait grandement ^^
0
Phil_1857 Messages postés 1872 Date d'inscription   Statut Membre Dernière intervention   168
 
Si vous pouviez, pas si vous pourriez ...
0
Dalfab Messages postés 706 Date d'inscription   Statut Membre Dernière intervention   101
 
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
T1tou
 
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