Programmieren in Pascal: Zahlenraten: Unterschied zwischen den Versionen
Zur Navigation springen
Zur Suche springen
Admin (Diskussion | Beiträge) |
Admin (Diskussion | Beiträge) |
||
Zeile 18: | Zeile 18: | ||
<abbr title="BEGIN und END bilden immer einen so genannten Block. Damit können Programme in Abschnitte aufgeteilt werden.">BEGIN</abbr> | <abbr title="BEGIN und END bilden immer einen so genannten Block. Damit können Programme in Abschnitte aufgeteilt werden.">BEGIN</abbr> | ||
− | IF iGuess > iNumber THEN | + | Richtig := FALSE; // Zunächst mal |
− | WRITELN ('...kleiner'); | + | |
− | + | 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'); | WRITELN ('...größer'); | ||
− | + | ||
− | + | IF iGuess = iNumber THEN BEGIN // Wenn der Abfrage mehr als ein Befehl folgt, | |
− | WRITELN ('...ERRATEN!'); | + | WRITELN ('...ERRATEN!'); // brauchen wir BEGIN und END |
Richtig := TRUE; | Richtig := TRUE; | ||
END; | END; | ||
− | END; | + | <abbr title="Die Funktion ist hier zu Ende.">END;</abbr> |
<abbr title="Prozeduren sind Unterprogramme, die keinen Wert zurück geben.">PROCEDURE</abbr> Titel_ausgeben; | <abbr title="Prozeduren sind Unterprogramme, die keinen Wert zurück geben.">PROCEDURE</abbr> Titel_ausgeben; | ||
Zeile 36: | Zeile 38: | ||
WRITELN ('zwischen 0 und ', iMaxZahl); | WRITELN ('zwischen 0 und ', iMaxZahl); | ||
WRITELN ('und Du errätst sie!'); | WRITELN ('und Du errätst sie!'); | ||
− | END; | + | <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 | + | // Titel ausgeben: Aufruf der gleichnamigen Prozedur |
− | Titel_ausgeben; | + | Titel_ausgeben; |
// Zufallszahl initialisieren und erzeugen | // Zufallszahl initialisieren und erzeugen | ||
Zeile 51: | Zeile 57: | ||
WRITE ('Deine Vermutung?'); | WRITE ('Deine Vermutung?'); | ||
READLN (Vermutung); | READLN (Vermutung); | ||
− | UNTIL Richtig (iZahl, iVermutung); | + | UNTIL Richtig (iZahl, iVermutung); // <- Diese Abfrage ruft gleichzeitig stets die Funktion auf. |
END. | END. | ||
</pre> | </pre> | ||
</html> | </html> |
Version vom 26. Juli 2022, 13:27 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; 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.