PDA

Visualizza la versione completa : [c++] Da formato numerico (11) a letterale (undici)


JunkyFunki
11-01-2005, 18:53
Devo fare un prg che converte il formato numerico in formato letterale

Utilizzando un array per i numeri principali (zero,uno...dicianove) e un array per le decine (venti,trenta...novanta) sono riuscito ,tramite divisioni succesive a convertire i numeri da 0 a 99999

Non vado oltre x due semplici motivi :

1) ho l'impressione d'aver preso la strada sbagliata dato che sono arrivato a circa 20 if senza contare gli else...

2) spero in un vs suggerimento :zizi:

voi come fareste un prg simile? :)

pprllo
11-01-2005, 18:58
Allora ... io farei, come ha fatto tu, per divisioni successive. Dopodichè in effetti quello che serve è:
1) 2 serie di switch (1 per le decine e 1 per le unità)
2) Aggiungere "cento" o "mila" o "milioni"
3) Dei casi particolari per quanto riguarda l'unità (infatti "mille" non "unomila", "1 milione", non "1 milioni" ecc ecc

pprllo
11-01-2005, 19:02
Ah, dimenticavo:
I numeri da 11 a 19 seguono regole particolari che vanno trattate a parte in un altro switch.

pprllo
11-01-2005, 19:13
Quest'ultimo problema può causare grandi rotture, per il semplice motivo che ogni 3 cifre devi prendere le prime 2 insieme per vedere se formano un numero entro 20 e se non è così dividerle ulteriormente.

JunkyFunki
11-01-2005, 19:29
Originariamente inviato da pprllo
Allora ... io farei, come ha fatto tu, per divisioni successive. Dopodichè in effetti quello che serve è:
1) 2 serie di switch (1 per le decine e 1 per le unità)
2) Aggiungere "cento" o "mila" o "milioni"
3) Dei casi particolari per quanto riguarda l'unità (infatti "mille" non "unomila", "1 milione", non "1 milioni" ecc ecc

i casi particolari per ora non li considero altrimenti esco pazzo...cmq c'è da considerare un ulteriore problema , ovvero non si conosce a priori quanto è lungo il numero da convertire dato che sarà inserito dall'utente!
Se riesco a sapere a priori la lunghezza del numero (forse) posso convertirlo + facilmente (ad esempio 21121, prima converto le migliaia,poi le centinaia,poi le decine e infine le unità)


Originariamente inviato da pprllo
Ah, dimenticavo:
I numeri da 11 a 19 seguono regole particolari che vanno trattate a parte in un altro switch.


infatti li ho messi nell'array dei numeri principali (da zero a dicianove)


Originariamente inviato da pprllo
Quest'ultimo problema può causare grandi rotture, per il semplice motivo che ogni 3 cifre devi prendere le prime 2 insieme per vedere se formano un numero entro 20 e se non è così dividerle ulteriormente.

lo so, per questo ho un casino di if :cry:

pprllo
11-01-2005, 20:13
vabbè, sapere la lunghezza è molto facile. Fai immettere il numero come stringa. Ottieni la lunghezza della stringa con un semplice strlen(). Dopodichè converti in intero con la funzione atoi()della stdlib.

LeleFT
11-01-2005, 21:23
Se non vuoi passare per le stringhe, puoi conoscere la lunghezza di un numero intero utilizzando il logaritmo in base 10. La libreria math.h mette a disposizione la funzione log10:


int mioValore = 12345;
int lunghezza = log10(mioValore) + 1;

oppure potresti procedere per divisioni successive, ma così risparmi righe di codice! :)


Ciao. :ciauz:

JunkyFunki
12-01-2005, 16:35
tnx!

m'ero davvero perso in un bicchiere d'acqua...bastavano le divisioni successive per sapere la lunghezza del numero! :dhò:

cmq il problema l'ho risolto per i numeri che vanno da zero (compreso) fino a un miliardo (non compreso)

Rimane il piccolo :stordita: problema che alcuni formati non hanno senso..ad esempio 501524 lo traduce in "cinquecentounomilacinquecentoventiquattro"

voglio intervenire sulla stringa ,con java c'era stringtokenizer (o qualcosa di simile) con c++ che funzioni posso usare per togliere dalla stringa "unomila" e sostituirlo con "mila" ??? :master:

o devo farmi pure questa funzione??? :cry:

piesse78
12-01-2005, 16:41
ma nn è giusto "cinquecentounomila"? :master:

JunkyFunki
12-01-2005, 16:43
Originariamente inviato da piesse78
ma nn è giusto "cinquecentounomila"? :master:

:oVVoVe:

ops...sto leggermente sfasando con questi numeri...

:cry:

Loading