Altro (JAVASCRIPT) Problema con un esercizio

Cristian_fighter

Utente Silver
2 Giugno 2016
58
25
2
59
Buonasera ragazzi, vi chiedo aiuto.
Ho scritto un codice che dovrebbe soddisfare la richiesta dell'esercizio il quale vi lascerò la traccia in seguito, il programma però non funziona sempre, e non riesco a capire come mai alcune volte sbaglia e alcune volte no, vi ringrazio se sarete disposti ad aiutarmi.
JavaScript:
/*
  Caldo o freddo
  Scrivi un programma che dati sette valori relativi alle temperature della settimana
  stabilisca la giornata più calda e quella più fredda.
  Esempio:
    Input: a = 10, b = -2, c = 31, d = 22, e = 15, f = -6, g = 7
    Output: giornata più calda = 31, giornata più fredda = -6
  http://www.imparareaprogrammare.it
*/

var tempMAX=0;
var tempMIN=0;

for (var i=1; i<=7; i++) {
  var temp = prompt("Temperatura giorno "+i);
  console.log("TEMP : "+temp+"\ni : "+i);
  if (i==1) {
    tempMAX=temp;
    tempMIN=temp;
  } else if(tempMAX<temp) {
    tempMAX=temp;
  }else if (tempMIN>temp) {
    tempMIN=temp;
  }
       console.log("Temp: "+temp+"\n TempMAX: "+tempMAX+"\NTempMIN: "+tempMIN);
}

alert("La temperatura massima è : "+tempMAX+"\nLa temperatura minima è : "+tempMIN);

Con i console.log ho voluto tener traccia delle variabili, e cambiano bene ma purtroppo il risultato non è sempre quello desiderato.
 
Il codice potrebbe essere strutturato molto meglio ma sostanzialmente l'errore e' che prompt ritorna una stringa e non un Number, per cui il resto dei controlli e' falsato dalle conversioni di tipo implicite:
JavaScript:
// Cambia
var temp = prompt("Temperatura giorno "+i);
// Con
var temp = Number(prompt("Temperatura giorno "+i));
 
  • Mi piace
Reazioni: Cristian_fighter
Ti ringrazio, domattina proverò il codice con questa modifica, purtroppo sono agli inizi e sto provando da poco ad approcciare al linguaggio e capire come convertire una soluzione in codice, se non ti scoccia potresti mostrarmi le possibili varianti? Così da farmi un'idea e apprendere al meglio.
Grazie ancora
 
Quello che @JunkCoder intendesse si riassumono in due punti (forse)

- La struttura "grafica" del codice è un pugno agli occhi. Cerca di seguire un ordine con l'apertura e chiusura delle graffe, idents etc. Così il codice risulta più leggibile e meno "oscuro".
- La prima if (i == 1) vuol dire "Il primo campione di temperatura settalo come max e min". Ok, perfetto ma non mettere if else sotto. Sai comunque che deve farlo una volta sola.

Io lo strutturerei così:

JavaScript:
for (var i=0; i<7; i++) { //Abituati a partire da 0
  var temp = Number(prompt("Temperatura giorno "+i));
  console.log("TEMP : "+temp+"\ni : "+i);
  if (i==0) //Inizializzazione delle variabili tempMax e tempMin
  {
    tempMAX=temp;
    tempMIN=temp;
  }
   
  if (tempMAX<temp) //Non serve inserire graffe se hai solo una istruzione da eseguire
      tempMAX=temp;
   
  if (tempMIN>temp)
    tempMIN=temp;

  console.log("Temp: "+temp+"\n TempMAX: "+tempMAX+"\NTempMIN: "+tempMIN);
} // Fine For

alert("La temperatura massima è : "+tempMAX+"\nLa temperatura minima è : "+tempMIN);

NB: Sono esercizi semplici ma comunque è una best practice aggiungere commenti sui ragionamenti logici che stai programmando.

MP
 
  • Mi piace
Reazioni: Cristian_fighter
Si puo' scrivere in diversi modi per risultare piu' leggibile, qui un esempio seguendo la tua struttura ma saltando l'inizializzazione (i == 1)
JavaScript:
function askTemp(num_day) {
    return Number(prompt("Temperatura giorno " + num_day));
}
var tempMin = askTemp(1);
var tempMax = tempMin;
for (var i = 2; i <= 7; i++)
{
    var temp = askTemp(i);
    tempMin = Math.min(tempMin, temp);
    tempMax = Math.max(tempMax, temp);
}
alert("La temperatura massima è : " + tempMax + "\nLa temperatura minima è : " + tempMin);

Qui invece un esempio con gli array:
JavaScript:
var temp_days = [];
var num_days = 7;
for (var i = 0; i < num_days; i++)
{
    var temp = Number(prompt("Temperatura giorno " + (i + 1)));
    temp_days.push(temp);
}
var tempMin = temp_days[0];
var tempMax = min;
for (var i = 0; i < num_days; i++)
{
    tempMin = Math.min(tempMin, temp_days[i]);
    tempMax = Math.max(tempMax, temp_days[i]);
}
alert("La temperatura massima è : " + tempMax + "\nLa temperatura minima è : " + tempMin);