WinFuture-Forum.de: Zechpreller 1.0 (juxprogramm) - WinFuture-Forum.de

Zum Inhalt wechseln

Nachrichten zum Thema: Entwicklung
Seite 1 von 1

Zechpreller 1.0 (juxprogramm) Programmvorstellung


#1 Mitglied ist offline   def 

  • Gruppe: aktive Mitglieder
  • Beiträge: 429
  • Beigetreten: 19. Dezember 06
  • Reputation: 7
  • Geschlecht:Männlich

  geschrieben 07. März 2008 - 23:00

In einem Buch gab es mal eine nette Anekdote über ein paar Studenten, die einen Wirt geprellt haben, die ich hier aber nicht wörtlich wiedergeben darf (Urheberrecht), deshalb fasse ich das jetzt nochmal mit eigenen Worten zusammen. Leider geht dadurch viel von der ursprünglichen Atmosphäre der Geschichte verloren, aber damit müssen wir halt leben.
Die 17 Studenten hatten zusammen mit dem Wirt ein größeres Mahl eingenommen und wollten sich vor der Zeche drücken. Also luden sie den Wirt zu einem Spiel ein, auf das dieser sich einließ. Dabei sollte nur einer die gesamte Zeche zahlen (einschließlich Wirt), und dieser sollte ausgelost werden, und zwar erhielt jeder "siebte" am Tisch ein "Freilos" und verließ den Raum. Gezählt wurde reihum nach folgendem Schema (der Wirt saß dabei an Position Nr.9): Der Student an Position Nr.1, der den Vorschlag gemacht hatte, fing an mit "eins", der Student an Position Nr.2 mit "zwei" usw., so dass der Student an Position Nr. 7 gehen durfte. Dann zählte der Student an Position Nr.8 wieder "eins", Der Wirt an Position Nr.9 zählte "zwei", der nächste Student an Position Nr.10 "drei" usw. Es ging reihum weiter, so dass nach dem Studenten an Position Nr.18 dann beim Studenten an Position Nr.1 weitergezählt wurde.
Es kam, wie es kommen musste: Der Wirt blieb über und damit auf seinen Kosten sitzen.

Wenn Ihr auch mal auf diese Weise die Zeche prellen wollt, hilft Euch Zechpreller 1.0. Es ist in C geschrieben (C99). Mit den #define's am Anfang könnt Ihr die Parameter vorher anpassen: Wieviele Personen seid Ihr, wo sitzt der Wirt, und wird bis 7 oder bis zu einer anderen Zahl gezählt?
Das Programm ist natürlich nicht berauschend geschrieben, aber es ist ja auch noch Version 1.0. Passt es für Eure Zwecke an, so könnte man z.B. die Parameter als Argumente in der Kommandozeile übergeben.
Vielleicht sind auch noch Fehler drin, aber das werdet Ihr ja merken!
Nun ja, in jedem Fall viel Spaß mit dem Programm. :wink:

Viele Grüße
Def

/* Zechpreller 1.0 (Juxprogramm)
 * This software is © 2008 by Def and subject to the following license:
 *
 *            DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
 *                    Version 2, December 2004
 *
 *  Copyright © 2004 Sam Hocevar
 *   14 rue de Plaisance, 75014 Paris, France
 *  Everyone is permitted to copy and distribute verbatim or modified
 *  copies of this license document, and changing it is allowed as long
 *  as the name is changed.
 *
 *             DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
 *    TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
 *
 *   0. You just DO WHAT THE FUCK YOU WANT TO.
 *
 * ---
 *
 * getestet unter Linux (x86) mit gcc (GCC) 4.1.2 20070925 (Red Hat 4.1.2-33).
 * Benötigt für gcc die Option -std=c99
 * Wenn man keinen C99-Compiler hat, einfach mal die Zeile
 * #include <stdbool.h>
 * entfernen und es als C++-Programm kompilieren, was auch gehen sollte. */

#include <stdbool.h>
#include <stdio.h>
#include <stdlib.h>

#define ANFANGS_ANZAHL_PERSONEN 18 // einschliesslich Wirt
#define WIRT 9
#define JEDER_WIEVIELTE 7

inline int gibAnzahlPersonen(const int *Tisch)
{
	int Anzahl = 0;
	for(int i=1; i<=ANFANGS_ANZAHL_PERSONEN; i++)
	{
		if(Tisch[i] == true)
			++Anzahl;
	}
	return Anzahl;
}

inline void zeigePersonen(const int *Tisch)
{
	for(int i=1; i<=ANFANGS_ANZAHL_PERSONEN; i++)
		if(Tisch[i] == true)
			printf("%d ", i);
	putchar('\n');
}

inline int inkrementierePersonenzaehler(int i)
{
	if(i == ANFANGS_ANZAHL_PERSONEN)
		return 1;
	else
		return i+1;
}

int main(void)
{
	int i; // Zaehler zum Durchsuchen des Arrays bzw. von 1 bis 7 zu zaehlen
	int j = 1; // Zaehler fuers Freilos, Nr.1 beginnt zu zaehlen 
	int Tisch[ANFANGS_ANZAHL_PERSONEN + 1]; // +1 wg. der Nummerierung aus dem Buch

	for(i=1; i<=ANFANGS_ANZAHL_PERSONEN; i++)
		Tisch[i] = true; // Alle Personen am Tisch

	printf("Der geprellte Wirt\n");
	printf("Der Wirt sitzt auf Position %d!\n\n", WIRT);

	// Freilose vergeben!
	while(gibAnzahlPersonen(Tisch)>1) // bis nur noch einer am Tisch sitzt
	{
		printf("%d Personen am Tisch!\n", gibAnzahlPersonen(Tisch));
		zeigePersonen(Tisch);

		while(Tisch[j]==false)
			j = inkrementierePersonenzaehler(j); // leere Plaetze ignorieren

		for(i=1; i<JEDER_WIEVIELTE; i++) // von 1 bis 7 zaehlen
		{
			while(Tisch[inkrementierePersonenzaehler(j)]==fals
e)
				j = inkrementierePersonenzaehler(j); // leere Plaetze ignorieren
			j = inkrementierePersonenzaehler(j);
		}
		Tisch[j] = false;
		printf("Nr. %d hat ein Freilos!\n", j);
		j = inkrementierePersonenzaehler(j);
		getchar();
	}
	putchar('\n');

	if(Tisch[WIRT] == true)
		printf("Es hat den Wirt erwischt!\n");
	else
	{
		printf("Es hat den folgenden Gast erwischt: ");
		zeigePersonen(Tisch);
	}

	return EXIT_SUCCESS;
}

Dieser Beitrag wurde von def bearbeitet: 08. März 2008 - 01:22
Änderungsgrund: Sorry, keine Buchzitate! :(

Eingefügtes Bild
0

Anzeige



Thema verteilen:


Seite 1 von 1

1 Besucher lesen dieses Thema
Mitglieder: 0, Gäste: 1, unsichtbare Mitglieder: 0