Začátky programování - jaký jazyk zvolit?
Re: Začátka programování
Ten HLEDEJ-DOMOV funguje pěkně, možná by šel ještě trochu optimalizovat, ale tím se zatím netrap. Akorát to ukončení příkazem STOP je trochu nepříjemné, program by měl skončit sám a nechtít po uživateli nějaké kliknutí.
Ale JAKO-KŮŇ se zacyklí, protože pokračuje i na poli kde už značka je - bylo navštívené! Z něj se musíš vrátit do výchozí pozice a zkusit další z osmi možných polí.
Ale JAKO-KŮŇ se zacyklí, protože pokračuje i na poli kde už značka je - bylo navštívené! Z něj se musíš vrátit do výchozí pozice a zkusit další z osmi možných polí.
"Král Lávra má dlouhé oslí uši, král je ušatec!
(pravil K. H. Borovský o cenzuře internetu)
(pravil K. H. Borovský o cenzuře internetu)
Re: Začátka programování
zkusil jsem v kódu přepsat toto:
na toto:
ale nefunguje to - Karel narazí do zdi. Nerozumím proč.
udělal jsem koně. proskáče většinu pole, ale pak se někde v rohu zacyklí a skáče pořád na ta samá pole. přitom by se podlě mě měl otočit postupně na všechny strany a vyzkoušet tak všech osm možností.
děkuju za pomoc a ochotu s mojí výukou zde :)
dpolněno: aha, tak to vypadá, že se Karel dostane do místa, z kterého se prostě nedá nikam jít - a podle zadání nesmí navštívit jedno pole dvakrát, takže se ani nemůže vrátit...
Kód: Vybrat vše
KDYŽ JE DOMOV
STOP
KONEC, JINAK
na toto:
Kód: Vybrat vše
DOKUD NENÍ DOMOV
ale nefunguje to - Karel narazí do zdi. Nerozumím proč.
udělal jsem koně. proskáče většinu pole, ale pak se někde v rohu zacyklí a skáče pořád na ta samá pole. přitom by se podlě mě měl otočit postupně na všechny strany a vyzkoušet tak všech osm možností.
Kód: Vybrat vše
ZAČÁTEKKONĚ
POLOŽ
KŮŇ
KONEC
Kód: Vybrat vše
KŮŇ
VLEVO-VBOK
SKOKL
KONEC
Kód: Vybrat vše
SKOKL
KDYŽ NENÍ ZEĎ
KROK
KDYŽ NENÍ ZEĎ
KROK
VLEVO-VBOK
KDYŽ NENÍ ZEĎ
KROK
KDYŽ NENÍ ZNAČKA
POLOŽ
KŮŇ
KONEC, JINAK
ČELEM-VZAD
KROK
VPRAVO-VBOK
KROK
KROK
ČELEM-VZAD
SKOKR
KONEC
KONEC, JINAK
VLEVO-VBOK
KROK
KROK
ČELEM-VZAD
SKOKR
KONEC
KONEC, JINAK
ČELEM-VZAD
KROK
ČELEM-VZAD
KŮŇ
KONEC
KONEC, JINAK
KŮŇ
KONEC
KONEC
Kód: Vybrat vše
SKOKR
KDYŽ NENÍ ZEĎ
KROK
KDYŽ NENÍ ZEĎ
KROK
VPRAVO-VBOK
KDYŽ NENÍ ZEĎ
KROK
KDYŽ NENÍ ZNAČKA
POLOŽ
KŮŇ
KONEC, JINAK
ČELEM-VZAD
KROK
VLEVO-VBOK
KROK
KROK
ČELEM-VZAD
KŮŇ
KONEC
KONEC, JINAK
VPRAVO-VBOK
KROK
KROK
ČELEM-VZAD
KŮŇ
KONEC
KONEC, JINAK
ČELEM-VZAD
KROK
ČELEM-VZAD
KŮŇ
KONEC
KONEC, JINAK
KŮŇ
KONEC
KONEC
děkuju za pomoc a ochotu s mojí výukou zde :)
dpolněno: aha, tak to vypadá, že se Karel dostane do místa, z kterého se prostě nedá nikam jít - a podle zadání nesmí navštívit jedno pole dvakrát, takže se ani nemůže vrátit...
Re: Začátka programování
Když se Karel dostane na pole ze kterého není možné pokračovat, tak se musí vrátit o úroveň zpět, a samozřejmě ještě předtím pole "odznačit", aby bylo možné ho použít znovu při skocích odjinud, takže zvednout z něj značku.
Zkus si také zmenšit plochu kterou má Karel proskákat, při velikosti 5x5 se výsledku (úplného vyplnění) dočkáš během chvilky.
Zkus si také zmenšit plochu kterou má Karel proskákat, při velikosti 5x5 se výsledku (úplného vyplnění) dočkáš během chvilky.
"Král Lávra má dlouhé oslí uši, král je ušatec!
(pravil K. H. Borovský o cenzuře internetu)
(pravil K. H. Borovský o cenzuře internetu)
Re: Začátky programování - jaký jazyk zvolit?
pokusil jsem se o rekurzi, tedy pokud se nepodaří pokračovat příkazu dál, vrátí se o úroveň zpět, kde příkaz pokračuje dál zvednutím značky a návratem do předchozí polohy. Protože jde (pokud ve skutečnosti nejde, tak jsem to tak zamýšlel) o rekurzi, měl by se Karel, pokud by se nedalo pokračovat dál, teoreticky vracet zpět nekonečněkrát, dokud nedosáhne výchozí polohy, ze které se vydá jiným směrem (jen teoreticky, prakticky by mělo stačit návrat zpět o maximálně několik poloh).
Ovšem nefunguje to. Karel se zasekne v rohu a rekurze jako by nebyla (vůbec se nepokouší zvedat značky, takže ten kus kódu není nikdy použit?).
zvýraznil jsem tu "rekurzi", ještě jsem provedl menší změny, aby příkaz začal startovacím příkazem a pak se prohazovaly ony dva hlavní příkazy bez jednoho nadřazeného.
je alespoň princip správný, nebo uvažuji úplně špatným směrem? Nenapadá mě, jak jinak zjistit, zda se karel vydal vlevo nebo vpravo (a má se tudíž vrátit jednou anebo tou druhou cestou), než rekurzivně přímo v tom příkazu SKOKL nebo SKOKR.
Ovšem nefunguje to. Karel se zasekne v rohu a rekurze jako by nebyla (vůbec se nepokouší zvedat značky, takže ten kus kódu není nikdy použit?).
zvýraznil jsem tu "rekurzi", ještě jsem provedl menší změny, aby příkaz začal startovacím příkazem a pak se prohazovaly ony dva hlavní příkazy bez jednoho nadřazeného.
Kód: Vybrat vše
KŮŇ
POLOŽ
SKOKL
KONEC
Kód: Vybrat vše
SKOKL
KDYŽ NENÍ ZEĎ
KROK
KDYŽ NENÍ ZEĎ
KROK
VLEVO-VBOK
KDYŽ NENÍ ZEĎ
KROK
KDYŽ NENÍ ZNAČKA
POLOŽ
SKOKL
[b]ZVEDNI
ČELEM-VZAD
KROK
VPRAVO-VBOK
KROK
KROK
čelem-vzad
SKOKR[/b]
KONEC, JINAK
ČELEM-VZAD
KROK
VPRAVO-VBOK
KROK
KROK
ČELEM-VZAD
SKOKR
KONEC
KONEC, JINAK
VLEVO-VBOK
KROK
KROK
ČELEM-VZAD
SKOKR
KONEC
KONEC, JINAK
ČELEM-VZAD
KROK
ČELEM-VZAD
SKOKR
KONEC
KONEC, JINAK
SKOKR
KONEC
KONEC
Kód: Vybrat vše
SKOKR
KDYŽ NENÍ ZEĎ
KROK
KDYŽ NENÍ ZEĎ
KROK
VPRAVO-VBOK
KDYŽ NENÍ ZEĎ
KROK
KDYŽ NENÍ ZNAČKA
POLOŽ
SKOKL
[b]ZVEDNI
ČELEM-VZAD
KROK
VLEVO-VBOK
KROK
KROK
VPRAVO-VBOK
SKOKL[/b]
KONEC, JINAK
ČELEM-VZAD
KROK
VLEVO-VBOK
KROK
KROK
ČELEM-VZAD
VLEVO-VBOK
SKOKL
KONEC
KONEC, JINAK
VPRAVO-VBOK
KROK
KROK
ČELEM-VZAD
VLEVO-VBOK
SKOKL
KONEC
KONEC, JINAK
ČELEM-VZAD
KROK
ČELEM-VZAD
VLEVO-VBOK
SKOKL
KONEC
KONEC, JINAK
VLEVO-VBOK
SKOKL
KONEC
KONEC
je alespoň princip správný, nebo uvažuji úplně špatným směrem? Nenapadá mě, jak jinak zjistit, zda se karel vydal vlevo nebo vpravo (a má se tudíž vrátit jednou anebo tou druhou cestou), než rekurzivně přímo v tom příkazu SKOKL nebo SKOKR.
Re: Začátky programování - jaký jazyk zvolit?
Já bych na to šel malinko jinak, ale i tvůj způsob může vést k funkčnímu řešení. Je to tak jak píšeš, vracet se musíš zase v tom skoku který jsi provedl, neexistuje jiný způsob jak zjistit ve které části postupu se právě nacházíš.
Ale ještě jednou se nad tím zamysli: příkaz KŮŇ položí značku a začne skákat, ale co když na tomhle poli už značka je? To by znamenalo že se z něj už skákalo a dostal by ses do nekonečného cyklu!
A další věc - z každého pole můžeš skočit na osm jiných, takže ty tvoje SKOKL a SKOKR lze provést do čtyř různých směrů. Mohl bys to zjednodušit tím, že je oba spojíš do jednoho písmene T, které pak v cyklu provedeš čtyřikrát, třeba takhle:
Na místě každé té číslice, pokud se na to pole dá dostat a není už obsazené, znovu zavoláš skákání, a opět se odtamtud bude skákat na osm dalších polí...
Ale ještě jednou se nad tím zamysli: příkaz KŮŇ položí značku a začne skákat, ale co když na tomhle poli už značka je? To by znamenalo že se z něj už skákalo a dostal by ses do nekonečného cyklu!
A další věc - z každého pole můžeš skočit na osm jiných, takže ty tvoje SKOKL a SKOKR lze provést do čtyř různých směrů. Mohl bys to zjednodušit tím, že je oba spojíš do jednoho písmene T, které pak v cyklu provedeš čtyřikrát, třeba takhle:
Kód: Vybrat vše
┌─────>2
8 1<─┐ ┌─┘ 3
^─┐ │ │ ^─┐
│ └───┘^└───┘ │
│ ┌───┐K┌───┐ │
└─v │ │ └─v
7 ┌─┘ └─>5 4
6<─────┘
Na místě každé té číslice, pokud se na to pole dá dostat a není už obsazené, znovu zavoláš skákání, a opět se odtamtud bude skákat na osm dalších polí...
"Král Lávra má dlouhé oslí uši, král je ušatec!
(pravil K. H. Borovský o cenzuře internetu)
(pravil K. H. Borovský o cenzuře internetu)
Re: Začátky programování - jaký jazyk zvolit?
zkusil jsem to přepsat do přibližné podoby nákresu, přičemž provede 1, pak 2 a pak se vrátí zpět do výchozí pozice, kde ho cyklus "opakuj 4-krát" vždy nasměruje o jednu světovou stranu vlevo (měl jsem tam "vpravo-vbok", tedy dle nákresu, ale protože je to vlastně trojnásobek "vlevo-vbok", karel se zbytečně otáčel, takhle tam už nerotuje) a pokusí se o další T.
vypadá to pěkně funkčně, Karel tam poskakuje, když je v úzkých, tak se vrací a sbírá značky zpět. Co je špatně, je to, že není schopný splnit úkol :) vždycky dohopsá do pole, kde začal, a má hotovo.
dělá to ať ho spouštím příkazem SKOK, nebo startovacím příkazem ZAČÁTEKKONĚ...
edit:aha, je tam chyba, jdu ji opravit:
vypadá to, že už funguje (alespoň na poli 5x5, víc se mi nechtělo čekat :) )
přidal jsem tam komentáře a zalamovače řádků, abych se v tom při opravování té chyby vyznal
Kód: Vybrat vše
SKOK
OPAKUJ 4-KRÁT
VLEVO-VBOK
KDYŽ NENÍ ZEĎ
KROK
KDYŽ NENÍ ZEĎ
KROK
VLEVO-VBOK
KDYŽ NENÍ ZEĎ
KROK
KDYŽ NENÍ ZNAČKA
POLOŽ
SKOK
ZVEDNI
ČELEM-VZAD
KROK
KDYŽ NENÍ ZEĎ
KROK
KDYŽ NENÍ ZNAČKA
POLOŽ
SKOK
ZVEDNI
ČELEM-VZAD
KROK
VLEVO-VBOK
KROK
KROK
ČELEM-VZAD
KONEC, JINAK
ČELEM-VZAD
KROK
VLEVO-VBOK
KROK
KROK
ČELEM-VZAD
KONEC
KONEC, JINAK
VPRAVO-VBOK
KROK
KROK
ČELEM-VZAD
KONEC
KONEC, JINAK
ČELEM-VZAD
KROK
VPRAVO-VBOK
KROK
KROK
ČELEM-VZAD
KONEC
KONEC, JINAK
VLEVO-VBOK
KROK
KROK
ČELEM-VZAD
KONEC
KONEC, JINAK
ČELEM-VZAD
KROK
ČELEM-VZAD
KONEC
KONEC
KONEC
KONEC
vypadá to pěkně funkčně, Karel tam poskakuje, když je v úzkých, tak se vrací a sbírá značky zpět. Co je špatně, je to, že není schopný splnit úkol :) vždycky dohopsá do pole, kde začal, a má hotovo.
dělá to ať ho spouštím příkazem SKOK, nebo startovacím příkazem ZAČÁTEKKONĚ...
Kód: Vybrat vše
ZAČÁTEKKONĚ
POLOŽ
SKOK
KONEC
edit:aha, je tam chyba, jdu ji opravit:
vypadá to, že už funguje (alespoň na poli 5x5, víc se mi nechtělo čekat :) )
přidal jsem tam komentáře a zalamovače řádků, abych se v tom při opravování té chyby vyznal
Kód: Vybrat vše
SKOK
;krok rovně: A, krok vlevo: B, krok vpravo:C. Tedy kůň doleva=AAB, doprava=AAC.
OPAKUJ 4-KRÁT
VLEVO-VBOK
KDYŽ NENÍ ZEĎ
KROK
;jsme na A
KDYŽ NENÍ ZEĎ
KROK
;jsme na AA
VLEVO-VBOK
KDYŽ NENÍ ZEĎ
KROK
;jsme na AAB
KDYŽ NENÍ ZNAČKA
POLOŽ
SKOK
;nepovedlo se odtud dokončit úlohu, vracíme se a pokračujeme směrem doprava:
ZVEDNI
ČELEM-VZAD
KROK
;jsme na AA
KDYŽ NENÍ ZEĎ
KROK
;jsme na AAC
KDYŽ NENÍ ZNAČKA
POLOŽ
SKOK
ZVEDNI
ČELEM-VZAD
KROK
VLEVO-VBOK
KROK
KROK
ČELEM-VZAD
KONEC, JINAK
ČELEM-VZAD
KROK
VLEVO-VBOK
KROK
KROK
ČELEM-VZAD
KONEC
KONEC, JINAK
VPRAVO-VBOK
KROK
KROK
ČELEM-VZAD
KONEC
KONEC, JINAK
ČELEM-VZAD
KROK
KDYŽ NENÍ ZEĎ
KROK
;jsme na AAC
KDYŽ NENÍ ZNAČKA
POLOŽ
SKOK
ZVEDNI
ČELEM-VZAD
KROK
VLEVO-VBOK
KROK
KROK
ČELEM-VZAD
KONEC, JINAK
ČELEM-VZAD
KROK
VLEVO-VBOK
KROK
KROK
ČELEM-VZAD
KONEC
KONEC, JINAK
VPRAVO-VBOK
KROK
KROK
ČELEM-VZAD
KONEC
KONEC
KONEC, JINAK
;nepovedlo se nám jít na AAB, zkusíme AAC
ČELEM-VZAD
KDYŽ NENÍ ZEĎ
KROK
KDYŽ NENÍ ZNAČKA
POLOŽ
SKOK
;nepovedlo se odtud dokončit úlohu, vracíme se do úůvodní pozice
ZVEDNI
ČELEM-VZAD
KROK
VLEVO-VBOK
KROK
KROK
ČELEM-VZAD
KONEC, JINAK
ČELEM-VZAD
KROK
VLEVO-VBOK
KROK
KROK
ČELEM-VZAD
KONEC
KONEC, JINAK
VPRAVO-VBOK
KROK
KROK
ČELEM-VZAD
KONEC
KONEC
KONEC, JINAK
ČELEM-VZAD
KROK
ČELEM-VZAD
KONEC
KONEC
KONEC
KONEC
Re: Začátky programování - jaký jazyk zvolit?
No, je to strašně komplikované (není divu že se v tom ztrácíš), a první značku bys měl položit už na poli odkud program startuje, to je vlastně číslo 1, ale jinak už se blížíš
Zkoušel jsem to na ploše 5x5, za chvíli program vyplnil všechna pole, jenže potom při hledání dalšího možného řešení Karel vrazil do zdi!
Komentáře jsou dobrý nápad, a do budoucna ti určitě hodně pomůžou, zvlášť až budeš opravovat nebo upravovat program který jsi napsal před pár měsíci (natož lety)...
Zkus si vytvořit to "téčko" samostatně, místo volání rekurze jen polož značku ať vidíš že tam Karel byl, a spouštěj ho z různých míst, jak ve volném prostoru, tak i různě daleko od zdi, abys vyzkoušel všechny možnosti kde Karel může narazit. A když na konci vracení se Karel zatočí, tak se ti celá činnost kterou musíš provést na volném poli zjednoduší na jeden cyklus:
Pak záleží jen na tobě jestli budeš dál používat přímou rekurzi a ten rozskok vepíšeš dovnitř cyklu, nebo použiješ vzájemnou rekurzi, kde SKOK bude volat TÉČKO, a TÉČKO zase SKOK (tady už stačí nepodmíněně, protože podmínku přerušující rekurzi - značku - máš v tom SKOKu).
Zkoušel jsem to na ploše 5x5, za chvíli program vyplnil všechna pole, jenže potom při hledání dalšího možného řešení Karel vrazil do zdi!
Komentáře jsou dobrý nápad, a do budoucna ti určitě hodně pomůžou, zvlášť až budeš opravovat nebo upravovat program který jsi napsal před pár měsíci (natož lety)...
Zkus si vytvořit to "téčko" samostatně, místo volání rekurze jen polož značku ať vidíš že tam Karel byl, a spouštěj ho z různých míst, jak ve volném prostoru, tak i různě daleko od zdi, abys vyzkoušel všechny možnosti kde Karel může narazit. A když na konci vracení se Karel zatočí, tak se ti celá činnost kterou musíš provést na volném poli zjednoduší na jeden cyklus:
Kód: Vybrat vše
POLOŽ
OPAKUJ 4-KRÁT
TÉČKO
KONEC
ZVEDNI
Pak záleží jen na tobě jestli budeš dál používat přímou rekurzi a ten rozskok vepíšeš dovnitř cyklu, nebo použiješ vzájemnou rekurzi, kde SKOK bude volat TÉČKO, a TÉČKO zase SKOK (tady už stačí nepodmíněně, protože podmínku přerušující rekurzi - značku - máš v tom SKOKu).
"Král Lávra má dlouhé oslí uši, král je ušatec!
(pravil K. H. Borovský o cenzuře internetu)
(pravil K. H. Borovský o cenzuře internetu)
Re: Začátky programování - jaký jazyk zvolit?
prosím o pomoc, nedaří se mi pochopit, proč se Karel pokouší zvedat značku tam, kde není:
strávil jsem tím teď už drahnou dobu a ne a ne na to přijít. Zjednodušil jsem program na dvě části; poprvé půjde karel dva kroky rovně a pak doleva, pokud to nepůjde, vrátí se zpět, a zkusí to stejnou cestou, ale doprava.
četl jsem to po sobě snad dvacetkrát, a prostě tam tu chybu nevidím :/
Kód: Vybrat vše
técko
;otáčíme se o jedna vpravo
vpravo-vbok
;jdeme o jeden krok vpřed
když není zeď
krok
;jdeme o jeden krok vpřed
když není zeď
krok
;jdeme vlevo
vlevo-vbok
když není zeď
krok
;je-li značka, polož a jdi odtud dál
když není značka
koník
konec, jinak
;je značka, jdeme zpet
čelem-vzad
krok
vpravo-vbok
krok
krok
čelem-vzad
konec
konec, jinak
vlevo-vbok
krok
krok
čelem-vzad
konec
konec, jinak
čelem-vzad
krok
čelem-vzad
konec
konec
;jdeme o jeden krok vpřed
když není zeď
krok
;jdeme o jeden krok vpřed
když není zeď
krok
;jdeme vpravo
vpravo-vbok
když není zeď
krok
;je-li značka, polož a jdi odtud dál
když není značka
koník
konec, jinak
;je značka, jdeme zpet
čelem-vzad
krok
vlevo-vbok
krok
krok
čelem-vzad
konec
konec, jinak
vpravo-vbok
krok
krok
čelem-vzad
konec
konec, jinak
čelem-vzad
krok
čelem-vzad
konec
konec
konec
Kód: Vybrat vše
koník
POLOŽ
OPAKUJ 4-KRÁT
TÉČKO
KONEC
ZVEDNI
konec
strávil jsem tím teď už drahnou dobu a ne a ne na to přijít. Zjednodušil jsem program na dvě části; poprvé půjde karel dva kroky rovně a pak doleva, pokud to nepůjde, vrátí se zpět, a zkusí to stejnou cestou, ale doprava.
četl jsem to po sobě snad dvacetkrát, a prostě tam tu chybu nevidím :/
Re: Začátky programování - jaký jazyk zvolit?
Teda, řeknu ti že jsi pořádný grafoman, máš to TÉČKO na 61 řádek, když jsem vyházel komentáře a prázdné řádky. Já jsem se vešel na 27, ale vypomohl jsem si cyklem.
Někdy nestačí jen číst, je potřeba také malovat. Jestli ses ještě nenaučil vývojové diagramy, tak teď je ta správná chvíle s nimi začít:
Mě pouhé čtení také nestačilo, musel jsem si to projít prstem a ještě navrch krokovat, abych věděl co se tam přesně děje. Takže to vezmeme bod po bodu:
Ještě k tomu pravidlu o vracení: platí pro tenhle typ úloh, ve kterých něco procházíš a vracíš se zase zpět. Druhý typ úloh je takový, že naopak rekurze provádí jednosměrnou činnost, například když má Karel popojít o tolik polí, kolik je na místě kde stojí značek. V takovém případě se toho pravidla samozřejmě držet nemůžeš
Někdy nestačí jen číst, je potřeba také malovat. Jestli ses ještě nenaučil vývojové diagramy, tak teď je ta správná chvíle s nimi začít:
Mě pouhé čtení také nestačilo, musel jsem si to projít prstem a ještě navrch krokovat, abych věděl co se tam přesně děje. Takže to vezmeme bod po bodu:
- VPRAVO-VBOK je dobrý nápad, ale spíš bych se točil doleva, ve výsledku mi tak proběhnou 4 VLEVO-VBOK, zatímco tobě 12. Já jsem to prováděl až na konci celého příkazu, ne hned na začátku, ale výsledek je stejný.
- A tady to začíná. všimni si že tam máš dvakrát rozepsaný téměř identický program, lišící se jen v detailech. První půlku cesty (kde jsou podmínky 1, 2, 5 a 6) totiž stačí ujít jen jednou, stejně jako návrat z ní, a samostatně je třeba řešit jen odbočky na vršku toho T. Takže veškeré duplikované příkazy máš zvýrazněné červeně.
- Když se nad těmi odbočkami trochu zamyslíš, tak zjistíš že se vlastně také jedná o dvě shodné činnosti, lišící se jen směrem do kterého je Karel na jejich začátku otočený, proto věci které se dají provést v cyklu jsou zvýrazněné zeleně.
- Teď se dostáváme k problému, který ti způsobuje podivné chování Karla. A je to docela velká chyba. Platí totiž pravidlo (viz níže) že z rekurze se musíš vždy vracet ve stejném stavu v jakém jsi do ní vstoupil, to znamená že Karel by měl v každém případě po rekurzi stát na stejném poli a otočený do stejného směru. A co tvůj program dělá? Když je na cílovém poli značka, tak se Karel vrátí na výchozí pole, jenže když tam značka není, zavolá KONÍK a po návratu z něj zůstane stát na místě! Potom se vrátí do předchozího provádění KONÍK a pokusí se vyzkoušet další TÉČKO v dalším směru, ale z úplně jiného místa než předchozí...
Takže ta červeně škrtnutá čára musí vést jinam, protože i po té rekurzi je nutné vrátit se na výchozí pozici. - A když už jsme u toho zjednodušování, všimni si závěru druhého, třetího a čtvrtého sloupce (ale až po tom co opravíš tu chybnou spojnici v pátém sloupci!). Ve třetím a čtvrtém je sekvence
KROK
KROK
ČELEM-VZAD
kterou mají společnou. Takže jí můžeš celou přesunout až za KONEC třetí podmínky, tedy za spoj obou větví ve třetím sloupci.
To samé v tu chvíli platí pro druhý a třetí sloupec, kde je společná sekvence
KROK
ČELEM-VZAD
se kterou můžeš provést totéž, přesunout jí za spojnici obou větví podmínky ve druhém sloupci. Tím se celý příkaz zkrátí o pět zbytečných řádků.
Ještě k tomu pravidlu o vracení: platí pro tenhle typ úloh, ve kterých něco procházíš a vracíš se zase zpět. Druhý typ úloh je takový, že naopak rekurze provádí jednosměrnou činnost, například když má Karel popojít o tolik polí, kolik je na místě kde stojí značek. V takovém případě se toho pravidla samozřejmě držet nemůžeš
"Král Lávra má dlouhé oslí uši, král je ušatec!
(pravil K. H. Borovský o cenzuře internetu)
(pravil K. H. Borovský o cenzuře internetu)
Re: Začátky programování - jaký jazyk zvolit?
Ahoj, děkuji za tak rozsáhlou odpověď, nechceš si zřídit online výuku základů programování na coursera.org či podobných, nebo na vlastním webu? Za tohle už by měl náležet nějaký revanš :)
O programování nevím téměř nic, začal jsem s tím asi týden předtím, než jsem začal psát sem, jsou mi tedy cizí i vývojové diagramy. Chtěl jsem začít pythonem, půjčil jsem si na to i knihu, ale myslím, že bych si měl první sehnat nějakou obecnější, kde je shrnuto v podstatě to, co mě tu teď učíš ty. Neznáš nějakou vhodnou?
tu zásadní chybu jsem tam udělal nedopatřením, v minulé verzi, která měla zas jiné chyby, jsem tohle vyřešil správně. Tady jsem na to zřejmě zapomněl a při hledání chyby mě to nějak nenapadlo...
Myslím, že jsem se vypořádal se všemi námitkami:
O programování nevím téměř nic, začal jsem s tím asi týden předtím, než jsem začal psát sem, jsou mi tedy cizí i vývojové diagramy. Chtěl jsem začít pythonem, půjčil jsem si na to i knihu, ale myslím, že bych si měl první sehnat nějakou obecnější, kde je shrnuto v podstatě to, co mě tu teď učíš ty. Neznáš nějakou vhodnou?
tu zásadní chybu jsem tam udělal nedopatřením, v minulé verzi, která měla zas jiné chyby, jsem tohle vyřešil správně. Tady jsem na to zřejmě zapomněl a při hledání chyby mě to nějak nenapadlo...
Myslím, že jsem se vypořádal se všemi námitkami:
Kód: Vybrat vše
koník
POLOŽ
OPAKUJ 4-KRÁT
skript_koně
KONEC
ZVEDNI
konec
Kód: Vybrat vše
skript_koně
vlevo-vbok
když není zeď
krok
když není zeď
krok
;jsme na vrcholu tecka, jdeme vlevo, pak vpravo, jinak zpet
vlevo-vbok
test_koně
test_koně
vlevo-vbok
krok
krok
čelem-vzad
konec, jinak
čelem-vzad
krok
čelem-vzad
konec
konec
konec
Kód: Vybrat vše
test_koně
když není zeď
krok
když není značka
koník
čelem-vzad
krok
konec, jinak
čelem-vzad
krok
konec
konec, jinak
čelem-vzad
konec
konec
Re: Začátky programování - jaký jazyk zvolit?
Román za román, ne? Ale je fakt že když se rozjedu, tak nevím kdy zastavit
Tak tenhle program vypadá že dělá přesně to co má, takže bych řekl že rekurzí ses úspěšně prokousal. Ještě bys to mohl zkusit složit do jednoho co nejjednoduššího příkazu, ale to už by neměl být větší problém. Až budu mít chvíli čas tak si ho ještě rozkreslím a kdyžtak napíšu nějaké připomínky.
Loni jsem měl v ruce nějakou učebnici algoritmizace, ta mi připadala docela dobrá, i když v ní nebyl ani jediný příkaz žádného programovacího jazyka. Popisovala všechno čistě teoreticky, takže se podle ní dalo programovat v čemkoliv strukturovaném. Ale mrkni na uloz.to nebo zagoogli, snadno najdeš na základy algoritmizace skripta, to je lepší než spousta knížek a určitě lepší než nějaký tutoriál na netu!
Tak tenhle program vypadá že dělá přesně to co má, takže bych řekl že rekurzí ses úspěšně prokousal. Ještě bys to mohl zkusit složit do jednoho co nejjednoduššího příkazu, ale to už by neměl být větší problém. Až budu mít chvíli čas tak si ho ještě rozkreslím a kdyžtak napíšu nějaké připomínky.
Loni jsem měl v ruce nějakou učebnici algoritmizace, ta mi připadala docela dobrá, i když v ní nebyl ani jediný příkaz žádného programovacího jazyka. Popisovala všechno čistě teoreticky, takže se podle ní dalo programovat v čemkoliv strukturovaném. Ale mrkni na uloz.to nebo zagoogli, snadno najdeš na základy algoritmizace skripta, to je lepší než spousta knížek a určitě lepší než nějaký tutoriál na netu!
"Král Lávra má dlouhé oslí uši, král je ušatec!
(pravil K. H. Borovský o cenzuře internetu)
(pravil K. H. Borovský o cenzuře internetu)
Re: Začátky programování - jaký jazyk zvolit?
kdyby sis vzpomněl na název té učebnice, tak bych ti byl vděčný :)
půjčil jsem si WIRTH, Niklaus. Algorithms + data structures=programs a PŠENČÍKOVÁ, Jana. Algoritmizace.
obě knihy se mi zdají dobré. Akorát tu Pšeničkovou čtu nějak rychle, za tři hodiny jsem už v půlce, včetně programování příkladů v Pythonu... :)
půjčil jsem si WIRTH, Niklaus. Algorithms + data structures=programs a PŠENČÍKOVÁ, Jana. Algoritmizace.
obě knihy se mi zdají dobré. Akorát tu Pšeničkovou čtu nějak rychle, za tři hodiny jsem už v půlce, včetně programování příkladů v Pythonu... :)
-
- Mohlo by vás zajímat
- Odpovědi
- Zobrazení
- Poslední příspěvek
-
- 4
- 1053
-
od petr22
Zobrazit poslední příspěvek
02 kvě 2024 13:59
-
-
Výběr repasovaného notebooku na programování
od HelFix » 13 bře 2024 10:59 » v Rady s výběrem hw a sestavením PC - 5
- 2012
-
od Zivan
Zobrazit poslední příspěvek
20 bře 2024 10:51
-
-
-
Programování pro žáky zš - záverečná práce
od AlastorM » 20 dub 2024 21:19 » v Vše ostatní (z oblasti IT) - 0
- 4035
-
od AlastorM
Zobrazit poslední příspěvek
20 dub 2024 21:19
-
-
- 1
- 1898
-
od Gerete
Zobrazit poslední příspěvek
31 říj 2023 17:40
-
-
2x 27" IPS vs 34" VA . programování, webdesign
od Hakosuka » 26 úno 2024 13:12 » v Rady s výběrem hw a sestavením PC - 0
- 1311
-
od Hakosuka
Zobrazit poslední příspěvek
26 úno 2024 13:12
-
Zpět na “Programování a tvorba webu”
Kdo je online
Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 9 hostů