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 "base" e lunghezza "CLen" entrambe inserite da input
- ///il contatore sommera i numeri inseriti nella base indicata finche esse non potra' piu gestire i riporti
- int main()
- {
- int base=5; ///base del contatore
- int NDieci=0; ///variabile per i numeri immessi
- int NConv[100]; ///array per il numero convertito
- int somma[100]; ///contatore
- int i=0; ///indice
- int CLen=0; ///lunghezza del Contatore
- bool riporto=0; ///inidica se esiste un riporto o meno
- for(i=0;i<=100;i++){NConv[i]=0;somma[i]=0;} ///Dichiarazione vettori di zeri
- ///ciclo per immettere la base senza errori (Disabilitato)
- 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>>CLen; ///immessione di lunghezza 'CLen'
- if(CLen<0)cout<<"Deve essere un numero positivo"<<endl; ///controllo per inserzione della lunghezza del contatore la cui deve essere positiva
- }while(CLen<0);
- CLen--; ///aggiusta la lunghezza inserita
- cout<<"inserisci un numero in base 10"<<endl<<"ogni numero inserito sara convertito in base ("<<base<<") "; ///messaggio utente
- do{
- do{
- cin>>NDieci; ///immessione numero in base 10
- if(NDieci>=pow(base,CLen+1))cout<<endl<<"Errore: utilizzando questo numero il contatore andra' automaticamente in overflow"<<endl<<"Massimo numero utilizzabile: ("<<pow(base,CLen+1)-1<<")"<<endl; ///se il numero in base convertita sfora il numero di cifre del contatrore il programma chiedera' una ri-inserzione
- }while(NDieci>=pow(base,CLen+1));
- ///convertire la base 10 in base '5'
- i=CLen; ///l'array partira' dalla cifra piu significativa
- while(NDieci>0){ ///il ciclo andra' avanti finche il resto dell'operazione non sara' 0
- NConv[i]=NDieci%base; ///mette nel vettore di cifre il risultato del resto della divisione del numero inserito in base selezionata.
- i--; ///diminuisce l'indice per passere alla cifre seguente
- NDieci=NDieci/base; ///il numero iniziale verra diviso per la base per far andare avanti l'operazione
- }
- cout<<"la somma fra il numero inserito e il contatore sara' fatta interamente in base ("<<base<<"):"<<endl<<" ["; ///Messaggio utente
- for(i=0;i<=CLen;i++)cout<<NConv[i]; ///Mostra il numero in base 10 convertito
- cout<<"]+[";
- for(i=0;i<=CLen;i++)cout<<somma[i]; ///mostra la somma corrente
- cout<<"]=";
- while(i>=0){ ///ciclo per sommare i due numeri
- if(NConv[i]+somma[i]+riporto>=base){ ///se il numero prevede un riporto esegue certe istruzioni
- somma[i]=(NConv[i]+somma[i]+riporto)%base; ///mette in "somma" solo il restante della divisione
- riporto = 1; ///porta il numero riportato in questa variabile
- }
- else{ ///se il numero NON prevede un riporto esegue certe istruzioni
- somma[i] = NConv[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 ad altri numeri piu alti
- }
- if(!riporto){
- cout<<"[[";
- for(i=0;i<=CLen;i++){cout<<somma[i];} ///mostra la somma dei numeri inseriti
- cout<<"]]"<<endl<<endl<<"Somma un'altro numero al contatore ";///messaggio utente
- for(i=0;i<=CLen;i++)NConv[i]=0; ///pulisco il vettore per il prossimo numero che verra' inserito
- i=0; ///riporto a 0 l'indice
- }
- }while(!riporto);///il programma continuerà finche non c'è un riporto finale, in caso di riporto finale significa che il contatore non potrà piu gestire un riporto il che significa che il contatore sara' andato in overflow
- cout<<"(il contatore e' andato in overflow, programma finito)";///se c'e' un riporto il programma finisce
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement