Registrierung Kalender Mitgliederliste Teammitglieder Suche Häufig gestellte Fragen Zur Startseite

Informatiker Board » Themengebiete » Praktische Informatik » Turbo Pascal - Case Statements mit Wörtern » Hallo Gast [Anmelden|Registrieren]
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | An Freund senden | Thema zu Favoriten hinzufügen
Neues Thema erstellen Antwort erstellen
Zum Ende der Seite springen Turbo Pascal - Case Statements mit Wörtern
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
INFO
Grünschnabel


Dabei seit: 18.09.2017
Beiträge: 6

Turbo Pascal - Case Statements mit Wörtern Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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
18.09.2017 23:38 INFO ist offline E-Mail an INFO senden Beiträge von INFO suchen Nehmen Sie INFO in Ihre Freundesliste auf
as_string as_string ist männlich
Haudegen


Dabei seit: 06.11.2013
Beiträge: 639
Herkunft: Heidelberg

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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
19.09.2017 07:35 as_string ist offline E-Mail an as_string senden Beiträge von as_string suchen Nehmen Sie as_string in Ihre Freundesliste auf
INFO
Grünschnabel


Dabei seit: 18.09.2017
Beiträge: 6

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Wie mache ich das dann mit einem String??
19.09.2017 17:29 INFO ist offline E-Mail an INFO senden Beiträge von INFO suchen Nehmen Sie INFO in Ihre Freundesliste auf
eulerscheZahl eulerscheZahl ist männlich
Foren Gott


Dabei seit: 04.01.2013
Beiträge: 2.859

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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

__________________
Syntax Highlighting fürs Board (Link)
20.09.2017 16:46 eulerscheZahl ist offline Beiträge von eulerscheZahl suchen Nehmen Sie eulerscheZahl in Ihre Freundesliste auf
INFO
Grünschnabel


Dabei seit: 18.09.2017
Beiträge: 6

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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);
20.09.2017 17:14 INFO ist offline E-Mail an INFO senden Beiträge von INFO suchen Nehmen Sie INFO in Ihre Freundesliste auf
eulerscheZahl eulerscheZahl ist männlich
Foren Gott


Dabei seit: 04.01.2013
Beiträge: 2.859

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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

__________________
Syntax Highlighting fürs Board (Link)

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von eulerscheZahl: 20.09.2017 19:21.

20.09.2017 19:20 eulerscheZahl ist offline Beiträge von eulerscheZahl suchen Nehmen Sie eulerscheZahl in Ihre Freundesliste auf
INFO
Grünschnabel


Dabei seit: 18.09.2017
Beiträge: 6

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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;

...
20.09.2017 19:43 INFO ist offline E-Mail an INFO senden Beiträge von INFO suchen Nehmen Sie INFO in Ihre Freundesliste auf
as_string as_string ist männlich
Haudegen


Dabei seit: 06.11.2013
Beiträge: 639
Herkunft: Heidelberg

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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
20.09.2017 21:39 as_string ist offline E-Mail an as_string senden Beiträge von as_string suchen Nehmen Sie as_string in Ihre Freundesliste auf
Baumstruktur | Brettstruktur
Gehe zu:
Neues Thema erstellen Antwort erstellen
Informatiker Board » Themengebiete » Praktische Informatik » Turbo Pascal - Case Statements mit Wörtern