Programmieren in Pascal: Zahlenraten und Programmieren in C: Unterschied zwischen den Seiten

Aus Datenschutz
(Unterschied zwischen Seiten)
Zur Navigation springen Zur Suche springen
 
 
Zeile 1: Zeile 1:
'''Pascal''' ist eine nach [https://de.wikipedia.org/wiki/Blaise_Pascal Blaise Pascal] benannte Programmiersprache, die von [https://de.wikipedia.org/wiki/Niklaus_Wirth Niklaus Wirth] definiert wurde. Da die Sprache im Unterricht und im Studium eingesetzt wurde, erfuhr sie eine große Popularität. Pascal ist eine strukturierte Sprache, hat aber m. E. einige Schwächen. Zum Beispiel dass jedes END ein BEGIN erfordert und dass ELSIF fehlt, was etwas merkwürdige Schachtelungen ergibt.
+
== Programmieren in C auf dem eigenen Computer ==
 +
[[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].
  
Ein freies, portables und leistungsfähiges Entwicklungssystem für Windows, MacOS und Linux ist [https://www.lazarus-ide.org/ Lazarus]. Die Programme können zwischen den Systemen frei kopiert und neu übersetzt werden.
+
== Grundsätzliches Wissen für angehende Programmierer/-innen ==
 +
[[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
 +
<pre>"Starte das Auto"</pre>
 +
* 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.
  
<html>
+
== 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>
 
<pre>
<abbr title="Jedes Pascal-Programm beginnt mit dem Schlüsselwort program.">PROGRAM</abbr> Zahlenraten;
+
int main ()
 +
{
 +
  // Hier startet das Hauptprogramm
 +
  printf ("Zahlenraten - ich denke mir eine Zahl und Du errätst sie. \n");
 +
}
 +
</pre>
  
// Testen von LAZARUS auf Windows und Linux
+
== Variable ==
// (c) Frank Werner, 21.12.2021
+
* 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>
  
<abbr title="Mit dem Schlüsselwort CONST werden Konstante definiert, also Platzhalter, deren Inhalt nicht geändert werden kann.">CONST</abbr> iMaxZahl = 100;
+
int nGedachteZahl = 24; // muss erraten werden
 +
    nVermutung = 0;   // sicher ist sicher
  
<abbr title="Mit VAR werden dem Computer Variable erklärt, also Speicherstellen, deren Inhalt variabel ist.">VAR</abbr> iZahl, iVermutung: <abbr title="Jede Variable hat einen Typ, der ihren Inhalt bestimmt. Variable vom Typ INTEGER können nur ganze Zahlen speichern.">INTEGER</abbr>;
+
int main ()
 +
{
 +
  // Hier startet das Hauptprogramm
 +
  printf ("Zahlenraten - ich denke mir eine Zahl und Du errätst sie. \n");
 +
}
 +
</pre>
  
// Prüft, ob die Vermutung richtig ist und gibt Tipps
+
== Ein- und Ausgabe ==
<abbr title="Funktionen sind Unterprogramme, die nach dem Aufruf einen Wert an den Aufrufer zurück geben">FUNCTION</abbr> Richtig (iNumber, iGuess: INTEGER): <abbr title="Diese Funktion gibt einen Wert vom Typ BOOLEAN, also nur TRUE (wahr) oder FALSE (falsch) zurück.">BOOLEAN</abbr>;
+
* Ein Programm braucht grundsätzlich Anweisungen für die '''Eingabe''', die '''Verarbeitung''' und die '''Ausgabe''' von Daten.
<abbr title="BEGIN und END bilden immer einen so genannten Block. Damit können Programme in Abschnitte aufgeteilt werden.">BEGIN</abbr>
+
* 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].
  
  Richtig := FALSE; // Zunächst mal
+
== Bedingungen ==
 
+
* Bedingungen sind '''WENN-DANN-Anweisungen'''.
  IF iGuess > iNumber THEN    // Der Abfrage folgt nur ein Befehl
+
* In C ist das entsprechende Schlüsselwort '''if'''.
    WRITELN ('...kleiner');  // weshalb wir den einfach dahin schreiben.
+
* Der weitere Programmlauf hängt dann von '''Bedingungen''' ab:
+
<pre>
  IF iGuess < iNumber THEN
+
>  größer als
    WRITELN ('...größer');
+
<  kleiner als
 +
== gleich
 +
!= ungleich
 +
>= größer oder gleich
 +
<= kleiner oder gleich
 +
</pre>
 +
* Beispiel: Ob eine eingegebene Zahl größer oder kleiner 1 ist soll in Worten ausgegeben werden:
 +
<pre>
 +
#include <stdio.h>
  
  IF iGuess = iNumber THEN BEGIN // Wenn der Abfrage mehr als ein Befehl folgt,
+
int nZahl;
    WRITELN ('...ERRATEN!');    // brauchen wir BEGIN und END
 
    Richtig := TRUE;
 
  END;
 
  
<abbr title="Die Funktion ist hier zu Ende.">END;</abbr>
+
int main()
 +
{
 +
  printf ("Bitte geben Sie eine Zahl ein: ");
 +
  scanf ("%d", &nZahl);
  
<abbr title="Prozeduren sind Unterprogramme, die keinen Wert zurück geben.">PROCEDURE</abbr> Titel_ausgeben;
+
  if (nZahl > 1)
BEGIN
+
    printf ("Die Zahl %d ist größer als Eins. \n", nZahl);
  WRITELN ('Zahlenraten - ich denke mir eine Zahl!');
+
  else
  WRITELN ('zwischen 0 und ', iMaxZahl);
+
    printf ("Die Zahl %d ist kleiner als Eins. \n", nZahl);
  WRITELN ('und Du errätst sie!');
+
}
<abbr title="Die Prozedur ist hier zu Ende">END;</abbr>
+
</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.
  
// Anfang des Hauptprogramms: Hier startet das Programm. Prozeduren und Funktionen
+
== Fallunterscheidungen ==
// werden zwar auf richtige Schreibweise geprüft, aber nur ausgeführt, wenn man sie
+
* Bei Fallunterscheidungen wird jeder '''Bedingung ein Programmlauf''' zugeordnet.
// aufruft. Deklarierte Variable, Konstante etc. gelten im gesamten Programm.
+
* In C sind die entsprechenden Schlüsselwörter '''switch''' und '''case'''.
  
BEGIN
+
== 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'''.
  
  // Titel ausgeben: Aufruf der gleichnamigen Prozedur
+
== Kopfgesteuerte Schleifen ==
  Titel_ausgeben;
+
== Fußgesteuerte Schleifen ==
 
+
== Dateien ==
  // Zufallszahl initialisieren und erzeugen
 
  RANDOMIZE;
 
  iZahl := RANDOM(iMaxZahl);
 
 
 
  // Abfragen bis die Zahl erraten ist
 
  REPEAT
 
    WRITE ('Deine Vermutung?');
 
    READLN (Vermutung);
 
  UNTIL Richtig (iZahl, iVermutung);  // <- Diese Abfrage ruft gleichzeitig stets die Funktion auf.
 
 
 
END.
 
</pre>
 
</html>
 

Version vom 26. Juli 2022, 14:47 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
  • 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

  • Bei Fallunterscheidungen wird jeder Bedingung ein Programmlauf zugeordnet.
  • In C sind die entsprechenden Schlüsselwörter switch und case.

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.

Kopfgesteuerte Schleifen

Fußgesteuerte Schleifen

Dateien