Vom Algorithmus zum Programm

Ähnliche Dokumente
Ingenieurinformatik Diplom-FA (Teil 2, C-Programmierung)

Einführung in die Programmiersprache C

Kapitel 3. Mein erstes C-Programm

Fallunterscheidung: if-statement

Informatik Repetitorium SS Volker Jaedicke

Klausur in Programmieren

Programmierkurs Java

L6. Operatoren und Ausdrücke

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

Übungspaket 19 Programmieren eigener Funktionen

Übungen zur Vorlesung Computergrundlagen WS 2008/09 Fakultät Physik, Universität Stuttgart Jens Harting, Martin Hecht, Bibhu Biswal Blatt 14

Übung zu Grundlagen der Betriebssysteme. 3. Übung

PVL 3 - Roulette. (5 Punkte) Abgabe bis

Grundlagen. Die Komponenten eines C Programms. Das erste Programm

"Einführung in die Programmierung" Krefeld, den 24. September 2013

Entwurf von Algorithmen - Kontrollstrukturen

Zusammenfassung des Handzettels für Programmieren in C

5. Tutorium zu Programmieren

Primitive Datentypen

Anweisungsblöcke (dazu zählen auch Programme) werden in geschweifte Klammern eingeschlossen.

Hochschule Darmstadt Informatik-Praktikum (INF 1) WS 2014/2015 Wirtschaftsingenieur Bachelor 4. Aufgabe Datenstruktur, Dateieingabe und -ausgabe

IT- Handbuch für Fachinformatiker, 7. Auflage: Text- Lösungen Sascha Kersken

Kurzeinführung in C. Johannes J. Schneider

Steueranweisungen. Eike Schallehn Grundlagen der Informatik für Ingenieure Wintersemester 08/

Programmieren in C. Macros, Funktionen und modulare Programmstruktur. Prof. Dr. Nikolaus Wulff

Modellierung und Programmierung

M. Graefenhan Übungen zu C. Blatt 3. Musterlösung

Kurzeinführung in C++

Einführung in die C-Programmierung

Übersicht Programmablaufsteuerung

Angewandte Mathematik und Programmierung

1 Vom Problem zum Programm

Programmieren I. Kontrollstrukturen. Heusch 8 Ratz Institut für Angewandte Informatik

Hochschule Darmstadt Informatik-Praktikum (INF 1) WS 2015/2016 Wirtschaftsingenieur Bachelor 5. Aufgabe Datenstruktur, Dateieingabe und -ausgabe

Kontrollstrukturen, Pseudocode und Modulo-Rechnung

C Überlebenstraining

1. Übung zu "Numerik partieller Differentialgleichungen"

Programmieren in C. -- ALLE Programmiersprachen sind HÄSSLICH -- Deklaration: erst der Datentyp, dann der Variablenname. Semikolon am Ende.

Programmiersprachen Einführung in C. Unser erstes C-Programm. Unser erstes C-Programm. Unser erstes C-Programm. Unser erstes C-Programm

Klausur in Programmieren

Branch-and-Bound. Wir betrachten allgemein Probleme, deren Suchraum durch Bäume dargestellt werden kann. Innerhalb des Suchraums suchen wir

Die Programmiersprache C

Eine Klasse beschreibt Objekte mit gleichen Attributen und Methoden.

Schleifenprogrammierung in C/C++, Fortran und Pascal

Tutorium Rechnerorganisation

Algorithmische Kernsprache. Zuweisung, einfache und bedingte Anweisung, Blöcke, Schleifen, return, debugging.

Einführung in die Java- Programmierung

Praktikum zu Einführung in die Informatik für LogWiIngs und WiMas Wintersemester 2015/16. Vorbereitende Aufgaben

Kontrollstrukturen & Algorithmenentwicklung

Grundlagen C und C++ Einheit 03: Grundlagen in C++ Lorenz Schauer Lehrstuhl für Mobile und Verteilte Systeme

