Code qui ne marche pas

cs_darkwhite Messages postés 133 Date d'inscription vendredi 17 novembre 2000 Statut Membre Dernière intervention 29 avril 2008 - 28 mai 2006 à 21:17
EaglesEyes Messages postés 33 Date d'inscription vendredi 23 avril 2004 Statut Membre Dernière intervention 27 février 2008 - 13 juil. 2006 à 16:24
Salut a tous .

Je suis debutant en C et j'ai commencé un programme qui converti un nombre binaire de huit chiffres en un nombres decimal

le code est le suivant:

#include <stdio.h>

#include <math.h>

int main ()

{

int resultat;

int i,j,k,l=0;

int tab[8];

printf(".:Conversion D'un nombre Binaire en decimal:.\n\n");


getchar();

printf("Saisissez un nombre de huit chiffre, chaque chiffre est soit 0 soit 1\n\n");

/*on saisie les huit chiffres du nombre a convertir */

            for (i=0;i<=7;i++)

                {printf("Numero %d:",i);

                 scanf("%d",&tab[i]);}

                                 

/*Les chiffres sont dans le tableau*/


/*Affichage, des chiffres saisis a l'utilisateur*/

printf("Vous avez saisi le nombre : " );

            for (j=0;j<=7;j++)

            {printf ("%d\n",tab[j]);

            getchar();

            }


/*Operation sur les nombres du tableau*/

            for (k=0;k<=7;k++)

            {

                              for(l=7;l>=0;l--)

                              {tab[k]=2^l;

                                          }

                                         

            }


// Adittion des nombres du tableau (mode bourin a revoir)

resultat= (tab[0] + tab[1] + tab[2] + tab[3]+ tab[4]+ tab[5]+ tab[6]+ tab[7])  ;

// affichage du resultat

printf("Le resultat est %d",resultat);

getchar();

return(0);    

}


or au moment de l'execution quelque soit la valeur des chiffres saisis  le programme retourne forcement 16

Je ne sais pas ce qui ne va pas donc si vous pouviez m'aidez sa serait sympa

merci d'avance

7 réponses

cs_laurent1024 Messages postés 987 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 30 août 2012 25
28 mai 2006 à 23:33
remplace          
for (k=0;k<=7;k++)
{
     for(l=7;l>=0;l--)
     {
            tab[k]=2^l;
       }
 }
// Adittion des nombres du tableau (mode bourin a revoir)
resultat= (tab[0] + tab[1] + tab[2] + tab[3]+ tab[4]+ tab[5]+ tab[6]+ tab[7])
par
resultat =0;
for(k=7;k>=0;k--)
{
    if(tab[k] == 1)
       resultat += pow(2,k);
}

ps : Le ¨^ et l'operateur ou exclusif, alors que la je pense que c'est l'operateur puissance de 2 que tu as besoin (enfin je pense)
++
              
0
cs_darkwhite Messages postés 133 Date d'inscription vendredi 17 novembre 2000 Statut Membre Dernière intervention 29 avril 2008
29 mai 2006 à 07:21
Merci pour ton aide mais il faut declarer des bibiotheque particuliere
pour utiliser la fonction pow ? car moi j'ai un message d'erreur pour
la compilation :"undefinided reference to pow"
0
cs_laurent1024 Messages postés 987 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 30 août 2012 25
29 mai 2006 à 08:58
Normalement c'est dans <math.h>

++
0
deadbird Messages postés 49 Date d'inscription mercredi 15 janvier 2003 Statut Membre Dernière intervention 7 mars 2010
29 mai 2006 à 13:04
Regarde à tout hasard si cela ne viens pas d'un pb de cast.  
0

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

Posez votre question
cs_fauve Messages postés 661 Date d'inscription vendredi 2 décembre 2005 Statut Membre Dernière intervention 23 mars 2011 8
2 juin 2006 à 16:23
Salut


tu devrais essayer d'utiliser atoi, mais ton tableau ne devra plus être de type int mais de type char


pour stocker plusieurs caractères dans un tableau de type char : voici le code


int i;

char tab[10];


tab[0] = 8;  /* Permet de fixer le nombre de caractères maxi que cgets va accepter ici 8 */

cgets(tab); /* particularité de cgets, il te rends ce que tu as tapé
mais avec 2 symboles bizarres juste avant. La boucle for qui suit
permet de les supprimer */

for ( i = 0 ; i < strlen(tab) - 1 ; i++ )  /* srtlen permet d'obtenir la longueur de ton tableau */

    tab[i-2] = tab[i];


Il ne reste plus qu'à utiliser la fonction atoi, elle convertit un
tableau de type char en entier dans la base spécifiée ( pour ton
programme, ce sera 10 )


Si il y a quelque chose que tu ne comprends, n'hésite pas à laisser un message sur le forum...
0
cs_darkwhite Messages postés 133 Date d'inscription vendredi 17 novembre 2000 Statut Membre Dernière intervention 29 avril 2008
2 juin 2006 à 17:31
heu

1) Pourquoi ce strlen(tab) - 1

2) pourquoi ce   tab[i-2]

3) Comment utiliser la fonction atoi?
0
EaglesEyes Messages postés 33 Date d'inscription vendredi 23 avril 2004 Statut Membre Dernière intervention 27 février 2008
13 juil. 2006 à 16:24
Moi j'aurais mis "strlen(tab)" et non pas "strlen(tab)-1" puisque "strlen(tab)" te donnes la taille max du tableau donc les indices allant de "0" à "TailleMax -1" si tu utilises "strlen(tab) - 1" il te manquera un case...

Le "tab[i-2]" posera un probleme car "i" commençant à 0 si tu fait "i-2" tu taperas dans la case -2 du tableau => Erreur de segmentation...

Voici le prototype de la fonction "atoi":
int atoi(char *)

en gros tu lui passe une chaine de caractere et il te retourne un la valeur décimal de la chaine s'il la reconnait (présence uniquement de chiffre) sinon elle retournera "0"

Eagles Eyes
0
Rejoignez-nous