Tutorial
Rechnen mit Vergleichen
von ytwinky | Seite 2 von 3 |
Wir haben also jetzt für TRUE und FALSE die erforderlichen (Zahlen-)Werte festgelegt. Was aber ist denn nun mit den Anweisungen
Const Falsch=1=0, Wahr=1=1
Bis zum 1. Gleichheitszeichen ist es ja noch einfach: Links davon steht der Variablenname, dem etwas zugewiesen wird.
Rechts davon müßte also das stehen, was zugewiesen wird, aber da ist ja noch ein Gleichheitszeichen..?!?!
Ganz einfach, FreeBASIC erkennt in diesem Fall, daß dies KEINE Zuweisung ist und benutzt das Gleichheitszeichen als Vergleichsoperator, wertet diesen Vergleich aus und weist den resultierenden (Zahlen-)Wert zu.
Ja, das war kein Schreibfehler! Ein Vergleich liefert letztendlich einen Zahlenwert, auch wenn wir noch so schön FALSE und TRUE als Const deklariert haben(Wir erinnern uns: FALSE=0)
Oh Mann, ist das trocken, gibt's dafür keine Beispiele? Kein Problem, in einem Programm stehen folgende(übrigens: vollkommen korrekte)Anweisungen:
(Freundlicherweise ist Mao nicht böse, daß hier ein Schnipsel aus seinem Programm als Beispiel dient^^)
' für jede "Zeichenart" einen Punkt
If iGrBst>0 Then iWertung+=1
If iKlBst>0 Then iWertung+=1
If iZahlen>0 Then iWertung+=1
If iSonder>0 Then iWertung+=1
' für Ausgewogenheit der Anteile der Zeichenarten jeweils einen Punkt
If iGrBstPr>20 Then iWertung+=1
If iKlBstPr>20 Then iWertung+=1
If iZahlenPr>10 Then iWertung+=1
If iSonderPr>10 Then iWertung+=1
'zuviel von einer Sorte ist schlecht :)
If iGrBstPr>80 Then iWertung-=1
If iKlBstPr>80 Then iWertung-=1
If iZahlenPr>60 Then iWertung-=1
Wenn z.B. iGrBst größer als 0 ist, dann soll iWertung um eins erhöht werden. Der Vergleich (iGrBst>0) liefert als Ergebnis 0 oder -1 und wenn er -1 ist, dann soll iWertung um 1 erhöht werden. Wenn wir jetzt noch berücksichtigen, daß aus Minus ein Plus wird, wenn es doppelt auftritt, könnten wir also schreiben:
iWertung-=iGrBst>0
Nanu, gar kein IF mehr? Nö, es ist nicht nötig xD
Ist die Bedingung nämlich nicht erfüllt, liefert der Vergleich 0 als Ergebnis und das können wir bedenkenlos 'abziehen'. Soso, und wenn der Vergleich erfüllt ist? Dann subtrahieren wir -1, das kommt aber dem Addieren gleich und ist somit genau das, was wir erreichen möchten^^
Da sich die zweite Zeile auf dieselbe Variable bezieht, können wir die beiden Anweisungen zusammenfassen oder besser noch gleich alle vier:
iWertung-=(iGrBst>0)+(iKlBst>0)+(iZahlen>0)+(iSonder>0)
Gerüstet mit diesem Wissen, können wir die anderen Zeilen auch ändern und erhalten als Ergebnis:
' für jede "Zeichenart" einen Punkt
iWertung-=(iGrBst>0)+(iKlBst>0)+(iZahlen>0)+(iSonder>0)
' für Ausgewogenheit der Anteile der Zeichenarten jeweils einen Punkt
iWertung-=(iGrBstPr>20)+(iKlBstPr>20)+(iZahlenPr>10)+(iSonderPr>10)
'zuviel von einer Sorte ist schlecht :)
iWertung-=(iGrBstPr>80)+(iKlBstPr>80)+(iZahlenPr>60)
Dabei könnten wir durchaus auch die einzelnen Zeilen mittels Copy&Paste(C&P) vervielfältigen, allerdings müssen wir die neuen Zeilen sorgfältig überarbeiten..
Dem aufmerksamen 'Forensuchdienst' ist natürlich nicht entgangen, daß in der dritten Anweisung nicht sorgfältig genug geprüft wurde:
Da in den Original-Zeilen hier 1 subtrahiert werden soll, ist der richtige Code natürlich
iWertung+=(iGrBstPr>80)+(iKlBstPr>80)+(iZahlenPr>60)
(Da nur negative Zahlen addiert werden, muß vor dem '=' ein + stehen, um zu subtrahieren..)
Natürlich ließe sich jetzt einwenden, daß der neue Code längst nicht so übersichtlich ist, wie der alte..
Zugegeben, auf den ersten Blick ist da etwas dran^^
Aaaaber..
Zusätzliche Informationen und Funktionen | |||||||
---|---|---|---|---|---|---|---|
|