tak pozrel som na to trochu viac a par veci sa mi vyjasnilo.
prikaz
textcolor velmi zavisi od kompilatora, moj to nedokazal
, ak ti to ide tak OK
funkcie: no napr tie body navratu
goto (neviem ako sa to oficialne vola, goto nepouzivam)
sa pekne daju nahradit funkciami
napr, vsetky tie posuny kurzora by si si hodil do oddelenej funkcie povedzme
void game(); (void - ak v nej nemas return)
cize tvoj main() by vyzeral nejako takto:
int main(){
....
game();
...
return 0;
}
void game(){
...
}
Ide o to, ze tie skoky v jednej funkcii by si nahradil samostatnou funkciou a mohol by si ju lubovolne volat v nejakom cykle,
pripadne obmedzit podmienkami.
Ukazka rekurzivnej funkcie (ktora vola samu seba)
- v petriho miske mas 1 virus a x bakterii. Po kazdej minute virus zabije jednu bakteriu a rozmnozi sa. Potom sa rozmnozia aj bakterie. Po kolkych minutach virusy zlivkiduju vsetky bakterie.
#include <stdio.h>
int zabi(int b, int v)
{
static int i=0; // static preto, aby si lokalna premenna uchovala hodnotu aj pri dalsich volaniach / moze byt aj globalna
printf("Po %d minute je %d bakt a %d virov.\n", i, b, v);
i++;
if (b==0)
{
printf("Bakterie boli vyhubene po %d minutach.\n", i-1);
getchar();
return 0;
}
zabi(2*(b-=v), 2*v); // funkcia zavola samu seba s tym, ze si odovzda 2-nasobny pocet virov a 2-nasobny poect bakterii - viry
}
int main()
{
int bakt, vir=1;
printf("Zadajte pocet bakterii: ");
scanf("%d", &bakt); // nacita pocet bakterii
fflush(stdin); // splachne buffer, cize aby ENTER nebral ako znak a nezblbol getchar() helpne to s podrzanim konzoly
zabi(bakt, vir); // zavola funkciu ktorej odovzda argumenty hodnotou, teda pocet virov a pocet bakterii
return 0;
}
Odovzdavanie argumentov hodnotou znamena, ze v tele inej funkcie nepracujes s premennou inicializovanou v povodnej funkcii ale
len s jej hodnotu. Cize hocake zmeny ktore s premennou vykonas v tele volanej funkcie nemaju vyplyv na premmenu vo volajucej
funkcii po navrate do nej.