Praktikum Ingenieurinformatik. Termin 3. Fehlervermeidung, Fehlersuche, Schleifen (while, do-while, for)

Ähnliche Dokumente
Praktikum Ingenieurinformatik. Termin 2. Verzweigungen (if-else), printf und scanf, while-schleife

Praktikum Ingenieurinformatik. Termin 4. Funktionen, numerische Integration

Grundlagen der Programmierung

Grundlagen der Programmierung

Programmieren in C (Übungsblatt 1)

Programmieren in C (Übungsblatt 1)

Programmieren in C (Übungsblatt 1)

Schleifenanweisungen

Kapitel 4. Strukturierte Programmierung und Kontrollstrukturen

Aufgabe 1. Universität Duisburg-Essen Fachbereich Mathematik Dr. O. Rheinbach

Ingenieurinformatik Diplom-FA (Teil 2, C-Programmierung)

FH München, FB 03 FA WS 06/07. Ingenieurinformatik. Name Vorname Matrikelnummer Sem.Gr.: Hörsaal Platz

Grundlagen der Programmierung

Nachname:... Vorname:... MatrNr.:... Klausur PR2. Erstellen Sie eine Struktur für eine Komplexe Zahl mit den Elementen real und imag vom Typ double.

Musterprüfung Algorithmen & Datenstrukturen (WS 08/09)

Praktikum Ingenieurinformatik. Termin 1. Textdateien (ASCII, Unicode) Mein erstes C-Programm

Praktikum Ingenieurinformatik. Termin 6. Mehrdimensionale Felder, Kurvendarstellung mit Excel

1.8.5 Wiederholungen. Beispiele Unendliche Schleife: 1.8 Kontrollstrukturen 75. ( Bedingung ) AnweisungOderBlock. ja Anweisung. Bedingung erfüllt?

Praktikum Ingenieurinformatik. Termin 1. Textdateien (ASCII, Unicode) Mein erstes C-Programm

int i=1; //Integerzahl i anlegen und mit 1 initialisieren float wert; //Floatzahl deklarieren scanf( %f,&wert); //Wert über Tastatur eingeben

Praktikum Ingenieurinformatik. Termin 2. Mein erstes C-Programm

Kapitel 3. Mein erstes C-Programm

Grundlagen der Programmierung

JavaScript. Dies ist normales HTML. Hallo Welt! Dies ist JavaScript. Wieder normales HTML.

Programmiersprache 1 (C++) Prof. Dr. Stefan Enderle NTA Isny

C++ - Einführung in die Programmiersprache Fehler abfangen. Leibniz Universität IT Services Anja Aue

Kontrollstrukturen -- Schleifen und Wiederholungen

Vom Algorithmus zum Programm

1. Aufgabe (6 Punkte)

Anweisungen und Kontrollstrukturen

Klausur. 2. Aufgabe (3 Punkte) Ergänzen Sie die leeren Zellen derart, dass sich in einer Zeile die selben Zahlenwerte ergeben.

*** Viel Erfolg! ***

Übungspaket 14 Eindimensionale Arrays

2.5 Programmstrukturen Entscheidung / Alternative

Wiederholung C-Programmierung

Einstieg in die Informatik mit Java

Dr. Monika Meiler. Inhalt

Programmierung mit C Modularisierung von Programmen. Präprozessor-Anweisungen nutzen.

Anweisungen und Kontrollstrukturen

Java 8. Elmar Fuchs Grundlagen Programmierung. 1. Ausgabe, Oktober 2014 JAV8

Programmieren in C. Felder, Schleifen und Fließkommaarithmetik. Prof. Dr. Nikolaus Wulff

4.2 Gleitkommazahlen. Der Speicherbedarf (in Bits) ist üblicherweise. In vielen Anwendungen benötigt man gebrochene Werte. Physikalische Größen

Prüfung Algorithmen und Datenstrukturen, WS 2008/2009 (97 Punkte, 4 Seiten)

Kurzeinführung in C99

