Registrierung Kalender Mitgliederliste Teammitglieder Suche Häufig gestellte Fragen Zur Startseite

Informatiker Board » Suche » Suchergebnis » Hallo Gast [Anmelden|Registrieren]
Zeige Beiträge 1 bis 3 von 3 Treffern
Autor Beitrag
Thema: Funktionsaufrufe, Dieb und Wächter
Cball123

Antworten: 4
Hits: 6.835
02.01.2016 15:30 Forum: übergreifende Themen


Alles klar, vielen Dank!
Thema: Funktionsaufrufe, Dieb und Wächter
Cball123

Antworten: 4
Hits: 6.835
02.01.2016 14:58 Forum: übergreifende Themen


Danke für die schnelle Antwort! Habe den dritten Wächter abgeändert, der war tatsächlich nicht so gedacht. großes Grinsen Warum MUSS die Funktion Kontrolle mit Pointern aufgerufen werden? Das verstehe ich nicht!

LG
Thema: Funktionsaufrufe, Dieb und Wächter
Cball123

Antworten: 4
Hits: 6.835
Funktionsaufrufe, Dieb und Wächter 02.01.2016 13:44 Forum: übergreifende Themen


Meine Frage:
Hallo liebe Community!

Ich habe im Mathestudium als Nebenfach Info und eine Aufgabe, die mir etwas zu schaffen macht.
In einem Museum werden 10 Goldmünzen, 10 Silbermünzen und 10 Münzen aus Bronze ausgestellt. Herr T. Hief findet die Münzen so schön, dass er sie mit nach Hause nehmen will. Allerdings kann er
nur 10 Münzen auf einmal tragen. Deshalb füllt er seine Taschen zufällig mit 10 Münzen und versucht zu entkommen.
Doch am Ausgang des Museums gibt es 3 Wächter, die die Taschen aller Besucher kontrollieren. Die Wächter kontrollieren immer in der gleichen Reihenfolge. Wenn ein Wächter einen Dieb erwischt, wird er ins
Museum zurückgeschickt, weil die Polizei heute leider wegen eines Fußballspiels keine Zeit hat, sich um Diebe zu kümmern. Da Herr Hief aber so begeistert von den Münzen ist, versucht er solange Münzen mitzunehmen, bis die Wächter ihn durchlassen.

-Der erste Wächter hat eine Schwäche für Gold. Wenn er jemanden erwischt, der mehr Gold- als Silber-
münzen bei sich hat, nimmt der Wächter eine Goldmünze für sich selbst. Alle anderen Goldmünzen, die der Dieb bei sich hat, werden ins Museum zurückgelegt.

-Der zweite Wächter mag Silber sehr gern. Wenn er jemanden erwischt, der mehr Silber- als Bronzemünzen bei sich trägt, behält er eine Silbermünze für sich. Genau wie beim ersten Wächter werden die übrigen
Silbermünzen ins Museum zurückgebracht.

-Der dritte Wächter will nicht, dass jemand genau so viele Gold- wie Silbermünzen hat. Wenn er jemanden erwischt, nimmt auch er sich eine Goldmünze für die eigene Tasche. Danach werden aber alle Münzen des
Diebs ins Museum zurückgebracht.
In allen drei Fällen muss der Dieb ins Museum zurückgehen und er unternimmt einen neuen Versuch. Dabei kann er unter Umständen noch Münzen in seinen Taschen haben - je nachdem, welcher Wächter ihn zuvor
gestoppt hat.

Verwenden Sie für die Wächter Funktionsdeklarationen wie die folgende:
bool waechter1(int *g, int *s, int *b)
Dabei teilt der Rückgabewert mit, ob der Wächter den Dieb zurückschickt.
Wenn ein Wächter bei einer Kontrolle etwas findet, wird ausgegeben, wie die Tasche des Diebs gefüllt ist.Implementieren Sie dafür die Funktion
void inDerTasche(int g, int s, int b).

Ein Aufruf Ihres Programmes könnte so aussehen:
1. Versuch
In der Tasche: 3 Gold, 5 Silber, 2 Bronze
Erwischt von Wächter 2!
2. Versuch
In der Tasche: 7 Gold, 1 Silber, 2 Bronze
Erwischt von Wächter 1!
3. Versuch
In der Tasche: 3 Gold, 3 Silber, 4 Bronze
Erwischt von Wächter 3!
4. Versuch
Entkommen mit 2 Gold, 4 Silber, 4 Bronze

Meine Ideen:
Ich hab schon ein wenig rumprogrammiert, aber sitze jetzt in der Sackgasse. Der Compiler spuckt keinen Error mehr aus, sondern nur noch notes und warnungen. Hier mein Programm. Für einen Tipp wäre ich dankbar!

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

int gold = 10;
int silber = 10;
int bronze = 10;

void inDerTasche(int g, int s, int b)
{
while ( g+s+b != 10) {
if (rand()%3 == 1){
s = s + 1;
silber = silber - 1;
} else if (rand()%3 == 2) {
b = b + 1;
bronze = bronze - 1;
} else {
g = g + 1;
gold = gold - 1;
}
}
}

bool waechter1(int *g, int *s, int *b)
{
if ( *g > *s){
*g = *g - 1;
gold = gold + *g;
}
}

bool waechter2(int *g, int *s, int *b)
{
if ( *s > *b){
*s = *s - 1;
silber = silber + *s;
}
}

bool waechter3(int *g, int *s, int *b)
{
if ( *g == *s);
*g = *g - 1;
gold = gold + *g;
silber = silber + *s;
bronze = bronze + *b;
}

bool kontrolle(int *g, int *s, int *b)
{
return waechter1(g,s,b) || waechter2(g,s,b) || waechter3(g,s,b);
}

int main(void)
{
int g,s,b;
int versuch = 1;
bool entkommen = false;

srand(time(0));

g = s = b = 0;

while (gold+silber+bronze > 0 && !entkommen) {
while (gold+silber+bronze > 0 && g+s+b < 10) {
kontrolle(g,s,b);
}

printf("%d. Versuch\n", versuch++);
entkommen = !kontrolle(&g,&s,&b);
}

printf( "Entkommen mit %d Gold, %d Silber, %d Bronze\n", g, s, b );

return 0;
}
Zeige Beiträge 1 bis 3 von 3 Treffern