Convertitore C++ Decimale to Esadecimale senza vettore? Come cappero si fa?

di il
5 risposte

Convertitore C++ Decimale to Esadecimale senza vettore? Come cappero si fa?

Ciao ragazzi devo fare un convertitore C++ che trasformi un numero decimale a esadecimale. Ho già sviluppato un algoritmo che lo fa con il vettore ma senza non ho capito come si fa. Qualcuno potrebbe aiutarmi? Vorrei solo capire come fare non la risposta gentilmente. Grazie Lascio il codice con quello che ho fatto. PS: non ho usato lo switch case perchè a scuola vogliono ancora che nidifichiamo gli if

#include <iostream>
using namespace std;

int main () {
	
	int c=0, n, r;
    char V[100];
	
	cout<<"Inserisci un numero: "<<endl;
	cin>>n;
	
	for (int i=0; n>0; i++ ) {
		
	r=n%16;
	
if (r == 1) {
        V[i] = '1';
    } else {
        if (r == 2) {
            V[i] = '2';
        } else {
            if (r == 3) {
                V[i] = '3';
            } else {
                if (r == 4) {
                    V[i] = '4';
                } else {
                    if (r == 5) {
                        V[i] = '5';
                    } else {
                        if (r == 6) {
                            V[i] = '6';
                        } else {
                            if (r == 7) {
                                V[i] = '7';
                            } else {
                                if (r == 8) {
                                    V[i] = '8';
                                } else {
                                    if (r == 9) {
                                        V[i] = '9';
                                    } else {
                                        if (r == 0) {
                                            V[i] = '0';
					} else {
                                         	if (r == 10) {
                                                V[i] = 'A';
                                            } else {
                                                if (r == 11) {
                                                    V[i] = 'B';
                                                } else {
                                                    if (r == 12) {
                                                        V[i] = 'C';
                                                    } else {
                                                        if (r == 13) {
                                                            V[i] = 'D';
                                                        } else {
                                                            if (r == 14) {
                                                                V[i] = 'E';
                                                            } else {
                                                                if (r == 15) {
                                                                    V[i] = 'F';
	
                                       						   }
                                 						   }
                             						   }
                           						 }
                      						  }
                  					 	 }
                                      }
                               	 }
                             }
                        }
                    }
                }
            }
        }
    }
}	
		n=n/16;
		c++;
		
	}

	cout<<"Il risultato e': "<<endl;
	
	for (int j=c-1; j>=0; j--) {
		
		cout<<V[j];
		
	}
	
}

