Advertisement
Jordimario

Contatore FINALE

Mar 16th, 2019
146
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.40 KB | None | 0 0
  1. #include <cstdlib>
  2. #include <iostream>
  3. #include <cmath>
  4. using namespace std;
  5.  
  6. ///codice che crea un contatore di base "X" e lunghezza "N" entrambe inserite da input
  7.  
  8. int main()
  9. {
  10. int base=0, numten=0, inv[100],num1[100],somma[100],i=0,lenTot=0;
  11. bool riporto=0;
  12. for(i=-2;i<=100;i++)inv[i]=0;   ///
  13. for(i=-2;i<=100;i++)num1[i]=0;  ///Dichiarazione vettori NB: in alcune versioni del compilatore questo passaggio non è necessario
  14. for(i=-2;i<=100;i++)somma[i]=0; ///
  15. i=0;
  16.  
  17.         ///ciclo per immettere la base senza errori
  18. do{
  19.     cout<<"Inserisci la Base in cui vuoi immettere i numeri"<<endl; ///Messaggio utente
  20.     cin>>base;                                                      ///Immessione di base 'base'
  21.  
  22.         if(base<2 || base>10)cout<<"La base e' compresa solo fra 2 e 10"<<endl; ///controllo per inserzione di base (2<base<10)
  23. }while(base<2 || base>10);
  24.  
  25.  
  26.         ///immette la lunghezza del contatore
  27. do{
  28.     cout<<"Immetti la lunghezza del contatore"<<endl;  ///messaggio utente
  29.     cin>>lenTot;                                       ///immessione di lunghezza 'lenTot'
  30.  
  31.         if(lenTot<0)cout<<"Deve essere un numero positivo"<<endl; ///controllo per inserzione di lunghezza (len>0)
  32. }while(lenTot<0);
  33.  
  34. lenTot--;///il vettore parte da 0
  35.  
  36.  
  37. cout<<"inserisci il numero iniziale in base 10, il numero dovrebbe avere meno cifre della lunghezza inserita altrimenti alcuni numeri verranno ignorati"<<endl;   ///messaggio utente
  38. do{
  39. cin>>numten;                                             ///immessione numero in base 10 numten
  40.  
  41.     ///convertire la base 10 in base 'base'
  42. while(numten>1){
  43.     inv[i]=numten%base;  ///mette nel vettore di cifre il risultato "numero immesso modulo base selezionata".
  44.     i++;                 ///aumenta l'indice per passere al prossimo numero della base
  45.     numten=numten/base;  ///il numero iniziale verra diviso per la base per far andare avanti l'operazione
  46. }
  47. inv[i]=numten%base; ///il ciclo si fermerà un numero prima del risultato finale quindi per rirsolvere si mette un istruzione subito dopo il ciclo
  48.  
  49.  
  50. if(inv[i]==0)i--;
  51.  
  52. while(i>=0){                ///ribaltamento vettore
  53.     num1[lenTot-i]=inv[i];  ///per ribaltare il numero lo copio il numero in un altro vettore invertendo gli indici, usando l'indice del contatore al numero verra messo dei zeri alla visualizzazione adattando le cifre del contatore alle cifre massime del conatore
  54.     i--;                    ///decremento indice fino a che il  contatore è maggiore o uguale '0'
  55. }
  56.  
  57. cout<<"Il numero Sommato al contatore sara': "; ///Messaggio utente
  58. for(i=0;i<=lenTot;i++)cout<<num1[i];                ///Mostra il numero convertito informando l'utente che numero sara aggiunto al contatore
  59. cout<<endl;
  60.  
  61. i--;
  62.  
  63. while(i>=0){    ///ciclo per sommare i due numeri
  64.  
  65.     if(num1[i]+somma[i]+riporto>=base){             ///se il numero prevede un riporto esegue certe istruzioni
  66.         somma[i]=(num1[i]+somma[i]+riporto)%base;   ///mette in "somma" solo il restante
  67.         riporto =  1;                               ///porta il numero riportato in questa variabile
  68.     }
  69.  
  70.     else{                                           ///se il numero NON prevede un riporto esegue certe istruzioni
  71.         somma[i] = num1[i]+somma[i]+riporto;        ///somma il numero inserito la somma stessa e il riporto nella somma
  72.         riporto = 0;                                ///non c'e nessun riporto e se c'era e' stato messo nel numero precedente
  73.     }
  74.  
  75. i--;            ///decremento indice per passare ai numeri piu alti
  76. }
  77.  
  78. i=0;            ///porta il numero da "-1" a "0"
  79.  
  80. if(!riporto)cout<<"la somma dei numeri e' "; ///se NON c'e' un riporto allora il programma continua e il messaggio mettendo un messaggio utente appropriato
  81.  
  82. else cout<<"il contatore è andato in overflow di";///se c'e' un riporto il programma finisce
  83.  
  84. while(i<=lenTot){
  85.     cout<<somma[i]; ///mostra sia la somma che l'overflow del programma quando occorre
  86.     i++;            ///incrementa
  87. }
  88.  
  89. if(!riporto){
  90.     cout<<endl<<endl<<"inserisci un altro numero"<<endl;///messaggio utente
  91.  
  92.     for(i=0;i<=lenTot;i++)num1[i]=0;    ///pulisco il vettore per il prossimo numero che verrà inserito
  93.  
  94.     i=0;   ///riporto a 0 l'indice
  95. }
  96.  
  97. }while(!riporto);///il programma continuerà finche non c'è un riporto finale, in caso di riporto finale il programma sarà andato in overflow
  98.  
  99. if(riporto)
  100.     cout<<endl<<"il contatore e' andato in overflow"<<endl<<"il numero generato in base"<<base<<" e': 1";   ///messggio utente
  101. for(i=0;i<=lenTot;i++)cout<<num1[i];                                                                        ///mostra il numero finale
  102.  
  103. return 0;
  104. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement