Besoin d'aide appel de tableau

Besoin d'aide appel de tableau - C - Programmation

Marsh Posté le 11-06-2013 à 16:29:38    

Bonjour à tous,
 
Bon commençons par le commencement : je suis novice en prog'.  
 
j'ai créé 2 tableaux à 2 dimensions.
Le premier initialiser qu'avec des 0.
Le deuxieme possède des valeurs.  
Les 2 ont été créé avec des boucles.
Le problème arrive ici, j'aimerai retravaillé le premier après la boucle mais je n'y arrive pas...
Comment pourrais-je appeler ce tableau?
 
Je vous remerci d'avance,


Message édité par maryanno le 11-06-2013 à 16:44:14
Reply

Marsh Posté le 11-06-2013 à 16:29:38   

Reply

Marsh Posté le 11-06-2013 à 16:41:16    

Pour apporter plus de renseignement :
 
int main()
{
    int i=0;                                  //Création du plateau 25 lignes 12 colonnes
    int j=0;
    int PlateauOriginal[25][12];
    for (i=0; i<24; i++){
        for (j=0; j<12; j++){
            PlateauOriginal[i][j]=0;
                printf("%d", PlateauOriginal[i][j]);
 
    }
    printf("\n" );
    }
 
    int k=0;                                  
    int l=0;
    int TableauBarre[6][6]={ { 1 , 1 , 1 , 1 } };
     for (k=0; k<5; k++){
        for (l=0; l<5; l++){
                printf("%d", TableauBarre[k][l]);
 
    }
    printf("\n" );
    }
 
ici j'aimerai appeler PlateauOriginal pour le retravaillé, mais je n'y parviens pas.  
Comment faire svp.
Merci

Reply

Marsh Posté le 11-06-2013 à 17:03:16    

qu'entends-tu par "appeler" un tableau ? Faire une nouvelle boucle ?
 
Sinon quelques erreurs. Les critères de fin de boucle sont "faux"  

Code :
  1. for (i=0; i< 24 ==>25; i++){
  2.        ...
  3.      }
  4.      for (k=0; k< 5 ==>6; k++){
  5.         for (l=0; l< 5 ==>6; l++){
  6.            ...
  7.         }
  8.      }


 
 
L'init du tableau TableauBarre est fausse  : tableau 6x6 et tu files un tableaux 1x4  

Code :
  1. int TableauBarre[6][6] =  {{1,1,1,1}} ==> {{1,1,1,1,1,1},{1,1,1,1,1,1},{1,1,1,1,1,1},{1,1,1,1,1,1},{1,1,1,1,1,1},{1,1,1,1,1,1}}


 
Et pourquoi TableauBarre n'a pas les même dimensions que TableauOriginal ?
 
Sinon à la fin du code rien n'empêche de faire  

Code :
  1. for(int pos_x=0;pos_x < 25;++pos_x){
  2.       for(int pos_y=0;pos_y<12;++pos_y){
  3.           TableauOriginal[pos_x][pos_y]+= TableauBarre[pos_x % 6][pos_y % 6];
  4.       }
  5.   }


Reply

Marsh Posté le 11-06-2013 à 17:14:13    

Pour les fins de boucles :
Comme je veux initialiser un tableau de 25 lignes et que i est initialiser à 0 ca ne me fait plus que 24 non? (pareil pour j)
 
Ensuite mon tableau barre est bon, puisque je ne veux que quatre 1 et le reste à 0. Le printf est bon.
Mon tableau de [6][6] doit ressembler à ceci:
111100
000000
000000
000000
000000
000000
 
Tableau Barre est plus petit que PlateauOriginal car j'aimerai insérer Tableau Barre dans PlateauOriginial. Si j'ai un tableau de [6][6] c'est pour pouvoir par la suite faire pivoter la barre par symétrie.
 
Sinon l'astuce de fin que tu donnes je ne sais pas trop ce qu'elle veut dire. Pourrais-tu me donner plus d'explications?
 
En tout cas merci pour le temps que tu prends pour m'aider.
 
PS: Ce que j'entend par appeler c'est pouvoir réutiliser PlateauOriginal après sa boucle.  
Le but de ma manoeuvre serait de copier TableauBarre dans PlateauOriginal comme ceci:
 
111100000000
000000000000
000000000000
000000000000
... etc

Reply

Marsh Posté le 11-06-2013 à 17:25:57    

Aïe : la boucle for n'est pas comprise  
for(i=0;i<24;i++) est équivalent à Pour i allant de 0 à 23 (or le tableau va de 0 à 24)
 
Et si tu veux "recopier" un tableau dans un autre, il n'y a pas d'autre choix que de boucler sur l'un d'entre eux et à l'intérieur de la double boucle, faire une mapping d'indice (dans mon exemple, c'est un modulo qui fait office de mapping) et de faire (principe générique)

Code :
  1. for(...){
  2.     for(...){
  3.        pos_x_dest = f(pos_x_source); // ou l'inverse , f étant la fonction/formule de mapping
  4.        pos_y_dest = f(pos_y_source); // ou l'inverse , f étant la fonction/formule de mapping
  5.        tableau_dest[pos_x_dest][pos_y_dest] = tableau_source[pos_x_source][pos_y_source];
  6.      }
  7.    }


Message édité par dreameddeath le 11-06-2013 à 17:30:28
Reply

Marsh Posté le 11-06-2013 à 17:44:25    

D'accord, mais la fonction memcpy ne me servirait pas alors?

Reply

Marsh Posté le 11-06-2013 à 18:34:01    

memcpy est à utiliser avec parcimonie/maîtrise (alignement, structure du tableau et sa taille, ....) . Bref, si erreur sur le for, alors memcpy est "dangereux" dans son fonctionnement (copie de bloc mémoire <> copie de champs)... Pour démarrer, je préfère proposer la copie "champ à champ" en C (et même en C++).

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed