Modellierung und Programmierung

Ähnliche Dokumente
Grundlagen der Programmierung

Grundlagen der Programmierung

Einführung in die Programmierung Wintersemester 2011/12

Grundlagen der Programmierung

Einstieg in die Informatik mit Java

Programmieren in C (Übungsblatt 1)

Programmieren in C (Übungsblatt 1)

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java

C++ Teil Schleifen. Man kann bestimme Anweisungen in einem Programm mehrfach ausführen lassen. Dazu gibt es in C++ verschiedene Schleifen.

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

Schachtelung der 2. Variante (Bedingungs-Kaskade): if (B1) A1 else if (B2) A2 else if (B3) A3 else if (B4) A4 else A

Programmieren in C (Übungsblatt 1)

Schleifenanweisungen

Dr. Monika Meiler. Inhalt

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

Übersicht Programmablaufsteuerung

4. Einfache Programmstrukturen in C Einfache Programmstrukturen in C

Anweisungen und Kontrollstrukturen

3. Anweisungen und Kontrollstrukturen

Übung zur Vorlesung Programmieren in C

ModProg 15-16, Vorl. 5

FACHHOCHSCHULE AUGSBURG Hochschule für Technik, Wirtschaft und Gestaltung

C- Kurs 04 Anweisungen

Programmieren in C. Eine Einführung in die Programmiersprache C. Prof. Dr. Nikolaus Wulff

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

Anweisungen und Kontrollstrukturen

Fallunterscheidung: if-statement

Abschnitt 5. Grundlagen der funktionalen & imperativen Programmierung

Einführung in die Programmierung

Informatik für Ingenieure (InfIng)

Zeichendarstellung. Zeichen sind Zahlen (in C) Zeichen und switch

GI Vektoren

S. d. I.: Programieren in C Folie 4-1. im Gegensatz zu Pascal gibt es in C kein Schlüsselwort "then"

Einführung in die Programmierung II. 3. Kontrollstrukturen

C++ - Einführung in die Programmiersprache Schleifen

Programmiertechnik Kontrollstrukturen

Prof. Dr. Oliver Haase Karl Martin Kern Achim Bitzer. Programmiertechnik Kontrollstrukturen

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

4. Ablaufsteuerung (Kontrollstrukturen) 4.1 Anweisungen 4.2 Selektion (bedingte Anweisung) 4.3 Iteration 4.4 Flussdiagramm (Programmablaufplan)

Grundlagen der Programmierung

Grundlagen der Programmierung

Programmflusskontrolle

4.4 Imperative Algorithmen Prozeduren

Einführung in die Programmierung für Physiker. Die Programmiersprache C Kontrollstrukturen

4.2 Programmiersprache C

Einheit Datentypen in der Programmiersprache C Schwerpunkt: Elementare (arithmetische) Datentypen

Einführung in die C-Programmierung

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

Grundlagen der Programmierung Teil1 Einheit III Okt. 2010

Algorithmen zur Datenanalyse in C++

Primitive Datentypen, Eingaben, Kontrollstrukturen und Methodendeklaration

Programmiersprachen Einführung in C

BKTM - Programmieren leicht gemacht.

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

Schleifen: Immer wieder dasselbe tun

Übung zur Vorlesung Wissenschaftliches Rechnen Sommersemester 2012 Auffrischung zur Programmierung in C++, 1. Teil

2.5 Programmstrukturen Entscheidung / Alternative

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

Programmierung für Mathematiker

Übungspaket 14 Eindimensionale Arrays

Variablen, Konstanten und Datentypen

Datentypen printf und scanf. Programmieren in C Dr. Michael Zwick

Labor Software-Entwicklung 1

Tag 3 Repetitorium Informatik (Java)

Die Programmiersprache C Eine Einführung

Objektorientierte Programmierung

Operatoren (1) Operatoren (2)

2.4 Schleifen. Schleifen unterscheiden sich hinsichtlich des Zeitpunktes der Prüfung der Abbruchbedingung:

RO-Tutorien 3 / 6 / 12

4 Formelsammlung C/C++

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

Einleitung Entwicklung in C Hello-World! Konstrukte in C Zusammenfassung Literatur. Grundlagen von C. Jonas Gresens

Einführung Programmierpraktikum C Michael Zwick

Übungspaket 12 Der Datentyp char

Elementare Datentypen in C++

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

C-Grundlagen. zur Programmierung des MicroControllersystems MiCoWi

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

Kontrollstrukturen -- Schleifen und Wiederholungen

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

