Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <cstdlib>
- #include <iostream>
- #include <cmath>
- using namespace std;
- ///codice che crea un contatore di base "X" e lunghezza "N" entrambe inserite da input
- int main()
- {
- int base=0, numten=0, inv[100],num1[100],somma[100],i=0,lenTot=0;
- bool riporto=0;
- for(i=-2;i<=100;i++)inv[i]=0; ///
- for(i=-2;i<=100;i++)num1[i]=0; ///Dichiarazione vettori NB: in alcune versioni del compilatore questo passaggio non è necessario
- for(i=-2;i<=100;i++)somma[i]=0; ///
- i=0;
- ///ciclo per immettere la base senza errori
- do{
- cout<<"Inserisci la Base in cui vuoi immettere i numeri"<<endl; ///Messaggio utente
- cin>>base; ///Immessione di base 'base'
- if(base<2 || base>10)cout<<"La base e' compresa solo fra 2 e 10"<<endl; ///controllo per inserzione di base (2<base<10)
- }while(base<2 || base>10);
- ///immette la lunghezza del contatore
- do{
- cout<<"Immetti la lunghezza del contatore"<<endl; ///messaggio utente
- cin>>lenTot; ///immessione di lunghezza 'lenTot'
- if(lenTot<0)cout<<"Deve essere un numero positivo"<<endl; ///controllo per inserzione di lunghezza (len>0)
- }while(lenTot<0);
- lenTot--;///il vettore parte da 0
- 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
- do{
- cin>>numten; ///immessione numero in base 10 numten
- ///convertire la base 10 in base 'base'
- while(numten>1){
- inv[i]=numten%base; ///mette nel vettore di cifre il risultato "numero immesso modulo base selezionata".
- i++; ///aumenta l'indice per passere al prossimo numero della base
- numten=numten/base; ///il numero iniziale verra diviso per la base per far andare avanti l'operazione
- }
- 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
- if(inv[i]==0)i--;
- while(i>=0){ ///ribaltamento vettore
- 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
- i--; ///decremento indice fino a che il contatore è maggiore o uguale '0'
- }
- cout<<"Il numero Sommato al contatore sara': "; ///Messaggio utente
- for(i=0;i<=lenTot;i++)cout<<num1[i]; ///Mostra il numero convertito informando l'utente che numero sara aggiunto al contatore
- cout<<endl;
- i--;
- while(i>=0){ ///ciclo per sommare i due numeri
- if(num1[i]+somma[i]+riporto>=base){ ///se il numero prevede un riporto esegue certe istruzioni
- somma[i]=(num1[i]+somma[i]+riporto)%base; ///mette in "somma" solo il restante
- riporto = 1; ///porta il numero riportato in questa variabile
- }
- else{ ///se il numero NON prevede un riporto esegue certe istruzioni
- somma[i] = num1[i]+somma[i]+riporto; ///somma il numero inserito la somma stessa e il riporto nella somma
- riporto = 0; ///non c'e nessun riporto e se c'era e' stato messo nel numero precedente
- }
- i--; ///decremento indice per passare ai numeri piu alti
- }
- i=0; ///porta il numero da "-1" a "0"
- 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
- else cout<<"il contatore è andato in overflow di";///se c'e' un riporto il programma finisce
- while(i<=lenTot){
- cout<<somma[i]; ///mostra sia la somma che l'overflow del programma quando occorre
- i++; ///incrementa
- }
- if(!riporto){
- cout<<endl<<endl<<"inserisci un altro numero"<<endl;///messaggio utente
- for(i=0;i<=lenTot;i++)num1[i]=0; ///pulisco il vettore per il prossimo numero che verrà inserito
- i=0; ///riporto a 0 l'indice
- }
- }while(!riporto);///il programma continuerà finche non c'è un riporto finale, in caso di riporto finale il programma sarà andato in overflow
- if(riporto)
- cout<<endl<<"il contatore e' andato in overflow"<<endl<<"il numero generato in base"<<base<<" e': 1"; ///messggio utente
- for(i=0;i<=lenTot;i++)cout<<num1[i]; ///mostra il numero finale
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement