Sprawdzanie kilku liczb: pierwsza czy zlozona

0

Witam, znalazlem z internecie zadanie, w którym trzeba napisać program rozrożniający czy liczba jest pierwsza czy złożona.
Tzn wyswietlone zostaje kilka liczb w polu memo i do kazdej liczby w polu memo2 ma byc wypisany tekst pierwsza lub zlozona.
Moj program wypisuje tylko pierwsza i juz nie za bardzo wiem co mam poprawic. Czy ktos moglby napisac co robie zle.
kod

var
  n : integer;
begin

  for p := 2 to n-1 do
    if n mod p = 0 then
    begin
      result := false;
      break;
    end;
  result := true;

end;


procedure TForm1.Button1Click(Sender: TObject);
begin
  for i := 1 to 10 do
  liczby[i] := Random(10);

  for i := 1 to 10 do
    Memo1.Lines.Add(IntToStr(liczby[i]));
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  For i := 1 to memo1.Lines.Count-1 do    //przejdz po wszystkich wierszach
  begin
    if pierwsza(liczby[i]) = true then
      Memo2.Lines.Add('pierwsza')
    else
      Memo2.Lines.Add('zlozona');
  end;
end;
1

Break nie przerywa funkcji tylko pętlę w efekcie po wyjściu z pętli i tak ustawiasz sobie result:=true. Powinieneś to przypisanie zrobić PRZED pętlą.
Przy okazji pętla aż do n-1 potrzebna nie jest, wystarczy do sufitu z pierwiastka...

2
function pierwsza(n:Integer):Boolean; // n to parametr a nie zmienna lokalna
var p:Integer; // natomiast p - to zmienna lokalna
begin
  for p := 2 to Trunc(Sqrt(n)) do // wystarczy do pierwiastka z n
    if (n mod p) =0 then // z nawiasami zawsze bezpieczniej, zwłaszcza póki się uczysz
    begin
      Result:=false;
      Exit; // break wyskakiwał wprost na Result:=true;
    end;
  Result:=true;
end;

1 użytkowników online, w tym zalogowanych: 0, gości: 1