TECHNISCHE UNIVERSIT¨AT DRESDEN Institut für

Werbung
TECHNISCHE UNIVERSITÄT DRESDEN
@
@
@
@
@
@
Institut für Wissenschaftliches Rechnen
Antje Noack
@
@
@
@
@
@
Informatik für Lehramt – SoSe 2008
Aufgabenblatt 6 — Bearbeitung: 16.06.-29.06.2008
Aufgabe 17: (Felder)
Ein Freund hat auf dem Dachboden einen alten Spielwürfel aus edlem Holz gefunden. Um zu
prüfen, ob für diesen Würfel wirklich noch alle Zahlen (von 1 bis 6) gleichwahrscheinlich sind,
will er dies auswürfeln. Er bittet Sie, ein C-Programm zur Auswertung zu schreiben:
1. Deklarieren Sie ein eindimensionales Feld fzahl der Länge NMAX=1000 vom int-Typ, um
die gewürfelten Zahlen zu speichern. Definieren Sie NMAX dazu als Konstante.
Deklarieren Sie ein zweites eindimensionales Feld wfeld vom int-Typ, in dem für jede Zahl
von 1 bis 6 gespeichert werden soll, wie oft sie gewürfelt wurde.
2. Lassen Sie die nacheinander die gewürfelten Zahlen in das Feld fzahl eingeben (über Tastatur). Bei Falscheingabe (nicht 1,. . . , 6) soll ein Kommentar ausgegeben, die Zahl aber
nicht gespeichert werden. Es ist nach jedem Eintrag nachzufragen, ob noch ein weiterer
Wurf gewünscht ist. Nur, wenn kein Wurf mehr folgen soll oder die Anzahl Würfe den
Maximalwert NMAX erreicht hat, ist abzubrechen.
3. Aktualisieren Sie jeweils bei Eingabe eines Wurfes die Statistik im Feld wfeld zur Anzahl
der Würfe von 1, 2, 3, 4, 5 bzw. 6.
4. Sind alle Würfe eingegeben, ist die Statistik geeignet auf dem Bildschirm auszugeben.
Aufgabe 18: Funktion, Felder, (Abgabe!)
Es sei eine Meßwertreihe a = (a1 , . . . , an ) gegeben. Für diese Daten sind verschiedene Mittelwerte,
z.B. das arithmetische Mittel Ma und das quadratische Mittel Mq , von Interesse:
v
u n
n
X
u1 X
1
Ma =
ai ,
Mq = t
a2i .
n
n
i=1
i=1
1. Schreiben Sie zwei C-Funktionen a_mittelberech und q_mittelberech, die für ein eindimensionales Feld mit Namen a der Länge n von reellen Zahlen die zugehörigen Werte Ma
bzw. Mq berechnen. Ein möglicher Prototyp z.B. für die Funktion a_mittelberech ist:
float a_mittelberech(float a[],int n)
2. Schreiben Sie ein Hauptprogramm, in dem der Nutzer die Komponenten der Meßwertreihe in ein eindimensionales Feld eingeben soll. Deklarieren Sie dazu ein Feld der Länge
NMAX (NMAX ist als Konstante mit hinreichend großem Wert oder über eine define-Direktive
festzulegen) und lassen Sie vor der Werteingabe vom Nutzer vorgeben, wie lang die Meßwertreihe wirklich ist (n<NMAX). Berechnen Sie dann mit den Funktionen die Werte Ma und
Mq und geben Sie sie anschließend auf dem Bildschirm aus.
Aufgabe 19: Arbeit mit Matrizen
Schreiben Sie ein Programm, das ein lineares Gleichungssystem (GLS) mit zwei Gleichungen
a11 x1 + a12 x2 = b1
a21 x1 + a22 x2 = b2
löst. Dazu soll der Nutzer die Koeffizientenmatrix A und die rechte Seite b,
a11 a12
b
A=
, b= 1
a21 a22
b2
über Tastatur eingeben können (for-Schleifen verwenden!). Geben Sie das GLS mit den eingegebenen Koeffizienten zur Kontrolle auf dem Bildschirm aus. Implementieren Sie nun den GaußAlgorithmus, um das GLS zu lösen. Betrachten Sie alle möglichen Fälle!
Vektor und Matrix sind als ein- bzw. zweidimensionale Felder zu deklarieren!
Zusatz: Implementieren Sie die Berechnung der Lösung in einer Funktion.
Aufgabe 20: Arbeit mit Matrizen (Abgabe!)
Schreiben Sie ein Programm, das das Produkt zweier reellwertiger Matrizen berechnet. Implementieren Sie die Matrizen als zweidimensionales Feld mit maxN Zeilen und Spalten. Führen Sie
dazu mithilfe des typedef-Befehls einen neuen Datentyp matrix ein (dabei kann maxN z.B. mit
#define maxN 10 definiert werden). Folgende Matrizen-Funktionen sind zu schreiben:
• Eingabe einer Matrix A: Innerhalb der Funktion soll zunächst die Anzahl der Zeilen
und Spalten vom Nutzer abgefragt werden.
Möglicher Prototyp der Funktion: void EingabeMat(matrix A, int *pzeil,int *pspal);
• Ausgabe auf dem Bildschirm:
Prototyp der Funktion: void AusgabeMat(matrix A, int m,int n);
• Matrixmultiplikation: Zwei Matrizen A und B der Größe m × n bzw. n × s sind zu
n,s
m,s
multiplizieren. Ist A = (aij )m,n
i=1,j=1 , B = (bij )i=1,j=1 , so ist C = AB = (cij )i=1,j=1 mit
n
X
cik =
aij bjk .
j=1
Möglicher Prototyp: void MatMult(matrix C,matrix A,matrix B, int m, int n, int s);
Schreiben Sie ein kurzes Hauptprogramm, das die drei Matrix-Funktionen testet. Vergessen Sie
nicht, vor Aufruf der Funktion MatMult zu testen, ob eine Multiplikation überhaupt möglich ist
(Anzahl Spalten von A = Anzahl Zeilen von B!).
Herunterladen