Pascal (PERMUTATIONEN!!)

  • Hallo!
    Es geht um ein Pascal-Programm, das die Permutationen von 1-4 ausgeben soll. Dabei ist mir nicht ganz klar, wie das Ganze funktioniert. Es wäre nett, wenn mir jemand das Programm erklären könnte.

    Insbesondere kann ich nicht nachvollziehen, warum die Variablendeklaration (die der Prozedur von I und H) nicht im Prozedurkopf sondern darunter stehen (wann muss ich sie in den kopf schreiben, wann nicht?).
    Desweiteren sind mir die Schleifen nicht ganz klar, sowie der Dreieckstausch:

    program permutation;

    uses crt;

    const n=4;

    type bereich=1..N;
    feldtyp=array[bereich] of bereich;
    var i:bereich;
    pm:feldtyp;

    procedure permu(p:feldtyp; k:bereich);

    var i,h:bereich;
    begin
    if k=n then
    begin for i:=1 to n do write(' ',P[i]);
    writeln;
    end
    else
    for i:=k to n do
    begin
    h:=P[i];
    P[i]:=p[k];
    P[k]:=h;
    permu(P,k+1);
    end;
    end;
    begin
    clrscr;
    for i:=1 to n do pm[i]:=i;
    permu(Pm,1);
    readln;
    end.

    Also wie gesagt, wäre nett wenn mir jemand das Ganze möglichst bald erklären könnte.

  • Insbesondere kann ich nicht nachvollziehen, warum die Variablendeklaration (die der Prozedur von I und H) nicht im Prozedurkopf sondern darunter stehen (wann muss ich sie in den kopf schreiben, wann nicht?).


    Du schreibst sie in den Kopf, wenn sie Parameter sein sollen, die beim Aufruf der Prozedur übergeben werden. Die Variablen i und h haben nur innerhalb der Prozedur eine Bedeutung, i als Schleifenzähler und h als Zwischenspeicher beim Vertauschen von zwei Elementen. Deswegen hat es keinen Sinn, sie zu Parametern der Prozedur zu machen, sie sollen ihre Werte innerhalb der Prozedur erhalten und nicht von außen.

    Zitat

    Desweiteren sind mir die Schleifen nicht ganz klar


    Welche Schleife(n)?

    Zitat

    sowie der Dreieckstausch


    Was daran ist dir nicht klar?


    Bäh. Verwende [code]-Tags um den Code herum und formatiere ihn lesbar.

    *plantsch*

  • Zum Dreieckstausch: Wie läuft das genau ab? Was ist P[i]/P[k] beispielsweise beim ersten Durchlauf??
    for i:=k to n do
    begin
    h:=P[i];
    P[i]:=p[k];
    P[k]:=h;
    permu(P,k+1);

    Also zunächst ist k=1 also i=1 oder?
    Was ist nun hier P[i]? Was ist P[k] ? Ist das nur
    eine Zahl? sind das direkt mehrere?
    Ich versteh ja das P[i] mit P[k] getauscht wird.
    Aber mir ist eben nicht ganz klar was die Werte
    darstellen und wie das ganze genau abläuft.
    Also die Schleife for i:=k to n do wird zuerst mit 1 durchlaufen. Und dann wird nochmal die Procedure gestartet, mit einem um 1 größeren k-wert? oder läuft die schleife zuerst zuende?
    Wie genau entstehen bei dem Programm die Permutationen???

  • Zum Dreieckstausch: Wie läuft das genau ab? Was ist P[i]/P[k] beispielsweise beim ersten Durchlauf??

    Du willst a und b tauschen. Also wirfst du zuerst a in eine neue Variable. Dann weist du a den Wert von b zu und b soll den alten Wert von a bekommen - der jetzt in der neuen Variable steckt. Einfach die drei Zuweisungen, das nennt man Dreieckstausch.

    Und verwende code-Tags, dann liest dein Problem vielleicht auch wer.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!