Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Packed BCD?
Forum - C/C++ - Packed BCD? - Pagina 3

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 17:21
Domenica, 23/02/2014
poi io non dico che non voglio usare o non posso usare ciò che mi dici tu, ma semplicemente non so come usarlo...

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6378
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 18:00
Domenica, 23/02/2014
Allora ricominciamo.

Il problema che devi risolvere prima di tutto è dove inserire i valori BCD.
Se non usiamo né vettori né strutture allora ci rimane una variabile intera a 32 bit che è sufficiente per inserire le 5 cifre BCD + il segno, ma dovremo usare un po' più codice.

Chiama la prima variabile A e la seconda B e azzerale.

Poi, dato che devi eseguire un input che non può avvenire direttamente nel formato BCD, utilizza una variabile per l'input da usare nella scanf.

Puoi partire con questo codice e poi si continua?


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à.
PM Quote
Avatar
perillitommaso (Normal User)
Pro


Messaggi: 186
Iscritto: 28/01/2014

Segnala al moderatore
Postato alle 19:13
Domenica, 23/02/2014
Certo, va bene
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.  
  5.  
  6.  
  7. int main()
  8. {
  9.     int N;
  10.     int A,B;
  11.     A=0;
  12.     B=0;
  13.     /*Leggiamo i due numeri decimali*/
  14.     printf("Inserisci il primo numero in decimale: \n");
  15.     scanf("%d",&A);
  16.     printf("Inserisci il secondo numero in decimale: \n");
  17.     scanf("%d",&B);
  18.  
  19.     return 0;
  20. }


E' così che mi dici si?

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6378
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 20:47
Domenica, 23/02/2014
Non esattamente.

A e B sono i valori in BCD e quindi non vanno nella scanf.

Io pensavo di usare N e seguire questo schema

- input di N con la scanf
- conversione in BCD di N in A
- input di N con la scanf
- conversione in BCD di N in B

La conversione la fai chiamando una funzione apposita del tipo

A = BinToBCD(N);

la prima volte e

B = BinToBCD(N);

la seconda.


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à.
PM Quote
Avatar
pierotofy (Admin)
Guru^2


Messaggi: 6230
Iscritto: 04/12/2003

Segnala al moderatore
Postato alle 23:58
Domenica, 23/02/2014
Testo quotato

Postato originariamente da perillitommaso:
si ma io non ho ancora fatto i vettori :( non so cosa siano ...



Occasione per imparare, su... leggiteli, studiali e vedrai quanto sono utili. :pat:

Non e' che manca la documentazione su internet eh... un po' di iniziativa!


Il mio blog: https://piero.dev
PM Quote
Avatar
perillitommaso (Normal User)
Pro


Messaggi: 186
Iscritto: 28/01/2014

Segnala al moderatore
Postato alle 15:30
Lunedì, 24/02/2014
Postato originariamente da nessuno:

Non esattamente.

A e B sono i valori in BCD e quindi non vanno nella scanf.

Io pensavo di usare N e seguire questo schema

- input di N con la scanf
- conversione in BCD di N in A
- input di N con la scanf
- conversione in BCD di N in B

La conversione la fai chiamando una funzione apposita del tipo

A = BinToBCD(N);

la prima volte e

B = BinToBCD(N);

la seconda.


ecco fatto, non pensavo esistesse una funzione per convertire in BCD:
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.  
  5. int main()
  6. {
  7.     int N;
  8.     int A,B;
  9.     A=0;
  10.     B=0;
  11.     /*Leggiamo i due numeri decimali*/
  12.     printf("Inserisci il primo numero in decimale: \n");
  13.     scanf("%d",&N);
  14.     A = BinToBCD(N);
  15.     printf("Inserisci il secondo numero in decimale: \n");
  16.     scanf("%d",&N);
  17.     B = BinToBCD(N);
  18.     return 0;
  19. }


è così si? Ma adesso quindi se stampo A o B visualizzo il numero N inserito convertito in BCD?

Ultima modifica effettuata da perillitommaso il 24/02/2014 alle 15:32
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6378
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 15:40
Lunedì, 24/02/2014
No Tommaso ... non ci capiamo ...

NON esiste la funzione per convertire.

Quello era solo uno spunto ... il main va bene ma la funzione la devi scrivere tu ...
Comincia a ragionarci e ti dò una mano ...

Codice sorgente - presumibilmente C/C++

  1. int BinToBCD(int n)
  2. {
  3.     int valBCD = 0;
  4.  
  5.     ....
  6.  
  7.  
  8.     return valBCD;
  9. }


Ultima modifica effettuata da nessuno il 24/02/2014 alle 15:42


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à.
PM Quote
Avatar
perillitommaso (Normal User)
Pro


Messaggi: 186
Iscritto: 28/01/2014

Segnala al moderatore
Postato alle 16:01
Lunedì, 24/02/2014
A quindi adesso dobbiamo convertire il numero..
io ho questo gruppo di istruzioni come abbozzo che convertono un numero decimale in binario:
Codice sorgente - presumibilmente Plain Text

  1. while(deci2 !=0)
  2.     {
  3.         bit = deci2 % 2;
  4.         deci2 = deci2 / 2;
  5.         printf("%d\n", bit);
  6.     }


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:
Codice sorgente - presumibilmente Delphi

  1. switch(stringa[i]) //selezione multipla delle consonati maiuscole
  2.            {
  3.              case 'B': stringa[i] = tolower(stringa[i]);//funzione "tolower" che strasforma il carattere in minuscolo
  4.              case 'C': stringa[i] = tolower(stringa[i]);
  5.              case 'D': stringa[i] = tolower(stringa[i]);
  6.              case 'F': stringa[i] = tolower(stringa[i]);
  7.              case 'G': stringa[i] = tolower(stringa[i]);
  8.              case 'H': stringa[i] = tolower(stringa[i]);
  9.              case 'L': stringa[i] = tolower(stringa[i]);
  10.              case 'M': stringa[i] = tolower(stringa[i]);
  11.              case 'N': stringa[i] = tolower(stringa[i]);
  12.              case 'P': stringa[i] = tolower(stringa[i]);
  13.              case 'Q': stringa[i] = tolower(stringa[i]);
  14.              case 'R': stringa[i] = tolower(stringa[i]);
  15.              case 'S': stringa[i] = tolower(stringa[i]);
  16.              case 'T': stringa[i] = tolower(stringa[i]);
  17.              case 'V': stringa[i] = tolower(stringa[i]);
  18.              case 'Z': stringa[i] = tolower(stringa[i]);
  19.              break;
  20.            }


si può fare quello che dico?

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