530 likes | 1k Views
HWu ProgI-1 16.02.99 Folie 2. Wirtschaftsinformatik Programmieren I. Strukturierte Programmierung mit einer h?heren Programmiersprache (Sprache der 3. Generation, 3GL)Entwurf, Implementierung, Dokumentation, Test8 SWS im GrundstudiumSU, ?KolluoKlZulassungsvoraussetzungen f?r Klausur: TN, Test
E N D
1. Stand: 01.01.1999 Programmieren IStrukturierte ProgrammierungGrundlagen von C Fachhochschule HofFachbereich Informatik und Technik
Prof. Dr. Hartmut Wunderatsch
2. HWu ProgI-1 16.02.99 Folie 2 Wirtschaftsinformatik Programmieren I Strukturierte Programmierung mit einer höheren Programmiersprache (Sprache der 3. Generation, 3GL)
Entwurf, Implementierung, Dokumentation, Test
8 SWS im Grundstudium
SU, Ü
KolluoKl
Zulassungsvoraussetzungen für Klausur: TN, Testate
3. HWu ProgI-1 16.02.99 Folie 3 Programmieren I Programmieren I, 1. Sem.
2 SWS, C
Strukturierte Programmierung
Grundlagen prozeduraler Programmierung
Programmieren I, 2. Sem.
2 SWS, C
Fortgeschrittene prozedurale Programmiertechniken
Programmieren I, 4. Sem.
4 SWS, C++
Objektorientierte Programmierung
TN 80 %, je Semester 2 Testate in der Kleingruppe
4. HWu ProgI-1 16.02.99 Folie 4 Programmieren I Die höhere Programmiersprache C
Betriebssystem UNIX wurde damit programmiert (Kernighan & Ritchie)
alle Plattformen: DOS, WINx.x, WIN9x, NT, UNIX, ...
heute für die Programmierung aller DV-Verfahren einsetzbar
systemnahe
technische
betriebswirtschaftliche
5. HWu ProgI-1 16.02.99 Folie 5 Programmieren ILiteratur Prog I-1 und Prog I-2 Kernighan, Ritchie: Programmieren in C, mit dem C-Reference-Manual in deutscher Sprache; Hanser, München; 1990; ISBN 3-446-15497-3
Louis, Kuppinger: Borland C++ 4.5, Das Kompendium, Einführung, Arbeitsbuch, Nachschlagewerk; Markt & Technik, Buch und Software-Verlag GmbH, München; 1995; ISBN 3-87791-753-4
Dumke: Modernes Software Engineering, Eine Einführung; vieweg, Lehrbuch Informatik, Braunschweig/Wiesbaden; 1993; ISBN 3-528-05355-0
Sommerville: Software engineering 5th edition;Addison-Wesley, Harlow, England; 1996; ISBN 0-201-42765-6
6. HWu ProgI-1 16.02.99 Folie 6 Was ist ein Programm? John v. Neumann: Programm ist
Folge von Anweisungen,
die sequentiell ausgeführt werden, wobei
bedingte und unbedingte Sprünge möglich sind.
7. HWu ProgI-1 16.02.99 Folie 7 Übung 1 Erstellen Sie einen Programmablaufplan (PA) für die Eingabe zweier Zahlen, deren Addition und Ausgabe des Ergebnisses!
Erstellen Sie einen PA für die Eingabe dreier Zahlen und der Ermittlung und Ausgabe des Maximums!
Erstellen Sie einen PA für die Eingabe einer positiven Zahlenfolge und der Ermittlung und Ausgabe des Maximums dieser Zahlenfolge. Bei Eingabe einer negativen Zahl soll die Eingabe abgeschlossen sein und die Ausgabe des Maximums erfolgen.
Erstellen Sie einen PA für die Berechnung und Ausgabe des arithmetischen Mittels einer eingegebenen Zahlenfolge! Diskutieren Sie Möglichkeiten, wie eine Zahlenfolge abgeschlossen werden kann! Welche Nachteile haben diese Möglichkeiten? Finden Sie einen optimalen Zahlenfolgenabschluß!
Aufgabe 1:
Erläutern des Begriffs Variable
erläutern des Unterschieds zwischen einer mathematischen Gleichung und einer Zuweisung
Aufgabe 2:
Erläutern gut strukturierter und gut lesbarer PA am Beispiel unterschiedlicher Lösungen
Aufgabe 1:
Erläutern des Begriffs Variable
erläutern des Unterschieds zwischen einer mathematischen Gleichung und einer Zuweisung
Aufgabe 2:
Erläutern gut strukturierter und gut lesbarer PA am Beispiel unterschiedlicher Lösungen
8. HWu ProgI-1 16.02.99 Folie 8 Verflixtes GOTO Sprünge können zu "Spaghetti"-Programmen führen
Programmfehler proportional zur Anzahl der verwendeten GOTOs
schlechte Wartbarkeit solcher Programme
9. HWu ProgI-1 16.02.99 Folie 9 Das Struktur-Theorem Dijkstra 1972: Eigenschaften strukturierter Programme
hierarchische Programmorganisation
Beschränkung der Datenverfügbarkeit
zentrale Programmsteuerung
Beschränkung der Ablaufsteuerung auf drei Grundelemente
10. HWu ProgI-1 16.02.99 Folie 10 Spezialformen der Ablaufsteuerung
11. HWu ProgI-1 16.02.99 Folie 11 D-Strukturierte Programme kommen mit den Ablaufstrukturen
Sequenz,
der if-then-else-Selektion
und der while-Iteration aus.
Erweiterte D-Strukturierte Programme benützen zusätzlich
die allgemeine (mehrwertige) Selektion,
die if-then-Selektion
und die repeat-Iteration.
Erweiterte D-Strukturierte Programme sind GOTO-frei.
12. HWu ProgI-1 16.02.99 Folie 12 Praxis strukturierter Programmierung erlaubt sind alle Ablaufsteuerungen (a) - (j)
unterschiedliche Realisierung in den Programmiersprachen
Beschränkung auf diese bedeutet Verzicht auf GOTO
bedeutet aber auch Zunahme des Quellcodes
13. HWu ProgI-1 16.02.99 Folie 13 Beispiel eines nicht strukturierten Programms Anweisungsverlauf ja
1 -> 2 -> 3 -> 5 -> 7
nein nein
1 -> 2 -> 4 -> 6 -> 7
neue Anweisung 8 mit Verlauf
nein ja
1 -> 2 -> 4 -> 5 -> 8 -> 7
14. HWu ProgI-1 16.02.99 Folie 14 Rucksäcke in nicht strukturierten Programmen Strukturierung durch
Strukturerweiterung
oder Zustands-variablen-Methode
15. HWu ProgI-1 16.02.99 Folie 15 Strukturerweiterung durchschrittweise Verfeinerung
16. HWu ProgI-1 16.02.99 Folie 16 Zustandsvariablen
17. HWu ProgI-1 16.02.99 Folie 17 Übung 2 Ergänzen Sie das um die Anweisung 8 erweiterte Programm nach der Methode der Strukturerweiterung und nach der Zustandsvariablen-Methode!
Welche dieser beiden Methoden ist die bessere?
Stellen Sie die PAs der Übung 1 strukturiert dar!
18. HWu ProgI-1 16.02.99 Folie 18 Übung 3 Überführen Sie nebenstehenden PA in einen D-strukturierten!
Entwickeln Sie einen D-strukturierten PA zur Bestimmung der Nullstellen einer quadratischen Gleichung!(incl. Eingabe der Koeffizienten und Ausgabe der Ergebnisse)
19. HWu ProgI-1 16.02.99 Folie 19 D-Strukturierter Programmentwurf D-Strukturierte Programme können sprachunabhängig entworfen werden:
in Form von Pseudocode
oder in Form von Nassi/Shneiderman-Struktogrammen.
PAs werden nicht für den Programmentwurf verwendet.
20. HWu ProgI-1 16.02.99 Folie 20 D-Strukturierter Pseudocode Pseudocode der drei Grundstrukturen
Sequenz if-then-else while
A seq A if bed A iter while bed B B B C ... ... ... else A end
A end C
... A end
A ist ein Bezeichner, B, C, ... sind Handlungsvorschriften, bed ist eine Bedingung
21. HWu ProgI-1 16.02.99 Folie 21 Beispiel für Pseudocode Problemstellung
Auszugeben ist die Summe von N einzulesenden Zahlen, die zwischen den Werten L und R liegen
N, L, R sind vorher einzugeben
22. HWu ProgI-1 16.02.99 Folie 22 Erweiterter D-Strukturierter Pseudocode Erweiterter Pseudocode
Allg. select if-then repeatA select bed1 A if bed A iter repeat B B B ... ... ... or bed2 A end A end until bed C ... or bed3 ...A end Beim allgemeinen select werden die Anweisungen der ersten erfüllten Bedingung ausgeführt.Beim allgemeinen select werden die Anweisungen der ersten erfüllten Bedingung ausgeführt.
23. HWu ProgI-1 16.02.99 Folie 23 Übung 4 Schreiben Sie den Pseudocode zum D-strukturierten PA der Nullstellenaufgabe für quadratische Gleichungen!
Entwerfen Sie Pseudocode für die erweiterten Ablaufsteuerungen für strukturierte Programme!
24. HWu ProgI-1 16.02.99 Folie 24 Nassi/Shneiderman-Struktogramme grafische Möglichkeit des strukturierten ProgrammentwurfsSequenz if-then-else while
25. HWu ProgI-1 16.02.99 Folie 25 Nassi/Shneiderman-Struktogramme für erweiterte D-strukturierte ProgrammeAllg. Selektion break repeat
26. HWu ProgI-1 16.02.99 Folie 26 Beispiel für ein Struktogramm Problemstellung
Auszugeben ist die Summe von N einzulesenden Zahlen, die zwischen den Werten L und R liegen
N, L, R sind vorher einzugeben
27. HWu ProgI-1 16.02.99 Folie 27 Übung 5 Entwerfen Sie das Struktogramm zum D-strukturierten PA der Nullstellenaufgabe für quadratische Gleichungen!
Entwerfen Sie Struktogrammsymbole für die erweiterten Ablaufsteuerungen für strukturierte Programme!
28. HWu ProgI-1 16.02.99 Folie 28 Testat 1 Entwerfen Sie ein strukturiertes Programm, das folgende Aufgabe löst:
Eingegeben wird eine Zahlenfolge, die durch eine leere Eingabe abgeschlossen wird.
Berechnet und ausgegeben werden soll das arithmetische Mittel der Zahlenfolge, wobei ein Fehlermeldung erscheint, wenn es nicht berechnet werden kann.
Ebenfalls berechnet und ausgegeben werden soll das Minimum und das Maximum der Zahlenfolge, falls dies möglich ist.
Der strukturierte Programmentwurf ist abzugeben und zum Testat mitzubringen in Form von
Pseudocode
und als Struktogramm
auf DIN A4-Blättern mit Heftrand, Name und Matrikelnummer.
29. HWu ProgI-1 16.02.99 Folie 29 Übung 6 Einstieg in Borland C++ Anlegen eines Verzeichnisses PROGI für alle Übungenen zur Vorlesung Programmieren I
Anlegen eines Unterverzeichnisses PROGI-1 für alle Übungen zur Vorlesung Programmieren I im 1. Semester
Aufruf des C-Compilers mittels Start, Programme, Programmierung, Borland-C, Borland C++ 4.52
Aufruf des Menüs Projekt
Anlegen eines neuen Projekts im Unterverzeichnis PROGI-1 mit dem
Projektnamen “uebungen”
dem Zielnamen “ueb06" (später werden weitere Ziele mit den Namen “ueb07”, ... dazukommen)
dem Zieltyp "EasyWin", Klassenbibliothek demarkieren, Laufzeitbibliothek markieren
und den weiteren Optionen ".c-Knoten", wobei “.def” und “.rc” demarkiert werden müssen
Im Projektfenster den “ueb07.c”-Knoten mit Doppelklick aufrufen
Im “ueb07.c”-Fenster das Übungsprogramm der nächsten Folie eingeben
Mit dem Icon “Aktuelles Programm erzeugen und ausführen” den Compilier- und Linkvorgang für die Erstellung eines C-Programms starten
Falls keine Compilier- und Link-Fehler auftreten, erst den Vornamen, dann drei ganze Zahlen eingeben, wobei jede Eingabe mit der RET-Taste abgeschlossen wird
Falls Fehler auftreten, erscheinen in einem Meldungsfenster die einzelnen Fehlermeldungen
Über das Pull Down-Menü “Anzeige” kann das Projekt- und das Meldefenster alternativ geöffnet werden
30. HWu ProgI-1 16.02.99 Folie 30 ueb06.c
31. HWu ProgI-1 16.02.99 Folie 31 Aufgaben zur Übung 6 Programm fehlerfrei zur Ausführung bringen
Was passiert, wenn Sie Ihren Vornamen und die drei Zahlen in einer Zeile jeweils durch ein Leerzeichen getrennt eingeben und mit einem RET abschließen?
Was passiert, wenn Sie negative Zahlen eingeben und zwischen dem Vorzeichen und der Zahl ein Leerzeichen einfügen?
Was passiert, wenn Sie Dezimalzahlen eingeben?
Was passiert, wenn Sie statt einem Vornamen bei der ersten Eingabe auch noch den Familiennamen eingeben? Was passiert, wenn Sie eine leere Eingabe machen (nur RET drücken)?
Besorgen Sie sich mit der Hilfe-Funktion die Beschreibungen des scanf- und des printf-Statements! Lesen Sie sich auch jeweils den Absatz über den Rückgabewert durch!
32. HWu ProgI-1 16.02.99 Folie 32 Weitere Aufgaben zur Übung 6scanf- und printf-Rückgabewerte Ändern Sie Ihr Programm wie nebenstehend ab!
Überprüfen Sie die ausgegebenen Rückgabewerte!
Welche Bedeutung hat das “\n” in den printf-Statements? (Lassen Sie es einmal weg, verdoppeln Sie es!)
Ändern Sie das Programm so ab, daß statt drei jetzt vier Zahlen eingelesen werden und deren Summe ausgegeben wird!
Vergessen Sie nie, den Programmkopf fortzuschreiben!
Drucken Sie sich Ihre Programmquelle über den Menüpunkt “Datei, “Drucken” aus!
33. HWu ProgI-1 16.02.99 Folie 33 Programmierstandards Programmkopf
eingeschlossen in die Kommentarzeichen /* ...*/
Programm-Name
Programm-Kurzbeschreibung
Programm-Autor
Anlagedatum
Änderungsdatum (wird mit Namenszeichen fortgeschrieben)
Programmiersprache
Variablennamen
mnemotechnisch günstig wählen, nicht zu lang
Bsp. weite, laenge, mwst, proz,... statt a, b, c, x, y
Ausnahme: Schleifenzähler oder Hilfsvariblen mit lokaler Bedeutung, dort ist i, j, ... oder x1, x2, ... erlaubt
Einrückungen
Blockstruktur soll sichtbar werden, leichtere Lesbarkeit und Fehlersuche
zusammengehörige { und } in der gleichen Spalte, die Statements innerhalb eines Block sind gegenüber den Zeichen { und } eingerückt
34. HWu ProgI-1 16.02.99 Folie 34 Programmierstandards Dokumentation innerhalb des Programms
zur Verfolgung der Programmlogik
kurz halten
Anfang und Ende langer Blöcke kommentieren
Leerzeilen und Hervorhebungen im Programm
Leerzeilen zur Verdeutlichung der Programmstruktur
Grenzzeilen für wichtige Programmkomponenten
35. HWu ProgI-1 16.02.99 Folie 35 Compilieren und Linken Programmquelle (source) hat den Namen <x>.c und wird mit sog. include-Dateien (<y>.h, ...) compiliert
Programmobjekt (object) hat den Namen <x>.obj und wird mit weiteren Objekten <y.obj> und Bibliotheken (libraries) <z.lib> zu einem ablauffähigen Programm gebunden (linking)
ausführbares Programm (executable program) <x.exe> ist beliebig oft ausführbar (z. B. aus dem Dateimanager oder aus dem Explorer heraus durch Anklicken)
36. HWu ProgI-1 16.02.99 Folie 36 Variablen Die Definition von Variablen geschieht in der Form
<datentyp> <variablen-name> [, ...];<datentyp>::= [<modifier>] <datentyp>
<modifier>::= signed | unsigned | short | long
<datentyp>::= int | char | float | double | void
37. HWu ProgI-1 16.02.99 Folie 37 Namensregeln für Variablen Das erstes Zeichen muss ein Buchstabe oder "_" sein (Unterstrich, underscore).
Nachfolgende Zeichen sind entweder Buchstaben, Ziffern oder "_“.
Sonderzeichen sind nicht erlaubt.
Die Maxmimallänge = 250 Zeichen (über Option einstellbar, Standard = 32 Zeichen).
Eine Unterscheidung zwischen Groß- und Kleinbuchstaben findet statt.
Reservierte Wörter (Schlüsselwörter) sind als Variablennamen verboten.
38. HWu ProgI-1 16.02.99 Folie 38 %-Platzhalter in printf(), scanf() dienen der formatierten Aus- und Eingabe, allgemeiner Aufbau
% [Flag] [Breite] [.Präzision] [Size] Typ
39. HWu ProgI-1 16.02.99 Folie 39 Escape-Sequenzen in printf() für die Steuerung von Zeilenumbrüchen udgl.
Beispiele
40. HWu ProgI-1 16.02.99 Folie 40 Übung 7 Geben Sie nebenstehendes Programm ein und testen Sie es mit
den Eingaben x1 = x2 = x3 = x4 = 1
den für die jeweiligen Datentypen maximal zulässigen Werte für x1, x2, x3, x4
den für die jeweiligen Datentypen minimal zulässigen Werte für x1, x2, x3, x4
Ändern Sie das Programm so ab, dass bei den printf()-Anweisungen auch von FLAG und von BREITE Gebrauch gemacht wird
41. HWu ProgI-1 16.02.99 Folie 41 Übung 8 Geben Sie nebenstehendes Programm ein und testen Sie es mit
der Eingabe x1 = "a"
der Eingabe x1 = RET und x2 = "a"
der Eingabe x1 = "ab"
Wie arbeitet der Platzhalter %c in scanf()?
Ändern Sie das Programm so ab, dass bei den printf()-Anweisungen auch von FLAG und von BREITE Gebrauch gemacht wird
42. HWu ProgI-1 16.02.99 Folie 42 Übung 9 Schreiben Sie analog zu den beiden letzten Übungen ein Programm, das die Datentypen
float, double und long double verwendet
und testen Sie die Typzeichen f, e, E, g, G.
Stellen Sie fest, mit welchen Platzhaltern in scanf() die drei Datentypen eingelesen werden müssen und mit welchen Platzhaltern sie in printf() ausgegeben werden können. Fertigen Sie hierüber eine tabellarische Aufstellen!
Testen Sie die Auswirkungen der Platzhalter-Optionen FLAG, BREITE, PRÄZISION und SIZE anhand von positiven und negativen Eingaben!
43. HWu ProgI-1 16.02.99 Folie 43 Lösungsansatz Übung 9
44. HWu ProgI-1 16.02.99 Folie 44 Operatoren Arithmetische Operatoren
Inkrement-Operatoren
Zuweisungsoperatoren
sizeof-Operator
Bitmanipulationsoperatoren
Logische Operatoren
45. HWu ProgI-1 16.02.99 Folie 45 Operatoren
46. HWu ProgI-1 16.02.99 Folie 46 Prioritäten der Operatoren
47. HWu ProgI-1 16.02.99 Folie 47 Übung 10 Erstellen Sie eine Tabelle, in der Sie für die Datentypen char, int, long int, float und double die sinnvollen Platzhalter für das Einlesen und die Ausgabe eintragen.
Zeigen Sie anhand eines Programms den Unterschied zwischen einer Ganzzahl- und einer Gleitkommadivision. Unterscheiden Sie die Fälle
int = int / int
int = float / int
float = int /float
int = float / float
48. HWu ProgI-1 16.02.99 Folie 48 Übung 11 Zeigen Sie anhand eines Programms den Unterschied zwischen Post- und Präinkrement.
Zeigen Sie anhand eines Programms die Äquivalenz der Anweisungen
x = x * y
x *= y
Zeigen Sie anhand eines Programms die Anzahl der von den Datentypen char, int, long int, float und double benötigten Bytes.
Zeigen Sie anhand eines Programms den Unterschied zwischen bitweisem OR und XOR.
49. HWu ProgI-1 16.02.99 Folie 49 Konstanten Deklaration mit Hilfe der Präprozessor-Direktive#define <Konstantenbezeichner> <Konstante>
Beispiele#define STUNDE 60#define dutzend 12#define Name "BorlandC 4.5"
Vordefinition in einigen include-Dateienz. B. #define M_PI 3.14159265358979323846 in <math.h>#define FALSE 0#define TRUE 1 in <windows.h>
Deklaration unmittelbar hinter dem Programmkopf und vor den include-Anweisungen
50. HWu ProgI-1 16.02.99 Folie 50 Die if[-else]-Anweisung Syntaktischer Aufbauif(<bedingung>) { <anweisung>; ... }[else
{ <anweisung>; ... }]
51. HWu ProgI-1 16.02.99 Folie 51 Die while-Schleife Syntaktischer Aufbauwhile (<bedingung>) { <anweisung>; ... }
52. HWu ProgI-1 16.02.99 Folie 52 Übung 12 Entwerfen Sie eine Tabelle, die als Zeilen die verschiedenen Operatorenklassen und als Spalten die Datentypen char, int und float hat. Tragen Sie in die Zellen ein, ob die Operatoren der Operatorklasse auf den jeweiligen Datentyp sinnvoll anwendbar sind. Begründen Sie Ihre Entscheidung je mit einem C-Programm.
Schreiben Sie ein C-Programm zum Testat 1!
Schreiben Sie ein C-Programm zum Lösen einer beliebigen quadratischen Gleichung in den reellen Zahlen!
Schreiben Sie ein C-Programm, das einen ganzzahligen Kreisradius erfragt und den Kreisumfang und die Kreisfläche mit einer Genauigkeit von 5 Nachkommastellen ausgibt!
53. HWu ProgI-1 16.02.99 Folie 53 Testat 2 Entwerfen, implementieren und testen Sie ein Programm, das die Ampeln einer Kreuzung steuert. Durch Drücken der RET-Taste soll jeweils die nächste Lichtphase ausgelöst werden. Bei Eingabe eines ‘X’ soll das Programm terminieren. Alle anderen Eingaben müssen ignoriert werden. Die Startphase muß vorgebbar sein.
Das strukturierte Programm ist abzugeben und zum Testat in folgender Form mitzubringen :
der Programmentwurf als Struktogramm,
das implementierte und getestete Programm als Programmquelle,
beides auf DIN A4-Blättern, geheftet mit Heftrand, Name und Matrikelnummer.