Classe 1ª I – Esercizio sulla propagazione degli errori

Calcolare con relativo errore il volume di un cilindro di raggio r = (12,05±0,05) mm ed altezza h = (27,15±0,01) mm

A = π r² = π r r
V = A h

π = 3,1415926

A = 456,167 mm²
ΔA = (0+Δr/r+Δr/r) A = 3,786 mm²

V = 12’384,9 mm³ = 12,3849 cm³
ΔV = (3,786/456,167+0,01/27,15) 12’384,9 = 107,4 mm³ = 0,1074 cm³

V = (12,4±0,1) cm³
E% = 0,8 %

Ordinamento per selezione

program OrdinamentoPerSelezione;

{$APPTYPE CONSOLE}

var
  a: array[1..100] of Integer;
  n: Integer;

procedure Legge;
var
  i: Integer;
begin
  for i:=1 to n do
  begin
    Write('a[', i, ']? '); ReadLn(a[i]);
  end;
end;

procedure Scrive;
var
  i: Integer;
begin
  for i:=1 to n do
    WriteLn('a[', i, ']= ', a[i]);
end;

procedure Scambia(var x, y: Integer);
var t: Integer;
begin
  t:=x; x:=y; y:=t;
end;

procedure Ordina;
var
  i, j: Integer;
begin
  for i:=1 to n-1 do
    for j:=i+1 to n do
      if a[i]>a[j] then
        Scambia(a[i], a[j]);
end;

begin
  Write('Quanti elementi? '); ReadLn(n);
  Legge;
  Ordina;
  WriteLn('Array ordinato');
  Scrive;
  ReadLn;
end.

Temperature – Esempio di programma con gli array

const
  nMax = 100;

var
  frmTemperature: TfrmTemperature;
  citta: array[1..nMax] of String;
  temp: array[1..nMax] of Double;
  nCitta: Integer;
procedure TfrmTemperature.btnCaricaClick(Sender: TObject);
var
  i: Integer;
begin
  for i:=1 to nMax do
  begin
    citta[i]:=InputBox('Città',
      'Inserisci il nome (stringa vuota per finire): ', '');
    if citta[i]='' then
    begin
      nCitta:=i-1;
      Exit;
    end;
    temp[i]:=StrToFLoat(InputBox('Temperature',
      'Inserisci la temperatura di '+citta[i]+': ', ''));
  end;
end;

procedure TfrmTemperature.btnVisualizzaClick(Sender: TObject);
var
  i: Integer;
  s: String;
begin
  s:='Elenco delle città inserite e delle temperature'+#13;
  for i:=1 to nCitta do
    s:=s+citta[i]+'   '+FloatToStr(temp[i])+' °C'+#13;
  ShowMessage(s);
end;

procedure TfrmTemperature.btnCittaMinClick(Sender: TObject);
var
  i: Integer;
  min: Double;
  s: String;
begin
  min:=100;
// ricerca prima la temperatura minima
  for i:=1 to nCitta do
    if temp[i]<min then
      min:=temp[i];
// ricerca poi tutte le città che hanno la temperatura minima
  s:='Città con la temperatura minima: '+FloatToStr(min)+' °C'+#13;
  for i:=1 to nCitta do
    if temp[i]=min then
      s:=s+citta[i]+#13;
  ShowMessage(s);
end;

Algoritmi di ordinamento

procedure Ordina;
var
  i, j: Integer;
begin
  for i:=1 to n-1 do
    for j:=i+1 to n do
      if a[i]>a[j] then
        Scambia(a[i], a[j]);
end;
procedure Ordina;
var
  i, j: Integer;
begin
  for i:=n-1 downto 1 do
    for j:=1 to i do
      if a[j]>a[j+1] then
        Scambia(a[j], a[j+1]);
end;
procedure Ordina;
var
  i, j, t: Integer;
begin
  for i:=2 to n do
  begin
    t:=a[i];
    j:=i;
    while (a[j-1]>t) and (j>1) do
    begin
      a[j]:=a[j-1];
      Dec(j);
    end;
    a[j]:=t;
  end;
end;
procedure Ordina(inf, sup: Integer);
var
  i, j, p: Integer;
begin
  i:=inf; j:=sup;
  p:=a[(inf+sup) div 2];
  repeat
    while a[i]<p do Inc(i);
    while a[j]>p do Dec(j);
    if i<=j then
    begin
      Scambia(a[i], a[j]);
      Inc(i); Dec(j);
    end;
  until i>j;
  if inf<j then Ordina(inf, j);
  if i<sup then Ordina(i, sup);
end;
  • File da includere i tutti programmi precedenti: V-ORD-XX.PAS