Delphi - Prímszámkereső program

forráskód letöltése
Prímszámoknak nevezzük azokat a számokat, melyek csak önmagukkal és 1-el oszthatók maradék nélkül. Többször előfordulhatott már, hogy szerettük volna megállapítani egy számról, hogy az prímszám-e vagy sem. Készítsünk hát egy programot, mely mindezt megteszi, sőt, két megadott tartomány között az összes prímszámot is kilistázza.
Első lépésként létre kell hoznunk egy olyan függvényt, mely megállapítja egy számról, hogy az prímszám-e.
Lássuk a kódot:
Függvényünk egy integer típusú számot vár elemzésre, majd amennyiben a megadott érték prímszámnak bizonyul, True értéket ad vissza, ellenkező esetben a visszatérési érték False lesz.
function CheckPrime(i: integer): boolean;
var
  x: integer;
begin
  result:=true;
  for x:=2 to i-1 do
Az i változóban kapott értéket a 2-től i-1 értékig tartó számokkal elosztjuk, majd megvizsgáljuk az osztáskor kapott maradékot. Figyeljük meg, hogy 1-el és önmagával, azaz i értékével nem osztjuk el a számot, hiszen ez a két érték biztosan megvan maradék nélkül minden számban.
  if i mod x=0 then
    begin
      result:=false;
Amennyiben a maradék nulla, a szám biztosan nem prímszám, hiszen 1-en és önmagán kívül más számmal is osztható maradék nélkül. A függvény visszatérési értéke False lesz.
      break;
    end;
end;
A Kilistázás gombra kattintva a ListBox-ban megjeleníthetjük az összes olyan prímszámot, mely a beállított Min és Max értékek közé esik.
Egy For cikluson belül meghívjuk a fenti függvényt. A ciklus a két beállított végérték közötti számokat adja értékül a függvénynek.
  ListBox1.Clear;
  min:=MinSpin.Value;
  max:=MaxSpin.Value;
A ListBox1 kiürítése után a min változónak a MinSpin-ben, míg a max-nak a MaxSpin-ben beállított értéket adjuk át.
  for x:=min to max do
    if CheckPrime(x)=True then
      ListBox1.Items.Add(IntToStr(x));
Amennyiben a CheckPrime függvény True visszatérési értéket szolgáltat, azaz a vizsgált szám prímszám, hozzáadjuk azt a ListBox1 elemeihez.
Lehetőségünk van egy általunk megadott számról is megállapítani, hogy az prímszám-e, sőt, amennyiben az a megadott tartományon belül esik, a ListBox automatikusan arra az elemre áll. Írjuk hát be az érték helyére a vizsgálandó számot, majd nyomjuk le a Keres gombot.
Ekkor a következő kód fut le:
  ListBox1.Clear;
  min:=MinSpin.Value;
  max:=MaxSpin.Value;
  try
    y:=StrToInt(Value.Text);
Az általunk megadott értéket az y változóban eltároljuk. Ezután elvégezzük a megadott tartományra, majd a megadott értékre a vizsgálatot.
    for x:=min to max do begin
      if CheckPrime(x)=True then
        ListBox1.Items.Add(IntToStr(x));
    end;
Ha a megadott szám prímszámnak bizonyul, kikeressük a megadott tartományból az alábbiak szerint.
    if CheckPrime(y)=True then
      ListBox1.ItemIndex:=ListBox1.Items.IndexOf(IntToStr(y))
    else
Amennyiben a vizsgálat szerint a megadott szám nem prímszám, a felhasználónak üzenetet küldünk.
      ShowMessage('A vizsgált érték nem prímszám!');
  except on EConvertError do begin
    ShowMessage('A keresett érték csak egész szám lehet!');
Amennyiben nem egész számot írtunk be, figyelmeztetést kapunk.
    Value.Text:='';
    end;
  end;