Pascal (Programmiersprach)

**Pascal** is a Programmiersprach, de da Wirth Niklaus 1972 an da ETH Zürich ois Lehrsprach entwickelt hod. Gnennt hod as nach am franzesischn Mathematiker Blaise Pascal, wei dea se unta andam mit mechanische Rechnmaschina und damit de Vorläufer vo de heitign Rechner bschäftigt hod.

Pascal is a Weidaentwicklung vo Algol 60. Pascal is a Sprach, de vo am Compiler in maschinalesbarn Code umgsetzt werd. Wei Pascal ois Lehrsprach dacht wor zwingts an Programmierer zua am guad lesbarn strukturiaden Programmierstil. Pascal werd weidahin gern in da Ausbuidung heagnumma. Auf da andern Seitn is fia sicherheitskritische Sachan recht beliabt, wei Programme de in Pascal gschriem worn han leichta prüf- und wartbar han ois bei andre vagleichbare Sprachn.

Pascal is unta anderm a
* imperative
* stark typisiade
* strukturiade
* prozedurale
Programmiersprach

## Wichtige Variantn
A große Vabreitung hod de Sprach durch de Version Turbo Pascal vo Borland gfundn. A zua Turbo Pascal ähnliche Varianten aus da Open-Source-Woid is FreePascal. De aktuellen kommerzielln Versiona vo Borland hoaßn Delphi. As freie Gegnstück dodazua is Lazarus. Delphi werd aba vo fui Leid aba scho ois a eignständige Sprach ogseng, de nua ihre Wurzln in Pascal hod.

Weis nua fian Informatik-Unterricht dacht war ham am ursprünglichen Pascal an haffa wichtige Sachan gfejd, de ma bracht, wenn ma Programme schreim mog, de an echtn Nutzn hom. So war'n de Dateizugriff und de Vawendung vo Zeichnkettn ned bsundas komfortabl, a hods koa umfangreiche Laufzeitbibliothek ned gem. Kommerzielle Variantn vo Pascal hom do entsprechende Erweiterunga gschaffn, dadurch han eascht amoi vaschiedne Dialekte entstandn. Durch de Marktmacht vo Turbo Pascal hod se der Dialekt ois Standard durchgsetzt.

## Modularisierung
S' ursprüngliche Pascal hod a koa Konzept fia Modularisierung enthoidn. Des is a eascht durch Turbo Pascal durch de sognanntn *Units* dazuakemma. Mit Modularisierung is gmoant, das ma an Quelltext in mehra Teile zlegt. Oans davo is dann as Hauptprogramm, in dem ma ogibt, wejche Module dazua ghearn. Beim Iabasetzn mim Compiler wern dann de Module zsammgsetzt. A Modul ko sejba a wiada auf andane Module zuagreifn. Oa Vorteil davo is, daß ma a Modul a in andane Programme wiadavawendn ko. Änderunga in dem Modul wern dann automatisch auf olle Programme iabatrong, de des Modul vawendn. A miaßn nua de Module nei iabasetzt wern, de geändert worn san. Damit muaß ned jedsmoi da ganze Quelltext iabasetzt wern. Dodaduach gehds Iabasetzn deitlich schnella, wos dem *Turbo* im Marknnama sei Berechtigung gem hod.

Da Erfinder vo Pascal hod de Modularisierung fia Pascal nimma eigführt, er hod dadafia a neie Sprachn entwickelt, de a dann passenderweis Modula gnennt hod.

