Obsah fóra
PravidláRegistrovaťPrihlásenie




Odpovedať na tému [ Príspevkov: 5 ] 
AutorSpráva
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 31.03.17
Prihlásený: 31.03.17
Príspevky: 3
Témy: 1
Príspevok NapísalOffline : 31.03.2017 18:25

Zdravim, nevie mi niekto poradiť prečo mi funkcie adekvatne nezmenia hodnoty? alebo prečo ked mám vo funkcii trpaslik_generator, centralny_sklad->ruda = 50; stale mi nejaku blbu hodnotu hodi? dakujem za pomoc :)
Kód:
//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

Kód:
#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;
}



Offline

Skúsený užívateľ
Skúsený užívateľ
help s C programom

Registrovaný: 11.01.09
Prihlásený: 16.04.24
Príspevky: 1385
Témy: 9
Bydlisko: Hrinova
Príspevok NapísalOffline : 31.03.2017 20:43

Prototyp funkcie:
Kód:
void trpaslik_generator (INVENTAR_STAV *inventar_stav, CENTRALNY_SKLAD *centralny_sklad);


Deklaracia tvojich premennych:
Kód:
INVENTAR_STAV *inventar_stav;
CENTRALNY_SKLAD *centralny_sklad;


Volanie funkcie:
Kód:
trpaslik_generator (&inventar_stav, &centralny_sklad);



Urcite uz aj ty vidis chybu, dalej som nedosiel, ale toto urcite nerobi nic dobreho, najprv oprav toto a potom skus, ci sa nieco zmenilo. Zmen len deklaraciu tych dvoch premennych na:
Kód:
INVENTAR_STAV inventar_stav;
CENTRALNY_SKLAD centralny_sklad;







_________________
Ak potrebujete pomoc s diagnostikou/opravou vasej elektroniky ( notebook, motherboard, GPU, a ine ), kontaktujte ma cez SS.
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 31.03.17
Prihlásený: 31.03.17
Príspevky: 3
Témy: 1
Príspevok Napísal autor témyOffline : 31.03.2017 21:02

dakujem ti už mi ide jedna časť :) ciže ten centralny sklad, a stale mi dobre nepočita ten inventar


Offline

Skúsený užívateľ
Skúsený užívateľ
help s C programom

Registrovaný: 11.01.09
Prihlásený: 16.04.24
Príspevky: 1385
Témy: 9
Bydlisko: Hrinova
Príspevok NapísalOffline : 31.03.2017 21:10

Skusal si program ladit pomocou debuggera? Pokial mas niekedy problem v kode s tym, ze premenne obsahuju ine hodnoty ako maju, najjednoduchsi sposob je krokovat program v debuggeri a sledovat hodnoty premennych.







_________________
Ak potrebujete pomoc s diagnostikou/opravou vasej elektroniky ( notebook, motherboard, GPU, a ine ), kontaktujte ma cez SS.
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 31.03.17
Prihlásený: 31.03.17
Príspevky: 3
Témy: 1
Príspevok Napísal autor témyOffline : 31.03.2017 21:16

neskusala som to lebo mi nejde debag, a nesom taka skusena aby som to fixla aj ked snazila som sa o to pred rokom


Odpovedať na tému [ Príspevkov: 5 ] 


Podobné témy

 Témy  Odpovede  Zobrazenia  Posledný príspevok 
V tomto fóre nie sú ďalšie neprečítané témy. help s programom

v Assembler, C, C++, Pascal, Java

9

752

29.09.2009 20:57

reDo Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Pomozte s programom

[ Choď na stránku:Choď na stránku: 1, 2 ]

v Assembler, C, C++, Pascal, Java

43

2746

04.06.2007 21:34

vladik Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. pomoc s programom

v Assembler, C, C++, Pascal, Java

2

534

16.11.2009 21:30

kubo88 Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Rada s programom

v Grafické programy

2

770

21.03.2008 20:19

murded Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Huawei odblokovanie programom

v Smartfóny a tablety

11

2410

12.01.2020 3:19

Semp Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. problem s programom

v Sieťové a internetové programy

9

471

16.05.2010 8:47

Mindfreak Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. pomoc s programom

v Assembler, C, C++, Pascal, Java

6

522

14.04.2018 15:15

Vetrolam Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Problém s programom

v Ostatné programy

3

412

27.04.2010 15:25

Denco1 Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Pomoc s programom

v Assembler, C, C++, Pascal, Java

3

491

26.07.2013 9:36

Roj-i Zobrazenie posledných príspevkov

Táto téma je zamknutá, nemôžete posielať nové príspevky alebo odpovedať na staršie. Pomoc so C# programom

v Technológia .NET

5

476

11.03.2013 23:27

shaggy Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Problemy s programom ProgDVB

v Ostatné programy

3

2749

28.11.2005 20:34

Dzin Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Problem s programom Avidemux

v Video programy

0

663

26.12.2008 18:17

misterspeed Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. C++ pomoc s programom

v Assembler, C, C++, Pascal, Java

8

1822

07.12.2009 10:46

drummer87 Zobrazenie posledných príspevkov

Táto téma je zamknutá, nemôžete posielať nové príspevky alebo odpovedať na staršie. Pomoc s programom MAYA

[ Choď na stránku:Choď na stránku: 1, 2 ]

v Grafické programy

48

2050

06.06.2011 18:27

Daron Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Asociacia suboru s programom

v Delphi, Visual Basic

6

1449

25.07.2009 16:12

Fico Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. C++ pomoc s programom

v Assembler, C, C++, Pascal, Java

9

610

09.05.2011 22:30

johny3212 Zobrazenie posledných príspevkov


Nemôžete zakladať nové témy v tomto fóre
Nemôžete odpovedať na témy v tomto fóre
Nemôžete upravovať svoje príspevky v tomto fóre
Nemôžete mazať svoje príspevky v tomto fóre

Skočiť na:  

Powered by phpBB Jarvis © 2005 - 2024 PCforum, webhosting by WebSupport, secured by GeoTrust, edited by JanoF
Ako väčšina webových stránok aj my používame cookies. Zotrvaním na webovej stránke súhlasíte, že ich môžeme používať.
Všeobecné podmienky, spracovanie osobných údajov a pravidlá fóra