II. Grundlagen der Programmierung. 9. Datenstrukturen. Daten zusammenfassen. In Java (Forts.): In Java:

2 Einfache Rechnungen

Übungen zu C++ Kapitel 1

Klausur in Programmieren

Programmieren was ist das genau?

Propädeutikum zur Programmierung

Übung 9 - Lösungsvorschlag

Einführung in die Informatik für Hörer aller Fakultäten II. Andreas Podelski Stephan Diehl Uwe Waldmann

Z:\Informatik 3\Labor_GINF3\Labor_01-Sonstiges.txt

Computergrundlagen Programmieren in C

Programmieren in C. C Syntax Datentypen, Operatoren und Kontrollstrukturen. Prof. Dr. Nikolaus Wulff

Informatik. Studiengang Chemische Technologie. Michael Roth WS 2012/2013. Hochschule Darmstadt -Fachbereich Informatik-

C# Programmierung. Eine Einführung in das.net Framework. C# Programmierung - Tag 1: Grundlagen

Rechnerorganisation Tutorium Nr. 1

Java 7. Elmar Fuchs Grundlagen Programmierung. 1. Ausgabe, Dezember 2011 JAV7

Deklarationen in C. Prof. Dr. Margarita Esponda

Einführung in die Programmierung

C allgemein. C wurde unter und für Unix entwickelt. Vorläufer sind BCPL und B.

Fakultät Angewandte Informatik Lehrprofessur für Informatik

Einführung in die Programmierung (EPR)

Inhaltsverzeichnis. Grundbegriffe der C-Programmierung Für den HI-TECH C-Compiler

5. Unterprogrammtechnik/Module

1. Pflicht-Übung Num. Mathematik 2 SFT (SS02)

Einführung in die Programmierung für Wirtschaftsinformatik

L4. Erster Schritt zum Programmieren

Prinzipieller Grundaufbau eines einfachen C-Programmes

Zum Abschluss wird gezeigt, wie aus einem C++ Quell-Programm ein ausführbares Programm erzeugt wird. 1. Installation von NetBeans...

Schleifen und eindimensionale Felder

Einführung in die Programmiersprache C und in den C166-Compiler

Grundlegende Anweisungen in C++

Ingenieurinformatik Diplom-FA (C-Programmierung)

Inhalte der Vorlesung. 4. Der Scanner-Generator lex. 4. Der Scanner-Generator lex. 4.1 lex: Grundlagen

Einführung in die Programmierung Hello World, Typen & Variablen, Arithmetik. Arvid Terzibaschian

Name: Klausur Programmierkonzepte SS 2011

2. Semester, 2. Prüfung, Lösung

Einführung in die Programmierung

Definition: Die Sprache C++ ist die Menge aller korrekter C++-Programme. Theoretischer Aspekt. // mile2km.cpp: Umwandlung von Meilen in Kilometer

Übersicht. Schleifen. Schleifeninvarianten. Referenztypen, Wrapperklassen und API. 9. November 2009 CoMa I WS 08/09 1/15

Fachhochschule Augsburg. Ingenieurinformatik SS05 Seite 1/8

Dr. Monika Meiler. Inhalt

DAP2-Programmierpraktikum Einführung in C++ (Teil 1)

C/C++ Programmierung

Modul 122 VBA Scribt.docx

Hochschule Ravensburg-Weingarten Schriftliche Prüfung Programmieren Prof. Dr. M. Zeller

Dr. Monika Meiler. Inhalt

Kontrollstrukturen. Bedingter Ablauf: if. Bedingter Ablauf: if-else

Programmieren in C Einführung

Transkript:

Vom Algorithmus zum Programm Lernziele: Vertiefen der Kenntnisse über den Entwurf von Algorithmen und deren Übertragung in ein C- Programm Aufgabe 1: Pythagoreisches Tripel a) Entwickeln Sie einen Algorithmus, der die ersten pythagoreischen Tripel ermittelt und ausgibt. Es sollen alle pythagoreischen Tripel mit x; y; z <= 20 ausgeben werden. Hinweis: Drei natürliche Zahlen x, y und z bilden ein pythagoreisches Tripel, wenn x 2 + y 2 = z 2 gilt. Beispiele: 3, 4, 5 bilden ein pythagoreisches Tripel, da 3 2 + 4 2 = 9 + 16 = 25 = 5 2 gilt. 1, 2, 3 bilden kein pythagoreisches Tripel, da 1 2 + 2 2 = 1 + 4 = 5 3 2 = 9 gilt. 5, 12, 13 bilden ein pythagoreisches Tripel, da 5 2 + 12 2 = 25 + 144 = 169 = 13 2 gilt. 3, 4, 6 bilden kein pythagoreisches Tripel, da 3 2 + 4 2 = 9 + 16 =2 5 6 2 = 36 gilt. ALGORITHMUS pythagoreischestripel() Beschreibung Berechnung aller pythagoreischen Zahlentripel <= 20! Deklaration und Definition der lokalen Größen Übernahmeparameter: - - - Übergabeparameter: - - - Natürliche Zahlen: x, y, z Boolsche Variable: teilbar // optional Algorithmuskern Für x = 1 bis 20 SCHRITTWEITE 1 Für y = x+1 bis 20 SCHRITTWEITE 1 Für z = y+1 bis 20 SCHRITTWEITE 1 FALLS (x*x + y*y gleich z*z) DANN Drucke x "," y "," z";" ENDE FALLS ENDE FÜR ENDE FÜR S. 1 / 12

ENDE FÜR ENDE ALGORITHMUS b) Überführen Sie den Algorithmus in ein C- Programm. #include <stdio.h> void main(void) { /* Berechnet alle pythagoreischen Tripel <= 20 */ /* Daten*/ int x, y, z; /* Kern*/ for (x = 1; x <= 20; x++) { for (y = x+1; y <= 20; y++) { for (z = y+1; z <= 20; z++) { if (x * x + y * y == z * z) { printf("%2d, %2d, %2d\n", x, y, z); Aufgabe 2: Teilbarkeit von Zahlen durch ihre Ziffern a) Entwickeln Sie einen Algorithmus, der für alle dreistelligen Zahlen prüft, ob die jeweilige Zahl durch alle ihre Ziffern (ausgenommen der Ziffer 0) teilbar ist und diese Zahl jeweils auf dem Bildschirm ausgibt. Hinweis: Folgende Zahlen erfüllen bspw. obige Bedingung: 102 ist durch 1 und 2 teilbar. 216 ist durch 2, 1 und 6 teilbar. 384 ist durch 3, 8 und 4 teilbar. S. 2 / 12

ALGORITHMUS Ziffernteilbarkeit() Beschreibung Angabe aller 3 ziffrigen Zahlen, die durch ihre Ziffern teilbar sind! Deklaration und Definition der lokalen Größen Übernahmeparameter: - - - Übergabeparameter: - - - Natürliche Zahlen: zahl, ziffer, i Boolsche Variable: teilbar Algorithmuskern Für i=100 bis 999 SCHRITTWEITE 1 zahl = i; teilbar = WAHR; SOLANGE ((teilbar gleich WAHR) und (zahl > 0)) FÜHRE AUS ziffer = zahl MODULO 10; zahl = zahl / 10; FALLS ((ziffer ungleich 0) UND (i MODULO ziffer ungleich 0) DANN teilbar = 0; ENDE FALLS ENDE Solange FALLS (teilbar gleich WAHR) DANN Drucke i ENDE FALLS ENDE FÜR ENDE ALGORITHMUS S. 3 / 12

b) Überführen Sie den Algorithmus in ein C- Programm. #include <stdio.h> int main(void) { /* Ausgabe aller 3-stelligen Zahlen, die sich durch ihre Ziffern teilen lassen*/ /* Daten */ int i,zahl,ziffer; char teilbar = 1; /* Kern */ for (i = 100; i < 1000; i++) { zahl = i; teilbar = 1; /* Prüfung, ob jeweils letzte Ziffer die Zahl teilt*/ while (teilbar && zahl > 0) { ziffer = zahl % 10; //letzte Ziffer zahl = zahl / 10; // Vorbereitung der nächsten letzten Ziffer return 0; if (ziffer!= 0 && i % ziffer!= 0) //Teilbarkeit? teilbar = 0; if (teilbar) printf("%d\n", i); S. 4 / 12

