pascal probs, find den fehler nicht
hanzi 22.01.2004 - 19:41 938 18
hanzi
flawless victory.
|
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? ] 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.
* das var Fehlte, das war der ganze Fehler. Ohne var = call by value Mit var = call by reference
Bearbeitet von hanzi am 22.01.2004, 20:14
|
Frys_Assassin
information keeper
|
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.
|
hanzi
flawless victory.
|
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
Bearbeitet von hanzi am 22.01.2004, 20:14
|
mat
AdministratorLegends never die
|
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 )
|
hanzi
flawless victory.
|
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
|
mat
AdministratorLegends never die
|
aha.. na ja, mir kann es einerlei sein, deinem lehrer vielleicht nicht.
|
DKCH
...
|
die kommentare sind dubios, aber was ist am strings vergleichen verkehrt?
|
mat
AdministratorLegends never die
|
'100' < '99'
|
MightyMaz
hat nun auch einen Titel
|
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 "'*_$§$" ?
|
Geigerzeiger
Addicted
|
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
|
DKCH
...
|
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?
|
Geigerzeiger
Addicted
|
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 "'*_$§$" ? AFAIK kann man in PAS schon strings komplett vergleichen. Man kann auch zb schreiben: if str1 < str2 then... Wenn str1 größer als str2 ist dann .... Da wird sowieso alphabetisch überprüft.
|
atrox
in fairy dust... I trust!
|
'100' < '99' '99' < 'ATROX' 'ATROX' < 'MAT' 'MAT' < 'atrox'
|
hanzi
flawless victory.
|
es geht. im anhang das compilierte programm als .txt file (rename to .exe) click herees wird sortiert wie im wörterbuch. nur großbuchstaben kommen vor kleinbuchstaben (oder umgekeht?)
Bearbeitet von hanzi am 22.01.2004, 21:58
|
mat
AdministratorLegends never die
|
na das geht ja mördergut.. muahaha probier mal: 1000 9 34 87 23
|