Oppure

Loading
24/02/14 15:01
perillitommaso
A quindi adesso dobbiamo convertire il numero..
io ho questo gruppo di istruzioni come abbozzo che convertono un numero decimale in binario:
while(deci2 !=0)
    {
        bit = deci2 % 2;
        deci2 = deci2 / 2;
        printf("%d\n", bit);
    }

Ma questo converte tutto il numero come se fosse una normale conversione in binario mentre noi dobbiamo convertire ogni cifra con 4 bit...
forse dovremmo trasformare N in una stringa, indicizzarla e muovere l'indice da sinistra verso destra escludendo il segno e poi fare una selezione multipla con i relativi casi e poi fare una assegnazione all'indice come abbiamo fatto nello scorso programma, che abbiamo convertito le lettere solo che al posto delle lettere mettiamo la conversione in BCD
esempio:
switch(stringa[i]) //selezione multipla delle consonati maiuscole
           {
             case 'B': stringa[i] = tolower(stringa[i]);//funzione "tolower" che strasforma il carattere in minuscolo
             case 'C': stringa[i] = tolower(stringa[i]);
             case 'D': stringa[i] = tolower(stringa[i]);
             case 'F': stringa[i] = tolower(stringa[i]);
             case 'G': stringa[i] = tolower(stringa[i]);
             case 'H': stringa[i] = tolower(stringa[i]);
             case 'L': stringa[i] = tolower(stringa[i]);
             case 'M': stringa[i] = tolower(stringa[i]);
             case 'N': stringa[i] = tolower(stringa[i]);
             case 'P': stringa[i] = tolower(stringa[i]);
             case 'Q': stringa[i] = tolower(stringa[i]);
             case 'R': stringa[i] = tolower(stringa[i]);
             case 'S': stringa[i] = tolower(stringa[i]);
             case 'T': stringa[i] = tolower(stringa[i]);
             case 'V': stringa[i] = tolower(stringa[i]);
             case 'Z': stringa[i] = tolower(stringa[i]);
             break;
           }

si può fare quello che dico?
aaa
24/02/14 16:54
No, il metodo è un altro ma prima dovresti dire se sai usare gli operatori a bit and & e or |
24/02/14 19:04
Guarda ... lasciamo perdere gli operatori & e | e studia questo codice, con le funzioni e un main che convertono un numero, positivo o negativo

void BinToDigits(int n, int *r)
{
	if(n)
	{
		BinToDigits(n/10, r);
		
		*r = *r*16+n%10;
	}
}

void BinToBCD(int bin, int *bcd)
{
	*bcd = 12;

	if(bin<0)
	{
		++(*bcd);

		bin = -bin;
	}

	BinToDigits(bin, bcd);
}

int main()
{
	int val = 12345;  // Prova anche con -12345
	int vbcd = 0;

	BinToBCD(val, &vbcd);

	printf("%X\n", vbcd);

	return 0;
}


Tutto quello che non comprendi lo chiedi ...
25/02/14 14:19
perillitommaso
Ma convertono il numero in BCD? Cosa è r,n e bcd? Comunque non riesco a capire molto eh.. qualche commento sulle istruzioni magari non fa male :rofl:
Ultima modifica effettuata da perillitommaso 25/02/14 14:32
aaa
25/02/14 14:44
Ma convertono il numero in BCD?


Mi sembra evidente.

Il programma, a partire dal main, converte il valore

val

che ho inserito nel codice ma che tu inserirai da tastiera, in un valore bcd in

vbcd

che viene visualizzato dall'ultima printf.


r è una puntatore alla variabile usata per accumulare il risultato BCD della conversione.

n è il valore da convertire, cifra dopo cifra

bcd, come r


- il main chiama la funzione BinToBCD che accetta il valore da convertire e un puntatore ad una variabile inizialmente azzerata che conterrà il risultato
- la BinToBCD imposta il segno BCD del valore da convertire (1100 oppure 1101, ovvero 12 oppure 13) e imposta il valore assoluto del valore da convertire
- viene chiamata la funzione BinToDigits che converte e aggiunge le singole cifre del numero
- la BitToDigits è ricorsiva (chiama sé stessa); trova le singole cifre del valore (con n%10, n/10) e le aggiunge, dalla prima all'ultima, al valore BCD puntato da r


Ah, prego ...
Ultima modifica effettuata da 25/02/14 14:47
25/02/14 15:28
perillitommaso
Io non so come ringraziarti, veramente... adesso dovrei mettere tutto questo nel mio main ... ogni variabile deve essere dichiarata giusto? Tutte di tipo intero? E le funzioni non devono essere precedute dal void? Non ci dovrebbero esserci dei prototipi prima del main? Io faccio così, metto prima il prototipo, poi il main e poi la funzione
aaa
25/02/14 16:24
Va bene ...
25/02/14 16:45
perillitommaso
Solo che adesso mi accorgo che ci siamo dimenticati che nella traccia c'è scritto che dobbiamo fare la somma tra A e B e assegnare poi il risultato a C
aaa