Introduction
Les systèmes de numération sont des moyens de représenter des nombres en utilisant différents symboles et opérations mathématiques. La conversion entre différents systèmes de numération est une tâche courante en programmation. Dans ce laboratoire, nous allons présenter des programmes qui peuvent convertir des nombres d'un système à l'autre. Nous allons aborder :
- Conversion binaire en décimal
- Conversion octale en décimal
- Conversion décimale en binaire (sans récursion)
- Conversion décimale en binaire (avec récursion)
Note : Vous devez créer le fichier
~/project/main.cvous-même pour pratiquer la programmation et apprendre à le compiler et à l'exécuter en utilisant gcc.
cd ~/project
## créer main.c
touch main.c
## compiler main.c
gcc main.c -o main
## exécuter main
./main
Conversion binaire en décimal
Le binaire est un système de numération qui utilise seulement deux chiffres, 0 et 1. Le décimal est un système de numération qui utilise dix chiffres, de 0 à 9. Voici le programme C qui convertit un nombre binaire en son équivalent décimal :
#include<stdio.h>
#include<math.h>
// Déclaration de la prototype de fonction
int binary_decimal(int n);
int main()
{
printf("\n\n\t\tLabEx - Meilleur endroit pour apprendre\n\n\n");
int n;
char c;
printf("Entrez le nombre binaire : ");
scanf("%d", &n);
printf("\n\n\nL'équivalent décimal de %d est %d\n\n", n, binary_decimal(n)); // appel de fonction
printf("\n\n\t\t\tCoder est amusant!\n\n\n");
return 0;
}
// Définition de la fonction pour convertir le binaire en décimal.
int binary_decimal(int n)
{
int decimal = 0, i = 0, rem;
while(n!= 0)
{
rem = n%10; // donne le chiffre à la place des unités
n = n/10; // donne le nombre excluant son chiffre des unités
/*
pow est une fonction définie par le système qui prend
deux entiers en tant que paramètres d'entrée
*/
decimal += rem*pow(2, i++);
}
/*
renvoie l'équivalent décimal du nombre binaire d'entrée
à l'appel de fonction
*/
return decimal;
}
Conversion octale en décimal
L'octal est un système de numération qui utilise huit chiffres, de 0 à 7. Voici le programme C qui convertit un nombre octal en son équivalent décimal :
#include<stdio.h>
#include<math.h>
int main()
{
printf("\n\n\t\tLabEx - Meilleur endroit pour apprendre\n\n\n");
long int octal, val, decimal = 0;
int i = 0;
printf("Entrez un nombre octal : ");
scanf("%ld", &val);
octal = val;
while(octal!= 0)
{
/*
i++ est une incrémentation postérieure, où la valeur est
d'abord assignée puis incrémentée
*/
decimal += (octal % 10)*pow(8, i++);
octal/=10; // équivalent à octal=octal/10
}
printf("\n\n\nValeur décimale équivalente de %ld est %ld\n\n\n", val, decimal);
printf("\n\n\t\t\tCoder est amusant!\n\n\n");
return 0;
}
Conversion décimale en binaire (sans récursion)
Voici le programme C qui convertit un nombre décimal en son équivalent binaire sans récursion :
#include<stdio.h>
int main()
{
printf("\n\n\t\tLabEx - Meilleur endroit pour apprendre\n\n\n");
int n,c,k;
printf("Entrez un entier dans le système de numération décimale : ");
scanf("%d", &n);
// En format 31 bits
printf("\n\n\nL'équivalent binaire de la valeur décimale %d est :", n);
for(c = 31; c >= 0; c--)
{
k = n>>c;
/*
num&1 = renvoie vrai si le dernier chiffre de num est 1
sinon faux
*/
if(k&1)
printf("1");
else
printf("0");
}
printf("\n");
printf("\n\n\t\t\tCoder est amusant!\n\n\n");
return 0;
}
Conversion décimale en binaire (avec récursion)
Voici le programme C qui convertit un nombre décimal en son équivalent binaire avec récursion :
#include<stdio.h>
// Déclarations de prototypes de fonctions
void decimal_binary(int );
void F(int );
void reverse(int );
int main()
{
printf("\n\n\t\tLabEx - Meilleur endroit pour apprendre\n\n\n");
int n;
printf("\n\nEntrez un entier dans le système de numération décimale : ");
scanf("%d", &n);
// En format 31 bits
printf("\n\nL'équivalent binaire de la valeur décimale %d en utilisant la méthode decimal_binary est : ", n);
decimal_binary(n); // appel de fonction
printf("\n\nL'équivalent binaire de la valeur décimale %d en utilisant la méthode F() est : ", n);
F(n); // appel de fonction
printf("\n\nLa version inversée de la représentation binaire de la valeur %d est : ", n);
reverse(n); // appel de fonction
printf("\n\n\t\t\tCoder est amusant!\n\n\n");
return 0;
}
// définition de la fonction
void decimal_binary(int i)
{
if(i <= 1)
printf("%d", i); // pour imprimer dans le format du haut vers le bas
else
{
decimal_binary(i/2);
printf("%d", i%2);
}
}
void F(int j)
{
if(j/2)
{
F(j/2);
}
printf("%d", j%2);
}
void reverse(int k)
{
if(k <= 1)
printf("%d", k);
else
{
printf("%d", k%2);
F(k/2);
}
printf("\n\n");
}
Résumé
Dans ce laboratoire, nous avons présenté des programmes qui peuvent convertir des nombres entre différents systèmes de numération. Nous avons abordé la conversion binaire en décimal, la conversion octale en décimal et la conversion décimale en binaire (avec et sans récursion). Nous espérons que ce laboratoire vous a aidé à comprendre comment convertir des nombres entre différents systèmes de numération en programmation C.



