Tableaux

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

  • Votes
  • Date
  • Date décroissante
  1. Contributeur
    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.
    1. je comprend pas ce que tu veux dire par la lettre courante?
    2. Contributeur
      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.
    3. 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");
      }
    4. Contributeur
      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.
    5. Contributeur
      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