Modellierung und Programmierung

Übersicht. C Ein-/Ausgabe und Kontrollanweisungen. I/O-Funktionen aus stdio. printf() Ein-/Ausgabe. Kontrollanweisungen.

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

2. Programmierung in C

Programmierkurs C++ Lösungen zum Übungsblatt 3. Nils Eissfeldt und Jürgen Gräfe. 2. November Aufgabe 5

C# - Einführung in die Programmiersprache Bedingte Anweisungen und Schleifen

Unterlagen. CPP-Uebungen-08/

Vom Algorithmus zum Programm

Martin Unold INFORMATIK. Geoinformatik und Vermessung

Schleifen Datenfelder (Arrays) Verzweigungen

EINI LW/WiMa. Einführung in die Informatik für Naturwissenschaftler und Ingenieure Vorlesung 2 SWS WS 16/17

Tag 3 Repetitorium Informatik (Java)

Vorlesung Programmieren

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

Schleifen in C/C++/Java

Grundlagen der Programmiersprache C für Studierende der Naturwissenschaften

Arrays (Felder/Vektoren)

Transkript:

Modellierung und Programmierung Dr. Martin Riplinger 31.10.2012 IAM Institut für Angewandte Mathematik Eingabe durch den Benutzer: scanf dient u.a. zum Einlesen von Zahlen erfordert Präprozessordirektive: #include<stdio.h> Syntax: scanf(formatstring, Parameter); Formatstring: %[modifizierer]typ Parameter: & vor Variablennamen! Beispiel: #include <stdio.h> main() setvbuf(stdout, NULL, _IONBF, 0); /* Die Standard-Ausgabe wird nicht gepuffert */ double zahl; printf("bitte geben Sie eine Zahl ein: "); scanf("%lf", &zahl); printf("%lf zum Quadrat ist %lf\n", zahl, zahl*zahl);

Zeichen Zeichen (engl. character) werden intern wie (positive) ganzzahlige Werte behandelt, der Datentyp ist char. Variablen vom Typ char belegen im Speicher 1 Byte. Die standardisierte Zuordnung Zeichen Zahl erfolgt gemäß der ASCII- Tabelle. ASCII = American Standard Code for Information Interchange. Die Kodierung definiert 128 Zeichen, bestehend aus 33 nicht-druckbaren sowie 95 druckbaren: 0 Nullzeichen 1 32 Steuerzeichen 33 126 Ziffern, Buchstaben, Symbole, usw. Auszug: 37 % 65 A 97 a 124 38 & 66 B 98 b 167 $ 48 0 67 C 99 c 181 µ 49 1 92 \ 123 223 ß Es sind äquivalent char c = 'A'; char c = 65; char c = 0101; // oktal: 65 = 1*64 + 0*8 + 1*1 char c = 0x41; // hexadezimal: 65 = 4*16 + 1*1 Zeichen Ausgabe mittels printf: char c = 88; printf("88 interpretiert als Zeichen: %c\n",c); printf("88 interpretiert als integer: %d\n",c); Zeichenarithmetik char c = 'A'; int diff = 'C' - c; // diff = 2 c = 'B' + diff; // c = 68 printf("das zu c korrespondierende Zeichen ist %c\n",c); Einlesen von Zeichen via der Funktion getchar int getchar(void) Beispiel char c; c = getchar();

Anweisungsblöcke Folge von Anweisungen, die von geschweiften Klammern eingeschlossen sind ist syntaktisch äquivalent zu einer einzelnen Anweisung eine einzelne Anweisung bedarf keiner Klammer Anweisungsblöcke können geschachtelt sein Beispiele: printf("hallo Welt!\n"); printf("hallo Welt!\n"); printf("ich gehoere zum inneren.\n"); printf("ich bin im uebergeordneten!\n"); printf("hallo Welt!\n"); printf("ich gehoere zum inneren.\n"); if-anweisung if (Bedingung) Wenn-Dann oder if (Bedingung) _1 else _2 Wenn-Dann-Andernfalls Beispiel: Vorzeichenfunktion sign Mathematische Definition: sign(a) = +1, falls a > 0 0, falls a = 0 1, falls a < 0 int a; if (a>0) printf("sign(a) = +1\n"); else if (a==0) printf("sign(a) = 0\n"); else printf("sign(a) = -1\n");

