{ File: tempsett.pas }

{ Scopo: primo esempio di uso di array bidimensionali }

program TemperatureSettimana;
{ Legge le temperature per ogni ora di ogni giorno della settimana e calcola
    - l'ora piu` calda (in assoluto) della settimana
    - il giorno piu` caldo mediamente
    - l'ora piu` calda mediamente }

const
  OraIniziale = 1;
  OraFinale   = 24;

type
  TipoTemperatura = -50..50;

  TipoGiorno      = (Lunedi,Martedi,Mercoledi,Giovedi,Venerdi,Sabato,Domenica);
  TipoOra         = OraIniziale..OraFinale;
  TipoTemperature = array [TipoGiorno, TipoOra] of TipoTemperatura;
    { ogni variabile di questo tipo e` una matrice bidimensionale di
                             7 righe   (una per ogni giorno della settimana) e
       OraFinale-OraIniziale+1 colonne (una per ogni ora della giornata)
    }

var
  giorno, giorno_max : TipoGiorno;
  ora, ora_max       : TipoOra;
  temperature        : TipoTemperature;
  tmax               : TipoTemperatura; { temperatura massima (assoluta, media
                                          giornata, e media ora) }
  tmedia, tmedia_max : real;

begin
  { lettura delle temperature }
  writeln('Immetti le temperature della settimana !');
  for giorno := Lunedi to Domenica do
  begin
    writeln('Giorno ', ord(giorno), ':');
    for ora := OraIniziale to OraFinale do
    begin
      write('  ora ', ora:2, ' ? ');
      readln(temperature[giorno,ora])
    end;
    writeln
  end;


  { calcolo dell'ora piu` calda della settimana }
  tmax := -50;
  for giorno := Lunedi to Domenica do
    for ora := OraIniziale to OraFinale do
      if temperature[giorno,ora] > tmax then
      begin
        tmax := temperature[giorno,ora];
        giorno_max := giorno;
        ora_max := ora
      end;
  writeln('Ora piu` calda in assoluto: giorno ', ord(giorno_max),
          ', ora ', ora_max, ' con temperatura: ', tmax);


  { calcolo del giorno mediamente piu` caldo }
  tmedia_max := -50;
  for giorno := Lunedi to Domenica do            { ciclo ESTERNO: GIORNI      }
  begin { calcolo della temperatura media del giorno corrente su tutte le ore }
    tmedia := 0;
    for ora := OraIniziale to OraFinale do       {   ciclo INTERNO: ORE       }
      tmedia := tmedia + temperature[giorno,ora];
    tmedia := tmedia/(OraFinale-OraIniziale+1);  {   media giorno corrente    }
    if tmedia > tmedia_max then
    begin
      tmedia_max := tmedia;
      giorno_max := giorno
    end
  end;
  writeln('Giorno piu` caldo in media: ', ord(giorno_max),
          ' con temperatura media: ', tmedia_max:6:2);


  { calcolo del'ora mediamente piu` calda }
  tmedia_max := -50;
  for ora := OraIniziale to OraFinale do         { ciclo ESTERNO: ORE         }
  begin { calcolo della temperatura media dell'ora corrente su tutti i giorni }
    tmedia := 0;
    for giorno := Lunedi to Domenica do          {   ciclo INTERNO: GIORNI    }
      tmedia := tmedia + temperature[giorno,ora];
    tmedia := tmedia / 7;                        {   media dell'ora corrente  }
    if tmedia > tmedia_max then
    begin
      tmedia_max := tmedia;
      ora_max := ora
    end
  end;
  writeln('Ora piu` calda in media: ', ora_max,
          ' con temperatura media: ', tmedia_max:6:2);

end. { TemperatureSettimana }