Praktikum Ingenieurinformatik. Termin 5. Felder, Kurvendarstellung mit Excel

Programmieren. Wie entsteht ein Programm

C-Programme kompilieren mit Visual Studio Express

4 Formelsammlung C/C++

Teil 5: Zeiger, Felder, Zeichenketten Gliederung

Schleifen: Immer wieder dasselbe tun

Einführung in MS Visual Studio 2008

Pointer und Arrays. INE1, Montag M. Thaler, Office TG208. ZHAW, M. Thaler, K. Rege, G.

Einstieg in die Informatik mit Java

Einführung in die Programmierung II. 3. Kontrollstrukturen

C++ Teil 2. Sven Groß. 16. Apr IGPM, RWTH Aachen. Sven Groß (IGPM, RWTH Aachen) C++ Teil Apr / 22

4. Einfache Programmstrukturen in C Einfache Programmstrukturen in C

Klausur: Informatik, am 11. Juli 2013 Gruppe: B Dirk Seeber, h_da, Fb Informatik. Nachname: Vorname: Matr.-Nr.: Punkte:

Lesen Sie alle Aufgabenstellungen sorgfältig durch, bevor Sie mit der Bearbeitung der ersten Aufgabe beginnen.

1 Aufgaben 1.1 Umgebungsvariable setzen: CLASSPATH

Probeklausur Programmieren in C Sommersemester 2007 Dipl. Biol. Franz Schenk 12. April 2007, Uhr Bearbeitungszeit: 105 Minuten

Übung zu Grundlagen der Betriebssysteme. 3. Übung

C- Kurs 04 Anweisungen

6. Grundlagen der Programmierung

Wintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf Seite 1 von 29

Fallunterscheidung: if-statement

Einführung in die Programmierung Wintersemester 2011/12

Übung 1 (Entwurf von Algorithmen) Beispiellösung

Excel VBA Fehler im Programm

Eine kleine Befehlssammlung für Java Teil1

Viel Erfolg bei der Bearbeitung der Aufgaben!

