Informatiker Board (http://www.informatikerboard.de/board/index.php)
- Themengebiete (http://www.informatikerboard.de/board/board.php?boardid=1)
--- Theoretische Informatik (http://www.informatikerboard.de/board/board.php?boardid=5)
---- Berechenbarkeits- und Komplexitätstheorie (http://www.informatikerboard.de/board/board.php?boardid=15)
----- Loop-Programme von Funktionen (http://www.informatikerboard.de/board/thread.php?threadid=1508)
Geschrieben von bradig am 20.05.2013 um 02:39:
Loop-Programme von Funktionen
c)ich soll ein Loop-Programm für folgende Funktion geben:
div: !N^2 ------> !N
o falls x=0 oder (x>0 und x teilt y nicht)
div(x,y)={
1 falls x>0 und x teilt y
also mit Addition und Multiplikation habe ich schon gemacht aber das kriege ich seit gestern nicht hin.
Bitte Hilfe
herzlich
Bradig
Geschrieben von Karlito am 20.05.2013 um 13:49:
Hallo,
Schau dir mal folgenden Lösungsansatz an. Ich hoffe er stimmt.
code: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
|
IF X = 0 THEN
Erg := 0
ELSE
Zaehler := 1; DoCalc := 1;
LOOP y DO
IF DoCalc = 0 THEN
X1 := y - Zaehler*x
IF X1 = 0
DoCalc := 0;
ELSE
Zaehler := Zaehler + 1;
END
ELSE
END
END
X2 := X*Zaehler - y
IF X2 = 0 THEN
Erg := 1
ELSE
Erg := 0
END
END
|
|
Ich weiß, dass das Programm nicht vollständig LOOP-Konform ist. Jedoch sollte sich jeder Ausdruck in eine äquivalentes LOOP-Programm umwandeln lassen.
Der Ansatz funktioniert folgendermaßen:
- Ist x=0 ist keine Berechnung notwendig -> Erg = 0
Ansonsten:
- Wir Probieren alle Faktoren von x aus bis maximal y*x
- ist zaehler*x > y, dann werden keine weiteren Faktoren ausprobiert (Zähler wird nicht erhöht)
Jetzt kann Zähler*x nur noch größer oder gleich y sein. Dies wird geprüft, indem x*zähler - y gerechnet wird. Ergibt sich dabei eine 0, so ist x teiler von y ansonsten nicht.
Ich hoffe ich habe nichts übersehen.
VG,
Karlito
Geschrieben von Airblader am 20.05.2013 um 14:18:
Ich kenne LOOP nicht, aber es erscheint mir merkwürdig, dass du DoCalc auf 1 setzt und in der Schleife auf 0 überprüfst – der Teil wird damit doch niemals ausgeführt, oder?
Geschrieben von Airblader am 20.05.2013 um 14:29:
Noch eine Kleinigkeit: Ich denke, die Schleife sollte mit Zaehler = 0 anfangen und insgesamt (y+1)-mal laufen.
Geschrieben von bradig am 20.05.2013 um 14:52:
RE: Loop-Programme von Funktionen
Loop-Programm (berechenbarkeit theoretische informatik)
besipiel add: IN*IN--->IN
mit add(x,y)=x+y
die Funktion add ist Loop-berechenbar,weil sie sich durch ein Loop-Programm berechnet lässt.
Resultat xo=x+y
Loop-Programm für die Funktion add:
xo=x+0;
Loop yDo
xo=x+1;
End
Geschrieben von Airblader am 20.05.2013 um 15:01:
Aha. Und nun?
Geschrieben von bradig am 20.05.2013 um 17:08:
Loop-programm
jetzt soll ich das gleiche mit der Funtion div tun.
ich überlege mir gerade,wie ich das am bestens machen kann
Geschrieben von bradig am 20.05.2013 um 17:18:
richtig
wenn dein code so richtig ist,konnte ich in einem Loop-Programm umwandeln und hier die Lösung posten .
Geschrieben von Karlito am 20.05.2013 um 17:47:
Zitat: |
Original von Airblader
Ich kenne LOOP nicht, aber es erscheint mir merkwürdig, dass du DoCalc auf 1 setzt und in der Schleife auf 0 überprüfst – der Teil wird damit doch niemals ausgeführt, oder?
|
Danke Airblader! Alles was im THEN-Zweig steht muss in den ELSE-Zweig.
Ich hoffe das wars mit Fehlern.
@Airblader:
LOOP-Programme kommen aus der theoretischen Informatik.
Dabei gibt es nur die Operationen LOOP, was wie eine for-Schleife funktioniert und Zuweisungen und die Addition und Substraktion mit einer Konstanten. Die Substraktion ist dabei eine modifizierte Substraktion bei der alle Werte, die Kleiner als 0 sind auf 0 abgebildet werden.
@bradig Schau noch mal genau drauf, ich hoffe dass es so richtig ist. Und wenn du zu dem Ergebnis kommst, wäre eine gepostete Lösung schön. Ich möchte aber, dass du den Code nachvollziehst und verstehst.
VG,
Karlito
Geschrieben von bradig am 20.05.2013 um 18:52:
Loop-Programm
gerade nicht einfach,da der Code für mich nicht ganz verständlich ist.
Geschrieben von Karlito am 20.05.2013 um 19:50:
Wo hängt es denn?
VG,
Karlito
Geschrieben von Airblader am 20.05.2013 um 21:08:
Zitat: |
Original von Karlito
Die Substraktion ist dabei eine modifizierte Substraktion bei der alle Werte, die Kleiner als 0 sind auf 0 abgebildet werden. |
Stimmt… da war im Studium mal was. Naja, Informatik war nur mein Nebenfach.
Geschrieben von Karlito am 20.05.2013 um 23:22:
BWL?
Geschrieben von Airblader am 21.05.2013 um 06:45:
Um Gottes Willen nein
Mathematik
Geschrieben von Karlito am 21.05.2013 um 08:52:
Na Gott sei Dank, ich habe schon schlimmes befürchtet
.
Genug OFF-Topic. Ich hoffe wir haben unseren Kandidaten nicht verscheucht
VG,
Karlito
Forensoftware: Burning Board, entwickelt von WoltLab GmbH