Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - convertitore bin/dec
Forum - C/C++ - convertitore bin/dec

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
ikim (Normal User)
Newbie


Messaggi: 8
Iscritto: 25/05/2012

Segnala al moderatore
Postato alle 0:25
Venerdì, 25/05/2012
Salve a tutti, nuovo utente qui per rompervi :)

Oggi ho voluto provare a realizzare un semplice programma in C;

ammetto di non averlo mai fatto prima, ed ho provato a scriverlo avendo letto documentazione sul c per appena un'ora, quindi mi pare logico che vi siano dei bug...

sostanzialmente dovrebbe effettuare una conversione di base da binario a decimale
http://pastebin.com/YZj2k3RF

ho due problemi, entrambi gravi:

        for (counter = 0; counter == length; counter++) {
            if ((binarystring[counter] != "0") && (binarystring[counter] != "1")) {
                printf("You must enter only the 1 and 0 chars; exiting with errorcode 1\n");
                return 1;
            }
        }

il seguente codice quando è dentro al for non funziona. a dire il vero il compilatore mi ritorna un errore:
warning: comparison between pointer and integer [enabled by default]

ma ho provato anche con il seguente codice, che dovrebbe farmi uscire sempre dal programma con errore

        for (counter = 0; counter == length; counter++) {
            if (0 == 0) {
                printf("You must enter only the 1 and 0 chars; exiting with errorcode 1\n");
                return 1;
            }
        }
ma il programma si ripete bellamente...

il secondo problema è che il risultato del calcolo è totalmente sbagliato...

PM Quote
Avatar
ikim (Normal User)
Newbie


Messaggi: 8
Iscritto: 25/05/2012

Segnala al moderatore
Postato alle 0:45
Venerdì, 25/05/2012
dunque, capito, nel for non devo mettere == ma <=;

rimane il problema di compe comparare due stringhe

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6402
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 0:56
Venerdì, 25/05/2012
Allora ...

1) elimina il vettore bit e tutta il secondo ciclo for perché non servono

2) il primo for deve essere scritto così

Codice sorgente - presumibilmente VB.NET

  1. for (counter = 0; counter < length; counter++) {
  2.    if ((binarystring[counter] != '0') && (binarystring[counter] != '1')) {
  3.       printf("You must enter only the 1 and 0 chars; exiting with errorcode 1\n");
  4.       return 1;
  5.    }
  6. }



3) l'ultimo for deve essere

Codice sorgente - presumibilmente C/C++

  1. decimal=0;
  2.    for (counter = 0; counter < length; counter++) {
  3.       decimal *= 2;
  4.       decimal += (binarystring[counter] - '0');
  5.    }



4) la funzione pow e math.h non servono


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote
Avatar
ikim (Normal User)
Newbie


Messaggi: 8
Iscritto: 25/05/2012

Segnala al moderatore
Postato alle 2:59
Venerdì, 25/05/2012
grazie!

PM Quote
Avatar
ikim (Normal User)
Newbie


Messaggi: 8
Iscritto: 25/05/2012

Segnala al moderatore
Postato alle 11:25
Venerdì, 25/05/2012
allora, ho aggiunto alcune funzionalità al programma, inclusa la conversione da decimale a binario
http://pastebin.com/0RCvewip

./a.out
Program for converting binary numbers in decimal ones, and vice versa. Specify the max length at the command line. Defaults to 1024 bits

Insert 'bin' in order to convert from binary to decimal, 'dec' to convert from decimal to binary and 'exit' to exit: dec
Insert the number to convert, -1 to exit: 4536
The binary for the decimal 4536 is

esatto, vuoto. che ho sbagliato?

altra cosa, se passo come argomento da cli un intero troppo lungo il programma va in segfault

Ultima modifica effettuata da ikim il 25/05/2012 alle 13:17
PM Quote
Avatar
ikim (Normal User)
Newbie


Messaggi: 8
Iscritto: 25/05/2012

Segnala al moderatore
Postato alle 12:57
Venerdì, 25/05/2012
oppure stampa caratteri non stampabili
ma comunque stampa, invece di una stringa di 0 ed 1, caratteri sconosciuti

Ultima modifica effettuata da ikim il 25/05/2012 alle 13:17
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6402
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 13:51
Venerdì, 25/05/2012
Hai sbagliato l'algoritmo di conversione.

In particolare, il numero di cifre del valore in decimale non deve essere usato nella for. Ad esempio, un valore a 3 cifre come

160

non equivale a 3 cifre binarie ma ad 8 ...

Non devi usare una for ma while e convertire finchè il valore iniziale non si azzera.


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote
Avatar
ikim (Normal User)
Newbie


Messaggi: 8
Iscritto: 25/05/2012

Segnala al moderatore
Postato alle 16:11
Venerdì, 25/05/2012
Fatto così
counter = 0;
while(decimal != 0) {
binarystring[counter] = (char)((decimal % 2) - '0');
decimal = decimal / 2;
counter++;
}
binarystring[counter] = '\0';

Ora il numero di caratteri è giusto ma sono ancora caratteri non visualizzabili

Inoltre ho notato che l'if che controlla se la stringa contiene solo
Numeri da risultati random, quando il numeto è lungo ritorna l'errore

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6402
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 16:25
Venerdì, 25/05/2012
Deve essere

+ '0'

e il counter non deve partire da 0 e aumentare altrimenti avrai il numero scritto al contrario. Dovrà partire dalla cifra più a destra e diminuire.

Dato che converti un intero a 32 bit, potrai preparare una stringa di 32 spazi (+ il terminatore NULL) e riempire a partire da counter = 32 decrementandolo


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote
Pagine: [ 1 2 ] Precedente | Prossimo