## Strukturiade Programmierung
Oa Aspekt vo da strukturiaden Programmierung is, das Sprünge (oiso as GOTO) vamiedn wern soin. Es soi nua drei Kontrollstrukturen gem:
* A Sequenz, oiso Befehle, de oafach nachranand ausgfiad wern.
* Vazweigunga, aufgrund vo Entscheidunga. Des han in Pascal
** if-then-else: Wenn de Bedingung hinta dem *if* erfüllt werd, dann so da Befehl nach am *then* ausgfiad wern, ansunstn der hinta dem *else*
** case: Fia a Variable mit am ganzzahlign Inhoid (des derf a a oanzlna Buachstob sei) werd in na Art Tabelln da passende Befehl gsuacht.
* Schleifn, do gibts in Pascal
** for-Schleifn, do werd a Schleifnzähler vo am Anfangswert zua am Endwert hochzejd, domit werd de Schleifn x-mal wiadahoid, wobei scho vorher bekannt is, wia oft des sei werd.
** repeat-until-Schleifn, do werd nach jedm Durchlauf a Bedingung prüft. Wenn de erfüllt is, werd obbrocha. De Schleifn werd auf jedn Foi mindestens oamoi durchlaffa.
** while-do-Schleifen, do werd voa jedem Durchlauf a Bedingung prüft. Nua wenn de Bedingung erfüllt is, werd da foignde Befehl iabahapts ausgfiad. Es ko oiso sei, das de Schleifn iabahapts ned ausgfiad werd.

De Befehle fia Vazweigunga und Schleifn genga dafo aus, das nua oa oanziga Befehl danach kimmt. Soi a ganze Sequenz fo Befehle ausgfiad wern, miaßn de zua am Block zsammgfasst wern. Daduzua schreibt ma a Sequenz zwischn de Werta *Begin* und *End*.

As GOTO is zwar in da strukturiaden Programmierung ois a rechta Schmarrn vaschrian, weis in de Friazeitn vo da Programmierung zu recht uniabasichtliche Programme gfiad hod. S' is aba in Pascal ned verbotn. S' soi aba nua zum vorzeitign Valassn vo Schleifn oda Abkiazn vo Vazweigunga heagnumma wern, fois se dadurch recht umständliche Vazweigunga und Schleifn-Bedingunga vameidn lossn. Oiso wenns via'd Iabasichtlichkeit wos bringt.

## Prozedurale Programmierung
D' prozedurale Programmierung ko ma a ois Teilaspekt vo da strukturiaden Programmierung seng. S' gehd dodrum, aus'm Hauptprogramm zsammgherade Teile auszumlagern. Bsundas geeignet han Programmteile, de an vaschiedna Stell heagnumma wern. Anstatt do ollawei den gleichn Quelltext hizumkopiern schreibt ma a Funktion oda a Prozedur und ruaft de dann auf. De Schlüsslwerta dodafia hoaßn
* *function*, do gibts a Ergebnis, und ma ko den Nama vo dea Funktion in na Formel oda in am weidan Funktionsaufruf ois Variable heanemma. Bei Bedarf ko a Funktion aba a zusätzlich zum Ergebnis de iabagemna Variablen bearban.
* *procedure*, de hod koa direkts Ergebnis, ko bei Bedarf aba de iabagebna Variablen bearban.

Innerhoib vo na Prozedur oda Funktion derf ma weidane Prozedurn und Funktiona aufrufa. Sogar de eigne Prozedur bzw. Funktion. Des nend ma dann rekursive Programmierung.

A Grundlog vo da prozeduralen Programmierung is da Gedanke a schwierigs Problem in seine Teilprobleme zum zaleng. meglicherweis wern dann de Teilprobleme weida und weida zalegt. So lang, bis ma bei oafache Teilprobleme olangt, de dann mit am kurzn iabasichtlichn Quelltext g'löst wern. Beim Betrachtn vom Hauptprogramm werd ma dann ned vo de Teillösunga abglenkt, ma muaß ned im oanzln vasteh, wia de Prozeduren und Funktiona funktioniern, sondern nua, weachane Daten ma iabagibt, und welchs Ergebnis ma dawart.

## S' [[Servus-Woid-Programm]]

As Beispui-Programm *Servus-Woid* sigt im Original-Pascal so aus:


```pascal
program Servus (input, output);
 begin
     writeln('Servus Woid');
 end.
```


In aktuell vawendte Pascal-Versiona schreibt mas a so:


```pascal
program Servus;
 begin
     writeln('Servus Woid');
 end.
```