Add assignments for second lecture.
This commit is contained in:
parent
bfd1ec33f8
commit
6131fba41d
4
.gitignore
vendored
4
.gitignore
vendored
@ -1 +1,3 @@
|
||||
*.exe
|
||||
*.exe
|
||||
*.o
|
||||
*.so
|
80
01_modultechnik/main.c
Normal file
80
01_modultechnik/main.c
Normal file
@ -0,0 +1,80 @@
|
||||
/*
|
||||
* Vervollständigen Sie das untenstehende Programm, indem Sie das Modul namesarchive in der
|
||||
* namesarchive.h bzw. namesarchive.c implementieren.
|
||||
* Die öffentlichen Schnittstellen mit genaueren Details entnehmen Sie der namesarchive.h.
|
||||
* Das Programm soll das Modul als dynamische Laufzeitbibliothek nutzen.
|
||||
*
|
||||
*/
|
||||
|
||||
#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];
|
||||
|
||||
while((inputName("Namen hinzufuegen: ", buffer, MAX_BUFFER_LEN) != NULL) && (strlen(buffer) > 0))
|
||||
{
|
||||
if(addName(buffer))
|
||||
printf("%s wurde dem Archiv hinzugefuegt.\n", buffer);
|
||||
else
|
||||
printf("Fehler! %s konnte nicht hinzugefuegt werden.\n", buffer);
|
||||
}
|
||||
|
||||
printf("\nNach Eingabe:\n");
|
||||
printNames();
|
||||
|
||||
printf("\nNach Sortierung:\n");
|
||||
sortNames();
|
||||
printNames();
|
||||
printf("\n");
|
||||
|
||||
while((inputName("Namen sortiert hinzufuegen: ", buffer, MAX_BUFFER_LEN) != NULL) && (strlen(buffer) > 0))
|
||||
{
|
||||
if(addNameSorted(buffer))
|
||||
printf("%s wurde dem Archiv hinzugefuegt.\n", buffer);
|
||||
else
|
||||
printf("Fehler! %s konnte nicht hinzugefuegt werden.\n", buffer);
|
||||
}
|
||||
|
||||
printf("\nNach sortierter Eingabe:\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();
|
||||
|
||||
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
01_modultechnik/makefile
Normal file
16
01_modultechnik/makefile
Normal 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
|
4
01_modultechnik/namesarchive.c
Normal file
4
01_modultechnik/namesarchive.c
Normal file
@ -0,0 +1,4 @@
|
||||
#include "namesarchive.h"
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
22
01_modultechnik/namesarchive.h
Normal file
22
01_modultechnik/namesarchive.h
Normal file
@ -0,0 +1,22 @@
|
||||
#ifndef NAMEARCHIVE_H
|
||||
#define NAMEARCHIVE_H
|
||||
|
||||
// Maximale Namenslänge
|
||||
#define MAX_NAME_LEN 10
|
||||
|
||||
// Maximale Anzahl an Namen
|
||||
#define MAX_NAMES 100
|
||||
|
||||
// Fügt einen Namen hinzu. Im Fehlerfall (Archiv ist voll) soll 0, ansonsten 1 zurückgegeben werden.
|
||||
// Ist der angegebene Name länger als die zulässige Namenslänge, wird der Name abgeschnitten hinzugefügt. Rückgabe ist dann 1.
|
||||
int addName(const char *name);
|
||||
// Wie addName. Fügt Namen aber direkt sortiert hinzu. Voraussetzung ist ein bereits sortiertes Archiv.
|
||||
int addNameSorted(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);
|
||||
// Sortiert die Namen im Archiv aufsteigend.
|
||||
void sortNames();
|
||||
// Gibt die Namen zeilenweise aus.
|
||||
void printNames();
|
||||
|
||||
#endif
|
Loading…
x
Reference in New Issue
Block a user