Algorithmen & Programmierung. Algorithmen als Funktionen Funktionen in C

Ähnliche Dokumente
Algorithmen & Programmierung. Steuerstrukturen im Detail Selektion und Iteration

Algorithmen & Programmierung. Ausdrücke & Operatoren (1)

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

Grundlagen der Informatik I (Studiengang Medieninformatik)

Algorithmen & Programmierung. Logik

Modul Entscheidungsunterstützung in der Logistik. Einführung in die Programmierung mit C++ Übung 2

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

Algorithmen & Programmierung. Rekursive Funktionen (1)

FACHHOCHSCHULE AUGSBURG Hochschule für Technik, Wirtschaft und Gestaltung

Intensivübung zu Algorithmen und Datenstrukturen

Projekt 3 Variablen und Operatoren

2 Eine einfache Programmiersprache

Sprachkonstrukte. Einführung in Java. Folie 1 von Mai Ivo Kronenberg

Operatoren für elementare Datentypen Bedingte Anweisungen Schleifen. Operatoren für elementare Datentypen Bedingte Anweisungen Schleifen

1 Aufgaben 1.1 Umgebungsvariable setzen: CLASSPATH

2. Algorithmenbegriff

Kapitel 1: Informationsverarbeitung durch Programme

Tag 3 Repetitorium Informatik (Java)

Operatoren (1) Operatoren (2)

Java - Schleifen. Bedingung. wiederhole. Anweisung Anweisung Anweisung. Leibniz Universität IT Services Anja Aue

3. Grundanweisungen in Java

JAVA-Datentypen und deren Wertebereich

Kapitel 3: Variablen

Das diesem Dokument zugrundeliegende Vorhaben wurde mit Mitteln des Bundesministeriums für Bildung und Forschung unter dem Förderkennzeichen

Programmieren in C/C++ und MATLAB

Student: Alexander Carls Matrikelnummer: Aufgabe: Beschreibung des euklidischen Algorithmus Datum:

Institut für Programmierung und Reaktive Systeme. Java 2. Markus Reschke

Einführung in die Informatik. Processing Numbers. Motivation. Primitive Datentypen. Operatoren versus Methoden

Einführung in die Informatik. Processing Numbers

Algorithmen und ihre Programmierung

Informatik I Processing Numbers. Cyrill Stachniss Wolfram Burgard

Kapitel 4. Programmierkurs. Datentypen. Arten von Datentypen. Wiederholung Kapitel 4. Birgit Engels, Anna Schulze WS 07/08

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

Operatoren für elementare Datentypen Bedingte Anweisungen Schleifen. Programmieren I. Martin Schultheiß. Hochschule Darmstadt Wintersemester 2010/2011

Einführung in die Informatik Iterations

Inhalt. 1. Einführung in die Informatik. 2. Algorithmen Definition, Eigenschaften, Entwurf Darstellung von Algorithmen Beispiele.

einseitige Selektion zweiseitige Selektion

Algorithmen implementieren. Implementieren von Algorithmen

Einführung in die Informatik Iterationen

Einstieg in die Informatik mit Java

7. Einführung in C++ Programmieren / Algorithmen und Datenstrukturen 1 Prof. Dr. Bernhard Humm FB Informatik, Hochschule Darmstadt

Einführung in die Programmierung mit VBA

Einführung in die Informatik I

Überblick. 1 Vorbemerkungen. 2 Algorithmen. 3 Eigenschaften von Algorithmen. 4 Historischer Überblick. Einführung

Beispiel: Schriftliche Addition

Übung zur Vorlesung Berechenbarkeit und Komplexität

Modellierung und Programmierung 1

Unterlagen. CPP-Uebungen-08/

Tag 3 Repetitorium Informatik (Java)

C.3 Funktionen und Prozeduren

float: Fließkommazahl nach IEEE 754 Standard mit 32 bit

Algorithmen und Datenstrukturen 1. EINLEITUNG. Algorithmen und Datenstrukturen - Ma5hias Thimm 1

Terme und Gleichungen

Abschnitt 2: Daten und Algorithmen

Girls Day 2017 Programmierung

Ganzrationale Funktionen

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

Präzedenz von Operatoren

