├── README.md └── convert_base_en_c.c /README.md: -------------------------------------------------------------------------------- 1 | # convert_base_en_c 2 | - Coder un programme capable de transférer un nombre d'une base connu A à une base B 3 | - Utilisation de langage C 4 | # Solution logique 5 | Le programme codé traite les nombres données par l'utilisateur 6 | en suivant les étapes suivants : 7 | - demande d'un nombre de l'utilisateur + sa base actuel . 8 | - traitement de nombre taper par l'utilisateur ( vérifier si le nombre 9 | appartient à sa base actuel ) . 10 | - après le traitement le programme transfère le nombre à la base 11 | décimal. 12 | - demander a l'utilisateur la base B où on veut transférer le nombre 13 | donné par l'utilisateur . 14 | - transférer le nombre de la base décimal à la base B . 15 | ![Screenshot 2022-03-27 225354](https://user-images.githubusercontent.com/90983110/160300572-76982f7b-0433-4c95-ba60-f0e1f1105469.png) 16 | # Script et fonctions utilisées 17 | - La fonction check_base : 18 | Puisque les bases qui sont valable et 19 | connues pour le programme sont les 20 | bases de 2 à 16 , il faut vérifier la 21 | disponibilité de la base dans le 22 | programme , la fonction retourne 0 ou 1 23 | - La fonction chose_base : 24 | après la vérification de l'existence de la 25 | base dans le programme la fonction 26 | chose_base produit la base souhaité en 27 | utilisant une boucle for . 28 | - Les fonctions check_range et is_valid : 29 | après la vérification de l'existence de la 30 | base il faut vérifier si le nombre donné 31 | par l'utilisateur existe vraiment dans sa 32 | base actuel . et cela se fait par les deux 33 | fonctions check_range et is_valid en 34 | utilisant des boucles for pour parcourir le 35 | nombre en question qui est sous forme 36 | d'une chaine des caractères . 37 | - La fonction to_decimal : 38 | après la vérification de l'existence de la 39 | base et l'existence de nombre dans sa 40 | base , comme c'est identifier dans la 41 | solution logique en doit transférer le 42 | nombre à la base décimale. 43 | # Améliorations futures. 44 | Le programme codé est capable de transférer chaque nombre 45 | d'une base A à une base B . mais il y'on a des petites failles qu'il faut 46 | rectifié pour améliorer le programme : 47 | exemple : 48 | - si on ajoute un caractère au lieu d'un nombre dans la 49 | sélection de la base B on aura un erreur 50 | 51 | -------------------------------------------------------------------------------- /convert_base_en_c.c: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | #define BASE "0123456789ABCDEF" 4 | // verifier que les bases A et B entre 2 et 16 5 | int check_base(int base) 6 | { 7 | return (base >= 2 && base <= 16); 8 | } 9 | // convert le type de la base a une base ,example : la base 10 = 0123456789 10 | void chose_base(int typedebase) 11 | { 12 | int i; 13 | 14 | for (i = 0; i < typedebase; i++) 15 | printf("%c", BASE[i]); 16 | printf("\n"); 17 | } 18 | 19 | // convert les carateres de type char a la valeur equivalente , exemple : A dans hexadicimal = 10 20 | int CharToDec(char c){ 21 | if(c>='0' && c<='9') return c-'0'; 22 | if(c>='a' && c<='f') return c-'a'+10; 23 | if(c>='A' && c<='F') return c-'A'+10; 24 | return 0; 25 | } 26 | // veriefier est ce que le nombre saisir par l'utilisateur appartient a la base A : example 0101 est dans la base binaire "01" 27 | int check_range(char c, int base) 28 | { 29 | char *B = "0123456789ABCDEF"; 30 | int i; 31 | 32 | for (i = 0; i < base; i++) 33 | { 34 | if (i < 10) 35 | { 36 | if (c == B[i]) 37 | return (1); 38 | } 39 | else 40 | { 41 | if (c == B[i] || c == B[i] + 32) 42 | return (1); 43 | } 44 | } 45 | return (0); 46 | } 47 | int is_valid(char *nbr, int base) 48 | { 49 | int i; 50 | for (i = 0; nbr[i]; i++) 51 | { 52 | if (check_range(nbr[i], base) == 0) 53 | return (0); 54 | } 55 | return (1); 56 | } 57 | // convertir le nombre saisie par l'utilisateur au decimale 58 | int to_decimal(char H[], int typedebase) 59 | { 60 | char *P; 61 | int p=1, d=0; 62 | 63 | for(P=H;*P;P++); 64 | 65 | for(P--;P>=H;P--) 66 | { 67 | d = d + (CharToDec(*P) * p); 68 | p = p*typedebase; 69 | } 70 | return d; 71 | } 72 | // convert le decimal a la base B 73 | void ft_putnbr_base(int nbr, int size) 74 | { 75 | if(nbr >= size) 76 | { 77 | ft_putnbr_base(nbr / size, size); 78 | ft_putnbr_base(nbr % size, size); 79 | } 80 | else 81 | printf("%c", BASE[nbr]); 82 | } 83 | 84 | int main( ) 85 | { 86 | char nbr_de_depart[1000]; 87 | int type_de_baseA; 88 | int type_de_baseB; 89 | int decimal; 90 | 91 | // get base A 92 | printf("choisir votre base A entre 2 et 16 : "); 93 | scanf("%d",&type_de_baseA); 94 | // afiche l'erreur quand l'utilisateur sasit une base superieur a 16 95 | while(check_base(type_de_baseA) == 0) 96 | { 97 | printf("error ==> choisir un nombre btw 2 et 16: "); 98 | scanf("%d",&type_de_baseA); 99 | } 100 | // affiche la base A choisit par l'utilisateur 101 | printf("la base choisie A et: "); 102 | chose_base(type_de_baseA); 103 | 104 | // get number 105 | printf("entre le nobre a convertir dans la base A: "); 106 | scanf("%s",nbr_de_depart); 107 | // afiche l'erreur quand l'utilisateur saisit un nombre qui n'appartient pas a la base A 108 | while(is_valid(nbr_de_depart, type_de_baseA) == 0) 109 | { 110 | printf("error ==> le nombre n'est pas valid: "); 111 | scanf("%s",nbr_de_depart); 112 | } 113 | 114 | // convertie le nombre vers la base decimal 115 | decimal = to_decimal(nbr_de_depart,type_de_baseA); 116 | 117 | // get base B 118 | printf("entrer le type de la base B entre 2 et 16: "); 119 | scanf("%d",&type_de_baseB); 120 | // affiche l'erreur quand l'utilisateur entre une base superieur a 16 121 | while(check_base(type_de_baseB) == 0) 122 | { 123 | printf("error ==> choisir un nombre btw 2 et 16: "); 124 | scanf("%d",&type_de_baseB); 125 | } 126 | // affiche la base B choisie par l'utilisateur 127 | printf("la base choisie B et: "); 128 | chose_base(type_de_baseB); 129 | 130 | // convertie decimal a base B + print resultas 131 | printf("result est: "); 132 | ft_putnbr_base(decimal, type_de_baseB); 133 | return 0; 134 | } 135 | --------------------------------------------------------------------------------