Add module for structs.

This commit is contained in:
paulusja committed 2026-10-29 11:15:37 +01:00
1 parent 45336b083c
commit a385f4d623
2 files changed
+118

No files matched your search

+91
View File
@@ -0,0 +1,91 @@
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "namesarchive.h"
static Person persons[MAX_PERSONS];
static unsigned int numberOfPersons = 0;
static int findPersonIdx(Person person);
static void removePersonByIdx(unsigned int idx);
static int compareNames(const void *arg1, const void *arg2);
// 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 addPerson(const Person person)
{
if(numberOfPersons < MAX_PERSONS)
{
persons[numberOfPersons] = person;
numberOfPersons++;
return 1;
}
else
return 0;
}
// Entfernt den angegebenen Namen. Gibt bei Erfolg 1 zurück, ansonsten 0 (Name konnte nicht gefunden werden).
int removePerson(const Person person)
{
int personIdx = findPersonIdx(person);
if(personIdx >= 0)
{
removePersonByIdx(personIdx);
return 1;
}
else
return 0;
}
int findPersonIdx(const Person person)
{
for(int i = 0; i < numberOfPersons; i++)
{
if(strcmp(persons[i].name, person.name) == 0 && persons[i].age == person.age)
{
return i;
}
}
return -1;
}
void removePersonByIdx(unsigned int idx)
{
for(unsigned i = idx+1; i < numberOfPersons; i++)
{
persons[i] = persons[i+1];
}
numberOfPersons--;
}
int comparePersons(const void *arg1, const void *arg2)
{
const Person person1 = *((const Person *)arg1);
const Person person2 = *((const Person *)arg2);
int nameResult = strcmp(person1.name, person2.name);
if(nameResult == 0)
{
return (int)person1.age - (int)person2.age;
}
else
return nameResult;
}
// Sortiert die Namen im Archiv aufsteigend.
void sortPersons()
{
qsort(persons, numberOfPersons, sizeof(persons[0]), comparePersons);
}
// Gibt die Namen zeilenweise aus.
void printPersons()
{
for(int i = 0; i < numberOfPersons; i++)
{
printf("%s: %u\n", persons[i].name), persons[i].age;
}
}
+27
View File
@@ -0,0 +1,27 @@
#ifndef NAMEARCHIVE_H
#define NAMEARCHIVE_H
// Maximale Namenslänge
#define MAX_NAME_LEN 10
// Maximale Anzahl an Namen
#define MAX_PERSONS 100
typedef struct
{
char name[MAX_NAME_LEN];
unsigned int age;
} Person;
// 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 addPerson(const Person person);
int removeName(const Person person);
void sortPersons();
// Gibt die Namen zeilenweise aus.
void printPersons();
#endif