IJVM (integer java virtual machine)

di il
4 risposte

IJVM (integer java virtual machine)

Dovrei realizzare in IJVM (integer java virtual machine) realizzare il metodo ORA(secondi) che trasforma il valore intero passato nell'argomento \"secondi\" in un orario nella forma oooo.oooo.oooo.oooo.oooo.mmmm.mmss.ssss ovvero:
bit0-bit5 = secondi da 0 a 59
bit6-bit11 = minuti da 0 a 59
bit12-bit31 = ore
Esempio: passando il valore 126923 (=0x1EFCB) il metodo ritorna l'orario
35:15:23 (= 0x000233D7)

Qualcuno sà aiutarmi? Qualche dritta? Io ho preparato una bozza ma penso di essere ancora in alto mare...

4 Risposte

  • Re: IJVM (integer java virtual machine)

    Ciao,

    In maniera banale dovrai lavorare con divisioni intere e con i resti per ottenere ore, minuti e secondi relativi all'intero in input. Per la precisione ci sono 60 secondi in un minuto e quindi 3600 secondi in un'ora...

    1) Il numero di ore sarà pertanto uguale a secondi/3600;
    2) I minuti saranno uguali a resto_della_divisione_1/60;
    3) I secondi saranno il resto_della_divisione_2;

    Impaccare poi i valori nei bit non dovrebbe essere un problema utilizzando operazioni di shift a sinistra ed or dei valori ottenuti.

    Ciaociao
  • Re: IJVM (integer java virtual machine)

    Il ragionamento mi è chiaro ma Il problema stà tutto nel fatto che con il sottoinsieme intero della JVM e cioè IJVM le divisioni le devo fare con il metodo delle sottrazioni successive...o almeno credo...ma non penso di poter utilizzare 3600 come una costante (credo di aver a disposizione al massimo 8 bit)...l'input in intero come lo ottengo? con IN e poi la conversione? Help...Please....Help...

    Grazie e ciao
  • Re: IJVM (integer java virtual machine)

    Ciao,

    Per input intero intendevo la variabile \"secondi\" che viene passata alla funzione.

    Se puoi usare la divisione, comunque non ci sono problemi se puoi usare solo 8bit per una costante... x/3600 == (x/60)/60 ed ottieni lo stesso risultato effettuando due divisioni invece di una (il problema è se sei interessato al resto della doppia divisione - in quel caso dovrai far un calcolo del genere: ( (x/60)+(x%60) ) / 60...

    Per il sistema delle sottrazioni successive, non cambia il modo di procedere... implementa una funzione che ti calcola una divisione ed una che ti calcola il resto con tali sistemi ed usale, con attenzione, al posto dei simboli / e % (il secondo, se non fosse chiaro è l'operatore di modulo, ovvero il resto della divisione intera).

    Ricapitolando, se hai modo di usare le divisioni ed hai costanti di più di 8bit:
    _ore=secondi/3600;
    _resto1=secondi%3600; //Variabile d'appoggio per comodità
    _minuti=_resto1/60;
    _secondi=_resto1%60;

    Se hai costanti ad 8bit (ma puoi fare le divisioni):
    _parziale=(secondi/60)+(secondi%60);
    _ore=_parziale/60;
    _resto1=_parziale%60;
    _minuti=_resto1/60;
    _secondi=_resto1%60;

    Se non puoi fare le divisioni ed hai costanti di più di 8 bit:
    _ore=divisione(secondi,3600);
    _resto1=resto(secondi,3600);
    _minuti=divisione(_resto1,60);
    _secondi=resto(_resto1,60);

    Se non puoi fare le divisioni ed hai costanti di 8 bit:
    _parziale=divisione(secondi,60)+resto(secondi,60);
    _ore=divisione(_parziale,60);
    _resto1=resto(_parziale,60);
    _minuti=divisione(_resto1,60);
    _secondi=resto(_resto1,60);

    Restano solo da implementare le due funzioni (divisione e resto) in caso tu non possa fare le divisioni ed i resti con i comuni operatori / e %.

    Ciaociao
  • Re: IJVM (integer java virtual machine)

    Salve,
    io ho un procedimento esattamente opposto.
    Volevo sapere come poter acquisire da tastiera l'orario da poter successivamente convertire...
    Il testo dell'esercizio è il seguente:

    Function NUMSEC (ora)
    Il metodo NUMSEC(ora), riceve in ingresso un orario e ritorna il numero progressivo di secondi corrispondente.
    L'orario viene passato in una variabile intera secondo il formato seguente: oooo.oooo.oooo.oooo.oooo.mmmm.mmss.ssss ovvero:

    bit0-bit5 = secondi da 0 a 59
    bit6-bit11 = minuti da 0 a 59
    bit12-bit31 = ore

    Esempio:
    passando l'orario 35:15:23 (=0x000233D7) il programma ritorna il valore: 126923 (=0x1EFCB)

    Secondo voi come si può passare la variabile intera secondo quel formato li?
    Potete aiutarmi?
    Grazie mille!
Devi accedere o registrarti per scrivere nel forum
4 risposte