MA-3
This commit is contained in:
parent
7b1b698fd3
commit
8a31953c27
42
josephus.c
Normal file
42
josephus.c
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
/*--- #includes ------------------------------------------------------*/
|
||||||
|
#define _CRT_SECURE_NO_WARNINGS //VC++: keine scanf() Warnungen
|
||||||
|
#include <stdio.h>
|
||||||
|
#include "queue.h"
|
||||||
|
|
||||||
|
/*--- #defines -------------------------------------------------------*/
|
||||||
|
|
||||||
|
/*--- Datentypen (typedef) -------------------------------------------*/
|
||||||
|
|
||||||
|
/*--- Prototypen lokaler Funktionen ----------------------------------*/
|
||||||
|
|
||||||
|
/*--- main -----------------------------------------------------------*/
|
||||||
|
int main(void)
|
||||||
|
{
|
||||||
|
int n, z, i=1, nr;
|
||||||
|
|
||||||
|
do {
|
||||||
|
printf("Wie viele Personen: ");
|
||||||
|
nr = scanf("%d", &n); getchar();
|
||||||
|
} while (nr != 1 || n < 0);
|
||||||
|
do {
|
||||||
|
printf("Wie vielte ist auszusondern: ");
|
||||||
|
nr = scanf("%d", &z); getchar();
|
||||||
|
} while (nr != 1 || z < 0);
|
||||||
|
|
||||||
|
for (i = 1; i <= n; i++) // Queue füllen
|
||||||
|
put(i);
|
||||||
|
|
||||||
|
while (!isEmpty()) {
|
||||||
|
for (i = 1; i < z; i++) { // z-1 Zahlen aus Queue lesen
|
||||||
|
if (put(get()) == FALSE) { // und wieder am Ende der Queue einfügen
|
||||||
|
fprintf(stderr, "Fehler beim Einfügen\n");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
printf("%d, ", get()); // z. Zahl aus Queue lesen und ausgeben
|
||||||
|
// Diese Zahl nicht mehr einfügen
|
||||||
|
}
|
||||||
|
printf("\n");
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
100
queue.c
Normal file
100
queue.c
Normal file
@ -0,0 +1,100 @@
|
|||||||
|
/*--- #includes ------------------------------------------------------*/
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include "queue.h"
|
||||||
|
|
||||||
|
/*--- #defines -------------------------------------------------------*/
|
||||||
|
|
||||||
|
/*--- Lokale Datentypen (typedef) ------------------------------------*/
|
||||||
|
|
||||||
|
Jose* head = NULL;
|
||||||
|
Jose* tail = NULL;
|
||||||
|
|
||||||
|
/*--- Modulglobale static Variablen ----------------------------------*/
|
||||||
|
|
||||||
|
/*--- Prototypen lokaler Funktionen ----------------------------------*/
|
||||||
|
|
||||||
|
/*--- Funktionsdefinitionen ------------------------------------------*/
|
||||||
|
|
||||||
|
/*--------------------------------------------------------------------*\
|
||||||
|
* Einfuegen in Liste
|
||||||
|
* Parameter:
|
||||||
|
* zahl fügt die übergebene Zahl 'zahl' am Ende der Liste ein
|
||||||
|
* Return Wert:
|
||||||
|
* TRUE wenn noch genug Speicherplatz vorhanden
|
||||||
|
* FALSE wenn kein Speicherplatz mehr allokiert werden konnte
|
||||||
|
*--------------------------------------------------------------------*/
|
||||||
|
Bool put(int zahl)
|
||||||
|
{
|
||||||
|
Jose* j = (Jose*)malloc(sizeof(Jose));
|
||||||
|
|
||||||
|
if(!j){
|
||||||
|
printf("Es kann kein Speicher mehr allokiert werden!");
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
j->value = zahl;
|
||||||
|
j->next = NULL;
|
||||||
|
j->prev = tail;
|
||||||
|
|
||||||
|
if(tail)
|
||||||
|
tail->next = j;
|
||||||
|
else
|
||||||
|
head = j;
|
||||||
|
|
||||||
|
tail = j;
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*--------------------------------------------------------------------*\
|
||||||
|
* Auslesen aus Liste
|
||||||
|
* Parameter:
|
||||||
|
* keine
|
||||||
|
* Return Wert:
|
||||||
|
* Zahl am Anfang der Liste oder aber QLEER, wenn Liste leer ist.
|
||||||
|
*--------------------------------------------------------------------*/
|
||||||
|
int get(void)
|
||||||
|
{
|
||||||
|
int valueHead;
|
||||||
|
Jose* tmp;
|
||||||
|
|
||||||
|
if(head == NULL)
|
||||||
|
return QLEER;
|
||||||
|
|
||||||
|
tmp = head;
|
||||||
|
valueHead = tmp->value;
|
||||||
|
head = head->next;
|
||||||
|
|
||||||
|
if (head == NULL) {
|
||||||
|
tail = NULL;
|
||||||
|
} else {
|
||||||
|
head->prev = NULL;
|
||||||
|
}
|
||||||
|
free(tmp);
|
||||||
|
return valueHead;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*--------------------------------------------------------------------*\
|
||||||
|
* Pruefen der Liste
|
||||||
|
* Parameter:
|
||||||
|
* keine
|
||||||
|
* Return Wert:
|
||||||
|
* liefert TRUE, wenn Queue leer ist, sonst FALSE
|
||||||
|
*--------------------------------------------------------------------*/
|
||||||
|
Bool isEmpty(void)
|
||||||
|
{
|
||||||
|
if(head == NULL)
|
||||||
|
return TRUE;
|
||||||
|
else
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*int main(){
|
||||||
|
put(69);
|
||||||
|
put(70);
|
||||||
|
put(80);
|
||||||
|
get();
|
||||||
|
get();
|
||||||
|
get();
|
||||||
|
get();
|
||||||
|
}*/
|
57
queue.h
Normal file
57
queue.h
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
#ifndef QUEUE_H
|
||||||
|
#define QUEUE_H
|
||||||
|
|
||||||
|
/*--- #includes ------------------------------------------------------*/
|
||||||
|
#include <limits.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
/*--- #defines -------------------------------------------------------*/
|
||||||
|
#define TRUE 1
|
||||||
|
#define FALSE 0
|
||||||
|
#define QLEER INT_MIN
|
||||||
|
|
||||||
|
/*--- Datentypen (typedef) -------------------------------------------*/
|
||||||
|
typedef int Bool;
|
||||||
|
|
||||||
|
typedef struct Jose {
|
||||||
|
int value;
|
||||||
|
struct Jose* next;
|
||||||
|
struct Jose* prev;
|
||||||
|
} Jose;
|
||||||
|
|
||||||
|
extern Jose* head;
|
||||||
|
extern Jose* tail;
|
||||||
|
/*--- Prototypen globaler Funktionen ---------------------------------*/
|
||||||
|
|
||||||
|
/*--------------------------------------------------------------------*\
|
||||||
|
* Einfuegen in Liste
|
||||||
|
* Parameter:
|
||||||
|
* zahl fügt die übergebene Zahl 'zahl' am Ende der Liste ein
|
||||||
|
* Return Wert:
|
||||||
|
* TRUE wenn noch genug Speicherplatz vorhanden
|
||||||
|
* FALSE wenn kein Speicherplatz mehr allokiert werden konnte
|
||||||
|
* Hinweis:
|
||||||
|
* - dynamische Verwaltung von Speicher muss mit malloc() und free()
|
||||||
|
* durchgeführt werden; dynamische Arrays sind nicht erlaubt !!!
|
||||||
|
*--------------------------------------------------------------------*/
|
||||||
|
Bool put(int zahl);
|
||||||
|
|
||||||
|
/*--------------------------------------------------------------------*\
|
||||||
|
* Auslesen aus Liste
|
||||||
|
* Parameter:
|
||||||
|
* keine
|
||||||
|
* Return Wert:
|
||||||
|
* Zahl am Anfang der Liste oder aber QLEER, wenn Liste leer ist.
|
||||||
|
*--------------------------------------------------------------------*/
|
||||||
|
int get(void);
|
||||||
|
|
||||||
|
/*--------------------------------------------------------------------*\
|
||||||
|
* Pruefen der Liste
|
||||||
|
* Parameter:
|
||||||
|
* keine
|
||||||
|
* Return Wert:
|
||||||
|
* liefert TRUE, wenn Queue leer ist, sonst FALSE
|
||||||
|
*--------------------------------------------------------------------*/
|
||||||
|
Bool isEmpty(void);
|
||||||
|
|
||||||
|
#endif /*QUEUE_H*/
|
Loading…
x
Reference in New Issue
Block a user