Avatar
lvictoryl
Člen
Avatar
lvictoryl:

Zdravím, při svém "studiu" jsem se jaksi zasekl a nechci jet dál pokud to opravdu nepochopím. Konkrétně se jedná o pole. Vím jak ho vytvořit, k čemu slouží, jak vyplnit ať už pomocí cyklu "for" nebo ručně. Ale nechápu, jak s ním pracovat. Tím mám na mysli podmínky třeba hlavně. Zkoušel jsem to i přes metodu a prostě stále mi to píše chybu.

Jde mi třeba o toto, založím si pole, vyplním ho čísli třeba do 20ti. A poté chci, aby mi to vypsalo, všecka čísla dělitelná dvěma. Ale jak na to? If mi nevezme, jelikož se jedná o pole to je jasné a abych vypisovel všech 20 polí jednotlivě a dělal jednu podmínku to je hloupé ne? Poradil by mi někdo jak s tím pracovat a vůbec všeobecně o tom :)

Díky moc. :)

P.S. Byl jsem odkázán na fórum

Editováno 5.6.2013 13:37
 
Odpovědět 5.6.2013 13:36
Avatar
Petr Nymsa
Redaktor
Avatar
Odpovídá na lvictoryl
Petr Nymsa:

http://www.itnetwork.cz/…utorial-pole Zde máš jasně popsáno co a jak :). Pole je indexované, jak jsem ti říkal, každá přihrádka má svůj index, jedinečné číslo, které identifikuje pozici v poli. Začíná se vždy od nuly.

Pole o 3 prvcích

int[]pole = new int[3]

Naplním 10,100,1000 (lze to samozřejmě cyklem, ukazuju práci s indexy)

pole[0]=10;
pole[1]=100;
pole[2]=1000;
Console.WriteLine(pole[0]) // vypíše 10

pole[0] += 10;

Console.WriteLine(pole[0]) // vypíše 20

int hodnotaTretihoPrvku = pole[3]; // chyba jsem mimo pole, správně je

int hodnotaTretihoPrvku = pole[2];

Zde tedy jasně vidíš k čemu jsou indexy. Zkus is udělat několik prográmků, začni tím, který děláš

Nahoru Odpovědět 5.6.2013 13:47
Pokrok nezastavíš, neusni a jdi s ním vpřed
Avatar
lvictoryl
Člen
Avatar
lvictoryl:

Jasné toto chápu. Uvedu lehký příklad.
Mám

int [] pole = new int[10];
            pole[0] = 1;
            for (int i=0;i <10;i++)
                pole[i] = i + 1;

A teď by mě zajímalo, jak to hodit celé do podmínky. Jestli to tedy jde, protože jinak bych jel třeba

if (pole[0]<10)
Console.Write("Ahoj");

Ale mě zajímá, jestli je možnost vzít všech 10 polí naplněných a dát je do podmínky. Víš co myslím ne? :)

Editováno 5.6.2013 15:11
 
Nahoru Odpovědět 5.6.2013 15:10
Avatar
Odpovídá na lvictoryl
Michal Žůrek (misaz):

nene, dej to do for

for(int i = 0; i < 20; i++)
{
   // zde si to ověř jestli  ti to splňuje co má
   // prvek z pole získáš pod:
   // pole[i]
}
Editováno 5.6.2013 15:18
Nahoru Odpovědět  +1 5.6.2013 15:17
Nesnáším {}, proto se jim vyhýbám.
Avatar
lvictoryl
Člen
Avatar
lvictoryl:

Díky Misa, Zirko mě asi špatně pochopil nebo jsem se špatně vyjádřil. Šlo/jde mi o to pracovat se všemi poli, co jsem to na rychlo zkusil tak to jede, takže by mělo být už vše OK. Kdyžtak bych se sem zase ozval. Ještě jednou díky, oběma. ;)

 
Nahoru Odpovědět 5.6.2013 15:32
Avatar
Odpovídá na lvictoryl
Libor Šimo (libcosenior):
int[] pole = new int[10];
pole[0] = 1; // tento riadok nemá význam
for (int i = 0; i < 10; i++)
    pole[i] = i + 1;