Mehrfache Alternativen: else if Syntax if (Bedingung_1) _1 else if (Bedingung_2) _2. else if (Bedingung_N) _N else // optional // optional Beispiel if (a > 0) printf("sign(a) = +1\n"); else if (a == 0) printf("sign(a) = 0\n"); else // oder else if (a < 0) printf("sign(a) = -1\n"); Viele Alternativen: switch Syntax switch (Variable) case Wert_1: _1 break; case Wert_2: _2. case Wert_N: _N default: // optional // optional // optional Bei der Ausführung wird zu dem case label gesprungen, an der zum ersten Mal Variable und Wert übereinstimmt. Der gesamte folgende Code bis zum ersten break oder zum Ende des Blocks wird ausgeführt. Das schließt auch Code außerhalb des angesprungenen case labels ein. Als Wert im case label sind nur Konstanten zulässig.

Viele Alternativen: switch Beispiel unsigned char eingabe; printf("bitte Befehl eingeben: "); scanf("%c", &eingabe); switch (eingabe) case 'q': printf("programm wird beendet!\n"); break; case 'p': case 'P': printf("drucken...\n"); break; case 'h': printf("hilfe wird aufgerufen.\n"); break; default: printf("eingabe nicht erkannt!\n"); break; Schleifen Schleifen wiederholen einen so lange bis ein bestimmtes Abbruchkriterium erfüllt ist Die wichtigsten Schleifen in C sind for und while while-schleife oft verwendet, wenn die Anzahl der Wiederholungen nicht vorherbestimmt ist Syntax: while (Bedingung) wiederholt bis Bedingung "falsch", d.h. gleich 0 ist Autor ist selbst verantwortlich, dass das Abbruchkriterium irgendwann erfüllt ist Gefahr einer Endlosschleife! Variablen in Bedingung müssen deklariert und ggf. initialisiert werden = "Rumpf" der Schleife Beispiel: Programm soll eine natürliche Zahl N einlesen und die Summe 1 + 2 + 3 +... + N ausgeben.

Beispiel: while-schleife 1 #include<stdio.h> 2 3 main() 4 5 int i = 1, sum = 0, N; 6 7 printf("geben Sie eine natuerliche Zahl ein: N= "); 8 scanf("%d", &N); 9 10 while (i <= N) 11 12 13 i++; 14 15 16 printf("die Summe der ersten %d natuerlichen Zahlen ", N); 17 printf("betraegt %d\n", sum); 18 Beispiel: while-schleife Es sind äquivalent: int i = 1; while (i <= N) i++; int i = 0; while (i < N) i++; int i = 0; while (i++ < N) int i = 0; while (++i <= N) Kein guter Stil, da fehleranfällig!

do-while-schleife wird mindestens ein Mal ausgeführt beachte Semikolon am Ende do while (Bedingung); äquivalent zu: while (Bedingung) Beispiel int N; do printf("bitte geben Sie eine ganze Zahl zwischen 5 und 15 ein:"); scanf("%i", &N); while(n<5 N>15); for-schleife vermutlich die am häufigsten verwendete Schleifenvariante kommt zum Einsatz wenn das Update immer gleich ist Anzahl der Wiederholungen ist a priori bekannt Syntax: for (Initialisierung; Bedingung; Update) äquivalent zu: Initialisierung; while (Bedingung) Update; Beispiel: int i; for (i=1; i<=n; i++)

Stolperfallen Abbruchkriterium fehlerhaft: Zuweisung statt Vergleich for(i=1; i=n; i++) Endlosschleife! Leerer : Falsch platziertes Semikolon for(i=1; i<=n; i++); Unter- oder Überlauf unsigned i; for(i=n; i>=0; i--) unsigned char i; for(i=1; i<=n; i++) Endlosschleife für N>255! Schachtelung Beispiel: 1 #include <stdio.h> 2 3 main() 4 5 int i, j; 6 7 for(i=1; i<=5; i++) // aeussere Schleife 8 9 for(j=1; j<=5; j++) // innere Schleife 10 printf("%2d ", i*j); // Feldbreite 2 -> Zahlen rechtsbuendig 11 12 printf("\n"); // wieder aussen 13 14 Ausgabe: 1 2 3 4 5 2 4 6 8 10 3 6 9 12 15 4 8 12 16 20 5 10 15 20 25

