Conversione nei vari sistemi di numerazione

di il
41 risposte

41 Risposte - Pagina 3

  • Re: Conversione nei vari sistemi di numerazione

    Però non hai corretto l'input dell'int con una stringa. L'ha dovuto fare Aldo. Rispondi con mezze frasi senza tentare di far un ragionamento.

    Se non hai alcuna idea di quello che fai non ti rimane che studiare e non attendere che qualcuno lo scriva al posto tuo. Sei al primo anno, chiedi al professore e datti da fare altrimenti la vedo dura per te.
  • Re: Conversione nei vari sistemi di numerazione

    AldoBaldo ha scritto:


    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;
    }
    

    Grazie mille,fin qui,anche se con qualche errore,ci ero arrivato. Non capisco invece la formula per convertirlo in decimale:
    so fare la conversione con carta e penna ma non in c
  • Re: Conversione nei vari sistemi di numerazione

    Eh, era "qualche errore" che rendeva il tuo codice inutilizzabile, però! Occhio!

    Per la conversione, se sai farla "nel mondo reale" sai farla anche in quello virtuale. Prova a mettere insieme un bel ciclo "for" che segua la linea che ti ho suggerito, magari funziona.
    1.  rileva la lunghezza della stringa immessa (ad esempio, chiamiala lStr)
    2.  usa la lunghezza come indice da scalare da (lStr-1) a 0
    3.  ad ogni passaggio...
            se il carattere corrente è un cifra "utile"
                procedi alla sua valutazione (con la formula che ti hanno detto)
            altrimenti
                segnala l'errore e esci dal ciclo
    "for" prevede tre parti: una inizializzazione, una verifica di condizioni d'uscita o proseguimento del ciclo, e un'operazione (o serie di operazioni) che preceda il ciclo successivo. Se conosci il costrutto, puoi provare a usarlo immaginando di replicare con quello i passaggi che applichi nel procedimento sulla carta.
  • Re: Conversione nei vari sistemi di numerazione

    so fare la conversione con carta e penna ma non in c
    Cioè ? Spiega come lo fai con carta e penna
  • Re: Conversione nei vari sistemi di numerazione

    oregon ha scritto:


    so fare la conversione con carta e penna ma non in c
    Cioè ? Spiega come lo fai con carta e penna
    moltiplico ogni cifra della stringa per le potenze di 2 e poi sommo tutto
  • Re: Conversione nei vari sistemi di numerazione

    E quindi, comincia ad estrarre la prima cifra dalla stringa. Come si fa?
  • Re: Conversione nei vari sistemi di numerazione

    oregon ha scritto:


    E quindi, comincia ad estrarre la prima cifra dalla stringa. Come si fa?
    Dovrei andare con un contatore con -1,credo.
    Così parte dall'ultima cifra
  • Re: Conversione nei vari sistemi di numerazione

    L'ultima cifra ha indice 0 nel vettore di char
  • Re: Conversione nei vari sistemi di numerazione

    AldoBaldo ha scritto:


    Eh, era "qualche errore" che rendeva il tuo codice inutilizzabile, però! Occhio!

    Per la conversione, se sai farla "nel mondo reale" sai farla anche in quello virtuale. Prova a mettere insieme un bel ciclo "for" che segua la linea che ti ho suggerito, magari funziona.
    1.  rileva la lunghezza della stringa immessa (ad esempio, chiamiala lStr)
    2.  usa la lunghezza come indice da scalare da (lStr-1) a 0
    3.  ad ogni passaggio...
            se il carattere corrente è un cifra "utile"
                procedi alla sua valutazione (con la formula che ti hanno detto)
            altrimenti
                segnala l'errore e esci dal ciclo
    "for" prevede tre parti: una inizializzazione, una verifica di condizioni d'uscita o proseguimento del ciclo, e un'operazione (o serie di operazioni) che preceda il ciclo successivo. Se conosci il costrutto, puoi provare a usarlo immaginando di replicare con quello i passaggi che applichi nel procedimento sulla carta.



    sto provando a scrivere il codice
    #include <stdio.h>
    
    int main() {
        int risposta;
        char binario[64]; 
        int lStr; //lunghezza della stringa
        
        
        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("%s",binario); 
        }
        for (lStr=16;lStr<17;lStr=lStr-1) 
        { if (binario==0) {
          
        }
    
        }
        
         
    
    
        return 0;
    }

    Ma mi son bloccato dopo il secondo if,quando in pratica dovrei vedere che se è 0 devo passare avanti,mentre se è 1 devo moltiplicare per le potenze di 2.
    Ho fatto questo ragionamento,ora non so se è giusto
  • Re: Conversione nei vari sistemi di numerazione

    Sei fuori strada... usi una sintassi che per il C è fuorviante, dunque il codice non può funzionare o, almeno, non può fare quel che tu vorresti fargli fare. Ad esempio...

    1. quel binario==0 non significa quel che intenderesti tu, e magari fa pure inquietare il compilatore (potresti ricevere dei messaggi d'errore)! forse intendevi binario[lStr]==0, cioè "il carattere che sta alla posizione lStr dell'array binario[] è la cifra zero", ma neanche così sarebbe andato bene, perché avresti dovuto scrivere binario[lStr]=='0'... la vedi la differenza?

    2. il for è disperatamente "scombinato" -- se parti da 16 e riduci di 1 ad ogni passaggio, non arriverai mai a 17, per cui ti ritroverai in un ciclo infinito che "gelerà" il programma
  • Re: Conversione nei vari sistemi di numerazione

    Ora spengo, quindi non risponderò oltre fino a domani. Ciao, e buona fortuna!
  • Re: Conversione nei vari sistemi di numerazione

    Cioè

    for (lStr=16;lStr<17;lStr=lStr-1)

    tu conti partendo da 16 al contrario 15 14 ... quando arrivi ad un valore maggiore di 17 ?
Devi accedere o registrarti per scrivere nel forum
41 risposte