Add first assignments.

This commit is contained in:
paulusja committed 2026-10-07 13:48:02 +02:00
1 parent 6964824711
commit cc5d131072
13 files changed
+525

No files matched your search

+80
View File
@@ -0,0 +1,80 @@
/*
* Verwenden Sie Ihre Lösung für das Namensarchiv mittels eines binären Suchbaums. Ergänzen Sie das Modul um zwei Funktionen,
* mit denen das bestehende Archiv um Namen erweitert wird, die in einer vorhandenen Textdatei stehen, bzw. den Inhalt des Archivs
* in eine bestimmte Textdatei sortiert speichern. Details entnehmen Sie wieder der namesarchive.h.
*
* Welcher Nachteil ergibt sich für einen binären Suchbaum, wenn beliebige Namen zunächst aus einer Datei eingelesen werden,
* sortiert wieder in Datei geschrieben werden und anschließend wieder neu aus der Datei geladen werden?
* (Also im Prinzip bei der zweiten Ausführung des untenstehenden Programms)
*
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "namesarchive.h"
#define MAX_BUFFER_LEN 100
char *inputName(const char *promptText, char *buffer, unsigned int bufferSize);
int main()
{
char buffer[MAX_BUFFER_LEN];
const char *filePath = "names.txt";
if(!loadArchive(filePath))
{
printf("Die Textdatei %s konnte nicht geladen werden.\n", filePath);
}
printf("\nNach Laden:\n");
printNames();
printf("\n");
while((inputName("Namen entfernen: ", buffer, MAX_BUFFER_LEN) != NULL) && (strlen(buffer) > 0))
{
if(removeName(buffer))
printf("%s wurde aus dem Archiv entfernt.\n", buffer);
else
printf("Fehler! %s konnte nicht gefunden werden.\n", buffer);
}
printf("\nNach Entfernen:\n");
printNames();
printf("\n");
if(saveArchive(filePath))
{
printf("Archiv erfolgreich unter %s gespeichert.\n", filePath);
}
else
{
printf("Fehler beim Speichern des Archivs unter %s.\n", filePath);
}
printf("\nGebe Speicher frei ...\n");
clearArchive();
printf("Beende Programm ...\n");
return EXIT_SUCCESS;
}
char *inputName(const char *promptText, char *buffer, unsigned int bufferSize)
{
printf("%s", promptText);
if(fgets(buffer, bufferSize, stdin) != NULL)
{
if(buffer[strlen(buffer)-1] == '\n')
buffer[strlen(buffer)-1] = '\0';
else
while(getchar() != '\n') {}
return buffer;
}
else
{
return NULL;
}
}
+16
View File
@@ -0,0 +1,16 @@
namesarchive: main.o libnamesarchive.so
gcc -Wall -o namesarchive main.o libnamesarchive.so
main.o: main.c
gcc -c -Wall main.c
namesarchive.o: namesarchive.c namesarchive.h
gcc -c -Wall namesarchive.c
libnamesarchive.so: namesarchive.o
gcc -shared -o libnamesarchive.so namesarchive.o
clean:
del /f namesarchive.exe *.o *.so
# Comment line above and uncomment line below for UNIX systems
# rm -f namesarchive *.o *.so
+40
View File
@@ -0,0 +1,40 @@
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "namesarchive.h"
// Fügt einen Namen hinzu. Im Fehlerfall soll 0, ansonsten 1 zurückgegeben werden.
int addName(const char *name)
{
return 0;
}
// Entfernt den angegebenen Namen. Gibt bei Erfolg 1 zurück, ansonsten 0 (Name konnte nicht gefunden werden).
int removeName(const char *name)
{
return 0;
}
// Gibt die Namen zeilenweise aus.
void printNames()
{
}
// Leert das Archiv
void clearArchive()
{
}
// Lädt den Inhalt einer Textdatei zeilenweise in das Archiv. Gibt 1 bei Erfolg zurück.
int loadArchive(const char *path)
{
return 0;
}
// Speichert das Archiv zeilenweise in einer Textdatei. Gibt 1 bei Erfolg zurück.
int saveArchive(const char *path)
{
return 0;
}
+20
View File
@@ -0,0 +1,20 @@
#ifndef NAMEARCHIVE_H
#define NAMEARCHIVE_H
#define MAX_NAME_LEN 100
// Fügt einen Namen hinzu. Im Fehlerfall (kein Speicher mehr) soll 0, ansonsten 1 zurückgegeben werden.
// Der Name soll in beliebiger Länge gespeichert werden können.
int addName(const char *name);
// Entfernt den angegebenen Namen. Gibt bei Erfolg 1 zurück, ansonsten 0 (Name konnte nicht gefunden werden).
int removeName(const char *name);
// Gibt die Namen zeilenweise aus.
void printNames();
// Leert das Archiv
void clearArchive();
// Lädt den Inhalt einer Textdatei zeilenweise in das Archiv. Gibt 1 bei Erfolg zurück.
int loadArchive(const char *path);
// Speichert das Archiv zeilenweise in einer Textdatei. Gibt 1 bei Erfolg zurück.
int saveArchive(const char *path);
#endif