Entwickler-Ecke
Algorithmen, Optimierung und Assembler - problem mit InsertionSort
mick - Sa 08.04.06 23:25
Titel: problem mit InsertionSort
ich bin doch tatsaechlich nicht in der lage den fehler in folgendem pascal-code (hoffentlich stellt das jetzt kein problem dar) zu finden.
zwei insertionsort-implementierungen sind da zur wahl, beide machen die gleichen mucken: die fuehrende zahl im array wird nicht wegsortiert. warum? liegt der fehler im testhauptprogramm oder in der prozedur oder was?
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65:
| program MiJoZi_Test; uses crt; var i,j : integer; feld: array[1..10] of longint;
Procedure InsertionSort(Var Feld: Array Of LongInt); Var i, j: LongInt; Temp: LongInt; Begin For i := 2 To High(Feld) Do Begin Temp := Feld[i]; j := i - 1; While (Feld[j] > Temp) And (j > 0) Do Begin Feld[j+1] := Feld[j]; j := j - 1; End; Feld[j+1] := Temp; End; End;
begin clrscr; randomize; for i := 1 to 5 do begin for j := 1 to 10 do feld[j] := random(10); write (i:2,') Unsortiert: '); for j := 1 to 10 do write (' ',feld[j]); writeln; Insertionsort(feld); write (' Sortiert : '); for j := 1 to 10 do write (' ',feld[j]); writeln; writeln; end; writeln; readln; end. |
ciao,
mick.
AXMD - Sa 08.04.06 23:27
Zeile 19: warum fängst du bei i = 2 an zu zählen? Dynamische Arrays beginnen immer mit dem Index 0, wenn sie an eine Prozedur übergeben werden.
AXMD
mick - Sa 08.04.06 23:33
danke. sollte es dann i := 1 heissen? das klappt bei mir auch nicht.
ciao,
mick.
AXMD - Sa 08.04.06 23:38
Kannst du "klappt nicht" vielleicht etwas genauer beschreiben :roll: ? Außerdem würde ich dich bitten, das "bloed oder was?!" aus dem Titel zu entfernen.
Danke
AXMD
mick - Sa 08.04.06 23:44
klappt nicht bedeutet, dass ich nach wie vor dasselbe problem habe: die vorderste zahl wird nicht wegsortiert.
eine moeglichkeit waere jedoch folgende modifiktion, wie ich grade sehe:
Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| For i := 1 To High(Feld) Do Begin Temp := Feld[i]; j := i - 1; While (Feld[j] > Temp) And (j > -1) Do Begin |
das muesste jetzt "klappen".
weiss nur noch nicht, was das alles mit dynamischen arrays zu tun hat. die gibt es doch noch nicht bei pascal, oder? wie kann mein compiler hier dann (und: wo?) dynamische arrays akzeptieren?
ciao,
mick.
ps: titel editiert. (hui, seid ihr restriktiv.)
AXMD - Sa 08.04.06 23:46
mick hat folgendes geschrieben: |
weiss nur noch nicht, was das alles mit dynamischen arrays zu tun hat. die gibt es doch noch nicht bei pascal, oder? wie kann mein compiler hier dann (und: wo?) dynamische arrays akzeptieren? |
Was ist dann das Array in Zeile 14 :gruebel:? Sieht nicht sehr statisch aus...
AXMD
mick - Sa 08.04.06 23:57
hm, ok, wenn das auch unter die kategorie dynamische arrays faellt, ok. ich glaube ich muss da mal ein paar luecken schliessen. hatte in erinnerung, dass turbopascal dyn. arrays nicht kennt und es sich hier um eine "gewoehnliche" variablenuebergabe an ein unterprogramm handelt (wie sollte ich die auch anders (nicht dynamisch) gestalten, die array-uebergabe?).
jedenfalls funzt nun das programm. auch wenn dies nicht mehr vielen abgedrucken idealloesungen in skripten etc. entspricht (die erste in meinem ersten posting ist eine). wollte im grunde naemlich wissen, warum ich diese loesungen nicht 1:1 kopieren kann. du sagst wg. dyn. arrays. das scheint zu stimmen, aber ich verstehe es nicht.
danke fuer die programmiertechnische aufklaerung,
ciao,
mick.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!