Algorithmen und Programmstruktur
Algorithmen und Programmstrukturen sind essenziell für das Programmieren in C. In diesem Beitrag erklären wir dir die ersten Grundlagen dazu!
Inhaltsübersicht
Algorithmen in der Informatik
Als erstes solltest du wissen, was es mit Algorithmen auf sich hat. Diese gibt es zwar schon viel länger als Programmiersprachen und PCs, dennoch sind sie zur Lösung informatischer Probleme unerlässlich.
Eigentlich ist ein Algorithmus nichts weiter als eine exakte Formulierung eines Problems. Dazu gibt man einen allgemeinen Lösungsweg an, der mechanischen Abläufen folgt. Dabei muss er allerdings immer noch für alle Einzelfälle und Instanzen gelten. Diese sind in C Stellen im Speicher, die Werte enthalten können.
Euklidischer Algorithmus C – Beispiel
Das klingt jetzt etwas kompliziert, ist es aber eigentlich gar nicht. Nehmen wir als Beispiel den euklidischen Algorithmus, der auch in der in den Mathevorlesungen des Informatikstudiums behandelt wird. Du setzt dabei zwei Zahlen ein und wenn du ihn korrekt durchführst, erhältst du am Ende den größten gemeinsamen Teiler der beiden Zahlen. Dazu arbeitet der Algorithmus immer wieder eine einfache Rechenoperation durch, bis er bei entweder 0 oder 1 ankommt. Um das zu veranschaulichen, gehen wir den Ablauf einmal durch:
Stell dir vor, du möchtest den größten gemeinsamen Teiler von 64 und 40 berechnen. Dazu musst du nun laut dem euklidischen Algorithmus, die größere durch die kleinere Zahl teilen und wie in der Grundschule den Rest notieren. Das nennt man auch „modulo nehmen“.
Nun nehmen wir die kleinere, zweite Zahl und nehmen sie modulo den Rest. Das machen wir solange, bis wir bei einem Rest von null ankommen – falls es einen gemeinsamen Teiler gibt – und bei einem Rest von eins, wenn nicht. Hier geht die Rechnung auf und wir erhalten als größten gemeinsamen Teiler 8.
Möchte man das jetzt als Algorithmus darstellen, muss man auf Variablen zurückgreifen. Wir nennen also unsere erste Zahl x und die zweite y. Den Rest nennen wir r. Wir führen nun, solange x größer null ist, immer wieder die Schritte x mod y = r , y wird zu x‘ und‚ r wird zu y‘ aus.
Fertig ist unser Algorithmus, auch wenn er noch nicht die richtige Form hat. Aber das kommt erst später und wird damit an dieser Stelle noch nicht benötigt.
C-Programm Grundstruktur
Wichtig ist für dich jetzt noch die Struktur eines C-Programmes zu verstehen. Grundlegend ist ein C-Programm nichts anderes als die Einbettung von Zeilen in Funktionen. Diese sind wiederum abhängig von den Werten, die sie als Eingabe erhalten. In der Fachsprache werden solche Werte auch Parameter oder Argumente genannt.
Die Funktionen mit ihren eingebetteten Programmzeilen liefern uns dann Resultate, die wir ausgeben oder weiterverarbeiten können und sind damit für ein Programm unerlässlich.
Du musst für alle Eingabe- und Ausgabewerte immer einen sogenannten Typen angeben. Dieser steht bei den Eingabeparametern direkt vor der Variable, bei den Ausgabeparametern vor dem Funktionsnamen. Damit ist ein C-Programm also nichts weiter, als eine wirre Sammlung von Funktionsdefinitionen. Das macht die Reihenfolge dieser Funktionsdefinitionen unwichtig. Was du allerdings beachten musst, ist, dass immer eine main-Funktion vorhanden sein muss. Diese ist nämlich dafür zuständig, alle anderen Funktionen entweder direkt oder indirekt über andere Funktionen aufzurufen. Ist sie nicht vorhanden, kann dein Programm nicht starten und es passiert nichts.
Willst du bestimmte Funktionen in C nutzen, so musst du erst sogenannte Bibliotheken einbinden. Dies kannst du über den #include-Befehl machen. Bibliotheken, die auf diese Weise eingebunden wurden, können von allen Funktionen deiner Datei genutzt werden.
C-Programm – Beispiel
Schauen wir uns dazu mal ein Beispiel an. Hier haben wir ein sehr einfaches C-Programm vorliegen. Du kannst zwar bestimmt schon erahnen, was es tut, das ist jedoch jetzt erst einmal nicht wichtig.
Wie du sehen kannst, erfolgen Importe immer am Anfang des Programms. Danach kannst du deine Funktionsdefinitionen in beliebiger Reihenfolge einfügen. Wir empfehlen dir aber, alle anderen Funktionen vor ihrem Aufruf in der main zu definieren.
In unserem Beispiel siehst du deswegen zuerst die Definition unserer Test-Funktion, die die Summe zweier Werte zurückgibt.
Direkt darunter liegt die Definition unserer Main-Funktion, in der wir die mittels Bibliothek eingebundene Funktion printf benutzen, um das Ergebnis des Funktionsaufrufes auszugeben. Danach beenden wir die Main-Funktion, indem wir null zurückgeben.
Jetzt weißt du, wie man mit Algorithmen rechnet und hast einen ersten Eindruck von der Struktur eines Programms erhalten.