/*	Programm zum Ausdrucken einer Wahrheitstabelle für das "Tardy-Bus-Problem"	*/

#include <stdio.h>
#define wa1 (!a||!d||c)
#define wa2 (!c||!f||!e)
#define wa3 (b||(f&&!e))
#define a1 (!a||!d||b)
#define a2 (!c||!e||b)
#define a3 (!d||b||!a||!c)
#define a4 (!d||b||!a)
#define a5 (c||(!e&&!b))
#define a6 ((!d&&!c)||f)
#define a7 (!b||!f||!e)
#define a8 (!e||!a||!d||!f)

int main(void){
	char a,b,c,d,e,f, as[9]; short int i;
	a=b=c=d=e=f=0; as[1]=as[2]=as[3]=as[4]=as[5]=as[6]=as[7]=as[8]=1;

	printf("Das Tardy-Bus-Problem\n");
	printf("=====================\n\n");
	printf(	"Boolesche Operanden:	(a) Bill nimmt den Bus;\n"
		"			(b) Bill erhält den Job;\n"
		"			(c) Bill verpasst seine Verabredung;\n"
		"			(d) Der Bus verspätet sich;\n"
		"			(e) Bill sollte nach Hause gehen;\n"
		"			(f) Bill fühlt sich nieder geschlagen.\n\n");
	printf(	"Wahre Annahmen:		(wa1) a->d->c;\n"
		"			(wa2) c&&f->!e;\n"
		"			(wa3) !b->f&&!e.\n\n");
	printf(	"Zu pruefen:		(a1) a->d->b;\n"
		"			(a2) (c&&e)->b;\n"
		"			(a3) d->!b->(!a||!c);\n"
		"			(a4) (d&&!b)->!a;\n"
		"			(a5) !c->(!e&&!b);\n"
		"			(a6) (d||c)->f;\n"
		"			(a7) b->(!f||!e);\n"
		"			(a8) (e&&a)->d->!f.\n\n\n");
	printf(	"Tabelle gibt nur die Zeilen aus, fuer die wa1=wa2=wa3 = true\n"
		"============================================================\n\n");
	printf("a b c d e f | wa1 wa2 wa3 | a1 a2 a3 a4 a5 a6 a7 a8\n");
	printf("---------------------------------------------------\n");
	for(a=0; a<=1; a++)
	 for(b=0; b<=1; b++)
	  for(c=0; c<=1; c++)
	   for(d=0; d<=1; d++)
	    for(e=0; e<=1; e++)
	     for(f=0; f<=1; f++){
	       if(wa1 && wa2 && wa3){
		printf("%i %i %i %i %i %i | ", a, b, c, d, e, f);
	     	printf(" %i  ", wa1);  	printf(" %i  ", wa2);	printf(" %i  | ", wa3);

		if(as[1]) as[1]=a1;	printf("%i  ", a1);
		if(as[2]) as[2]=a2;	printf("%i  ", a2);
		if(as[3]) as[3]=a3;	printf("%i  ", a3);
		if(as[4]) as[4]=a4;	printf("%i  ", a4);
		if(as[5]) as[5]=a5;	printf("%i  ", a5);
		if(as[6]) as[6]=a6;	printf("%i  ", a6);
		if(as[7]) as[7]=a7;	printf("%i  ", a7);
		if(as[8]) as[8]=a8;	printf("%i\n", a8);
	       }
	     }
	printf("=============================================================\n");
	printf("=> Somit sind folgende Aussagen richtig:");
	for(i=1; i<=8; ++i)
		if(as[i]) printf(" a%i", i);
	printf(".\n\n");

	return 0;
}

