Und jetzt, Fiona…LOGIK

Kleiner Zwischenstand meines Vorhabens, mir in der verbliebenen Zeit so viel C wie möglich reinzuprügeln: Ich komm grad vom See.

Was soll ich sagen, es war angeblich der letzte Tag des Jahres an dem es noch mal so richtig warm war. Trotzdem hab ich übers Wochenende ein paar Fortschritte gemacht. Nicht etwa weil ich krank und somit eh an mein Zuhause gefesselt war, sondern weil ich eine eiserne Disziplin an den Tag legte um Kapitel 4 – „Entscheidungen treffen“ abzuschließen. Jawohl.

In Abschnitt 4.4 lernte ich Bedingungen logisch miteinander zu verknüpfen. Mit dem heteronormativen Ansatz „Wenn es Sonntag regnet und wenn meine Freundin kommt…“ brachte mir Erlenkötter bei, was eine UND-Verknüpfung ist. (Oder hat er damit etwa subtil versucht, auch bi- oder homosexuelle Leser und Leserinnen anzusprechen, dieser Fuchs…?)
Jedenfalls – das Resultat ist nur dann wahr, wenn beide Aussagen wahr sind. Und das Zeichen für eine UND-Verknüpfung ist &&.
Also: if (Regen && Freundin kommt), dann…
Auflösung: if (wahr && wahr), dann …. ja, was dann. Keine Ahnung, hängen wir rum und gucken Tatort oder so.

Die ODER-Verknüpfung ist da sozusagen etwas gnädiger. Als Beispiel: „Wenn der Tatort wieder im Filmförderungsstil ist oder wenn der Regisseur mal wieder glaubt, mit hässlichen Farbstichen ganz besondern kreativ zu sein, dann“. Es reicht, wenn eine der beiden Teilaussagen wahr ist, um die Aussage insgesamt wahr zu machen. Das Zeichen dafür ist ||.
Also: if (Filmförderung || Farbstich), dann…
Auflösung: if [Filmförderung || Farbstich), dann…
Auflösung: if (Filmförderung || kein Farbstich), dann…
Auflösung: if (kein Filmförderung || Farbstich), dann…schalte ich die Scheiße aus und programmiere stattdessen was.
Alle drei Varianten machen die Aussage wahr.

So weit, so simpel ausgedrückt. Es gibt allerdings noch ein paar weitere Verknüpfungen, z.B. das logische NICHT, das NAND, das NOR, das XNOR(haha, ich mag das Wort XNOR) und die Implikation. Es scheint mir, als würden vorerst UND und ODER reichen, ich habe die anderen Verknüpfungen aber durchaus gelernt und verstanden. Solltet ihr auch tun.

Wie wird das nun angewandt? Ganz einfach, wenn ich einen Teil des Codes nur dann ausführen möchte, wenn eine oder beide Teilaussagen wahr sind. Das habe ich bspw. in der folgenden Übung umgesetzt: „Schreiben Sie ein Programm, das eine Temperatur abfragt und danach abzeigt, ob Wasser verdampft, flüssig bleibt oder gefriert.“
Das Programm muss also einen Wert einlesen, um dann auszugeben, welchen Zustand Wasser bei dieser Temperatur hat. Bei der ersten if-Bedingung ist ein ODER untergebracht. Nämlich für die Spezialisten, die dann irgendeinen trolligen Wert eingeben, der entweder unter dem totalen Nullpunkt liegt oder einfach ein bisschen hoch ist. Wobei das meiner totalen Willkür unterlag. Für diese Konstruktion sage ich also

if (Wert viel zu tief ODER Wert viel zu hoch), dann sag dem User, dass er spinnt.
if (temp < -272 || temp >= 1000)
Wenn nun einer der beiden Fälle eintritt, wird der dazugehörige Befehl printf ausgeführt. Wenn allerdings keiner der beiden Fälle eintritt und die User brav einen vernünftigen Wert eingeben, wird mit der nächsten else-if-Konstruktion weitergemacht. An diese ist wiederum eine Bedingung geknüpft, die wahr sein muss, damit der dazugehörige printf-Befehl ausgeführt wird. Ist das wieder nicht der Fall, wird im Programm zur nächsten if-else Konstruktion gesprungen. Usw. Hier Le Code:

#include <stdio.h>
main ()
{
        double temp;
        printf("\nDieses Programm ermittelt den Aggregatzustand von Wasser");
        printf("\nBitte Temperatur eingeben, z.B. 100.00: ");
        scanf("%lf", &temp);
        if (temp < -272 || temp >= 1000)
                printf("\nDu uebertreibst ein bisschen...\n");
        else if (temp <= 0.0)
                printf("\nDas Wasser ist gefroren, sozusagen EISEIS\n");
        else if (temp < 100.00)
                printf("\nDas Wasser ist fluessig, also Wasser\n");
        else if (temp >= 100.00)
                printf("\nDas Wasser ist gasfoermig, quasi Wasserdampf\n");
}

Selbstverständlich ist das Programm weitestgehend nutzlos, das tut dem Lernerfolg aber keinen Abbruch. Allerdings gab mir jemand den Tip, dass ich doch das Programm so umschreiben könnte, dass es etwas flexibler wäre. Also um genau zu sein schrieb er dies:

