cptpingu
Messages postés3837Date d'inscriptiondimanche 12 décembre 2004StatutModérateurDernière intervention28 mars 2023
-
16 avril 2010 à 18:00
vivi168
Messages postés4Date d'inscriptionlundi 17 août 2009StatutMembreDernière intervention20 avril 2010
-
20 avril 2010 à 20:55
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
vivi168
Messages postés4Date d'inscriptionlundi 17 août 2009StatutMembreDernière intervention20 avril 2010 20 avril 2010 à 20:55
mouai, c'est pas terrible terrible
d'abord t'es limité à 8 bits, et en plus l'utilisateur doit rentrer la totalité des 8 bits, même ceux qui servent à rien.
par exemple, je veux convertir 1101, je suis obligé d'écrire les quatre 0 inutiles avant. le pire, c'est que la saisie se fait ligne par ligne, bit par bit... c'est pas follement excitant.
cs_ghuysmans99
Messages postés3982Date d'inscriptionjeudi 14 juillet 2005StatutMembreDernière intervention30 juin 201316 16 avril 2010 à 23:54
Je trouve quand même que cette méthode est plus propre (elle gère n'importe quel int) :
---
#include <stdio.h>
#include <math.h>
int binaire(const char* str)
{int s_len strlen(str), res 0, val = 1;
char *s;
for (s=(char*)str+s_len-1;s>=str;s--)
{
if (*s=='1') res += val;
val<<=1;
}
return res;
}
int main(int argc, char* argv[])
{
char buf[11];
printf("Entrez un nombre en binaire : "); scanf("%10s",buf);
printf("Valeur en base 10 : %d\n",binaire(buf));
return 0;
}
cptpingu
Messages postés3837Date d'inscriptiondimanche 12 décembre 2004StatutModérateurDernière intervention28 mars 2023123 16 avril 2010 à 18:00
C'est un peu juste pour une source. Tu aurais du poster dans le forum avec comme titre: Critiquez mon code.
Voici deux corrections.
La première est une écriture correcte de ton code:
#include <stdio.h>
int main(void)
{
short int tab[2][8] =
{
{128, 64, 32, 16, 8, 4, 2, 1},
{0, 0, 0, 0, 0, 0, 0, 0}
};
int i, j, k, x = 0;
printf("Veuillez saisir le mot binaire:\n");
for (i = 0;i < 8; ++i)
scanf("%hd", &tab[1][i]);
for (k = 0; k < 8; ++k)
if (tab[1][k] == 1)
x += tab[0][k];
printf("Le mot binaire =%d\n", x);
return 0;
}
La deuxième est une écriture un peu mieux (Plus flexible, il est facile de changer la taille du mot binaire, on pourrait même se passer du tableau d'ailleurs):
#include <stdio.h>
#define MAX 8
int main(void)
{
short int tab[MAX] = {0};
int i, x = 0;
printf("Veuillez saisir le mot binaire:\n");
for (i = 0; i < MAX; ++i)
scanf("%hd", &tab[i]);
for (i = 0; i < 8; ++i)
printf("Case: %d = %hd\n", i, tab[i]);
for (i = 0; i < MAX; ++i)
if (tab[i] == 1) x +tab[i] * (i 0 ? 1 : 2 << (i - 1));
20 avril 2010 à 20:55
d'abord t'es limité à 8 bits, et en plus l'utilisateur doit rentrer la totalité des 8 bits, même ceux qui servent à rien.
par exemple, je veux convertir 1101, je suis obligé d'écrire les quatre 0 inutiles avant. le pire, c'est que la saisie se fait ligne par ligne, bit par bit... c'est pas follement excitant.
16 avril 2010 à 23:54
---
#include <stdio.h>
#include <math.h>
int binaire(const char* str)
{int s_len strlen(str), res 0, val = 1;
char *s;
for (s=(char*)str+s_len-1;s>=str;s--)
{
if (*s=='1') res += val;
val<<=1;
}
return res;
}
int main(int argc, char* argv[])
{
char buf[11];
printf("Entrez un nombre en binaire : "); scanf("%10s",buf);
printf("Valeur en base 10 : %d\n",binaire(buf));
return 0;
}
16 avril 2010 à 18:00
Voici deux corrections.
La première est une écriture correcte de ton code:
#include <stdio.h>
int main(void)
{
short int tab[2][8] =
{
{128, 64, 32, 16, 8, 4, 2, 1},
{0, 0, 0, 0, 0, 0, 0, 0}
};
int i, j, k, x = 0;
printf("Veuillez saisir le mot binaire:\n");
for (i = 0;i < 8; ++i)
scanf("%hd", &tab[1][i]);
for (j = 0; j < 8; ++j)
printf("Case: %d = %hd\n", j, tab[1][j]);
for (k = 0; k < 8; ++k)
if (tab[1][k] == 1)
x += tab[0][k];
printf("Le mot binaire =%d\n", x);
return 0;
}
La deuxième est une écriture un peu mieux (Plus flexible, il est facile de changer la taille du mot binaire, on pourrait même se passer du tableau d'ailleurs):
#include <stdio.h>
#define MAX 8
int main(void)
{
short int tab[MAX] = {0};
int i, x = 0;
printf("Veuillez saisir le mot binaire:\n");
for (i = 0; i < MAX; ++i)
scanf("%hd", &tab[i]);
for (i = 0; i < 8; ++i)
printf("Case: %d = %hd\n", i, tab[i]);
for (i = 0; i < MAX; ++i)
if (tab[i] == 1) x +tab[i] * (i 0 ? 1 : 2 << (i - 1));
printf("Le mot binaire = %d\n", x);
return 0;
}