22.08.2013 Aufrufe

Grundlagen der Informatik I “Programmierung”

Grundlagen der Informatik I “Programmierung”

Grundlagen der Informatik I “Programmierung”

MEHR ANZEIGEN
WENIGER ANZEIGEN

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

in Form eines Programms zu beschreiben, daß sie von einer Maschine (Computer) nach festen Regeln interpretiert<br />

werden können. Aufgrund <strong>der</strong> fortgeschrittenen Technik <strong>der</strong> Hardware aber auch <strong>der</strong> Software sind<br />

Fehler in <strong>der</strong> Interpretation von Programmen selten. Unentdeckte Hardwarefehler treten inzwischen extrem<br />

selten auf und die geprüften Übersetzer sind praktisch fehlerfrei. 2<br />

In den Grundzügen <strong>der</strong> <strong>Informatik</strong> spielen in den ersten beiden Semestern die höheren und die maschinennahen<br />

Programmiersprachen die Hauptrolle. Fast alle Programme am Markt sind in Sprachen aus diesen beiden<br />

Bereichen programmiert. Sie sind gekennzeichnet durch Kombinationen von Anweisungen und heißen daher<br />

auch imperative Programmiersprachen. Hinter <strong>der</strong> Kennzeichnung imperativ steckt die Idee, daß man einer<br />

Maschine eine Folge von Befehlen gibt, die sie dann <strong>der</strong> Reihe nach abarbeitet. Aber man muß auch beschreiben<br />

können, was eigentlich ein Programm leisten soll. Dazu brauchen wir deskriptive Sprachen, die aus <strong>der</strong> Logik<br />

stammen. Der Ausdruck deskriptiv sagt, daß man beschreibt, was ein System leisten soll, ohne anzugeben, wie<br />

diese Leistung erreicht werden kann. Für das Verständnis, wie ein Programm einer Programmiersprache zu<br />

interpretieren ist, werden wir eine funktionale Sprache verwenden. Funktionale Sprachen basieren auf <strong>der</strong> Idee,<br />

daß Programme aus ihren Eingaben eine Ausgabe berechnen, also im wesentlichen aus Funktionen bestehen,<br />

wie sie in <strong>der</strong> Mathematik üblich sind. Funktionale Sprachen sind daher am leichtesten zu verstehen.<br />

Im Prinzip kann man mit jedem dieser drei Sprachtypen dieselben Aufgaben bewältigen, jedoch mit unterschiedlicher<br />

Eleganz, da die Wahl <strong>der</strong> Programmiersprache auch die Sicht auf die Welt bestimmt, die man mit<br />

seinem Programm modelliert. Um ein Gefühl für die verschiedenen Konzepte dieser Sprachen zu bekommen,<br />

stellen wir sie am Beispiel des größten gemeinsamen Teilers einan<strong>der</strong> gegenüber. Dabei werden wir für jeden<br />

Sprachtyp das Programm für den größten gemeinsamen Teiler darstellen und dann anschließend besprechen,<br />

nach welchen Regeln eine Maschine dieses Programm interpretieren könnte.<br />

Das Wort Programm ist im allgemeinen Wortschatz mehrdeutig. In unseren Kontext bedeutet es ein formal<br />

beschriebenes Verfahren, das für beliebig vorgegebene Werte durchgeführt werden kann. Es ist also mehrfach<br />

durchführbar. Eine an<strong>der</strong>e Bedeutung hat das Wort Programm im Wort “Besuchsprogramm”. Ein Besuchsprogramm<br />

ist zwar auch eine Beschreibung eines Ablaufs aber eben nur für einen speziellen Gast.<br />

Aus <strong>der</strong> Schule ist <strong>der</strong> größte gemeinsame Teiler noch als eine Funktion ggt bekannt, die zwei natürliche<br />

Zahlen m,n ∈IN in eine natürliche Zahl t ∈IN abbildet. Um diese Funktion zu erklären, ist <strong>der</strong> Begriff “eine<br />

Zahl teilt eine an<strong>der</strong>e” notwendig. Der Begriff beschreibt eine Aussage zwischen zwei Zahlen, die entwe<strong>der</strong><br />

wahr o<strong>der</strong> falsch ist: Die Aussage “a teilt b” – wir schreiben dafür teilt(a,b) – ist genau dann wahr, wenn<br />

a einer Teiler von b ist. Formal ist die Aussage teilt eine Funktion mit zwei Argumenten aus IN und dem<br />

Resultat aus den beiden logischen Werten wahr und falsch, d.h. aus <strong>der</strong> Menge IB= {wahr,falsch}:<br />

teilt:IN×IN→IB Lesweise: IN mal IN wird in IB abgebildet<br />

mit <strong>der</strong> für uns wichtigen Eigenschaft, daß eine Zahl a immer ein Teiler von sich selbst ist und je<strong>der</strong> <strong>der</strong> beiden<br />

Faktoren von a*b Teiler von a*b ist:<br />

für alle a ∈IN gilt teilt(a,a) = wahr und teilt(a,a*b) = wahr<br />

In <strong>der</strong> Logik hat sich bei Aussagen, die stets wahr sein sollen, eingebürgert “= wahr” einfach wegzulassen,<br />

“für alle” durch das Symbol ∀ abzukürzen sowie “und” durch ∧. 3 Wir schreiben daher kürzer:<br />

2 Für die Praxis gilt daher: Der Computer irrt nicht! Fehlverhalten eines informationstechnischen Systems beruht i.a. an den<br />

Fehlern <strong>der</strong> Entwickler <strong>der</strong> Programme o<strong>der</strong> Bedienungsfehler <strong>der</strong> Anwen<strong>der</strong>. Vermeiden Sie daher stets die falschen Ausdrucksweisen:<br />

“Der Computer hat Mist gebaut”. Die korrekte Ausdrucksweise lautet: “Ich habe die Anleitung fehlinterpretiert” o<strong>der</strong><br />

“<strong>der</strong> Entwickler hat ein fehlerhaftes Produkt hergestellt”. Für die Vorlesung und das Praktikum haben wir aus didaktischen<br />

Gründen die noch verhältnismäßig junge Sprache Eiffel gewählt. Hierfür gibt es bis jetzt noch keinen geprüften Übersetzer!<br />

3 Weitere logische Symbole, die wir dem Prädikatenkalkül erster Ordnung entnehmen, sind ¬ für “nicht”, ∨ für “o<strong>der</strong>”,<br />

⇒ für “daraus folgt”, ⇔ für “genau dann, wenn” und ∃ für “es gibt”. Da die Relation “genau dann, wenn” besagt, daß<br />

<strong>der</strong> Wahrheitswert <strong>der</strong> entsprechenden Aussagen gleich ist, verwenden die meisten Programmiersprachen anstelle von ⇔ das<br />

Gleichheitssymbol =. Dies führt aber bei Aussagen wie (4=5) = (6=7) eher zu Verwirrung. Wir verwenden deshalb innerhalb<br />

von logischen Aussagen üblicherweise das Äquivalenzsymbol ⇔ und schreiben (4=5) ⇔ (6=7).<br />

Die genaue Beschreibung dies Prädikatenkalküls kommt im Kapitel 2.

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!