Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

weiteres banales Problem

0 views
Skip to first unread message

marco23

unread,
Nov 19, 2006, 10:37:46 AM11/19/06
to
IMPLEMENTATION prime

IMPORT Int COMPLETELY
Real COMPLETELY
IntConv COMPLETELY

DEF prime(n) == IF n=0 THEN false
IF n=1 THEN false
IF n=2 THEN true
IF n>2 THEN keinTeiler( n , 3 )
FI


DEF keinTeiler(n,t) == IF ( (t>n) ) THEN true
IF ( (t<=n) and (n%t|=0) ) THEN keinTeiler( n ,
(t+1) )
IF ( (t<=n) and (n%t=0) ) THEN false
FI

Dieser Algorithmuss ist syntaktisch ok, nur semantisch liefert er nicht
das richtige Ergebnis.
Gruß Marco

Robert Buchholz

unread,
Nov 19, 2006, 12:09:39 PM11/19/06
to marco23
Hallo erneut,

du hast da wohl etwas die naive und die verbesserte Version des
Algorithmus durcheinander gebracht. Vielleicht können wir da Abhilfe
schaffen:


marco23 schrieb:


> IF n=2 THEN true
> IF n>2 THEN keinTeiler( n , 3 )

Durch die "3" testest du nur, ob die Zahl durch 3 oder höher teilbar
ist. Du solltest hier bei 2 anfangen, um z.B. auch die Vier zu erwischen.

> DEF keinTeiler(n,t) == IF ( (t>n) ) THEN true
> IF ( (t<=n) and (n%t|=0) ) THEN keinTeiler( n ,
> (t+1) )
> IF ( (t<=n) and (n%t=0) ) THEN false
> FI

Die letzte Fallunterscheidung greift ja immer, wenn t = n ist. Da du
erhöhst, bis dies der Fall ist, ist diese Zeile der Anker der Rekursion.
Du müsstest die Zeilen so ändern, dass der Fall "t = n" nicht mehr auf
die Zeilen 2 und 3 greift, sondern nur auf Zeile 1.

Sprich:
IF t>=n ...
IF t<n and n%t|=0 ...
IF t<n and n%t=0 ...


Ciao,

Robert

signature.asc
0 new messages