Programmieren in Pascal: Zahlenraten: Unterschied zwischen den Versionen

Aus Datenschutz
Zur Navigation springen Zur Suche springen
(12 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
'''Pascal''' ist eine nach Blaise Pascal benannte Programmiersprache, die von 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 BEGIN ein END erfordert.
+
'''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.
  
 +
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.
 +
 +
<html>
 
<pre>
 
<pre>
PROGRAM Zahlenraten;
+
<abbr title="Jedes Pascal-Programm beginnt mit dem Schlüsselwort program.">PROGRAM</abbr> Zahlenraten;
  
// Testen von LAZARUS auf Windows und Linux
+
<abbr title="Das hier sind Kommentare. Sie werden vom Computer (Compiler) ignoriert und sind nur für die Menschen gedacht.">//</abbr> Testen von LAZARUS auf Windows und Linux
 
// (c) Frank Werner, 21.12.2021
 
// (c) Frank Werner, 21.12.2021
  
CONST iMaxZahl = 100;
+
<abbr title="Mit dem Schlüsselwort CONST werden Konstante definiert, also Platzhalter, deren Inhalt nicht geändert werden kann.">CONST</abbr> iMaxZahl = 100;
  
VAR Zahl, Vermutung: INTEGER;
+
<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>;
  
 
// Prüft, ob die Vermutung richtig ist und gibt Tipps
 
// Prüft, ob die Vermutung richtig ist und gibt Tipps
FUNCTION Test (Number, Guess: INTEGER): BOOLEAN;
+
<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>;
BEGIN
+
<abbr title="BEGIN und END bilden immer einen so genannten Block. Damit können Programme in Abschnitte aufgeteilt werden.">BEGIN</abbr>
  
   IF Guess > Number THEN BEGIN
+
  Richtig := FALSE; // Zunächst mal
     WRITELN ('...kleiner');
+
 
    Test := FALSE;
+
   IF iGuess > iNumber THEN   // Der Abfrage folgt nur ein Befehl
   END ELSE IF Guess < Number THEN BEGIN
+
     WRITELN ('...kleiner');   // weshalb wir den einfach dahin schreiben.
 +
 +
   IF iGuess < iNumber THEN
 
     WRITELN ('...größer');
 
     WRITELN ('...größer');
    Test:=FALSE;
+
 
   END ELSE IF Guess = Number THEN BEGIN
+
   IF iGuess = iNumber THEN BEGIN // Wenn der Abfrage mehr als ein Befehl folgt,
     WRITELN ('...ERRATEN!');
+
     WRITELN ('...ERRATEN!');     // brauchen wir BEGIN und END
     Test:=TRUE;
+
     Richtig := TRUE;
 
   END;
 
   END;
  
END;
+
<abbr title="Die Funktion ist hier zu Ende.">END;</abbr>
  
 +
// Ausgeben des Titels
 +
<abbr title="Prozeduren sind Unterprogramme, die keinen Wert zurück geben.">PROCEDURE</abbr> Titel_ausgeben;
 
BEGIN
 
BEGIN
 
  // Titel ausgeben
 
 
   WRITELN ('Zahlenraten - ich denke mir eine Zahl!');
 
   WRITELN ('Zahlenraten - ich denke mir eine Zahl!');
 
   WRITELN ('zwischen 0 und ', iMaxZahl);
 
   WRITELN ('zwischen 0 und ', iMaxZahl);
 
   WRITELN ('und Du errätst sie!');
 
   WRITELN ('und Du errätst sie!');
 +
<abbr title="Die Prozedur ist hier zu Ende">END;</abbr>
 +
 +
// Anfang des Hauptprogramms: Hier startet das Programm. Prozeduren und Funktionen
 +
// werden zwar auf richtige Schreibweise geprüft, aber nur ausgeführt, wenn man sie
 +
// aufruft. Deklarierte Variable, Konstante etc. gelten im gesamten Programm.
 +
 +
BEGIN
 +
 +
  // Titel ausgeben: Aufruf der gleichnamigen Prozedur
 +
  Titel_ausgeben;
  
 
   // Zufallszahl initialisieren und erzeugen
 
   // Zufallszahl initialisieren und erzeugen
 
   RANDOMIZE;
 
   RANDOMIZE;
   Zahl:=RANDOM(iMaxZahl);
+
   iZahl := RANDOM(iMaxZahl);
  
 
   // Abfragen bis die Zahl erraten ist
 
   // Abfragen bis die Zahl erraten ist
Zeile 43: Zeile 58:
 
     WRITE ('Deine Vermutung?');
 
     WRITE ('Deine Vermutung?');
 
     READLN (Vermutung);
 
     READLN (Vermutung);
   UNTIL Test (Zahl, Vermutung);
+
   UNTIL Richtig (iZahl, iVermutung); // <- Diese Abfrage ruft gleichzeitig stets die Funktion auf.
  
 
END.
 
END.
 
</pre>
 
</pre>
 +
</html>

Version vom 26. Juli 2022, 13:29 Uhr

Pascal ist eine nach Blaise Pascal benannte Programmiersprache, die von 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.

Ein freies, portables und leistungsfähiges Entwicklungssystem für Windows, MacOS und Linux ist Lazarus. Die Programme können zwischen den Systemen frei kopiert und neu übersetzt werden.

PROGRAM Zahlenraten;

// Testen von LAZARUS auf Windows und Linux
// (c) Frank Werner, 21.12.2021

CONST iMaxZahl = 100;

VAR iZahl, iVermutung: INTEGER;

// Prüft, ob die Vermutung richtig ist und gibt Tipps
FUNCTION Richtig (iNumber, iGuess: INTEGER): BOOLEAN;
BEGIN

  Richtig := FALSE; // Zunächst mal
  
  IF iGuess > iNumber THEN    // Der Abfrage folgt nur ein Befehl
    WRITELN ('...kleiner');   // weshalb wir den einfach dahin schreiben.
 
  IF iGuess < iNumber THEN
    WRITELN ('...größer');

  IF iGuess = iNumber THEN BEGIN // Wenn der Abfrage mehr als ein Befehl folgt,
    WRITELN ('...ERRATEN!');     // brauchen wir BEGIN und END
    Richtig := TRUE;
  END;

END;

// Ausgeben des Titels
PROCEDURE Titel_ausgeben;
BEGIN
  WRITELN ('Zahlenraten - ich denke mir eine Zahl!');
  WRITELN ('zwischen 0 und ', iMaxZahl);
  WRITELN ('und Du errätst sie!');
END;

// Anfang des Hauptprogramms: Hier startet das Programm. Prozeduren und Funktionen 
// werden zwar auf richtige Schreibweise geprüft, aber nur ausgeführt, wenn man sie
// aufruft. Deklarierte Variable, Konstante etc. gelten im gesamten Programm.

BEGIN

  // Titel ausgeben: Aufruf der gleichnamigen Prozedur 
  Titel_ausgeben; 

  // 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.