Conversione nei vari sistemi di numerazione

di il
41 risposte

41 Risposte - Pagina 2

  • Re: Conversione nei vari sistemi di numerazione

    Ce l'ho!
    Purtroppo, non potendo "sbattere fuori" dal main() un po' di codice usando le funzioni risulta tutto un po' più contorto del necessario. In tutto (includendo i commenti e qualche segnalazione di condizioni d'errore) mi ritrovo 136 righe! In soldoni...

    1. Presento il menu e ne ricavo un codice numerico che indica l'operazione scelta
    2. In base al codice ottenuto, imposto due valori int che rappresentano la base del valore in ingresso e quella del valore in uscita
    3. Ricevo una stringa in input con fgets(), contenente il valore da convertire
    4. Converto la stringa in un valore numerico vero e proprio, di tipo long, con strtol().
    5. Controllo che la conversione sia riuscita e che il valore sia accettabile
    6. Riconverto il valore in stringa secondo la nuova base di numerazione richiesta
    7. Presento l'esito dell'operazione
  • Re: Conversione nei vari sistemi di numerazione

    Riccardop02 ha scritto:


    procedimento di calcolo
    @Aldo ... è semplicemente la valutazione numerica in base 10 di un valore in un qualsiasi sistema di numerazione posizionale. Basi di informatica.

    Lasciando perdere il # che non ha alcuna importanza, se hai un valore espresso in base b fatto da 3 cifre, tenendo presente la loro posizione numerata da 0 in poi a partire da destra, avrai, ad esempio

    c2 c1 c0 in base b

    equivale a

    c2 * b^2 + c1 * b^1 + c0 * b^0

    Quindi la conversione, ad esempio, da ottale a decimale di

    376

    la fai con

    3 * 8^2 + 7 * 8^1 + 6 * 8^0


    Attenzione! Mentre il simbolo ^ viene comunemente usato per l'elevamento a potenza (brutta abitudine derivante dal BASIC), in C l'operatore ^ significa altro e quindi si deve stare attenti alla corretta sintassi.
  • Re: Conversione nei vari sistemi di numerazione

    oregon ha scritto:


    Mentre il simbolo ^ viene comunemente usato per l'elevamento a potenza (brutta abitudine derivante dal BASIC), in C l'operatore ^ significa altro e quindi si deve stare attenti alla corretta sintassi.
    Sì, per quello dicevo che quelle "formule" non avevano niente a che fare col C.
  • Re: Conversione nei vari sistemi di numerazione

    AldoBaldo ha scritto:


    quella del valore in uscita
    Perché il valore in uscita è sempre int?
    strtol()
    Non conoscono queste funzioni
    in stringa secondo la nuova base di numerazione richiesta
    Quindi l'uscita è una stringa non un int
  • Re: Conversione nei vari sistemi di numerazione

    AldoBaldo ha scritto:


    oregon ha scritto:


    Mentre il simbolo ^ viene comunemente usato per l'elevamento a potenza (brutta abitudine derivante dal BASIC), in C l'operatore ^ significa altro e quindi si deve stare attenti alla corretta sintassi.
    Sì, per quello dicevo che quelle "formule" non avevano niente a che fare col C.
    Non è questo il problema. Hanno a che fare con la questione teorica.
  • Re: Conversione nei vari sistemi di numerazione

    Il "valore" è un valore, quello non cambia cambiando la base di numerazione. Quello che cambia è la sua rappresentazione sotto forma di caratteri/cifre in una stringa che sia leggibile da un comune occhio umano. Così l'intendevo. Poi magari mi son spiegato male.

    Ps: strtol() è una comunissima funzione della libreria standard. In questo caso può risparmiare un po' di passaggi nella fase di lettura. Ma ora mi rileggo le risposte precedenti, casomai mi fosse sfuggito qualcosa.

    PpSs: forse intendevi dire che l'esercizio richiede che quello che fa "implicitamente" strtol() andrebbe fatto esplicitamente?
  • Re: Conversione nei vari sistemi di numerazione

    Sì ... non devono usare funzioni che non conoscono. Devono usare i valori dei singoli elementi del vettore.
  • Re: Conversione nei vari sistemi di numerazione

    oregon ha scritto:


    Dimentica quel # non serve a nulla

    Se sei al primo superiore secondo me non stai cominciando bene cercando soluzioni nei forum.

    Dovresti metterci un po' di passione o l'informatica non fa per te.

    Non ho ancora visto neanche una riga di codice tuo su cui discutere.

    Fino al menu e l'input dei dati dovresti saperla scrivere da solo.

    Ma infatti sono proprio arrivato al punto di chiedere la stringa in input,l'ho anche scritto.
    Non so come procedere alla conversione
  • Re: Conversione nei vari sistemi di numerazione

    Vuoi mostrare il codice?
  • Re: Conversione nei vari sistemi di numerazione

    Visto che devi analizzare una ad una le cifre a partire dall'ultimo carattere della stringa (escludendo l'eventuale '\n'), potresti cominciare con...
    1.  rilevare la lunghezza della stringa immessa (ad esempio, chiamiamola lStr)
    2.  usare la lunghezza come indice da scalare da (lStr-1) a 0
    3.  ad ogni passaggio...
            se il carattere corrente è un cifra "utile"
                procedere alla sua valutazione (con la formula che ti hanno detto)
            altrimenti
                segnalare l'errore e uscire dal ciclo
  • Re: Conversione nei vari sistemi di numerazione

    oregon ha scritto:


    Vuoi mostrare il codice?
    #include <stdio.h>
    
    int main()
    {int risposta;
     int binario;
        printf("Ciao,che conversione vuoi effettuare? \n1 Da binario a decimale \n2 da decimale a binario \n3 da decimale ad esadecimale \n4 da esadecimale a decimale \n5 da binario ad esadecimale \n6 da esadecimale a binario.");
        printf("\nrisposta: ");
        scanf("%d",risposta);
        
        if (risposta==1)
           {printf("Inserisci una stringa di massimo 16 caratteri: ");
           scanf("%d",binario);}
        return 0;
    }
    
    Ora non mi va nemmeno più l'if
  • Re: Conversione nei vari sistemi di numerazione

    AldoBaldo ha scritto:


    Visto che devi analizzare una ad una le cifre a partire dall'ultimo carattere della stringa (escludendo l'eventuale '\n'), potresti cominciare con...
    1.  rilevare la lunghezza della stringa immessa (ad esempio, chiamiamola lStr)
    2.  usare la lunghezza come indice da scalare da (lStr-1) a 0
    3.  ad ogni passaggio...
            se il carattere corrente è un cifra "utile"
                procedere alla sua valutazione (con la formula che ti hanno detto)
            altrimenti
                segnalare l'errore e uscire dal ciclo
    Il fatto è che non ho capito la formula
  • Re: Conversione nei vari sistemi di numerazione

    È una espressione da prima media. Cosa non capisci esattamente? Spiegati.

    Comunque se inserisci il valore in binario non devi utilizzare un int ma una stringa di caratteri.
  • Re: Conversione nei vari sistemi di numerazione

    oregon ha scritto:


    È una espressione da prima media. Cosa non capisci esattamente? Spiegati.

    Comunque se inserisci il valore in binario non devi utilizzare un int ma una stringa di caratteri.

    Non capisco come inserirla in c
  • Re: Conversione nei vari sistemi di numerazione

    Riprendendo il tuo codice e seguendo quel che ti dice Oregon:
    #include <stdio.h>
    
    int main() {
        int risposta;
        char binario[64]; // array di char, non int; 64 e' una quantita' arbitraria
        
        printf("Ciao,che conversione vuoi effettuare? \n1 Da binario a decimale \n2 da decimale a binario \n3 da decimale ad esadecimale \n4 da esadecimale a decimale \n5 da binario ad esadecimale \n6 da esadecimale a binario.");
        printf("\nrisposta: ");
        
        scanf("%d",&risposta); // nota quel "&"
       
        if (risposta==1) {
            printf("Inserisci una stringa di massimo 16 caratteri: ");
            scanf("%s",binario); // nota il "%s", non "%d"
        }
    
        return 0;
    }
    
Devi accedere o registrarti per scrivere nel forum
41 risposte