Grundlagen: Algorithmen und Datenstrukturen

Java I Vorlesung Imperatives Programmieren

System.out.println("TEXT");

3. Anweisungen und Kontrollstrukturen

Die Programmiersprache C

4.4 Imperative Algorithmen Prozeduren

Programmierung mit C Zeiger

Einführung in die Informatik I (autip)

Einstieg in die Informatik mit Java

Dr. Monika Meiler. Inhalt

7. Musterlösung zu Mathematik für Informatiker I, WS 2003/04

Operatoren und Ausdrücke

4.Grundsätzliche Programmentwicklungsmethoden

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

Schleifenanweisungen

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

Einführung in die Informatik 1

Einführung in die Programmierung II. 3. Kontrollstrukturen

Vorkurs Mathematik Dozent: Dipl.-Math. Karsten Runge.

(Aufgaben zu Wertzuweisungen siehe Vorlesungsbeilage S. 49)

Einstieg in die Informatik mit Java

Elementare Konzepte von

Kapitel III Ringe und Körper

C-Programmierung: Ausdrücke und Operatoren#Division.2F

Informatik I - Einstiegskurs

Methoden. Gerd Bohlender. Einstieg in die Informatik mit Java, Vorlesung vom

3.2 Datentypen und Methoden

Einführung in die Theoretische Informatik

Reelle Zahlen (R)

Programmiertechnik Kontrollstrukturen

2. Imperative Programmierung und Berechenbarkeit - Registermaschinen -

Programmieren I. Kapitel 5. Kontrollfluss

Einfache Rechenstrukturen und Kontrollfluß

Entwurf von Algorithmen - Kontrollstrukturen

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

4.3 Verifikation von Aussagen über Algorithmen

Transkript:

Algorithmen & Programmierung Algorithmen als Funktionen Funktionen in C

Algorithmus in der Informatik Algorithmen in der Informatik können nur Informationen verarbeiten, die als Daten bezeichnet werden. Objektmenge Die Objektmenge eines Algorithmus beschränkt sich auf eine Menge von Daten * Anfangszustand (Vorbedingung) Eine Teilmenge der Daten muss in einem definierten Anfangszustand vorliegen Eingabedaten Endzustand (Nachbedingung) Eine Teilmenge der Daten muss in dem gewünschten Endzustand vorliegen Ausgabedaten Algorithmus Folge von Operationen, die aus Eingabedaten bestimmte Ausgabedaten herleitet. Eingabedaten Algorithmus Ausgabedaten Der unscharfe Begriff Daten beinhaltet eigentlich schon das Wort Menge 49

Eingabe- und Ausgabedaten Wie erhalte ich die Eingabedaten? Algorithmen (der Informatik) können nur mit Daten arbeiten. Diese müssen bereitgestellt werden. Peripheriegeräte Die Bereitstellung erfolgt mit Geräten wie Tastatur, Maus, Touchscreen, Mikrofon,..., die Objekte oder Aktionen der Realwelt in eine Darstellung als Daten umrechnen. Präsentation der Ausgabedaten Ausgabedaten müssen ebenfalls in einer dem menschlichen Verständ- nis gerechten Form aufbereitet und präsentiert werden. Dies erfolgt wieder mit Hilfe von Peripheriegeräten, z.b. Bildschirmausgabe von Grafik und Text, Druck von Dokumenten, 3D-Druck, Generieren von Tönen,... 50

Vom Algorithmus zum Programm Algorithmus in der Informatik Folge von Operationen, die aus Eingabedaten bestimmte Ausgabedaten herleitet. Vorbedingung Welche Bedingung(en) müssen die Eingabedaten erfüllen? Nachbedingung Welche Bedingung(en) müssen die Ausgabedaten erfüllen? Operationen Wie leite ich aus den Eingabedaten die Ausgabedaten her? Fragen Eingabedaten Algorithmus Ausgabedaten Mit welcher Programmiersprache formulieren wir einen Algorithmus, damit ihn sein Prozessor (z.b. Computer, Tablet, Smartphone,...) verstehen und ausführen kann? Wie sehen die Steuerstrukturen Sequenz, Iteration und Selektion der gewählten Programmiersprache aus? Welche Grundoperationen bietet die gewählte Programmiersprache an? Wie definiere ich Eingabe- und Ausgabedaten und garantiere die Einhaltung der Vor- und Nachbedingungen? 51

