Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Programm für Primzahlzwillinge (https://www.delphipraxis.net/14488-programm-fuer-primzahlzwillinge.html)

gordon freeman 10. Jan 2004 12:32


Programm für Primzahlzwillinge
 
Hallo Leute,
ich muss für die Schule ein Programm schreiben, das aus einem bestimmten Zahlenbereich (z.B. 1-20) alle Primzahlzwillinge auflistet. Primzahlzwillinge sind zwei Primzahlen, die genau eine Zahl "zwischen" sich haben (z.B. 3,5 oder 11,13). Ich hab auch schon ein Programm geschrieben, das läuft nur nicht ganz richtig :wall: . Könnt ihr mir helfen?

Hier das Programm:

Delphi-Quellcode:
unit Unit1;

interface

uses

SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,
Forms, Dialogs, StdCtrls;

type
TForm1 = class(TForm)
Edit1: TEdit;
Edit2: TEdit;
Memo1: TMemo;
m: TLabel;
n: TLabel;
Primzahlenzwillinge: TLabel;
Rechnen: TButton;
Ende: TButton;
procedure EndeClick(Sender: TObject);
procedure RechnenClick(Sender: TObject);

private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;

var
Form1: TForm1;
m,n,x,i,h,u,zaehler,code:integer;
xstr,mstr:string;
implementation

{$R *.DFM}

procedure TForm1.EndeClick(Sender: TObject);
begin
close
end;

procedure TForm1.RechnenClick(Sender: TObject);
begin
val(form1.edit1.text,m,code);
val(form1.edit2.text,n,code);
for i:=m to n do

//Primzahlentest
begin
zaehler:=0;
for h:=1 to m do
if m mod h=0 then zaehler:=zaehler+1;
end;

//Zwillingstest
begin
if zaehler=2 then x:=m+2;
zaehler:=0;
for u:=1 to x do
if x mod u=0 then zaehler:=zaehler+1;
if zaehler=2 then
begin
str(x,xstr);
str(m,mstr);
memo1.lines:=memo1.lines+mstr+','+xstr+';';
end;
end;
end;

end.
tia, gordon Freeman

[edit=sakura] [delphi]-Tags gesetzt. Bitte in Zukunft selbst tun UND etwas mit Code-Einrückung arbeiten. Mfg, sakura[/edit]

Wheelie 10. Jan 2004 23:04

Re: Programm für Primzahlzwillinge
 
Habe mir deinen Code jetzt nicht weiter durchgelsen, da ich der Meinung bin, dass es eigentlich viel einfacher geht ... hier mein Vorschlag:

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, ExtCtrls;

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Edit2: TEdit;
    Button1: TButton;
    ListBox1: TListBox;
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

Function Primzahl(zahl : Integer): Boolean;
var
i: integer;
begin
  Result := True;
  If zahl = 1 then
  begin
    Result := False;
    Exit;
  end;
  For i := 2 to (zahl div 2) do
  begin
    If ((zahl mod i) = 0) then
    begin
      Result := False;
      Exit;
    end;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var start, ende, i: Word;
begin
  start := StrToInt(Edit1.Text);
  ende := StrToInt(Edit2.Text);

  for i := start to ende do
  begin
    if Primzahl(i) then
    begin
      if (Primzahl(i+2)) and (i+2 <= ende) then ListBox1.Items.Add(IntToStr(i) + ' & ' + IntToStr(i+2));
    end;
  end;

end;

end.
Brauchst für dein Prog zwei Edits, einen Button und eine ListBox zur Ausgabe. Fertig :zwinker:

Seniman 11. Jan 2004 18:14

Re: Programm für Primzahlzwillinge
 
Hallo miteinander,

@Wheelie: Ich möchte etwas zu deinem Code bemerken: Du hast in der Funktion Primzahl eine For-Schleife für i:=2 to (Zahl div 2). Man kann die Funktion etwas schneller machen, in dem du (Zahl div 2) durch Trunc(sqrt(Zahl)) ersetzt. Denn die Wurzel reicht zum überprüfen ob eine Zahl prim ist aus und ist kleiner als die Hälfte.

Grüße
Seniman

Wheelie 11. Jan 2004 19:17

Re: Programm für Primzahlzwillinge
 
danke für den hinweis :thuimb:


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:18 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz