Primo esercizio

di il
24 risposte

Primo esercizio

Ho iniziato a esercitarmi con javascript. Ho risolto un esercizio dove si chiedeva di stampare il numero di Ore, Minuti, Secondi a partire da un numero qualsiasi di secondi inseriti in input. Posto il codice per avere un vostro parere circa il modo di come l'ho risolto e se la scrittura del codice è "adeguata". Sono sicuro che ci sono altri modi di risolvere questo esercizio e eventualmente mi piacerebbe molto saperlo ,ma credo che questo sia off-topic.
Saluti

//input da terminale
const readline = require('readline').createInterface({
    input: process.stdin,
    output: process.stdout,
  });
  // codice
  //ore
  readline.question(`Input:   `, number => {
    ora=number.toString();
    ora=ora/60;
    ora1=ora/60;
    ora2=Math.trunc(ora1);
  
  //minuti
   minuti = ora1.toString(); 
   minuti1="0" + minuti.substring(1,5); 
   minuti2=minuti1*60;
   minuti3=Math.trunc(minuti2);

   //secondi
   secondi=minuti2.toString();
   secondi1="0"+ secondi.substring(1,5);
   secondi2=secondi1*60;
   secondi3=Math.trunc(secondi2);
   

  console.log(ora2 +' Ore  '+ minuti3 + '  Minuti  '+ secondi3 + '  Secondi');

    readline.close();
  });