Welche Programmiersprache? Lehrveranstaltung Algorithmen & Programmierung Programmiersprache C Lehrveranstaltung Datenstrukturen Programmiersprache C++ Warum? C und C++ sind flexibel, praxisorientiert, stark verbreitet C ist Basis für kompatible, aber weiterentwickelte Programmiersprachen z.b. C++ und Objektive C C-Sprachform und -inhalte bilden die Basis für aktuelle Programmiersprachen z.b. C#, Java, Swift 52

Welche Programmiersprache? Programmiersprache C / C++ C ist sehr hardwarenah und deshalb hocheffizient. Diese beiden Eigenschaften erlauben die Programmierung von oder? Werkzeugmaschinen Steuerelektronik eingebetteten Systemen Betriebssystemen Spielen Aber auch komplexe Anwendungen lassen sich (vor allem mit C++) aufgrund ausgereifter Werkzeuge komfortabel erstellen. Diese große Bandbreite ist mit den meisten anderen Programmiersprachen nicht möglich. 53

Vorteile & Nachteile von C Hohe Beliebtheit von C Wir haben gerade die hohe Flexibilität als besondere Eigenschaft der Programmiersprache C herausgestellt. Des Weiteren lässt C dem Programmierer sehr viele Freiheiten. Größter Vorteil von C C lässt dem Programmierer sehr viele Freiheiten. Größter Nachteil von C C lässt dem Programmierer sehr viele Freiheiten. 54

Funktionen (in C)

Mathematische Funktion Eine Funktion ordnet jedem Element x einer Definitionsmenge X genau ein Element y einer Zielmenge Y zu. Definition einer Funktion Nötig ist die Angabe von Definitionsmenge X Ergebnismenge Y Abbildungsvorschrift f(x) Beispiel y = f(x) = x 2 mit X = R und Y = R 56

Funktion vs. Algorithmus Algorithmus Folge von Operationen, die aus Eingabedaten bestimmte Ausgabedaten herleitet. Eine Funktion ordnet jedem Element x einer Definitionsmenge X genau ein Element y einer Zielmenge Y zu. Funktion als Algorithmus Funktionen lassen sich sehr gut durch Algorithmen ausdrücken wenn wir die Zuordnung auf eine beliebige Abbildung beschränken, so dass genau einem Element x X genau ein Element y Y zugeordnet wird Berechnung eines Funktionswertes. Dann korrespondieren die Eingabedaten zu einem beliebigen Element x X die Ausgabedaten zu einem beliebigen Element y Y Ausgabe = f(eingabe) der Algorithmus zu der Abbildungsvorschrift, die einem x X genau ein y Y zuordnet. Diese Sichtweise repräsentiert auch die sequentielle Verarbeitung eines Algorithmus sehr gut. 57

Funktion vs. Algorithmus Ausdrucksmächtigkeit von Funktionen Definitions- und Zielmenge einer Funktion haben oft eine unendliche Kardinalität (z.b. Z, R). Abhilfe bei Algorithmen Um eine Menge M mit unendlicher Elementanzahl im begrenzten Speichers des Prozessors korrekt repräsentieren zu können, generieren wir eine endliche Teilmenge von M. 58

Mathematische Funktionen in C Wunsch Wir wollen die Funktion y = f(x) = x 2 mit X = Z und Y = Z mit Hilfe von C realisieren. Datentyp Wertemengen werden in C als Datentyp bezeichnet Einschränkung der Definitions- und Zielmengen Zur Menge der ganzen Zahlen korrespondiert in C der Datentyp Integer (int). Er beschränkt die ganzen Zahlen nach oben und unten. Sein Wertebereich erstreckt sich etwa von 2 10 9 bis 2 10 9. 59

Grundoperationen von C Rechenoperationen für Integer-Zahlen (Operatoren) Addition + Subtraktion Multiplikation * Division / Ganzzahlige Division. Falls Nachkommastellen auftreten, werden diese abgeschnitten, aber nicht gerundet. Modulo % Rest der ganzzahligen Division 60

