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? verwirrt



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? verwirrt



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? verwirrt


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. großes Grinsen



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 großes Grinsen Mathematik Augenzwinkern



Geschrieben von Karlito am 21.05.2013 um 08:52:

 

Na Gott sei Dank, ich habe schon schlimmes befürchtet großes Grinsen .

Genug OFF-Topic. Ich hoffe wir haben unseren Kandidaten nicht verscheucht smile

VG,

Karlito


Forensoftware: Burning Board, entwickelt von WoltLab GmbH