{ File: primi.pas }

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

program NumeriPrimi;

var
  numero : integer;

  function TestDivisibile (n: integer): boolean;
  { verifica se il numero n e` divisibile }
  var
    i    : integer;
    temp : boolean; 	{ valore booleano che facciammo corrispondere
                          all'affermazione  "trovato un divisore per n" }
  begin
    i := 2;
    temp := FALSE;
    { inizializzazioni: 2 sara' il primo valore controllato;
      il procedimento consiste nel cercare di dimostrare che il numero non e'
      primo (perche' troviamo un divisore). Allora inizialmente
      poniamo 'temp' = FALSE. Se durante il ciclo di ricerca dei divisori
      troviamo un divisore, temp diventa TRUE e il ciclo deve interrompersi. }

    while ((i < n) and not temp) do
    begin
      if n mod i = 0 then
        temp := TRUE;
      i := i + 1;
    end;
    TestDivisibile := temp;
  end; { TestDivisibile }

begin { NumeriPrimi }
  writeln;
  write('Inserire un numero? ');
  readln(numero);
  write('Il numero proposto ');
  if TestDivisibile(numero) then
    writeln('non e'' primo.')
  else
    writeln('e'' primo.');
  readln
end. { NumeriPrimi }