Aufgabe 3: Kontrollstrukturen: Schleifen Geben Sei folgender Algorithmusschritt: Die Variable i wird auf 1 gesetzt SOLANGE i kleiner oder gleich 10 ist FÜHRE AUS Drucke den Wert i * i aus i wird um 1 erhöht ENDE SOLANGE Übersetzen Sie diesen Algorithmusschritt dreimal in C- Code. 1. Verwenden Sie eine while- Schleife 2. Verwenden Sie eine do-while- Schleife 3. Verwenden Sie eine for- Schleife #include <stdio.h> void main(void) { int i; printf("while-schleife:\n"); i = 1; while (i <= 10) { printf("i^2 = %d,\n", i * i); i = i + 1; printf("do-while-schleife:\n"); i = 1; do { printf("i^2 = %d,\n", i * i); i += 1; // i = i + 1; // oder: i++; while (i <= 10); printf("for-schleife:\n"); for (i = 1; i <= 10; i++) { printf("i^2 = %d,\n", i * i); S. 5 / 12

Aufgabe 4: Nicht ausgelastet? Geld wechseln Schreiben Sie ein C- Programm, das zu einem der zu einen gegebenen Kaufpreis ( 100 Euro) bei Bezahlung mit einem Hundertmarkschein das Wechselgeld bestimmt. Dabei soll nur die minimale Anzahl von Münzen bzw. Scheinen zurückgegeben werden. Hinweis: Siehe Aufgabenblatt 1 dort finden Sie auch verschiedene Versionen dieser Aufgabe (als Algorithmus). Aufgabe 5: Kosinusreihe a) Entwickeln Sie einen Algorithmus mit Namen kosinusreihe, der entsprechend der im Hinweis angegebenen Reihendarstellung zu einem einzulesenden reellen x und einem einzulesenden epsilon den reellen Funktionswert von cos(x) mit einer vorgegebenen Genauigkeit epsilon bestimmt und ausgibt. Hinweis: Beispiellösung: ALGORITHMUS Kosinusreihe() Deklaration und Definition der lokalen Größen reelle Zahl: x, epsilon, summe, nenner, zaehler, summand ganze Zahl: k Algorithmuskern Einlesen von x und epsilon k = 0 zaehler = 1 nenner = 1 summe = zaehler / nenner WIEDERHOLE k = k+1 zaehler = (- 1)* zaehler * x*x nenner = nenner * (2* k- 1) (2 *k) summand = zaehler / nenner summe = summe + summand SOLANGE summand > epsilon Ausgabe von summe ENDE ALGORITHMUS S. 6 / 12

b) Überführen Sie die Algorithmen in ein C- Programm. #include <stdio.h> #include <math.h> int main (void ) { /* Berechnung von cos(x)*/ /* Daten*/ double x, epsilon; double summe, summand, zaehler, nenner; int k; /* Kern*/ printf("bitte geben Sie einen Wert fuer x ein"); scanf("%lf", &x); printf("bitte geben Sie einen Wert fuer epsilon ein"); scanf("%lf", &epsilon); k = 0; zaehler = 1; nenner = 1; summe = zaehler / nenner; do{ k = k+1; zaehler = (-1) * zaehler *x*x; nenner = nenner * (2*k-1) * (2*k); summand = zaehler / nenner; summe = summe + summand; while (fabs(summand)>= epsilon) ; printf(" Der Wert von cos(%f)= %f mit der Genauigkeit %f ",x, summe, epsilon); return 0; S. 7 / 12

