Einführung /Grundbegriffe

Werbung
Einführung in die Informatik
1. Einleitung / Grundbegriffe
1.1 Was ist Informatik ?
Informatik ist eine Wissenschaft, die sich befaßt mit - Methoden der Informationsverarbeitung und deren Realisierung auf Computern (SOFTWARE)
-
der Konstruktion informationsverarbeitender Maschinen (HARDWARE )
Unterteilung der Informatik in Teilgebiete:
Die Teilgebiete kann man nicht immer scharf voneinander trennen
♦ Technische Informatik
Entwicklung (logischer Entwurf) von Rechnersystemen (Rechnernetzen) und zugehörigen peripheren Komponenten (Festplatten, Laufwerken, ...)
­ Forschung auf dem Gebiet der Hardware (Rechnerkomponenten ...)
-
♦ Theoretische Informatik
Bindeglied zwischen Mathematik und Informatik Besondere Arbeitsgebiete:
Algorithmen­ und Automatentheorie, Graphentheorie,
Fragen von Berechenbarkeit von Funktionen und Entscheidbarkeit von Problemen, Komplexitätsuntersuchungen (Aufwand bzgl. Laufzeit/Speicherplatz), Programmverifikation (Korrektheit des Ergebnisses), Künstliche Intelligenz,
abstrakte Datenstrukturen, formale Sprachen, Metasprachen
♦ Praktische Informatik
Entwicklung von Betriebssystemen, Entwicklungsumgebungen, Compilern, Assemblierern, Debuggern, Treibern ...
Entwicklung von Software als Brücke zwischen Hardware und Mensch
konkrete Umsetzung von Algorithmen auf dem Computer, d.h. Programmierung
♦ Angewandte Informatik
beschäftigt sich mit dem Einsatz von Computern in verschiedensten
Lebensbereichen, z.B. Textverarbeitung, Tabellenkalkulation,
Instrument zur Umsetzung numerischer Algorithmen in der Wissenschaft und Industrie
Nutzung von Systemen zur Messung, Steuerung, Regelung, Automatisierung von ganzen Betriebsabläufen, Einsatz von Robotertechnik
Fragen der Datensicherheit und des Datenschutzes,
Nutzung von und Anpassung an Benutzerschnittstellen (z.B. neue Eingabemöglichkeiten – touchscreen ...)
♦ Informatik und andere Wissenschaftsbereiche
z.B. Bio­Informatik (neuronale Netze), Wirtschaftsinformatik
spezifischer Einsatz in Medizin, Rechtswesen, Ingenieurwissenschaften, ...
1.2 Algorithmen und Programme
Bevor ein Computerprogramm geschrieben wird, gibt es ein Problem!
Dieses Problem soll gelöst werden, und zwar mit Hilfe der Rechenleistung einer Maschine.
Beispiele:
A)
Problem
Zutaten
Ausführung
Zubereitung von Nudeln mit Tomatensauce
Nudeln, Tomatenmark, Tomaten, Zwiebeln, Salz, Gewürze , ...
1. Kochen der Nudeln in soundsoviel gesalzenem Wasser
2. Sauce: 2.1 Schneide Zwiebeln klein
...
Berechne den Wert eines Polynoms
p(x)=ax²+bx+c
Parameter a , b, c
Argument x
1. Eingabe von x
2. Berechnung von y=p(x)
3. Ausgabe von y
B) Problemstellung: Biologen wollen die Population einer Spezies, deren Entwicklung, Einflußgrößen etc.
Untersuchen ­> Auswertung der Meßdaten, Voraussagen, Modellierung der Entwicklung der Population
Vorgehensweise zur Lösung:
Merkmale des Problems erfassen
⇩
Formulierung eines Lösungsweges
⇩
Formalisieren des Lösungsweges (Algorithmus) ⇩
Implementieren in einem Computerprogramm Merkmale des Problems erfassen
­ Eingabedaten, geforderte Ergebnisse
­ Ziel? Modellierung und Datenauswertung einer Spezies
(statistische und graphische Auswertungen), Vorhersage
­ Merkmale nur zu diskreten Zeitpunkten meßbar
­ Randbedingungen
Formulierung eines Lösungsweges
­ Eingangsdaten: Meßdaten
­ Wahl eines geeigneten Modelltyps (Idealisierungen)
­> Bestimmung von Modellparametern
­> Wahl geeigneter Methoden zur Lösung der Modellgleichungen ­> Vorhersagen, Analyse durch Simulationen
­ Berechnung statistischer Größen
­ Anwendung von Visualisierungstechniken ­ weitere Analyse von Eigenschaften durch Auswertung der Computerergebnisse
Formalisieren des Lösungsweges ­ prinzipielle Aufeinanderfolge der Schritte in der Sprache
(Algorithmus) grundsätzlicher algorithmischer Strukturen
Verifikation, d.h. Nachweis der Korrektheit Implementieren in einem ­ Wahl einer geeigneten höheren Programmiersprache
Computerprogramm ­ Nutzung vorhandener Software, Funktionsbibliotheken
Was ist ein Algorithmus – aus Sicht der Informatik?
(Eine mögliche, aufs Wesentliche beschränkte Definition)
Ein Algorithmus ist eine Vorschrift, die Eingabe­ in Ausgabedaten überführt, indem es die Handlungen und ihre Abfolge beschreibt, und die folgenden Eigenschaften genügt:
● Exaktheit: die Vorschrift kann präzise auf formale Weise beschrieben werden
● Diskretheit: die Vorschrift besteht aus einer Folge von elementaren Einzelschritten
● Vollständigkeit: es werden alle möglichen Fälle behandelt
● Determiniertheit: bei gleichem Startzustand wird stets derselbe Endzustand erreicht
● Haltebedingung: Endzustand nach endlich vielen Schritten mit Ergebnis
(s. Gödel, Turing ­> 1930)
Historie: Der Name „Algorithmus“ geht auf den Namen des arabischen Mathematikers Al Chwarismi zurück
(ca. 783­850). Er verfaßte um 825 im sog. Haus der Weisheit des Kalifen Harun al Raschid das Lehrbuch„Über das Rechnen mit indischen Ziffern“, dessen lateinische Übersetzung den Titel Algorismi de... („Das Werk des Al­gorismus über...“) trug. Daraus entstand die Bezeichnung „Algorithmus“.
Beispiel: Euklidischer Algorithmus
Grundsätzliche Strukturen eines Algorithmus:
● SEQUENZ: Folge von Anweisungen (Handlungen, Einzelschritten), die je genau einmal ausgeführt werden
● SCHLEIFE: Sequenz von Anweisungen, die mehrfach ausgeführt werden
● SELEKTION: Sequenz von Anweisungen, die nur unter bestimmten Bedingungen ausgeführt werden
Theorem von Böhm/Jacobi (sinngemäß):
Gibt es zur Lösung eines Problems einen Algorithmus, so läßt sich dieser unter alleiniger Verwendung der drei Grundstrukturen Sequenz, Schleife und Selektion darstellen.
 Konzept der höheren Programmiersprachen wie C, Fortran, Pascal, Delphi, ... :
