Pomoc v C-čku

Programovacie jazyky, rady, poradňa...
NumeriMAN
Novice
Novice
Príspevky: 6
Registrovaný: 12 jún 2014, 17:49

Pomoc v C-čku

Príspevok od používateľa NumeriMAN »

Cawko :D
Potrebujem pomoc v programovacom jazyku C. Chcem zistit ako sa da pracovat s premennou, ktora je definovana v inej funkcii.
Predstavujem si to takto:

Kód: Vybrať všetko

main()
{
float cislo = 78.78;
}
upravapremennej()
{
/*tu by som chcel upravit hodnotu premennej cislo v hlavnej funkcii*/
}
Dikes za radu :)
harrison314
Hardcore addict
Hardcore addict
Používateľov profilový obrázok
Príspevky: 8217
Registrovaný: 27 máj 2009, 20:42
Bydlisko: Bratislava
Kontaktovať používateľa:

Re: Pomoc v C-čku

Príspevok od používateľa harrison314 »

NumeriMAN napísal:Cawko :D
Potrebujem pomoc v programovacom jazyku C. Chcem zistit ako sa da pracovat s premennou, ktora je definovana v inej funkcii.
Predstavujem si to takto:

Kód: Vybrať všetko

main()
{
float cislo = 78.78;
}
upravapremennej()
{
/*tu by som chcel upravit hodnotu premennej cislo v hlavnej funkcii*/
}
Dikes za radu :)
V ziadnom pripade nepouzivaj globalne premnne, je to ciste zlo !
Pouzivaj navratove hodnoty aj ked je to void.
A sprav to ako normalny programator cez parametre a pointre.

Kód: Vybrať všetko


void upravapremennej(double *p);
int main(int arc, char *argv[])
{
 double cislo = 78.78;
 upravapremennej(&cislo);
 //vypis
 printf("%lf\n",cislo);
 return 0;
}

void upravapremennej(double *p)
{
  *p = *p*2 +14.2;
}
peter99 napísal:pomoze my niekto naucit sa programovat?? chcem urobit moju hru bude to nieco ako CS
Za takych 5 az 10 rokov aktivneho kodenia a vysokoskolskej matiky to mozno zvladnes.
Ak chces robit hru rovno pouzi na to nejaky tool, alebo engine.
Fabo
Hardcore addict
Hardcore addict
Používateľov profilový obrázok
Príspevky: 6810
Registrovaný: 16 nov 2007, 17:23
Bydlisko: 's Chravenhache
Kontaktovať používateľa:

Re: Pomoc v C-čku

Príspevok od používateľa Fabo »

Harrison: Nesuhlasim.

KISS princip...

Nepouzivanie globalnych premennych -> OK, povedzme. Aj ked existuju lebo zmysel maju, netreba ich za kazdu cenu demonizovat.
Tuna suhlasim pouzit main local dava viac zmyslu.

Pouzivanie return values -> Samozrejme. v tomto pripade by som pouzil return value na nahratie do premennej.

Pointre -> vid. KISS princip, pointer je fasa vec, ale zbytocne komplikovat tutaj IMHO.

Teda ako by to mohlo vyzerat podla mna:

Kód: Vybrať všetko

float upravapremennej(float premenna);

int main(int arc, char *argv[])
{
float cislo = 78.78;
cislo = upravapremennej(cislo);
//vypis
printf("%lf\n",cislo);
return 0;
}

void upravapremennej(float premenna)
{
  premenna = premenna*2 +14.2;
  return premenna;
}
stejko
Light Star
Light Star
Príspevky: 214
Registrovaný: 01 mar 2008, 8:22
Kontaktovať používateľa:

Re: Pomoc v C-čku

Príspevok od používateľa stejko »

preco vsetci tak zatracuju globalne premenne v cecku? aj na skole sme mali zakazane ich pouzivat, ale netusim preco.

Fabo: mozes pouzit return ak deklarujes funkcii bez navratoveho typu?(void) nemala by ta funkcia vraciat int? myslim takto

Kód: Vybrať všetko

float upravapremennej(float premenna);

int main(int arc, char *argv[])
{
float cislo = 78.78;
cislo = upravapremennej(cislo);
//vypis
printf("%lf\n",cislo);
return 0;
}

float upravapremennej(float premenna)
{
  return premenna+uprava;
}
harrison314
Hardcore addict
Hardcore addict
Používateľov profilový obrázok
Príspevky: 8217
Registrovaný: 27 máj 2009, 20:42
Bydlisko: Bratislava
Kontaktovať používateľa:

Re: Pomoc v C-čku

Príspevok od používateľa harrison314 »

Fabo napísal:Harrison: Nesuhlasim.

