Hauptseite und Programmieren in C: Unterschied zwischen den Seiten

Aus Datenschutz
(Unterschied zwischen Seiten)
Zur Navigation springen Zur Suche springen
 
 
Zeile 1: Zeile 1:
__NOTOC__
+
== Programmieren in C auf dem eigenen Computer ==
= Aktuelle Meldungen =
+
[[Datei:Raspi400.jpg|mini|rechts|Der Raspberry Pi 400 für knapp 100.- € zum Anschluss an den Fernseher (hier mit englischem Netzteil!)]]
* Google Fonts löst [https://www.kostenlose-urteile.de/LG-Muenchen-I_3-O-1749320_Verletzung-des-Persoenlichkeitsrechts-aufgrund-automatischer-Weitergabe-der-dynamischen-IP-Adresse-an-Google-bei-Aufruf-einer-Webseite.news32160.htm Schadensersatzanspruch] in Höhe von 100.- € aus (LG München 20.01.2022).
+
* Um ein Programm in einer Programmiersprache zu schreiben, braucht man ein passendes Übersetzungsprogramm für diese Sprache.
* [https://www.kostenlose-urteile.de/AG-Pforzheim_4-C-184521_Rechtsmissbraeuchlicher-Auskunftsanspruch-nach-DSGVO-bei-Drohungen-und-Beleidigungen-des-Gegners-und-dessen-Anwalt.news32157.htm Kein Missbrauch] der Auskunftspflicht der EU-DSGVO (AG Pforzheim, 05.08.2022).
+
* Solche Übersetzungsprogramme übersetzen eine Programmiersprache in die universelle Sprache aller Computer.
* 25 Jahre [https://www.deutschlandfunk.de/anti-korruptionsgesetz-korruption-bestechung-schmiergeld-regelwerk-politik-100.html Anti-Korruptionsgesetz] (Deutschlandfunk, 12.08.2022).
+
* Solcher Übersetzungsprogramme heißen '''Compiler'''.
* In eigener Sache: Kleine Artikel zu konkreten Problemkreisen sollen die "Datenschutz-Rezepte" bieten. Das erste, das ich anbiete, ist das [[Datenschutz-Rezept: Videoüberwachung]].
+
* Man benötigt also für C einen C-Compiler und
* Ermittlungen des Bundesdatenschutzbeauftragten gegen [https://www.dr-datenschutz.de/facebook-fanpage-ermittlungen-des-bfdi-gegen-das-bundespresseamt/ das Bundespresseamt bei Facebook] (Dr. Datenschutz, 09.06.2022).
+
* einen Editor (Textverarbeitung für Programmierer) zum Erfassen des Programms.
* Einheitliche Bußgeldpraxis der EDSA ([https://www.datenschutz-praxis.de/pleiten-pech-pannen/einheitliche-bussgeldpraxis-edsa-legt-leitlinien-vor/ DATENSCHUTZPRAXIS], 09.06.2022)
+
* Am besten alles zusammen: eine "Integrierte Entwicklungsumgebung (IDE)".
* Innenminister Herbert Reul fordert [https://www.zeit.de/politik/deutschland/2022-05/reul-datenschutz-befugnisse-missbrauch-wermelskirchen?page=2 Erleichterungen beim Datenschutz] (ZEIT, 01.06.2022, siehe auch [https://www.dr-datenschutz.de/rechtsgrundlage-wann-duerfen-daten-verarbeitet-werden/ hier]).
+
* Zum Beispiel diese [https://github.com/Embarcadero/Dev-Cpp/releases hier] (Windows, MacOS).
* Deutschland ist [https://www.zeit.de/digital/datenschutz/2022-05/datenschutz-dsgvo-umfrage-cookies genervt] von Cookies (ZEIT, 25.05.2022).
+
* Auf einem Raspberry Pi kann man einfach [https://de.wikipedia.org/wiki/Geany Geany] benutzen.
* Einheitliches [https://www.lto.de/recht/kanzleien-unternehmen/k/datenschutz-verstoesse-unternehmen-bussgeld-eu-dsgvo-leitlinien-edsa/ Bußgeldmodell] beschlossen (LTO, 21.05.2022).
+
* Oder Sie programmieren einfach hier und jetzt [https://www.onlinegdb.com/online_c_compiler online].
* Die Website "Dr. Datenschutz" hat in einem [https://www.dr-datenschutz.de/zensus-2022-datenschutz-probleme-und-pflicht-zur-teilnahme/ Artikel] alle Fragen zur "Volkszählung 2022" kurz und gut aufgeführt (Dr. Datenschutz, 20.05.2022).
 
  
= Fallarchiv =
+
== Grundsätzliches Wissen für angehende Programmierer/-innen ==
[[Datei:Terminal.png|100px|rechts]]
+
[[Datei:Geany.png|mini|links|Die Entwicklungsumgebung GEANY in Aktion auf dem Raspi 400.]]
* [[Fall 12/2022: Vollständiges Löschen von Bewerberdaten]]
+
* Jede Anwendung eines persönlichen Computers, jede Website, jede App ist ein '''Computerprogramm'''.
* [[Fall 11/2022: Jugendparlament auf Instagram]]
+
* Computerprogramme sind Listen von '''Anweisungen''', die vom Computer der Reihe nach abgearbeitet werden.
* [[Fall 10/2022: Auskunft nach dem IFG]]
+
* Diese Listen werden in ein Textprogramm eingegeben, in Bits und Bytes übersetzt und dann ausgeführt.
* [[Fall 09/2022: Unfallkasse möchte den Namen eines Kindes erfahren]]
+
* Anweisungen in Programmen bestehen aus '''Schlüsselwörtern und Parametern''', die die Anweisungen genauer spezifizieren.
* [[Fall 08/2022: Eingeschränkter Zugriff auf Einwohnermeldewesen für Statistiken]]
+
* Ein Beispiel "aus dem richtigen Leben" wäre ''Starte das Auto'', wobei ''Starte'' das Schlüsselwort und ''das Auto'' der Parameter ist.
* [[Fall 07/2022: Teilnehmerliste im Beirat für Menschen mit Behinderungen]]
+
* Ein Schlüsselwort sagt dem Computer, '''was''' zu tun ist, ein Parameter erklärt, '''womit''' etwas zu tun ist.
* [[Fall 06/2022: Landesgesellschaft - wer ist verantwortlich?]]
 
  
= Recht und Urteil =
+
== Funktionen ==
[[Datei:Houses.jpg|100px|left]]
+
* Ein Problem wird zur Lösung in viele kleine Probleme zerlegt.
 +
* Beispiel: "Kuchen backen" kann in "Mische Mehl, Eier...", "Heize den Backofen", "Knete den Teig" etc. aufgeteilt werden.
 +
* Programme können in kleine Abschnitte eingeteilt werden, die einzelne Unter-Aufgaben erfüllen ('''Funktionen''').
 +
* Diese Funktionen haben einen festgelegten '''Namen''', '''Parameter''' und können '''Werte''' an das Hauptprogramm zurück geben.
 +
* Den '''Typ des Rückgabewertes''' steht vor der Funktion (hier: int = integer = ganze Zahlen).
 +
* main ist die ''erste'' Funktion, die in jedem Programm aufgerufen wird. Hier startet also immer das Programm.
 +
* In C-Programmen muss es wenigstens ''eine'' Funktion mit dem Namen '''main''' geben.
 +
* Von main aus werden andere Funktionen des selben Programms '''aufgerufen''', sofern welche existieren.
 +
* Die Hauptfunktion, das ganze Programm, gibt nach der Abarbeitung des Programms einen Wert an den Computer zurück.
 +
* Ein einfaches Programm sieht also jetzt so aus ("//" leitet einen Kommentar ein):
 +
<pre>
 +
int main ()
 +
{
 +
  // Hier startet das Hauptprogramm
 +
  printf ("Zahlenraten - ich denke mir eine Zahl und Du errätst sie. \n");
 +
}
 +
</pre>
  
 +
== Variable ==
 +
* Variable sind '''benannte Speicherstellen''', in denen Zwischenergebnisse gespeichert werden können.
 +
* Variable müssen dem C-Compiler '''erklärt''' werden, damit sie verwendet werden können: sie werden '''deklariert'''.
 +
* Da Programme linear (von oben nach unten) ablaufen, sind '''Variablen erst ab der Deklaration''' nutzbar.
 +
* Der Compiler muss wissen, was in den Variablen stehen soll: der '''Variablentyp'''.
 +
* Typen für Variable in C: Ganzzahlen (int), Fließkommazahlen (float), Zeichen (char)
 +
* Eine Deklaration sieht typischerweise so aus: <Typ><Leerzeichen><Name><Semikolon>
 +
* Beispiel: <pre>int nGedachteZahl;</pre>
 +
* Das "n" vor dem Namen "GedachteZahl" ist nicht notwendig. Es ist aber [https://de.wikipedia.org/wiki/Ungarische_Notation gute Sitte], den Typ (int, also numerisch) im Namen zu erwähnen.
 +
* Variable können auch einen Anfangswert (Initialisierung) enthalten, der einfach dahinter geschrieben wird.
 +
* Beispiel: <pre>int nGedachteZahl = 24;</pre>
 +
* Die Variable nGedachteZahl ist dem Compiler ab diesem Zeitpunkt als Ganzzahl-Speicherstelle bekannt und hat den Wert 24.
 +
* Eine nicht initialisierte Variable hat übrigens '''nicht''' den Wert Null sondern einen unbestimmten Wert (Vorsicht!).
 +
* In unserem Beispiel brauchen wir zwei Variable: in einer steht die gedachte Zufallszahl, in der anderen die Vermutung des Benutzers.
 +
* Nach der Erwähnung des Datentyps kann man weitere Variablen definieren.
 +
* Unser Programm sieht bis hierher also so aus:
 +
<pre>
  
* In einer Einladung einer Eigentümergemeinschaft von Eigentumswohnungen [https://www.kostenlose-urteile.de/OLG-Muenchen_20-U-705120_Verwalter-darf-in-Einladung-zur-Eigentuemerversammlung-wegen-Legionellenbefalls-Namen-des-betroffenen-Wohnungseigentuemers-mitteilen.news31757.htm durfte der Name des Eigentümers genannt werden], der einen Legionellebefall zu beklagen hatte.
+
int nGedachteZahl = 24; // muss erraten werden
 +
    nVermutung = 0;    // sicher ist sicher
  
= [[Lexikon|Lexikon der Fachbegriffe]] =
+
int main ()
{| class="wikitable"
+
{
|-
+
  // Hier startet das Hauptprogramm
|[[Auftragsverarbeitung]]||[[Datenschutzfolgenabschätzung]]||[[Meldung an die Aufsichtsbehörde]]||[[Personenbezogene Daten]]
+
  printf ("Zahlenraten - ich denke mir eine Zahl und Du errätst sie. \n");
|-
+
}
|[[Beschäftigtendatenschutz]]||[[Datenschutzerklärung]]||[[Räumlicher Anwendungsbereich]]||[[Übermittlung]]
+
</pre>
|-
 
|[[Besondere Kategorien personenbezogener Daten]]||[[Einwilligung]]||[[Rechtmäßigkeit]]||[[Verarbeitung]]
 
|-
 
|[[Betroffenenrechte]]||[[Europäische Datenschutzgrundverordnung]]||[[Sachlicher Anwendungsbereich]]||[[Verarbeitungsverzeichnis]]
 
|-
 
|[[Datenschutzbeauftragte]]||[[Grundsätze der Verarbeitung]]||[[Videoüberwachung]]||[[Zweckänderung]]
 
|}
 
  
= Prüfschema =
+
== Ein- und Ausgabe ==
{{:Prüfschema Datenschutz 2021: Arbeiten wir nach der EU-DSGVO?}}
+
* Ein Programm braucht grundsätzlich Anweisungen für die '''Eingabe''', die '''Verarbeitung''' und die '''Ausgabe''' von Daten.
 +
* Speziell in der Programmiersprache C gibt es '''keine''' Anweisungen zur Ein- und Ausgabe.
 +
* C soll auf sehr vielen Computern nutzbar sein und jedes Computersystem hat andere Funktionen für Ein- und Ausgabe.
 +
* Deshalb liegt jedem C-Compiler eine Bibliothek von Dateien bei, die Ein- und Ausgabe des jeweiligen Computersystems ermöglicht.
 +
* Die Funktionen in diesen Dateien werden aber alle in der gleichen Art und Weise aufgerufen ("C-Standard-Bibliotheken").
 +
* Wir verwenden hier zur Eingabe das Schlüsselwort '''scanf''' und zur Ausgabe '''printf''' wegen ihrer Ähnlichkeit.
 +
* Im "echten Leben" tun Sie das bitte nicht: die Funktionen sind [https://dasdev.de/nachteile-von-scanf/ nicht krisensicher].
  
= Sonstiges =
+
== Bedingungen ==
* [[KURT]] - Programm zur Prüfung der Korruptionsvorbeugung (Version 21.07.2020)
+
* Bedingungen sind '''WENN-DANN-Anweisungen'''.
* [https://www.frankwerner.org/index.php?title=Programmieren_in_Pascal:_KURT_(Korruptionsschutz) KURT (Pascal-Version, Oktober 2021)]
+
* In C ist das entsprechende Schlüsselwort '''if'''.
* [[EUGEN]] - Programm zur Prüfung von Datenschutzfällen (Version 24.06.2020)
+
* Der weitere Programmlauf hängt dann von '''Bedingungen''' ab:
* [[Pizza 2000]] - Einfaches Programm für Lieferdienste (Version 14.08.2020, Freizeitspaß)
+
<pre>
* [[Programmieren in Pascal: Zahlenraten]] (Version 21.12.2021, Formatübung)
+
>  größer als
* [[Programmieren in C]] (Version 06.09.2022, Formatübung)
+
<  kleiner als
* [https://www.frankwerner.org/pascal/ Turbo-Pascal® online]
+
== gleich
* [https://www.scullinsteel.com/apple2/#pascal1|pascal2 Apple® Pascal online]
+
!= ungleich
* [https://c64emulator.111mb.de/index.php?site=pp_javascript&lang=de&group=c64# Commodore 64 online]
+
>= größer oder gleich
 +
<= kleiner oder gleich
 +
!  nicht
 +
</pre>
 +
* Beispiel: Ob eine eingegebene Zahl größer oder kleiner 1 ist soll in Worten ausgegeben werden:
 +
<pre>
 +
#include <stdio.h>
 +
 
 +
int nZahl;
 +
 
 +
int main()
 +
{
 +
  printf ("Bitte geben Sie eine Zahl ein: ");
 +
  scanf ("%d", &nZahl);
 +
 
 +
  if (nZahl > 1)
 +
    printf ("Die Zahl %d ist größer als Eins. \n", nZahl);
 +
  else
 +
    printf ("Die Zahl %d ist kleiner als Eins. \n", nZahl);
 +
}
 +
</pre>
 +
* Die Befehle nach ''else'' werden immer ausgeführt, wenn <b>das Gegenteil</b> der Bedingung erfüllt ist.
 +
* Das Gegenteil von '''gleich''' ist dann '''ungleich''', das Gegenteil von '''größer''' ist '''kleiner''' und umgekehrt.
 +
* Man könnte ''else'' also mit ''sonst'' übersetzen: Wenn...Sonst.
 +
 
 +
== Fallunterscheidungen ==
 +
* if-Abfragen kann man beliebig wiederholen.
 +
* Bei sehr häufigen Abfragen kann das sehr unübersichtlich werden.
 +
* Deshalb gibt es so genannte Fallunterscheidungen, in denen ein Wert oder eine Variable mehrfach geprüft wird.
 +
* Bei Fallunterscheidungen wird jeder '''Bedingung ein Programmlauf''' zugeordnet.
 +
* In C sind die entsprechenden Schlüsselwörter '''switch''' und '''case'''.
 +
* Beispiel: Eine Zahl zwischen 1 und 3 soll als Wort ausgegeben werden:
 +
<pre>
 +
#include <stdio.h>
 +
 
 +
int iZahl;
 +
 
 +
int main ()
 +
{
 +
  printf ("Geben Sie eine Zahl ein: ");
 +
  scanf ("%d", &iZahl);
 +
 +
  switch (iZahl)
 +
  {
 +
    case 1: printf ("Eins \n"); break;
 +
    case 2: printf ("Zwei \n"); break;
 +
    case 3: printf ("Drei \n"); break;
 +
    default: printf ("Zahl ist nicht zwischen 1 und 3! \n");
 +
  }
 +
}
 +
</pre>
 +
* Beachten Sie, dass nach der Ausführung eines Falles mit ''break'' die Abfrage verlassen werden '''muss'''.
 +
* Wenn keine Bedingung zutrifft, wird der Code hinter ''default'' ausgeführt.
 +
* In ''switch'' können keine Variablen vom Typ ''char'' geprüft werden!
 +
 
 +
== Schleifen mit Zähler ==
 +
* Bei Zählerschleifen werden Schlüsselwörter eine '''bestimmte Anzahl mal''' wiederholt.
 +
* Dabei läuft eine Variable mit, die bei jedem Durchlauf '''verändert''' wird.
 +
* In C ist das entsprechende Schlüsselwort '''for'''.
 +
* Das Format von ''for'' ist
 +
<pre>for (Startwert, Ablaufbedingung, Änderungsmaßnahme);</pre>
 +
* Die Zahlen von 1 bis 10 werden also durch folgendes Programm ausgegeben:
 +
<pre>
 +
 
 +
#include <stdio.h>
 +
 
 +
int nZaehler;
 +
 
 +
int main ()
 +
{
 +
  for (nZaehler = 1; nZaehler < 11; nZaehler++)
 +
  {
 +
    printf ("Zahl ist %d \n", nZaehler);
 +
  }
 +
}
 +
 
 +
</pre>
 +
* Am Anfang der Schleife wird nZaehler mit 1 belegt (der '''Startwert''')
 +
* Die Schleife läuft so lange nZahler kleiner als 11 ist (die '''Ablaufbedingung''')
 +
* Bei jedem Durchlaufen der Schleife wird nZaehler um 1 erhöht (die '''Änderungsmaßnahme''', ''nZaehler = nZaehler + 1'' kann man mit ''nZaehler++'' abkürzen).
 +
* Beim Durchlaufen der Schleife wird alles zwischen den folgenden Klammern { und } ausgeführt (hier also die Ausgabe von nZaehler).
 +
* Die Zahlen von 1 bis 10 werden nur ausgegeben, wenn die Ablaufbedingung ''< 11'' heißt, da am Anfang entschieden wird, ob die Schleife durchlaufen werden soll.
 +
* for bildet also eine so genannte Kopfgesteuerte Schleife!
 +
 
 +
== Kopfgesteuerte Schleifen ==
 +
* Kopfgesteuerte Schleifen prüfen '''am Anfang''' der Schleife, ob die Schleife durchlaufen wird.
 +
* Kopfgesteuerte Schleifen werden mit dem Wort ''while'' gebildet.
 +
* Kopfgesteuerte Schleifen machen Sinn, wenn eine Schleife unter bestimmten Bedingungen keinen Sinn ergibt.
 +
* Beispielsweise kann man eine Datei nicht auslesen, wenn am Anfang der Schleife das Ende der Datei bereits erreicht oder sie leer ist.
 +
* Man könnte die Zahlen von 1 bis 10 auch mit einer kopfgesteuerten Schleife ausgeben:
 +
<pre>
 +
#include <stdio.h>
 +
 
 +
int nZaehler;
 +
 
 +
int main ()
 +
{
 +
  nZaehler = 0;
 +
  while (nZaehler < 10)
 +
  { 
 +
    nZaehler++;
 +
    printf ("Zahl ist %d \n", nZaehler);
 +
  }
 +
}
 +
</pre>
 +
* Sie werden alle Anweisungen aus der for-Schleife hier wiederfinden!
 +
* Aber überlegen Sie mal, warum die Werte der Variablen anders sind.
 +
 
 +
== Fußgesteuerte Schleifen ==
 +
* Fußgesteuerte Schleifen prüfen '''am Ende''' der Schleife, ob die Bedingung zum Beenden erreicht ist.
 +
* Fußgesteuerte Schleifen werden mit den Schlüsselwörter ''do''..''while'' gebildet.
 +
* Fußgesteuerte Schleifen machen Sinn, wenn die Bedingung innerhalb der Schleife verändert wird.
 +
* Beispielsweise kann eine Schleife so lange laufen, bis während der Schleife ein bestimmter Wert eingegeben wird.
 +
 
 +
== Besonderheiten von C ==
 +
* C ist eine sehr kompakte Programmiersprache von immerhin 1968.
 +
* Sie ist damit oft älter als ihre Programmierer. :-)
 +
* Dennoch laufen sehr viele C-Programme aus alter Zeit unverändert auch heute noch.
 +
* C ist also sehr ''kompatibel'' zu sich selbst.
 +
* Sie ermöglicht es, sehr kleine und schnelle Compiler zu bauen.
 +
* Die Prüfung von 10.000 Klammern ({}) schafft der Compiler schnell.
 +
* Die Prüfung von 10.000 Wörtern (BEGIN...END) dauert dagegen länger.
 +
* C ist eine Sprache, die auf sehr kleinen Computern gut ablaufen kann.

Version vom 14. September 2022, 09:51 Uhr

Programmieren in C auf dem eigenen Computer

Der Raspberry Pi 400 für knapp 100.- € zum Anschluss an den Fernseher (hier mit englischem Netzteil!)
  • Um ein Programm in einer Programmiersprache zu schreiben, braucht man ein passendes Übersetzungsprogramm für diese Sprache.
  • Solche Übersetzungsprogramme übersetzen eine Programmiersprache in die universelle Sprache aller Computer.
  • Solcher Übersetzungsprogramme heißen Compiler.
  • Man benötigt also für C einen C-Compiler und
  • einen Editor (Textverarbeitung für Programmierer) zum Erfassen des Programms.
  • Am besten alles zusammen: eine "Integrierte Entwicklungsumgebung (IDE)".
  • Zum Beispiel diese hier (Windows, MacOS).
  • Auf einem Raspberry Pi kann man einfach Geany benutzen.
  • Oder Sie programmieren einfach hier und jetzt online.

Grundsätzliches Wissen für angehende Programmierer/-innen

Die Entwicklungsumgebung GEANY in Aktion auf dem Raspi 400.
  • Jede Anwendung eines persönlichen Computers, jede Website, jede App ist ein Computerprogramm.
  • Computerprogramme sind Listen von Anweisungen, die vom Computer der Reihe nach abgearbeitet werden.
  • Diese Listen werden in ein Textprogramm eingegeben, in Bits und Bytes übersetzt und dann ausgeführt.
  • Anweisungen in Programmen bestehen aus Schlüsselwörtern und Parametern, die die Anweisungen genauer spezifizieren.
  • Ein Beispiel "aus dem richtigen Leben" wäre Starte das Auto, wobei Starte das Schlüsselwort und das Auto der Parameter ist.
  • Ein Schlüsselwort sagt dem Computer, was zu tun ist, ein Parameter erklärt, womit etwas zu tun ist.

Funktionen

  • Ein Problem wird zur Lösung in viele kleine Probleme zerlegt.
  • Beispiel: "Kuchen backen" kann in "Mische Mehl, Eier...", "Heize den Backofen", "Knete den Teig" etc. aufgeteilt werden.
  • Programme können in kleine Abschnitte eingeteilt werden, die einzelne Unter-Aufgaben erfüllen (Funktionen).
  • Diese Funktionen haben einen festgelegten Namen, Parameter und können Werte an das Hauptprogramm zurück geben.
  • Den Typ des Rückgabewertes steht vor der Funktion (hier: int = integer = ganze Zahlen).
  • main ist die erste Funktion, die in jedem Programm aufgerufen wird. Hier startet also immer das Programm.
  • In C-Programmen muss es wenigstens eine Funktion mit dem Namen main geben.
  • Von main aus werden andere Funktionen des selben Programms aufgerufen, sofern welche existieren.
  • Die Hauptfunktion, das ganze Programm, gibt nach der Abarbeitung des Programms einen Wert an den Computer zurück.
  • Ein einfaches Programm sieht also jetzt so aus ("//" leitet einen Kommentar ein):
int main ()
{
  // Hier startet das Hauptprogramm
  printf ("Zahlenraten - ich denke mir eine Zahl und Du errätst sie. \n");
}

Variable

  • Variable sind benannte Speicherstellen, in denen Zwischenergebnisse gespeichert werden können.
  • Variable müssen dem C-Compiler erklärt werden, damit sie verwendet werden können: sie werden deklariert.
  • Da Programme linear (von oben nach unten) ablaufen, sind Variablen erst ab der Deklaration nutzbar.
  • Der Compiler muss wissen, was in den Variablen stehen soll: der Variablentyp.
  • Typen für Variable in C: Ganzzahlen (int), Fließkommazahlen (float), Zeichen (char)
  • Eine Deklaration sieht typischerweise so aus: <Typ><Leerzeichen><Name><Semikolon>
  • Beispiel:
    int nGedachteZahl;
  • Das "n" vor dem Namen "GedachteZahl" ist nicht notwendig. Es ist aber gute Sitte, den Typ (int, also numerisch) im Namen zu erwähnen.
  • Variable können auch einen Anfangswert (Initialisierung) enthalten, der einfach dahinter geschrieben wird.
  • Beispiel:
    int nGedachteZahl = 24;
  • Die Variable nGedachteZahl ist dem Compiler ab diesem Zeitpunkt als Ganzzahl-Speicherstelle bekannt und hat den Wert 24.
  • Eine nicht initialisierte Variable hat übrigens nicht den Wert Null sondern einen unbestimmten Wert (Vorsicht!).
  • In unserem Beispiel brauchen wir zwei Variable: in einer steht die gedachte Zufallszahl, in der anderen die Vermutung des Benutzers.
  • Nach der Erwähnung des Datentyps kann man weitere Variablen definieren.
  • Unser Programm sieht bis hierher also so aus:

int nGedachteZahl = 24; // muss erraten werden
    nVermutung = 0;    // sicher ist sicher

int main ()
{
  // Hier startet das Hauptprogramm
  printf ("Zahlenraten - ich denke mir eine Zahl und Du errätst sie. \n");
}

Ein- und Ausgabe

  • Ein Programm braucht grundsätzlich Anweisungen für die Eingabe, die Verarbeitung und die Ausgabe von Daten.
  • Speziell in der Programmiersprache C gibt es keine Anweisungen zur Ein- und Ausgabe.
  • C soll auf sehr vielen Computern nutzbar sein und jedes Computersystem hat andere Funktionen für Ein- und Ausgabe.
  • Deshalb liegt jedem C-Compiler eine Bibliothek von Dateien bei, die Ein- und Ausgabe des jeweiligen Computersystems ermöglicht.
  • Die Funktionen in diesen Dateien werden aber alle in der gleichen Art und Weise aufgerufen ("C-Standard-Bibliotheken").
  • Wir verwenden hier zur Eingabe das Schlüsselwort scanf und zur Ausgabe printf wegen ihrer Ähnlichkeit.
  • Im "echten Leben" tun Sie das bitte nicht: die Funktionen sind nicht krisensicher.

Bedingungen

  • Bedingungen sind WENN-DANN-Anweisungen.
  • In C ist das entsprechende Schlüsselwort if.
  • Der weitere Programmlauf hängt dann von Bedingungen ab:
>  größer als
<  kleiner als
== gleich
!= ungleich
>= größer oder gleich
<= kleiner oder gleich
!  nicht
  • Beispiel: Ob eine eingegebene Zahl größer oder kleiner 1 ist soll in Worten ausgegeben werden:
#include <stdio.h>

int nZahl;

int main()
{
  printf ("Bitte geben Sie eine Zahl ein: ");
  scanf ("%d", &nZahl);

  if (nZahl > 1)
    printf ("Die Zahl %d ist größer als Eins. \n", nZahl);
  else
    printf ("Die Zahl %d ist kleiner als Eins. \n", nZahl);
}
  • Die Befehle nach else werden immer ausgeführt, wenn das Gegenteil der Bedingung erfüllt ist.
  • Das Gegenteil von gleich ist dann ungleich, das Gegenteil von größer ist kleiner und umgekehrt.
  • Man könnte else also mit sonst übersetzen: Wenn...Sonst.

Fallunterscheidungen

  • if-Abfragen kann man beliebig wiederholen.
  • Bei sehr häufigen Abfragen kann das sehr unübersichtlich werden.
  • Deshalb gibt es so genannte Fallunterscheidungen, in denen ein Wert oder eine Variable mehrfach geprüft wird.
  • Bei Fallunterscheidungen wird jeder Bedingung ein Programmlauf zugeordnet.
  • In C sind die entsprechenden Schlüsselwörter switch und case.
  • Beispiel: Eine Zahl zwischen 1 und 3 soll als Wort ausgegeben werden:
#include <stdio.h>

int iZahl;

int main ()
{
  printf ("Geben Sie eine Zahl ein: ");
  scanf ("%d", &iZahl);
 
  switch (iZahl)
  {
    case 1: printf ("Eins \n"); break;
    case 2: printf ("Zwei \n"); break;
    case 3: printf ("Drei \n"); break;
    default: printf ("Zahl ist nicht zwischen 1 und 3! \n");
  }
}
  • Beachten Sie, dass nach der Ausführung eines Falles mit break die Abfrage verlassen werden muss.
  • Wenn keine Bedingung zutrifft, wird der Code hinter default ausgeführt.
  • In switch können keine Variablen vom Typ char geprüft werden!

Schleifen mit Zähler

  • Bei Zählerschleifen werden Schlüsselwörter eine bestimmte Anzahl mal wiederholt.
  • Dabei läuft eine Variable mit, die bei jedem Durchlauf verändert wird.
  • In C ist das entsprechende Schlüsselwort for.
  • Das Format von for ist
for (Startwert, Ablaufbedingung, Änderungsmaßnahme);
  • Die Zahlen von 1 bis 10 werden also durch folgendes Programm ausgegeben:

#include <stdio.h>

int nZaehler;

int main ()
{
  for (nZaehler = 1; nZaehler < 11; nZaehler++)
  {
    printf ("Zahl ist %d \n", nZaehler);
  }
}

  • Am Anfang der Schleife wird nZaehler mit 1 belegt (der Startwert)
  • Die Schleife läuft so lange nZahler kleiner als 11 ist (die Ablaufbedingung)
  • Bei jedem Durchlaufen der Schleife wird nZaehler um 1 erhöht (die Änderungsmaßnahme, nZaehler = nZaehler + 1 kann man mit nZaehler++ abkürzen).
  • Beim Durchlaufen der Schleife wird alles zwischen den folgenden Klammern { und } ausgeführt (hier also die Ausgabe von nZaehler).
  • Die Zahlen von 1 bis 10 werden nur ausgegeben, wenn die Ablaufbedingung < 11 heißt, da am Anfang entschieden wird, ob die Schleife durchlaufen werden soll.
  • for bildet also eine so genannte Kopfgesteuerte Schleife!

Kopfgesteuerte Schleifen

  • Kopfgesteuerte Schleifen prüfen am Anfang der Schleife, ob die Schleife durchlaufen wird.
  • Kopfgesteuerte Schleifen werden mit dem Wort while gebildet.
  • Kopfgesteuerte Schleifen machen Sinn, wenn eine Schleife unter bestimmten Bedingungen keinen Sinn ergibt.
  • Beispielsweise kann man eine Datei nicht auslesen, wenn am Anfang der Schleife das Ende der Datei bereits erreicht oder sie leer ist.
  • Man könnte die Zahlen von 1 bis 10 auch mit einer kopfgesteuerten Schleife ausgeben:
#include <stdio.h>

int nZaehler;

int main ()
{
  nZaehler = 0;
  while (nZaehler < 10)
  {  
    nZaehler++;
    printf ("Zahl ist %d \n", nZaehler);
  }
}
  • Sie werden alle Anweisungen aus der for-Schleife hier wiederfinden!
  • Aber überlegen Sie mal, warum die Werte der Variablen anders sind.

Fußgesteuerte Schleifen

  • Fußgesteuerte Schleifen prüfen am Ende der Schleife, ob die Bedingung zum Beenden erreicht ist.
  • Fußgesteuerte Schleifen werden mit den Schlüsselwörter do..while gebildet.
  • Fußgesteuerte Schleifen machen Sinn, wenn die Bedingung innerhalb der Schleife verändert wird.
  • Beispielsweise kann eine Schleife so lange laufen, bis während der Schleife ein bestimmter Wert eingegeben wird.

Besonderheiten von C

  • C ist eine sehr kompakte Programmiersprache von immerhin 1968.
  • Sie ist damit oft älter als ihre Programmierer. :-)
  • Dennoch laufen sehr viele C-Programme aus alter Zeit unverändert auch heute noch.
  • C ist also sehr kompatibel zu sich selbst.
  • Sie ermöglicht es, sehr kleine und schnelle Compiler zu bauen.
  • Die Prüfung von 10.000 Klammern ({}) schafft der Compiler schnell.
  • Die Prüfung von 10.000 Wörtern (BEGIN...END) dauert dagegen länger.
  • C ist eine Sprache, die auf sehr kleinen Computern gut ablaufen kann.