Beruflich Dokumente
Kultur Dokumente
/* Dateiname: malloc1.c */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
Erstellen Sie die C-Dateien, wobei Sie viele Code-Passagen aus 2.1 verwenden können.
b) Ändern Sie das Hauptprogramm so, dass zuerst eingelesen wird, wie viele Produkte
eingelesen werden sollen. Die Produktdaten sollen dann wie folgt erstellt werden: der Name
setzt sich aus "Einem Namen" gefolgt von einer fortlaufenden Zahl zusammen. Der Preis wird
mit Hilfe eines Zufallsgenerators gesetzt (siehe Hinweis zu Aufgabe 1.4).
In Aufgabe 1.3 aus Blatt 1 wurde ein char-Stack mit Hilfe eines Arrays mit fester Größe
realisiert. Fügen Sie in den Stack-Modul eine Funktion void create(int n) ein, die einen
char-Stack der Größe n mit Hilfe der Funktion calloc()einrichtet. Zum Testen des
dynamisch eingerichteten Stacks müssen Sie nur Ihr Hauptprogramm aus Aufgabe 1.3 noch
leicht modifizieren.
Die Produktdaten aus Aufgabe 2.2 werden nun in einer Datei gespeichert und sollen in
Aufgabe 2.5 wieder eingelesen werden. Beachten Sie dazu folgenden Hinweis.
Hinweis: Wenn Sie als Dateiname bei der Funktion fopen() einen String wie etwa
"TEST.DAT" angeben, wird die Datei im aktuellen Arbeitsverzeichnis abgelegt. Was das
gerade ist, hängt davon ab, wie Sie Ihr Programm starten, welche Entwicklungsumgebung Sie
benutzen, etc. Falls Sie diese Datei dann im Teil c einlesen wollen, müssen Sie wissen, wo
sich die Datei befindet. Suchen Sie die Datei mit dem Windows-Explorer, damit Sie wissen,
wo solche Dateien abgelegt werden.
Um diese Probleme zu umgehen, ist es üblich, dass 2 Programme (vgl. Aufgabe 2.5) über ein
festes Verzeichnis miteinander kommunizieren, in dem die gemeinsam bearbeiteten Dateien
abgelegt werden. Legen Sie in Ihrem Home-Verzeichnis ein Verzeichnis "Blatt2" an und
verwenden Sie dieses für die folgenden Aufgaben ebenso. Geben Sie dann als String bei
fopen() "Z:/Blatt2/TEST.DAT" an. Da Sie diesen String in mehrere Programmen
benötigen, ist es üblich eine Datei (Name etwa globaldefs.c) zu verwenden, in der der
String definiert wird.
a) In Aufgabe 2.2 haben Sie Module für eine verkettete Liste aus Produkten erstellt. Ändern
Sie das Hauptprogramm ab, so dass jetzt die gefüllte Liste (der Übersicht halber mit 4-5
Elementen) aus Produkten in eine Datei geschrieben wird. Dabei interessieren nur die
Nutzdaten (Produktinfo) und nicht die Verwaltungsdaten (Produktliste). Geben Sie die Liste
auch auf dem Bildschirm aus. Löschen Sie die komplette Liste im Arbeitsspeicher.
Positionieren Sie die Datei an den Anfang, lesen Sie die Produkte wieder ein, in dem Sie
wieder eine verkettete Liste erstellen und geben Sie die neue Liste wieder auf dem Bildschirm
aus.
Basis dieser Aufgabe sind die Moduln und die Datei, die Sie in Aufgabe 2.4 erstellt haben.
Erstellen Sie ein neues Hauptprogramm (Modifikation des Programms aus Aufgabe 2.4) wie
folgt: Erzeugen Sie eine neue Produktbeschreibung und überschreiben Sie in der Datei den 3.
Satz. Erzeugen Sie wiederum eine neue Produktbeschreibung und überschreiben Sie den
ersten Satz. Sie brauchen noch eine neue Produktbeschreibung, die Sie an die Datei anhängen
sollen. Lesen Sie alle Datensätze ein und geben Sie sie auf dem Bildschirm aus, damit Sie
sehen können, ob Ihre Modifikationen in der Datei stehen.
a) Nehmen Sie die Produktdatei aus der vorherigen Aufgabe als Grundlage. Angenommen,
Sie wollen den 3. Satz in der Datei löschen. Überlegen Sie sich zuerst die Vorgehensweise.
Was ist das Problem?
b) Schreiben Sie ein Hauptprogramm, das eine Satznummer einliest und den entsprechenden
Satz aus der Datei löscht.
Es kommt in diesem und den folgenden Aufgabenblättern häufiger vor, dass Sie auf
vorherigen Aufgaben aufsetzen müssen. Dazu gibt es zwei mögliche Vorgehensweisen:
1) Sie legen ein neues Projekt an, legen neue C-Dateien, bzw. H-Dateien an und kopieren
dann mittels Cut+Paste die Quelltexte aus dem alten in das neue Projekt. Beide Projekte
haben dann nachher nichts miteinander zu tun. So haben Sie es wahrscheinlich bisher schon
gemacht.
2) Sie legen ein neues Projekt an. Sie nehmen die existierenden Quelldateien in das neue
Projekt auf über Add -> Add existing item.
Im folgenden Bild links sieht man das neue Projekt depend. Jetzt wählen Sie das Projekt
aus, von dem Sie Quellen übernehmen möchten, im Bild links das Projekt Basic. Es
erscheint das Bild rechts und Sie können die Quellen markieren, die Sie übernehmen wollen.
Es wird keine Kopie gemacht! Diese Quelldateien gibt es nur einmal, nämlich im
Originalprojekt. Änderungen, die Sie jetzt machen, gelten also auch für das Originalprojekt.
Diese Vorgehensweise empfiehlt sich, wenn Sie Dateien unverändert übernehmen wollen,
beispielsweise wenn Sie nur ein neues Hauptprogramm schreiben wollen, das auf Moduln
basiert, die schon in einem anderen Projekt entwickelt wurden. Dann fügen Sie die Moduln
(C- und H-Datei) in das neue Projekt ein, lassen das alte Hauptprogramm im alten Projekt
(Nicht ins neue einfügen!) und schreiben ein neues Hauptprogramm für das neue Projekt. Die
Vorgehensweise empfiehlt sich auch dann, wenn Module nur erweitert werden beispielsweise
um neue Schnittstellenfunktionen. Dann ist es unschädlich, dass die Änderung auch im
Originalprojekt vorgenommen wird.