Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2014
    Messaggi
    35

    [c++] funzione che legge un binario da tastiera e lo stampa in decimale

    Ciao ragazzi,
    ho un piccolo problema, con l'esercizio descritto da titolo, il mio problema è questo, per trasformare un binario da decimale dovrei considerare l'elemento più a destra diverso da 0 del numero binario ed elevarlo a potenza a seconda della sua posizione.
    es : 1001 = 1+8=9;
    or dunque sapendo il ragionamento dovrei essere in grado di trasformarlo in un programma c++, ma come faccio in una variabile intera a riferirmi all'elemento più a destra??? senza naturalmente trasformare la mia variabile in un array/vettore???se non con il codice che è abbastanza inutile potreste darmi degli input in pseudocodice??

  2. #2
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,589
    codice:
    var:
      numero <- 0
      tmp
    
    loop:
      tmp <- cifra binaria
      se tmp != cifra binaria allora end
      numero <- numero * 2 + tmp
      loop
    end:
      stampa numero
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2014
    Messaggi
    35
    Quote Originariamente inviata da Scara95 Visualizza il messaggio
    codice:
    var:
      numero <- 0
      tmp
    
    loop:
      tmp <- cifra binaria
      se tmp != cifra binaria allora end
      numero <- numero * 2 + tmp
      loop
    end:
      stampa numero
    grazie ma penso di non aver bene interpretato il tuo pseudo codice ho provato a seguirti ma ho scritto una cosa insensata come questa
    codice:
    #include <iostream>
    using namespace std;
    int main (int argc, char * const argv[]) {
        int binary;
        int n=0;
        int tmp;
        cin>>binary;
        while (n<binary) {
            tmp=binary;
            if (tmp!=binary){
                n=n*2+tmp;
                n=n+1;}
        }
        cout<<n;
        return 0;
    }
    e non ha veramente senso.
    Ultima modifica di enrico92; 09-04-2014 a 20:28

  4. #4
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,589
    codice:
    #include <iostream>
    using namespace std;
    int main (int argc, char * const argv[]) {
        int binary;
        int n=0;
        char tmp;
        while (true) {
            cin >> tmp;
            tmp = tmp-'0';
            if (tmp!=0 && tmp!=1){
                break;
            } else {
                n = n*2+tmp;
            }
        }
        cout<<n;
        return 0;
    }
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

  5. #5
    Utente di HTML.it
    Registrato dal
    Feb 2014
    Messaggi
    35
    ok grazie funziona, ma il ragionamento mi resta ignoto, sono proprio duro, praticamente usi tmp ovvero il binario che devo inserire come char, (fino a quando non inserisco un carattere infatti il programma non va avanti), cancelli poi il carattere nullo, metti una condizione per assicurarti che il valore inserito sia un binario, e poi fai n=n*2+tmp perchè?? scusa ma lo devo proprio capire se no veramente non mi sento soddisfatto. potresti spiegarmi il codice e il ragionamento questa volta in semplice lingua italiana. grazie mille per la pazienza.

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Un valore binario è scritto come sequenze di 1 e 0 come nel tuo esempio 1001

    Partendo da n = 0 inserirai

    1 -> n = 0*2 + 1 ... n = 1
    0 -> n = 1*2 + 0 ... n = 2
    0 -> n = 2*2 + 0 ... n = 4
    1 -> n = 4*2 + 1 ... n = 9

    e quindi n = 9
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,589
    se hai un numero di tipo 1001 puoi convertirlo in decimale così:
    n = 1*2^3 + 0*2^2 + 0*2 + 1
    che puoi scrivere come
    codice:
    n = 2 * (1*2^2 + 0*2 + 0) + 1
    n = 2 * (2 * (1*2 + 0) + 0) + 1
    n = 2 * (2 * (2 * (1) + 0) + 0) + 1
    n = 2 * (2 * (2 * (2 * (0) + 1) + 0) + 0) + 1
        n4  n3   n2   n1   n0
    n0 = 0
    n1 = 2 * n0 + 1
    n2 = 2 * n1 + 0
    n3 = 2 * n2 + 0
    n4 = 2 * n3 + 1

    Che sono esattamente i passaggi che avvengono in esecuzione
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

Tag per questa discussione

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.