Oppure

Loading
22/02/14 19:05
perillitommaso
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ì:
/*Questo programma esegue la somma tra due numeri binari espressi col codice PACKED BCD*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

/*Variabili globali*/
int A,B;


int main()
{
    /*Leggiamo i due numeri decimali*/
    printf("Inserisci il primo numero in decimale: \n");
    scanf("%d",&A);
    printf("Inserisci il secondo numero in decimale: \n");
    scanf("%d",&B);

    return 0;
}

Se non mi sono spiegato bene dite pure.. :hail:
aaa
22/02/14 19:14
nessuno
E come è andato il precedente? Il suggerimento è stato utile?
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à.
22/02/14 19:59
perillitommaso
Certo che si! :D E' stato utilissimo... sai dirmi qualcosa su questo programma?
aaa
22/02/14 20:07
nessuno
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 ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
23/02/14 10:34
perillitommaso
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:
aaa
23/02/14 11:10
nessuno
Mah ... perché 1100 per il positivo?
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à.
23/02/14 11:13
perillitommaso
Perchè lo dice proprio il Packed BCD... è un codice che si fa così... sta proprio scritto sul libro..
aaa
23/02/14 12:12
nessuno
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 ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.