Architecture des Ordinateurs/Assembleurs Conversion des nombres Un programme permettant de convertir un nombre d'une base A vers une base B (A et B compris entre 2 et 16). Fait par: - EL ALAMI Hafsa - EL BRAHIMI Meriem Voila l'algorithme finale: //début de l'algorithme {//déclaration des variables BD,BF,P=1,V,X,n,j, taille :entier; /* BD(base de départ la base qui sera convertir) BF(la base final) P=1 pour calcul les puissances Taille c'est la taille de le nombre nombre de chiffres j,n des pas*/ H[1000],K[100] : Caractère; //lecture des données répéter {écris ("donner la base de depart entre 2 et 16:\n"); //lecture de la base de depart lis(BD); écris ("donner la base finale entre 2 et 16 :\n"); // lecture de la base finale lis(BF); } tant que (((BD<2)ou(BD>16))ou((BF<2)ou(BF>16))); // Les bases ne doivent pas être inferieur a 2 ou bien supérieur a 16 écris("donner le nombre que vous souhaitez convertir \n"); //demande à l’utilisateur de saisir le nombre lis(H); écris("*********\n"); // pour séparer entre les données et les résultat //traitement Taille=la taille de tableau H ; // calcule de nombre de caractère qui se trouve dans la chaine. //1 er étape conversion a la base décimale Pour j allant de taille -1 à 0 par pas de un pas fait /*convertir le nombre à la base décimal en utilisant le tableau suivant : On a utilisé ce tableau pour afficher les lettres qui se trouvent dans les bases supérieur à 10. Expl : A en dec 65 donc on soustrait 55 pour A sera =10 */ {si ((H[j]>='0')et(H[j]<='9')) {V=V+(H[j]-48)*P; P=P*BD; } sinon si((H[j]>='A')et(H[j]<='F')) {V=V*(H[j]-55)*P; P=P*BD;}} // Affichage du nombre décimale après la conversion écris ("nombre en décimal = V\n"); // Conversion de décimale a la base désiré en utilisant le même tableau écris ("**** conversion a la base désiré ****\n"); Pour n allant de 0 à V>0 par pas de un pas fait {X= V%BF ; // le reste de la division Si(X<10) {K[n]=48 + X ;} Sinon {K[n]=55+X ;} V=V/BF ;} //Edition // Affichage du caractère final après la conversion écris ("\n votre nombre dans la base BF est = "); Pour n allant de n-1 à 0 par pas de pas fait {écris (" K[n]");} //fin de l'algorithme} Le programme final: #include<stdio.h> #include<stdlib.h> #include<math.h> #include <string.h> int main () { int BF,BD,i,X,M=0,V,j=0,P=1,n,taille; char H[1000],K[100]; do{ printf("donner la base de depart entre 2 et 16:\n"); scanf("%d",&BD); printf("donner la base finale entre 2 et 16 :\n"); scanf("%d",&BF); }while(((BD<2)||(BD>16))||((BF<2)||(BF>16))); printf("donner le nombre que vous souhaitez convertir \n"); scanf ("%s",&H); printf("*********\n"); taille=strlen(H); for(j=taille-1;j>=0;j--) { if((H[j]>='0')&&(H[j]<='9')) {V+=(H[j]-48)*P; P*=BD; } else if((H[j]>='A')&&(H[j]<='F')) {V+=(H[j]-55)*P; P*=BD; }} printf("nombre en decimal = %d\n", V); printf("**** converssion a la base desire ****\n"); for(n=0; V> 0; n++) { X= V%BF; if (X<10) { K[n]=48 + X;} else {K[n]=55+X; } V=V/BF;} printf("\n votre nombre dans la base %d est = ",BF); for(n=n-1; n >= 0; n--) { printf("%c ",K[n]); } }