22.01.2014 Aufrufe

FH D FB 4 - Informatik

FH D FB 4 - Informatik

FH D FB 4 - Informatik

MEHR ANZEIGEN
WENIGER ANZEIGEN

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

<strong>FH</strong> D<br />

Lehr- und Forschungsgebiet <strong>Informatik</strong> I<br />

<strong>FB</strong> 4<br />

Laborversuch Nr. 3<br />

Kontrollstrukturen 2 (Schleifen)<br />

for while do<br />

while<br />

Lin. 10/2010<br />

- 35 -


3 Zyklische Struktur (Schleife)<br />

Die zyklische Struktur erlaubt es, Programmteile mehrfach in Abhängigkeit einer<br />

Bedingung zu durchlaufen. Erst dadurch lassen sich viele Probleme mit einem vertretbaren<br />

Programmieraufwand lösen. Die folgende Abbildung zeigt die graphischen<br />

Darstellungsformen für die zyklische Struktur.<br />

Programmablaufplan<br />

Struktogramm<br />

Schleifenanfang<br />

Schleifenbereich<br />

Anweisung(en)<br />

Anweisung(en)<br />

Schleifenende<br />

Abb. 3.1: Schleifendarstellungen<br />

Die zyklische Struktur kann mit den Sprachmitteln aus Verzweigung und Rücksprung<br />

realisiert werden. Darüber hinaus gibt es noch weitere Schleifen-Anweisungen. Diese<br />

können unterteilt werden in Anweisungen für Zählschleifen und Anweisungen für<br />

Bedingungsschleifen.<br />

3.1 Zählschleifen<br />

Für Zählschleifen wird die Konstruktion mit for gewählt. Diese hat die allgemeine<br />

Form:<br />

for (Ausdruck1; Bedingung; Ausdruck3)<br />

Anweisung;<br />

Hierbei wird über den Ausdruck1 der Zählvariablen ein Anfangswert zugewiesen; die<br />

Bedingung prüft den Wert der Laufvariablen; Ausdruck3 bewirkt eine Veränderung<br />

des Wertes um die Schrittweite. Solange die Bedingung erfüllt ist, wird die angegebene<br />

Anweisung wiederholt ausgeführt.<br />

Lin. 10/2010<br />

- 36 -


Das Bild zeigt die graphische Darstellung in Form eines Programmablaufplans und<br />

Struktogramms.<br />

for (a1;b;a3)<br />

for (a1;b;a3)<br />

Abb. 3.2: Zählschleife<br />

Bei Zählschleifen muss die Zählervariable verändert werden. Beim Inkrementieren<br />

(incrementare (lat.) = um einen bestimmten Wert erhöhen) oder Dekrementieren wird<br />

der Wert um einen festen Betrag (oftmals eins) erhöht bzw. verringert. Als Anweisung<br />

geschrieben:<br />

z = z + x; oder z = z - x;<br />

In C läßt sich dieser Ausdruck vereinfachen zu:<br />

z += x ; oder z -= x;<br />

In C läßt sich dieser Ausdruck für den Zuwachs um 1 weiter vereinfachen zu:<br />

z++; oder z--;<br />

3.2 Sprachmittel für Bedingungsschleifen<br />

Bei Bedingungsschleifen ist die Anzahl der Schleifendurchläufe nicht bekannt. Für die<br />

bedingungsgesteuerten Schleifen gibt es zwei verschiedene Arten der Realisierung.<br />

3.2.1 Bedingungsschleife mit Bedingungstest am Anfang<br />

Bei der Bedingungsschleife mit der Bedingung am Anfang wird ein Ausdruck auf true<br />

oder false überprüft, bevor die Schleifenanweisung durchlaufen wird. Damit hat diese<br />

Form der Bedingungsschleife einen abweisenden Charakter.<br />

Die Schleife mit while hat grundsätzlich folgendes Aussehen:<br />

while (Bedingung)<br />

Anweisung;<br />

Lin. 10/2010<br />

- 37 -


Solange der Ausdruck (Bedingung) hinter while den Wert true hat, wird die Anweisung<br />

wiederholt ausgeführt. Liefert der angegebene Ausdruck den Wert false, wird<br />

im Programm fortgefahren.<br />

Statt einer einzelnen Anweisung können auch mehrere Anweisungen stehen, die in<br />

geschweifte Klammern gesetzt werden (Block).<br />

while (Bedingung)<br />

Anweisung(en);<br />

Abb. 3.3: Die Bedingungsschleife mit Bedingungstest am Anfang<br />

3.2.2 Bedingungsschleife mit Bedingungstest am Ende<br />

Im Gegensatz zur einfachen while-Schleife wird die Anweisung zunächst ausgeführt,<br />

dann erst wird geprüft, ob die Schleife wiederholt werden soll. Die Schleife wird also<br />

auf jeden Fall mindestens einmal durchlaufen, da die Abfrage erst am Ende steht. Sie<br />

hat also keinen abweisenden Charakter.<br />

Die allgemeine Form lautet:<br />

do<br />

Anweisung;<br />

