Advertisement
Guest User

convertitore in sistema decimale

a guest
Mar 25th, 2019
98
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.70 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <math.h>
  3.  
  4. void main(void)
  5. {int b, c, nc, exp, n10, x, n; /*b indica la base del numero, inizialmente sarà la base del numero di partenza, in seguito lo sovrascrivamo per salvare la base del numero desiderato; nb sarà utilizzato per salvare ciascuna cifra inserita gradualmente del numero iniziale, in seguito serivirà; c1 indica il numero di cifre del primo umero; exp funge da esponente per la base b1, grazie a questo potremo inizialmente convertire il numero in sistema decimale; x sarà uno slot occasionale che affiancherà lo slot 'a' per registrare le risposte di conferma dell'uttilizzatore; nc1 sercirà per tenere conto delle cifre immesse dall'utilizzatore; nc2 cifre del numero desisderato di base b2*/
  6. char a;
  7.  
  8. printf("per utilizzare il programma bisogna tener conto delle seguenti condizioni:\n-non è possibile inserire tutte le cifre del numero da convertire in una volta;\n-per numeri dotati di base superiore al dieci bisogna indicare la cifra in base alla sua posizione meno 1 (es. se avessimo base 20 e volessimo elencare tutte le possibili cifre, allora avremo: 0,1,2,...,18,19, per un totale di 20 differenti caratteri.\n\n");
  9.  
  10. {/*nella parte1 si chiede di inserire la base di partenza del numero. il comando while permette di iterare il processo finchè non si riceva una risposta accetabile*/
  11. parte1: printf("dammi la base del numero di partenza\n");
  12. scanf(" %d",&b);/*base di partenza*/
  13. x=0;
  14. while(x==0)
  15. {
  16. printf("la base assegnata è %d, corretto? (s/n) \n",b);
  17. scanf(" %c",&a);
  18. switch(a)
  19. {case 's':
  20. case 'S': x=1;
  21. break;
  22. case 'n':
  23. case 'N': x=2;
  24. goto parte1;
  25. break;
  26. default: printf("carettere inserito non accettato");
  27. x=0;
  28. break;
  29. }
  30. }
  31. }
  32.  
  33. {/*nella parte2 si chiede di inserire il numero di cifre del numero. il comando while permette di iterare il processo finchè non si riceva una risposta accetabile*/
  34. parte2: printf("dammi il numero di cifre del numero\n");
  35. scanf("%d",&nc);/*numero di cifre del numero di partenza*/
  36. x=0;
  37. while(x==0)
  38. {
  39. printf("il numero delle cifre è %d, corretto? (s/n) \n",nc);
  40. scanf(" %c",&a);
  41. switch(a)
  42. {case 's':
  43. case 'S': x=1;
  44. break;
  45. case 'n':
  46. case 'N': x=2;
  47. goto parte2;
  48. break;
  49. default: printf("carettere inserito non accettato");
  50. x=0;
  51. break;
  52. }
  53. }
  54. }
  55.  
  56. {/*nella parte3 si ricevono tutte le cifre del numero da convertire. impostando inizialmente nc1, exp e n10 pari a 0, si permette al programma di: tenere il conto delle cifre inserite (inzialmente 0); avere come fattore per le unità una certa potenza della base; partire con il cercato numero decimale pari a 0, in modo tale da poter sommare progressivamente ogni cifra fornita. in seguito ciascuna cifra viene convertita in numero decimale IN QUANTO L'UNICA SOMMA NOTA AL PC È QUELLA DI BASE DECIMALE*/
  57. parte3: printf("ora verrà richiesto di inserire le singole cifre partendo dalla cifra maggiore e scendendo fino alle unità. in caso di errore di digitazione dovrete immettere comunque il numero per intero. fatto ciò potrete eventualmente ripetere dall'inizio l'immisione del numero\nP.S.: SE IMMETTERAI UNA CIFRA NON COMPATIBILE CON LA BASE DI PARTENZA DOVRAI REINSERIRE TUTTE LE CIFRE DA CAPO\n");
  58. n=0;/*tiene il conto del numero di cifre inserite*/
  59. exp=nc-1;/*esponente della base, relativo alla cifra del numero*/
  60. n10=0;/*il numero viene convertito in base 10*/
  61. /*qui è stata introdotta una parte superflua, infatti la presenza di if-else permette di scrivere una frase diversa per la prima cifra rispetto a quella per le successive, giusto per avere una massima chiarezza. così, nel caso in cui l'utente fosse riportato alla parte3, avrà un quadro più chiaro della situazione*/
  62. while(n<nc)
  63. {if(n==0)
  64. {printf("dammi la prima cifra\n");
  65. scanf("%d",&c);/*salvataggio per ciascuna cifra*/
  66. {if(c<b)
  67. {printf("la cifra immessa è <%d>\n",c);
  68. n=n+1;
  69. n10=n10+c*(pow(b,exp));
  70. exp=exp-1;
  71. }
  72. else
  73. {printf("un numero di base %d non può avere %d come cifra!!! riscrivi TUTTE le cifre da capo\n", b, c);
  74. goto parte3;
  75. }
  76. }
  77. }
  78. else
  79. {printf("dammi la cifra successiva\n");
  80. scanf("%d",&c);
  81. if(c<b)
  82. {printf("la cifra immessa è <%d>\n",c);
  83. n=n+1;
  84. n10=n10+c*(pow(b,exp));
  85. exp=exp-1;
  86. }
  87. else
  88. {printf("un numero di base %d non può avere %d come cifra!!! riscrivi TUTTE le cifre da capo\n", b, c);
  89. goto parte3;
  90. }
  91. }
  92. }
  93.  
  94. x=0;
  95. while(x==0)
  96. {printf("le cifre inserite sono corrette? (s/n) \n");
  97. scanf(" %c",&a);
  98. switch(a)
  99. {case 's':
  100. case 'S': x=1;
  101. break;
  102. case 'n':
  103. case 'N': x=2;
  104. goto parte3;
  105. break;
  106. default: printf("carettere inserito non accettato");
  107. x=0;
  108. break;
  109. }
  110. }
  111. }
  112.  
  113. {parte4: printf("inserire il numero della nuova base da assegnare al numero\n");
  114. scanf("%d",&b);
  115. x=0;
  116. while(x==0)
  117. {
  118. printf("la base assegnata è %d, corretto? (s/n) \n",b);
  119. scanf(" %c",&a);
  120. switch(a)
  121. {case 's':
  122. case 'S': x=1;
  123. break;
  124. case 'n':
  125. case 'N': x=2;
  126. goto parte4;
  127. break;
  128. default: printf("carettere inserito non accettato");
  129. x=0;
  130. break;
  131. }
  132. }
  133.  
  134. }
  135.  
  136. {parte5: exp=0;
  137. n=0; /*il valore salvato in n avrà un ruolo completamente diverso da quello assunto finora. ottenuta la prima cifra del nuovo numero, salveremo nello slot n la quantità da sottrarre al numero in base decimale 'n10', necessaria ad eliminare la cifra più grande.*/
  138. c=n10; /*ora utilizzeremo c per salvere ciascuna cifra ottenuta gradualmente*/
  139.  
  140. printf("\nil numero desiderato è: \n");
  141. printf("dammi n10\n");
  142. x=0;
  143. nc=1;
  144. while(c>=b)
  145. {c=(c-c%b)/b;
  146. nc=nc+1;
  147. }
  148. c=n10;
  149. n=nc;
  150. while(n!=0)
  151. {while(exp<n-1)
  152. {exp=exp+1;
  153. c=(c-c%b)/b;
  154. }
  155. printf("%d ",c);
  156. x=x+c*pow(b,exp);
  157. c=n10-x;
  158. exp=0;
  159. n=n-1;
  160. }
  161. }
  162. printf("\n");
  163. END: printf("ciao, alla prossima!\n\n");
  164. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement