3. Übung für Programmierpraktikum


Abgabetermin: 27. November 2003



Name:

Matrikelnummer: Punkte:

Die Übungen sind grundsätzlich allein zu machen. Gruppenarbeit ist nicht erlaubt. Abzugeben sind jeweils das sinnvoll dokumentierte Programmlisting mit Original-inputs und Original-outputs, falls angebracht für mehrere Testläufe mit unterschiedlichen Eingabedaten. Das Abgabeformat ist DIN A4. Heften Sie alle Unterlagen gemeinsam mit dem Übungsblatt zusammen !

  1. (8 P) Bei der Lagrange-interpolation berechnet man aus den gegebenen n + 1 Stützpunkten (xi, yi)i=0n das Interpolationspolynom an der Stelle x mittels

    pn(x) = $\displaystyle \sum_{{i=0}}^{n}$yiLi(x)    mit    Li(x) = $\displaystyle {\frac{{(x-x_0)(x-x_1)\cdots( x-x_{i-1})\;(x-x_{i+1})\cdots(x-x_n) }}{{ (x_i-x_0)(x_i-x_1)\cdots(x_i-x_{i-1})\;(x_i-x_{i+1})\cdots(x_i-x_n) }}}$

    Schreiben Sie ein Programm, welches aus dem einzugebenden n die Stützpunkte

    $\displaystyle \left(\vphantom{ x_i := xa+\frac{i(xe-xa)}{n}\,,\,
y_i := \frac{1}{x_i}\sin\left(\frac{3\pi}{x_i}\right) }\right.$xi : = xa + $\displaystyle {\frac{{i(xe-xa)}}{{n}}}$ , yi : = $\displaystyle {\frac{{1}}{{x_i}}}$sin$\displaystyle \left(\vphantom{\frac{3\pi}{x_i}}\right.$$\displaystyle {\frac{{3\pi}}{{x_i}}}$$\displaystyle \left.\vphantom{\frac{3\pi}{x_i}}\right)$$\displaystyle \left.\vphantom{ x_i := xa+\frac{i(xe-xa)}{n}\,,\,
y_i := \frac{1}{x_i}\sin\left(\frac{3\pi}{x_i}\right) }\right)_{{i=0}}^{n}$        mit    xa = 0.2,  xe = 1.0

    berechnet und in statischen Feldern speichert. Danach berechnen Sie zu einem einzugebenden n die Koeff. Li, speichern diese ebenfalls in einem statischen Feld und berechnen den Polynomwert pn(x). Letzterer und der exakte Wert  sin$ \left(\vphantom{3\pi/x}\right.$3$ \pi$/x$ \left.\vphantom{3\pi/x}\right)$/x   sind auszugeben.

    Eingabedaten (n, x): (10,  0.5), (10,  0.3), (100,  0.5), (100,  0.3), (1000,  0.5)
  2. (8 P) Sei A eine Matrix mit n Zeilen und m Spalten, deren Einträge ai, j als

    ai, j : = $\displaystyle {\frac{{(-1)^{i}}}{{1-(i+j)}}}$        $\displaystyle \forall$i = 1,..., n    $\displaystyle \forall$j = 1,..., m

    definiert sind. Einige zugehörigen Matrixnormen (Frobenius-, 1-, Unendlichnorm) sind:

    || A$\displaystyle \parallel_{F}^{}$ : = $\displaystyle \sqrt{{ \sum_{i=1}^n\sum_{j=1}^m \vert a_{i,j}\vert^2}}$         || A$\displaystyle \parallel_{1}^{}$ : = $\displaystyle \max_{{j}}^{}$$\displaystyle \sum_{{i=1}}^{n}$| ai, j|         || A$\displaystyle \parallel_{{\infty}}^{}$ : = $\displaystyle \max_{{i}}^{}$$\displaystyle \sum_{{j=1}}^{m}$| ai, j|

    Schreiben Sie ein Programm, welches n und m einliest, die Matrix A berechnet und die drei gegebenen Normen berechnet und ausgibt. Dimensionieren Sie den statischen Speicher für Ihre Matrix gerade so groß, daß sämtliche Testläufe mit dieser Dimensionierung durchgeführt werden können.

    Eingabedaten (n, m): (3,  4), (4,  3), (20,  6), (57,  382)
  3. (8 P) Gegeben Sei die Struktur struct datum { int tag, monat, jahr; };
    welche ein Datum abspeichert. Entwerfen Sie eine eigene Struktur, welche den Vornamen, das Geburtsdatum und das Gehalt gemeinsam abspeichert, wobei das Geburtsdatum mittels der gegebenen Struktur datum realisiert werden soll. Schreiben Sie ein Programm, welches für zwei Personen die Daten der zugehörigen Strukturvariablen einliest, danach Alter und Gehalt vergleicht und Ergebnissätze der Art «Joe ist älter/jünger als Pete», «Petra ist gleichaltrig mit Pete», «Hanna hat mind. soviel Gehalt wie Sarah», ... ausgibt.

    Die Eingabedaten sind in den 3 Files input.3C_1.txt, input.3C_2.txt und input.3C_3.txt zu finden (Aufruf: ./a.out < input.3C_1.txt ). Die Anordnung der Daten ist:
    (NameA, TagA, MonatA, JahrA, GehaltA,     NameB, TagB, MonatB, JahrB, GehaltB)



Gundolf Haase : Wed Nov 19 21:07:10 CET 2003