wachterprogramm



  • hellö zusammen !

    Und zwar soll ich ein C-Programm schreiben mit folgenden Aufgabenstellungen:

    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äch- ter 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 so lange Münzen mitzunehmen, bis die Wächter ihn durchlassen.
    • DerersteWächterhateineSchwächefürGold.Wennerjemandenerwischt,dermehrGold-alsSilber- 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 Bronze- mü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 je- manden 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)
    Auf der Webseite zur Vorlesung finden Sie ein Rahmenprogramm waechter_rahmen.c, in dem Sie die
    fehlende Funktionalität an den markierten Stellen ergänzen können. 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
    Hinweise:
    • Für die Münzen, die sich im Museum befinden, verwendet das Rahmenprogramm globale Variablen.
    • UmzufälligeineMünzeauszuwählen,könnenSierand()%3verwenden,was0,1oder2liefert.Bei0 wird eine Goldmünze genommen, bei 1 eine Silbermünze und bei 2 eine Bronzemünze. Für die Funktion rand() wird stdlib.h benötigt.
    • Damit bei verschiedenen Programmstarts unterschiedliche Verläufe erzeugt werden, initialisiert das Rahmenprogramm den Zufallszahlengenerator mit srand(time(0)); direkt nach den Variablen- deklarationen in der Hauptfunktion. Dafür wird time.h benötigt.

    Mein Ansatz ist der hier ...

    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)
    {
    do
    {
    printf("\nBitte max 10 Muenzen mitnehmen");
    }
    while(g+s+b<0);
    printf("\nDer Dieb besitzt %i Muenzen",g+s+b);

    }

    bool waechter1(int *g, int *s, int *b)
    {
    if (g<s)
    {
    printf("\nDer Dieb ist mit allen Muenzen entkommen",*g,*s);
    scanf("%d");
    }
    else(g>s)
    {
    printf("\nDer Dieb besitzt mehr Goldmuenzen als Silbermuenzen",*g,*s);
    scanf("%i");
    }
    while(--g)

    }

    bool waechter2(int *g, int *s, int *b)
    {
    if (s<b)
    {
    printf("\nDer Dieb ist mit allen Muenzen entkommen",*s,*b);
    scanf("%d");
    }
    else(s>b)
    {
    printf("\nDer Dieb besitzt mehr Silbermuenzen als Bronzemuenzen",*s,*b);
    scanf("%i");
    }
    while(--s)

    }

    bool waechter3(int *g, int *s, int *b)
    {
    if (g!=s)
    {
    printf("\nDer Dieb ist mit allen Muenzen entkommen",*g,*s);
    scanf("%d");
    }
    else(g==s)
    {
    printf("\nDer Dieb besitzt genauso viele Goldmuenzen wie Silbermuenzen",*g,*s);
    scanf("%i");
    }
    while(*g+*s+*b==0)
    }

    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)
    {
    rand();
    {
    for(0)
    { printf("\nEine Goldmuenze wird genommen",g);
    }
    for (1)
    { printf("\nEine Silbermuenze wird genommen",s);
    }
    for (2)
    {
    printf("\nEine Bronzemuenze wird genommen",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;
    }

    könnte mir jemand sagen, wo mein Fehler liegt?
    Wäre echt lieb... 🙂 🙂 🙂 🙂



  • Das Programm ist (von der mangelhaften Präsentation mal abgesehen) ja wohl eine ziemliche Katastrophe... Völlig unsinnige Schleifen, printf falsch benutzt, Bedingungen direkt hinter else und sicher mehr.



  • gcc -Wall (also mit aktivierten Warnungen, ganz wichtig!):

    f.c: In function 'waechter1':
    f.c:26:1: warning: too many arguments for format [-Wformat-extra-args]
    f.c:27:1: warning: format '%d' expects a matching 'int *' argument [-Wformat]
    f.c:29:5: warning: statement with no effect [-Wunused-value]
    f.c:30:1: error: expected ';' before '{' token
    f.c: In function 'waechter2':
    f.c:42:1: warning: too many arguments for format [-Wformat-extra-args]
    f.c:43:1: warning: format '%d' expects a matching 'int *' argument [-Wformat]
    f.c:45:5: warning: statement with no effect [-Wunused-value]
    f.c:46:1: error: expected ';' before '{' token
    f.c: In function 'waechter3':
    f.c:58:1: warning: too many arguments for format [-Wformat-extra-args]
    f.c:59:1: warning: format '%d' expects a matching 'int *' argument [-Wformat]
    f.c:61:5: warning: statement with no effect [-Wunused-value]
    f.c:62:1: error: expected ';' before '{' token
    f.c: In function 'main':
    f.c:90:1: warning: statement with no effect [-Wunused-value]
    f.c:90:6: error: expected ';' before ')' token
    f.c:90:6: error: expected expression before ')' token
    f.c:91:1: warning: too many arguments for format [-Wformat-extra-args]
    f.c:93:1: warning: statement with no effect [-Wunused-value]
    f.c:93:7: error: expected ';' before ')' token
    f.c:93:7: error: expected expression before ')' token
    f.c:94:1: warning: too many arguments for format [-Wformat-extra-args]
    f.c:96:1: warning: statement with no effect [-Wunused-value]
    f.c:96:7: error: expected ';' before ')' token
    f.c:96:7: error: expected expression before ')' token
    f.c:98:1: warning: too many arguments for format [-Wformat-extra-args]
    f.c:109:1: error: expected declaration or statement at end of input
    f.c:109:1: error: expected declaration or statement at end of input
    f.c:109:1: error: expected declaration or statement at end of input
    f.c:109:1: warning: control reaches end of non-void function [-Wreturn-type]
    f.c: In function 'waechter3':
    f.c:67:1: warning: control reaches end of non-void function [-Wreturn-type]
    f.c: In function 'waechter2':
    f.c:52:1: warning: control reaches end of non-void function [-Wreturn-type]
    f.c: In function 'waechter1':
    f.c:36:1: warning: control reaches end of non-void function [-Wreturn-type]
    

Anmelden zum Antworten