{ File: pression.pas }

{ Scopo: esercizio sull'uso di cicli e di funzioni }

program PressioneCocaCola;

{ In questo programma ci sono delle costanti relative alla specifica
  del particolare problema; se si trattasse di chinotto invece che di
  Coca Cola, i valori 0.00105 0.0042 1.325 e 3.2 potrebbero essere diversi;
  allora e' abbastanza ragionevole pensare di farne delle costanti simboliche.
  }

const
  T_INIT    = 12;
  P_CRITICA = 3.2;
var         
  temperatura : integer; { la temperatura: un valore che parte da 12 e aumenta
                           di un grado per volta, quindi rappresentabile
                           agevolmente con un intero }
  pressione   : real;    { la pressione nella bottiglia, in funzione della
                           temperatura }

  function ValorePressione (t: integer): real;
  const
    C2 = 0.00105;
    C1 = 0.0042;
    C0 = 1.325;
  begin
    ValorePressione := C2 * sqr(t) + C1 * T + C0;
  end; { ValorePressione }

begin { PressioneCocaCola }
  temperatura := T_INIT;   { inizializzazione della temperatura }
  pressione := ValorePressione(temperatura);

  { ciclo di incrementi della temperatura e variazioni conseguenti della
    pressione; prima di ogni variazione, stampiamo i valori attuali }

  while (pressione < P_CRITICA) do
  begin
    writeln('Temperatura = ', temperatura :3, ' Pressione = ', pressione :5);
    temperatura := temperatura + 1;
    pressione := ValorePressione(temperatura);
  end; { fine ciclo }
  writeln('Alla temperatura di ', temperatura :3,
          ' gradi la bottiglia esplode. Pressione =', pressione);
end. { PressioneCocaCola }