/**********************************************************************\ * Kurzbeschreibung: * Realisiert das Josephus Spiel zum Test einer Queue * * Datum: Autor: * 30.9.2015 Prof. Dr. Helmut Herold * \**********************************************************************/ /*--- #includes ------------------------------------------------------*/ #define _CRT_SECURE_NO_WARNINGS #include #include "queue.h" /*--- #defines -------------------------------------------------------*/ /*--- Datentypen (typedef) -------------------------------------------*/ /*--- Prototypen lokaler Funktionen ----------------------------------*/ /*--- main -----------------------------------------------------------*/ int main(void) { int n, z, i=1, nr; // Variablen für Personenanzahl, Schrittweite, Zähler, Rückgabewert scanf do { printf("Wie viele Personen: "); // Benutzer nach Anzahl der Personen fragen nr = scanf("%d", &n); getchar(); // Eingabe lesen, Rückgabewert speichern, Zeilenumbruch entfernen } while (nr != 1 || n < 0); // Wiederholen, falls ungültige Eingabe do { printf("Wie vielte ist auszusondern: "); // Benutzer nach Schrittweite fragen nr = scanf("%d", &z); getchar(); // Eingabe lesen, Rückgabewert speichern, Zeilenumbruch entfernen } while (nr != 1 || z < 0); // Wiederholen, falls ungültige Eingabe for (i = 1; i <= n; i++) // Queue füllen put(i); // Personen mit Nummer 1 bis n in die Queue einfügen while (!isEmpty()) { // Solange noch Personen in der Queue sind for (i = 1; i < z; i++) { // z-1 Personen überspringen if (put(get()) == FALSE) { // Erste Person aus der Queue nehmen und wieder hinten einfügen fprintf(stderr, "Fehler beim Einfügen\n"); // Fehlerausgabe, falls put fehlschlägt return 1; // Programm mit Fehlercode beenden } } printf("%d, ", get()); // Die z-te Person aus der Queue nehmen und ausgeben (ausscheiden) // Diese Person wird nicht mehr eingefügt } printf("\n"); // Zeilenumbruch nach Ausgabe aller ausgeschiedenen Personen return 0; } //gcc -c queue.c -o queue.o //ar rcs libqueue.a queue.o //gcc josephus.c -L. -lqueue -o josephus