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
Eine Problemstellung soll gelöst werden, und zwar mit Hilfe der Rechenleistung einer Maschine.
Beispiele:
A)
Problem
Zubereitung von Nudeln mit Tomatensauce
Zutaten
Ausführung
Nudeln, Tomatenmark, Tomaten, 1. Kochen der Nudeln in Zwiebeln, Salz, Gewürze , ...
soundsoviel gesalzenem Wasser
2. Sauce: 2.1 Schneide Zwiebeln klein
...
Berechne den Wert eines Parameter a , b, c
1. Vorgabe von a,b,c
Polynoms
p(x)=ax²+bx+c
Argument x
2. Eingabe von x
3. Berechnung von y=p(x)
4. Ausgabe von y
B) Problemstellung: Biologen wollen die Population einer Spezies, deren Entwicklung, Einflußgrößen etc.
untersuchen ­> Aufnahme geeigneter Meßdaten, Auswertung, Modellierung der Entwicklung der Population, Simulationen, Voraussagen
Vorgehensweise zur Lösung:
Merkmale des Problems erfassen
⇩
Formulierung eines Lösungsweges
⇩
Formalisieren des Lösungsweges (Algorithmus) ⇩
Implementieren in einem Computerprogramm Dieser Weg wird oftmals mehrfach durchlaufen: abhängig von den Ergebnissen sind Änderungen des Algorithmus oder des Modells bis hin zur Neuformulierung des Problems nötig.
Merkmale des Problems erfassen
­ Welche Daten sind erhältlich? ­ Was ist das gewünschte Ziel? Welche Ergebnisse ?
­ Welche Einflüsse sind wesentlich, welche vernachlässigbar?
­ Welche Randbedingungen sind zu beachten?
... im Beispiel: – Daten: Anzahl Tiere, nur zu diskreten Zeitpunkten meßbar, fehlerbehaftet
–
Ziel: statistische und graphische Datenauswertungen Modellierung der Entwicklung der Spezies, Anzahl als Funktion der Zeit Vorhersage durch Simulationen am Modell etc.
Formulierung eines Lösungsweges
­ Eingangsdaten: Meßdaten
­ Wahl eines geeigneten Modelltyps (Idealisierung)
➢
Bestimmung der Modellparameter aus den Messungen
­ Berechnung statistischer Größen (Formeln anwenden)
­ Wahl von Visualisierungstechniken ­ Simulationen durch Lösen der Modellgleichungen
➢ Wahl von Methoden zur Lösung der Modellgleichungen ­ weitere Analyse durch Auswertung der Computerergebnisse Formalisieren des Lösungsweges (Algorithmus) ­ prinzipielle Aufeinanderfolge der Schritte in der Sprache
grundsätzlicher algorithmischer Strukturen
+ Verifikation, d.h. Nachweis der Korrektheit Implementieren in einem Computerprogramm ­ Wahl einer geeigneten höheren Programmiersprache
­ Nutzung vorhandener Software, Funktionsbibliotheken
Was ist ein Algorithmus – aus Sicht der Informatik?
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: Diskretheit: die Vorschrift kann präzise auf formale Weise beschrieben werden
die Vorschrift besteht aus einer Folge von elementaren Einzelschritten
Vollständigkeit: Determiniertheit: es werden alle möglichen Fälle behandelt
bei gleichem Startzustand wird stets derselbe Endzustand erreicht
Haltebedingung: Endzustand nach endlich vielen Schritten mit Ergebnis
(dies ist eine mögliche, aufs Wesentliche beschränkte Definition, für eine vollständige 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
SELEKTION: Sequenz von Anweisungen, die nur unter bestimmten Bedingungen ●
ausgeführt werden
SCHLEIFE: Sequenz von Anweisungen, die mehrfach 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, matlab, ... :
„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
name.exe
2.1 Grundsätzliche Elemente eines C­Programms
Beispielprogramm: Hauptprogramm:
#include <stdio.h>
int main()
{
int i; /* i ist eine ganze Zahl */
i=1;
printf(''i=%d\n'',i);
return 0;
}
int main ()
{
...
return 0; }
wird durch die Funktion main gebildet, alle Befehle, die dort nacheinander abgearbeitet werden, sind in Klammern { ... } eingeschlossen = { Funktionsblock }
Rückgabewert steht vor dem Funktionsnamen und ist vom Typ int, Rückgabe des Wertes über return­Anweisung (hier Rückgabe von 0)
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,
kann sich über mehrere Zeilen erstrecken
// i ist eine ganze Zahl ist eine Kommentarzeile
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 ); die Zeichenkette zwischen “...“ wird auf dem Bildschirm ausgegeben anstelle des Platzhalters %d wird dabei der in i gespeicherte Wert
eingefügt.
Bedeutung von \n ist Zeilenumbruch z.B. printf(“Geo\ngraphie“);
Bildschirmausgabe: Geo
graphie
Präprozessor­Direktiven:
#include <stdio.h> ­ Funktion printf zur Bildschirmausgabe muß dem Compiler bekannt gemacht werden
­ sie ist in der C­Ein/Ausgabe­Funktionsbibliothek stdio.h vorhanden
­ durch die include­Direktive wird der Quelltext der „Headerdatei“
stdio.h durch den Präprozessor in das Progamm 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 eine ganze Zahl: Typbez. %d )
&i gibt die Speicheradresse der Variablen i im Arbeitsspeicher an;
dorthin wird der eingegebene Wert gespeichert.
Also allgemeiner Befehlsaufbau: scanf(“Format des Eingabewertes“, Speicheradresse der Variablen für Eingabewert);
mögliche Zahlentypen/Formate:
Zahlentyp Format
zeichen
int
short int %d
%d
%i
%i
long int %ld
Ganzzahlige Variablentypen
Zeichentyp Format
zeichen
float double
%f
%lf
%e exponentielle
Darstellung
%le exponentielle
Darstellung
Reelle Variablentypen
einfach bzw. doppelt genau
char
%c
Variablentyp für Einzelzeichen
2. Programmstrukturen
2.2.2. Selektion: ­ wesentliche Komponente vieler Algorithmen
­ Fallunterscheidung (Verzweigung) im Programm abhängig von Bedingungen
oder Auswahl aus einem Katalog (Menue) möglicher Aktionen Beispielfälle: ­ Reaktion des Programms abhängig von einer Eingabe, z.B. Wurzel aus einer Zahl
­ Reaktion abhängig vom Ergebnis einer Berechnung, z.B. Dreieck stumpfwinklig,
rechtwinklig, spitzwinklig ­ Auswertung von Fehlermeldungen
­ Auswahl einer Aktion, z.B. für eine Meßwertreihe x1,x2, ... , xn
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 (s. weiter unten) (z.B. in Fortan SELECT, in Pascal CASE OF)
if­Anweisung:
⇨ohne Alternative wenn Bedingung erfüllt ist
tue etwas (führe Aktionen aus)
(ende)
if (Bedingung) {
Anweisungen
}
●
Die Anweisungen im if­Rahmen werden genau dann ausgeführt, wenn die Bedingung WAHR ist, d.h. die Bedingung ist ungleich 0. ●
Die Bedingung ist nicht erfüllt, wenn sie FALSCH ist, d.h. die Bedingung hat den Wert 0. Was ist eine Bedingung ?
Eine Bedingung ist ein in der Programmiersprache sinnvoller Ausdruck. Was ist ein Ausdruck ?
In einer Programmiersprache ist dies eine Aufzählung von Zahlen, Zeichen und Operatoren,
die sich zu einem Wert auflösen lassen.
z.B. A­2*(b+1) ergeben sich aus dem Programmlauf zuvor für die Variablen A und b z.B. die Werte A=1 und b=0 so ist A­2*(b+1)=­1 .
⇨ mit Alternative wenn Bedingung erfüllt ist
tue dies (führe Aktionen aus)
ansonsten
tue das
(führe alternative Aktionen aus)
(ende)
if (Bedingung) {
Anweisungen
}
else
{
Anweisungen
}
wenn Bedingung_1 erfüllt ist
führe Aktion_1 aus
⇨ mehrere Fälle: sonst wenn Bedingung_2 erfüllt
führe Aktion_2 aus
sonst wenn Bedingung_3 erfüllt
führe Aktion_3 aus ...
sonst 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 (Entscheidung/Verzweigung)besteht mindestens aus der if­.Anweisung, die else­if­Zweige und der alternative else­Zweig sind optional.
2.2.2 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(x1)+f(x2)+...+f(xn)=∑ f(xi) o.ä. Berechnungen,
­ rekursive Funktionsberechnungen xk=f(xk­1)
­ Arbeit mit Feldern von Variablen Varianten: (in C)
a) Anzahl der Durchläufe ist festgelegt: for­Schleife b) Anzahl der Durchläufe ist durch Bedingung(en) gesteuert: while­Schleife
In anderen höheren Programmiersprachen ist die Syntax der Schleifenstrukturen ähnlich. for­Schleife: für k = Startwert , ... , Endwert (mit Schrittweite s)
führe Aktion(k) aus
(ende) for (Ausdruck1; Ausdruck 2; Ausdruck 3)
{
Anweisungen
}
hier bedeutet: Ausdruck 1 ... i.a. Zuweisung eines Startwertes an die Laufvariable (Initialisierung)
wird genau einmal, am Anfang, ausgeführt
Ausdruck 2 ... Abbruch­Bedingung (meist der Test, ob Laufvariable Endwert erreicht hat)
wird zu Beginn jedes Schleifendurchlaufes geprüft
Ausdruck 3 ... Aufdatierung der Laufvariablen („Weiterzählen“)
wird am Ende jedes Schleifendurchlaufes ausgeführt
while­Schleife:
zwei Varianten in C
⇨anfangsgeprüfte Schleife: solange Bedingung erfüllt ist
(ende)
C­Syntax:
tue etwas (führe Aktion aus)
while (Bedingung) {
Anweisungen
}
Die Bedingung ist dabei einfach wiederum 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)
C­Syntax:
solange Bedingung erfüllt ist
do {
Anweisungen
}
while (Bedingung);
(Achtung! Semikolon nicht vergessen!)
Sinnvoll, wenn mindestens ein Durchlauf gefordert ist.
Zweite Variante einer SELEKTION:
Auswahl
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)
(ende Fall 2)
trifft kein Fall zu: führe Aktion_alternativ aus
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 Schlüsselwort case
case + Konstante:
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)
Zugehörige Unterlagen
Herunterladen