Tableaux

parisienne941 Messages postés 5 Date d'inscription   Statut Membre Dernière intervention   -  
[Dal] Messages postés 6122 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,

J'ai une question je voudrais savoir comment faire que pour dans un tableau de dimension 3*3. Qu'on puisse comparer toutes les valeurs presente et si celle ci sont repeter plusieurs fois et bien on remplace la valeur par un 0

1 réponse

  1. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
     
    Bonjour,

    Il suffit de faire une double boucle for.
    1ère boucle for : tu parcours tous les éléments.
    2ème boucle for : tu parcours tous les éléments à partir de la lettre courante. En cas d'égalité, tu remplaces par 0.

    Je te laisse mettre ça en place.
    0
    1. parisienne941 Messages postés 5 Date d'inscription   Statut Membre Dernière intervention  
       
      je comprend pas ce que tu veux dire par la lettre courante?
      0
    2. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
       
      Par exemple :

      lettre : Caractere
      mot : String
      Pour lettre dans mot Faire
      Afficher lettre
      Fin Pour

      Dans la boucle for, lettre est la variable "courante". C'est sur elle qu'on effectue l'itération.
      0
    3. parisienne941 Messages postés 5 Date d'inscription   Statut Membre Dernière intervention  
       
      Desolé je ne comprend pas tout a fait ce que vous voulez me dire.
      Je vous explique clairement ce que je voudrais pouvoir faire:
      dans un tableau de 3*3 où sont initialisé des chiffres de 1 à 9 et s'il sont repeter plusieurs fois dans le meme tableu, mettre les case à 0 ;
      alors j'ai essayer de faire la double boucle for mais je ne pense pas bien avoir compris


       void verifcarre(int tab[3][3])
      {
      int i,j,k,l,m;
      int erreur[3][3];
      for(i=0;i<3;i++)
      {
      for(j=0;j<3;j++)
      {
      for(k=1;k<=9;k++)
      {
      if(tab[i][j]==k)
      {
      for(l=i+1;l<3;l++)
      {
      for(m=j+1;m<3;m++)
      {
      if(tab[l][m]==k)
      {
      erreur[l][m]=0;
      erreur[i][j]=0;
      }
      erreur[i][j]=tab[i][j];
      }
      }
      }
      }
      }
      }
      }


      int main()
      {
      int tab[3][3]={ {9,1,1},
      {2,9,4},
      {6,7,5},
      };
      int i,j;
      int erreur[3][3]={ {0,0,0},
      {0,0,0},
      {0,0,0},

      };

      verifcarre(tab)
      for(j=0;j<3;j++)
      {
      printf("%d |",erreur[i][j]);

      }
      printf("\n");
      }
      0
    4. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
       
      Bonjour,
      int main()
      Le bon prototype est : int main(void).
      Et il ne faut pas oublier le return 0; final.

      verifcarre(tab)
      Il manque un ';'
      De plus, tu te sers dans la fonction du tableau erreur. Il faut donc également le passer en argument.
      for(j=0;j<3;j++) { printf("%d |",erreur[i][j]); }
      Tu as oublié une boucle for sur i.

      Dans la fonction verifcarre :
      Pour simplifier, tu pouvez faire une seule boucle for de 0 à 9 (non inclu).

      Cela aurait donné quelque chose comme :

      Pour i de 0 à taille(tab) - 1 Faire :
      Pour j de i à taille(tab) - 1 Faire :
      Si taille(i) == taille (j) Alors :
      Etc
      Fin Si
      Fin Pour
      Fin Pour

      Note : lorsque tu postes ton code, utilise plutôt la balise <code c> que <code>. Ca mettra de la belle couleur.
      0
    5. [Dal] Messages postés 6122 Date d'inscription   Statut Contributeur Dernière intervention   1 108
       
      Salut fiddy et parisienne941,

      @fiddy: heu... tu es sûr de ton test :
      Si taille(i) == taille (j)
      ? Tu veux dire
      Si tab[i] == tab[j]
      ? Si oui, attention, si tu travailles sur un tableau à une dimension, la condition de la première itération de la boucle j sera toujours vraie, car tu pars du même indice. A mon sens j doit alors partir de i + 1.

      @parisienne941: c'est plus simple de travailler sur une seule dimension, ton traitement étant linéaire. Comme le C alloue la mémoire d'un tableau multidimensionnel de façon contiguë, tu peux "aplatir" ton tableau. Et faire, comme le dit fiddy, une boucle de 0 à 9 non inclus.

      Enfin, c'est comme cela que je ferai :-)

      Sinon, je n'ai pas compris à quoi sert le tableau "erreur"

      Dal
      0