Oppure

Loading
24/05/12 22:25
ikim
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
pastebin.com/…

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...
aaa
24/05/12 22:45
ikim
dunque, capito, nel for non devo mettere == ma <=;

rimane il problema di compe comparare due stringhe
aaa
24/05/12 22:56
Allora ...

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

2) il primo for deve essere scritto così

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


3) l'ultimo for deve essere

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


4) la funzione pow e math.h non servono
25/05/12 0:59
ikim
grazie!
aaa
25/05/12 9:25
ikim
allora, ho aggiunto alcune funzionalità al programma, inclusa la conversione da decimale a binario
pastebin.com/…

./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 25/05/12 11:17
aaa
25/05/12 10:57
ikim
oppure stampa caratteri non stampabili
ma comunque stampa, invece di una stringa di 0 ed 1, caratteri sconosciuti
Ultima modifica effettuata da ikim 25/05/12 11:17
aaa
25/05/12 11:51
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.
25/05/12 14:11
ikim
Fatto così
counter = 0;
while(decimal != 0) {
binarystring[counter] = (char)((decimal % 2) - '0');
decimal = decimal / 2;
counter++;
}
binarystring[counter] = 'Fatto così
counter = 0;
while(decimal != 0) {
binarystring[counter] = (char)((decimal % 2) - '0');
decimal = decimal / 2;
counter++;
}
binarystring[counter] = '{parsed_message}';

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

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
aaa