podmienka

for (int i =0 ; i < 10; i++)
{
    if (pole[0] < 10)
        Console.Write("Ahoj");
}
Nahoru Odpovědět 5.6.2013 15:32
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
lvictoryl
Člen
Avatar
Odpovídá na Libor Šimo (libcosenior)
lvictoryl:
for (int i = 0; i < 10; i++)
            {
                pole[i] = i + 1;

                if (pole[i] == 2)
                    Console.WriteLine("Je tu!");


            }

Takhle jsem to cca ukázkově potřeboval. Zkrátka, aby to prohledalo všechny pole a našlo to - jako zde v příkladu, jestli tam je a udělalo akci.

pole[0] = 1;

Jinak bez tohoto to pojede též?

 
Nahoru Odpovědět 5.6.2013 15:38
Avatar
Kit
Redaktor
Avatar
Odpovídá na lvictoryl
Kit:

Nauč se správně odsazovat. Jinak to po tobě ostatní programátoři ani nebudou číst.

Nahoru Odpovědět  +1 5.6.2013 16:01
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Odpovídá na lvictoryl
Luboš Běhounek (Satik):
pole[0] = 1;

Jen na nulty index pole priradi jednicku, defaultne je tam (v C#) nula.

Nahoru Odpovědět  +1 5.6.2013 16:25
:)
Avatar
Petr Nymsa
Redaktor
Avatar
Odpovídá na lvictoryl
Petr Nymsa:

A ještě jedna věc. Ty označuješ každý index polem. Je to jedno velké pole s několika místy.

Když bych to přirovnal k reálnému životu. Je to vlak se sedačkami, každá sedačka má index 0,1,2,3,4,5...... nepracuješ s vlaky, pracuješ s jedním vlakem ale hromadou sedaček.

pole[0] ti vrátí hodnotu 0 (pro nás jako lidi prvního) indexu se kterou normálně dál pracuješ.

Editováno 5.6.2013 17:28
Nahoru Odpovědět 5.6.2013 17:27
Pokrok nezastavíš, neusni a jdi s ním vpřed
Avatar
Kit
Redaktor
Avatar
Odpovídá na Luboš Běhounek (Satik)
Kit:

Na to se nedoporučuje spoléhat. Každé pole je nutné před prvním čtením inicializovat. I když vlastně... Vlastně se žádné pole nemusí inicializovat, protože by se žádná definovaná hodnota neměla v programu přepisovat a žádná by se neměla před inicializací číst.

Nahoru Odpovědět 5.6.2013 17:33
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Kit
David Čápka:

V C# se na to lze spolehnout.

Nahoru Odpovědět 5.6.2013 17:35
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Kit
Redaktor
Avatar
Odpovídá na David Čápka
Kit:

V Javě také. Přesto to slušní programátoři nedělají.

Nahoru Odpovědět 5.6.2013 18:28
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Petr Nymsa
Redaktor
Avatar
Odpovídá na Kit
Petr Nymsa:

Asi teď nechápu "Každé pole je nutné před prvním čtením inicializovat" a poté říkáš že by se před čtením neměla číst. Jak to myslíš ? Díky :)

Nahoru Odpovědět 5.6.2013 18:32
Pokrok nezastavíš, neusni a jdi s ním vpřed
Avatar
Odpovídá na Kit
Luboš Běhounek (Satik):

Proc neco inicializovat dvakrat, pokud mi staci defaultni hodnota?
V C# mas zarucene, ze pole datovych typu bude po vytvoreni iniciaizovane na defaultni hodnoty, coz je u int nula.

"If you do not initialize an array at the time of declaration, the array members are automatically initialized to the default initial value for the array type."
(podle http://msdn.microsoft.com/…s.71%29.aspx )

Defaultni hodnoty datovych typu: http://msdn.microsoft.com/…s.80%29.aspx

Treba v C++ se nic neinicializuje, tam proste jen dostanes kus pameti a muze tam byt cokoliv, tam je inicializace potreba (i kdyz v DEBUG modu je int pole tusim take vzdy inicializovane na nuly), ale C# to dela vzdy za tebe.

Nahoru Odpovědět 5.6.2013 19:01
:)
Avatar
Odpovídá na Petr Nymsa
Libor Šimo (libcosenior):

