daily pastebin goal
2%
SHARE
TWEET

convertitore in sistema decimale

a guest Mar 25th, 2019 57 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  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. }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top