Accueil > Forum > > > > Classique code : conversion decimale=>binaire
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
|
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
|
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.
|
|
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;
Livres en rapport
|
Derniers Blogs
IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) par richardc
Mise à jour des Web API du 14 Mai
Réservez dès maintenant votre journée du 20 juin pour le Windows Azure Dev Camp 2012 à Paris
Mise à jour de Team Foundation Service
MechCommander 2 sur Windows 8
Entity Framework 5 Release Candidate e...
Cliquez pour lire la suite de l'article par richardc REACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITERREACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITER par Groc
Une mauvaise utilisation de rx lors de l'écriture d'une couche d'accès à des services peut conduire à des cas embarassants avec des erreurs mal gérées, des appels qui ne partent lorsqu'ils le devraient, et même des résultats incorrects . le tout nuis...
Cliquez pour lire la suite de l'article par Groc SHAREPOINT BLOG SITE, PROBLèME D'ARCHIVESSHAREPOINT BLOG SITE, PROBLèME D'ARCHIVES par junarnoalg
Dernièrement, nous avons migré le site
myTIC
vers un nouveau serveur SharePoint 2010. Dans les contenus que nous vouloins récupérer, nous avions un certain nombre de blogs.
Nous avons utilisé les commandes Power...
Cliquez pour lire la suite de l'article par junarnoalg
Forum
RE : SAC A DOS RE : SAC A DOS par hadjkaddour
Cliquez pour lire la suite par hadjkaddour
Logiciels
sDEVIS-FACTURES vlPRO (8.1.0.3)SDEVIS-FACTURES VLPRO (8.1.0.3)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO 974 Application Server (12.2.4.6)974 APPLICATION SERVER (12.2.4.6)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP
|