Entwickler-Ecke

Sonstiges (Delphi) - Dividieren: Ist die Zahl ohne Rest teilbar?


Big_Nuke - So 18.08.02 16:37
Titel: Dividieren: Ist die Zahl ohne Rest teilbar?
Guthen Teg, mein Name ist Siegmund Freud, ;-)
tjaaaaaaaaaaaaaaaaaa... ich hab n KLEIIIINES Problem. Ist sicher für keinen von euch problematisch, aber mein Programm soll selbstständig sagen können, dass zwei zahlen ohne/mit Rest (ohne/mit Dezimalstellen)
teilbar sind.

Ihr könnt mir sicher helfen. Vielen Dank :mrgreen:


Ex0rzist - So 18.08.02 16:43

Hallo Big_Nuke,

die Operation, die du suchst ist mod.
Sie gibt den Rest bei einer Division zurück.
Zum Beispiel:
5 mod 2 = 1

Und mit div machst du eine ganzzahlige Division.
Zum Beispiel:
5 div 2 = 2


P.S.: Das steht auch alles in der Onlinehelp.
____________

Ex0rzist


Big_Nuke - Mo 19.08.02 13:42

Mist... geht nich ganz... ich wollt ein Primzahlen berechnungsprog schreiben... aber er berechnet mehr eine zahlenreihe von +3, +3, +3, +4
oder so... :( :? aber ihr könnt mir sicher helfen... :mrgreen:


Ex0rzist - Mo 19.08.02 15:09

Um dir helfen zu können, müsstest du schon etwas Code posten.


Big_Nuke - Di 20.08.02 20:27

Hier das Herz des Programms: den Timer:


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
procedure TForm1.Timer2Timer(Sender: TObject);
label new;
label next;
begin
new:
teiler := 1;
zahl:=zahl+1;
next:
teiler := teiler+1;
 if teiler<zahl then begin
    if zahl mod teiler = 0 then begin
       goto new;
    end else begin
       goto next;
    end;
 end else begin
 memo1.lines.Add('  Nächste Priemzahl: '+inttostr(zahl));

 teiler := 1;
 end;
 
end;


nun? ach und die Ergebnisse:



Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
  Nächste Priemzahl: 983
  Nächste Priemzahl: 991
  Nächste Priemzahl: 997
  Nächste Priemzahl: 1009
  Nächste Priemzahl: 1013
  Nächste Priemzahl: 1019
  Nächste Priemzahl: 1021
  Nächste Priemzahl: 1031
  Nächste Priemzahl: 1033
  Nächste Priemzahl: 1039
  Nächste Priemzahl: 1049
  Nächste Priemzahl: 1051
  Nächste Priemzahl: 1061
  Nächste Priemzahl: 1063
  Nächste Priemzahl: 1069

(das ist natürlich kein code!)


Ex0rzist - Di 20.08.02 22:04

Hallo Big_Nuke,


Big_Nuke hat folgendes geschrieben:

Quelltext
1:
2:
3:
4:
...
goto new;
...
goto next;



Gewöhne dir das mit dem Goto gar nicht erst an bzw. schnell ab.
Das führt früher oder später nur zu Verwirrungen im Code.

"... the quality of programmers is a decreasing function of the density of goto statements in the programms they produce.''


___________

Ex0rzist


hitstec - Di 20.08.02 22:36

Da alle geraden Zahlen keine Primzahlen sind, wäre es durchaus sinnvoll den Algo in eine while-Schleife zu packen, die die geraden Zahlen überspringt, etwa so:


Quelltext
1:
2:
3:
4:
5:
6:
7:
iStep:=3
while ... do begin
  if...
  .
  .
  iStep:=iStep+2;
end;


Big_Nuke - Do 22.08.02 15:51

das mit dem goto is schon ok.. ich habs mir von c++ angewöhnt...
aber ich hab jetzt n anderes prob... un zwar:
bei grösseren Zahlen Stürzt der pc ab... ich müsste ihm sagen, er soll eine millisekunde pause machen, befor er teiler:= teiler+1 macht, um so zu verhindern, dass er 10000000 mal die mod anweisung durchführt und dafür nur eine ms zeit hat... oder gibt es eine andere lösung?


hitstec - Do 22.08.02 18:10


Quelltext
1:
sleep(1);                    


Dieser Befehl schläfert das Prog für eine ms ein.