Ergebnis 1 bis 4 von 4

Thema: Fragen zur WHILE-Sprache

  1. #1
    Registriert seit
    06.01.2014
    Alter
    26
    Beiträge
    2

    Standard Fragen zur WHILE-Sprache

    Guten Tag

    Ich verstehe die Idee hinter der WHILE-Sprache (also die do-while-Befehle) aber nicht die Details der Sprache.

    X2 <-X1; bedeutet ja Weise X2 den Wert X1 zu.

    Was bedeutet aber X2 <- S(X2) resp. P(X2)?

    Und warum ist: `X2 <- X0 WHILE X1=/= 0 do (X2 <- S(X2); X1 <- P(X1)) od` eine Addition? Warum muss man Anfangs X2 X0 zuweisen?

    Wäre eine Subtraktion dann so: `X2 <- X0 WHILE X1=/= 0 do (X2 <- P(X2); X1 <- S(X1)) od`?

    Danke für eure Hilfe!

    Liebe Grüsse, Tulbih

  2. #2
    vstm ist offline Fortgeschrittener Benutzer
    Registriert seit
    28.12.2008
    Ort
    Züri Oberland
    Alter
    35
    Beiträge
    123

    Standard AW: Fragen zur WHILE-Sprache

    Ich kenne die WHILE-Sprache nicht, ich kann also auch nur raten was es bedeutet.

    Der Ausdruck `X2 <- S(X2)` ruft wohl die Funktion mit dem Namen "S" auf und weist das Resultat der Funktion `X2` zu.

    Die Funktion "S" ist vermute ich kurz für "Successor", und liefert wohl den nächstgrösseren numerischen Wert zurück, also Mathematisch ausgedrückt `S(X) = X + 1`. Die Funktion P "Predecessor" würde ich sagen sieht so aus: `P(X) = X - 1`.

    Folgende Anweisungen sind also äquivalent:

    Code:
    `X2 <- X2 + 1` und `X2 <- S(X2)`
    sowie:

    Code:
    `X2 <- X2 - 1` und `X2 <- P(X2)`
    Aber ich vermute in der Aufgabenstellung sind die Arithmetischen Operatoren nicht vorgesehen, darum wurde wohl S und P eingeführt.

    Bei der Addition hilft es vielleicht, die Schleife mit Konkreten Beispielen durchzuspielen. Ausserdem hilft es für das Verständnis vielleicht, dass eine Zahl ja auch als Summe von "einsen" dargestellt werden kann. Also 3 kann z.B. als "1 + 1 + 1" dargestellt werden - diese Darstellung ist besonders praktisch, wenn man eine Programmiersprache hat, welche Zahlen nur um eins erhöhen oder verkleinern kann .

    Offensichtlich werden drei Variabeln verwendet: X0, X1 und X2. X0 enthält den ersten Summanden, X1 enthält den zweiten Summanden und in X2 steht dann das Resultat. Sagen wir einmal der erste Summand (X0) ist fünf und der zweite Summand (X1) ist drei. Unsere Symboltabelle sieht also am Anfang des Algorithmus etwa so aus, wobei ich bei X2 "-" eingetragen habe, was etwa soviel bedeutet wie "undefiniert":

    Schritt X0 X1 X2
    0 5 3 -

    Der erste schritt im Algorithmus ist ja `X2 <- X0`. Unsere Symboltabelle sieht nun so aus:

    Schritt X0 X1 X2
    0 5 3 -
    1 5 3 5
    X0 und X2 sind jetzt gleich. Nun kommt die eigentliche Schleife. Bei jeder Iteration (also immer wenn der "Body" der Schleife ausgeführt wird), wird die Symboltabelle verändert. Danach wird die Schleifenbedingung ausgewertet und wenn die Bedingung "Falsch" ist, ist das Ende der Schleife erreicht.

    Wenn wir den Body der Schleife ansehen, stellen wir fest, dass die Variabel X2 jeweils um eins erhöht wird, während X1 jeweils um eins verringert wird. Nach der ersten Ausführung der Schleife sieht die Symboltabelle also so aus:

    Schritt X0 X1 X2
    0 5 3 -
    1 5 3 5
    2 5 2 6

    Wenn wir nun in Gedanken die Schleife weiter Anwenden erhalten wir am Schluss folgende Tabelle:

    Schritt X0 X1 X2 Kommentar
    0 5 3 -
    1 5 3 5
    2 5 2 6 Erster Schleifendurchlauf
    3 5 1 7 Zweiter Schleifendurchlauf
    4 5 0 8 Dritter Schleifendurchlauf, Ende der Schleife

    Wenn X1 0 ist, hört die Schleife auf, bei Schritt Nr. 4 ist der Algorithmus also am ende angekommen. Wir haben in X2 nun das Resultat der Additon von 5 und 3, also 8.

    Die Tabelle mit den Werten ist hilfreich um nicht die Übersicht zu verlieren. Wenn man schon etwas länger Programmiert macht man das im Kopf, so fern die Anzahl der Variabeln überschaubar ist.

    Bezüglich der Frage Warum am Anfang `X2 <- X0` gemacht wird: man muss es nicht machen aber ich bin mir auch nicht sicher warum es gemacht wurde. Man könnte argumentieren, dass der Entwickler die Originalen Summanden nicht anfassen wollte, jedoch wird der zweite Summand "X1" ja auch verändert (es ist ja praktisch der Schleifenzähler). Man könnte den Algorithmus auch umschreiben, so dass X2 nicht verwendet wird. Es würde dann etwa so aussehen:
    Code:
    WHILE X1=/= 0 do (X0 <- S(X0); X1 <- P(X1)) od
    Das Resultat der Operation wäre dann in X0, statt in X2.

    Die Subtraktion ist eigentlich gleich wie die Addition, einfach muss statt "S" ebenfalls "P" verwendet werden:

    Code:
    X2 <- X0 WHILE X1=/= 0 do (X2 <- P(X2); X1 <- P(X1)) od
    Die Anweisung `X1 <- P(X1)` bleibt gleich, weil immer noch geprüft wird ob X1 =/= 0 ist. Und wenn da `X1 <- S(X1)` stehen würde, wäre `X1` niemals 0 (ausser `X1` wäre schon negativ, also kleiner als 0).

    Ich hoffe meine Ausführungen helfen ein wenig weiter, ansonsten musst Du sagen wo Du festsitzt.

    Ich wäre ein schrecklicher Lehrer

  3. #3
    Registriert seit
    06.01.2014
    Alter
    26
    Beiträge
    2

    Standard AW: Fragen zur WHILE-Sprache

    hallo vstm

    Ganz und gar kein schrecklicher Lehrer, besser könnts man ja wohl nicht erklären.

    Wahrscheinlich wählt man das X2 damit man dann den Originalwert (hier 5) noch erhalten hat und ihn vielleicht in einer andere Rechnung wieder gebrauchen kann!?

    Das mit der Tabelle ist wirklich eine gute Idee!

    Danke vielmals für deine ausführliche Hilfe,
    Tulbih

  4. #4
    Registriert seit
    13.01.2004
    Ort
    Swizzerland
    Alter
    41
    Beiträge
    4.736

    Standard AW: Fragen zur WHILE-Sprache

    Zitat Zitat von vstm Beitrag anzeigen
    Ich kenne die WHILE-Sprache nicht, ich kann also auch nur raten was es bedeutet.
    Also für ein Raten scheint mir die Antwort ziemlich fundiert
    Klasse Beitrag, vstm!

Ähnliche Themen

  1. sprache
    Von mili94 im Forum Software: Windows, Apple, Linux...
    Antworten: 11
    Letzter Beitrag: 28.05.2008, 17:06
  2. Fragen zur EDV
    Von Holden20 im Forum Software: Windows, Apple, Linux...
    Antworten: 6
    Letzter Beitrag: 31.10.2004, 23:54
  3. Sprache
    Von balkonman im Forum Off Topic
    Antworten: 9
    Letzter Beitrag: 14.05.2004, 02:10

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  
BigBellyBank.shop