Grundoperationen von C Variablen Um beliebige Elemente aus der Definitions- oder der Zielmenge auswählen zu können, benötigen wir Variablen (wie auch in der Mathematik). Variablen stehen auch in C nicht automatisch zur Verfügung, sondern müssen definiert werden. Die Variablendefinition ist eine Grundoperation von C. Definition von Variablen beinhaltet das Festlegen des Datentyps und die Benennung der Variablen, z.b. Definition einer Integervariablen mit Namen x: int x Achtung Nach der Definition einer Variablen ist ihr Wert unbestimmt. Sie dürfen niemals annehmen, dass dieser Wert 0 ist Gefährliche Fehlerquelle! 61

Grundoperationen von C Zuweisung Um einer Variablen einen Wert zuordnen zu können, gibt es eine weitere Grundoperation der Programmiersprache C, die Zuweisung. Die Zuweisung erfolgt mit Hilfe des Operators = Was kann einer Variablen zugewiesen werden? ein beliebiges Element ihres Datentyps - ein so genannter konstanter Wert, z.b. x = 5 der Wert einer anderen Variablen, z.b. y = x das Ergebnis einer Ausdrucksberechnung ( nächste Folie) Variablendefinition mit Zuweisung Die Grundoperationen Variablendefinition und Zuweisung können miteinander kombiniert werden, d.h. dass eine Variable bei ihrer Definition gleichzeitig mit einem Wert initialisiert werden kann. Beispiel: int x = 5 62

Ausdrücke in C Elementare Bestandteile Ausdrücke bestehen aus einfachen Werten und Variablen, die durch die Operatoren der Grundrechenarten verknüpft werden. Ausdrücke können geklammert werden, um die Berechnungsreihenfolge vorzugeben, ansonsten gilt die übliche Punkt- vor Strichrechnung. Ausdrücke werden direkt berechnet und das Ergebnis der Berechnung kann ebenfalls einer Variablen zugewiesen werden. Beispiele y = x 3 Der Integer-Variablen y wird des Ergebnis der Berechnung des Ausdrucks x 3 zugewiesen y = (5 + 3) * x Zuerst wird die Klammer ausgewertet und danach mit x multipliziert 63

Kommentare in C Zweck Kommentare sind keine Anweisungen sondern dienen lediglich zur Dokumentation eines Programmes. Einzeilige Kommentare werden durch // eingeleitet und enden automatisch am Zeilenende Mehrzeilige Kommentare werden durch /* eingeleitet und enden mit */ Achtung Mehrzeilige Kommentare können nicht geschachtelt werden. 64