KISS princip...
KISS je OK.
Fabo napísal:Nepouzivanie globalnych premennych -> OK, povedzme. Aj ked existuju lebo zmysel maju, netreba ich za kazdu cenu demonizovat.
Ono ide o znovupouzitelnost kodu a to aby ti nik nemanipuloval s premnnymi, samozrejme su vynimky , napriklad ked robis kernell.
Pointre -> vid. KISS princip, pointer je fasa vec, ale zbytocne komplikovat tutaj IMHO.
Ide aj tak, ale semanticky mi tam viac sedi pointer.
pcsiete
Medium Star
Medium Star
Príspevky: 413
Registrovaný: 07 dec 2012, 18:47

Re: Pomoc v C-čku

Príspevok od používateľa pcsiete »

stejko napísal:preco vsetci tak zatracuju globalne premenne v cecku? aj na skole sme mali zakazane ich pouzivat, ale netusim preco.
o tom by sa dali písať knihy. V každom prípade majú svoj význam a určite ich niekedy využiješ, ikeď zvyčajne nie sú vo svojej priamej forme (nemanipuluješ s premennou, ale používaš prístupové metódy). Čím bližšie sa dostávaš k práci s pamäťou, tým viac sa o globálny stav opieraš, pretože pamäť je stav všetkého (...čo ťa trápi na úrovni Cčka).
mozes pouzit return ak deklarujes funkcii bez navratoveho typu?(void) nemala by ta funkcia vraciat int? myslim takto
Keď deklaruješ funkciu a neudávaš návratový typ, vraciaš int. Keď deklaruješ funkciu a uvádzaš void, nevraciaš nič.
Tam hore vyzeral byť pôvodný zámer float, ako to máš ty.
harrison314
Hardcore addict
Hardcore addict
Používateľov profilový obrázok
Príspevky: 8217
Registrovaný: 27 máj 2009, 20:42
Bydlisko: Bratislava
Kontaktovať používateľa:

Re: Pomoc v C-čku

Príspevok od používateľa harrison314 »

stejko napísal:preco vsetci tak zatracuju globalne premenne v cecku? aj na skole sme mali zakazane ich pouzivat, ale netusim preco.
1) moznost nespravneho pouzitia tvojich funkcii, lebo ich budes mat spojene s globalnymi premenymi
2) ak bude chciet dakto pouzit tvoje API, moze nastat konflik mien
3) open-close princip
4) co ak potrebujes viac instacii toho co mas v globalnej premnej
5) v C ju nie je mozne chranit pred zmenami (v cudzom kode)
Fabo
Hardcore addict
Hardcore addict
Používateľov profilový obrázok
Príspevky: 6810
Registrovaný: 16 nov 2007, 17:23
Bydlisko: 's Chravenhache
Kontaktovať používateľa:

Re: Pomoc v C-čku

Príspevok od používateľa Fabo »

Hej, ten void som tam dal omylom. Mea culpa, samozrejme by tam mal byt float. Vsak ono by to hodilo pri kompilacii return type mismatch alebo nieco obdobne.

@globalne funkcie. Jak pise pcsiete, to je na velku akademicku debatu. Ja osobne ich nezatracujem uplne globalne, maju svoj vyznam, hlavne ako bolo spominane v nizsich leveloch... C++ je lepsie v tom ze ma triedy, takze sa tam da s tym lepsie narabat, v C sa niekedy global premennym blbo vyhyba.

@harrison: neviem, mozno je to tym ako a kto ta ucil, mne tam ten pointer zase hlboko nepasuje :D okrem ineho aj preto, ze funkcia s float parametrom a float returnom je absolutne nezavisla od toho co sa deje s pointrom inde, pristupy, garbage kolekcia (pokial sa bavime o managed C++ pripadne vyssich jazykoch), eventualne v praxi moze potom prilisna naviazanost na pointre posobit problemy napr. v jave (ktora pointre nema)
harrison314
Hardcore addict
Hardcore addict
Používateľov profilový obrázok
Príspevky: 8217
Registrovaný: 27 máj 2009, 20:42
Bydlisko: Bratislava
Kontaktovať používateľa:

Re: Pomoc v C-čku

Príspevok od používateľa harrison314 »

Fabo napísal:@harrison: neviem, mozno je to tym ako a kto ta ucil, mne tam ten pointer zase hlboko nepasuje okrem ineho aj preto, ze funkcia s float parametrom a float returnom je absolutne nezavisla od toho co sa deje s pointrom inde, pristupy, garbage kolekcia (pokial sa bavime o managed C++ pripadne vyssich jazykoch), eventualne v praxi moze potom prilisna naviazanost na pointre posobit problemy napr. v jave (ktora pointre nema)
Bavime sa o C, v inych jazykoch sa da pouzit iny pristup, tak isto ako glovalne členy (nemusia to byt vzdy premenne).
Zalezi co ta funkcia robi. Ak by daco pocitala a volala sa vypocitajObsah, faktorial atd... tak mat parametr a navratovu hodnotu je z hladiska vyznamu spravne. Ale ked sa funkcia vola upravPremennu, tak nech ju upravi (myslim, ze ak by namiesto float funkcia brala ako aargument objemnu strukturu, tiez by si pouzil pointer).
Napísať odpoveď