Einzelnen Beitrag anzeigen

Bjoerk

Registriert seit: 28. Feb 2011
Ort: Mannheim
1.384 Beiträge
 
Delphi 10.4 Sydney
 
#9

AW: Zugriffs Verweigerung bei Multiplikation in Schleife Boolean Array Primzahl Anwen

  Alt 31. Aug 2011, 18:34
Soll wohl irgendwie sowas sein, sieht nach Primzahlberechnung o.ä. aus !?

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
const
  maxZ = 100;
  maxN = 10000; // maxZ*maxZ
var
  Untergrenze, Obergrenze, I, J, K: integer;
var
  Gestrichen: array [2..MaxN] of boolean;
begin
  Untergrenze:= StrToInt(Edit1.Text);
  Obergrenze:= StrToInt(Edit2.Text);
  Panel1.Caption:= '';
  if Untergrenze > Obergrenze then
    Panel1.Caption:= 'Die Untergrenze darf die Obergrenze nicht überschreiten.'
  else
    if Obergrenze > maxZ then
      Panel1.Caption:= 'Die Obergrenze ist zu hoch. Sie darf maximal '+IntToStr(maxZ)+' betragen.'
    else
      if Untergrenze < 2 then
        Panel1.Caption:= 'Die Untergrenze muss mindestens 2 betragen.'
      else
      begin
        Gestrichen[2]:= false;
        for I:= 2 to maxZ do
          if not Gestrichen[I] then
            for J:= 2 to maxZ do Gestrichen[I*J]:= true;
        ListBox1.Clear;
        ListBox1.Items.BeginUpdate;
        for K:= Untergrenze to Obergrenze do
          if not Gestrichen[K] then ListBox1.Items.Add(IntToStr(K));
        ListBox1.Items.EndUpdate;
      end;
end;

Alternative:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  Untergrenze, Obergrenze, I, J, K: integer;
  Result: boolean;
begin
  Untergrenze:= StrToInt(Edit1.Text);
  Obergrenze:= StrToInt(Edit2.Text);
  ListBox1.Clear;
  ListBox1.Items.BeginUpdate;
  for I:= Untergrenze to Obergrenze do
  begin
    Result:= true;
    for J:= 2 to Obergrenze do
    begin
      if not Result then Break;
      for K:= 2 to Obergrenze do
      begin
        if not Result then Break;
        if I = J*K then Result:= false;
      end;
    end;
    if Result then ListBox1.Items.Add(IntToStr(I));
  end;
  ListBox1.Items.EndUpdate;
end;

Geändert von Bjoerk (31. Aug 2011 um 19:10 Uhr) Grund: Alternative
  Mit Zitat antworten Zitat