24 Risposte

  • Re: Primo esercizio

    Scusa, ma a che dovrebbe servire tutta questa sequela di istruzioni?
    
       ora=number.toString();
        ora=ora/60;
        ora1=ora/60;
        ora2=Math.trunc(ora1);
    
    In secondo luogo, l'output del programma hai verificato che sia corretto?
  • Re: Primo esercizio

    Ho verificato l'output ed è corretto. Inserendo da terminale un numero di secondi ad esempio: 12560 ,tira fuori in output quante ore , minuti, secondi sono. In questo caso 3 ore, 29 minuti, 16 sec. La sequenza delle istruzioni servono a ricavare le ore i minuti e i secondi dall'unico numero inserito in input.
    Allego per comodità dove ho trovato questo esercizio:
    https://github.com/AlbertoOlla/esercizi-di-programmazione-javascript/tree/master/esercizi-stringhe-numeri
  • Re: Primo esercizio

    tonyven ha scritto:


    Inserendo da terminale un numero di secondi ad esempio: 12560 [...]
    In questo caso 3 ore, 29 minuti, 16 sec.
    Anche solo a occhio, non mi sembra corretto il risultato.
    Se fai il calcolo e trasformi tutto in secondi, il totale non corrisponde a quello iniziale, temo.

    tonyven ha scritto:


    La sequenza delle istruzioni servono a ricavare le ore i minuti e i secondi dall'unico numero inserito in input.
    Sì, l'obiettivo dell'esercizio mi è chiaro, ma non capisco a cosa servano le istruzioni che *tu* hai scritto: prima converti in stringa il valore delle ore (perché?), poi la dividi numericamente per 60 (la stringa), nel mentre crei ore1, ore2, ... oreN... a che servono?

    L'algoritmo non mi convince, e temo che non sia corretto.
  • Re: Primo esercizio

    @tonyven, fare i test e' un'arte tanto quanto scrivere il codice

    Gia' a prima vista '12560 ' non potra' MAI avere 16 secondi al suo interno
    Perche'?
    il numero non finisce conn un 6.

    Ma ci sei andato vicino: 12560 -> 3 ore 29 minuti 20 secondi.
  • Re: Primo esercizio

    Grazie mille per le dritte.Estremamente utili. In effetti il primo problema che ho incontrato è trovare le funzioni del caso, anche cercando in rete. Sicuramente devo trovare la documentazione ufficiale di ecma2015 se non erro. Comunque ho usato questo metodo per ricavare le ore, minuti, secondi inserendo per esempio 12560 come secondi da inserire in input:
    12560/60=209.33
    209.33/60=3.4888
    Ho considerato 3 come ore utilizzaando Math.trunc().
    Qui sono incominciati i problemi perchè non ho trovato una funzione che mi considerasse la parte decimale del numero
    0.488
    0.488*60=29.28 ho considerato 29 come minuti
    0.28*60=16.8 ho considerato 16 come secondi.
    Evidentemente il metodo non è appropriato.
  • Re: Primo esercizio

    E' aritmetica delle scuole medie ...

    12560/3600=3,..... 3 ore
    Rimangono 12560-3*3600 = 1760
    1760/60=29,.... 29 minuti
    Rimangono 1760-29*60 = 20 secondi

    quindi

    ore = parteinteradi(12560 / 3600)
    resto = 12560 - ore * 3600;
    min = parteinteradi(resto / 60)
    sec = resto - min * 60
  • Re: Primo esercizio

    E chi se lo ricordava. Grazie mille. A questo punto dovrò rivedere in toto il mio approccio alla programmazione
     const readline = require('readline').createInterface({
        input: process.stdin,
        output: process.stdout,
      });
    
      readline.question(`Input:   `, number => {
        ore=parseInt(number/3600);
        resto=number-(ore*3600);
        min=parseInt(resto/60);
        sec=resto-(min*60);
    
        console.log(ore +" Ore  " + min + " Minuti  "+ sec + "  Secondi");
        readline.close();
    });
  • Re: Primo esercizio

    RESTO DI UNA DIVISIONE!

    12560 mod 60 ->secondi
    12560 div 60 -> totale in minuti (divisione intera NON con la virgola)
    ecc

    Nota: @oregon parte dalle ore, io dai secondi, MA funziona uguale.
    Ovviamente
  • Re: Primo esercizio

    Mi stavo impazzendo a trovare una funzione specifica. Invece era proprio il metodo di calcolo sbagliato.
  • Re: Primo esercizio

    A prescindere dalla programmazione, forse ti mancano basi elementari di matematica...
  • Re: Primo esercizio

    Sicuramente le mie basi di matematica lasciano a desiderare...Comunque ho risolto un'altro esercizio dove si chiedeva di inserire un numero di gatti e le file su cui disporli:

    Input numero gatti
    Input numero gatti per fila
    L'output chiede:
    numero di file risultanti
    Nel caso la fila non è completa indicare quanti gatti mancano.

    Vedendo la documentazione di nodejs non sono riuscito a trovare il modo di inserire in input 2 valori separatamente. Ho visto che l'istruzione: readline.question(`Input gatti e file: `, number => { restituisce una stringa così ho lavorato su lei. Ma è il modo corretto?
    
    const readline = require('readline').createInterface({
        input: process.stdin,
        output: process.stdout,
      });
    
      readline.question(`Input gatti e file:   `, number => {
        num_gatti=number;
        gatti=parseInt(num_gatti.substring(0,2));
        fila=parseInt(num_gatti.substring(4,2));
        num_file=Math.ceil(gatti/fila);
        tot_pos=fila*num_file;
        gatti_mancanti=tot_pos-gatti;
        
        console.log("Gatti "+gatti);
        console.log("Numero gatti per fila "+fila);
        console.log("Numero file: " +num_file);
        console.log("Gatti mancanti ultima fila: "+gatti_mancanti);
      readline.close();
      });
    
    
  • Re: Primo esercizio

    Quarantaquattro gatti in fila per sei con il resto di due?

  • Re: Primo esercizio

    tonyven ha scritto:


    Vedendo la documentazione di nodejs non sono riuscito a trovare il modo di inserire in input 2 valori separatamente.
    E fare due volte la richiesta di input?
  • Re: Primo esercizio

    Esatto. Per inserire 2 valori. Prima uno poi l'altro
Devi accedere o registrarti per scrivere nel forum
24 risposte