Stránka 1 z 1

Program v cecku  Vyřešeno

Napsal: 09 kvě 2006 10:20
od wix
ahoj, potreboval bych vysvetlit cast kodu v cecku ( nejak detailne, jednoduse, abych to pochopil ;-) )

hlavne to s tema pointrama.


int UrciSmery(int i1, int i2, int *Sm) // funkce pro nalezeni vsech moznych tahu kone z pozice (i1,i2)
{
int Smer, j1, j2;
int Volne[8]; // pomocne pole, pocet volnych poli v okoli pole urceneho podle Sm
int i,j,k,x;
int PocetSm;

PocetSm = 0;

for (Smer = 0; Smer < 8; Smer++)
{
j1 = i1 + Tah[Smer].d1; // nove pozice kone
j2 = i2 + Tah[Smer].d2;

if ((j1 >= 0) && (j1 < Velikost) && (j2 >= 0) && (j2 < Velikost)) // kontrola pritomnosti na sachovnici
{
if (S[j1][j2] == -1)
{
*(Sm + PocetSm) = Smer; // do pole Sm ulozime smery tahu
Volne[PocetSm] = PocetVolnych(j1,j2); // pocet volnych poli v okoli
PocetSm++; // pocet tahu
}
}
}

for (i = 0; i < PocetSm; i++) // setridime pole Sm podle poctu volnych sousednich poli
{
k = i;
for (j = i; j < PocetSm; j++)
{
if (Volne[j] < Volne[k])
k = j;
}
if (k > i)
{
x = *(Sm + k); // prohozeni prvku pres promennou x
*(Sm + k) = *(Sm + i);
*(Sm + i) = x;

x = Volne[k]; // prohozeni prvku v poli Volne
Volne[k] = Volne[i];
Volne[i] = x;
}
}
return PocetSm; // funkce vraci pocet moznych tahu z pole


moc dekuji.

Napsal: 09 kvě 2006 10:27
od wix
A pak nasleduje tohle, cemuz taky moc nerozumim

int Cesta(int i1,int i2) // funkce pro nalezeni cesty kone z pozice (i1,i2) do konce, vystupni parametr Nalezeno udava, zda se cestu podarilo nalezt
{
int Smer, Krok, j1, j2;
int Nalez;
int Nalezeno;
int *Sm;
int PocetSm;

Sm = (int *) malloc(8*sizeof(int)); // alokace pameti pro dynamicke pole

j1 = 0;
j2 = 0;

Krok = S[i1][i2] + 1; // zvedneme cislo kroku o 1

PocetSm = UrciSmery(i1,i2,Sm); // urcime pocet moznych smeru z pole (i1,i2)

Smer = 0; // zacneme od smeru 0

Nalez = 0; // zatim jsme nic nenalezli

while ((Smer < PocetSm) && (Nalez == 0)) // podminka cyklu / dokud jsme nenasli reseni nebo muzeme zkouset nejaky smer
{
j1 = i1 + Tah[*(Sm + Smer)].d1; // Smer udava aktualni pozici v dynamickem poli Sm
j2 = i2 + Tah[*(Sm + Smer)].d2;

S[j1][j2] = Krok; // na souradnice (j1,j2) ulozime aktualni krok

if (Krok == PocetKroku) // pokud jeaktualni krok roven celkovemu poctu kroku, nalezli jsme reseni, ulozime 1 do promenne Nalez
{
Nalez = 1;
}
else
{
Nalez = Cesta(j1,j2); // jinak rekurzivne volame fci Cesta s parametry (j1,j2) coz jsou nove souradanice

if (Nalez == 0)
S[j1][j2] = -1; // neuspesny pokus, je nutno se vratit
}
Smer++; // vyzkousime novy smer
}
Nalezeno = Nalez;
return Nalezeno; // navratova hodnota fce, podle ni pozname, zda jsme nasli reseni ulohy
}

Napsal: 09 kvě 2006 12:00
od Jan Pašek
O programovacích jazycích vím prd ale vím kde by vědět mohly (PLS omlouvám se všem co je tímhle odkazem připravím o práci)
http://www.programujte.com

Napsal: 10 kvě 2006 00:24
od Ltb
Osobně si myslím, že jsi o práci nepřipravil nikoho :wink: Ani já Cčku moc nehovím :?