Autor Beitrag
paperwings
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Do 18.11.10 22:32 
Hey Leute, ein Freund und ich entwickeln ein Programm, mit dem man durch die eingabe einer Zahl herausfindet ob es eine Primzahl ist oder nicht.

->
ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
unit prim;

interface

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

type
  TForm1 = class(TForm)
    LTitel: TLabel;
    LFrage: TLabel;
    EPrimzahl: TEdit;
    BBerechne: TButton;
    procedure BBerechneClick(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
  p_primzahl: boolean;

implementation

procedure Primzahlprobe_1 (p_Zahl:integer;var p_primzahl:boolean);
var teiler:integer;
begin
p_primzahl := true;
FOR teiler := 2 TO (p_Zahl-1DO
IF (p_Zahl MOD teiler) = 0 THEN p_primzahl := false
end;
{$R *.dfm}

procedure TForm1.BBerechneClick(Sender: TObject);
begin
Primzahlprobe_1;
p_primzahl.Text := IntToFloat ;

end;

end.


Wir bekommen leider den Fehler 'nicht genügend wirkliche Parameter' angezeigt, wissen aber nicht was wir falsch gemacht haben, kann uns jemand helfen?

LG


Moderiert von user profile iconChristian S.: Topic aus Gemeinschaftsprojekte verschoben am Do 18.11.2010 um 21:37
Moderiert von user profile iconChristian S.: Delphi-Tags hinzugefügt
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Do 18.11.10 22:41 
Das ist jetzt nicht dein Ernst oder? Du schreibst die Funktion selber und kannst sie nicht aufrufen?

Prozedur: procedure Primzahlprobe_1 (p_Zahl:integer;var p_primzahl:boolean);
Dein Aurfruf: Primzahlprobe_1;

Und warum so umständlich mir dem var-Parameter? Da bietet sich doch eigentlich eine Funktion an.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Do 18.11.10 22:42 
Hallo und :welcome:

Außerdem:
user profile iconpaperwings hat folgendes geschrieben Zum zitierten Posting springen:
ausblenden Delphi-Quelltext
1:
p_primzahl.Text := IntToFloat ;					
Was soll denn IntToFloat machen (wenn es das geben würde)? Eine Zahl in eine Zahl umwandeln? :gruebel:
paperwings Threadstarter
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Do 18.11.10 22:46 
Ja sry ich bin totaler Neuling haben das grade ind er schule und ich verstehs ehrlich egsagt kaum :D
Kann mir eienr genau sagen was ich machen soll?
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Do 18.11.10 22:49 
Die Parameter an die Prozedur übergeben, die diese bekommen soll.

Und wenn du nicht weißt was das ist, dann lese einmal die ersten Seiten hiervon...
crashkurs.christian-stelzmann.de
und die neue Version speziell ab Turbo Delphi:
www.christian-stelzm...shkurs_reloaded.html

Speziell den Teil zu Prozeduren und Funktionen:
www.christian-stelzm...oaded/#_Toc180058867
Dude566
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 1592
Erhaltene Danke: 79

W8, W7 (Chrome, FF, IE)
Delphi XE2 Pro, Eclipse Juno, VS2012
BeitragVerfasst: Do 18.11.10 22:50 
Hier solltest du mal dringend schauen: www.christian-stelzm...rtikel/crashkurs.htm

Edit: zu langsam :x

_________________
Es gibt 10 Gruppen von Menschen: diejenigen, die das Binärsystem verstehen, und die anderen.
paperwings Threadstarter
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Do 18.11.10 22:52 
Ja dann bedank ich mich ich werd mich da mal durcharbeiten...
Delphi-Laie
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1600
Erhaltene Danke: 232


Delphi 2 - RAD-Studio 10.1 Berlin
BeitragVerfasst: Fr 19.11.10 20:07 
Auch wenn Du Neuling bist (aller Anfang ist schwer), so möchte ich doch auf drei wahrlich grottenschlechte Dinge gleich hinweisen (die man nämlich auch, wenn man das ganze "manuell" bzw. "zu Fuß" berechnen würde, nie täte bzw. besser unterlassen sollte):

user profile iconpaperwings hat folgendes geschrieben Zum zitierten Posting springen:
ausblenden Delphi-Quelltext
1:
2:
FOR teiler := 2 TO (p_Zahl-1DO
IF (p_Zahl MOD teiler) = 0 THEN p_primzahl := false


1. Es ist nicht nötig, den Divisor bis p_zahl-1, sondern nur bis zur Wurzel der Zahl laufen zu lassen.
2. Der kleinste Divisor ist 2 (gerade Primzahl, das kann man allerdings mit der Delphi-Funktion "odd" auch herausbekommen), der nächstkleinste bzw. nächstkleinere wäre 3 und dann der nächstsinnvolle die 5 (denn es gibt nach der 2 keine geraden Primzahlen mehr), und dann den Divisor gleich in 2er-Schritten laufen zu lassen (7, 9 usw. auch wenn in der Menge der ungeraden natürlichen Zahlen immer weniger Primzahlen enthalten sind, je höher man kommt).
3. Das ganze ist in einer bedingungsbehafteten Schleife (while-do oder repeat-until) besser als in einer Zählschleife aufgehoben, weil die Nichtprimeigenschaft ja in einem der Schleifendurchläufe festgestellt werden kann und dann weitere Schleifendurchläufe überflüssig sind.
F34r0fTh3D4rk
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 5284
Erhaltene Danke: 27

Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
BeitragVerfasst: Sa 20.11.10 02:01 
4. Offensichtlich geht das mit einem probabilistischem Algorithmus sogar in polynomieller Laufzeit.

Was ich damit sagen will, ist dass ich von einem Programmier-Anfänger solche Optimierungen nicht erwarten würde. Schon gar nicht wenn der Algorithmus noch nicht einmal kompiliert. Als "wahrlich grottenschlecht" würde ich das also nicht bezeichnen. Schön wäre es natürlich, wenn die Schleife abbricht, sobald feststeht, dass es keine Primzahl sein kann, aber zunächst zählt nun mal nur das Ergebnis.
Die von dir genannten Optimierungen machen bei Betrachtung des asymptotischen Verhaltens auch gar nicht so viel aus (auch wenn es hier vermutlich nicht um riesige Primzahlen geht), aber als Anfänger setzt man sich nun mal nicht mit Laufzeiten auseinander, außer vielleicht man ist Mathematiker. :roll:

Für diesen Beitrag haben gedankt: Kha
Delphi-Laie
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1600
Erhaltene Danke: 232


Delphi 2 - RAD-Studio 10.1 Berlin
BeitragVerfasst: Di 23.11.10 00:11 
user profile iconF34r0fTh3D4rk hat folgendes geschrieben Zum zitierten Posting springen:
4. Offensichtlich geht das mit einem probabilistischem Algorithmus sogar in polynomieller Laufzeit.


Na, das wäre von mir aber nicht gekommen, denn das war mir neu.

Allerdings steht dort bereits am Artikelanfang, daß es sich um einen deterministischen Algorithmus handelt. Wenn man sich schon auf dieses Amateurlexikon bezieht, dann muß so etwas substantielles unbedingt und richtig mit entnommen werden.

user profile iconF34r0fTh3D4rk hat folgendes geschrieben Zum zitierten Posting springen:
Die von dir genannten Optimierungen machen bei Betrachtung des asymptotischen Verhaltens auch gar nicht so viel aus (auch wenn es hier vermutlich nicht um riesige Primzahlen geht), aber als Anfänger setzt man sich nun mal nicht mit Laufzeiten auseinander, außer vielleicht man ist Mathematiker. :roll:


Man muß kein Mathematiker sein, um auch für einen Nichtmathmatiker erkennbar unsinnige Divisionen auszuschließen.

Die Anzahl der Divisionen zunächst zu halbieren und dann auch noch - im Vergleich zur vorigen Anzahl - auf die (Quadrat-)Wurzel zu beschränken, mögen zwar vom Aspekt der Komplexität(sklasse) her keine Größenordnungen sein (beides polynomial, also kein Wechsel der Komplexitätsklasse), sind aber - wie im übrigen alle Optimierungen - durchaus relevant, können erheblich sein und bis auf riesige Unterschiede anwachsen.
Xion
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
EE-Maler
Beiträge: 1952
Erhaltene Danke: 128

Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
BeitragVerfasst: Di 23.11.10 12:39 
user profile iconpaperwings hat folgendes geschrieben Zum zitierten Posting springen:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
  p_primzahl: boolean;

[...]

p_primzahl.Text := IntToFloat ;


Dir ist schon klar, was ein boolean ist? :D

_________________
a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)