5. Felder, Funktionen, Strukturen, Zeiger, Dateiarbeit

Werbung
Institut für Informatik
LV "Grundlagen der Informatik"
Übungsaufgaben zu
Programmierung in C (Teil 2)
Aufgabenkomplex: Programmieren in C (Teil 2 von 2)
(Strukturierte Datentypen: Felder, Strukturen, Zeiger;
Funktionen mit Parameterübergabe; Dateiarbeit)
--------------------------------------------------------------------------------------------------------------------Hinweis: Alle mit * gekennzeichneten Aufgaben sind zum zusätzlichen Üben gedacht.
---------------------------------------------------------------------------------------------------------------------
1.
Eindimensionale Felder
1.1
Summe von n reellen Messwerte
Schreiben Sie ein C-Programm zur Bestimmung der Summe von n reellen Messwerten (n
bekannt). Die Eingabe der Messwerte soll in ein eindimensionales Feld erfolgen. Geben Sie das
Resultat aus.
--------------------------------------------------------------------------------------------------------------------1.2
Eindimensionales Feld aus Zufallszahlen
Schreiben Sie ein C-Programm zur Lösung folgender Aufgabe: Legen Sie ein eindimensionales
Feld an, das aus 100 ganzen Zahlen bestehen soll. Füllen Sie das Feld mit Zufallszahlen zwischen
0 und 99. Zeigen Sie die Feldinhalte auf dem Bildschirm an.
Hinweis: Die Funktion rand( )
(Header <stdlib.h> einbinden) liefert Zufallszahlen
zwischen 0 und 32767. Zufallszahlen von 0 bis 99 erhalten Sie, indem Sie den Divisionsrest der
ganzzahligen Division durch 100 bestimmen:
rand( )%100
--------------------------------------------------------------------------------------------------------------------*1.3 Maximum, Minimum, Mittelwert und Streuung
Schreiben Sie ein C-Programm, mit dem von den Zufallszahlen aus Aufgabe 1.2) ein Maximum,
ein Minimum, den Mittelwert und die Streuung. Bestimmt werden (vgl. Aufgabenkomplex
Struktogramme, Aufg. 16)
Hinweise:
- Mittelwert: in der Statistik als bezeichnet; in der Informatik besser z.B. als mw :
1 n
mw = ∑ x[i ]
n i =1
- Streuung (oder auch: Varianz): in der Statistik als s2 bezeichnet; hier besser z.B. als var :
n
2
2
1
1
var =
=
(
− n * mw * mw)
−
(
x
[
i
]
mw
)
(
x
[
i
])
∑
∑
n −1
n − 1 1=1
Bemerkung: Die zweite Formel für var ist rechentechnisch günstiger. Bei der algorithmischen Berechnung
von mw wird man zuerst die enthaltene Summe berechnen, dieses „Zwischenresultat“ auch in mw
speichern und schließlich durch n dividieren. Entsprechend geht man bei der Berechnung von var vor:
zunächst wird die enthaltene Summe berechnet, dieses „Zwischenresultat“ auch in var gespeichert und
anschließend n*mw*mw abgezogen und alles durch (n-1) dividiert.
--------------------------------------------------------------------------------------------------------------------1.4
Verschachtelte Zählschleifen (vgl. Aufgabenkomplex Struktogramme, Aufg. 17)
Schreiben Sie ein C-Programm zur Berechnung des Wertes der Doppelsumme
n
i
doppsum = ∑∑ (i + j ) 2
i = 2 j =1
wobei zuvor die ganze Zahl n einzulesen ist.
---------------------------------------------------------------------------------------------------------------------
1
Institut für Informatik
LV "Grundlagen der Informatik"
Übungsaufgaben zu
Programmierung in C (Teil 2)
1.5 Ausgabe eines Musters aus Sternen (vgl. Aufgabenkomplex Struktogramme, Aufg. 20)
Schreiben Sie ein C-Programm, das folgendes Muster in 20 Zeilen auf den Bildschirm ausgibt:
*
**
***
...
********************
(1.Zeile:
(2.Zeile:
(3.Zeile:
(usw.)
(20.Zeile:
1 Stern)
2 Sterne)
3 Sterne)
20 Sterne)
--------------------------------------------------------------------------------------------------------------------*1.6 Einfaches Ratespiel („1 aus 90“) (vgl. Aufgabenkomplex Struktogramme, Aufg. 22*)
Schreiben Sie ein C-Programm, in dem folgendes einfache Ratespiel umgesetzt wird:
Spielschritt 1: Mit einem Zufallszahlengenerator ist zunächst eine zu erratende ganze Zahl a aus
dem Bereich 1<=a<=90 zu bestimmen.
(Hinweis: Da Zufallszahlengeneratoren programmiersprachspezifisch sind, schreiben Sie hierfür
einfach als Aktion a = Zzahl aus [1,90]
ins Struktogramm.)
Spielschritt 2: - Der Spieler muss a nun durch Eingabe einer ganzen Zahl b zu erraten versuchen.
- Solange er falsch rät (a != b): Hinweis durch Ausgabe, ob b zu groß oder zu klein ist. Danach
muss der Spieler erneut raten.
- Wenn richtig geraten (b = =a):
-- Anzahl n der benötigten Rateversuche ausgeben
-- Außerdem verbale Leistungseinschätzung in Abhängigkeit von n ausgeben und zwar:
--- n= 1 oder 2:
Super
--- n = 3 oder 4:
Sehr gut
--- n = 5:
Gute Leistung
--- n = 6, 7 oder 8
Mittelmäßige Leistung
--- n > 8
Schwache Leistung
- Fragen, ob Spieler noch einmal spielen will.
Wenn ja, dann Fortsetzung bei Spielschritt 1, sonst Spielende.
---------------------------------------------------------------------------------------------------------------------
2.
Funktionen (mit Parameterübergabe)
Hinweis: In den Aufgaben des Teiles 2. ist nicht mit globalen Variablen, sondern nur mit
lokalen Variablen zu arbeiten.
2.1.a) Volumen und der Oberfläche einer Kugel in gesonderten Funktion
In einem C-Programm ist die Berechnung des Volumen und der Oberfläche einer Kugel (vgl.
Aufgabenkomplex Struktogramme, Aufg. 2) ) wie folgt zu programmieren:
- Eingabe des Radius und Ausgabe der Resultate in der main-Funktion.
- Berechnung des Volumen und der Oberfläche jeweils in einer gesonderten Funktion (ohne
Funktions-Prototypen).
2.1.b) wie 2.1.a), aber jetzt mit Funktions-Prototypen
--------------------------------------------------------------------------------------------------------------------2.2
Summe von Fakultäten in gesonderter Function (mehrfacher Aufruf)
In einem C-Programm ist die Summe von Fakultäten z = a! + b! + c! (a, b, c ... natürliche
Zahlen) mit einem nichtrekursiven Algorithmus zu berechnen (vgl. Aufgabenkomplex
Struktogramme, Aufg. 13).
- Die Eingabe von a, b und c sowie die Ausgabe des Resultats z sollen in der main-Funktion
erfolgen.
- Die Berechnung der Fakultät ist in einer gesonderten Funktion vorzunehmen.
--------------------------------------------------------------------------------------------------------------------2
Institut für Informatik
LV "Grundlagen der Informatik"
Übungsaufgaben zu
Programmierung in C (Teil 2)
*2.3 Summe von Fakultäten in gesonderter Function (jetzt rekursiver Algorithmus)
Zu berechnen ist wiederum z=a!+b!+c!. Verwenden Sie jetzt zur Berechnung der Fakultät eine
rekursive Funktion.
--------------------------------------------------------------------------------------------------------------------2.4
Übergabe von Feldern (Einlesen bei unbekanntem n; Endeerkennung)
Bestimmen Sie (als Vorbereitung von 2.5) die Summe von n reellen Messwerte. Dabei sei die
Anzahl n der Messwerte dem Nutzer nicht bekannt (d.h. n kann nicht eingelesen werden). Ein
Wert für die Endeerkennung ist vor der Eingabe einzulesen. Die Eingabe der Messwerte (in ein
Feld) und die Ausgabe der Summe sollen in der main-Function erfolgen. Die Summe ist in einer
gesonderten Funktion zu berechnen.
--------------------------------------------------------------------------------------------------------------------2.5
Maximum, Minimum, Mittelwert und Streuung von n reellen Messwerten
Bestimmen Sie Maximum, Minimum, Mittelwert und Streuung (Varianz) von n reellen
Messwerten (vgl. Aufgabenkomplex Struktogramme, Aufg. 16). Dabei sei die Anzahl n der
Messwerte nicht bekannt (d.h. kann nicht eingelesen werden).
- Die Eingabe der Messwerte soll in einer gesonderten Funktion erfolgen (also nicht in der mainFunction). Da die Anzahl n unbekannt ist, soll die Anzahl n der Messwerte beim Einlesen
ermittelt und als Ergebnis an die main-Funktion übergeben werden. Ein Wert für die
Endeerkennung ist vor der Eingabe einzulesen.
- Die eingelesenen Messwerte sollen zur Kontrolle in einer gesonderten Funktion ausgegeben
werden.
- Ein Maximum und ein Minimum der Messwerte sind in je einer weiteren Funktion zu
berechnen.
- In einer gesonderten Funktion ist die Berechnung der Summe der Messwerte vorzunehmen.
Diese Funktion ist bei der Berechnung des Mittelwertes und der Streuung (Varianz) zu
verwenden.
- *Ergänzen Sie Aufgabe 2.5 durch eine weitere Funktion zum Sortieren der Messwerte (vgl.
Aufgabenkomplex Struktogramme, Aufg. 21).
---------------------------------------------------------------------------------------------------------------------
3.
Struktur-Typ
3.1
Struktur für eine Bestellung
In einer Vorstufe für ein einfaches Bestellsystem sind in einem C-Programm zunächst für eine
Bestellung das Datum der Bestellung, die Artikelnummer, die Stückzahl und der Preis pro Stück
zu erfassen. Speichern Sie diese Daten in eine Variable vom Strukturtyp, und geben Sie die Daten
zur Kontrolle wieder aus.
--------------------------------------------------------------------------------------------------------------------3.2
Erweiterung: Feld von Strukturen (maximal 10 Bestellungen)
- Schreiben Sie in Erweiterung von 3.1 ein C-Programm zur Erfassung von maximal
10 Bestellungen gemäß dem in 3.1 beschriebenen Bestellsystem.
- Geben Sie danach alle Bestellungen zur Kontrolle zeilenweise aus.
--------------------------------------------------------------------------------------------------------------------3.3
Erweiterung durch Berechnung des Gesamtpreises
Erweitern Sie das Programm aus 3.2 um die Berechnung des Gesamtpreises aller Bestellungen
und geben Sie diesen aus.
--------------------------------------------------------------------------------------------------------------------3.4* Weitere Erweiterung
Erweitern Sie Ihr Programm aus Aufgabe 3.2. so, dass wahlweise alle Bestellungen oder nur die
Bestellung ab einem eingebbaren Mindestbetrag ausgegeben werden.
---------------------------------------------------------------------------------------------------------------------
3
Institut für Informatik
LV "Grundlagen der Informatik"
4.
Übungsaufgaben zu
Programmierung in C (Teil 2)
Mehrdimensionale Felder
4.1
Matrixberechnungen
Vereinbaren Sie in einem C-Programm eine Matrix mit max. 5 Zeilen und max. 8 Spalten mit
ganzzahligen Elementen (vereinbarte, maximal mögliche Dimension der Matrix). Lesen Sie dann
die wirkliche Dimension der Matrix ein. Füllen Sie diese Matrix mit Zufallszahlen zwischen 0
und 99 (siehe Hinweis in 1.2). Geben Sie die Inhalte auf dem Bildschirm an.
- Bestimmen Sie ein maximales und ein minimales Element dieser Matrix. Geben Sie die
Resultate aus.
*- Bestimmen Sie zusätzlich ein maximales Element jeder Zeile der Matrix, und speichern Sie
diese Zeilenmaxima in eine Feldvariable. Geben Sie die Resultate aus.
--------------------------------------------------------------------------------------------------------------------*4.2 Matrizenmultiplikation (vgl. Aufgabenkomplex Struktogramme, Aufg. 19*).
In einem C-Programm sind die reellen Matrizen Am,n (m Zeilen; n Spalten) und Bn,k (n Zeilen; k
Spalten) einzulesen (max. mögliche Dimension: 20 Zeilen, 20 Spalten). Die Dimensionen m, n
und k seien dem Nutzer bekannt und können folglich eingelesen werden (korrekte Eingabe von
m, n, k prüfen). Danach ist die (reelle) Produktmatrix
Cm,k = Am,n * Bn,k
zu berechnen gemäß
n
cij = ∑ aip * b pj ; i = 1, ..., m; j = 1, ..., k
p =1
und zeilenweise auszugeben.
---------------------------------------------------------------------------------------------------------------------
5.
Zeiger
5.1a) Testen Sie folgendes C-Programm:
/*******************************************************/
#include <stdio.h>
void main()
{
int a;
int *pa;
a = 2;
pa = &a;
/* pa zeigt auf a (ist Zeiger auf a);
mittels *pa kann auf a zugegriffen werden */
printf("a=%d pa=%p *pa=%d \n", a, pa, *pa);
*pa = 5;
printf("a=%d pa=%p *pa=%d \n", a, pa, *pa);
}
/*******************************************************/
5.1b) Erweitern Sie das Programm um die Eingabe einer zweiten Variablen. Geben Sie die
Summe der Zahlen aus. Verwenden Sie für das Ergebnis eine initialisierte Zeigervariable.
---------------------------------------------------------------------------------------------------------------------
4
Institut für Informatik
LV "Grundlagen der Informatik"
Übungsaufgaben zu
Programmierung in C (Teil 2)
5.2 Analysieren Sie das folgende C-Programm zur Berechnung des Quotienten in einer Funktion:
#include <stdio.h>
int func(double x, double y, double *pz)
{
int error;
error = 0;
if (y!=0) *pz = x / y;
else error = 1;
return error;
}
void main()
{
double a, b, c; int error;
scanf("%lf%lf",&a,&b);
error = func(a, b, &c);
if (error == 0) printf("Quotient = %g\n",c);
else printf("Division durch 0\n");
}
/***************************************************/
- Versuchen Sie, in den formalen Parametern keine Zeiger zu verwenden.
- Erweitern Sie die Funktion func (mit Zeigern) um die Berechnung des Produkts.
--------------------------------------------------------------------------------------------------------------------5.3
Resultatrückgabe über Parameterliste
Modifizieren Sie Aufgabe 2.1 (Berechnung von Volumen und Oberfläche einer Kugel) in
folgender Weise:
- Wiederum Eingabe des Radius und Ausgabe der Resultate in der main-Funktion.
- Aber jetzt: Berechnung des Volumen und der Oberfläche gemeinsam in einer Funktion. Beide
Resultate sind über die Parameterliste an die aufrufende Funktion zurückzugeben.
--------------------------------------------------------------------------------------------------------------------*5.4 Dynamische Reservierung von Speicherplatz
Berechnen Sie in einem C-Programm ein Maximum und die Summe von n Meßwerten. Die Zahl
der Messwerte n soll vom Benutzer eingegeben werden. Reservieren Sie den Speicherplatz für
die Meßwerte dynamisch mit:
x = (double*) malloc (n * sizeof (double));
Voraussetzung: Einbinden von <stdlib.h>
---------------------------------------------------------------------------------------------------------------------
6.
Dateiarbeit (Der Datentyp File)
6.1
Dateiarbeit (Datentyp File)
In der Datei
L:\Prog_C\geheim.txt (Weisbach-Bau) bzw. Y:\Lehre\Prog_C\geheim.txt
(Rammler-Bau) ist ein Text verschlüsselt gespeichert. Um den Text lesbar zu machen, müssen
einige Buchstaben in der Datei durch andere Buchstaben ersetzt werden (siehe Tabelle).
Buchstabe in geheim.txt
Buchstabe im Klartext
e
l
l
e
a
r
r
a
t
s
s
t
Schreiben Sie ein C-Programm, das die Datei geheim.txt einliest und den Klartext auf dem
Bildschirm ausgibt.
5
Herunterladen