Informatiker Board (http://www.informatikerboard.de/board/index.php)
- Themengebiete (http://www.informatikerboard.de/board/board.php?boardid=1)
-- Praktische Informatik (http://www.informatikerboard.de/board/board.php?boardid=6)
--- Turbo Pascal - Case Statements mit Wörtern (http://www.informatikerboard.de/board/thread.php?threadid=3699)


Geschrieben von INFO am 18.09.2017 um 23:38:

  Turbo Pascal - Case Statements mit Wörtern

Meine Frage:
Hallo,

Ich versuche gerade in Turbo Pascal ein case statement zu schreiben:

case wunsch of
'Kaffee': begin
Writeln('Bezahlen Sie 1,00 EUR fuer: ',wunsch);

Das ist der case-Teil. Der Rest ist egal, da der Error immer hier bei diesem case-Statement kommt.
Die Variable wunsch ist ein String. Mit char üwrde das ja nicht gehen, da char nur mit einzelnen Zeichen geht, anstatt mit mehreren. Wenn ich nun versuche mein Programm auszugeben, dann sagt TP: Error 39: Ordinal Expression expected.

Vielen Dank im vorraus.

Meine Ideen:
Keine weiteren Ideen



Geschrieben von as_string am 19.09.2017 um 07:35:

 

Hallo!

Ich habe schon 25 Jahre kein Pascal mehr gemacht, aber kann man case-of nicht nur bei ganzzahligen und enum-Werten verwenden? Eine char-Variable ist dabei ein Ganzzahlwert, weil es ja einem Byte mit 256 verschiedenen Werten entspricht. Aber ein String kann ja eine beliebige Anzahl von Zeichen haben, so dass es keine direkte Konvertierung zu einer Ganzzahl geben kann.
Pascal macht da einen einfachen Integer-Vergleich am Ende. Ein Stringvergleich ist viel aufwändiger.

Gruß
Marco



Geschrieben von INFO am 19.09.2017 um 17:29:

 

Wie mache ich das dann mit einem String??



Geschrieben von eulerscheZahl am 20.09.2017 um 16:46:

 

Zunächst hat as_string Recht, case und string verträgt sich nicht immer, wie in diesem Forenbeitrag von 2012 geschrieben.
Mittlerweile gehen auch strings, siehe Doku.
"The constants appearing in the various case parts must be known at compile-time, and can be of the following types : enumeration types, Ordinal types (including chars) or string types"

Turbo Pascal ist aber nicht Free Pascal und kann das nicht.

Da musst du wohl ein if-else machen (du könntest ein case mit dem Hashwert des string machen, aber dazu würde ich nicht raten).



Geschrieben von INFO am 20.09.2017 um 17:14:

 

Und könntest du mir auch erklären warum bei einem If Else Statement Turbo Pascal den Error 42 (Error 42: Error in expression) bei -> else<- von if else ausfweist?

Mein if else:

if x = 'Kaffee' then
begin
writeln('Dein Getränk: Kaffee');
writeln('Bezahle: 1.00 EUR');
readln(preis);

Error 42: Error in expression
(hier)
if else x = 'Wasser' then
writeln('Dein Getränk: Wasser');
writeln('Bezahle: 0.10 EUR);
readln(preis);



Geschrieben von eulerscheZahl am 20.09.2017 um 19:20:

 

Dein begin hat kein end (müsste vor den else kommen).
Und: es heißt "else if", nicht "if else".



Geschrieben von INFO am 20.09.2017 um 19:43:

 

Hi,

Wenn ich das mache, dann kommt ein anderer Error unglücklich .
Error 113: Error in Statement.
Also das Statement:

...

if x = 'Kaffee ' then
begin
writeln('Bezahle 1.00 EUR fuer Kaffee');
readln(wahl);
end;

else if x = 'Wasser' then
begin
writeln('Bezahle 0.10 EUR fuer Wasser');
readln(wahl);
end;

...



Geschrieben von as_string am 20.09.2017 um 21:39:

 

Ich weiß nicht, ob man in Pascal einfach den Gleichheitsoperator für Stringvergleiche verwenden kann.
Man kann aber auf jeden Fall die Funktion CompareStr verwenden. Beide Strings sind gleich, wenn die Funktion 0 zurück gibt.

Gruß
Marco


Forensoftware: Burning Board, entwickelt von WoltLab GmbH