Program v cecku Vyřešeno
Napsal: 09 kvě 2006 10:20
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.
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.