begin process at 2012 05 28 08:38:33
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C

 > 

Divers

 > 

Débutant(e)

 > 

Classique code : conversion decimale=>binaire


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Classique code : conversion decimale=>binaire

mercredi 18 juillet 2007 à 14:12:06 | Classique code : conversion decimale=>binaire

darkwhite

salut à tous,
Comme un nombre incalculable de gens je dois faire le desormais classique code : convertir du binaire en decimale. Pour ma part je l'ai ecrit comme ça :

#include <stdio.h>
#include <string.h>


int main ()
{
 

  int longueur=0,i=0,j=0,resultat=0;
  char nb_lu[256];
 
  scanf("%s",&nb_lu);
  longueur=strlen(nb_lu);
  for(i=longueur;i>0;i--)
    {
      resultat+=nb_lu[i]*puissance(2,j);
      j++;
    }
  printf("%d\n",resultat);

  return 0;
}


int puissance (int x,int exposant)
{
  int i,resultat=x;
  for(i=0;i<exposant-1;i++)
    {
      resultat*=x;
  
    }
  return resultat ;
}

Comme sa n'affiche que des conneries, je vous demande qu'est ce qu'il cloche dans mon code

Voila merci d'avance
a+
mercredi 18 juillet 2007 à 15:10:12 | Re : Classique code : conversion decimale=>binaire

fredsor

Membre Club
Salut,
Je comprends pas ton " i<exposant-1 "
puisque tu fais commencer i à 0, si tu demande la puissance à 4, il va juste te calculer de 0 à 2 non?
Sinon quand tu dis qu'il te mets des conneries, c'est des conneries qui ont du sens quand meme? ca reste des multiples de 2?
Ciao
mercredi 18 juillet 2007 à 15:14:52 | Re : Classique code : conversion decimale=>binaire

fredsor

Membre Club
Excuse pour ma premiere remarque elle tient pas la route, j'avais pas fait gaffe au premier resultat*
Mais ca empehce pas ma deuxieme question?
mercredi 18 juillet 2007 à 15:26:58 | Re : Classique code : conversion decimale=>binaire

darkwhite

Bah c'est des puissances de 2 en tout cas : pour transformer un binaire en decimal il faut multiplier chaque rang par la puissance de 2 associé ??

110 = 1*2^2+1*2^1+0*2^0=5
mercredi 18 juillet 2007 à 15:33:11 | Re : Classique code : conversion decimale=>binaire

ctx_man

Salut ! Si j'ai bien comprit, tu as une chaine qui contient un nombre sous la forme binaire et tu veux obtenir un nombre décimal à la place ? Commence par retourner ta chaine, ca sera plus simple, comme ca l'index 0 correspond au nombre de poids faible. Mais encore mieux, tes index correspondent à ta puissance memset(nbl_u, 0, 256); //Ca c'est juste pour être certain qu'on ne va pas partir n'importe où dans la mémoire. scanf("%s", &nb_lu); nb_lu = [_]strrev(nb_lu); //Le [_] c'est parce que la version POSIX de la fonction c'est "char* strrev(char*)" mais sous Visual Studio elle est dépréciée au profit de la version ISO C++ "char* _strrev(char*)" Comme tu le vois, il n'y a que le "_" qui change maintenant que ta chaine est retournée ca va être simple : longueur = strlen(nb_lu); for(int i = 0; i < longueur; i++) resultat += pow(2, i) * nb_lu[i]; //T'emmerdes pas à faire une fonction puissance, yen a une standard qui fonctionne parfaitement bien. Sinon ta fonction puissance est fausse. Si tu fait puissance (1000, 0), ca te retourne 1000 alors que ca doit faire 1. En plus elle est un peu mal foutue je trouve. J'aurais écrit ca plutot : int puissance(int base, int pow) { int res = 1; //Le résultat d'une puissance c'est jamais 0, mais 1 minimum. while(pow--) // On utilise de préférence les for quand on sait combien de fois ca va tourner ou que se sert de l'indice res *= base; return res; } Avec ce code, si pow == 0, ca retourne 1, si pow == 1 ca retourne 1 * base = base, si pow == 2 ca retourne 1 * base * base = base² ...
mercredi 18 juillet 2007 à 15:34:41 | Re : Classique code : conversion decimale=>binaire

juju12

