Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Packed BCD?
Forum - C/C++ - Packed BCD?

Pagine: [ 1 2 3 4 5 6 ] Precedente | Prossimo
Avatar
perillitommaso (Normal User)
Pro


Messaggi: 186
Iscritto: 28/01/2014

Segnala al moderatore
Postato alle 20:05
Sabato, 22/02/2014
Ciao a tutti ragazzi, ho avuto una nuova traccia dal professore:
Realizzare un software che:
-acquisice due numeri interi memorizzandoli nelle variabili A e B espressi secondo il codice Packed  BCD 5 cifre con segno
-ne effettua la somma algebrica memorizzandola nel numero C( anch'esso BCD)
visualizzare il risultato

Allora io non so veramente da dove iniziare ahahah però ho tanta buona volontà di farlo.. entro venerdì prossimo dovrò fare qualcosa anche perchè oltre a scrivere proprio il programma devo fare una analisi scritta ( algoritmo ecc). Allora iniziando dall'argomento, ho studiato in TDP il packed BCD quindi so perfettamente che consiste nel mettere il segno
+1100
- 1101
prima della configurazione binaria, il problema, utilizzare delle variabili di tipo char? anche perchè in qualche modo dobbiamo convertire poi i numeri decimali arrivati via input e per questa cosa ho pensato di fare una selezione multipla per esempio nel caso ci fosse 1, si converte in 0001 e così per tutte le cifre decimali, poi magari con una funzione unire tutte le stringhe per ottenere un'unico numero binario e alla fine aggiungere il segno a seconda del numero decimale inserito e quindi fare una condizione. Poi per la somma, conviene fare la somma decimale e poi convertire il risultato in binario, anch'esso con lo stesso procedimento di prima... voglio utilizzare le procedure anche per facilitare un pò il programma..
il mio problema è che non so proprio da dove partire ahaha qualcuno mi da una mano? Vi ringrazio tanto!
Il mio codice sorgente inizialmente è così:
Codice sorgente - presumibilmente C++

  1. /*Questo programma esegue la somma tra due numeri binari espressi col codice PACKED BCD*/
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <string.h>
  5.  
  6. /*Variabili globali*/
  7. int A,B;
  8.  
  9.  
  10. int main()
  11. {
  12.     /*Leggiamo i due numeri decimali*/
  13.     printf("Inserisci il primo numero in decimale: \n");
  14.     scanf("%d",&A);
  15.     printf("Inserisci il secondo numero in decimale: \n");
  16.     scanf("%d",&B);
  17.  
  18.     return 0;
  19. }


Se non mi sono spiegato bene dite pure.. :hail:

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 5461
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 20:14
Sabato, 22/02/2014
E come è andato il precedente? Il suggerimento è stato utile?


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
PM Quote
Avatar
perillitommaso (Normal User)
Pro


Messaggi: 186
Iscritto: 28/01/2014

Segnala al moderatore
Postato alle 20:59
Sabato, 22/02/2014
Certo che si! :D E' stato utilissimo... sai dirmi qualcosa su questo programma?

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 5461
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 21:07
Sabato, 22/02/2014
Ah ... non avevi dato un feedback e non si era capito ...

Per il problema, quando parli di "codice Packed BCD" ok, ma perché "5 cifre con segno" ?


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
PM Quote
Avatar
perillitommaso (Normal User)
Pro


Messaggi: 186
Iscritto: 28/01/2014

Segnala al moderatore
Postato alle 11:34
Domenica, 23/02/2014
Non lo so sai, il mio professore non tanto si sa esprimere .. io comunque penso che dovremmo fare così: ogni cifra decimale corrisponde a 4 simboli in BCD, quindi dovremmo convertire ogni cifra decimale in binario esempio:
18 decimale corrisponde a 0001 1000 poi alla fine aggiungiamo il segno, in questo caso 18 è positivo quindi 1100 e la stringa binaria diventa: 0001 1000 1100, mi sono spiegato? :hail:

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 5461
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 12:10
Domenica, 23/02/2014
Mah ... perché 1100 per il positivo?


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
PM Quote
Avatar
perillitommaso (Normal User)
Pro


Messaggi: 186
Iscritto: 28/01/2014

Segnala al moderatore
Postato alle 12:13
Domenica, 23/02/2014
Perchè lo dice proprio il Packed BCD... è un codice che si fa così... sta proprio scritto sul libro..

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 5461
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 13:12
Domenica, 23/02/2014
Ok ... corretto.

Quindi, ricapitolando, l'esercizio prevede due valori BCD Packed a 5 cifre con segno che dovrai rappresentare con 3 byte, fatti così

1 byte   4 bit per il segno + 4 bit per la cifra 1
1 byte   4 bit per la cifra 2 + 4 bit per la cifra 3
1 byte   4 bit per la cifra 3 + 4 bit per la cifra 5

Ti consiglio di rappresentare il tuo numero con un vettore di 3 unsigned char.

Parti dalla definizione di un tipo byte

typedef unsigned char byte;

e poi i valori BCD saranno inseriti nelle variabili

byte A[3], B[3], C[3];

Ovviamente non potrai usare direttamente la scanf con le variabili A e B dato che il formato BCD non è trattato dalla scanf. Dovrai quindi prevedere due variabili di appoggio intere per le scanf

int var1, var2;

e poi una funzione che trasformi i valori da var1 (decimale) ad A[] (BCD packed con segno) e da var2 a B[]

Con questa premessa dovrai provare a scrivere questa funzione


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
PM Quote
Avatar
perillitommaso (Normal User)
Pro


Messaggi: 186
Iscritto: 28/01/2014

Segnala al moderatore
Postato alle 13:37
Domenica, 23/02/2014
si ma io non ho ancora fatto i vettori :( non so cosa siano ... e comunque, il numero DECIMALE inserito non deve essere per forza composto da 5 cifre, posso inserire 1, ma posso anche inserire 500 o 50 o 3000, capisci? Parlo sempre di numero decimale .. io penso che ho bisogno di due variabili di tipo intero che leggano il numero decimale e quindi A e B, poi altre due variabili di tipo char che corrispondono ad a e b che avranno il valore decimale di A e B convertito in binario poi per la somma, fare la somma decimale prima, associarla a C, creare un'altra variabile c che abbia poi il valore decimale di C ma convertito in binario e poi stampare c. Penso male?

PM Quote
Pagine: [ 1 2 3 4 5 6 ] Precedente | Prossimo