Institut für Geometrie und Praktische Mathematik 2.¨Ubung zum

Werbung
Institut für Geometrie
und Praktische Mathematik
Dipl. Math. Wolfram Rosenbaum
2. Übung zum Kompaktkurs Einführung in C++“
”
Dienstag, 28.09.2004
Aufgabe 1:
Schreiben Sie ein Programm, welches eine formatierte Wertetabelle der Funktionen
f1 (x) = 2x, f2 (x) = 4x2 , f3 (x) = 4x3 , f4 (x) = x4 − x3 − x2 − x
im Bereich [−1, 1] mit einer Schrittweite von 0.1 ausgibt.
Aufgabe 2:
Die Fibonaccizahlen sind rekursiv definiert durch
fib(0) := 1,
fib(1) := 1,
fib(x) := fib(x − 1) + fib(x − 2).
Schreiben Sie ein Programm zur Berechnung der ersten n Fibonaccizahlen. Die Zahl n soll dabei
eingelesen werden. Schreiben Sie sowohl eine rekursive als auch eine iterative Variante.
Aufgabe 3:
Schreiben Sie eine Funktion ggT, die den größten gemeinsamen Teiler zweier ganzer Zahlen p und q
mit Hilfe des Euklidischen Algorithmus berechnet und testen Sie Ihre Funktion.
Der Euklidische Algorithmus beruht auf der Division mit Rest und ist wie folgt definiert: Setze
r−1 := p, r0 := q. Solange ri nicht verschwindet, bestimme für i = 1, 2, . . . ganze Zahlen ai und
ri+1 , so daß
ri−1 = ai ri + ri+1 ,
|ri+1 | < |ri |,
gilt. Der Algorithmus bricht nach endlich vielen Schritten ab, d. h. daß rn+1 = 0 für ein n ∈ N gilt.
Der vorletzte Rest rn ist der größte gemeinsame Teiler der Zahlen p und q.
Aufgabe 4:
Erweitern Sie das Programm aus Aufgabe 3 so, daß es beliebig viele Zahlenpaare von der Standardeingabe liest und deren größte gemeinsame Teiler auf der Standardausgabe wieder ausgibt.
Sollte die Eingabe nicht Ihren Erwartungen entsprechen, geben Sie eine Fehlermeldung auf dem
Standardfehlerkanal aus und beenden Sie das Programm.
blatt˙02,20040928–0806
70
Seite 2
2. Übung zum Kompaktkurs Einführung in C++“
”
In der folgenden Tabelle enthält jeder Kasten Operatoren gleicher Priorität, und die Kästen sind
nach fallender Priorität sortiert. Alle einstelligen Operatoren und die Zuweisungen sind rechts–
assoziativ, die übrigen Operatoren sind links–assoziativ. Zum Beispiel bedeutet a=b=c a=(b=c),
aber p->q->r steht für (p->q)->r.
::
.
->
[]
()
--, ++
typeid
typeid
dynamic cast<typ>
static cast<typ>
reinterpret cast<typ>
const cast<typ>
sizeof
++ -~
!
+ &
*
new
delete
delete []
()
.*
->*
* /
%
+ << >>
< <= > >=
== !=
&
^
|
&&
||
? :
=
+= -= *= /= %=
<<= >>=
&= |= ^=
,
Bereichs–Auflösung
Elementauswahl
Elementauswahl
Indizierung/Feldzugriff
Funktionsaufruf
Postinkrement/–dekrement
Typidentifikation
Laufzeit–Typinformation
zur Laufzeit geprüfte Konvertierung
bei der Übersetzung geprüfte Konvertierung
ungeprüfte Konvertierung
const–Qualifizierer entfernen
Objekt–/Typegröße
Präinkrement/–dekrement
Komplement, bitweise Invertierung
Negation
Unäres Plus/Minus
Adresse
Dereferenzierung
Speicherallokation
mit Initialisierung
Speicherdeallokation
Deallokation eines Arrays
Typkonvertierung (Cast)
Elementselektion
Elementselektion
Multiplikation/Division
Rest der Division (modulo)
Addition/Subtraktion
Shift nach links/rechts
Kleiner/größer (gleich)
Gleich/ungleich
Bitweises AND
Bitweises exklusives OR
Bitweises inklusives OR
Logisches AND
Logisches inklusives OR
Bedingte Zuweisung
Einfache Zuweisung
Operation und Zuweisung
Hintereinanderausführung
vektor::Norm1
object.member
pointer->member
array[expr], a[5]
fct(args), sin(x)
a++, b-typeid(typename)
typeid(expr)
sizeof(object),
sizeof type
++a, --b
~a
!ok
+a, -3
&object
*pointer
new int[10]
new complex(0,1)
delete pointer
delete [] pointer
(int)x
obj.*ptr-to-element
ptr->*ptr-to-element
a*b, a/b
5%3
1+3, a-b
a<<2, b>>x
a<1, b>=x
a==1, b!=x
a&b
a^b
a|b
a&&b
a||b
a < b ? a : b
a=1 b=x
a+=1
a <<= 1
a |= b
a=1, a++
Herunterladen