while (Bedingung);<br />

Anweisung(en);<br />

while (Bedingung)<br />

Abb. 3.4: Bedingungsgesteuerte Schleife mit Bedingungstest am Ende<br />

Lin. 10/2010<br />

- 38 -


3.3 Folgen und Reihen<br />

3.3.1 Definition<br />

Gegeben sei eine Folge (a n<br />

) = a 1<br />

, a 2<br />

, a 3<br />

, ...<br />

Dann nennt man die Folge (s n<br />

) = s 1<br />

, s 2<br />

, s 3<br />

, ...,<br />

deren Elemente s n<br />

nach der Vorschrift:<br />

s n<br />

= a 1<br />

+ a 2<br />

+ ... + a n<br />

gebildet werden, die Reihe (s n<br />

) der Folge (a n<br />

).<br />

Anstatt Reihe sagt man auch Teilsummenfolge.<br />

Erläuterung der Definition<br />

Gegeben sei eine Folge (a n<br />

) = n·2 = 2, 4, 6, 8, 10, 12, ...<br />

Nur bilden wir die Summen s n<br />

aus den ersten n-Gliedern<br />

dieser Folge:<br />

Die Summe s 1<br />

besteht nur aus einem Summanden (2)<br />

Die Summe s 2<br />

entsteht durch Addition der ersten zwei Glieder<br />

Die Summe s 3<br />

entsteht durch Addition der ersten drei Glieder<br />

Die Summe s 4<br />

entsteht durch Addition der ersten vier Glieder<br />

s 1<br />

= 2 = 2<br />

s 2<br />

= 2 + 4 = 6<br />

s 3<br />

= 2 + 4 + 6 = 12<br />

s 4<br />

= 2 + 4 + 6 + 8 = 20<br />

s 5<br />

= 2 + 4 + 6 + 8 +10 = 30<br />

usw.<br />

Dann kann man die Summen s n<br />

als eine neue Folge (s n<br />

)<br />

betrachten: (s n<br />

) = 2, 6, 12, 20, 30, ...<br />

Diese Folge hat nun einen besonderen Namen: Weil sie aus den Teilsummen<br />

gebildet wird, nennt man sie Teilsummenfolge oder Reihe.<br />

3.3.2 Reihenentwicklung<br />

Eine Reihenentwicklung ermöglicht in der Mathematik die Berechnung einer<br />

nicht direkt mit elementaren Operationen (Addition, Subtraktion, Multiplikation<br />

und Division) darstellbaren mathematischen Funktion durch eine endliche oder<br />

unendliche Summe von elementaren Ausdrücken. Diese so genannte Reihe kann<br />

in der Praxis oft auf endliche viele Glieder reduziert werden, wodurch eine Näherung<br />

der exakten Funktion entsteht, die umso einfacher ist, je weniger Glieder genommen<br />

wurden, aber umso besser ist, je mehr genommen wurden. Häufig lässt sich die dadurch<br />

entstandene Ungenauigkeit (also die Größe des Restgliedes) formelhaft beschreiben.<br />

Bei einer erzeugenden Funktion erscheinen die Glieder einer unendliche<br />

Folge als Koeffizienten der Reihenentwicklung.<br />

In der Mathematik tauchen zum Beispiel folgende Reihenentwicklungen auf:<br />

Taylorreihe (Potenzreihe),Maclaurin-Reihe, Fourierreihe, Falkultätsreihe.<br />

Lin. 10/2010<br />

- 39 -


3.4 Beispiele für Schleifen-Struktur<br />

3.4.1 Aufgabenstellung<br />

Als Beispiel soll die Summe der natürlichen Zahlen von 1 bis n ermittelt werden.<br />

3.4.2 Problemanalyse<br />

Es handelt sich hierbei um das Problem, Folgenelemente zu erzeugen und diese<br />

arithmetisch zu verknüpfen. Die Betrachtung gilt also grundsätzlich für die Problemklasse<br />

Folgen und Reihen.<br />

Eingabe:<br />

Ausgabe:<br />

natürliche Zahl n<br />

Summe der natürlichen Zahlen s<br />

3.4.3 Algorithmus<br />

Die Aufgabe läßt sich mathematisch wie folgt formulieren:<br />

n<br />

s = ∑ i mit i, n ∈|N<br />

i=1<br />

Diese Formulierung läßt sich leider so nicht direkt umsetzen. Um den Algorithmus zu<br />

finden, sieht man sich am besten die Teilsummen an:<br />

s 0<br />

= 0<br />

s 1<br />

= 0+1 = s 0<br />

+ 1 = s 0<br />

+ m 1<br />

s 2<br />

= 0+1+2 = s 1<br />

+ 2 = s 1<br />

+ m 2<br />

s 3<br />

= 0+1+2+ 3 = s 2<br />

+ 3 = s 2<br />

+ m 3<br />

.<br />

.<br />

.<br />

s n<br />

= 0+1+2+... + n = n n-1<br />

+ n = s n-1<br />

+ m n<br />

