Anonymní profil Barbora – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Anonymní profil Barbora – Programujte.comAnonymní profil Barbora – Programujte.com

 

Příspěvky odeslané z IP adresy 178.40.120.–

Barbora
C / C++ › zadanie mi nefunguje, neviem…
31. 3. 2017   #215408

 zdravim vie mi niekto pomocť a povedať mi prečo to nepočíta tak ako má? vopred dakujem za pomoc. som už z toho zufala.

//mnozstvo minci za jednu rudu
#define MINCA_ZA_RUDU1   1

//mnozstvo minci za jednu rudu ak nie je unaveny
#define MINCA_ZA_RUDU2     2

//maximalne mnozstvo jedla v inventari trpaslika
#define INV_MAX_JEDLO   10

//maximalna unava, po ktorej uz nepracuje
#define MAX_UNAVA      10

//pocet trpaslikov
#define POCET_TRPASLIKOV    1

//maximanla nuda
#define MAX_NUDA    10

//maximalne mnoystvo piva
#define MAX_PIVO    20

#include "defines.h"
#include <stdio.h>
#include <time.h>

typedef struct
{
    int jedlo;
    int pivo;
    int ruda;
    int mince;
} CENTRALNY_SKLAD;

typedef struct
{
    int jedlo[INV_MAX_JEDLO];
    int pivo[MAX_PIVO];
    int unava[MAX_UNAVA];
    int nuda[MAX_NUDA];
} INVENTAR_STAV;

typedef enum
{
    ODDYCH = 1,
    BANIK = 2,
    REMESELNIK = 3,
    KUCHAR = 4,
    PIVOVARNIK = 5
} TypAkcie;

void trpaslik_generator (INVENTAR_STAV *inventar_stav, CENTRALNY_SKLAD *centralny_sklad);
void vypis_skladu_stav(INVENTAR_STAV *inventar_stav, CENTRALNY_SKLAD *centralny_sklad);
int oddych(INVENTAR_STAV *inventar_stav, CENTRALNY_SKLAD *centralny_sklad);
int banik (INVENTAR_STAV *inventar_stav, CENTRALNY_SKLAD *centralny_sklad);
int remeselnik (INVENTAR_STAV *inventar_stav, CENTRALNY_SKLAD *centralny_sklad);
int kuchar(INVENTAR_STAV *inventar_stav, CENTRALNY_SKLAD *centralny_sklad);
int pivovarnik(INVENTAR_STAV *inventar_stav, CENTRALNY_SKLAD *centralny_sklad);
int centralna_distribucna_funkcia(TypAkcie typakcie,INVENTAR_STAV *inventar_stav, CENTRALNY_SKLAD *centralny_sklad);

int main()
{
    int x = 0, i;
    srand(time(NULL));
    INVENTAR_STAV *inventar_stav;
    CENTRALNY_SKLAD *centralny_sklad;
    TypAkcie typakcie;


    printf("********************Dwarf Fortress********************\n");
    trpaslik_generator (&inventar_stav, &centralny_sklad);
    for(i = 1; i <= 5; i++)
    {
        vypis_skladu_stav(&inventar_stav, &centralny_sklad);
        printf("****************CYKLUS CISLO %d****************\n",i);
        printf ("vykonala sa akcia: %d\n", typakcie = rand()%5+1) ;
        printf ("akcia vratila hodnotu (0 - nepodarila sa akcia/1 - akcia sa podarila): %d\n",centralna_distribucna_funkcia(typakcie, &inventar_stav, &centralny_sklad));
        vypis_skladu_stav(&inventar_stav, &centralny_sklad);



    }

    return 0;
}

void trpaslik_generator (INVENTAR_STAV *inventar_stav, CENTRALNY_SKLAD *centralny_sklad)
{
    int i;
    srand(time(NULL));
    centralny_sklad->jedlo = 100;
    centralny_sklad->pivo = 100;
    centralny_sklad->ruda = 50;
    centralny_sklad->mince = 50;

    for (i = 1; i <= POCET_TRPASLIKOV; i++)
    {
        inventar_stav->jedlo[i] = 0;
        inventar_stav->pivo[i] = 0;
        inventar_stav->unava[i] = 0;
        inventar_stav->nuda[i] = 0;
    }

    for (i = 1; i <= POCET_TRPASLIKOV; i++)
    {
        inventar_stav->jedlo[i] = rand()%10 + 1; /* generovanie nahodneho cisla v rozsahu 1 - 10 */
        inventar_stav->pivo[i] = rand()%10 + 1;
        inventar_stav->unava[i] = rand()%10 + 1;
        inventar_stav->nuda[i] = rand()%10 + 1;
    }

}

void vypis_skladu_stav(INVENTAR_STAV *inventar_stav, CENTRALNY_SKLAD *centralny_sklad)
{
    int i;
    for (i = 1; i <= POCET_TRPASLIKOV; i++)
    {
        printf ("----------------trpaslik %d---------------------\n",i);
        printf ("CENTRALNY SKLAD: jedlo: %d\tpivo: %d\truda: %d\t\tmince: %d\n",centralny_sklad->jedlo, centralny_sklad->pivo, centralny_sklad->ruda, centralny_sklad->mince);
        printf ("INVENTAR STAV:   jedlo: %d\tpivo: %d\t\tunava: %d\t\tnuda: %d\n\n",inventar_stav->jedlo[i], inventar_stav->pivo[i], inventar_stav->unava[i], inventar_stav->nuda[i]);

    }
}


