Newsgroup: it.comp.hardware.palmari
Titolo: Palm Programming: Conversione intero-stringa...

Per convertire un numero intero in una stringa ho notato la comoda funzione
StrIToA
Naturalmente la gestione della stringa che ricevera' il numero e' di
competenza del programmatore.
Ma per la dimensione della stringa? Qualcuno sa' dirmi se c'e' una funzione
specifica che calcola la lunghezza di una stringa dato un numero di n cifre?
Ovviamente e' n (oppure n+1 se il numero e' negativo)... ma bisogna ricavare
l'informazione dal numero stesso.
E' un'operazione semplice e dovrebbe essere parte intera di logaritmo in
base 10 del valore assoluto di num + 1 ... il problema sta nel fatto che non
ho trovato una funzione logaritmica nelle librerie standard. Cosi' ora non
faccio altro che contare qualche volte il numero e' divisibile per 10...
pero' mi sembra strano che non abbiano pensato ad una simile eventualita'...
torniamo cosi' alla mia domanda, c'e' una funzione standard che svolge
questo compito?
________________
Byez... Mat

, a@b.c says...

No! a dirti la verità, io, normalmente lavoro sul caso peggiore, se il 
numero è un Int16, il valore massimo ha 5 cifre più una di segno (32767, 
-32768). Quindi si può allocare una stringa di sette caratteri (contando 
anche il terminatore di stringa) rimanendo in tutta sicurezza.
Discorso analogo per gli Int32.
Ciao 
Pietro

 Discorso analogo per gli Int32.
Eh si, lo avevo pensato anche io, troppo comodo pero' :)
In questo modo non ottimizzi l'uso della memoria.
Ho fatto un controllo di tipo lista di numeri e ho deciso di gestire come
dati degli Int32 (e forse anche FlpDouble) per evitare di scegliere il tipo
di numeri da gestire a runtime tramite puntatori void* (prendo i tipi +
grandi che comprendono anche quelli + piccoli) (non uso void* perche' non
m'ispira fare questo genere di cast col C e utilizzare il C++ solo per
questo motivo e' uno spreco secondo me, ho notato un aumento del codice del
25% (il programma era piccolo pero', quindi non so se e' veramente un
aumento percentuale o un aumento fisso, devo fare qualche altra prova, anzi
dopo scrivo un messaggio in proposito:) )... acc sto divagando e mi sono
perso :)
Ah si... dicevo 2^32 e' 4 miliardi, quindi aggiungendo il segno sono 11
caratteri per rappresentare un numero.
Metti caso che utilizzo la lista in un occasione in cui sfrutto solo 2
cifre... ho ben 9 byte inutilizzati per una riga sola!
Piuttosto utilizzo la soluzione che ho pensato e calcolo il numero di cifre
che mi servono, alla fine il calcolo si risolve con 11 cicli... solo non mi
piace l'idea che nelle librerie standard non abbiano messo qualche funzione
matematica decente, mica posso usare la mathlib solo per un controllo lista
:)
________________
Byez... Mat

 :)
Ti ripeto che l'esigenza di cui parli non è molto sentita (per nulla?). 
Se proprio devo risparmiare spazio io mi tengo i numeri nel loro formato 
binario e li "traduco" in ascii solo al momento della stampa. Il tutto 
sfruttando gli stili "owner-draw" degli oggetti a video. In caso 
contrario, non avendo problemi di memoria, vado sul sicuro ed utilizzo i 
caratteri necessari per coprire il caso peggiore.
Ciao
Pietro

 caratteri necessari per coprire il caso peggiore.
Alla fin fine la mia era solo una puntualizzazione mirata ad ottimizzare
l'uso della memoria nel controllo numerico a lista che ho realizzato.
Un po' mi dispiace il fatto che non siano disponibili alcune funzioni
matematiche utili.
Devo fare un paio di esperimenti...
________________
Byez... Mat