Steuerung von Wiederholungen break beendet aktuelle Wiederholungsansweisung continue Rest der Schleife wird übersprungen und der nächste Schleifendurchlauf gestartet Merke: break und continue sollten sparsam eingesetzt werden, da sonst das Programm unübersichtlich wird. return beendet aktuelle Funktion (später mehr!) Absolut verpönt: goto bewirkt einen Sprung im Programm an eine zurvor definierte Stelle Merke: Anwendung von goto ist verboten und wird mit Fehlersuchen nicht unter 10 Jahren bestraft! Steuerung von Wiederholungen Beispiel: 1 #include <stdio.h> 2 3 main() 4 5 unsigned eingabe; 6 7 while(1) // ohne break eine Endlosschleife! 8 9 printf("bitte eine natuerliche Zahl kleiner als 100"); 10 printf(" eingeben: "); 11 scanf("%u", &eingabe); // Vorsicht: Unterlauf moeglich! 12 13 if (eingabe < 100) 14 break; 15 16 17 printf("die Zahl war %u.\n", eingabe); 18

Zufallszahlen Definition Ein Zufallsexperiment ist ein Experiment, dessen Ausgang nicht aus den vorherigen Ergebnissen vorausgesagt werden kann. Eine Zufallszahl ist eine Zahl, die sich aus dem Ergebnis eines Zufallsexperiments ableitet. Echte Zufallszahlen sind prinzipiell nur solche, die von wirklich zufälligen (physikalischen) Prozessen abgeleitet werden (Beispiel: radioaktiver Zerfall). Viele physikalische Prozesse sind zwar deterministisch (vorhersagbar), jedoch nicht praktisch berechenbar (Beispiel: Temperatur am 9. Dezember des Folgejahres) Pseudo-Zufall Definition Ein Experiment gilt als pseudo-zufällig, wenn sich sein Ergebnis zwar theoretisch voraussagen lässt, ohne Kenntnis der genauen Berechnungsvorschrift jedoch eine Prognose unmöglich ist. Zufallszahlen Computer kann nur Pseudo-Zufallszahlen erzeugen Ziel (zunächst): Gleichverteilte Pseudo-Zufallszahlen auf [0, 1[ oder auf [0, M[ erzeugt Gute Generatoren müssen eine Reihe von statistischen Tests bestehen Am weitesten verbreitet ist die lineare Kongruenzmethode: 1. Gib einen seed-wert n 0 vor (Benutzereingabe / anderweitige Berechnung) 2. Berechne für feste natürliche Zahlen a, b, M und k = 0, 1,...: n k+1 = (a n k + b) mod M Soll das Ergebnis eine Gleitkommazahl in [0, 1[ sein, berechne x k+1 = n k+1 /M. Die Qualität des Generators hängt entscheidend von den Parametern a, b und M ab!

Zufallszahlen Beispiel für einen schlechten Generator (aus Kirsch/Schmitt, Kap. 12): Wähle a = 2 16 + 3, b = 0, M = 2 31 Visualisierung: Fasse je 3 aufeinanderfolgende Zahlen zu Vektoren in R 3 zusammen. Ergebnis: Jeder Vektor liegt in einer von 15 festen Ebenen! Erzeugung von Zufallszahlen in C Präprozessordirektive #include <stdlib.h> notwendig Für int-zufallszahlen auf [0, INT_MAX]: Funktion rand() Seed-Wert für den rand-generator wird mit srand(seed) festgelegt. Dabei wird seed als unsigned int interpretiert. Für double-zufallszahlen auf [0, 1]: Funktion drand48() Seed-Wert für den drand48-generator wird mit srand48(seed) festgelegt. Dabei wird seed als long int interpretiert. Verwendung: unsigned seed = 884722; int zz; srand(seed); zz = rand(); printf("zz = %d\n", zz); long seed = 88472250439203531568; double zz; srand(seed); zz = drand48(); printf("zz = %f\n", zz);

Beispiel: (primitive) Simulation eines Aktienkurses 1 #include <stdio.h> 2 #include <stdlib.h> 3 4 main() 5 6 long seed; 7 int i, periode = 20; // Anzahl Tage 8 double wert, // aktueller Wert 9 max_schwankung = 10; // Tagesschwankung maximal 10 Euro 10 11 printf("bitte Seed-Wert eingeben: "); 12 scanf("%ld", &seed); 13 srand48(seed); 14 15 printf("wert der Aktie zu Beginn (Euro): "); 16 scanf("%lf", &wert); 17 18 for(i=0; i<periode; i++) 19 wert += 2 * (drand48() - 0.49) * max_schwankung; 20 // Skalierung auf [-0.99,1.01] 21 22 printf("wert nach 20 Tagen: %.2f Euro\n", wert); 23