V c# nemusíš.

static void Main(string[] args)
{
    int[] pole = new int[10];
    foreach (int i in pole)
        Console.WriteLine(i);
    Console.ReadKey();
}

Aj bez inicializácie sa vypíšu nuly.

Nahoru Odpovědět 5.6.2013 19:06
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
Petr Nymsa
Redaktor
Avatar
Odpovídá na Libor Šimo (libcosenior)
Petr Nymsa:

Aha, já jsem to pochopil trochu jinak :). Tohle samozřejmě vím

Nahoru Odpovědět 5.6.2013 19:08
Pokrok nezastavíš, neusni a jdi s ním vpřed
Avatar
Kit
Redaktor
Avatar
Odpovídá na Luboš Běhounek (Satik)
Kit:

Protože defaultní hodnota mi zpravidla nevyhovuje.

Nahoru Odpovědět 5.6.2013 19:19
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Kit
Redaktor
Avatar
Odpovídá na Petr Nymsa
Kit:

Před zápisem by se neměla číst.

Nahoru Odpovědět 5.6.2013 19:36
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Odpovídá na Kit
Luboš Běhounek (Satik):

Samozrejme ze pokud mi defaultni hodnota nevyhovuje, tak to jinak nez vlastni iniciaizaci nejde, ale pokud se mi treba pole s nulami hodi, tak neni duvod provadet druhou inicializaci :)

Nahoru Odpovědět  +2 5.6.2013 19:46
:)
Avatar
Kit
Redaktor
Avatar
Odpovídá na Luboš Běhounek (Satik)
Kit:

Právě mě nenapadá případ, kdy jsem potřeboval pole nul. Prakticky vždy v něm potřebuji nějaké konkrétní hodnoty.

Nahoru Odpovědět 5.6.2013 20:19
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Petr Nymsa
Redaktor
Avatar
Odpovídá na Kit
Petr Nymsa:

Pole nul například při tovrbě mapy, kdy se často používá dvourozměrné pole. Například v piškvorkách může značit 0 prázdné místo, 1 křížek hráče 1, 2 kolečko hráče 2.

Nahoru Odpovědět 5.6.2013 20:46
Pokrok nezastavíš, neusni a jdi s ním vpřed
Avatar
Odpovídá na Kit
Luboš Běhounek (Satik):

Ani mě to nepřekvapuje, ty vždy programuješ jinak, než většina "programátorů" (myslím tím teď opravdu programátory, co se tím živí), co znám :D

Já pole nul občas využívám, třeba u her to může být mapa, kde nula může být defaultní podloží (třeba tráva), kam chceš jen někde občas vygenerovat nějaký strom apod.

Nahoru Odpovědět  +2 5.6.2013 21:04
:)
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Kit
David Čápka:

Nula často znamená nezadáno nebo prázdno.

Nahoru Odpovědět 5.6.2013 21:13
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Odpovídá na Luboš Běhounek (Satik)
Lukáš Hruda (Luckin):

V C++ se pole inicializuje na nuly, pokud je globální nebo statické. Platí to i pro proměnné. Jenom taková poznámka :D

 
Nahoru Odpovědět 5.6.2013 23:24
Avatar
Odpovídá na Lukáš Hruda (Luckin)
Luboš Běhounek (Satik):

Diky za info, ja si jen pamatuju, ze jsem v C++ obcas v poli mel nejaky random cisla, netusil jsem, ze se to i v C++ nekdy inicializuje, dobre vedet :)

Nahoru Odpovědět 6.6.2013 0:28
:)
Avatar
Kit
Redaktor
Avatar
Odpovídá na Luboš Běhounek (Satik)
Kit:

Díky za poklonu. Teď jsem se začetl do Haskellu a nějak se mi ten jazyk zalíbil :)