5 Risposte

  • Re: Convertitore C++ Decimale to Esadecimale senza vettore? Come cappero si fa?

    Senza vettore fai direttamente cout del carattere che memorizzeresti nell'array nel primo for. Se vuoi togliere la piramide di if else (che comunque va bene), allora se r è minore di dieci, stampi r + '0', altrimenti stampi r - 10 + 'A'
    Le stringhe si chiudono con il carattere '\0' (o 0 direttamente), anche se non serve nell'esercizio
  • Re: Convertitore C++ Decimale to Esadecimale senza vettore? Come cappero si fa?

    Messaggio eliminato
  • Re: Convertitore C++ Decimale to Esadecimale senza vettore? Come cappero si fa?

    Weierstrass ha scritto:


    Senza vettore fai direttamente cout del carattere che memorizzeresti nell'array nel primo for. Se vuoi togliere la piramide di if else (che comunque va bene), allora se r è minore di dieci, stampi r + '0', altrimenti stampi r - 10 + 'A'
    Le stringhe si chiudono con il carattere '\0' (o 0 direttamente), anche se non serve nell'esercizio
    Quindi il secondo for lo tolgo? Perchè uscirebbero in output i risultati ma nel verso sbagliato. Non capisco
  • Re: Convertitore C++ Decimale to Esadecimale senza vettore? Come cappero si fa?

    Hai ragione

    Puoi fare così
    
    #include <iostream>
    #include <math.h>
    using namespace std;
    
    int main () {
    	int n, r;
    	bool stampa = false;
    	
    	cout << "Inserisci un numero: " << endl;
    	cin >> n;
    
    	cout << "Il risultato e': " << endl;
    	
    	for (int i = 8 * sizeof(int) - 4;  i >= 0; i -= 4) {
    	    r = (n >> i) & 15;
    	 // equivalente a:
    	 // r = (n / (int)pow(2,i)) % 16;	    
    	    if(r > 0 || i == 0)
    	        stampa = true;
    	    if(stampa)
    	        if(r < 10)
    	            cout << (char)(r + '0');
    	        else
    	            cout << (char)(r - 10 + 'A');	        
    	}
    	
        return 0;
    }
    
    Oppure così:
    
    #include <iostream>
    using namespace std;
    
    void stampa(int n){
        if(n >= 16)
           stampa(n / 16);
            
        int r = n % 16;
        
        if(r < 10)
    	   cout << (char)(r + '0');
        else
    	   cout << (char)(r - 10 + 'A');  
    }
    
    int main () {
    	int n;
    	cout << "Inserisci un numero: " << endl;
    	cin >> n;
    
    	cout << "Il risultato e': " << endl;
    	stampa(n);
    	
        return 0;
    }
    
  • Re: Convertitore C++ Decimale to Esadecimale senza vettore? Come cappero si fa?

    Weierstrass ha scritto:


    Hai ragione

    Puoi fare così
    
    #include <iostream>
    #include <math.h>
    using namespace std;
    
    int main () {
    	int n, r;
    	bool stampa = false;
    	
    	cout << "Inserisci un numero: " << endl;
    	cin >> n;
    
    	cout << "Il risultato e': " << endl;
    	
    	for (int i = 8 * sizeof(int) - 4;  i >= 0; i -= 4) {
    	    r = (n >> i) & 15;
    	 // equivalente a:
    	 // r = (n / (int)pow(2,i)) % 16;	    
    	    if(r > 0 || i == 0)
    	        stampa = true;
    	    if(stampa)
    	        if(r < 10)
    	            cout << (char)(r + '0');
    	        else
    	            cout << (char)(r - 10 + 'A');	        
    	}
    	
        return 0;
    }
    
    Oppure così:
    
    #include <iostream>
    using namespace std;
    
    void stampa(int n){
        if(n >= 16)
           stampa(n / 16);
            
        int r = n % 16;
        
        if(r < 10)
    	   cout << (char)(r + '0');
        else
    	   cout << (char)(r - 10 + 'A');  
    }
    
    int main () {
    	int n;
    	cout << "Inserisci un numero: " << endl;
    	cin >> n;
    
    	cout << "Il risultato e': " << endl;
    	stampa(n);
    	
        return 0;
    }
    
    Ciao, leggo solo ora grazie mille per la risposta. Ho visto e provato i programmi ma erano ancora troppo complessi per come li vuole la professoressa. Ho svolto l'esercizio in maniera differente senza la parte finale e come mi avevi detto tu di mettere in cout. La prof ha detto che va bene in questo modo. Grazie mille dell'aiuto
    
    #include <iostream>
    using namespace std;
    
    int main () {
    	
    	int c=0, n, r;
    	
    	cout<<"Inserisci un numero: "<<endl;
    	cin>>n;
    	
    	cout<<"Il risultato e': "<<endl;
    	
    	for (int i=0; n>0; i++ ) {
    		
    	r=n%16;
    	
    if (r == 1) {
            cout<<1;
        } else {
            if (r == 2) {
                cout<<2;
            } else {
                if (r == 3) {
                    cout<<3;
                } else {
                    if (r == 4) {
                        cout<<4;
                    } else {
                        if (r == 5) {
                            cout<<5;
                        } else {
                            if (r == 6) {
                                cout<<6;
                            } else {
                                if (r == 7) {
                                    cout<<7;
                                } else {
                                    if (r == 8) {
                                        cout<<8;
                                    } else {
                                        if (r == 9) {
                                            cout<<9;
                                        } else {
                                            if (r == 0) {
                                                cout<<0;
    											} else {
                                             	if (r == 10) {
                                                    cout<<"A";
                                                } else {
                                                    if (r == 11) {
                                                        cout<<"B";
                                                    } else {
                                                        if (r == 12) {
                                                            cout<<"C";
                                                        } else {
                                                            if (r == 13) {
                                                                cout<<"D";
                                                            } else {
                                                                if (r == 14) {
                                                                    cout<<"E";
                                                                } else {
                                                                    if (r == 15) {
                                                                        cout<<"F";
    	
                                           						   }
                                     						   }
                                 						   }
                               						 }
                          						  }
                      					 	 }
                                          }
                                   	 }
                                 }
                            }
                        }
                    }
                }
            }
        }
    }	
    		n=n/16;
    		c++;
    		
    	}
        
    	cout<<" - Attenzione: il numero va letto da destra a sinistra!- "<<endl;
    	
    }
    
Devi accedere o registrarti per scrivere nel forum
5 risposte