Betroffenenrechte und Programmieren in C: Unterschied zwischen den Seiten

Aus Datenschutz
(Unterschied zwischen Seiten)
Zur Navigation springen Zur Suche springen
 
 
Zeile 1: Zeile 1:
'''Auskunft, Berichtigung, Datenübertragbarkeit - konstruktive Rechte '''
+
== Programmieren in C auf dem eigenen Computer ==
Zum Zeitpunkt der direkten Erhebung sind den betroffenen Personen mitzuteilen, wer Verantwortlicher ist, wer Datenschutzbeauftragter (falls vorhanden) und wer die Aufsichtsbehörde ist. Dazu müssen deren Kontaktdaten aufgeführt werden. Ferner sind die Zwecke und die Rechtsgrundlage der Verarbeitung zu nennen, ferner auch, sofern darauf begründet, die berechtigten Interessen des Verantwortlichen. Werden Daten an Dritte übermittelt, sind der Empfänger und die Kategorien der übermittelten Daten zu benennen.  
+
[[Datei:Raspi400.jpg|mini|rechts|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 [https://github.com/Embarcadero/Dev-Cpp/releases hier] (Windows, MacOS).
 +
* Auf einem Raspberry Pi kann man einfach [https://de.wikipedia.org/wiki/Geany Geany] benutzen.
 +
* Oder Sie programmieren einfach hier und jetzt [https://www.onlinegdb.com/online_c_compiler online].
  
Dies betrifft die Datenschutzerklärung auf Websites und Hinweisschilder bei Videoüberwachung!
+
== Grundsätzliches Wissen für angehende Programmierer/-innen ==
Ferner ist sie auf Antrag auf das Recht auf Auskunft über die verarbeiteten Daten, die Verarbeitungszwecke, die geplante Dauer der Speicherung und das Bestehen eines Rechts auf Berichtigung, Löschung oder Einschränkung der Verarbeitung. Basiert die Verarbeitung auf einer Einwilligung, ist sie auf das Recht auf Widerruf (für die Zukunft) hinzuweisen. Ferner auf das Beschwerderecht bei einer Aufsichtsbehörde.
+
[[Datei:Geany.png|mini|links|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.
  
Sofern eine automatisierte Entscheidungsfindung oder Profiling besteht, darf sie erfahren, welche Logik, Tragweite und Auswirkungen diese hat.
+
== 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):
 +
<pre>
 +
int main ()
 +
{
 +
  // Hier startet das Hauptprogramm
 +
  printf ("Zahlenraten - ich denke mir eine Zahl und Du errätst sie. \n");
 +
}
 +
</pre>
  
Sofern die Daten nicht bei der betroffenen Person selbst erhoben wurden, hat sie ein Recht auf Auskunft, woher diese Daten stammen. Dies gilt auch, wenn sie aus einer öffentlichen Quelle stammen.
+
== Variable ==
Sofern die Verarbeitung auf einer Einwilligung oder einem Vertrag beruht, gibt es ein Recht auf Datenübertragbarkeit. Die betroffene Person hat ein Recht auf Übertragung ihrer Daten und kann sie in maschinenlesbarer Form verlangen. Sie kann auch verlangen, dass diese maschinenlesbaren Daten direkt von einem Anbieter zu einem anderen übermittelt werden, sofern das technisch machbar ist.
+
* 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>
  
Die Anträge sollen unverzüglich, jedenfalls aber innerhalb eines Monats, bei komplexen Abfragen innerhalb von insgesamt drei Monaten bearbeitet werden. Über eine mögliche Fristverlängerung und ihre Gründe ist die betroffene Person innerhalb des ersten Monats zu informieren.
+
int nGedachteZahl = 24; // muss erraten werden
 +
    nVermutung = 0;    // sicher ist sicher
  
''DSG NW: Das Datenschutzgesetz Nordrhein-Westfalen bestimmt eine Informationspflicht eines Daten Erhebenden gegenüber einer Erhebungsstelle auf Verlangen, sofern schutzwürdige Belange der Person nicht beeinträchtigt werden. Werden die Daten bei einer dritten Person oder einer nicht-öffentlichen Stelle dagegen aufgrund einer Rechtsvorschrift erhoben, die die dritte Person zur Auskunft verpflichtet, ist die Person oder Stelle auf diese Vorschrift hinzuweisen.''
+
int main ()
 +
{
 +
  // Hier startet das Hauptprogramm
 +
  printf ("Zahlenraten - ich denke mir eine Zahl und Du errätst sie. \n");
 +
}
 +
</pre>
  
Die betroffenen Personen müssen nicht informiert werden, solange die Informationen Strafermittlungen u. ä. nicht gefährden, sie ohnehin geheim zu halten sind oder die Information der Betroffenen zivilrechtliche Ansprüche beeinträchtigen würde. Stammen die Daten von Polizei oder Nachrichtendiensten oder werden sie an diese übermittelt, müssen die Stellen vor der Information der Betroffenen gefragt werden. Das Auskunftsrecht ist dann ebenfalls eingeschränkt. Auch ein Datenleck muss hier nicht gemeldet werden.
+
== Ein- und Ausgabe ==
Das Auskunftsrecht besteht ebenfalls nicht, wenn Daten für wissenschaftliche, historische oder statistische Zwecke verarbeitet werden und die Zwecke damit unmöglich macht .
+
* 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].
  
''' Weitere Informationen '''
+
== Bedingungen ==
* Das Recht auf [https://www.datenschutz-notizen.de/das-recht-auf-eine-datenkopie-nun-zurechtgestutzt-2125335/ Kopien] ist eingeschränkt.
+
* Bedingungen sind '''WENN-DANN-Anweisungen'''.
* Das Auskunftsrecht ist jedoch [https://www.datenschutz-praxis.de/fachartikel/auskunftsanspruch-gegen-versicherung/?newsletter=ds/i/urteil-der-woche/9100/2020/18/02091543/Artikel_1&va=02091543&chorid=02091543&vkgrp=354 hoch anzusetzen].
+
* In C ist das entsprechende Schlüsselwort '''if'''.
* Ein Geheimhaltungsanspruch steht dem [https://www.datenschutz-praxis.de/fachartikel/auskunftsanspruch-contra-geheimhaltungsinteresse/?newsletter=ds/i/urteil-der-woche/9100/2020/18/02091543/Artikel_2&va=02091543&chorid=02091543&vkgrp=354 nicht entgegen].
+
* Der weitere Programmlauf hängt dann von '''Bedingungen''' ab:
* Das gilt auch für [https://www.datenschutz-praxis.de/fachartikel/dsgvo-auskunft-ueber-gespraechsnotizen-telefonvermerke/?newsletter=ds/i/urteil-der-woche/9100/2020/18/02091543/Artikel_3&va=02091543&chorid=02091543&vkgrp=354 Notizen und Gesprächsvermerke].
+
<pre>
* Der Aufwand einer Auskunft darf [https://www.lhr-law.de/magazin/datenschutzrecht/dsgvo-der-aufwand-der-auskunft-darf-nicht-ausufern/ nicht ausufern].
+
>  größer als
* Das Recht auf Auskunft besteht [https://www.hessenschau.de/gesellschaft/datenschutz---dsgvo-gilt-in-petitionsausschuss,kurz-daten-eugh-100.html auch gegenüber einem Petitionsausschuss].
+
<  kleiner als
 +
== gleich
 +
!= ungleich
 +
>= 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>
  
''' Widerspruch, Einschränkung, Löschung - destruktive Rechte '''
+
int nZahl;
Die betroffene Person hat ein Recht auf vollständige Löschung aller ihrer personenbezogenen Daten („Recht auf Vergessen werden“).
 
  
Der Verantwortliche ist außerdem verpflichtet, die Daten vollständig zu löschen, wenn sie für den ursprünglichen Zweck nicht mehr benötigt werden, die betroffene Person ihre Einwilligung widerruft, die ursprüngliche Rechtsgrundlage nicht mehr gültig ist, die betroffene Person Widerspruch nach Artikel 21 Absätze 1 oder 2 einlegt (Prominentenschutz, Direktmarketing), die Daten unrechtmäßig verarbeitet wurden (Nrn. 3, 4), die Löschung einer gesetzlichen oder vertraglichen Verpflichtung entspricht, oder sie von einem Kind unter 16 Jahren stammen.
+
int main()
 +
{
 +
  printf ("Bitte geben Sie eine Zahl ein: ");
 +
  scanf ("%d", &nZahl);
  
Sofern die Daten bereits legal öffentlich gemacht wurden, muss der Verantwortliche alle Maßnahmen treffen, die Daten zu löschen und alle Datenverarbeiter darüber zu informieren, dass „eine“ (sic!) betroffene Person die Löschung verlangt hat. Ihr Name soll also tunlichst nicht genannt werden.
+
  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.
  
Die Daten müssen eingeschränkt werden, wenn Betroffene ihre Richtigkeit anzweifeln, die Verarbeitung unrechtmäßig ist, sie aber seitens der Betroffenen nicht gelöscht werden sollen, die Daten zur Durchsetzung eines Rechtsanspruchs benötigt werden oder ein Widerspruch nach Artikel 21 Abs. 1 eingelegt hat, die Anspruchsgrundlage aber nicht geklärt ist.
+
== 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>
  
Eingeschränkte Daten dürfen nur mit Einwilligung der Betroffenen, zur Geltendmachung von Rechtsansprüchen oder im Öffentlichen Interesse verarbeitet werden.
+
int iZahl;
  
Betroffene haben außerdem das Recht auf Widerspruch gegen eine Verarbeitung nach Artikel 6 Abs. 1 Buchstaben. e und f, wenn sich aus ihrer besonderen Situation (Prominentenstatus?) Gründe ergeben (Verarbeitung aus öffentlichem Interesse oder dem Interesse des Verantwortlichen), sofern ihre Interessen, Rechte und Freiheiten überwiegen.
+
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!
  
Gegen Direktwerbung und Profiling dafür kann jederzeit Widerspruch eingelegt werden, was einen sofortigen Verarbeitungsstopp zur Folge hat. Auf diese Rechte muss die betroffene Person bei der ersten Kontaktaufnahme hingewiesen werden. Der Widerspruch kann auch durch automatisierte Verfahren erfolgen.
+
== Schleifen mit Zähler ==
Gegen die Datenverarbeitung für Wissenschaft, Forschung und Statistik kann ebenfalls Widerspruch eingelegt werden, sofern das öffentliche Interesse nicht überwiegt.
+
* 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>
  
Steht ein zwingendes öffentliches Interesse einem Widerspruchsrecht entgegen, besteht es gegenüber der öffentlichen Stelle nicht.
+
#include <stdio.h>
  
Über die Rechte nach den Nrn. 6.1 und 6.2 wird die betroffene Person auf Verlangen informiert. Der Verantwortliche teilt die Wahrnehmung dieser Rechte allen Empfängern mit, sofern das möglich und vertretbar ist.
+
int nZaehler;
  
''DSG NW: Wenn die Behörden verpflichtet sind, ihre Akten nach Abschluss des Verfahrens einem öffentlichen Archiv anzubieten, entfällt die Löschungsfrist. Ist die Löschung sehr aufwändig, kann auch anonymisiert werden.''
+
int main ()
 +
{
 +
  for (nZaehler = 1; nZaehler < 11; nZaehler++)
 +
  {
 +
    printf ("Zahl ist %d \n", nZaehler);
 +
  }
 +
}
  
Rechte auf Einschränkung und Widerspruch bestehen ebenfalls nicht, wenn Daten für wissenschaftliche, historische oder statistische Zwecke verarbeitet werden und die Zwecke unmöglich macht. Es besteht dann nicht einmal ein Recht auf Berichtigung.
+
</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!
  
* Wer [https://hudoc.echr.coe.int/app/conversion/pdf?library=ECHR&id=001-196351&filename=CASE%20OF%20M.L.%20AND%20W.W.%20v.%20GERMANY%20-%20%5BGerman%20Translation%5D%20summary%20by%20the%20Austrian%20Institute%20for%20Human%20Rights%20%28%D6IM%29.pdf selbst an die Öffentlichkeit] geht, der hat kein Recht auf Vergessen werden".
+
== Kopfgesteuerte Schleifen ==
* Auch wenn ein großes öffentliches Interesse an einer Tat besteht, müssen alte Berichte [https://www.bundesverfassungsgericht.de/SharedDocs/Entscheidungen/DE/2019/11/rs20191106_1bvr001613.html nicht gelöscht werden].
+
* Kopfgesteuerte Schleifen prüfen '''am Anfang''' der Schleife, ob die Schleife durchlaufen wird.
* Datenschutz im [https://www.datenschutz-praxis.de/fachnews/selbst-check-datenschutz-im-homeoffice/?newsletter=ds/i/datenschutz-praxis-aktuell/9100/2020/22/02091536/News_1&va=02091536&chorid=02091536&vkgrp=354 "Home-Office"] (Datenschutzpraxis, 09.06.2020)
+
* 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.
 +
 
 +
== 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 6. September 2022, 11:18 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.

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.