Nahoru Odpovědět 6.6.2013 9:31
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Kit
Redaktor
Avatar
Odpovídá na David Čápka
Kit:

Takže když je v políčku uvedena teplota "0", tak to znamená bod mrazu nebo nezměřenou hodnotu?

Nahoru Odpovědět 6.6.2013 9:33
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Kit
Redaktor
Avatar
Odpovídá na Petr Nymsa
Kit:

Jasně, u vzoru Fly Weight to může mít své uplatnění. Jenže Fly Weight se používá až tehdy, když nestačí kapacita paměti nebo výkon procesoru. Tedy při optimalizaci.

Nahoru Odpovědět 6.6.2013 9:37
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Petr Nymsa
Redaktor
Avatar
Odpovídá na Kit
Petr Nymsa:

Ted bohužel nevím o čem mluvíš ale jak říkám já sá ostatní, často se 0 používají různě v mapách apod :)

Nahoru Odpovědět 6.6.2013 10:10
Pokrok nezastavíš, neusni a jdi s ním vpřed
Avatar
Kit
Redaktor
Avatar
Odpovídá na Petr Nymsa
Kit:

O piškvorkách. Když se použije správný datový typ, tak tu "0" nepotřebuješ. Ani na trávník, o kterém psal Satik.

Nahoru Odpovědět 6.6.2013 10:24
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Odpovídá na Kit
Luboš Běhounek (Satik):

Zrovna na ty teploty bych to nepouzil, tam se to moc nehodi, pokud chces rozlisovat 0 a nezmereno.

Vyuzivam to treba spis u vlastni implementaci bitmapy (normalni bitmapa ma pomaly pristup na pixely), defaultne jsou vsechny hodnoty 0, tedy cerna.

Take se to da vyuzit na znaceni stavu, kde treba mas 0 nezpracovano a 1 zpracovano - treba u pathfindingu muzes mit pole policek a mit tam ulozenou hodnotu, jestli jsi to pole zpracovaval.

Nahoru Odpovědět  +1 6.6.2013 10:44
:)
Avatar
Petr Nymsa
Redaktor
Avatar
Odpovídá na Kit
Petr Nymsa:

A jaký chceš použít datový typ o_O Navíc jak říká Satik u pathfindingu se to ještě víc hodí. Proč si to neznázornit čísly ?

Nahoru Odpovědět 6.6.2013 10:50
Pokrok nezastavíš, neusni a jdi s ním vpřed
Avatar
Kit
Redaktor
Avatar
Odpovídá na Luboš Běhounek (Satik)
Kit:

Takže grafika u her. Desktopové hry neprogramuji, proto jsem se s tím nesetkal.

Na zaznamenávání teplot je obvykle výhodnější používat databáze, které s rozlišením "0" a null nemají problém.

Nahoru Odpovědět 6.6.2013 10:51
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Kit
Redaktor
Avatar
Odpovídá na Petr Nymsa
Kit:

Někdy se hodí seznam, jindy slovník. U piškvorek by se dal použít seznam seznamů, možná i prostý seznam. Moc jsem nad tím ještě nepřemýšlel, ale mohlo by to být i efektivnější než matice.

Nahoru Odpovědět 6.6.2013 11:00
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Petr Nymsa
Redaktor
Avatar
Odpovídá na Kit
Petr Nymsa:

Není to až moc složtiý, díky dvourozměrnému poli si znázorním ihned pohodlně herní plochu, zároveň si udržuju kde hráči položili (nakreslili) svoje křížky / kolečka a zároveň pohodlně můžu kontrolovat výherní kombinace, kombinace pro umělou inteligenci apod.

Nahoru Odpovědět 6.6.2013 11:02
Pokrok nezastavíš, neusni a jdi s ním vpřed
Avatar
Odpovídá na Kit
Luboš Běhounek (Satik):

Uh, nedokážu si představit, jak by mohl být seznam (nebo nedejbože seznam seznamů) na znázornění hrací plochy pro piškvorky efektivnější než obyčejné pole, přijde mi to jako používat na vrtání zubů vrták na studny... :D

