Pascal Feld wird nicht sortiert

B

Bizepsbenny

Gast
Hallo, ich habe folgendes Programm aus dem Skript abgeschrieben:

Code:
program FeldSort (input, output);
{ sortiert ein einzulesendes Feld von integer-Zahlen }

  const
  FELDGROESSE = 5;
  
  type
  tIndex = 1..FELDGROESSE;
  tFeld = array [tIndex] of integer;
  
  var
  EingabeFeld : tFeld;
  MinPos,
  i : tIndex;
  Tausch : integer;
  
  function FeldMinimumPos (Feld : tFeld;
                           von, bis: tIndex): tIndex;
  { bestimmt die Position des Minimums im Feld zwischen
  * von und bis, 1 <= von <= bis <= FELDGROESSE }
  
    var
    MinimumPos,
    j : tIndex;
    
  begin
    MinimumPos := von;
    for j := von +1 to bis do
      if Feld[j] < Feld[MinimumPos] then
        MinimumPos := j;
    FeldMinimumPos := MinimumPos
  end; { FeldMinimumPos }
  
begin
  { Einlesen des Feldes }
  writeln ('Geben Sie ', FELDGROESSE, ' Werte ein: ');
  for i := 1 to FELDGROESSE do
    readln (EingabeFeld[i]);
    
  { sortieren}
  
  for i := 1 to FELDGROESSE - 1 do
  begin
    MinPos := FeldMinimumPos (Eingabefeld, i,
                              FELDGROESSE);
    { Minimum gefunden, jetzt muessen wir es mit dem 
    * Element auf Position i vertauschen }
    Tausch := EingabeFeld[MinPos];
    EingabeFeld[MinPos] := EingabeFeld[i];
    EingabeFeld[1] := Tausch
  end;
  
  { Ausgabe des sortierten Feldes }
  for i := 1 to FELDGROESSE do
    write (EingabeFeld[i]:6);
  writeln
end. { FeldSort }

Es soll ein Feld von 5 beliebigen integer Zahlen einlesen und sortiert ausgeben.

Im Anhang sind 2 Fotos des Originals und ein Foto der Programm-Ausgabe. Dort wird das Feld nicht sortiert ausgegeben, was eigentlich der Fall sein sollte?

Gruß
BB

Bildschirmfoto vom 2017-10-31 23-44-59.pngBildschirmfoto vom 2017-10-31 23-46-28.pngBildschirmfoto vom 2017-10-31 23-46-59.png
 

Anhänge

  • IMG_9503.jpg
    IMG_9503.jpg
    1,1 MB · Aufrufe: 382
Pascal ist zwar schon lange her bei mir, aber da fehlen meiner Meinung nach einige Strichpunkte im Quelltext.

z.B.: FeldMinimumPos := MinimumPos


Dazu im Sortieren ein Tippfehler: Zeile 50: EingabeFeld[1] := Tausch da muß i als Arrayindex rein.
 
Zuletzt bearbeitet:
Jup :) an der 1 statt i lag es!

Thx :)



Ich habe noch eine Verständnisfrage zu der Funktion Zeile 17-32:

-die Variable MinimumPos wird als von deklariert und ist damit als erste Position des arrays und Startpunkt für die for-Schleife.

-die for-Schleife läuft nun mit der Laufvariablen j =(von+1), die Positionen von+1 nach bis des arrays durch

Jetzt kommen wir von den Positionen zu den Werten:

-wenn der Wert an array-Position [j] < als der Wert an der array-Position [MinimumPos], dann wird die Variable MinimumPos überschrieben mit dem Wert an der Position Feld[j]

Jetzt kommen wir wieder zurück zur Position:

-Der Ausgabewert der Funktion wird schließlich definiert als MinimumPos und damit als die kleinste Position.



Stimmt mein Versuch , das ganze zu verstehen so einigermaßen?

Gruß
BB
 
Zuletzt bearbeitet:
Bizepsbenny schrieb:
Stimmt mein Versuch , das ganze zu verstehen so einigermaßen?

Teilweise ja, teilweise nicht. Geh den Code am besten noch einmal anhand deiner Beschreibung durch und dann wirst du recht schnell sehen, wo du nicht richtig liegst.
Und wie letzt schon einmal erwähnt, musst du dir noch klarer darüber werden, was Index und was Wert in einem Array sind.
 
Hallo Nase,

jup, ich finde das ganze ziemlich abstrakt um es zu verstehen.

Also der Index ist doch tIndex, also die integer Zahlen 1-5. Diese werden dann später durch die Eingabe der Feldwerte überschrieben, oder ist das auch falsch?
 
Bizepsbenny schrieb:
-wenn der Wert an array-Position [j] < als der Wert an der array-Position [MinimumPos], dann wird die Variable MinimumPos überschrieben mit dem Wert an der Position Feld[j]

Ich habe mich darauf bezogen. Du suchst den Feld-Index (=MinimumPos), an dem der kleinste Wert zu finden ist. Dann kannst du das natürlich nicht mit dem Wert an der Position Feld[j] überschreiben, sondern mit dem Index j. Und so steht es eben auch in der Funktion. Sorry, falls ich da ein wenig pingelig bin, aber wenn du das sprachlich nicht sauber formulierst, hast du hinterher Schwierigkeiten, wenn du selbst was programmierst oder mit anderen darüber redest.
 
@Nase

Alles gut, du kannst ruhig pingelig sein, umso mehr kann man lernen :cool_alt:

Also ich glaube ich habs kapiert, es wird ja nur der Feldindex gesucht, "auf dem" der kleinste Wert steht und nicht der "kleinste Wert" an sich. Wenn man den Index UND den Wert haben wollte, bräuchte man anstatt einer Funktion eine Prozedur mit 2 "out-Parametern" richtig?

Grüße
 
Was aus einer Funktion hinten rauskommt nennt man dann meist Rückgabewert. Man könnte sich jetzt nach belieben auch eine Funktion definieren, die einen Vektor mit einem Index und einem Wert zurückgibt, ja.

Und ich würde sagen, Nase ist hier präzise, nicht pingelig.

Ich finde, zum Lernen bietet Pascal hier den Vorteil, dass die Variablen typisiert sind. Das sieht man in deinem Beispielcode z.B. auch:
Deine Indexwerte sind vom Typ tIndex, während die Feldwerte vom Typ Integer sind. Deshalb kannst du (oder man sollte es zumindest nicht) auch keine Indexvariablen mit Feldwerten überschreiben, da sie unterschiedliche Typen tIndex und Integer haben.

Vielleicht sind die Variablennamen in dem Beispiel ein klein wenig unglücklich gewählt, weil es eine Indexvariablen namens FeldMinimumPos und MinimumPos gibt und ein Feld namens Feld, sodass Feld[MinimumPos] wiederum einen einzelnen Wert des Feldes bezeichnen würde.
 
@simpsonsfan

Genau da liegt auch mein Problem, durch die vielen ähnlich klingenden Bezeichner ist es echt manchmal verwirrend da durchzublicken.
 
Zurück
Oben