Mal wieder SCHEME...
-
Hallo,
ich muss unter Anderem ein kleines Programm schreiben, das mir ausgibt ob es sich um eine primzahl handelt oder nicht.
Zunächst das was ich habe:
(define x 1) (define (prim? n) "x wird um 1 erhöht" (if (= x n) (display "#t") (if (= (modulo n x) 0) (display "#f") (prim? n))))
Eine Primzahl (größer 1!) ist ja erst eine, wenn sie nur durch sich selbst teilbar ist und durch 1.
Ich habe mir dann einfach gedacht, dass ich x mit 1 definiere. x ist die Zahl mit der ich die eingegebene Zahl n teile.
Wenn n=x ist, dann ist es ja eine Primzahl, also im Fall von 2.
Die Zahl darf ja nicht durch andere Zahlen teilbar sein.
Und wenn x ungleich n ist, dann prüft er ob n durch x ohne Rest teilbar ist. Wenn der Rest 0 ist, dann ist es keine Primzahl, weil die Zahl n durch eine andere teilbar ist. Und wenn sie nicht teilbar ist, dann wird (prim? n) wieder aufgerufen und x um 1 erhöht.....
Und wenn x = n erreicht ist, dann muss es eine Primzahl sein, weil davor die "Abbruchbedingung" nicht erreicht wurde, also dass n durch eine andere Zahl außer 1 und sich selbst teilbar ist.Aber wie mache ich das, dass x um 1 erhöht wird?? Mit (x (x + 1)) funktioniert es nicht...
-
Ich habe das jetzt so hinbekommen.
(define (prim? n) (cond ((= n 2) #t) ((= (modulo n 2)0) #f) (else (let trynumber((teiler 3)) (cond((>= teiler n) #t) ((= (modulo n teiler)0) #f) (else (trynumber (+ teiler 2))))))))
Jetzt habe ich eine Zusatzaufgabe:
Schreiben Sie eine Funktion (suche-Primzahl obere-Grenze untere-Grenze), die alle Primzahlen innerhalb des Intervalls [obere-Grenze, untere-Grenze] ausgibt.
Dazu habe ich folgendes:
(define (suche-Primzahl obere-Grenze untere-Grenze) (if (prim? untere-Grenze)(begin(display untere-Grenze) (display " "))) (cond ((>= untere-Grenze obere-Grenze)) (else (if (= (modulo untere-grenze 2)0) (suche-Primzahl obere-Grenze (+ untere-Grenze 1)) (suche-Primzahl obere-Grenze (+ untere-Grenze 2))))))
Aber irgendwie geht das nicht...er gibt z.b. nur "#t" aus...und nicht die Zahlen...
Beispiel: (suche-Primzahl 2
--> 2, 3, 5, 7
Wäre für Hilfe sehr sehr dankbar!!!