Nahoru Odpovědět 6.6.2013 11:08
:)
Avatar
Kit
Redaktor
Avatar
Odpovídá na Petr Nymsa
Kit:

Totéž můžeš i v těch seznamech, ale o něco efektivněji a logičtěji. Jen si to asi vezme trochu víc RAM, ale až u rozsáhlejší hry, než je obvyklé.

Nahoru Odpovědět 6.6.2013 11:09
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Kit
Redaktor
Avatar
Odpovídá na Luboš Běhounek (Satik)
Kit:

Kde jsou seznamy, tam nemusíš počítat indexy do pole. Nemusíš ani procházet neobsazená políčka.

Kromě toho se takové seznamy obvykle interně zpracovávají jako pole přes pointery. Takže seznamy mohou být efektivnější než pole. Hlavně si ale pod tím mým seznamem seznamů nepředstavuj nějaký čtverec. Ten jsem opravdu na mysli neměl.

Nahoru Odpovědět 6.6.2013 11:16
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Petr Nymsa
Redaktor
Avatar
Odpovídá na Kit
Petr Nymsa:

Já i na herní plochu až 1000x1000 vezmu klasické dvourozměrné pole, nevím jestli už to není moc ale funguje to velmi dobře. Přijde mi prostě nesmysl dělat si nějaké seznamy seznamů na pouhé zobrazení a udržení 2D hrací plochy

Nahoru Odpovědět 6.6.2013 11:16
Pokrok nezastavíš, neusni a jdi s ním vpřed
Avatar
Petr Nymsa
Redaktor
Avatar
Odpovídá na Kit
Petr Nymsa:

Já i na herní plochu až 100x100 vezmu klasické dvourozměrné pole, nevím jestli už to není moc ale funguje to velmi dobře. Přijde mi prostě nesmysl dělat si nějaké seznamy seznamů na pouhé zobrazení a udržení 2D hrací plochy

Nahoru Odpovědět 6.6.2013 11:16
Pokrok nezastavíš, neusni a jdi s ním vpřed
Avatar
Odpovídá na Kit
Luboš Běhounek (Satik):

Aha, až teď mi došlo, jak jsi to myslel - zaznamenávat do toho seznamu ty jednotlivé tahy (třeba něco jako List<Tah>, kde tah by značil pozici a symbol).

Pro malé množství tahů by to bylo efektivnější to zpracovávat takhle, ale pro velké množství tahů by to bylo výrazně pomalejší, asi bych dal přednost tomu "stabilnějšímu" řešení, které bude trvat vždy stejně dlouho - tedy dvourozměrné pole stavů, kde indexy do pole jsou indexy do hrací plochy.

Nahoru Odpovědět  +1 6.6.2013 11:17
:)
Avatar
Odpovídá na Kit
Luboš Běhounek (Satik):

"Kde jsou seznamy, tam nemusíš počítat indexy do pole.
...
Kromě toho se takové seznamy obvykle interně zpracovávají jako pole přes pointery. Takže seznamy mohou být efektivnější než pole."

I když ty indexy do pole u seznamu nepočítáš, tak se to stále za tebe musí interně provést i u toho listu.

Když na stejnou věc (při které nebudeš měnit velikost kolekce) použiješ pole a seznam, vždy vyhraje pole.

Nahoru Odpovědět 6.6.2013 11:21
:)
Avatar
TomBen
Redaktor
Avatar
TomBen:

Já teda nevím. Já žil v přesvědčení, že seznam se hodí na sekvenční
přístup a pole na okamžitý přístup k libovolné položce. Zbavovat se
jednoho systému na úkor druhého je snad zbytečné, ne?

edit: reakce na Kita

Editováno 6.6.2013 11:28
Nahoru Odpovědět  +1 6.6.2013 11:27
Za posledních 200 miliónů let se nic zvláštního nestalo, akorát dinosauři vymřeli a opice se naučily programovat.
Avatar
Kit
Redaktor
Avatar
Odpovídá na Petr Nymsa
Kit:

"hrací plocha" je vlastně jakýmsi synonymem pro "pole". Nevidím důvod, proč bych v opodstatněných případech nepoužil pole. Jen mám občas pocit, že se někdy používá pole i tam, kde by se měly použít jiné datové typy.

Například Fortranu nic jiného než pole vlastně ani není, pracuje s polem efektivněji než C a hlavně se mnohem lépe programuje. V jazycích odvozených od C by se měly používat vyšší datové struktury všude tam, kde je to vhodné.

Nahoru Odpovědět  +1 6.6.2013 11:28
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Kit
Redaktor
Avatar
Odpovídá na TomBen
Kit:

Však se sekvenční přístup běžně používá i na těch polích. Přímý přístup se používá málokdy.

Nahoru Odpovědět 6.6.2013 11:32
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Odpovídá na Kit
Luboš Běhounek (Satik):

Ve hrách se přímý přístup používá docela často, viz třeba nějaký ten pathfinding s záplavovým algoritmem, kde skáčeš do pole všelijak, jen ne sekvenčně.

Nahoru Odpovědět 6.6.2013 11:36
:)
Avatar
Kit
Redaktor
Avatar
Odpovídá na Luboš Běhounek (Satik)
Kit:

Pochopil jsi to správně s tím jedním seznamem. Ten tah však můžeš zaznamenat do více seznamů s takovou redundancí, aby vyhledávání např. výherních pozic nebo podklady pro AI bylo efektivnější.

Vedlejším efektem by bylo, že hrací plocha se stane de facto neomezeně velkou, což třeba u piškvorek asi nebude zrovna nejžádanější vlastnost.

Nahoru Odpovědět 6.6.2013 11:39
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Kit
Redaktor
Avatar
Odpovídá na Luboš Běhounek (Satik)
Kit:

Zrovna záplavový algoritmus se mi jeví sekvenční ažaž.

Nahoru Odpovědět 6.6.2013 11:41
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
TomBen
Redaktor
Avatar
TomBen:

Piškvorková AI by byl dobrý námět na machra. :-)

Nahoru Odpovědět  +4 6.6.2013 11:44
Za posledních 200 miliónů let se nic zvláštního nestalo, akorát dinosauři vymřeli a opice se naučily programovat.
Avatar
Odpovídá na Kit
Luboš Běhounek (Satik):

Mě se záplavový algoritmus sekvenční nejeví vůbec, začínáš přeci na poli, odkud chceš hedat a pak procházíš postupně okolní body, kde tam je něco sekvenčního?

Např. když máš pole
0 1 2 3
4 5 6 7
8 9 A B
C D E F

a hledal bys cestu z 0 do A, tak budeš postupně prohledávat body (přesný postup by záležel na implementaci, jedna z nich by dopadla takto)
1 4 2 5 8 3 6 9 C 7 A

Využití sekvenčního procházení tam nikde nevidím.

Editováno 6.6.2013 11:52
Nahoru Odpovědět 6.6.2013 11:51
:)
Avatar
Odpovídá na TomBen
Luboš Běhounek (Satik):

Chtělo by to napsat nějaký základ a interface, aby účastníci jen dodali DLL s AI mohly se pustit dvě AI proti sobě, piškvorkový turnaj :)

Nahoru Odpovědět  +2 6.6.2013 11:55
:)
Avatar
Kit
Redaktor
Avatar
Odpovídá na Luboš Běhounek (Satik)
Kit:

Z 0 vedou například 2 sekvence:

0 -> 1 -> 2 -> 3
0 -> 4 -> 8 -> C

Z 9 vedou 4 sekvence.

Nahoru Odpovědět 6.6.2013 12:01
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Odpovídá na Kit
Luboš Běhounek (Satik):

"Z 0 vedou například 2 sekvence:

0 -> 1 -> 2 -> 3
0 -> 4 -> 8 -> C

Z 9 vedou 4 sekvence."

Uh.
To klidně můžou, ale to ten záplavový algoritmus přece vůbec nezajímá, on prohledává okolí ve "vlnách", viz animace (nutno kliknout, aby se to animovalo).

