Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Probleme mit Operator und Operandentyp
Chrizzwalze - Mi 01.09.10 18:50
Titel: Probleme mit Operator und Operandentyp
Hallo,
Ich muss für meine Facharbeit ein Programm schreiben und habe mich entschieden, ein Quiz zu programmieren.
Ich hab das soweit durchdacht, allerdings hängts jetzt an der Umsetzung.
Hier mal das Stück Quelltext, welches mir gerade Probleme bereitet:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| procedure TForm1.Button1Click(Sender: TObject); begin if merke1<0 then showmessage('Du darfst nur einmal pro Frage antworten!') else merke1:=merke1+1 and if merke1=1 then begin Richtig:=Richtig+1; showmessage('Richtig!'); end else if merke1>1 then begin showmessage('Du darfst nur einmal pro Frage antworten!'); end; end; |
So... Wenn ich nun das Programm starte, zeigt der mir in der Zeile beim vorletzten "end;" an:
"Operator ist auf diesen Operandentyp nicht anwendbar".
Allerdings habe ich keine Ahnung, was ich mit dieser Information anfangen soll...
Kann mir jemand erklären, wo im Quelltext das Problem liegt und wie ich es löse?
Vielen Dank im Voraus. LG
Moderiert von
Gausi: Delphi-Tags hinzugefügtModeriert von
Narses: Topic aus Sonstiges (Delphi) verschoben am Mi 01.09.2010 um 22:06
platzwart - Mi 01.09.10 19:06
Delphi-Quelltext
1:
| else merke1:=merke1+1 and |
Das ist die kritische Zeile. Das 'and' passt da irgendwie nicht.
(Ausdruck 1) and (Ausdruck 2) -> liefert true oder false zurück. Bei dir ist Ausdruck 1 eine Zuweisung (merke1:=merke1+1) und Ausdruck 2 ist ein if-Konstrukt...
Chrizzwalze - Mi 01.09.10 19:43
hmm.... also sollte ich das "and" weglassen und ein Semikolon setzen?
Ich weiß nur nicht, ob das dann so funktioniert wie ich möchte...
Zumindest geht das Programm so zu starten. Ich melde mich, wenn es wieder ein Problem gibt, danke :) .
platzwart - Mi 01.09.10 19:43
Ob das so funktioniert, wie du willst, kannst nur du wissen. Oder du teilst uns mit, was du willst ;)
Chrizzwalze - Mi 01.09.10 20:05
Ok, ich versuchs mal zu erklären^^.
Wie gesagt, es soll ein Quiz werden.
Vorerst wollte ich es mit nur 1 Frage (Die Frage wird in einem Label gestellt) und 3 Antworten dazu (also 3 Buttons) probieren.
Es gibt die Variablen "merke1" und "Richtig", beide integer. Beide werden beim Programmstart auf Null gesetzt.
Button 1 enthält die richtige Antwort. Wenn der Button1 geklickt passiert folgendes:
merke1:=merke1+1 und wenn merke1=1 ist, dann Richtig:=Richtig+1.
Auf diese Weise werden die richtigen Antworten gezählt.
Dann musste ich ja noch sowas wie "Sicherungen" einbauen, damit man pro Frage nur einmal antworten kann ;) sonst würde ja das
Ergebnis verfälscht werden. Also habe ich da ein paar Vergleiche von merke1 drin und im entsprechenden Fall zeigt das Programm
eben eine Meldung, dass man nur einmal antworten darf pro Frage.
So hab ich mir das grob vorgestellt... und es funktioniert :D .
Delete - Mi 01.09.10 20:34
Das sieht nach einer konzeptionellen Schwäche aus. Eine Frage kann nur richtig oder falsch sein. Also reícht eine boolean Variable. Zum Zählen der Versuche und der richtigen Antworten kann man ein Integer nehmen.
Aber davon mal abgesehen. Kann man so was auch schön OOP konform in einer Klasse implementieren.
Chrizzwalze - Mi 01.09.10 20:40
Luckie, ich finde deine Ausdrucksweise zwar herrlich...
aber kannst du mir das so erklären, dass ich es auch verstehe? o.O
Ich bin bei Delphi annähernd auf dem Wissensstand vom Lehrplan Informatik Klasse 11 Gymnasium ... Sowas wie
Boolean haben wir nie gemacht :x
Chrizzwalze - Do 02.09.10 19:28
ok ich habe nun eine andere Frage:
Ich habe mir mehrere Formulare erstellt. Im ersten Formular habe ich die Variable 'Richtig' (integer) als global vereinbart.
Diese Variable brauche ich in allen von mir erstellten Formularen und ihr Wert soll veränderbar sein.
Kann mir jemand erklären, wie ich das zu machen habe?
Stundenplan - Do 02.09.10 21:00
Schreib die Variable in den oben bei der Deklaration
type TDeinErstesForm = class(TForm) in den
public-Bereich, also
Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| type TDeinErstesForm = class(TForm) public Richtig: Integer; end; |
Chrizzwalze - Sa 11.09.10 10:21
Hallo,
Ich danke allen für die Antworten, habe mein Quiz soweit fertig und muss nurnoch Feinarbeiten
machen ;) , Fragen eintragen usw.
MfG Chrizzwalze.
Tranx - Sa 11.09.10 10:28
Chrizzwalze hat folgendes geschrieben : |
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| procedure TForm1.Button1Click(Sender: TObject); begin if merke1<0 then showmessage('Du darfst nur einmal pro Frage antworten!') else merke1:=merke1+1 and if merke1=1 then begin Richtig:=Richtig+1; showmessage('Richtig!'); end else if merke1>1 then begin showmessage('Du darfst nur einmal pro Frage antworten!'); end; end; | |
vielleicht versuchst Du, die begin .. end überall einzusetzen, auch wenn es übertrieben erscheint:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33:
| procedure TForm1.Button1Click(Sender: TObject); begin if merke1<0 then begin showmessage('Du darfst nur einmal pro Frage antworten!'); end else begin merke1:=merke1+1; if merke1=1 then begin Richtig:=Richtig+1; showmessage('Richtig!'); end else begin showmessage('Du darfst nur einmal pro Frage antworten!'); end; end; end;
procedure TForm1.Button1Click(Sender: TObject); begin merke1:=merke1+1; if merke1=1 then begin Richtig:=Richtig+1; showmessage('Richtig!'); end else begin showmessage('Du darfst nur einmal pro Frage antworten!'); end; end; |
Das and war definitiv falsch gesetzt!!!
Moderiert von
Narses: Zitat gekürzt.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!