PDA

Visualizza la versione completa : [C] Convertitore decimale a binario


LightSoul94
04-06-2012, 00:37
#include <stdio.h>
#include <stdbool.h>
main()
{
int dec,bin1,bin2,bin3,bin4;
char scelta,s,S;
do
{
printf("------------------------------------------------------------------");
printf("Inserire il numero decimale da convertire in binario:");
scanf("%d",&dec);

{
if(dec%2==0)
bin1=0;
printf("%d\t",bin1);
else
if(dec%2==1)
dec=dec-1;
bin1=1;
printf("%d\t",bin1);
dec=dec/2;
}
{
if(dec%2==0)
bin2=0;
printf("%d\t",bin2);
else
if(dec%2==1)
dec=dec-1;
bin2=1;
printf("%d\t",bin2);
dec=dec/2;
}
{
if(dec%2==0)
bin3=0;
printf("%d\t",bin3);
else
if(dec%2==1)
dec=dec-1;
bin3=1;
printf("%d\t",bin3);
dec=dec/2;
}
{
if(dec%2==0)
bin4=0;
printf("%d\t",bin4);
else
if(dec%2==1)
dec=dec-1;
bin4=1;
printf("%d\t",bin4);
dec=dec/2;
printf("\n");
}
printf("Riavviare il programma?\n");
scelta=getch();
}
while((scelta=='s')||(scelta=='S'));
}

Volevo verificare se è possibile farlo in C, io ho iniziato a fare il programma in questo modo, ma non riesco a capire come mai non mi parte (Lo so che non posso mettere un else dopo due direttive ma solo da una)
Sto impazzendo! :dhò:



OutTopic:L'altra volta quando vi ho chiesto del ciclo do avevate ragione era una sciocchezza, una sciocchezza che il prof si era dimenticato di spiegare, ad ogni modo vi do ragione, in fondo è scocciante stare dietro ad un principiante a ripetere le sciocchezze più assurde, vi do ragione e chiedo scusa per questo breve OutTopic.

oregon
04-06-2012, 01:18
Ma perché non utilizzi i cicli per la conversione?

E poi guarda che il codice che vuoi eseguire per una if va racchiusa tra parentesi



if(...)
{
...
}
else
{
...
}

infinitejustice
04-06-2012, 14:18
...per capirci, vorresti creare una funzione che, dato un intero, lo traduce nella corrispondente sequenza binaria di 0 ed 1¿



extern void dec2bin(unsigned int, char *);

void dec2bin(unsigned int inp, char *bin){
int i, *p = &inp;
for(i = 8*sizeof(inp)-1; i >= 0; i--)
*(bin+i) = (*p>>i)&1;
}

int k = 0;
for(; k < 10; k++){
int j, nr = rand()%1000;
char *bin = (char *)calloc(32, sizeof(char));
dec2bin(nr, bin);
printf("%d\t");
for(j = 31; j >= 0; j--)
printf("%d", *(bin + j));
printf("\n");
}

383 00000000000000000000000101111111
886 00000000000000000000001101110110
777 00000000000000000000001100001001
915 00000000000000000000001110010011
793 00000000000000000000001100011001
335 00000000000000000000000101001111
386 00000000000000000000000110000010
492 00000000000000000000000111101100
649 00000000000000000000001010001001
421 00000000000000000000000110100101


Robaccia dell'esame di architettura degli elaboratori...

oregon
04-06-2012, 14:30
Originariamente inviato da infinitejustice
Robaccia dell'esame di architettura degli elaboratori...

Sì ... ma il codice di LightSoul94 ha problemi ben più gravi che denotano problematiche di base ...

LightSoul94
05-06-2012, 16:33
Originariamente inviato da oregon
Sì ... ma il codice di LightSoul94 ha problemi ben più gravi che denotano problematiche di base ...
ahahah già xD ad ogni modo complimenti per l'idea sul while non ci avevo pensato, mi butto subito nella costruzione dell'algoritmo ;)

LightSoul94
05-06-2012, 17:57
C'è l'ho fatta ;) :fighet:
ora vorrei sapere cosa intendevi con ciclo perché col while mi usciva la "stringa infinita"...











#include <stdio.h>
#include <stdbool.h>
main()
{
int dec,bin1,bin2,bin3,bin4;
char scelta,s,S;
do
{
printf("--------------------------------------------------------------------------------");
printf("Inserire il numero decimale da convertire in binario:");
scanf("%d",&dec);
{
if(dec%2==0)
{
bin1=0;
dec=dec/2;
}
else
if(dec%2==1)
{
bin1=1;
dec=dec-1;
dec=dec/2;
}
}
{
if(dec%2==0)
{
bin2=0;
dec=dec/2;
}
else
if(dec%2==1)
{
bin2=1;
dec=dec-1;
dec=dec/2;
}
}
{
if(dec%2==0)
{
bin3=0;
dec=dec/2;
}
else
if(dec%2==1)
{
bin3=1;
dec=dec-1;
dec=dec/2;
}
}
{
if(dec%2==0)
{
bin4=0;
dec=dec/2;
}
else
if(dec%2==1)
{
bin4=1;
dec=dec-1;
dec=dec/2;
}
}
printf("%d %d %d %d",bin4,bin3,bin2,bin1);
printf("\n");
printf("Riavviare il programma?\n");
scelta=getch();
}
while((scelta=='s')||(scelta=='S'));
}

oregon
05-06-2012, 18:32
No ... non ce l'hai fatta .... non hai capito ... l'hai visto il codice che ti ha mostrato infinitejustice?

Ti sembra che ci siano tutte quelle if tutte eguali ?

LightSoul94
05-06-2012, 18:34
Originariamente inviato da oregon
No ... non ce l'hai fatta .... non hai capito ... l'hai visto il codice che ti ha mostrato infinitejustice?

Ti sembra che ci siano tutte quelle if tutte eguali ?
Ma come a me gira o_O hai provato a testarlo? a me funziona!

oregon
05-06-2012, 18:35
Non è questione di girare o non girare ... potevi farlo anche di duemila righe e girava lo stesso, ma le duemila righe non erano giustificate ...

LightSoul94
05-06-2012, 18:38
ok vabene scs se non ho fatto a modo tuo :jam:

Loading