[ 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 | 1
NapísalOffline : 31.03.2017 18:25 | help s C programom

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ý: 28.04.26
Príspevky: 1399
Témy: 10 | 10
Bydlisko: Hrinova
NapísalOffline : 31.03.2017 20:43 | help s C programom

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;


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 | 1
Napísal autor témyOffline : 31.03.2017 21:02 | help s C programom

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ý: 28.04.26
Príspevky: 1399
Témy: 10 | 10
Bydlisko: Hrinova
NapísalOffline : 31.03.2017 21:10 | help s C programom

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.


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 | 1
Napísal autor témyOffline : 31.03.2017 21:16 | help s C programom

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


 [ Príspevkov: 5 ] 


help s C programom



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 Backend

9

856

29.09.2009 20:57

reDo

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

Pomoc s programom

v Backend

3

607

26.07.2013 9:36

Roj-i

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

Rada s programom

v Grafické programy

2

877

21.03.2008 20:19

murded

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

Huawei odblokovanie programom

v Smartfóny a tablety

11

2746

12.01.2020 3:19

Semp

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

pomoc s programom

v Backend

2

612

16.11.2009 21:30

kubo88

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

problem s programom

v Sieťové programy

9

556

16.05.2010 8:47

Mindfreak

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

pomoc s programom

v Backend

6

633

14.04.2018 15:15

Vetrolam

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

Problém s programom

v Ostatné programy

3

494

27.04.2010 15:25

Denco1

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 Backend

43

2965

04.06.2007 21:34

vladik

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

pomoc s malym programom

v Ostatné

10

651

18.02.2012 21:51

coldak

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

Skúsenosť s programom WTFast

v Ostatné programy

8

916

14.05.2015 23:22

walther

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

s akym programom rozbalim....?

v Ostatné programy

8

727

02.09.2010 22:07

shiro

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

Pomoc so C# programom

v Backend

5

562

11.03.2013 23:27

shaggy

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

C++ pomoc s programom

v Backend

8

1953

07.12.2009 10:46

drummer87

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

2230

06.06.2011 18:27

Daron

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

Asociacia suboru s programom

v Ostatné

6

1536

25.07.2009 16:12

Fico



© 2005 - 2026 PCforum, edited by JanoF