„Strukturiertes Programmieren“
2. Erste Schritte in C
Umsetzung eines Algorithmus in ein Programm?
Algorithmus C­Programm als Text in „auf dem einem Editor eintippen
⇨
Papier“
⇨
name.c
Präprozessor +
Übersetzen durch Compiler in Maschinencode
name.obj
⇨
Verbinden mit anderen Programmen/Bibliotheken
zu ausführbarem Programm
2.1 Grundsätzliche Elemente eines C­Programms
Beispielprogramm: #include <stdio.h>
int main()
{
int i; /* i ist eine ganze Zahl */
i=1;
printf(''i=%d\n'',i);
return 0;
}
Hauptprogramm:
int main ()
{
...
return 0; }
wird durch die Funktion main gebildet
name.exe
alle Befehle, die dort nacheinander abgearbeitet werden, sind in Klammern { ... } eingeschlossen = Funktionsblock
Rückgabewert ist vom Typ int, Rückgabe mit return­Anweisung
Anweisungen in C:
int i; Deklaration einer Integer­Variablen mit Namen i, d.h. ein Block Speicherplatz wird im Arbeitsspeicher reserviert, in dem ganzzahlige Werte gespeichert werden können /* i ist eine ganze Zahl */ ist ein Kommentar, nur zum Verständnis des eigenen Programms, alternativ: // i ist eine ganze Zahl
i=1;
Zuweisung des Wertes 1 an die Variable i
= im Rechner: Speichere den Wert 1 auf dem
unter dem Namen i reservierten Speicherplatz
printf(“i=%d\n“, i );
Zeichenkette zwischen “...“ wird auf dem Bildschirm
ausgegeben anstelle des Platzhalters %d wird dabei der in i
gespeicherte Wert eingefügt.
Bedeutung von \n (Zeilenumbruch): z.B. printf(“Lehr\namt“);
Bildschirmausgabe: Lehr
amt
Präprozessor­Direktiven:
#include <stdio.h> Funktion printf zur Bildschirmausgabe muß dem Compiler bekannt gemacht werden
ist in der C­Ein/Ausgabe­Funktionsbibliothek stdio.h vorhanden
durch die include­Direktive wird der Quelltext dieser
Headerdatei durch den Präprozessor in das eigene Progamm
direkt hineingeschrieben
Eingabe über Tastatur: Funktion scanf
z.B. scanf(“%d“,&i);
fordert vom Nutzer die Eingabe eines ganzzahligen Wertes über Tastatur (Abschluß mit ENTER)
in “...“ steht, welcher Variablen(Zahlen)typ erwartet wird
(hier Platzhalter für eine ganze Zahl)
&i gibt die Speicheradresse der Variablen i im Arbeitsspeicher an,
auf die der eingegebene Wert gespeichert werden soll.
Also allgemein: scanf(“Format der Variablen“, Speicheradresse für Eingabewert);
mögliche Zahlentypen/Formate:
Zahlen­
typ Format
zeichen
int
short int %d
%d
%i
%i
long int %ld
Ganzzahlige Variablentypen
float double
%f
%lf
%e exponentielle
Darstellung
%le exponentielle
Darstellung
Reelle Variablentypen
einfach bzw. doppelt genau
2.2 Programmstrukturen
2.2.1 Schleifen (oder Zyklen): eine oder mehrere Anweisungen werden wiederholt durchlaufen
Beispielfälle: ­ wiederholte Eingabe von Daten gleichen Typs (z.B. Name, Adresse, Tel.­Nr.)
über Tastatur oder aus einer Datei
­ Aufsummierung von Termen s = f(x_1)+f(x_2)+...+f(x_n)=∑ f(x_i)
o.ä. Berechnungen, rekursive Funktionsberechnungen x_k=f(x_k­1)
­ Arbeit mit Feldern (s. später)
Varianten: a) Anzahl der Durchläufe ist festgelegt: for­Schleife (in C)
b) Anzahl der Durchläufe ist durch Bedingung(en) gesteuert: while­Schleife
in anderen Programmiersprachen ähnliche Syntax:
z.B. Fortran: a) DO­Schleife b) DO­Schleife mit IF­Bedingung
for­Schleife: für k=1,..., n führe Aktion(k) aus
(ende) for (Ausdruck1; Ausdruck 2; Ausdruck 3)
{
Anweisungen
}
ein Ausdruck ist in einer Programmiersprache eine Aufzählung von Zahlen, Zeichen und Operatoren, die sich zu einem Wert auflösen lassen
z.B. A­2*(b+1) (wenn z.B. A=1 und b=0.5 sind, hat der Ausdruck den Wert ­2 )
Ausdruck 1 ... Startwert für die Laufvariable, die die Durchläufe zählt
Ausdruck 2 ... Abbruchbedingung, häufig Vergleich mit festgelegter Anzahl von Durchläufen
Ausdruck 3 ... Aufdatierung der Laufvariablen („Weiterzählen“)
Beispiel: Summenberechnung
while­Schleife: zwei Varianten in C
⇨anfangsgeprüfte Schleife: solange Bedingung erfüllt ist
tue etwas (führe Aktion aus)
(ende)
while (Bedingung) {
Anweisungen
}
Die Bedingung ist dabei einfach irgendein sinnvoller Ausdruck. Sie ist genau dann erfüllt, wenn sie wahr ist, d.h. Programmtechnisch:
der Ausdruck hat einen Wert ungleich 0.
(Falsch bedeutet dann entsprechend, daß der Ausdruck den Wert = 0 hat)
⇨endgeprüfte Schleife: tue etwas (führe Aktion aus)
solange Bedingung erfüllt ist
do {
Anweisungen
}
while (Bedingung);
(Achtung! Semikolon nicht vergessen!)
Sinnvoll, wenn mindestens ein Durchlauf gefordert ist
2.2.2. Selektion:
­ wesentliche Komponente vieler Algorithmen
­ gewisse Anweisungen sollen nur unter bestimmten Bedingungen ausgeführt werden
­ Auswahl aus einem Katalog (Menue) möglicher Aktionen
Beispielfälle: ­ Reaktion des Programms abhängig von Eingabe
­ Reaktion abhängig vom Ergebnis einer Berechnung:
(z.B. Dreieck stumpfwinklig, rechtwinklig, spitzwinklig; Wurzel für
negative Zahlen nicht erklärt)
­ Auswertung von Fehlermeldungen
­ Auswahl einer Aktion, z.B. für eine Meßwertreihe x_1,x_2, ... , x_n
a) Mittelwert berechnen
b) maximalen Wert finden
c) alle Werte kleiner vorgegebener Schranke finden
zwei Varianten in C:
­ Entscheidung/bedingte Anweisung if­Anweisung
(in allen höheren Programmiersprachen Schlüsselwort if)
­ Auswahl switch­Anweisung (z.B. in Fortan SELECT)
if­Anweisung: ⇨ohne Alternative
wenn Bedingung erfüllt ist
tue dies (führe Aktion_1 aus)
(ende)
if (Bedingung) {
Anweisungen
}
Die Anweisungen innerhalb des if­Rahmens werden also nur höchstens einmal ausgeführt, und zwar dann, wenn die Bedingung wahr ist
(Ausdruck ungleich 0).
Die Bedingung ist dabei einfach wieder irgendein in der
Programmiersprache sinnvoller Ausdruck
⇨ mit Alternative
wenn Bedingung erfüllt ist
tue dies (führe Aktion_1 aus)
ansonsten
tue das (führe Aktion_2 aus)
(ende)
if (Bedingung) {
Anweisungen
}
else
{
Anweisungen
}
⇨ mehrere Fälle:
wenn Bedingung_1 erfüllt ist
führe Aktion_1 aus
ansonsten wenn Bedingung_2 erfüllt
führe Aktion_2 aus
ansonsten wenn Bedingung_3 erfüllt
führe Aktion_3 aus ...
ansonsten führe Aktion_alternativ aus (ende)
if (Bedingung_1) {
Anweisungen
}
else if(Bedingung_2)
{
Anweisungen
}
else if(Bedingung_3)
{
Anweisungen
}
...
else {
Anweisungen
}
zusammenfassend: Eine bedingte Anweisung besteht mindestens aus der if­.Anweisung, die else­if­Zweige und der alternative else­Zweig sind optional.
switch­Anweisung:
Sinnvolle Alternative zur if­else if­else­Anweisung im Falle, daß verschiedene zu
betrachtende Fälle durch Zuordnung ganzer Zahlen (Nummern) oder verschiedener
Zeichen charakterisierbar sind (z.B. Auswahl aus einem Menue).
Wähle für Berechnungsausdruck k
im Falle k=k_1: führe Aktion_1 aus
(ende Fall 1)
im Falle k=k_2: führe Aktion_2 aus
(ende Fall 2)
...
trifft kein Fall zu: führe Aktion_alternativ aus
(ende)
switch (Ausdruck) {
case k_1: Anweisungen
(break;)
case k_2: Anweisungen
(break;)
case k_3: Anweisungen
(break;)
default: Anweisungen
}
Arbeitsweise: ­ Ausdruck wird ausgewertet und muß ganze Zahl oder Zeichen liefern
­ Fälle (case) werden nacheinander abgefragt, d.h. der Wert des Ausdrucks wird mit der Konstanten k_1 dann mit der Konstanten k_2 usw.
verglichen
­ stimmt der Wert des Ausdrucks mit einer der Konstanten überein, wird
das Programm dort weitergeführt
­ stimmt der Wert des Ausdrucks mit keiner der Konstanten überein, wird
der default­Fall ausgeführt. Dieser ist optional! Ist also kein default­Zweig
vorhanden, und kein Fall trifft zu, wird das Programm nach der switch­
Anweisung fortgesetzt case + Konstante:
Schlüsselwort case
ist eine Marke für eine Programmzeile, d.h. ein Sprungziel bestehend aus dem Bezeichner „case“, einer Konstanten und dem „:“ .
Schlüsselwort default ist ebenfalls eine Marke.
Achtung! ­ In C wird nach dem Sprung zu einer Marke (zu einer markierten
Programmzeile ) das Programm dort fortgesetzt, d.h. alle folgenden Anweisungen werden durchlaufen.
­ Ist das bei einer Fallunterscheidung nicht gewünscht, muß der Programmfluß
mit der break­Anweisung
unterbrochen werden.
break: bewirkt, daß der innerste umgebende Block sofort verlassen wird, und danach
das Programm fortgesetzt wird. (nur in Schleifen und switch­Anweisungen erlaubt)
Herunterladen