Visualizzazione dei risultati da 1 a 10 su 10
  1. #1

    [c++] Da formato numerico (11) a letterale (undici)

    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

    voi come fareste un prg simile?
    E' tutta colpa di Berlusconi !
    Help [Ciclico] Fisco, domande varie

    Avatar

  2. #2
    Utente di HTML.it
    Registrato dal
    Dec 2003
    Messaggi
    423
    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

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2003
    Messaggi
    423
    Ah, dimenticavo:
    I numeri da 11 a 19 seguono regole particolari che vanno trattate a parte in un altro switch.

  4. #4
    Utente di HTML.it
    Registrato dal
    Dec 2003
    Messaggi
    423
    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.

  5. #5
    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
    E' tutta colpa di Berlusconi !
    Help [Ciclico] Fisco, domande varie

    Avatar

  6. #6
    Utente di HTML.it
    Registrato dal
    Dec 2003
    Messaggi
    423
    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.

  7. #7
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    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:
    codice:
    int mioValore = 12345;
    int lunghezza = log10(mioValore) + 1;
    oppure potresti procedere per divisioni successive, ma così risparmi righe di codice!


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  8. #8
    tnx!

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

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

    Rimane il piccolo 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???
    E' tutta colpa di Berlusconi !
    Help [Ciclico] Fisco, domande varie

    Avatar

  9. #9
    ma nn è giusto "cinquecentounomila"? :master:

  10. #10
    Originariamente inviato da piesse78
    ma nn è giusto "cinquecentounomila"? :master:
    VVoVe:

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

    E' tutta colpa di Berlusconi !
    Help [Ciclico] Fisco, domande varie

    Avatar

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.