Quand tu écris : resultat+=nb_lu[i]*...
Dans nb_lu[i], tu as le code ascii du caractère et non pas 0 ou 1.
tu peux faire resultat+=(nb_lu[i]-0x30)*... ca devrait marcher
mercredi 18 juillet 2007 à 15:40:00 | Re : Classique code : conversion decimale=>binaire

ctx_man

Ah oui c'est vrai aussi ca, j'avais zapé.
mercredi 18 juillet 2007 à 15:51:32 | Re : Classique code : conversion decimale=>binaire

darkwhite

Merci pour vos reponsses rapides.

ctx: pour utiliser la fonction strrev, faut-il declarer des librairies particulieres (moi j'ai declarer stdio et math). Et je n'ai pas bien compris ton explication denormes maus on j'ai mis sa dans mon code :

 memset(nb_lu, 0, 256);
  scanf("%s",&nb_lu);
  nb_lu = [_]strrev(nb_lu);
   longueur=strlen(nb_lu);
for( i = 0; i < longueur; i++)
    resultat += pow(2, i) * nb_lu[i];

Et a la compile j'ai
darkwhite:/media/sda5/Dossier pierre/c/ioi# gcc -lm -o  dec dec.c
dec.c: In function 'main':
dec.c:12: error: expected expression before '[' token
dec.c:12: error: '_' undeclared (first use in this function)
dec.c:12: error: (Each undeclared identifier is reported only once
dec.c:12: error: for each function it appears in.)

mercredi 18 juillet 2007 à 15:54:12 | Re : Classique code : conversion decimale=>binaire

darkwhite

juju : dans un char comme char nb=010 ;
                                  char[0] est different de 0 ??
mercredi 18 juillet 2007 à 15:57:02 | Re : Classique code : conversion decimale=>binaire

ctx_man

LOOL, je t'ai expliquer que le [_] c'est parce que le "_" devant strrev est optionnel, suivant ton compilateur. Donc soit tu utilise strrev(...) soit tu utilise _strrev(....) [_]strrev(...) ca existe pas et ca veut rien dire d'ailleur. Vu que tu utilise gcc, c'est strrev(...) qu'il te faut utilisé. c'est du standard, c'est comprit dans si je me souvient bien.

1 2

Cette discussion est classée dans : code, int, resultat, nb, lu


Répondre à ce message

Sujets en rapport avec ce message

Prob de modulo ou de code ? [ par NeoZ ] Salut, je voudrais stocker un nombre dans un tableau, ou tout du moins, stocker chaque chiffre dans une variable, et j'ai fait ce bout de code, mais i celà n'enregistre pas [:(!],grrrr [ par oceane67 ] voilà, mon programme n'enregistre toujours pas, je ne sais pas pourquoi, surtout qu'il fait comme si c'etait le cas, je desepesere,voici mon programme problème de char [ par minet03 ] Coucoutout le monde, tout d'abord voilà mon code :#include #include #include #include #include #include char *bin_dec(char *binai longip ... probleme [ par winwarrior ] Salut :)Voila j'ai un petit probleme avec un code qui est censé me renvoyer le longip, il me retourne -795585024 au lieu de 2130772483 (longip de 127. Fonction qui retourne un tableau [ par Kurul1 ] Bonjour à tous   J'ai une classe contenant un tableau a deux dimensions comme variable private  Ce que je voudrais c'est une fonction ayant pour param TEdit problème [ par vez_from_hell ] bonsoirje travail avec Borland C++ Builder 5 et je souhaite que mon TEdit devienne une variable int.exemple://---------------------------------------- addition en binaire [ par jejedi ] bonsoir , je dois faire un petit prog qui additione 2 nombres binaire. Le probleme c' est que mes 2 nombres étant des chaines de caractére ca me renv URGENT : transposer du C en Caml [ par torgal79 ] Salut Voila mon probleme. On m'a filé un prog en c et j'y connais rien a ce langage. Et mon boulot est de le transposer en caml et c'est super urgent. Help, DevC++ fonction retournant un float, résultat très étrange... [ par yom007 ] Bonjour,   je travaille sous devC++ et là c'est l'incompréhension, peut-etre qu'une ame charitable pourra venir à mon secours...J'ai reussi à isoler m plantage inexpliqué [ par graall ] bonjour, j'ai un problème avec ce code :     getch();     FILE *pHtml;     int nb_char = 0;     bool sortie = false;


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,499 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales