Conversion entre les systèmes de numération

CCBeginner
Pratiquer maintenant

💡 Ce tutoriel est traduit par l'IA à partir de la version anglaise. Pour voir la version originale, vous pouvez cliquer ici

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.c vous-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

Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL c(("C")) -.-> c/ControlFlowGroup(["Control Flow"]) c(("C")) -.-> c/FunctionsGroup(["Functions"]) c(("C")) -.-> c/UserInteractionGroup(["User Interaction"]) c/ControlFlowGroup -.-> c/if_else("If...Else") c/ControlFlowGroup -.-> c/for_loop("For Loop") c/ControlFlowGroup -.-> c/while_loop("While Loop") c/FunctionsGroup -.-> c/function_declaration("Function Declaration") c/FunctionsGroup -.-> c/function_parameters("Function Parameters") c/FunctionsGroup -.-> c/math_functions("Math Functions") c/FunctionsGroup -.-> c/recursion("Recursion") c/UserInteractionGroup -.-> c/user_input("User Input") c/UserInteractionGroup -.-> c/output("Output") subgraph Lab Skills c/if_else -.-> lab-123228{{"Conversion entre les systèmes de numération"}} c/for_loop -.-> lab-123228{{"Conversion entre les systèmes de numération"}} c/while_loop -.-> lab-123228{{"Conversion entre les systèmes de numération"}} c/function_declaration -.-> lab-123228{{"Conversion entre les systèmes de numération"}} c/function_parameters -.-> lab-123228{{"Conversion entre les systèmes de numération"}} c/math_functions -.-> lab-123228{{"Conversion entre les systèmes de numération"}} c/recursion -.-> lab-123228{{"Conversion entre les systèmes de numération"}} c/user_input -.-> lab-123228{{"Conversion entre les systèmes de numération"}} c/output -.-> lab-123228{{"Conversion entre les systèmes de numération"}} end

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écapitulatif

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.