From: Davide Z. <dav...@gm...> - 2009-07-08 08:02:57
|
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?) |