Si une case du tableau est égal a 0

varfendell Messages postés 3259 Date d'inscription   Statut Membre Dernière intervention   -  
fiddy Messages postés 11653 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,

je doit faire tourner un programme, jusque toute les case d'un tableau soit differente de 0 (toute les case sont initialement mise a 0).
Comment faire autrement que ça:
while (test = 1 || nbdeplacement <= 10000)
{
for (i = 0; i <= m-1; i++)
{
for (j = 0; j <= n-1; j++)
{
if (tab[i][j] != 0)
{
test = 0;
}
}
}
reste du code
}
A voir également:

4 réponses

fiddy Messages postés 11653 Date d'inscription   Statut Contributeur Dernière intervention   1 847
 
Salut,
Tu fais tout simplement une fonction qui te renvoie 0 si le tableau contient au moins un 0.
Du genre :
int tabInitialized(const int tab, const int lin, const int col) {
       for(int i=0;i<lin;i++)
           for(int j=0;j<col;j++)
                 if(tab[i][j]==0) return 0;
       return 1;
}


Et dans la fonction principale :
while( ! tabInitialized(tab, n, m) {
    //code
}

Cdlt
0
varfendell Messages postés 3259 Date d'inscription   Statut Membre Dernière intervention   707
 
oui, mais sa reviens exactement au même, il faut reparcourir le tableau a chaque fois que j'effectue un déplacement.
0
fiddy Messages postés 11653 Date d'inscription   Statut Contributeur Dernière intervention   1 847
 
ah, j'avais pas bien compris ce que tu voulais.
Tu fais une fonction qui compte le nombre de 0 dans ta fonction. Et ensuite, tu rappelles la fonction tous les X changements dans le tableau.
J'espère que ça répond à ta question.
0
varfendell Messages postés 3259 Date d'inscription   Statut Membre Dernière intervention   707
 
oui, en effet, sa réduirait considérablement le nombre de calcul. Il n'y a pas de fonction prédéfini qui permette de savoir si un chiffre est dans un tableau???
0
fiddy Messages postés 11653 Date d'inscription   Statut Contributeur Dernière intervention   1 847
 
Tu as memchr, mais cela marche par octets et non par sizeof(int). Donc., le résultat sera erroné sans précaution particulière. Le plus simple est de te faire la fonction. Par exemple :
int nbDsTab(const int elt, const int tab, const int lin, const int col) {
       int nbElt=0;
       for(int i=0;i<lin;i++)
           for(int j=0;j<col;j++)
                 if(tab[i][j]==elt) nbElt++;
       return nbElt;
}

Et pour l'appeler :
int nbElt=nbDsTab(0,tab,n,m);

Il te reste plus qu'à rappeler cette fonction tant qu'elle ne renvoie pas 0 et tous les nbElt scanf.
0