Steuerstruktur Sequenz in C Aufzählung von Operationen / Anweisungen Eine Folge von Operationen realisiert man in C, indem die einzelnen Anweisungen mit Hilfe eines Semikolons voneinander getrennt werden und die Folge von geschweiften Klammern begrenzt wird. Beispiel Sequenz aus drei bzw. vier Anweisungen: { // Beginn der Sequenz int x = 3; // Definition und Initialisierung einer Variablen x int y; // Definition einer Variablen y y = x + 5; // Zuweisung des Ergebnisses der Ausdrucksberechnung an y } // Ende der Sequenz 65

Steuerstruktur Sequenz in C Bedeutung der Sequenz Eine Sequenz wird als eine logische Einzeloperation betrachtet und kann in übergeordneten Steuerstrukturen wie eine Einzelanweisung verwendet werden. Block Eine Sequenz bzw. die Folge von Einzeloperationen zwischen einer öffnenden und einer schließenden geschweiften Klammer wird auch als Block bezeichnet. Achtung Ausschließlich das Semikolon trennt zwei C-Anweisungen voneinander, aber nicht der Beginn einer neuen Zeile! 66

Definition math. Funktionen in C Aufgabe Wir wollen eine beliebige mathematische Funktion f in der Programmiersprache C realisieren. Eine Funktion f wird beschrieben durch ihre Definitionsmenge, ihre Zielmenge eine Abbildungsvorschrift C-Funktion Das Konzept der Programmiersprache C, das es erlaubt f in C realisieren zu können wird auch als Funktion bezeichnet. Im Folgenden kann der Begriff Funktion sowohl mathematische als auch C-Funktionen meinen. Die Bedeutung erschließt sich i.d.r. aus dem Kontext. 67

Definition math. Funktionen in C Umsetzung in fünf Schritten 1. Beschreibung der Zielmenge der Funktion Angabe des korrespondierenden Datentyps 2. Benennung der Funktion (Mathematische Funktionen können mehr oder weniger beliebige Namen aufweisen, dies gilt auch für C-Funktionen) 3. Beschreibung der Definitionsmenge der Funktion Definition einer Variablen des korrespondierenden Datentyps 4. Umsetzung der Abbildungsvorschrift der Funktion Algorithmierung der Abbildungsvorschrift in C 5. Kennzeichnung des in 4. berechneten Werts als Funktionswert der Funktion 68

Beispiel - Funktionskopf Schritte 1-3 Umsetzung von y = f(x) = x 2 mit X = Z und Y = Z 1 Beschreibung der Zielmenge Angabe des korrespondierenden Datentyps Die Funktion soll laut Aufgabenstellung auf ganzen Zahlen definiert sein, d.h. der entsprechende C- Datentyp wäre int 2 Benennung der Funktion Wir wollen die C-Funktion ebenfalls f nennen 3 Beschreibung der Definitionsmenge Definition einer Variablen des korrespondierenden Datentyps Laut Aufgabenstellung soll die Funktion in den Bereich der ganzen Zahlen abbilden, d.h. dass die Variable vom Integer-Datentyp sein muss: int x Das resultierende Konstrukt heißt Funktionskopf: int f(int x) 69

Beispiel - Funktionsrumpf 4 5 Schritte 4 und 5 Umsetzung der Abbildungsvorschrift Algorithmierung der Abbildungsvorschrift in C Kennzeichnung des in 4. berechneten Werts als Funktionswert der Funktion Umsetzung von y = f(x) = x 2 mit X = Z und Y = Z Der Algorithmus zum Berechnen des Funktionswerts von x benötigt eine Hilfsvariable zum Aufnehmen des Berechnungsergebnisses: int y; y = x * x; Die Kennzeichnung des ermittelten Funktionswertes geschieht mit Hilfe der C-Grundoperation return: return y; Die Operationen der Schritte 4 und 5 stellen eine Sequenz dar und werden deshalb von geschweiften Klammern { } eingeschlossen. Der resultierende Block heißt Funktionsrumpf und wird an den Funktionskopf der Schritte 1-3 angehängt. 70

Beispiel f(x)=x 2 als C-Funktion Bezeichnung der Funktion Definition einer Variable x vom Definitionsdatentyp Zieldatentyp Blockbeginn - Eine Funktion ist eine Sequenz von Operationen. Definition einer funktionsinternen Variable zur Aufnahme des Berechnungsergebnisses. int f(int x) { int y; y = x * x; Quadrieren des Funktionsargumentes x und Zuweisung des Ergebnisses an y } return y; Blockende Die Variable y ist der Funktionswert der Funktion 71

Betragsfunktion Wunsch Wir wollen eine weitere C-Funktion implementieren, die Bildung des Betrages einer ganzen Zahl. Mathematische Definition Betrag einer ganzen Zahl: x = " $ # %$ x x x < 0 sonst x! Analyse der Betragsdefinition Wenn wir uns die mathematische Definition anschauen, stellen wir fest, dass diese Funktion ihre Berechnungsvorschrift in Abhängigkeit von einer Bedingung auswählt (selektiert) Konsequenz Wir benötigen die Steuerstruktur Selektion, um die Betragsfunktion in C realisieren zu können. 72

Steuerstruktur Selektion in C if ( Bedingung ) // Wenn die Bedingung erfüllt ist, Anweisung1 // dann wird Anweisung1 ausgeführt else // sonst Anweisung2 // wird Anweisung2 ausgeführt 73

Selektionsbedingung Bedingung Bezeichnet meist eine Vergleichsoperation zwischen einer Variablen und einer anderen Variablen einer Variablen und einem konkreten Zahlenwert Eine Bedingung ist erfüllt (wahr), wenn die zugrundeliegende Vergleichsoperation erfüllt (wahr) ist. Vergleichsoperationen in C!= ungleich < kleiner als <= kleiner gleich == ist gleich > größer als >= größer gleich Achtung: y=x vs. y==x = bedeutet Zuweisung: Der Wert von x wird y zugewiesen. == vergleicht auf Werteidentität: Die Bedingung ist erfüllt, wenn x und y gleiche Werte haben 74

Beispiel f(x)= x als C-Funktion int abs( int x ) { int betrag; if ( x < 0 ) betrag = -x; else betrag = x; Es können auch umfangreichere Funktions- und Variablenbezeichnungen verwendet werden Grundsätzlich sollte darauf geachtet werden, dass die Bezeichnungen von Namen und Funktionen aussagekräftig sind und etwas mit der Bedeutung einer Variablen oder Funktion zu tun haben. } return betrag; 75

Potenzieren einer ganzen Zahl Wunsch Wir wollen unsere Quadratfunktion f verallgemeinern, so dass eine beliebige Potenz einer Zahl gebildet werden kann. Dabei wollen wir für den Exponenten nur natürliche Zahlen erlauben. Algorithmusidee zur Berechnung von basis exponent Rückführung der Potenzbildung basis exponent auf die mehrfache Multiplikation von basis mit sich selbst: Wir initialisieren eine Variable mit 1 und multiplizieren diese exponent mal mit basis Problem Wie stellen wir einer Funktion neben der Basis noch den Exponenten zur Verfügung? Lösung C-Funktionen können mit beliebig vielen Parametern versehen werden. 76

Steuerstruktur Iteration in C Wiederholte Ausführung der gleichen Anweisung Die Rückführung der Potenzierung auf eine wiederholte Multiplikation verlangt die Verwendung der Steuerstruktur Iteration. Realisierung in C while ( Bedingung ) // Solange Bedingung gültig ist Anweisung // führe Anweisung aus 77

Potenzierung als C-Funktion int potenz(int basis, int exponent) { int ergebnis = 1; // Variable für (Zwischen-)Ergebnis int i = exponent; // Zählvariable für Anzahl Iterationen while (i > 0) { // Solange Zählvariable > 0 ergebnis = ergebnis * basis; i = i - 1; } } return ergebnis; // Kennzeichnung des Funktionswerts 78

Steuerstrukturen in C Wir haben beispielhaft drei C-Funktionen kennengelernt, die die Verwendung verschiedener Steuerstrukturen zur Realisierung von Algorithmen demonstrierten. Zusammenfassend lässt sich festhalten, dass jeder Algorithmus eine Auswahl und meist jede der folgenden drei Steuerstrukturen enthält. Steuerstruktur Realisierung in C Sequenz (Folge) { ; ; } Selektion (Alternative) Iteration (Wiederholung) if else while Merke Diese drei Steuerstrukturen organisieren die Verarbeitung aller weiteren Operationen in C. 79

Algorithmus von Euklid Zusammenfassend wollen wir einen Algorithmus kennenlernen und als Funktion implementieren, der alle drei Steuerstrukturen in sich vereint. Dieser Algorithmus ist schon über 2300 Jahre alt und stammt von dem griechischen Mathematiker Euklid. Er beschreibt die Bestimmung des größten gemeinsamen Teilers (ggt) zweier natürlicher Zahlen a und b. Algorithmus von Euklid Solange a ungleich b wenn a größer als b subtrahiere b von a sonst subtrahiere a von b Der Algorithmus endet wenn a und b identisch sind. Dann stellen sowohl a als auch b den gesuchten größten gemeinsamen Teiler der Ausgangswerte von a und b dar. 80

Euklidischer Algorithmus Objektmenge a, b Grundoperationen Vergleichsoperationen Ausdrucksberechnung (Subtraktion) Zuweisung Vorbedingung a und b sind natürliche Zahlen Endbedingung a und b sind gleich 81

Euklidischer Algorithmus in C int ggt(int a, int b) { while (a!= b) { if (a > b) a = a - b; else b = b - a; } } return a; // a (oder b) stellt den ggt dar 82

Ende der Vorlesung