Pb programme en language C

Fermé
TheFUllMetal Messages postés 1 Date d'inscription vendredi 10 octobre 2008 Statut Membre Dernière intervention 10 octobre 2008 - 10 oct. 2008 à 17:07
chuka Messages postés 965 Date d'inscription samedi 11 octobre 2008 Statut Membre Dernière intervention 29 juillet 2010 - 13 oct. 2008 à 21:24
Bonjour,
alors voilà je dois créer un programme permettant de saisir un tableau de 0,1,2 uniquement.
Puis de compter les 0et les 1.
Ensuite je dois échanger les 0 et les 1;
Et enfin les recompter.

mon prog est le suivant :

#include <stdio.h>
#include <stdlib.h>

// TD2 EXO1 tableau de 0,1 ou 2
void saisie ( int t[20] )
{
int i;
for (i=0 ; i<20 ;i++)
{
do{
printf (" entrez entiers n° %i\n ", i++);
scanf ("%i",&t[i]);
}
while ( t[i]!=1 || t[i]!=0 || t[i]!=2 );
}
}


void affiche ( int t[20] ){
int i;
for (i=0 ; i<20 ;i++)
{
printf ("%i",&t[i]);
printf ("\n");
}
}


float calcul ( int t[20],int chiffre ){
int i;
int v=0;
for (i=0 ; i<20 ;i++)
{
if (t[i]==chiffre)
v++;
}
return v;
}


void permut (int tab[20], int nb1,int nb2)
{
int i;
for (i=0 ; i<20 ;i++)
{
if (tab[i]==nb1)
tab[i]=nb2;
else
if (tab[i]==nb2)
tab[i]=nb1;
}
}

void main(void)
{
int i;
int t[20];
int nb1;
int nb2;
saisie(t);
affiche(t);
nb1=calcul(t,0);
nb2=calcul(t,1);
printf("le nombre de 0 est %i\n",nb1);
printf("le nombre de 1 est %i\n",nb2);
permut(t,0,1);
nb1=calcul(t,0);
nb2=calcul(t,1);
printf("le nombre de 0 est %i\n",nb1);
printf("le nombre de 1 est %i\n",nb2);
}

Si quelqu'un voit ce qui ne va pas je le remercie d'avance :)

9 réponses

chuka Messages postés 965 Date d'inscription samedi 11 octobre 2008 Statut Membre Dernière intervention 29 juillet 2010 378
13 oct. 2008 à 21:24
salut,
Ben si tu recup un int dans ta variable, %d est le code de conversion....
je connais pas %i...
1
Bonjour

Je n'ai pas tou lu, mais ça commence mal ...
while ( t[i]!=1 || t[i]!=0 || t[i]!=2 );

ce while est toujours vrai ! il faudrait que t[i] soit égal à la fois à 0, à 1 et à 2 pour terminer ta boucle
0
TheFullMetal
13 oct. 2008 à 16:38
@fiddy

Merci pour ta réponse.

Je viens de tester le programme malheureusement il ne marche tj pas.

Si dans mon tableau je rentre 3 ou 4 le prog continue et il ne s'arrête pas au bout des 20 entiers :( .
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
13 oct. 2008 à 16:49
Bah, c'est normal. Tu dois rentrer que des 0 1 et 2 dans le tableau. Si tu tapes autre chose, on te redemande d'en choisir un ;)
-1
TheFullMetal
13 oct. 2008 à 18:37
merci chuka pour l'aide je test sa demain et je te dit quois

PS: pourquoi mes-tu "%d " et non "%i " ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
10 oct. 2008 à 17:35
Salut
Essaie
#include <stdio.h>
#include <stdlib.h>

//TD2 EXO1 tableau de 0,1 ou 2
void saisie (int t[20])
{
    int i;
    for (i=0 ; i<20 ;i++)
    {
        do{
            printf (" entrez entiers n° %i\n ", i+1);
            scanf ("%i",&t[i]);
        }
        while ( t[i]!=1 && t[i]!=0 && t[i]!=2 );
    }
}


void affiche ( int t[20] ){
    int i;
    for (i=0 ; i<20 ;i++)
    {
        printf ("%i\n",t[i]);
    }
}


float calcul ( int t[20],int chiffre ){
    int i;
    int v=0;
    for (i=0 ; i<20 ;i++)
    {
        if (t[i]==chiffre)
            v++;
    }
    return v;
}


void permut (int tab[20], int nb1,int nb2)
{
    int i;
    for (i=0 ; i<20 ;i++)
    {
        if (tab[i]==nb1)
            tab[i]=nb2;
        else
            if (tab[i]==nb2)
                tab[i]=nb1;
    }
}

int main(void)
{
    int i;
    int t[20];
    int nb1;
    int nb2;
    saisie(t);
    affiche(t);
    nb1=calcul(t,0);
    nb2=calcul(t,1);
    printf("le nombre de 0 est %i\n",nb1);
    printf("le nombre de 1 est %i\n",nb2);
    permut(t,0,1);
    nb1=calcul(t,0);
    nb2=calcul(t,1);
    printf("le nombre de 0 est %i\n",nb1);
    printf("le nombre de 1 est %i\n",nb2);
    return 0;
} 

Cdt
-1
chuka Messages postés 965 Date d'inscription samedi 11 octobre 2008 Statut Membre Dernière intervention 29 juillet 2010 378
13 oct. 2008 à 16:52
salut,
essaie cela:
void saisie (int *t)
{
int i;
int j;
for (i=0 ; i<20 ;i++)
{

printf (" entrez entiers n° %d\n ",i);
scanf ("%d",&t[i]);
if ( t[i]==1 || t[i]==0 || t[i]==2 ) break;
}
}
-1
chuka Messages postés 965 Date d'inscription samedi 11 octobre 2008 Statut Membre Dernière intervention 29 juillet 2010 378
13 oct. 2008 à 16:54
oups..pardon c'est pas == mais !=
dsl...
-1
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
13 oct. 2008 à 17:11
Oui et en plus ce sont des && ;)
Cdt
-1
chuka Messages postés 965 Date d'inscription samedi 11 octobre 2008 Statut Membre Dernière intervention 29 juillet 2010 378
13 oct. 2008 à 17:16
ca devrait resoudre le prb....dsl...
void saisie (int *t)
{
int i;
int j;
for (i=0 ; i<20 ;i++)
{
do{
printf (" entrez entiers n° %d\n ",i);
scanf ("%d",&t[i]);
if(t[i]>=0 && t[i]<=2) break;}
while(i) ;
}

}
-1