[2012-09-10 14:04:19] <_MrTux_> Fotografiona: next step: Wasser und Grenztemperaturen durch Variable ersetzen, damit man das Programm leicht für andere Stoffe umschreiben kann.🙂
[2012-09-10 14:04:52] <Fotografiona> _MrTux_: true story
[2012-09-10 14:05:21] <benni_b> oder den Druck noch mit einberechnen.
[2012-09-10 14:05:49] <benni_b> so kann man dann immer weiter machen und irgendwann sitzt man auf dem mars und muss felsen zerballern.
[2012-09-10 14:06:03] <Fotografiona> _MrTux_: also variable, so dass der/die UserInnen per eingabe die Variablen bestimmt?
[2012-09-10 14:07:43] <_MrTux_> so weit habe ich noch gar nicht gedacht.
[2012-09-10 14:07:58] <fengor> erstmal nur hartkodiert
[2012-09-10 14:08:19] <fengor> hat den vorteil, das wenn du das programm fuer andere stoffe anpassen willst die temperaturen nicht mehr an x stellen sondern nru noch an einer aendern musst
[2012-09-10 14:08:45] <_MrTux_> Du betrachtest das Programm sehr von der Nutzerseite – das solltest Du auch nicht vergessen. Softwaretechnisch machst Du das Programm flexibler, wenn Du diese Variablen einführst. Davon sieht der Nutzer erstmal nichts, aber Dein Code wird flexibler und wiederverwendbarer.
[2012-09-10 14:08:50] <_MrTux_> Genau.
[2012-09-10 14:09:41] <Fotografiona> also im sinne von – ProgrammiererIn will das programm für einen anderen Stoff verwenden und muss dann möglichst wenig oim Code verändern um es anzupassen?
[2012-09-10 14:09:55] <_MrTux_> in Nachfolgeschritten könntest Du aus Deinem Programm eine Funktion machen, die Stoffart und Grenztemperaturen entgegennimmt und die entsprechende Ausgabe macht. Und dann könntest Du überlegen, den Nutzer z.B. erstmal den Stoff auswählen lassen.
[2012-09-10 14:09:59] <_MrTux_> ja
[2012-09-10 14:10:01] <Fotografiona> okay
[2012-09-10 14:10:15] <Fotografiona> ist das sowas wie ein Teil der Code-Etikette?
[2012-09-10 14:10:34] <Fotografiona> ein Programm flexibel machen im Sinne von  den Aufwand minimieren um es anzupassen?
[2012-09-10 14:13:15] <_MrTux_> Ja, sozusagen. Du willst ja nach Möglichkeit nichts doppelt programmieren, d.h. den Code so wiederverwendbar wie möglich gestalten.
[2012-09-10 14:13:43] <Fotografiona> okay
[2012-09-10 14:14:21] <_MrTux_> Im Design heißt das, dass Du die Invarianten und Varianten in Deinem Algorithmus suchst und in einer Funktion dann nur die entsprechenden Invarianten unterbringst. Im einfachsten Fall also z.B. Werte, die nicht im Sinne des Algorithmus fest sind, in Variablen zu legen.
[2012-09-10 14:17:46] <_MrTux_> Weiter würde ich in Deinem Programm auch nicht gehen. Wenn Du die Wiederverwendbarkeit im Hinterkopf behältst, fällt Dir mit der Zeit und Erfahrung von selbst auf, worauf man das Prinzip anwenden könnte.

 

Diese Tips und weitere gab man mir im neuen QUALITÄTSCHANNEL #fionalerntprogrammieren auf freenode. Danke nochmal an die Beteiligten! Wem das jetzt nichts sagt: Dabei handelt es sich um einen Chatroom, den ihr entweder über http://webchat.freenode.net/ erreichen könnt oder indem ihr euch einen IRC-Client runterladet. Ich benutze meist irssi oder Smuxi. Fragen dazu am Besten in die Kommentare. Jedenfalls können wir ab jetzt kollektiv dort lauern, ich bin die meiste Zeit online und dort erreichbar. Und ein paar freundliche Menschen lauern dort ebenfalls und haben mir heute bereits mehrmals Fragen beantworten können. Überhaupt lohnt es sich, zu wissen was IRC ist und sich darin zurechtfinden zu können. IRC ist zwar ein furchtbar altes Chat-Protokoll, wird aber weiterhin verwendet für die verschiedensten Zwecke. Bspw. zur internen Firmen-Kommunikation, um live über Podcasts diskutieren zu können, um eine lose Gruppe von Freaks zu vernetzenn, oder wie hier, um eine Themen-bezogene Plattform für Austausch, Vernetzung, Wissenszirkulation etc. zu schaffen. Aber ich nutze diese schlampige Erklärung mal, um mich zu motivieren, einen vernünftigen Guide für die IRC-Nutzung zu schreiben.
So. Genug gespeedbloggt, ich halte euch auf dem Laufenden.
Macht’s gut, ich gehe jetzt nicht-programmieren.

 

%d Bloggern gefällt das: