Convertitore dec,bin,ott,hex [C++]

di il
9 risposte

Convertitore dec,bin,ott,hex [C++]

Salve a tutti. Ho scritto un programmino utilissimo per gli sviluppatori che è in grado, come accenna il titolo, di convertire qualsiasi base numerica data da una stringa decimale o il contrario, di convertire un'altra base numerica in decimale
Ecco il codice:
#include <iostream>
#include <cstdlib>
using namespace std;
int main()
{
    int n,x;
    char buffer[32];
    cout << "                          Scegli un metodo di conversione" << endl;
    cout << endl << endl;
    cout << "1)Decimale a Binario" << endl;
    cout << "2)Binario a Decimale" << endl;
    cout << "3)Decimale a Ottale" << endl;
    cout << "4)Ottale a Decimale" << endl;
    cout << "5)Decimale a Esadecimale" << endl;
    cout << "6)Esadecimale a Decimale" << endl;
    cin >> x;
    switch (x)
    {
           case (1):
                cout << "Inserisci un numero decimale da convertire in binario: ";
                cin >> n;
                cout << endl << n << " in binario e': " << itoa(n,buffer,2) << endl;
                break;
           case (2):
                cout << "Inserisci un numero binario da convertire in decimale: ";
                cin >> n;
                cout << endl << n << " in decimale e': " << itoa(n,buffer,10) << endl;
                break;
           case (3):
                cout << "Inserisci un numero decimale da convertire in ottale: ";
                cin >> n;
                cout << endl << n << " in ottale e': " << itoa(n,buffer,8) << endl;
                break;
           case (4):
                cout << "Inserisci un numero ottale da convertire in decimale: ";
                cin >> n;
                cout << endl << n << " in decimale e': " << itoa(n,buffer,10) << endl;
                break;
           case (5):
                cout << "Inserisci un numero decimale da convertire in esadecimale: ";
                cin >> n;
                cout << endl << n << " in esadecimale e': " << itoa(n,buffer,16) << endl;
                break;
           case (6):
                cout << "Inserisci un numero esadecimale da convertire in decimale: ";
                cin >> n;
                cout << endl << n << " in decimale e': " << itoa(n,buffer,10) << endl;
                break;
    }
    system ("pause");
}
Domandina:
Vorrei nascondere il numero che digito da tastiera per scegliere il metodo di conversione...
So che esiste la getcher, ma come viene inserita in questo codice?

9 Risposte

  • Re: Convertitore dec,bin,ott,hex [C++]

    Puoi fare di meglio:

    0) il numero deve poter avere un numero arbitrario di cifre: 123456789012345678901234567890123456789012345678990, ad esempio
    1) la base numerica deve poter essere qualunque numero compreso tra 2 e 64 almeno
    2) la base numerica deve poter essere negativa!
    3) poter usare piu' basi numeriche (60,60,24,30,12: ti ricorda nulla?)
    4) come numero romano (99 -> XCIX)
    5) come parola (99 -> 'novantanove')

    Gia', si possono usare anche i numeri negativi come base per la rappresentazione di un numero!

    Per la questione dell'input da tastiere.
    Il main corretto ha la sequente sintassi:
    
    int main(int argc, char**argv)
    {
       ...
       return 0;
    }
    
    argc e argv non stanno li solo per il bel vedere, ma servono:

    argc: argument count/int, numero di argomenti passati sulla linea di comando. C'e' almeno uno, il path completo del programma
    argv: argument vector/strings vector, un vettore di stringhe, terminato da 0, che sono i parametri passati sulla linea di comando. argv[0] contiene il path del programma.

    Fai un po di esperimenti per capire come funzionano.

    Ad esempio, dovresti poter scrivere

    convert -hex 123456789
    convert -roman 1234567889
    convert -italian 123456789
    convert -b 33 123456789
    convert -b (60,60,24,30,12) 123456789


    Ovvio che non serve supportare tutto
    Ma troverai decisamente interessanti le seguenti conversioni:

    - uso di una base positiva qualunque (almeno per quelle .lt. 64)
    - conversione in parole
    - conversione in numeri romani
  • Re: Convertitore dec,bin,ott,hex [C++]

    Perdonami, sono una testa quadra, non ho capito come argc possa nascondere l'input di tastiera
  • Re: Convertitore dec,bin,ott,hex [C++]

    Ciao,
    per informazioni su argc e argv puoi guardare qui. Altrimenti prova a fare una ricerca su Google e troverai tantissime altre spiegazioni.
  • Re: Convertitore dec,bin,ott,hex [C++]

    Nascondere l'input da tastiera
    
    #ifdef WIN32
    #include <windows.h>
    #else
    #include <termios.h>
    #include <unistd.h>
    #endif
    
    
    void SetStdinEcho(bool enable = true)
    {
    #ifdef WIN32
    	HANDLE hStdin = GetStdHandle(STD_INPUT_HANDLE);
    	DWORD mode;
    	GetConsoleMode(hStdin, &mode);
    
    	if (!enable)
    		mode &= ~ENABLE_ECHO_INPUT;
    	else
    		mode |= ENABLE_ECHO_INPUT;
    
    	SetConsoleMode(hStdin, mode);
    
    #else
    	struct termios tty;
    	tcgetattr(STDIN_FILENO, &tty);
    	if (!enable)
    		tty.c_lflag &= ~ECHO;
    	else
    		tty.c_lflag |= ECHO;
    
    	(void)tcsetattr(STDIN_FILENO, TCSANOW, &tty);
    #endif
    }
    
    Nascondi l'input con
    SetStdinEcho(false);
    
    Lo rendi visibile con
    SetStdinEcho();
    
  • Re: Convertitore dec,bin,ott,hex [C++]

    LightSoul94 ha scritto:


    Perdonami, sono una testa quadra, non ho capito come argc possa nascondere l'input di tastiera
    
    #include <stdio.h>
    
    int main(int argc, char** argv) {
        
        printf("argc=%d\n", argc);
        for(int i=0; i<argc; ++i)
            printf("  argv[%d] = %s\n",i, argv[i]);
        printf("end");
    
        return 0;
    }
    
    Compila il programma e passa diversi parametri da linea di comando.
    Questo e' un programma che si richiama da console, ovviamnete, non ha interfaccia grafica!

    Ad sempio (supponendo che il programma si chiami 'test'):
    test 
    test 1
    test 1 2 3 4 5
    test -hex 12345
    Se era a questo a cui ti stavi riferendo!
  • Re: Convertitore dec,bin,ott,hex [C++]

    Ho trovato un metodo utilizzando sempre la getc
    #include <iostream>
    #include <cstdlib>
    #include <conio.h>
    
    using namespace std ;
    
    int main(  )
    {
     	char ch;
     	cout << "prova\n";
     	do{
    	   	 ch = getch();
    	   	 if( !iscntrl( ch ) )
    	   	 putch ( ' ' );
    	}while( ch != '\r' );
    	cout << ch;
     	system( "PAUSE" );
     	return ( 0 );	
    }
    
    
    Tuttavia mi aspettavo che con questa funzione avessi la possibilità di scegliere il caso senza dover premere invio per forza... dato che sto lavorando con dei numeri mi aspettavo che bastasse semplicemente digitare il numero da tastiera e senza premere invio il programma già lo leggeva.. ma se le mie ricerche sono state corrette questa funzione non si può fare con C++
  • Re: Convertitore dec,bin,ott,hex [C++]

    Per maggiori informazioni sul problema del dover premere invio, puoi guardare qui. Se sei su Windows, questo è un esempio di programma che fa quello che vuoi:
    
    #include <iostream>
    #include <conio.h>
    
    using namespace std;
    
    int main()
    {
        char c = 0;
        cout << "Premere 1 per uscire" << endl;
        do
        {
            c = _getch();
        } while(c != '1');
    
        return 0;
    }
    
    
    Ciao.
  • Re: Convertitore dec,bin,ott,hex [C++]

    Salve a tutti sono nuovo nel forum, qualcuno potrebbe gentilmente dirmi nel primo programma a cosa serve : itoa(n,buffer,16) e char buffer? grazie in anticipo
  • Re: Convertitore dec,bin,ott,hex [C++]

    Non si scrive in thread altrui e vecchi di anni ...

    Crea una nuova discussione e fai le tue domande ... Prima però cerca

    itoa

    su google ...
Devi accedere o registrarti per scrivere nel forum
9 risposte