Buchempfehlung
Mikrocomputertechnik mit Controllern der Atmel AVR-RISC-Familie
Mikrocomputertechnik mit Controllern der Atmel AVR-RISC-Familie
Umfassend, aber leicht verständlich führt dieses Buch in die Programmierung von ATMEL AVR Mikrocontrollern ein. [Mehr Infos...]
FreeBASIC-Chat
Es sind Benutzer im FreeBASIC-Chat online.
(Stand:  )
FreeBASIC bei Twitter
Twitter FreeBASIC-Nachrichten jetzt auch über Twitter erhalten. Follow us!

Tutorial

Rechnen mit Vergleichen

von RedakteurytwinkySeite 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..

 

Gehe zu Seite Gehe zu Seite  1  2  3  
Zusätzliche Informationen und Funktionen
  • Das Tutorial wurde am 20.10.2007 von Redakteurytwinky angelegt.
  • Die aktuellste Version wurde am 06.09.2010 von Redakteurytwinky gespeichert.
  Bearbeiten Bearbeiten  

  Versionen Versionen