Mia personale visione di quale sia la struttura migliore per gestire
un apaNum (nome fittizio). Tutti gli esempi sono in base 10 per
semplicità.
4 campi:
char *fd;
char *md;
char *ld;
long dim;
fd = first digit
md = middle digit
ld = last digit
dim = dimension
L'idea di fondo è che numeri con la virgola e interi vengono gestiti
con la stessa struttura.
Nello specifico:
- fd punta all'area di memoria allocata di dim char, ed anche il
puntatore alla cifra più significativa del numero. (es. 102,56 fd
punta a 1)
- md punta alla cifra "centrale" anche se non è proprio quella che sta
in mezzo ma quella delle unità (es. 102,56, md punta a 2)
- ld punta alla cifra meno significativa del numero (102,56 allora punta a 6)
Nel caso di numeri interi:
-ld punta allo stesso elemento di md
Perchè usare questo sistema?
- in C si possono fare dei bellissimi algoritmi usando puntatori che
puntano a zone diverse dello stesso array.
- si possono fare conti tra numeri interi e con la virgola senza
problemi (per fare somme e differenze basta allineare correttamente i
numeri, cioè sommare decine con decine ecc., mentre per i prodotti
basta ricalcolare la posizione della virgola e per la divisione basta
moltiplicare per un apposito fattore del tipo 100^x)
- problemi non ne vedo, qui ti do solo un idea generale perché so che
tu sei esperto nel trovare i problemi (e non è una critica! Anzi
magari li vedessi anch'io subito i problemi mi sarei evitato molto
spesso delle inutili perdite di tempo, ma invece sono troppo ottimista
e parto in quarta)
Non so se capirai qualcosa perché alla fine non ho scritto molto, ma
non voglio confonderti con le mie idee che magari poi non sono anche
le migliori.
Ci sarebbe anche una questione sul come calcolare il numero di cifre
del numero perché ci son 2 modi quasi equivalenti:
- aggiungere un campo len che come dice il nome tiene in memoria il
numero di cifre significative del numero.
- calcolarlo ogni volta che serve come fd-ld (o viceversa?)
|