Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11

Discussione: [java] il compito...

  1. #1

    [java] il compito...

    Oggi ho fatto l'esame!

    il programma l'ho fatto tutto..l'ho provato e funziona tutto tranne una cosa

    (scrivo solo l'errore)

    int x,y;
    double z;

    z=(x/y)*100;


    provando il prg ho scoperto che z sarà sempre e comunque zero a prescindere da x e y...

    forse xchè essendo x e y interi la divisione da sempre zero? :master:

    secondo voi un errore del genere è in grado di rovinare in modo grave la valutazione di tutto il prg(perfettamente funzionante a parte quella cosa...)?



    solo provando mi sono reso conto....facendo il prg su carta non ci sarei mai arrivato....
    E' tutta colpa di Berlusconi !
    Help [Ciclico] Fisco, domande varie

    Avatar

  2. #2
    Si, è un errore abbastanza grave.

    La ragione dell'errore sta nel fatto che in java il casting automatico non avviene se non alla fine, prina dell'assegnazione.

    Il modo corretto di scrivere l'istruzione sarebbe stato:

    z=(x*100.0)/(y*1.0);

    Ciao!
    "Le uniche cose che sbagli sono quelle che non provi a fare."
    Atipica

  3. #3
    Originariamente inviato da Shores
    Si, è un errore abbastanza grave.

    La ragione dell'errore sta nel fatto che in java il casting automatico non avviene se non alla fine, prina dell'assegnazione.

    Il modo corretto di scrivere l'istruzione sarebbe stato:

    z=(x*100.0)/(y*1.0);

    Ciao!



    ma io non ci pensavo proprio...ho fatto tutto perfetto tranne quella cosa...
    E' tutta colpa di Berlusconi !
    Help [Ciclico] Fisco, domande varie

    Avatar

  4. #4
    Utente di HTML.it L'avatar di anx721
    Registrato dal
    Apr 2003
    Messaggi
    2,352

    Re: [java] il compito...

    Originariamente inviato da JunkyFunki

    provando il prg ho scoperto che z sarà sempre e comunque zero a prescindere da x e y...

    forse xchè essendo x e y interi la divisione da sempre zero? :master:
    z sarà zero se x < y proprio per il motivo che ti ha detto Shores, tuttavia non penso che venga considerato un errore grave nella valutazione di un compito, se il programma non viene provato è difficile anche che se ne accorgano!

  5. #5
    Daccordissimo sul fatto che se non lo provano ci vuole un buon occhio per notare l'errore, un po' meno sul fatto che non sia un errore grave.

    Infatti, non solo verrà 0 in occasioni in cui non avrebbe dovuto essere zero, ma il risultato sarà sempre un multiplo esatto di 100: in pratica è come se tutta una gamma di risultati che avrebbero dovuto essere possibili per z venga esclusa, per esempio tutti quelli da 1 a 99 o da 101 a 199 e così via, in pratica invece di essere una variabile che può assumere tutti i valori con la virgola compresi tra - infinito e + infinito, potrà valere solo dei multipli interi di 100...

    A me non pare un errore da poco!

    Ciao!
    "Le uniche cose che sbagli sono quelle che non provi a fare."
    Atipica

  6. #6
    Originariamente inviato da Shores

    z=(x*100.0)/(y*1.0);

    in effetti non ci avrei pensato nemmeno io a scrivere la formula così.

    Se avessi scritto così non avrei ottenuto la stessa cosa?

    z=(double)(x/y)*100;

  7. #7
    Originariamente inviato da matrics21
    in effetti non ci avrei pensato nemmeno io a scrivere la formula così.

    Se avessi scritto così non avrei ottenuto la stessa cosa?

    z=(double)(x/y)*100;
    No, non avresti ottenuto la stessa cosa; avresti commesso invece lo stesso errore di JunkyFunky, poichè la conversione di tipo sarebbe avvenuta alla fine, DOPO che la divisione era già stata effettuata.

    Il succo della sostanza è che bisogna forzare la conversione di tipo PRIMA che venga fatta la divisione, altrimenti si ritorna all'errore di prima.

    Probabilmente, però, è sufficiente convertire o x o y a double prima della divisione, per ottenere che l'intera divisione venga effettuata in double.

    La mia proposta convertiva esplicitamente ENTRAMBI x e y a double prima della divisione, cosa che appunto forse non è necessaria; basta uno solo dei due.

    Ciao!

    Ps: forse non era chiaro il mio spezzone di codice: moltiplicare una variabile intera per un valore con la virgola, ache se con decimali nulli, provoca il cambio di tipo; se x è un int, x*1.0 è lo stesso valore convertito a double.
    "Le uniche cose che sbagli sono quelle che non provi a fare."
    Atipica

  8. #8
    Cmq il valore di z doveva essere compreso tra 0 e 100!

    z rappresentava la percentuale fra numeri "indovinati" e numeri totali elencati!

    spero che il prof non lo consideri grave come errore visto che prg in java da nemmeno 4 mesi e che siamo arrivati solo ai cicli

    ps: tra l'altro moltiplicare una variabile intera per un valore con la virgola per convertirlo in double era un truccheto che non conoscevo! cmq grazie per le spiegazioni!
    E' tutta colpa di Berlusconi !
    Help [Ciclico] Fisco, domande varie

    Avatar

  9. #9
    Utente di HTML.it L'avatar di Wave
    Registrato dal
    May 2003
    Messaggi
    644
    Originariamente inviato da Shores
    No, non avresti ottenuto la stessa cosa; avresti commesso invece lo stesso errore di JunkyFunky, poichè la conversione di tipo sarebbe avvenuta alla fine, DOPO che la divisione era già stata effettuata.

    Il succo della sostanza è che bisogna forzare la conversione di tipo PRIMA che venga fatta la divisione, altrimenti si ritorna all'errore di prima.

    Probabilmente, però, è sufficiente convertire o x o y a double prima della divisione, per ottenere che l'intera divisione venga effettuata in double.

    La mia proposta convertiva esplicitamente ENTRAMBI x e y a double prima della divisione, cosa che appunto forse non è necessaria; basta uno solo dei due.

    Ciao!

    Ps: forse non era chiaro il mio spezzone di codice: moltiplicare una variabile intera per un valore con la virgola, ache se con decimali nulli, provoca il cambio di tipo; se x è un int, x*1.0 è lo stesso valore convertito a double.
    e così???

    ....
    z=(((double)x)/((double)y))*100
    ....

    al mio esame è capitata una cosa simile...divisione fra interi e toccava fare il cast...io avrei fatto così.....
    LINUX
    Powered by Ubuntu
    Powered by MacOS X


    ...vivi la tua vita come se ogni giorno fosse l'ultimo, poichè un giorno lo sarà...

  10. #10
    Originariamente inviato da Wave
    e così???

    ....
    z=(((double)x)/((double)y))*100
    ....

    al mio esame è capitata una cosa simile...divisione fra interi e toccava fare il cast...io avrei fatto così.....
    Si, così va bene, anche se forse, come dicevo, è sufficiente convertire a double solo la x o solo la y, il resto avviene in automatico.

    Ah, e per JunkyFunky, il fatto che 0 <= z <= 100 lo si otteneva semplicemente verificando che x <= y, ma in sè l'assegnazione che ci hai fatto vedere, naturalmente, non poteva dirci questo.

    Ciao!
    "Le uniche cose che sbagli sono quelle che non provi a fare."
    Atipica

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 © 2024 vBulletin Solutions, Inc. All rights reserved.