Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    27

    Scivere il nome del numero letto da un file

    IL PROBLEMA
    dovrei scrivere un programma che, dato un numero intero compreso tra 1 e 99 inclusi, scriva la
    parola italiana corrispondente.

    Esempio:
    File input.txt 23 File output.txt ventitre

    DATI DI INPUT
    Il file input.txt contiene un numero compreso tra 1 e 99 inclusi. Il file è costituito da un'unica
    riga di testo, contenente una o due cifre da 0 a 9.

    DATI DI OUTPUT
    Il programma, dopo aver letto il file di input, deve fornire la parola corrispondente in italiano,
    e scriverla su un file di nome output.txt. Più precisamente, il file output.txt deve contenere
    un'unica riga. Su questa riga dovrà comparire la parola italiana corrispondente al numero.

    P.S..
    1. Qualora lo stesso numero possa essere espresso in più forme, scegliere sempre la più
    breve (per esempio, "ventuno" e non "ventiuno" o "ventieuno", "ottantuno" e non
    "ottantauno" o "ottantaeuno"). Nel caso precedente, scrivere "ventieuno" al posto di
    "ventuno" è considerato un errore. Allo stesso modo, uno spazio nella parola è
    consideratoun errore.
    2. I caratteri accentati devono essere inseriti privi di accento (per esempio, "trentatre" e
    non "trentatrè" o "trentatre"').
    3. Importante! II programma non deve scrivere nulla sul video, e non deve interagire con
    l'utente. Deve solo leggere il file di input e scrivere il file di output.
    4. L'esecuzione del programma deve terminare entro 5 secondi.

    questo è tutto x quanto riguarda l'analisi del programma,,,

    allora,,

    import java.util.Scanner;
    import java.io.*;

    class Numero {
    public static void main(String args[])throws Exception {
    Scanner filein=new Scanner (new FileInputStream("dati.txt"));
    // dati

    int number;
    char letter;

    if (number "è maggiore/uguale a" 1 && number "è minore/uguale a"99){

    }else{

    }
    }
    purtroppo,, mi sono bloccato e non so come andar avanti,,qualcuno mi sa aiutarmi??? plz..

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: Scivere il nome del numero letto da un file

    Originariamente inviato da Avatar89
    purtroppo,, mi sono bloccato e non so come andar avanti,,qualcuno mi sa aiutarmi??? plz..
    Una volta che hai creato lo Scanner, ti basta usare nextInt() per leggere il valore intero. Lo controlli per vedere se è nel range che ti aspetti e se lo è lo converti in una stringa che contiene il numero in lettere.

    L'algoritmo non è affatto difficile (sarebbe meno facile se il range fosse molto più ampio, es. fino a 1 milione). Anche se sai certamente a memoria come si scrivono i numeri da 1 a 99, scrivi le parole su un foglio di carta e scopri cosa hanno in comune o di differente. Scoprirai che c'è il caso particolare dei numeri 1x (10~19) mentre per gli altri blocchi di dieci si tratta di comporre la parola composta da un prefisso (es. "venti" "trenta" ecc...) e da una parola che indica il numero da 1 a 9, con il caso particolare dei valori x1 e x8 perché la vocale finale del prefisso va troncata (es. "ventuno").

    Una volta che hai una visione generale di tutto, è molto semplice realizzare l'algoritmo.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    27

    re:

    allora,, scusa x l'ignoranza,, allora quello che ho capito è questo:

    import java.util.Scanner;
    import java.io.*;

    class Numero {
    public static void main(String args[])throws Exception {
    Scanner filein=new Scanner (new FileInputStream("dati.txt"));

    // dati
    int number;

    number=filein.nextInt();

    if (number "è maggiore/uguale a" 1 && number "è minore/uguale a"99){

    }else{
    }
    }

    lo converti in una stringa che contiene il numero in lettere....

    è questo infatti quello che non capito molto bene,, cioè da INT a STRING?? ma non è il casting vero??? . .

  4. #4

    Re: re:

    Originariamente inviato da Avatar89
    è questo infatti quello che non capito molto bene,, cioè da INT a STRING?? casting??? . .
    Devi crearti tu l'algoritmo analizzando le cifre separatamente.

    Per i numeri che vanno da 1 a 20, la corrispondenza è banale... non c'è nessuna regola che compone i numeri. Quindi controlli se il numero è in questo range e scrivi "a mano" la stringa di output.

    Per i restanti range (20-29, 30-39... e così via) i numeri sono costituiti da un prefisso dato dalla prima cifra (VENTI,VENTuno,VENTIdue,VENTItre... TRENTA,TRENTuno,TRENTAdue...). Devi pertanto analizzare le due cifre separatamente e in base ai valori singoli componi la stringa da scrivere in output.
    Al mio segnale... scatenate l'inferno!

  5. #5
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: re:

    Originariamente inviato da Avatar89
    lo converti in una stringa che contiene il numero in lettere....

    è questo infatti quello che non capito molto bene,, cioè da INT a STRING?? ma non è il casting vero??? . .
    Non c'è un metodo già fatto apposito che ti rende una stringa con il numero in lettere!!!

    Devi realizzare proprio tu un algoritmo che preso in input un valore int, esamina singolarmente i suoi digit (e qui devi fare delle operazioni matematiche) e tramite le regole di composizione che ho solo accennato sopra, compone una stringa.

    Quindi innanzitutto ti conviene usare un StringBuffer per comporre la stringa, e ti suggerisco di definire degli array per le varie parti. Esempio, un array di 10 stringhe che contiene {"", "uno", "due", ...... "nove"}. Il primo (sarebbe il posto dello "zero") è vuoto e puoi anche immaginare il perché.

    Dati i due digit X e Y che compongono il numero, fai i vari casi e componi la stringa. Nulla di trascendentale, te lo assicuro io.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  6. #6
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    27

    re:

    allora,, per tutto il giorno non ho fatto niente ke a pensare a questo programma,, so che per voi è banale,, però purtroppo per me non lo è,, ed è una cosa che vi invidio,,, uffa,,
    comunque,, sono riuscito a risolvere il problema in parte nel senso che sono riuscito a stampare il nome del numero sul console.. ed ecco i problemi:


    1) stampa il nome 9 volte anzicchè una volta sola,,,

    2) come si fa per l'OUTPUT????
    DATI DI OUTPUT
    Il programma, dopo aver letto il file di input, deve fornire la parola corrispondente in italiano, e scriverla su un file di nome output.txt. Più precisamente, il file output.txt deve contenere un'unica riga. Su questa riga dovrà comparire la parola italiana corrispondente al numero.


    comunque,, mi potete guardare un'attimo il programma e corregerlo e magari anche aggiungere dei codici mancanti (come per l'output su un file,,),, se possibile???..


    import java.util.Scanner;
    import java.io.*;

    public class Numeri{
    public static void main(String args[]) throws Exception {
    Scanner filein=new Scanner (new FileInputStream("dati.txt"));

    int number, select;
    int number1;

    number = filein.nextInt();
    select= number / 10;
    number1 = number - (select*10);

    switch (select){

    case 0:

    String name0[] = {"","uno", "due", "tre", "quattro", "cinque","sei", "sette", "otto", "nove"};
    for(number=1; number<10; number++)
    System.out.println(name0[number1]);
    break;

    case 1:
    String name1[] = {"dieci","undici", "dodici", "tredici", "quattordici","quindici", "sedici", "diciasette" , "diciotto","dicianove"};
    for(number=10; number<20; number++)
    System.out.println(name1[number1]);
    break;

    case 2:
    String name2[][] = {{"Vent"},{"i", "uno", "idue", "itre", "iquattro", "icinque","isei","isette", "iotto", "inove"}};
    for(number=20; number<30; number++)
    System.out.println(name2[0][0]+ name2 [1][number1]);
    break;

    case 3:
    String name3[][] = {{"Trent"},{"a", "uno", "adue", "atre", "aquattro", "acinque","asei", "asette", "otto", "anove"}};
    for(number=30; number<40; number++)
    System.out.println(name3[0][0]+ name3 [1][number1]);
    break;

    case 4:
    String name4[][] = {{"Quarant"},{"a", "uno", "adue", "atre", "aquattro", "acinque","asei", "asette", "otto", "anove"}};
    for(number=40; number<50; number++)
    System.out.println(name4[0][0]+ name4 [1][number1]);
    break;

    case 5:
    String name5[][] = {{"Cinquant"},{"a", "uno", "adue", "atre", "aquattro", "acinque","asei", "asette", "otto", "anove"}};
    for(number=50; number<60; number++)
    System.out.println(name5[0][0]+ name5 [1][number1]);
    break;

    case 6:
    String name6[][] = {{"Sesant"},{"a", "uno", "adue", "atre", "aquattro", "acinque","asei", "asette", "otto", "anove"}};
    for(number=60; number<70; number++)
    System.out.println(name6[0][0]+ name6 [1][number1]);
    break;

    case 7:
    String name7[][] = {{"Setant"},{"a", "uno", "adue", "atre", "aquattro", "acinque","asei", "asette", "otto", "anove"}};
    for(number=70; number<80; number++)
    System.out.println(name7[0][0]+ name7 [1][number1]);
    break;

    case 8:
    String name8[][] = {{"Ottant"},{"a", "uno", "adue", "atre", "aquattro", "acinque","asei", "asette", "otto", "anove"}};
    for(number=80; number<90; number++)
    System.out.println(name8[0][0]+ name8 [1][number1]);
    break;

    case 9:
    String name9[][] = {{"Novant"},{"a", "uno", "adue", "atre", "aquattro", "acinque","asei", "asette", "otto", "anove"}};
    for(number=90; number<100; number++)
    System.out.println(name9[0][0]+ name9 [1][number1]);
    break;

    } // end switch
    } // main
    } // end public class

  7. #7
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    27

    re:

    beh,, il primo problema l'ho già risolto,, evviva,, basta cancellare i "for" che servono a niente,,, mi manca solo il secondo.. cioè far in modo che il nome del numero venga scritta in un file e non sul console, qualche suggerimento?? m'hanno detto di usare un PRINTWRITER,, ma non so come si usa,,, plz,,, help!!

  8. #8
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    VVoVe: VVoVe: VVoVe:
    Il tuo codice un "pochino" lunghetto .... è un macello così .....

    Innanzitutto, dato un numero a 2 cifre (0-99) per avere la cifra più significativa basta fare num/10 e per avere la cifra meno significativa basta fare num%10.

    Poi il mega switch che hai scritto è pazzesco (direi allucinante, scusa se lo dico). Forse non hai ancora compreso cosa cambia e cosa non cambia tra tutti i numeri in lettere tra 1 e 99.

    Guarda questi:

    codice:
    01      uno
    02      due
    03      tre
    04      quattro
    05      cinque
    06      sei
    07      sette
    08      otto
    09      nove
    
    10      dieci
    11      undici
    12      dodici
    13      tredici
    14      quattordici
    15      quindici
    16      sedici
    17      diciassette
    18      diciotto
    19      diciannove
    
    20      venti
    21      vent  uno
    22      venti due
    23      venti tre
    24      venti quattro
    25      venti cinque
    26      venti sei
    27      venti sette
    28      vent  otto
    29      venti nove
    
    30      trenta
    31      trent  uno
    32      trenta due
    33      trenta tre
    34      trenta quattro
    35      trenta cinque
    36      trenta sei
    37      trenta sette
    38      trent  otto
    39      trenta nove
    
    40      quaranta
    41      quarant  uno
    42      quaranta due
    ....
    ....
    
    95      novanta cinque
    96      novanta sei
    97      novanta sette
    98      novant  otto
    99      novanta nove
    Che cosa noti??? Qui si tratta solo ed esclusivamente di osservare come sono composti i numeri letterali.

    Ripeto la domanda: che cosa noti? Che c'è il caso particolare dei numeri 10~19, che non sono "composti" in alcun modo e che quindi vanno presi per intero così come sono.
    Mentre tutti gli altri possono essere visti come composti, potenzialmente, da 2 parti, un prefisso per la decina e un suffisso per l'unità.

    Si nota anche che i primi nove non hanno prefisso mentre gli altri dal 20 in poi ce l'hanno. Si nota che dal 20 in poi, i valori x0 hanno solo il prefisso e infine si nota ancora il caso particolare in cui per i numeri x1 e x8 il prefisso manca dell'ultima lettera, cioè la vocale.

    Quindi ti basta avere solo 3 array:

    codice:
    String[] unita = {"", "uno", "due", "tre", "quattro", "cinque", "sei", "sette", "otto", "nove"};
    
    String[] decine = {"", "", "venti", "trenta", "quaranta", "cinquanta", "sessanta", "settanta", "ottanta", "novanta"};
    
    String[] numeri1X = {"dieci", "undici", "dodici", "tredici", "quattordici", "quindici", "sedici", "diciassette", "diciotto", "diciannove"};
    Le stringhe vuote "" non sono messe così a caso ..... ognuno di questi array può essere indirizzato direttamente tramite il valore di una cifra decimale 0-9!!!

    Con poche righe di codice in più (max 20 se proprio vogliamo stare larghi) ti basta esaminare le due cifre del numero ed indirizzare gli array per comporre la stringa.
    Ovviamente devi tenere in considerazione i casi particolari che ho detto e se devi togliere la lettera finale alla decina, basta fare un substring().

    Ripeto che il tutto si fa in max 20~25 righe di codice, senza switch o cicli for!!!!!!!!!!!!!
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  9. #9
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    27

    re:

    grazie mille per la risposta,, adesso proverò a rifarlo,,

    scusi signor andbin,, per il mio secondo problema,, ne sa qualcosa?? . .

  10. #10
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: re:

    Originariamente inviato da Avatar89
    far in modo che il nome del numero venga scritta in un file e non sul console, qualche suggerimento??
    Basta usare le classi di I/O per l'output, le più semplici sono PrintStream e PrintWriter: istanzi l'oggetto, usi i print()/println(), chiudi con close(). Tutto qui.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

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.