HOUSSAINE
Messages : 5 Points : 5401 Date d'inscription : 11/03/2010
| Sujet: programme de conversion Dim 11 Avr - 5:38 | |
| bonjours .... [/code]ce programme convertir un entier positif dans une base (entre 1-16) vres d'autre base (entre 1-16) - Code:
-
#include<stdio.h> #include<math.h> #define N 100 int longeur(char tab[]) { int m=0; char *p; p=tab; while(*p) { m++;p=p+1; } return m; } main() { char nbr[N],correc[N]; int i=0,j,B1,l=0,tab[N],rest[N],q,B2,ps[N],k=0; long int nbDec=0;
printf("donner la base de nombre à convertir :"); scanf("%d",&B1); while(B1>16) // contrle de saisir de base { printf("la base doit etre infirieur à 16\nsaisir de nouveau la base:\n"); scanf("%d",&B1); } printf("entrer le nombre a convertir "); scanf("%s",nbr);
//calcule de longeur de nombre l=longeur(nbr); printf("longeur=%d\n",longeur(nbr));
// controle de saisir pour le nombre do{ switch (nbr[i]) { case '0' : i++;break; case '1' : i++;break; case '2' : i++;break; case '3' : i++;break; case '4' : i++;break; case '5' : i++;break; case '6' : i++;break; case '7' : i++;break; case '8' : i++;break; case '9' : i++;break; case 'A' : i++;break; case 'B' : i++;break; case 'C' : i++;break; case 'D' : i++;break; case 'E' : i++;break; case 'F' : i++;break; default :{ printf("les chiffres doient appartient a le domaine {0,1,....A,B..F}\n"); printf("resaisir le nombre "); scanf("%s",nbr);i=0;l=longeur(nbr);} } }while(i<l); // tester l'appartenance des chiffres à le domaine de la base B1 for(i=0;i<l;i++) { if(B1<10) // les chiffres appartient a {0;1;....;9} { while((int)nbr[i]-48>=B1) { correc[k]=nbr[i+1];ps[k]=i+1;k++; //correction de la mémoire printf("le chiffre doit appartient a :{"); for(j=0;j<B1;j++) printf("%d;",j);printf("}\n"); printf("changer le chiffre de position %d:",i); scanf("%s",&nbr[i]); } } if(B1>=10) // les chiffres appartient a {0;1;2;....;9;A/a;B/b;C/c;D/d;E/e;F/f} { if((int)nbr[i]>=65 && (int)nbr[i]<=70) // les caractères en majiscule { while((int)nbr[i]-55>=B1) { correc[k]=nbr[i+1];ps[k]=i+1;k++; //correction de la mémoire printf("les chiffres doient appartenir a :{1;2;3;4;5;6;7;8;9;"); for(j=65;j<B1+55;j++) printf("%c;",(char)j);printf("}\n"); printf("changer le chiffre de position %d:",i); scanf("%s",&nbr[i]); } } } }
for(j=0;j<k;j++) // recuperer les valeurs perdues { for(i=0;i<l;i++) if(i==ps[j])nbr[i]=correc[j]; }
// convertir le nombre de base B1 à la base décimal
for(i=0;i<l;i++) { if((int)nbr[i]>=48 && (int)nbr[i]<=57) tab[i]=(int)nbr[i]-(int)'0'; if((int)nbr[i]>=65 && (int)nbr[i]<=70) tab[i]=(int)nbr[i]-(int)'A'+10; if((int)nbr[i]>=97 && (int)nbr[i]<=102) tab[i]=(int)nbr[i]-(int)'F'+10; } printf("\n"); for(i=0;i<l;i++) {printf("%d_",tab[i]); nbDec=nbDec+tab[i]*pow(B1,l-1-i); } printf("\n"); printf("le nombre en base decimal est :"); printf("%ld\n",nbDec); //convertire à la base B2 // convertion si B2!=10 printf("donner la base à ou vos voulez convertir"); scanf("%d",&B2); if(B2!=10) { while(B1>16) // controle de saisir de base { printf("la base doit etre infirieur à 16\nsaisir de nouveau la base:\n"); scanf("%d",&B2); } i=0; do{ q=nbDec/B2; rest[i]=nbDec%B2; nbDec=q; i++; }while(q>0); for(j=i-1;j>=0;j--) { if(rest[j]>9) { switch (rest[j]) { case 10 : printf("A");break; case 11 : printf("B");break; case 12 : printf("C");break; case 13 : printf("D");break; case 14 : printf("E");break; case 15 : printf("F");break; default:break; } } else printf("%d",rest[j]); } printf("\n"); } }
| |
|
TSDI2008
Messages : 34 Points : 5379 Date de naissance : 12/08/1985 Date d'inscription : 27/08/2010 Age : 39 Localisation : laayoune Emploi/loisirs : etudiant
| Sujet: Re: programme de conversion Lun 25 Oct - 3:35 | |
| merci M HOUSSAINE pour le code | |
|