| Autor |
Beitrag |
Chrizzwalze
Hält's aus hier
Beiträge: 6
|
Verfasst: Mi 01.09.10 18:50
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
      
Beiträge: 1054
Erhaltene Danke: 78
Win 7, Ubuntu 9.10
Delphi 2007 Pro, C++, Qt
|
Verfasst: 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...
_________________ Wissenschaft schafft Wissenschaft, denn Wissenschaft ist Wissenschaft, die mit Wissen und Schaffen Wissen schafft. (myself)
|
|
Chrizzwalze 
Hält's aus hier
Beiträge: 6
|
Verfasst: 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
      
Beiträge: 1054
Erhaltene Danke: 78
Win 7, Ubuntu 9.10
Delphi 2007 Pro, C++, Qt
|
Verfasst: 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 
_________________ Wissenschaft schafft Wissenschaft, denn Wissenschaft ist Wissenschaft, die mit Wissen und Schaffen Wissen schafft. (myself)
|
|
Marc.
      
Beiträge: 1876
Erhaltene Danke: 129
Win 8.1, Xubuntu 15.10
|
Verfasst: Mi 01.09.10 19:54
OT: Ich empfehle Dir dringenst einen StyleGuide, denn im jetztigen Augeblick ist es ein Krampf Deinen Quelltext zu lesen.  Bei richtiger Formatierung fallen einem Fehler sehr viel eher auf oder schleichen sich erst gar nicht ein. 
|
|
Chrizzwalze 
Hält's aus hier
Beiträge: 6
|
Verfasst: 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  .
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: 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 
Hält's aus hier
Beiträge: 6
|
Verfasst: 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 
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Mi 01.09.10 21:10
Ich habe keine Ahnung was im Lehrplan für Informatik in der 11. Klasse steht, zu meiner Zeit gab es das noch nicht.
Hier habe ich ein Tutorial: www.michael-puff.de/...i/Tutorials/Klassen/
Und was eine boolean Variable ist, kannst du in der Hilfe nachgucken.
|
|
Chrizzwalze 
Hält's aus hier
Beiträge: 6
|
Verfasst: 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
      
Beiträge: 128
Erhaltene Danke: 32
Win 7
Delphi 7 Pers., C# (VS 2010 Express)
|
Verfasst: 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 
Hält's aus hier
Beiträge: 6
|
Verfasst: 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
      
Beiträge: 648
Erhaltene Danke: 85
WIN 2000, WIN XP
D5 Prof
|
Verfasst: Sa 11.09.10 10:28
|
|