Aufgabe 5: Reihendarstellungen des natürlichen Logarithmus a) Entwickeln Sie einen Algorithmus mit Namen natlogarithmus, der für ein einzugebendes reelles z mit 0 < z <= 2 über beide Reihendarstellungen den Wert des natürlichen Logarithmus' mit einer Genauigkeit epsilon = 10-6 berechnet und ausgibt. Hinweis: S. 8 / 12

ALGORITHMUS natlogarithmus() Beschreibung Bestimmung der Funktion ln(z) durch die Reihe: Deklaration und Definition der lokalen Größen reelle Zahl: x1, x2, epsilon, z, summe1, summe2, summand1, summand2, zaehler1, faktor1, faktor2, c natürliche Zahl: nenner1, nenner2 Algorithmuskern Einlesen von z epsilon = 0.000001 x1= z - 1 x2 = z /* erste Summe */ FALLS ((x1>- 1) UND (x1<= 1) DANN // erlaubte Eingabewerte zaehler1 =x1 nenner1 = 1 summe1 = zaehler1/nenner1 WIEDERHOLE zaehler1 = zaehler1 * (- x1) nenner1 = nenner1 + 1 summand1 = zaehler1/nenner1 summe1 = summe1 + summand1 SOLANGE ( summand1 >= epsilon) SONST summe1 = 0.0 ENDE FALLS Drucke "Erstes Verfahren: ln("z") ist gleich" summe1 S. 9 / 12

/* zweite Summe */ FALLS (x2> 0) DANN // erlaubte Eingabewerte c = (x2-1) / (x2 + 1) nenner2 = 1 faktor2 = c summe2 = 2 * faktor2 WIEDERHOLE nenner2 = nenner2 + 2 faktor1 = 2.0/nenner faktor2 = faktor2 * c * c summand2 = faktor1 * faktor2 summe2 = summe2 + summand2 SOLANGE ( summand2 >= epsilon) SONST summe2 = 0.0 ENDE FALLS Drucke "Zweites Verfahren: ln("x2") ist gleich" summe2 ENDE ALGORITHMUS S. 10 / 12

b) Übersetzen Sie den Algorithmus in ein C- Programm #include <stdio.h> #include <math.h> int main (void ) { /* Varianten ln(z) zu berechnen */ /* Daten */ double z, epsilon, x1, x2,summe1, summe2, summand1, summand2; double zaehler1,faktor1, faktor2, c; unsigned nenner1, nenner2; /* Algorithmuskern */ printf(" Geben Sie bitte einen Wert ein\n"); scanf("%lf", &z); epsilon = 0.000001; x1 = z -1; x2 = z; /* erste Summe */ if ((x1 > -1) && (x1 <= 1)) { // erlaubte Eingabewerte zaehler1 =x1; nenner1 = 1; summe1 = zaehler1 / nenner1; do { zaehler1 = zaehler1 * (-x1); nenner1 = nenner1 + 1; summand1 = zaehler1/nenner1; summe1 = summe1 + summand1; while(fabs(summand1) >= epsilon); else { summe1 = 0.0; printf("1: ln(%f)= %f (Anzahl (%d))\n",z, summe1, nenner1-1 ); /* zweite Summe */ if (x2> 0){ // erlaubte Eingabewerte c = (x2-1) / (x2 + 1); nenner2 = 1; faktor2 = c; summe2 = 2 * faktor2; do{ nenner2 = nenner2 + 2; faktor1 = 2.0/nenner2; faktor2 = faktor2 * c * c; summand2 = faktor1 * faktor2; summe2 = summe2 + summand2; while (fabs(summand2) >= epsilon); else{ summe2 = 0.0; printf("2.: ln(%f)= %f(anzahl (%d))\n", z, summe2, (nenner2-1)/2); S. 11 / 12

Nicht ausgelastet? Modifizieren Sie das C- Programm so, dass das C- Programm testet, welche der beiden Reihen für ln(2) schneller konvergiert. S. 12 / 12