pascal probs, find den fehler nicht

Seite 1 von 2 - Forum: Coding Stuff auf overclockers.at

URL: https://www.overclockers.at/coding-stuff/pascal_probs_find_den_fehler_nicht_104945/page_1 - zur Vollversion wechseln!


hanzi schrieb am 22.01.2004 um 19:41

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 :D

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.

* das var Fehlte, das war der ganze Fehler.
Ohne var = call by value
Mit var = call by reference


Frys_Assassin schrieb am 22.01.2004 um 19:52

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 schrieb am 22.01.2004 um 19:56

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... :D
funzt jetzt


mat schrieb am 22.01.2004 um 20:28

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 schrieb am 22.01.2004 um 20:29

ich verwende free pascal ;)
da funzt das alles :D

btw. sicher kann ich strings vergleichen, ich kann auch die .exe uppen wenn du es mir net glaubst :D :p


mat schrieb am 22.01.2004 um 20:52

aha.. na ja, mir kann es einerlei sein, deinem lehrer vielleicht nicht.


DKCH schrieb am 22.01.2004 um 21:03

die kommentare sind dubios, aber was ist am strings vergleichen verkehrt?


mat schrieb am 22.01.2004 um 21:09

'100' < '99'


MightyMaz schrieb am 22.01.2004 um 21:15

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 "'*_$§$" ? :D


Geigerzeiger schrieb am 22.01.2004 um 21:26

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 schrieb am 22.01.2004 um 21:30

ah, stimmt, type definitionen lesen hilft :D

nur nach dem anfangsbuchstaben sortieren ist ja dann auch fad, weil was tust bei "aa" und "ab", kommisar zufall?


Geigerzeiger schrieb am 22.01.2004 um 21:31

Zitat von MightyMaz
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 "'*_$§$" ? :D

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 schrieb am 22.01.2004 um 21:37

Zitat von mat
'100' < '99'
'99' < 'ATROX'
'ATROX' < 'MAT'
'MAT' < 'atrox'


hanzi schrieb am 22.01.2004 um 21:56

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?)


mat schrieb am 22.01.2004 um 22:13

na das geht ja mördergut.. muahaha :D

probier mal:
1000
9
34
87
23




overclockers.at v4.thecommunity
© all rights reserved by overclockers.at 2000-2025