URL: https://www.overclockers.at/coding-stuff/pascal_probs_find_den_fehler_nicht_104945/page_1 - zur Vollversion wechseln!
Ich frag ja nur ungern, aber ich hab da ein problem mit meiner Programmier Hausübung
Wir sollen mit hilfe vom "Bubblesort" vom User eingegebene wörter sortieren, nur ich baue wiedermal eine endlosschleife
Kann mir plz jemand sagen was da der Fehler ist, ich sehe ihn echt nicht
Festgestellt hab ich aber, dass er irgendwo in dem fett-geschriebenen Teil des Textes sein muss.
btw. es ist nicht die beste lösung, dazu fehlt mir noch viel wissen...
[.. gibt es eine Funktion die mir die anzahl der Stellen eines Arrays zurückgibt? ]
Code:program stringread; USES crt; type data = array[1..5] of string; var str : data; i : integer; procedure swap ([COLOR=red]var*[/COLOR] x,y : string); var dummy : string; begin dummy := x; x := y; y := dummy; end; procedure bubble([COLOR=red]var*[/COLOR] daten:data); var i:integer; swapped:boolean; begin repeat swapped := false; // flag initialisieren ;) [B] for i:= 1 to 4 do begin if daten[i] > daten[i+1] then begin swap (daten[i],daten[i+1]); swapped := true; end; end;[/B] until (swapped=false); end; begin //clean tha screen ;) clrscr(); // einlesen der komischen Zeichenfolgen die der User eintippselt writeln('Geben sie bitte 5 Zeichenketten ein!'); for i:=1 to 5 do begin readln(str[i]); end; writeln; // eine leere zeile :eek: writeln; // ...und nochmal bubble(str); // blubber blubber // ergebis ausgeben writeln('Hier die geordnete version!'); for i:=1 to 5 do begin writeln(str[i]); end; readkey; // luxxuz end.
ich kann mich nimmer so genau an die funktionsweise von pascal erinnern, aber ich habe den verdachte daß deine swap funktion zwar swapt, aber nur in der procedure. dh es wird kein wert zurückgegeben und in der hauptschleife bleibt dann alles wies is. deswegen auch ne endlosschleife weil ers immer wieder probiert. in c heisst was du machst call by value, aber besser wäre call by reference falls dir das was sagt.
jo call by reference sagt mir was
das wäre dann so:
procedure swap (var x,y : string);
werds gleich testen
EDIT:
THX!!
Frys_Assassin das war der einzige fehler...
funzt jetzt
DAS wundert mich aber jetzt.. du vergleichst strings, das kann gar nicht funktionieren. welche tp version hast du? (ich frag auch weil du // für kommentare verwendet hast.. das is mir auch neu )
ich verwende free pascal
da funzt das alles
btw. sicher kann ich strings vergleichen, ich kann auch die .exe uppen wenn du es mir net glaubst
aha.. na ja, mir kann es einerlei sein, deinem lehrer vielleicht nicht.
die kommentare sind dubios, aber was ist am strings vergleichen verkehrt?
'100' < '99'
komplette Strings vergleichen ist nicht möglich !
Du kannst höchstens, basierend auf den Ascii Werten der Buchstaben, das erste Zeichen Vergleichen (was vieleicht in dem Dialekt automatisch geschieht ?), wobei du da aber ja noch nach Groß und Kleinschreibung unterscheiden mußt und auch überlegen mußt, was mit Sonderzeichen passiert.
Was ist nun z.b. größer ?
"§)=$%$" oder doch eher "'*_$§$" ?
ist schon ne weile her wie ich mich mit PASCAL beschäftigt hab. Wir haben damals auch die ganzen sortier-algorithmen durchgmacht, wennst an fehler so net findest, solltest a moi an debugger einsetzen.
Der hat ma immer weitergholfen. Du muasst das prog Step-byStep ausführen und dabei watches einbauen
ah, stimmt, type definitionen lesen hilft
nur nach dem anfangsbuchstaben sortieren ist ja dann auch fad, weil was tust bei "aa" und "ab", kommisar zufall?
Zitat von MightyMazkomplette Strings vergleichen ist nicht möglich !
Du kannst höchstens, basierend auf den Ascii Werten der Buchstaben, das erste Zeichen Vergleichen (was vieleicht in dem Dialekt automatisch geschieht ?), wobei du da aber ja noch nach Groß und Kleinschreibung unterscheiden mußt und auch überlegen mußt, was mit Sonderzeichen passiert.
Was ist nun z.b. größer ?
"§)=$%$" oder doch eher "'*_$§$" ?
'99' < 'ATROX'Zitat von mat'100' < '99'
es geht.
im anhang das compilierte programm als .txt file
(rename to .exe)
click here
es wird sortiert wie im wörterbuch.
nur großbuchstaben kommen vor kleinbuchstaben (oder umgekeht?)
na das geht ja mördergut.. muahaha
probier mal:
1000
9
34
87
23
overclockers.at v4.thecommunity
© all rights reserved by overclockers.at 2000-2025