int oddych(INVENTAR_STAV *inventar_stav, CENTRALNY_SKLAD *centralny_sklad)
{
    int i;
    int tmp = 0;
    for(i = 1; i <= POCET_TRPASLIKOV; i++ )
    {
        inventar_stav->nuda[i] = 0;
        inventar_stav->unava[i] = 0;
        if (centralny_sklad->jedlo >= INV_MAX_JEDLO && centralny_sklad->pivo >= MAX_PIVO)
        {
            tmp = INV_MAX_JEDLO - sizeof(inventar_stav->jedlo[i]);
            centralny_sklad->jedlo -= tmp;
            inventar_stav->jedlo[i] += tmp;
            tmp = 0;

            tmp = MAX_PIVO - sizeof(inventar_stav->pivo[i]);
            centralny_sklad->pivo -= tmp;
            inventar_stav->pivo[i] += tmp;
        }
        else return 0;
    }
    return 1;
}

int banik (INVENTAR_STAV *inventar_stav, CENTRALNY_SKLAD *centralny_sklad)
{
    int i;
    for(i = 1; i <= POCET_TRPASLIKOV; i++ )
    {
        if (inventar_stav->jedlo[i] > 0 && inventar_stav->jedlo[i] <= INV_MAX_JEDLO || inventar_stav->pivo[i] > 0 && inventar_stav->pivo[i] <= MAX_PIVO || inventar_stav->unava[i] >= 0 && inventar_stav->unava[i] <= MAX_UNAVA)
        {
            inventar_stav->jedlo[i]--;
            inventar_stav->pivo[i]--;
            inventar_stav->unava[i]++;

            (inventar_stav->unava[i] <= 5) ? (centralny_sklad->ruda += 2) : (centralny_sklad->ruda++);
        }
        else return 0;
    }
    return 1;
}

int remeselnik (INVENTAR_STAV *inventar_stav, CENTRALNY_SKLAD *centralny_sklad)
{
    int i;
    for(i = 1; i <= POCET_TRPASLIKOV; i++ )
    {
        if (inventar_stav->jedlo[i] > 0 && inventar_stav->jedlo[i] <= INV_MAX_JEDLO || inventar_stav->pivo[i] > 0 && inventar_stav->pivo[i] <= MAX_PIVO || inventar_stav->unava[i] >= 0 && inventar_stav->unava[i] <= MAX_UNAVA)
        {
            inventar_stav->jedlo[i]--;
            inventar_stav->pivo[i]--;
            inventar_stav->unava[i]++;

            (inventar_stav->unava[i] <= 5) ? (centralny_sklad->mince += MINCA_ZA_RUDU2) : (centralny_sklad->mince += MINCA_ZA_RUDU1);
        }
        else return 0;
    }
    return 1;
}

int kuchar(INVENTAR_STAV *inventar_stav, CENTRALNY_SKLAD *centralny_sklad)
{
    int i;
    for(i = 1; i <= POCET_TRPASLIKOV; i++ )
    {
        if (inventar_stav->nuda[i] >= 0 && inventar_stav->nuda[i] < MAX_NUDA || inventar_stav->unava[i] >= 0 && inventar_stav->unava[i] < MAX_UNAVA || centralny_sklad->mince >= 30)
        {
            inventar_stav->nuda[i]++;

            (centralny_sklad->mince >= 30) ? ((centralny_sklad->jedlo += centralny_sklad->jedlo) && (inventar_stav->unava[i]-- )) : (centralny_sklad->jedlo++);
        }
        else return 0;
    }
    return 1;
}

int pivovarnik(INVENTAR_STAV *inventar_stav, CENTRALNY_SKLAD *centralny_sklad)
{
    int i;
    for(i = 1; i <= POCET_TRPASLIKOV; i++ )
    {
        if (inventar_stav->nuda[i] >= 0 && inventar_stav->nuda[i] < MAX_NUDA  || inventar_stav->unava[i] >= 0 && inventar_stav->unava[i] < MAX_UNAVA || centralny_sklad->mince >= 30)
        {
            inventar_stav->nuda[i]--;
            inventar_stav->unava[i]--;

            (inventar_stav->unava[i] <= 5 && inventar_stav->nuda[i] <= 5) ? ((centralny_sklad->pivo += MINCA_ZA_RUDU2) && (centralny_sklad->mince -= MINCA_ZA_RUDU2)) : ((centralny_sklad->pivo += MINCA_ZA_RUDU1) && (centralny_sklad->mince -= MINCA_ZA_RUDU1));
        }
        else return 0;
    }
    return 1;
}

int centralna_distribucna_funkcia(TypAkcie typakcie,INVENTAR_STAV *inventar_stav, CENTRALNY_SKLAD *centralny_sklad)
{
   // int akcia1, akcia2, akcia3, akcia4, akcia5ô
    int akcia = 0;
    switch (typakcie)
    {
    case ODDYCH:
        akcia = oddych(&inventar_stav, &centralny_sklad) ;
        break;                                                           //jaky sakra samostatny zaznam chce
    case BANIK:
        akcia = banik (&inventar_stav, &centralny_sklad) ;
        break;
    case REMESELNIK:
        akcia = (remeselnik (&inventar_stav, &centralny_sklad)) ;
        break;
    case KUCHAR:
        akcia = (kuchar(&inventar_stav, &centralny_sklad)) ;
        break;
    case PIVOVARNIK:
        akcia = (pivovarnik(&inventar_stav, &centralny_sklad)) ;
        break;
    default:
        break;
    }
    return akcia;
}

 

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý