Language C / C++

Résolu/Fermé
kamgamartinsbee Messages postés 3 Date d'inscription mardi 2 octobre 2007 Statut Membre Dernière intervention 24 octobre 2007 - 2 oct. 2007 à 17:03
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 - 29 janv. 2009 à 07:49
Bonjour,
j'aimerais bien que quelqu'un m'ecrive un proframme en C qui permet de convertir un nombre de la base decimale a une autre base(exemple: la base binaire ou la base 8).
Merci d'avance
je suis un etudiant en informatique et la programmation est mon paase temps.
J'attend vos suggestions.
A voir également:

11 réponses

lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
3 oct. 2007 à 00:39
Salut,

tu peux essaie quelque chose de ce genre
#include <stdio.h>
#include <string.h>

int main (void)
{
  int base, n, q, r, i;
  char resultat[20];
  q = 1;
  i = 0;

  printf ("Entrez un numéro entier : ");
  scanf ("%d", &n);
  printf ("Entrez la base de conversion : ");
  scanf ("%d", &base);
  printf ("%d en base %d = ", n, base);

  while (q != 0){
    q = n / base;
    r = n % base;
    n = q;
    if (r > 10)
      resultat[i++] = r + 55;
    else
      resultat[i++] = r + '0';
  }
  resultat[i] = '\0';
  for (i = strlen (resultat); i >= 0; --i)
    printf ("%c", resultat[i]);
  printf ("\n");
  return 0;
}
1
Bonjour,

demande a ton prof plutôt il sera content de t'apprendre qq chose en plus des cours (en plus tu sera bien vue :p)

par contre si c'est pour un tp, va bosser feignasse :)
enfin pour un étudiant en info tu pourrais au moins connaitre Google :p (je dis peut être des bêtises mais ce genre d'algo se trouve facilement sur le net vu que tu n'est pas le premier ni le dernier a en avoir besoin)

kardwane
0
ilan27 Messages postés 394 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 15 juin 2009 36
2 oct. 2007 à 17:15
Je peux te suggérer un algorithme (je ne connais pas encore le c) pour le passage de décimal à binaire, et tu convertiras en c puisque c'est ton passe-temps :)

dec=le nb décimal
//Tu divises par 2 successivement, et tu retiens les restes, (qui sont soit 1, soit 0), dans un tableau; le tout jusqu'a ce que le quotient vale zéro:
tant que (dec!=0){
retenue=dec-(arrondi_inférieur(dec/2))*2;
insérer la retenue dans le tableau;
dec=arrondi_inférieur(dec/2);
}
Tu ressorts les retenues dans l'ordre inverse; ex: 0,puis1, puis 1==> doit donner 1 1 0
0
Lolo38Lolo Messages postés 215 Date d'inscription mardi 15 avril 2003 Statut Membre Dernière intervention 20 novembre 2007 22
2 oct. 2007 à 17:24
Salut,

Pour t'aider un peu dans ta recherche, j'ai pas eu le temps de faire le code... mais voilà

La conversion
http://www.positron-libre.com/cours/numeration/conversion-decimal-binaire-hexadecimal.htm

Pour le langage C, regarde l'instruction arithmétique modulo. Je sais plus si c'est [] ou % en C.
0

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

Posez votre question
juste pour revenir sur l'algo de ilan,je peut me tromper mais la condition de sortie du tant que n'as pas l'air bonne.
Je m'explique, le binaire c'est 1 ou 0 or ta condition de sortie ne prend en compte que le 0, la place je mettrai :
tq(dec!=1 ou dec!=0) {ton traitement...}
0
ilan27 Messages postés 394 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 15 juin 2009 36
2 oct. 2007 à 17:35
Pour repondre a karwane, dis moi si je me trompe, mais mon "dec" est en fait le nombre, successivement divisé par 2. Donc ma condition est: tant qu'il ne vaut pas zero, c'est-à-dire tant qu'on peut encore diviser utilement, sans rajouter des 0 au tableau.
0
je suis d'accord avec toi dans l'optique ou le résultat obtenu fini par 0, mais imaginons qu'aprés n tour de boucle il te reste 1, ta boucle deviendra inutile vu qu'un nombre binaire peut se finir par 1 ^^.
Tu l'as dit toi meme plus haut "//Tu divises par 2 successivement, et tu retiens les restes, (qui sont soit 1, soit 0)"

d'ailleurs quand tu dit "c'est-à-dire tant qu'on peut encore diviser utilement, sans rajouter des 0 au tableau." tu considère que la division 1/2 est utile dans se contexte et la je ne suis pas d'accord ^^.

enfin ceci n'engage que moi.

cordialement,

kardwane
0
ilan27 Messages postés 394 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 15 juin 2009 36
2 oct. 2007 à 18:12
Bon, là on est un peu hors sujet, mais dans le cas où il reste 1, retenue vaut 1, et après, dec vaut 0, et la boucle est finie. Tu n'as qu'à essayer, ça marche. :)
Et 1/2 est utile, enfin je ne vois pas en quoi elle serait inutile puisqu'il reste 1, on ne le met pas de côté... :)
Bonne soirée.
ilan27
0
kamgamartinsbee Messages postés 3 Date d'inscription mardi 2 octobre 2007 Statut Membre Dernière intervention 24 octobre 2007
24 oct. 2007 à 20:28
les gars vous etes magnifiques ca fonctionne tres tres bien.
0
salut !!!!!!!
je voudrais avoir des explication sur cette partie du programme :
if (r > 10)
resultat[i++] = r + 55;
else
resultat[i++] = r + '0';
}
resultat[i] = '\0';
for (i = strlen (resultat); i >= 0; --i)
printf ("%c", resultat[i]);
printf ("\n");
return 0;
}
et si j'aimerais utiliser une pile pour empiler les resultat comment proceder .
svp merci d'avance
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
29 janv. 2009 à 07:49
Salut,

// si le reste de la division est plus grande que 10
if (r > 10)  // il me semble que ici c'est >=
// nous avons un tableau de caractères
// ils nous fous selon le systèm héxadécimal
// A, B, C, D, E et F
// A à le code ascii 65
// B - 66
// et ainsi de suite jusqu'à F - 70


// 10 + 55 - donne 65 qui est le code ascii de A
// 11 + 55 - donne 66 qui est le code ascii de B
// pour F - 15 + 55 = 70
  resultat[i++] = r + 55; 
else 
// sinon on écrit le caractèr de 0  à 9
// le code ascii de 0 est 48
// le code ascii de 9 est 57
// donc en aditionnant le reste avec le code ascii de caractère 0
// on obtiens le caractère correspondant pour le reste
// entier 0  => 0 + '0' = 0 + 48 = 48 => code ascii caractère 0
// entier 1  => 1 + '0' = 1 + 48 = 49 => code ascii caractère 1


// entier 9  => 9 + '0' = 9 + 48 = 57 => code ascii caractère 9
  resultat[i++] = r + '0'; 
} 
resultat[i] = '\0'; 

// la chaine obtenu est dans le sens inverse.
// pour l'écrire dans l'ordre on lit le tableah char
// en sens inverse
  for (i = strlen (resultat); i >= 0; --i) 
// et on affiche les caractères
    printf ("%c", resultat[i]); 
  printf ("\n"); 
  return 0; 
} 

Pour créer une pile en utilisant une liste chaînée regarde ici Les piles en langage C
0