Aus der Aufstellung erkennt man folgende Zusammenhänge als Bildungsgesetz für<br />

alle entsprechenden Aufgaben:<br />

1. Festlegen der Anfangswerte von m und s<br />

2. m i<br />

= m i-1<br />

+ 1 (Bildungsgesetz für Folgenelement)<br />

3. s i<br />

= s i-1<br />

+ m i<br />

(Teilsummenbildung, da arithmetische Reihe)<br />

4. Dieser Ablauf hat solange zu erfolgen, bis m i<br />

= n ist (Endekriterium)<br />

Lin. 10/2010<br />

- 40 -


3.4.4 Graphische Darstellung des Programms "Summe der natürlichen Zahlen":<br />

Programmablaufplan<br />

Anfang<br />

Eingabe: n<br />

s=0<br />

for(m=1;m


3.4.6 Die Ausführung<br />

3.4.7 N-Fakultät<br />

Die Fakultät ist in der Mathematik eine Funktion, die als das Produkt aller natürlichen<br />

Zahlen kleiner oder gleich dieser Zahl N definiert ist. Sie wird durch ein dem Argument<br />

nachgestelltes Ausrufezeichen („!“) abgekürzt.<br />

Für alle natürlichen Zahlen n ist:<br />

n! = 1 * 2 * 3 * 4 * ...........* (n-1) * n ; außerdem ist: 0!=1.<br />

Das folgende Listing zeigt dieses Programm.<br />

/*Fakultät*/<br />

/*Autor: A.Linder, Oktober 2010*/<br />

#include <br />

void main()<br />

{<br />

int n, m;<br />

double p;<br />

printf("*************************************\n");<br />

printf("* N-Fakultaet *\n");<br />

printf("* Autor: Alfred Linder *\n");<br />

printf("*************************************\n\n");<br />

printf("Bitte geben Sie n an! ");<br />

scanf ("%i", &n);<br />

p = 1;<br />

for(m = 1; m


3.5 Aufgabe<br />

Erstellen Sie je ein Schleifen-Programm zur Berechnung der Reihe, die der Endziffer<br />

Ihrer Matrikelnummer entspricht (siehe Seite 44). Hierzu verwenden Sie bitte nur die<br />

elementare Arithmetik und Logik, keine mathematischen Funktionen.<br />

Das Endekriterium für Programm 1 ist die Anzahl der Schleifendurchläufe n. Hierzu<br />

wählen Sie Ihre Matrikelnummer (n=Matrikelnummer). Zum Nachweis der Korrektheit<br />

zeigen Sie das Ergebnis der ersten drei Teilsummen und das Ergebnis für<br />

n=Matrikelnummer.<br />

Das Endekriterium für Programm 2 ist die Vorgabe eines relativen Fehlers rf. Hierzu<br />

wählen Sie den Kehrwert Ihrer Matrikelnummer (rf=1/Matrikelnummer).<br />

Diese Aufgabe ist eine Hausaufgabe. Sie sollen diese Hausaufgabe selbstständig<br />

bearbeiten und lösen. Alle Lösungen, die vermuten lassen, dass die Bearbeitung<br />

nicht eigenständig durch Sie selbst erfolgte, werden mit 0 Punkten bewertet oder<br />

zumindest stark abgewertet. Diese Abwertung betrifft auch diejenigen Lösungen, die<br />

als Quelle für andere abgegebene Lösungen vermutet werden können.<br />

Das Programm einschließlich vollständiger Dokumentation (auf Papier, nicht auf Datenträger)<br />

ist spätestens am 8.11.2010, 8.00 Uhr im Raum S4, oder Postfach<br />

von A. Linder) abzugeben.<br />

Zu einer vollständigen Dokumentation (angelehnt an DIN 66230) gehören:<br />

1. Deckblatt mit Name, Matrikelnummer und Gruppe.<br />

2. Kurzbezeichnung des Programmes<br />

Diese Kurzbezeichnung soll beim Start des Programmes u.a. erscheinen.<br />

3. Aufgabe des Programms<br />

Kurze anwendungsbezogene Beschreibung der Aufgabe, die mit dem Programm<br />

gelöst wird (inkl. Beschreibung der Programmeingaben und –Ausgaben)<br />

4. Aufgabenlösung<br />

Kurze Beschreibung der zur Lösung der Aufgabe verwendeten Methoden,<br />

Theorien und Berechnungsverfahren (Algorithmen).<br />

5. Grafische Darstellung des Programmablaufs<br />

Struktogramm (DIN 66261) oder Programmablaufplan (DIN 66001).<br />

6. Programmausdruck<br />

"Listing" der fehlerfreien C-Quellprogramme mit Angabe des Autors als Kommentar<br />

im Quellcode.<br />

7. Testlauf<br />

Screenshots der Konsolfenster für einen vollständigen Programmablauf (beim<br />

Starten muss das Programm u.a. den Namen und die Matrikelnummer des Autors<br />

ausgeben).<br />

Lin. 10/2010<br />

- 43 -


Gegebene Reihen:<br />

Lin. 10/2010<br />

- 44 -

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!