Übungen zur Arithmetik (1)
( als PDF-Datei )
- Beispiele zur Veranschaulichung der automatischen
Typkonvertierung:
Vergleichen Sie die Ergebnisse verschiedener arithmetischer Ausdrücke bei unterschiedlicher Schreibweise der Konstanten als ganze oder ,,reelle'' Zahlen( 2/3, 2./3, 2d0/3, 1/2*4.0, 1/2.0*4, usw. ),
sowie bei Zuweisung des Ergebnisses an Variablen unterschiedlichen Typs (INTEGER oder REAL).
Werden die Ergebnisse bei Zuweisung an eine Integer-Variable korrekt gerundet oder wird nur der gebrochene Anteil abgeschnitten? - Überprüfen Sie dies anhand geeigneter Ausdrücke mit positiven und negativen Ergebnissen. -
Integer-Arithmetik: Berechnung von n! = n·(n-1)·...·1.
Schreiben Sie ein Funktionsunterprogramm (integer function nfak(n)), welches dieses Produkt innerhalb einer Schleife berechnet.
Hinweis zu Funktionsunterprogrammen in Fortran:integer function nfak(n) ... nfak = <ausdruck> ! Funktionswert zurueckgeben return end
Der Funktionsname (nfak) darf (muss aber nicht) innerhalb der Funktion beliebig als lokale Variable benutzt werden, ihm muss aber am Ende der Funktionswert zugewiesen werden.Testen Sie zunächst für kleine n, ob das Programm richtige Ergebnisse liefert.
Zur Darstellung positiver ganzer Zahlen werden 31 Bit benutzt: als Summe: ∑bk 2k, ( bk ∈ {0|1}, k = 0, ,30 ).
Welche Reaktion ist bei ,,zu großem'' n zu erwarten? Testen Sie, ob die erwartete Reaktion auch wirklich eintritt.Vergleichen Sie die Ergebnisse der Integer-Arithmetik mit denen von Real und DoublePrecision, indem Sie alle Datentypen (incl. Funktionen) entsprechend ändern, bzw. alle 3 Funktionen in einem Hauptprogramm verwenden:
integer function nfak(n) real function rfak(rn) doubleprecision function dfak(dn)
- Stellen Sie fest, ob der verwendete Fortran-Compiler rekursive Funktionsaufrufe
zulässt (direkt oder indirekt), so dass man n! nach der Rekursionsvorschrift berechnen kann:
Direkte Rekursion z.B. durch den Aufruf : nfak = n*nfak(n-1) in der Funktion.n! = { n·(n-1)! , n > 1 1, sonst
Indirekte Rekursion z.B. durch 2 Funktioneninteger function nfak(n) integer function dummy(n) integer n,dummy integer n,nfak ... nfak = n*dummy(n-1) dummy=nfak(n)
- Binomialkoeffizienten
kann man auf verschiedene Arten berechnen, z.B.( n
k) = n! (n-k)!·k!- nach obiger Definition mit Hilfe eines Unterprogramms, das n! berechnet, oder aber
-
als fortlaufendes Produkt von Quotienten
Darf man dies mit ganzzahliger Arithmetik ausführen?Bj=Bj-1* n+1-j j, d.h. ( n
k) = n ·(n-1)·...·(n-k+1) 1·2·...·k -
Rekursiv durch Addition (vgl. Pascalsches Dreieck)
(Abbruch der Rekursion bei n=k oder k=0)( n
k) = ( n-1
k) + ( n-1
k-1)
Schreiben Sie je ein Unterprogramm für diese drei Berechnungen und ein Hauptprogramm, in dem die Zahlen n und k eingelesen und die drei berechneten Werte ausgegeben werden.
File translated from TEX by TTH, version 3.00.