Pod sekvenčním přístupem si představuju třeba foreach na prvcích pole, ale ne to, že při přímém přístupu do pole jde náhodou pár indexů za sebou.

Editováno 6.6.2013 12:16
Nahoru Odpovědět 6.6.2013 12:15
:)
Avatar
Kit
Redaktor
Avatar
Odpovídá na Luboš Běhounek (Satik)
Kit:

Pokud s polem pracuješ cyklem foreach, tak s ním pracuješ jako se seznamem.

Ty indexy však nemusí jít za sebou. Zaplavuješ všemi směry, proto z každého prvku vedou 4 cesty na sousední prvky. Je to vlastně neorientovaný graf, který však nemusí být omezen na 4 cesty, ale třeba u piškvorek může mít 8 cest z každého prvku.

Tohle jsou však algoritmy, které nejsou příliš výhodné v imperativních jazycích, ale např. v Lispu se používají velmi často.

Nahoru Odpovědět 6.6.2013 13:35
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Kit
Redaktor
Avatar
Odpovídá na Luboš Běhounek (Satik)
Kit:

Hezkým příkladem by mohlo být testování korektnosti sudoku. Můžeš to udělat jako matici 9×9 a udělat 3 algoritmy na test (vodorovně, svisle, skupina). Když to však uděláš jako 81 objektů, které umístíš do 27 seznamů po 9 objektech, stačí ti jen jeden testovací algoritmus na všechno.

Nahoru Odpovědět 6.6.2013 13:39
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Luboš Běhounek (Satik):

"Pokud s polem pracuješ cyklem foreach, tak s ním pracuješ jako se seznamem."
Někdy také, ale byl to jen příklad toho, co si představuju pod pojmem sekvenční přístup.

"Ty indexy však nemusí jít za sebou. Zaplavuješ všemi směry, proto z každého prvku vedou 4 cesty na sousední prvky. Je to vlastně neorientovaný graf, který však nemusí být omezen na 4 cesty, ale třeba u piškvorek může mít 8 cest z každého prvku."
Jestli prohledáváš osmiokolí nebo čtyřokolí je v tomhle případě úplně jedno.
To už přece není sekvenční přístup, když ty indexy nejsou za sebou, ale skáčeš při prohledávání v podstatě na náhodné indexy do té mapy...

"Tohle jsou však algoritmy, které nejsou příliš výhodné v imperativních jazycích, ale např. v Lispu se používají velmi často."
Nevím, proč by neměl tenhle algoritmus být výhodný v imperativním jazyce. Lisp neznám, nevidím moc důvod tyhle obskurní jazyky používat :) .

Nahoru Odpovědět 6.6.2013 13:52
:)
Avatar
Kit
Redaktor
Avatar
Odpovídá na Luboš Běhounek (Satik)
Kit:

Pokud se ti seznamy jeví výhodné v imperativním jazyce, tak proč je tak kritizuješ?

I když ty indexy při záplavě nejdou za sebou, v seznamech se stále jedná o sekvenční přístup.

Nahoru Odpovědět 6.6.2013 14:01
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Odpovídá na Kit
Luboš Běhounek (Satik):

U toho sudoku souhlasím, že by to tvé řešení bylo docela hezké.

Já nekritizuju seznamy, jen mi to přišlo, že bys je nejraději cpal všude, i tam, kde se více hodí pole, třeba na tu reprezentaci mapy pro záplavové hledání.

Ani když tu mapu máš místo pole uloženou jako seznam, tak tam nezapisuješ/nečteš sekvenčně při záplavovém prohledávání, vždyť je to nesmysl, ještě jednou:

Mám mapu
0 1 2 3
4 5 6 7
8 9 A B
C D E F
uloženou jako list (0 1 2 3 4 5 6 7 8 9 A B C D E F)
a hledám tu cestu třeba z 0 do A, tak saháš postupně na indexy
1 4 2 5 8 3 6 9 C 7 A

Já tam pořád žádnou sekvenci nevidím a jako sekvenční přístup mi to rozhodně nepřipadá :)

Nahoru Odpovědět 6.6.2013 14:35
:)
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 59 zpráv z 59.