1.8 Kontrollstrukturen 73. default : ziffer = 0; if (ziffer > 0) { cout << "Ziffer = " << ziffer; else { cout << "keine römische Ziffer!

Informatik für Elektrotechnik und Informationstechnik

Welche Informatik-Kenntnisse bringen Sie mit?

3. Anweisungen und Kontrollstrukturen

Klausur Informatik WS 2012/13

Grundlagen. Die Komponenten eines C Programms. Das erste Programm

Microcontroller Praktikum SS2010 Dipl. Ing. R. Reisch

Arbeitsblätter für Algorithmierung und Strukturierung

Vom Testkonzept zu JUnit

5. Elementare Befehle und Struktogramme

BKTM - Programmieren leicht gemacht.

1 Aufgaben 1.1 Objektorientiert: ("extended-hamster") Sammel-Hamster

Primzahlen und Programmieren

FACHHOCHSCHULE AUGSBURG Hochschule für Technik, Wirtschaft und Gestaltung

Übungspaket 3 Mein erstes Programm: Fläche eines Rechtecks

Klausur: Grundlagen der Informatik I, am 06. Februar 2009 Gruppe: A Dirk Seeber, h_da, Fb Informatik. Nachname: Vorname: Matr.-Nr.

Einstieg in die Informatik mit Java

Übungspaket 17 Der gcc Compiler

2. Programmierung in C

Labor Software-Entwicklung 1

GI Vektoren

Es ist für die Lösung der Programmieraufgabe nicht nötig, den mathematischen Hintergrund zu verstehen, es kann aber beim Verständnis helfen.

Technische Informatik für Ingenieure WS 2010/2011 Musterlösung Übungsblatt Nr. 3

Unterlagen. CPP-Uebungen-08/

Teil I Debuggen mit gdb

Grundlagen der Programmentwicklung

Grundlagen der Programmierung

Hochschule Für Angewandte Wissenschaften FH München Sommersemester Thomas Kolarz. Folie 1.

Transkript:

Praktikum Ingenieurinformatik Termin 3 Fehlervermeidung, Fehlersuche, Schleifen (while, do-while, for) 1

1. Fehlervermeidung, Fehlersuche 2. Schleifen 3. Debugger 2

1.1. Fehlertypen Fehler bei der Problemanalyse Das Problem ist unvollständig oder falsch beschrieben. Spezialfälle werden nicht beachtet oder sind nicht beschrieben. Fehler im Lösungsalgorithmus Fehler beim Übersetzen Das Programm kann nicht übersetzt werden, Compiler zeigt Fehler an. Laufzeitfehler Das Programm kann ohne Fehler übersetzt werden. Nach dem Programmstart (also während der Laufzeit) treten Fehler auf. Um die ersten beiden Fehlertypen zu vermeiden, wendet man ein methodisches Vorgehen an: Strukturierte Programmierung UML Unified Modeling Language (Standardverfahren in der Industrie) Wikimedia Commons, Example of Façade design pattern in UML.png, CC BY-SA 3.0 3

1.2. Vermeidung von Fehlern im Programmcode Quelltext gut formatieren und vor dem Übersetzen nochmals durchlesen! for(i = 1; i < 100; i = i + 1) { k = k * k; while(i < 100) { k = k + i; i = i + 8; if(i < 5) i = i + 6; else i = i * 8; k = k + 56; } printf("k = %d\n", k); if(i < 7) { printf("i = %d\n", i); i = i + 3; } k = k - 1; } 3. Fehlervermeidung, Fehlersuche, Schleifen 4

1.3. Übung: Quelltext formatieren #include <stdio.h> int main() {int a, b, i; for(a = 1; a <= 12; a++) {switch(a) {case 2: b = 28; break; case 4: case 6: case 9: case 11: b = 30; break; default: b = 31; break;} printf("monat: %d\n", a); for(i = 1; i <= b; ++i) {printf("%2d ", i); if(i % 10 == 0) printf("\n");} printf("\n\n");} return 0;} Formatieren Sie das Programm, indem Sie in jeder Ebene (Verschachtelung) um jeweils vier Spalten einrücken. Finden Sie heraus, wozu das Programm dient. Das Programm ist schwer lesbar, weil nichtssagende Variablennamen verwendet werden. 3. Fehlervermeidung, Fehlersuche, Schleifen 5

1.4. Übersetzungs- oder Compilerfehler Der C-Quelltext kann aufgrund von Syntaxfehlern oder aus anderen Gründen (z. B. falsche oder keine Include-Datei angegeben) nicht übersetzt werden. Es wird kein ausführbares Programm erstellt. Typische Fehler: Semikolon vergessen Klammer vergessen/überzählig Hochkomma nicht abgeschlossen Groß-/Kleinschreibung Ausdruck falsch formuliert Schreibfehler Variable wird verwendet, wurde aber vorher nicht definiert Fehlermeldungen des Compilers: c:\temp\vorlesung\quelle.cpp(10): error C2143: Syntaxfehler: Es fehlt ";" vor "for" Der Fehler muss nicht genau dort sein, wo der Compiler ihn vermutet, es könnte sich z. B. auch um einen Folgefehler handeln. Nach der Fehlerbeseitigung muss der Quelltext erneut gespeichert und übersetzt werden. 6

1.5. Laufzeitfehler Der C-Quelltext kann ohne Fehler übersetzt werden, es wird ein ausführbares Programm erzeugt. Wenn dann bei der Ausführung des Programms Fehler auftreten, spricht man von Laufzeitfehlern (engl. runtime error). Typische Fehler: Programm stürzt ab wegen Division durch null oder mit einer Zugriffsverletzung (häufig: & bei scanf fehlt), Programm stürzt manchmal ab (z. B. nur bei bestimmten Eingaben), Programm hängt fest (z. B. Endlosschleife), Programm liefert immer/manchmal falsche Ergebnisse, Programm liefert ein falsches Ergebnis und man merkt es gar nicht oder es ist nicht offensichtlich (z. B. numerische Lösung einer DGL). 7

1.6. Typische Laufzeitfehler Endlosschleifen: while(i < 5); printf("i = %d\n", i); Fehler bei der Ein- und/oder Ausgabe: scanf("%f\n", &i); scanf("%d\n", &i); Schleife wird nicht durchlaufen : for(i = 0; i < 6; i = i + 1); { printf("i = %d\n", i); } Variable wird ohne vorherige Wert-Zuweisung verwendet: int i; printf("i = %d\n", i); Zuweisung in if-anweisung: if(i = 5) printf("bedingung ist erfüllt.\n"); Dezimalpunkt: x = 3,75; statt x = 3.75; (leere Anweisung) Tipp für die Prüfung: Checkliste mit weiteren typischen Fehlern erstellen und mitbringen! 8

1.7. Suche nach Laufzeitfehlern Quelltext (nochmals) genau studieren Alle Eingaben und Zwischenergebnisse zur Kontrolle mit printf ausgeben Programm mit Werten testen, bei denen das Ergebnis bekannt ist; falscher Wert kann Hinweis auf die Fehlerursache geben Spezial- und Grenzfälle analysieren und besonders testen Symbolische Konstanten verwenden, um die Ausgabe von Zwischenergebnissen zu steuern: Wenn alle Fehler beseitigt sind: #define DEBUG 1 #define DEBUG 0... if(debug == 1) printf("zeile 7: x = %d\n", x);... if(debug == 1) printf("programm ist in Zeile 25 angekommen.\n"); Genauen Programmablauf mit einem Debugger verfolgen 9

1.8. Übung: Suche nach Laufzeitfehlern (a) #include <stdio.h> int main(void) { int z1, z2, z3, summe; } /* Zahlen einlesen */ printf("erste Zahl: "); scanf("%d", &z1); printf("zweite Zahl: "); scanf("%f", &z2); /* Summe berechnen */ summe = z1 * z2; printf("z1 = %d, z2 = %d, ", z1, z2); printf("summe = %d\n", summe); if(z1 = 17) printf("zahlen sind gleich: z1 = %d\n", z1); else printf("zahlen sind ungleich: z1 = %d\n", z1); printf("z3 = %d\n", z3); return 0; Dieses Programm kann übersetzt und gestartet werden. Es enthält dennoch Fehler, die erst zur Laufzeit auffallen. Finden Sie die Fehler! 10

1.9. Übung: Suche nach Laufzeitfehlern (b) Schreiben Sie ein Programm, um folgende Summe zu berechnen: 1² + 2² + 3² + + 50² #include <stdio.h> int main(void) { int i, quadr, sum; i = 0; while(i < 50); { quadr = i * i; sum = sum + quadr; } printf("summe = %d\n", quadr); return 0; } Das korrekte Ergebnis lautet 42925. Suchen Sie die Fehler im abgebildeten Quelltext! 11

1.10. Testen von Programmen Ist ein Programm fertig, sollte man es unbedingt gründlich testen: Programm mit Werten testen, für die die Ergebnisse bekannt sind, verschiedene Spezialfälle und/oder Grenzwerte ausprobieren, beim Stromrechnungs-Programm einen Verbrauch von 249/250/251 kwh eingeben, negative Eingabewerte ebenfalls testen, Verhalten des Programms bei ungültigen Eingabewerten überprüfen, genauen Programmablauf mit einem Debugger verfolgen. Optimierung von Programmen: Rechenzeit (zum Beispiel beim Primzahlprogramm, s. u.), Speicherplatzbedarf, Aufwand zur Erstellung/Pflege des Programms. 12

1. Fehlervermeidung, Fehlersuche 2. Schleifen 3. Debugger 13

2.1. Arten von Schleifen Sie haben in der Vorlesung verschiedene Arten von Schleifen kennengelernt. Geben Sie zu den folgenden Struktogrammen den C-Quelltext an! Setze i auf den Wert 1 Solange i < 10 ist Ausgabe von i Inkrementiere i Ausgabe: Zahl von 1..10 eingeben Eingabe von i solange i < 1 oder i > 10 ist 3. Fehlervermeidung, Fehlersuche, Schleifen 14

2.2. Übungsaufgabe (Primzahlen) Schreiben Sie ein Programm zur Berechnung aller Primzahlen zwischen 1 und 10000! Eine Primzahl ist eine Zahl, die nur durch 1 und sich selbst ohne Rest teilbar ist. Die kleinste Primzahl ist 2 (die Zahl 1 gilt nicht als Primzahl). Erstellen Sie zunächst ein Struktogramm! Teilaufgaben: Äußere Schleife: Variable "n" läuft von 2 bis 10000 Innere Schleife: Variable "t" läuft von 2 bis n-1 Jeweils prüfen, ob n durch t teilbar ist. Falls ja, kann n keine Primzahl sein. Falls innere Schleife durchgelaufen ist, ohne einen Teiler zu finden, wird die Primzahl n ausgegeben. 3. Fehlervermeidung, Fehlersuche, Schleifen 15

1. Fehlervermeidung, Fehlersuche 2. Schleifen 3. Debugger 16

3.1. Debugger Der Debugger (bug = Fehler, Wanze) ist ein Hilfsmittel, um laufende Programme zu analysieren. Programme können an bestimmten Stellen (Breakpoints) angehalten oder zeilenweise abgearbeitet werden. Aktuelle Variablenwerte werden angezeigt und können sogar während der Laufzeit verändert werden. Mit dem Debugger können Sie: Fehler im Programm finden, sich von der Korrektheit eines Programms überzeugen, den Ablauf unbekannter Programme verstehen. 3. Fehlervermeidung, Fehlersuche, Schleifen 17

3.2. Debugger Arbeiten mit dem Debugger, ein Kochrezept : 1. Per Mausklick auf den grauen Rand (links neben der Zeilennummer) oder alternativ mit der Taste F9 wird ein Breakpoint an den Beginn des Hauptprogramms oder an den Beginn des zu untersuchenden Bereichs gesetzt. 2. Nun wird über den Menüpunkt Debuggen Debuggen oder alternativ mit der Taste F5 der Debugger gestartet. 3. Der Programmablauf wird am Breakpoint angehalten, die aktuelle Position im Programm wird durch einen kleinen gelben Pfeil angezeigt. 4. Wenn der Mauszeiger über eine Variable gehalten wird, dann wird der aktuelle Wert dieser Variablen in einem kleinen Fenster angezeigt. 5. Der weitere Programmablauf kann über die Tasten F10 (bis zur nächsten Zeile ausführen), F11 (in einen Funktionsaufruf hinein springen) und F5 (bis zum nächsten Breakpoint ausführen) gesteuert werden. 6. Es können auch mehrere Breakpoints gleichzeitig gesetzt werden. 7. Über den Menüpunkt Debuggen Debugger anhalten wird der Debugger wieder beendet. 18

3.3. Debugger Breakpoints Aktuelle Variablenwerte Aktuelle Position Bedienung: F5 Debugger starten F9 Breakpoint setzen F10/F11 Einzelschritt 19

3.4. Übungsaufgabe (Debugger) Starten Sie das Primzahlprogramm mit dem Debugger: Verfolgen Sie einige Schleifenabläufe Schritt für Schritt. Schauen Sie sich die aktuellen Werte der Variablen während des Programmablaufs an. Setzen Sie Breakpoints. Zum Beispiel direkt nach dem Ende der inneren Schleife, so dass der Debugger nach jedem Ablauf der inneren Schleife automatisch angehalten wird. Wechseln Sie die Art der Schleife (while, do-while, for) in Ihrem Programm und testen Sie die geänderte Version erneut mit dem Debugger. 3. Fehlervermeidung, Fehlersuche, Schleifen 20