{"id":40208,"date":"2020-02-01T06:04:35","date_gmt":"2020-02-01T03:04:35","guid":{"rendered":"https:\/\/prohoster.info\/blog\/blog_prohoster\/kak-nauchit-preodolevat-trudnosti-a-zaodno-i-pisat-czikly"},"modified":"2020-02-01T06:04:35","modified_gmt":"2020-02-01T03:04:35","slug":"kak-nauchit-preodolevat-trudnosti-a-zaodno-i-pisat-czikly","status":"publish","type":"post","link":"https:\/\/prohoster.info\/sk\/blog\/kak-nauchit-preodolevat-trudnosti-a-zaodno-i-pisat-czikly","title":{"rendered":"Jak nau\u010dit p\u0159ekon\u00e1vat p\u0159ek\u00e1\u017eky a z\u00e1rove\u0148 ps\u00e1t cykly","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Napriek tomu, \u017ee ide o jednu z z\u00e1kladn\u00fdch t\u00e9m, tento \u010dl\u00e1nok je nap\u00edsan\u00fd pre sk\u00fasen\u00fdch odborn\u00edkov. Cie\u013eom je uk\u00e1za\u0165, ak\u00e9 myln\u00e9 predstavy b\u00fdvaj\u00fa u za\u010diato\u010dn\u00edkov v programovan\u00ed. Pre praktizuj\u00facich v\u00fdvoj\u00e1rov s\u00fa tieto probl\u00e9my u\u017e d\u00e1vno vyrie\u0161en\u00e9, zabudnut\u00e9 alebo si ich v\u00f4bec nev\u0161imn\u00fa. \u010cl\u00e1nok m\u00f4\u017ee by\u0165 u\u017eito\u010dn\u00fd, ak n\u00e1hodou budete musie\u0165 s touto t\u00e9mou niekomu pom\u00f4c\u0165. V \u010dl\u00e1nku s\u00fa vykonan\u00e9 paralely s materi\u00e1lmi z r\u00f4znych kn\u00edh o programovan\u00ed od autorov \u0160ildta, Stroustrupa a Okulova.<\/p>\n<p>T\u00e9ma cyklov bola zvolen\u00e1, preto\u017ee na nej vypad\u00e1va dos\u0165 ve\u013ea \u013eud\u00ed pri osvojen\u00ed si programovania.<\/p>\n<p>T\u00e1to metodika je ur\u010den\u00e1 pre slab\u0161\u00edch \u0161tudentov. Zvy\u010dajne sa siln\u00ed na tejto t\u00e9me nezasek\u00e1vaj\u00fa a nie s\u00fa potrebn\u00e9 \u017eiadne \u0161peci\u00e1lne met\u00f3dy pre nich. Druhotn\u00fdm cie\u013eom \u010dl\u00e1nku je previes\u0165 t\u00fato metodiku z triedy \u201efunguje na v\u0161etk\u00fdch \u0161tudentoch, ale len u jedn\u00e9ho u\u010dite\u013ea\u201c do triedy \u201efunguje u v\u0161etk\u00fdch \u0161tudentov, v\u0161etk\u00fdch u\u010dite\u013eov\u201c. Na absol\u00fatnu originalitu si nen\u00e1rokujem. Ak u\u017e pou\u017e\u00edvate podobn\u00fa metodiku na u\u010denie tejto t\u00e9my, pros\u00edm nap\u00ed\u0161te, \u010d\u00edm sa v\u00e1\u0161 variant l\u00ed\u0161i. Ak sa rozhodnete aplikova\u0165, pode\u013ete sa so mnou o v\u00fdsledky, ako to v\u0161etko prebehlo. Ak je podobn\u00e1 metodika op\u00edsan\u00e1 v nejakej knihe, pros\u00edm nap\u00ed\u0161te, n\u00e1zov tejto knihy.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nT\u00fato metodiku som vypracov\u00e1val 4 roky, zatia\u013e \u010do som sa individu\u00e1lne venoval \u0161tudentom r\u00f4znej \u00farovne pr\u00edpravy. Celkovo asi p\u00e4\u0165desiat \u0161tudentov a dvetis\u00edc hod\u00edn vyu\u010dovania. Na za\u010diatku sa \u0161tudenti na tejto t\u00e9me ve\u010dne zasek\u00e1vali a odch\u00e1dzali. Po ka\u017edom \u0161tudentovi sa metodika a materi\u00e1ly upravovali. Posledn\u00fd rok u\u017e \u0161tudenti na tejto t\u00e9me nezasek\u00e1vaj\u00fa, tak som sa rozhodol podeli\u0165 o tieto poznatky.<\/p>\n<h4>Pre\u010do to\u013eko p\u00edsmen? Cykl je predsa z\u00e1klad!<\/h4>\n<p>\nAko som u\u017e vy\u0161\u0161ie spom\u00ednal, pre praktizuj\u00facich v\u00fdvoj\u00e1rov a pre siln\u00fdch \u0161tudentov m\u00f4\u017ee by\u0165 zlo\u017eitosti konceptu cyklov podce\u0148ovan\u00e1. Napr\u00edklad m\u00f4\u017eete usporiada\u0165 dlh\u00fa predn\u00e1\u0161ku, vidie\u0165 prikyvuj\u00face hlavy a m\u00fadre o\u010di. Ale pri pokuse vyrie\u0161i\u0165 ak\u00fako\u013evek \u00falohu nast\u00e1va zadr\u017eanie a nevysvetlite\u013en\u00e9 probl\u00e9my. Po predn\u00e1\u0161ke mali \u0161tudenti ur\u010dite len \u010diasto\u010dn\u00e9 porozumenie. Situ\u00e1ciu zhor\u0161uje to, \u017ee \u0161tudenti si sami nem\u00f4\u017eu ozn\u00e1mi\u0165, v \u010dom presne spo\u010d\u00edva ich myln\u00e9 presved\u010denie.<br \/>\nRaz som si uvedomil, \u017ee \u0161tudenti vn\u00edmaj\u00fa moje pr\u00edklady ako hieroglyfy. Teda ako nedelite\u013en\u00e9 kusy textu, do ktor\u00fdch je potrebn\u00e9 doplni\u0165 nejak\u00e9 \"magick\u00e9\" p\u00edsmeno a v\u0161etko bude fungova\u0165.<br \/>\nNiekedy som si v\u0161imol, \u017ee \u0161tudenti si myslia, \u017ee na rie\u0161enie konkr\u00e9tneho probl\u00e9mu je potrebn\u00e9 <i>nejak\u00e9 \u010fal\u0161ie<\/i> kon\u0161trukcie, o ktorej som e\u0161te nehovoril. Av\u0161ak na rie\u0161enie sta\u010dilo len trocha modifikova\u0165 pr\u00edklad.<\/p>\n<p>Preto som dospel k my\u0161lienke, \u017ee by sa malo zamera\u0165 nie na syntax v\u00fdrazov, ale na my\u0161lienku o refaktoringu opakovan\u00e9ho k\u00f3du pomocou cyklov. Akon\u00e1hle \u0161tudenti zvl\u00e1dnu t\u00fato my\u0161lienku, ak\u00e1ko\u013evek syntax sa prinesie s pomocou drobn\u00fdch cvi\u010den\u00ed.<\/p>\n<h4>Komu a pre\u010do u\u010d\u00edm<\/h4>\n<p>\nKe\u010f\u017ee nie s\u00fa prij\u00edmacie sk\u00fa\u0161ky, na hodin\u00e1ch m\u00f4\u017eu by\u0165 ako siln\u00ed, tak aj ve\u013emi slab\u00ed \u0161tudenti. Viac o mojich \u0161tudentoch si m\u00f4\u017eete pre\u010d\u00edta\u0165 v \u010dl\u00e1nku <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/350360\/\">Portr\u00e9t posluch\u00e1\u010dov ve\u010dern\u00fdch kurzov<\/a><\/noindex><br \/>\nSna\u017eil som sa, aby programovanie zvl\u00e1dol ka\u017ed\u00fd, kto to chce.<br \/>\nMoje hodiny prebiehaj\u00fa individu\u00e1lne a \u0161tudent plat\u00ed svoje peniaze za ka\u017ed\u00e9. Zdalo by sa, \u017ee \u0161tudenti by mali optimalizova\u0165 n\u00e1klady a \u017eiada\u0165 minimum. Napriek tomu prich\u00e1dzaj\u00fa na osobn\u00e9 hodiny s \u017eiv\u00fdm lektorom nie len pre samotn\u00e9 vedomosti, ale pre pocit istoty, \u017ee to stihli pochopi\u0165, pocit pokroku a schv\u00e1lenie od experta (lektora). Ak \u0161tudenti nebud\u00fa c\u00edti\u0165 pokrok vo svojom vzdel\u00e1van\u00ed, od\u00eddu. Vo v\u0161eobecnosti je mo\u017en\u00e9 vybudova\u0165 hodiny tak, aby \u0161tudenti c\u00edtili pokrok v zvy\u0161ovan\u00ed po\u010dtu zn\u00e1mych kon\u0161trukci\u00ed. Teda najprv podrobne \u0161tudujeme while, potom sa u\u010d\u00edme for, potom do while a m\u00e1me pripraven\u00fd kurz na tis\u00edc a jednu noc, v ktorom sa dva mesiace \u0161tuduj\u00fa len cykly, a na konci \u2014 \u0161tudent, ktor\u00fd na dikt\u00e1t nap\u00edsal \u0161tandardn\u00fa kni\u017enicu. Av\u0161ak na rie\u0161enie praktick\u00fdch \u00faloh je potrebn\u00e9 nielen ovl\u00e1danie materi\u00e1lu, ale aj samostatnos\u0165 v jeho aplik\u00e1cii a v h\u013eadan\u00ed nov\u00fdch inform\u00e1ci\u00ed. Preto pre osobn\u00e9 kurzy pova\u017eujem za spr\u00e1vny princ\u00edp \u2014 nau\u010di\u0165 minimum a podporova\u0165 samostatn\u00e9 \u0161tudovanie nu\u00e1ns a pr\u00edbuzn\u00fdch t\u00e9m. V t\u00e9me o cykloch pova\u017eujem minimom kon\u0161trukciu while. Na nej je mo\u017en\u00e9 pochopi\u0165 princ\u00edp. Znalos\u0165 princ\u00edpu umo\u017e\u0148uje samostatne zvl\u00e1dnu\u0165 aj for a do-while.<\/p>\n<p>Aby sa slab\u00ed \u0161tudenti nau\u010dili materi\u00e1l, nesta\u010d\u00ed op\u00edsa\u0165 syntax. Je potrebn\u00e9 pon\u00faknu\u0165 mno\u017estvo jednoduch\u00fdch, ale r\u00f4znorod\u00fdch \u00faloh a podrobne vysvetli\u0165 pr\u00edklady. Nakoniec r\u00fdchlos\u0165 osvojenia z\u00e1vis\u00ed od schopnosti \u0161tudenta transformova\u0165 v\u00fdrazy a vyh\u013ead\u00e1va\u0165 vzory. Pre bystr\u00fdch \u0161tudentov bud\u00fa v\u00e4\u010d\u0161ina \u00faloh nezauj\u00edmav\u00e9. Pri pr\u00e1ci s nimi netreba trva\u0165 na rie\u0161en\u00ed 100 % \u00faloh. M\u00f4j materi\u00e1l si m\u00f4\u017eete pozrie\u0165 na <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/AKryukov92\/programming-basics\">mojom github-e<\/a><\/noindex>. Prizn\u00e1m sa, \u017ee repozit\u00e1r viac pripom\u00edna grim\u00e1r \u010dierneho m\u00e1ga \u2014 nikto okrem m\u0148a by nepochopil, \u010do kde je, a ak zlyh\u00e1te pri kontrole, m\u00f4\u017eete sa zbl\u00e1zni\u0165<\/p>\n<h4>Metodika je orientovan\u00e1 na prax<\/h4>\n<p>\nTe\u00f3ria je vysvetlen\u00e1 na pr\u00edklade rie\u0161enia \u00falohy. Na hodin\u00e1ch z\u00e1kladov programovania, kde sa \u0161tuduj\u00fa vetvenia a cykly, nebude mo\u017en\u00e9 usporiada\u0165 u\u017eito\u010dn\u00fa predn\u00e1\u0161ku na jednu t\u00e9mu na cel\u00fa hodinu. 15-20 min\u00fat sta\u010d\u00ed na vysvetlenie konceptu. Hlavn\u00e9 \u0165a\u017ekosti sa objavuj\u00fa pri vykon\u00e1van\u00ed praktick\u00fdch \u00faloh.<br \/>\nZa\u010diato\u010dn\u00ed u\u010ditelia m\u00f4\u017eu vyhodi\u0165 oper\u00e1tory, vetvenia, cykly a polia za jednu predn\u00e1\u0161ku. Ale \u0161tudenti sa s probl\u00e9mom osvojenia t\u00fdchto inform\u00e1ci\u00ed stretn\u00fa.<br \/>\nNie je toti\u017e d\u00f4le\u017eit\u00e9 len rozpr\u00e1va\u0165 materi\u00e1l, ale aj uisti\u0165 sa, \u017ee posluch\u00e1\u010di mu rozumej\u00fa.<\/p>\n<p>Skuto\u010dnos\u0165 osvojenia t\u00e9my sa ur\u010duje pod\u013ea toho, ako si \u0161tudent porad\u00ed s samostatnou pr\u00e1cou. <br \/>\nAk sa \u0161tudentovi podarilo vyrie\u0161i\u0165 \u00falohu na t\u00e9mu bez pomoci u\u010dite\u013ea, t\u00e9ma bola osvojen\u00e1. Aby sa zabezpe\u010dila samostatn\u00e1 kontrola, ku ka\u017edej \u00falohe je op\u00edsan\u00e1 tabu\u013eka s testovac\u00edmi scen\u00e1rmi. \u00dalohy maj\u00fa jasne vyjadren\u00fd poriadok. Nenech\u00e1vajte \u00falohy bez rie\u0161enia. Ak je aktu\u00e1lna \u00faloha pr\u00edli\u0161 zlo\u017eit\u00e1, prech\u00e1dza\u0165 na \u010fal\u0161iu je zbyto\u010dn\u00e9. Je e\u0161te zlo\u017eitej\u0161ia. Aby \u0161tudent mohol zvl\u00e1dnu\u0165 aktu\u00e1lnu zlo\u017eit\u00fa \u00falohu, vysvetl\u00ed sa mu nieko\u013eko techn\u00edk na pr\u00edklade prvej \u00falohy. Vlastne, cel\u00e9 obsah t\u00e9my spo\u010d\u00edva v technik\u00e1ch prekon\u00e1vania \u0165a\u017ekost\u00ed. Cyklus je sk\u00f4r ved\u013eaj\u0161\u00ed efekt.<\/p>\n<p>Prv\u00e1 \u00faloha je v\u017edy pr\u00edklad. Druh\u00e1 sa l\u00ed\u0161i len nepatrne a vykon\u00e1va sa 'samostatne' hne\u010f po prvej pod doh\u013eadom u\u010dite\u013ea. V\u0161etky nasleduj\u00face \u00falohy s\u00fa zameran\u00e9 na to, aby upozornili na r\u00f4zne drobnosti, ktor\u00e9 m\u00f4\u017eu vyvol\u00e1va\u0165 omyly.<\/p>\n<p>Vysvetlenie pr\u00edkladu predstavuje dial\u00f3g, v ktorom \u0161tudent mus\u00ed vyvola\u0165 sp\u00e4tn\u00fa propag\u00e1ciu a kr\u00ed\u017eov\u00fa valid\u00e1ciu, aby sa uistil o osvojen\u00ed si \u010dasti materi\u00e1lu.<\/p>\n<p>Budem ban\u00e1lny a vyhl\u00e1sim, \u017ee prv\u00fd pr\u00edklad na t\u00e9mu je ve\u013emi d\u00f4le\u017eit\u00fd. Ak existuje materi\u00e1l na rozsiahlu samostatn\u00fa pr\u00e1cu, nedostatky prv\u00e9ho pr\u00edkladu sa m\u00f4\u017eu napravi\u0165. Ak okrem pr\u00edkladu nie je ni\u010d, \u0161tudent pravdepodobne t\u00e9mu neosvoj\u00ed.<\/p>\n<h4>While alebo for?<\/h4>\n<p>\nJednou z kontroverzn\u00fdch ot\u00e1zok je vo\u013eba kon\u0161trukcie pre pr\u00edklad: while alebo for. Raz ma zn\u00e1my praktikuj\u00faci v\u00fdvoj\u00e1r bez u\u010dite\u013esk\u00fdch sk\u00fasenost\u00ed presvied\u010dal hodinu, \u017ee cyklus for je najjednoduch\u0161\u00ed na pochopenie. Argumenty sa zameriavali na \u201av\u0161etko je jasn\u00e9 a usporiadan\u00e9\u2018. Av\u0161ak skuto\u010dn\u00e1 pr\u00ed\u010dina \u0165a\u017ekost\u00ed skuto\u010dn\u00fdch za\u010diato\u010dn\u00edkov spo\u010d\u00edva v samotnej my\u0161lienke cyklu, a nie v jeho p\u00edsan\u00ed. Ak \u010dlovek nepochop\u00ed t\u00fato my\u0161lienku, bude ma\u0165 \u0165a\u017ekosti so syntaxou. Akon\u00e1hle je my\u0161lienka pochopen\u00e1, probl\u00e9my s form\u00e1tovan\u00edm k\u00f3du sa samy vytr\u00e1caj\u00fa.<\/p>\n<p>V mojich materi\u00e1loch t\u00e9ma cyklov nasleduje t\u00e9mu o vetven\u00ed. Vonkaj\u0161ia podobnos\u0165 if a while umo\u017e\u0148uje priamu anal\u00f3giu: \u201ake\u010f je podmienka v hlavi\u010dke pravdiv\u00e1, vykon\u00e1 sa telo\u2018. \u0160peci\u00e1lnos\u0165 cyklu spo\u010d\u00edva len v tom, \u017ee telo sa vykon\u00e1va viackr\u00e1t.<\/p>\n<p>M\u00f4j druh\u00fd argument spo\u010d\u00edva v tom, \u017ee while vy\u017eaduje menej form\u00e1tovania ako for. Menej form\u00e1tovania \u2014 menej hl\u00fapych ch\u00fdb s vynechan\u00fdmi \u010diarkami a z\u00e1tvorkami. U za\u010diato\u010dn\u00edkov e\u0161te nie je dostato\u010dne rozvinut\u00e1 pozornos\u0165 a d\u00f4vtip, aby sa automaticky vyh\u00fdbali syntaktick\u00fdm chyb\u00e1m.<br \/>\nTret\u00ed argument \u2014 v mnoh\u00fdch dobr\u00fdch knih\u00e1ch je while vysvetlen\u00e9 ako prv\u00e9.<\/p>\n<p>Ak sa \u0161tudentovi dar\u00ed \u013eahko prev\u00e1dza\u0165 v\u00fdrazy, m\u00f4\u017ee sa o for zmieni\u0165 len tak mimochodom. \u0160tudent si nesk\u00f4r s\u00e1m vyberie, \u010do mu viac vyhovuje. Ak v\u0161ak prevody sp\u00f4sobuj\u00fa \u0165a\u017ekosti, je lep\u0161ie neodv\u00e1dza\u0165 pozornos\u0165. Nech najprv \u0161tudent vyrie\u0161i v\u0161etko s pomocou while. Ke\u010f je t\u00e9ma cyklov zvl\u00e1dnut\u00e1, je mo\u017en\u00e9 prepisova\u0165 rie\u0161enia, aby sa precvi\u010dila konverzia from while na for.<br \/>\nCykly s postpodmienkou s\u00fa celkom zriedkav\u00fd fenom\u00e9n. Na to v\u00f4bec nestr\u00e1cam \u010das. Ak \u0161tudent zvl\u00e1dne my\u0161lienky odha\u013eovania vzorov a prevodu v\u00fdrazov, dok\u00e1\u017ee sa s t\u00fdm poradi\u0165 bez mojej pomoci.<\/p>\n<p>Pri prezentovan\u00ed prv\u00e9ho pr\u00edkladu siln\u00fdm \u0161tudentom zd\u00f4raz\u0148ujem, \u017ee vo prvom pr\u00edklade je d\u00f4le\u017eit\u00e9 zaznamena\u0165 nielen rie\u0161enie, ale aj cel\u00fa sekvenciu \u010dinnost\u00ed, ktor\u00e9 viedli k v\u00fdsledku. Leniv\u00ed \u0161tudenti m\u00f4\u017eu zanedba\u0165 p\u00edsanie a prenies\u0165 si len kone\u010dn\u00fd algoritmus. Treba ich presved\u010di\u0165, \u017ee raz sa im m\u00f4\u017ee naskytn\u00fa\u0165 zlo\u017eit\u00e1 \u00faloha. Na jej rie\u0161enie bude potrebn\u00e9 \u00eds\u0165 krok za krokom, ako v tomto pr\u00edklade. Preto je d\u00f4le\u017eit\u00e9 zaznamena\u0165 v\u0161etky etapy. V nasleduj\u00facich \u00faloh\u00e1ch bude mo\u017en\u00e9 necha\u0165 len kone\u010dn\u00fa verziu rie\u0161enia.<\/p>\n<p>Hlavn\u00e1 my\u0161lienka automatiz\u00e1cie spo\u010d\u00edva v tom, \u017ee po\u010d\u00edta\u010du zver\u00edme vykon\u00e1vanie rutinn\u00fdch \u00faloh namiesto \u010dloveka. Jeden zo z\u00e1kladn\u00fdch sp\u00f4sobov je p\u00edsanie cyklov. Pou\u017e\u00edva sa, ke\u010f je v programe za sebou nap\u00edsan\u00fdch nieko\u013eko rovnak\u00fdch opakuj\u00facich sa krokov.<\/p>\n<h4>Jasn\u00e9 je lep\u0161ie ako nejasn\u00e9<\/h4>\n<p>\nM\u00f4\u017ee sa zda\u0165 dobr\u00fd n\u00e1pad v prvej \u00falohe o cykloch vyp\u00edsa\u0165 na obrazovku nejak\u00fa rovnak\u00fa fr\u00e1zu nieko\u013ekokr\u00e1t. Napr\u00edklad:<\/p>\n<blockquote><p>Hur\u00e1, funguje!<br \/>\nHur\u00e1, funguje!<br \/>\nHur\u00e1, funguje!<br \/>\nHur\u00e1, funguje!<br \/>\nHur\u00e1, funguje!<br \/>\nHur\u00e1, funguje!<br \/>\nHur\u00e1, funguje!<br \/>\nHur\u00e1, funguje!\n<\/p><\/blockquote>\n<p>\nTak\u00e1to verzia je zl\u00e1 v tom, \u017ee na v\u00fdstupe nie je vidie\u0165 hodnotu \u010d\u00edta\u010da. To je probl\u00e9m pre za\u010diato\u010dn\u00edkov. Nenech\u00e1vajte ho bez pov\u0161imnutia. Spo\u010diatku bola t\u00e1to \u00faloha prv\u00e1 a \u00faloha o vypisovan\u00ed \u010d\u00edsel v rast\u00facom porad\u00ed bola druh\u00e1. Musel som zav\u00e1dza\u0165 dodato\u010dn\u00e9 v\u00fdrazy \"cyklus N-kr\u00e1t\" a \"cyklus od A do B\", ktor\u00e9 s\u00fa v podstate to ist\u00e9. Aby som nevytv\u00e1ral zbyto\u010dn\u00e9 entity, rozhodol som sa uk\u00e1za\u0165 len pr\u00edklad s vypisovan\u00edm \u010d\u00edselnej sekvencie. Nie ka\u017ed\u00e9mu sa podar\u00ed bez pr\u00edpravy nau\u010di\u0165 sa udr\u017ea\u0165 v hlave \u010d\u00edta\u010d a modelova\u0165 spr\u00e1vanie programu v hlave. Niektor\u00ed \u0161tudenti sa prv\u00fdkr\u00e1t stret\u00e1vaj\u00fa s modelovan\u00edm \"v hlave\" pr\u00e1ve na t\u00e9me o cykloch.<br \/>\nPo ur\u010ditom cvi\u010den\u00ed d\u00e1vam \u00falohu na opakovanie rovnak\u00e9ho textu na samostatn\u00e9 rie\u0161enie. Ak najsk\u00f4r poskytujeme vidite\u013en\u00fd \u010d\u00edta\u010d a potom nevidite\u013en\u00fd, \u0161tudenti maj\u00fa menej probl\u00e9mov. Niekedy sta\u010d\u00ed n\u00e1poveda \"nep\u00ed\u0161 \u010d\u00edta\u010d na obrazovku\".<\/p>\n<h4>Ako to vysvet\u013euj\u00fa ostatn\u00ed?<\/h4>\n<p>\nV\u00e4\u010d\u0161ina vzdel\u00e1vac\u00edch materi\u00e1lov na internete predklad\u00e1 syntax cyklu ako s\u00fa\u010das\u0165 \"predn\u00e1\u0161ky\". Napr\u00edklad na developer.mozilla.org (v s\u00fa\u010dasnosti) sa spolu s cyklom while opisuje aj nieko\u013eko \u010fal\u0161\u00edch kon\u0161trukci\u00ed. Predkladaj\u00fa sa iba samotn\u00e9 kon\u0161trukcie vo forme \u0161abl\u00f3n. V\u00fdsledok ich spustenia je pop\u00edsan\u00fd slovami, pri\u010dom ilustr\u00e1cia ch\u00fdba. Pod\u013ea m\u00f4jho n\u00e1zoru tak\u00fdto sp\u00f4sob podania t\u00e9my zni\u017euje u\u017eito\u010dnos\u0165 t\u00fdchto materi\u00e1lov na nulu. \u0160tudent m\u00f4\u017ee prep\u00edsa\u0165 k\u00f3d a spusti\u0165 ho s\u00e1m, av\u0161ak referen\u010dn\u00fd bod na porovnanie je predsa len potrebn\u00fd. Ako pochopi\u0165, \u017ee pr\u00edklad bol spr\u00e1vne prep\u00edsan\u00fd, ak nem\u00e1me s \u010d\u00edm porovna\u0165 v\u00fdsledok?<br \/>\nKe\u010f sa predlo\u017e\u00ed iba \u0161abl\u00f3na, bez pr\u00edkladu, \u0161tudentovi sa to st\u00e1va e\u0161te zlo\u017eitej\u0161\u00edm. Ako pochopi\u0165, \u017ee fragmenty k\u00f3du s\u00fa v \u0161abl\u00f3ne spr\u00e1vne rozmiestnen\u00e9? M\u00f4\u017ee sa pok\u00fasi\u0165 nap\u00edsa\u0165 <i>nejako<\/i>, a potom to spusti\u0165. Ale ak neexistuje referen\u010dn\u00fd bod na porovnanie v\u00fdsledku, tak spustenie tie\u017e nepom\u00f4\u017ee.<\/p>\n<p>V kurze C++ na intuit\u00edvnom syntaktickom preh\u013eade s\u00fa cykly rozobran\u00e9 na tretej strane predn\u00e1\u0161ky 4 na t\u00e9mu \u201eoper\u00e1tory\u201c. Pri vysvet\u013eovan\u00ed syntaxe cyklov sa osobitn\u00e1 pozornos\u0165 venuje pojmu \u201eoper\u00e1tor\u201c. Tento pojem sa prezentuje ako s\u00fabor faktov, ako napr\u00edklad \u201esymbol; to je oper\u00e1tor\u201c, \u201e{} je zlo\u017een\u00fd oper\u00e1tor\u201c a \u201etelo cyklu mus\u00ed by\u0165 oper\u00e1torom\u201c. Tento pr\u00edstup sa mi nep\u00e1\u010di, preto\u017ee akoby skr\u00fdval d\u00f4le\u017eit\u00e9 vz\u0165ahy za jedn\u00fdm pojmom. Rozbor zdrojov\u00e9ho k\u00f3du programu na term\u00edny na takej \u00farovni potrebuj\u00fa v\u00fdvoj\u00e1ri kompil\u00e1torov na implement\u00e1ciu \u0161pecifik\u00e1cie jazyka, ale rozhodne nie \u0161tudenti na prvom prahu. Za\u010diato\u010dn\u00edci v programovan\u00ed zriedka maj\u00fa dostato\u010dn\u00fa d\u00f4vtipnos\u0165 na to, aby sa venovali term\u00ednom takto presne. Zriedkav\u00fd \u010dlovek si zapam\u00e4t\u00e1 a pochop\u00ed nov\u00e9 slov\u00e1 na prv\u00fdkr\u00e1t. Prakticky nikto nevie spr\u00e1vne aplikova\u0165 pojem, ktor\u00fd pr\u00e1ve objavil. Preto sa u \u0161tudentov vytv\u00e1ra mno\u017estvo ch\u00fdb, ako napr\u00edklad \u201enap\u00edsal while(a&lt;7);{, a program nefunguje\u201c.<br \/>\nPod\u013ea m\u00f4jho n\u00e1zoru je lep\u0161ie na za\u010diatku poskytn\u00fa\u0165 syntax kon\u0161trukcie hne\u010f so z\u00e1tvorkami. Variant bez z\u00e1tvoriek vysvet\u013eova\u0165 iba ak \u017eiak polo\u017e\u00ed konkr\u00e9tnu ot\u00e1zku \u201epre\u010do tu bez z\u00e1tvoriek a funguje\u201c.<\/p>\n<p>V knihe Okulova \u201eZ\u00e1klady programovania\u201c z roku 2012 sa zozn\u00e1menie s cyklami za\u010d\u00edna vzorom for, n\u00e1sledne s\u00fa uveden\u00e9 odpor\u00fa\u010dania na jeho vyu\u017eitie a potom nasleduje experiment\u00e1lny oddiel vyu\u010dovania. Rozumiem, \u017ee kniha bola nap\u00edsan\u00e1 pre t\u00fa men\u0161inu ve\u013emi nadan\u00fdch \u0161tudentov, ktor\u00ed sa zriedkavo dost\u00e1vaj\u00fa na moje predn\u00e1\u0161ky.<\/p>\n<p>V popul\u00e1rnych knih\u00e1ch sa v\u017edy uv\u00e1dza v\u00fdsledok \u00faryvkov k\u00f3du. Napr\u00edklad u Schildta \u201eJava 8. Kompletn\u00fd sprievodca\u201c z roku 2015. Najsk\u00f4r je uveden\u00fd vzor, potom pr\u00edklad programu a hne\u010f po \u0148om \u2014 v\u00fdsledok vykonania.<\/p>\n<blockquote><p>Ako pr\u00edklad zv\u00e1\u017eme cyklus while, v ktorom sa vykon\u00e1va sp\u00e4tn\u00fd<br \/>\nodpo\u010det, za\u010d\u00ednaj\u00faci od 10, a vyp\u00ed\u0161e sa presne 10 riadkov \u201etaktov\u201c: <\/p>\n<pre><code class=\"java\">\/\/\u041f\u0440\u043e\u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430 \u0446\u0438\u043a\u043b\u0430 while\nclass While {\n    public static void main(String args []) {\n        int n = 10;\n        while (n &gt; 0) {\n            System.out.println(&quot;\u0442\u0430\u043a\u0442 &quot; + n);\n            n--;\n        }\n    }\n}<\/code><\/pre>\n<p>\nPo spusten\u00ed tento program vyp\u00ed\u0161e desa\u0165 \u201etaktov\u201c nasleduj\u00facim sp\u00f4sobom:<br \/>\n<code>takt 10<br \/>\ntakt 9<br \/>\ntakt 8<br \/>\ntakt 7<br \/>\ntakt 6<br \/>\ntakt 5<br \/>\ntakt 4<br \/>\ntakt 3<br \/>\ntakt 2<br \/>\ntakt 1<\/code><\/p><\/blockquote>\n<p>\nPr\u00edstup s popisom vzoru, pr\u00edkladu programu a v\u00fdsledku pr\u00e1ce tohoto programu sa pou\u017e\u00edva aj v knihe \u201eJavaScript pre deti\u201c a v kurze js na w3schools.com. Form\u00e1t webovej str\u00e1nky dokonca umo\u017e\u0148uje, aby bol tento pr\u00edklad interakt\u00edvny.<\/p>\n<p>V knihe Stroustrupa \u201ePrinc\u00edpy a prax s vyu\u017eit\u00edm C++\u201c z roku 2016 autor \u0161iel e\u0161te \u010falej. Najprv sa vysvet\u013euje, ak\u00fd v\u00fdsledok by mal vznikn\u00fa\u0165, a a\u017e potom sa ukazuje text programu. A pritom ako pr\u00edklad nie je pou\u017eit\u00fd len tak n\u00e1hodn\u00fd program, ale je uveden\u00fd poh\u013ead do hist\u00f3rie. To pom\u00e1ha upriami\u0165 pozornos\u0165 na neho \u201ePozri, to nie je len nejak\u00fd bezv\u00fdznamn\u00fd text. Vid\u00ed\u0161 nie\u010do v\u00fdznamn\u00e9.\u201c<\/p>\n<blockquote><p>Ako pr\u00edklad iter\u00e1cie zv\u00e1\u017eme prv\u00fd program vykonan\u00fd na stroji so skladovan\u00fdm programom (EDSAC). Nap\u00edsal ho David Wheeler v po\u010d\u00edta\u010dovej laborat\u00f3rii Katedry informatiky na Cambridgeskej univerzite (Cambridge University, England) 6. m\u00e1ja 1949. Tento program po\u010d\u00edta a tla\u010d\u00ed jednoduch\u00fd zoznam \u0161tvorcov.<br \/>\n<code>0 0<br \/>\n1 1<br \/>\n2 4<br \/>\n3 9<br \/>\n4 16<br \/>\n...<br \/>\n98 9604<br \/>\n99 9801<\/code><br \/>\nTu je v ka\u017edom riadku \u010d\u00edslo, za ktor\u00fdm nasleduje znak tabul\u00e1tora (\u2019t\u2019) a druh\u00e1 mocnina tohto \u010d\u00edsla. Verzia tohto programu v jazyku C++ vyzer\u00e1 takto:<\/p>\n<pre><code class=\"cpp\">\/\/\u0412\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u043c \u0438 \u0440\u0430\u0441\u043f\u0435\u0447\u0430\u0442\u044b\u0432\u0430\u0435\u043c \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u043a\u0432\u0430\u0434\u0440\u0430\u0442\u043e\u0432 \u0447\u0438\u0441\u0435\u043b 0-99\nint main()\n{\n    int i = 0; \/\/ \u041d\u0430\u0447\u0438\u043d\u0430\u0435\u043c \u0441 \u043d\u0443\u043b\u044f\n    while(i &lt; 100){\n        cout &lt;&lt; i &lt;&lt; 't' &lt;&lt; square(i) &lt;&lt; 'n';\n        ++i;\n    }\n}<\/code><\/pre>\n<\/blockquote>\n<p>\nZauj\u00edmav\u00e9 je, \u017ee vzor syntaktickej \u0161trukt\u00fary v tejto knihe nie je pop\u00edsan\u00fd. Stroustrup v u\u010dite\u013eskom sprievodcovi (<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/349342\/\">preklad<\/a><\/noindex>) kladie d\u00f4raz na to, \u017ee si v\u00e1\u017ei inteligenciu svojich \u0161tudentov. Mo\u017eno je schopnos\u0165 identifikova\u0165 vzor v nieko\u013ek\u00fdch pr\u00edkladoch pova\u017eovan\u00e1 za prejav takej inteligencie.<\/p>\n<h4>Ako vysvet\u013eujem ja s\u00e1m<\/h4>\n<p>\nPr\u00edstup Stroustrupa: popis v\u00fdsledku, n\u00e1sledn\u00e9 rie\u0161enie \u00falohy a potom samostatn\u00e1 anal\u00fdza \u0161tudentom \u2014 sa zd\u00e1 by\u0165 najpremyslenej\u0161\u00ed. Preto som sa rozhodol bra\u0165 za z\u00e1klad pr\u00e1ve jeho pr\u00edstup, ale sa rozpr\u00e1va\u0165 na menej historickom pr\u00edklade \u2014 \u00falohe v\u00fdstupu \u00abobsahu\u00bb. Vytv\u00e1ra rozpoznate\u013en\u00fd maj\u00e1k, aby sme mohli nesk\u00f4r poveda\u0165 \u201espome\u0148 si na \u00falohu o obsahu\u201c a aby si \u0161tudenti presne na \u0148u spomenuli. Vo svojom pr\u00edklade som sa sna\u017eil upozorni\u0165 e\u0161te na dve z najbe\u017enej\u0161\u00edch myln\u00fdch predst\u00e1v. \u010ealej o nich nap\u00ed\u0161em podrobnej\u0161ie.<\/p>\n<blockquote><p>Na tejto \u00falohe sa zoznamujeme s technikami rie\u0161enia zlo\u017eit\u00fdch probl\u00e9mov. Po\u010diato\u010dn\u00e9 rie\u0161enie by malo by\u0165 primit\u00edvne a jednoduch\u00e9. A potom sa m\u00f4\u017eeme zamyslie\u0165, ako to rie\u0161enie vylep\u0161i\u0165.<br \/>\n<code>\u00davod<br \/>\nKapitola 1<br \/>\nKapitola 2<br \/>\nKapitola 3<br \/>\nKapitola 4<br \/>\nHlava 5<br \/>\nKapitola 6<br \/>\nKapitola 7<br \/>\nZ\u00e1ver<\/code><\/p><\/blockquote>\n<p>\nPod\u013ea mojich pozorovan\u00ed, pr\u00edstup \u201e\u0161abl\u00f3na-pr\u00edklad-v\u00fdsledok\u201c v r\u00f4znych kombin\u00e1ci\u00e1ch st\u00e1le vedie k tomu, \u017ee \u0161tudenti vn\u00edmaj\u00fa cyklus ako hieroglif. To sa prejavovalo v tom, \u017ee nerozumeli, pre\u010do tam p\u00edsa\u0165 podmienku, ako si vybra\u0165 medzi i++ a i\u2014 a in\u00e9 zdanlivo jasn\u00e9 veci. Aby sme sa vyhli t\u00fdmto nedorozumeniam, pr\u00edstup k rozpr\u00e1vaniu o cykloch by mal zd\u00f4raz\u0148ova\u0165 zmysel opakovania rovnak\u00fdch akci\u00ed a a\u017e potom \u2014 ich formu pomocou kon\u0161trukcie. Preto predt\u00fdm, ne\u017e d\u00e1me syntaktick\u00fd vzor cyklu, mus\u00edme vyrie\u0161i\u0165 \u00falohu \u201epriamo\u201c. Primit\u00edvne rie\u0161enie \u00falohy o obsahu vyzer\u00e1 takto:<\/p>\n<pre><code class=\"cs\">Console.WriteLine(\"\u00davod\");\nConsole.WriteLine(\"Kapitola 1\");\nConsole.WriteLine(\"Kapitola 2\");\nConsole.WriteLine(\"Kapitola 3\");\nConsole.WriteLine(\"Kapitola 4\");\nConsole.WriteLine(\"Kapitola 5\");\nConsole.WriteLine(\"Kapitola 6\");\nConsole.WriteLine(\"Kapitola 7\");\nConsole.WriteLine(\"Z\u00e1ver\");\n<\/code><\/pre>\n<p>\nAko ho m\u00f4\u017eeme vylep\u0161i\u0165?<br \/>\nNahradi\u0165 monot\u00f3nne \u010dinnosti cyklom.<br \/>\nAk\u00e9 \u010dinnosti sa tu opakuj\u00fa za sebou bez zmeny?<br \/>\nV tomto fragmente tak\u00e9 nie s\u00fa. Av\u0161ak pr\u00edkazy na v\u00fdstup slova \u201eKapitola\u201c s \u010d\u00edslom s\u00fa ve\u013emi podobn\u00e9 jeden druh\u00e9mu.<br \/>\nPreto \u010fal\u0161\u00ed krok \u2014 h\u013eadanie rozdielov medzi fragmentmi. V tejto \u00falohe je to jasn\u00e9, nesk\u00f4r sa bud\u00fa opakova\u0165 nie jednotliv\u00e9 pr\u00edkazy, ale bloky k\u00f3du so 5 riadkami a viac. H\u013eada\u0165 bude potrebn\u00e9 nie len v zozname pr\u00edkazov, ale aj v kon\u0161trukci\u00e1ch vetvenia alebo cyklu.<br \/>\nV pr\u00edklade je rozdiel medzi pr\u00edkazmi v \u010d\u00edslach po slove \u201eKapitola\u201c.<br \/>\nAkon\u00e1hle je rozdiel n\u00e1jden\u00fd, je potrebn\u00e9 pochopi\u0165 z\u00e1konitosti zmeny. Rozli\u0161uj\u00faci fragment je toto \u010d\u00edslo? Neust\u00e1le sa zvy\u0161uje alebo zni\u017euje? Ako sa men\u00ed hodnota \u010d\u00edsla medzi dvoma pr\u00edkazmi ved\u013ea seba?<br \/>\nV pr\u00edklade \u010d\u00edslo za slovom \u201eHlava\u201c sa zvy\u0161uje skokom 1. Rozdiel je n\u00e1jden\u00fd, vzorec odhalen\u00fd. Teraz m\u00f4\u017eeme nahradi\u0165 odli\u0161n\u00fd fragment premennou.<br \/>\nTak\u00fato premenn\u00fa je potrebn\u00e9 deklarova\u0165 pred prv\u00fdm z opakuj\u00facich sa fragmentov. Tak\u00fato premenn\u00fa zvy\u010dajne naz\u00fdvaj\u00fa I alebo j alebo nejak\u00fdm roz\u0161\u00edren\u00fdm n\u00e1zvom. Jej po\u010diato\u010dn\u00e1 hodnota by mala by\u0165 rovn\u00e1 prv\u00e9mu hodnoten\u00e9mu v\u00fdstupn\u00e9mu \u010d\u00edslu. V pr\u00edklade je prv\u00e9 \u010d\u00edslo 1. <br \/>\nAk\u00fa po\u010diato\u010dn\u00fa hodnotu je potrebn\u00e9 zvoli\u0165 pre v\u00fdstup \u010d\u00edseln\u00e9ho radu \u201e100, 101, 102, 103, 104, 105\u201c?<br \/>\nV tomto rade je prv\u00e9 \u010d\u00edslo 100.<br \/>\nPo ka\u017edej pr\u00edkaze v\u00fdstupu je potrebn\u00e9 zv\u00fd\u0161i\u0165 hodnotu tejto premennej o 1. Tento pr\u00edrastok je krok zmeny.<br \/>\nAk\u00fd krok bude v rade \u010d\u00edsel \u201e100, 102, 104, 106\u201c?<br \/>\nV tomto rade je krok 2.<br \/>\nPo nahraden\u00ed odli\u0161n\u00e9ho fragmentu premennou bude k\u00f3d vyzera\u0165 takto:<\/p>\n<pre><code class=\"cs\">Console.WriteLine(\"\u00davod\");\nint i;\ni = 0;\nConsole.WriteLine(\"Kapitola \" + i);\ni = i + 1;\nConsole.WriteLine(\"Kapitola \" + i);\ni = i + 1;\nConsole.WriteLine(\"Kapitola \" + i);\ni = i + 1;\nConsole.WriteLine(\"Kapitola \" + i);\ni = i + 1;\nConsole.WriteLine(\"Kapitola \" + i);\ni = i + 1;\nConsole.WriteLine(\"Kapitola \" + i);\ni = i + 1;\nConsole.WriteLine(\"Kapitola \" + i);\ni = i + 1;\nConsole.WriteLine(\"Z\u00e1ver\");\n<\/code><\/pre>\n<p>\nPo aplik\u00e1cii techniky \u201evyjadri\u0165 vzorec pomocou premennej\u201c sa v k\u00f3de objav\u00ed nieko\u013eko skup\u00edn rovnak\u00fdch akci\u00ed, ktor\u00e9 nasleduj\u00fa za sebou. Teraz je mo\u017en\u00e9 nahradi\u0165 opakovan\u00e9 akcie cyklom.<\/p>\n<p>Sekvencia rie\u0161enia \u00falohy, v ktorej je potrebn\u00e9 pou\u017ei\u0165 cykly, pozost\u00e1va z t\u00fdchto krokov:<\/p>\n<ol>\n<li>Rie\u0161i\u0165 \u201epriamo\u201c mno\u017estvom jednotliv\u00fdch pr\u00edkazov<\/li>\n<li>N\u00e1js\u0165 vzorec<\/li>\n<li>Vyjadri\u0165 vzorec pomocou premennej<\/li>\n<li>Formulova\u0165 vo forme cyklu<\/li>\n<\/ol>\n<p>\u010ealej sa zav\u00e1dzaj\u00fa nov\u00e9 pojmy, aby sa \u0161tudent ocitol v situ\u00e1cii \u201ev\u0161etko ch\u00e1pem, ale neviem poveda\u0165\u201c:<br \/>\n \u2014 \u010d\u00edta\u010d \u2014 v\u017edy premenn\u00e1, ktor\u00e1 je potrebn\u00e1 na sledovanie po\u010dtu krokov cyklu. Zvy\u010dajne cel\u00e9 \u010d\u00edslo, ktor\u00e9 sa porovn\u00e1va s obmedzen\u00edm.<br \/>\n \u2014 krok \u010d\u00edta\u010da \u2014 popis vzoru zmeny \u010d\u00edta\u010da.<br \/>\n \u2014 obmedzenie \u2014 \u010d\u00edslo alebo premenn\u00e1, s ktorou sa \u010d\u00edta\u010d porovn\u00e1va, aby bol algoritmus kone\u010dn\u00fd. Hodnota \u010d\u00edta\u010da sa men\u00ed tak, aby sa bl\u00ed\u017eila k obmedzeniu.<br \/>\n \u2014 telo cyklu \u2014 s\u00fabor pr\u00edkazov, ktor\u00e9 sa budou opakova\u0165. Ke\u010f sa hovor\u00ed \u201epr\u00edkaz nap\u00edsan\u00fd v tele cyklu\u201c, mysl\u00ed sa pr\u00e1ve na telo.<br \/>\n \u2014 iter\u00e1cia cyklu \u2014 jednor\u00e1zov\u00e9 vykonanie tela cyklu.<br \/>\n \u2014 podmienka cyklu \u2014 logick\u00fd v\u00fdraz, od ktor\u00e9ho z\u00e1vis\u00ed, \u010di sa vykon\u00e1 \u010fal\u0161ia iter\u00e1cia. (Tu m\u00f4\u017ee d\u00f4js\u0165 k z\u00e1mene s vetvov\u00fdmi kon\u0161trukciami)<br \/>\nTreba by\u0165 pripraven\u00fd na to, \u017ee v prv\u00fdch f\u00e1zach \u0161tudenti bud\u00fa pou\u017e\u00edva\u0165 term\u00edny nespr\u00e1vne. To plat\u00ed pre siln\u00fdch aj slab\u00fdch. Upevnenie spolo\u010dn\u00e9ho jazyka je cel\u00e9 umenie. Teraz to nap\u00ed\u0161em stru\u010dne: treba si stanovi\u0165 \u00falohu 'vyber fragment k\u00f3du s &lt;term\u00edn&gt;' a s\u00e1m spr\u00e1vne pou\u017e\u00edva\u0165 tieto term\u00edny v rozhovore.<br \/>\nPo transform\u00e1cii s cyklom dostaneme fragment:<\/p>\n<pre><code class=\"cs\">Console.WriteLine(\"\u00davod\");\nint i = 0;\nwhile (i &lt; 7) {\n    Console.WriteLine(&quot;Kapitola &quot; + i);\n    i = i + 1;\n}\nConsole.WriteLine(&quot;Z\u00e1ver&quot;);<\/code><\/pre>\n<h4>Hlavn\u00e1 myln\u00e1 predstava<\/h4>\n<p>\nJedno popul\u00e1rne omyl \u0161tudentov spo\u010d\u00edva v tom, \u017ee do kon\u0161trukcie cyklu umiest\u0148uj\u00fa tak\u00e9 \u010dinnosti, ktor\u00e9 je potrebn\u00e9 urobi\u0165 len raz. Napr\u00edklad takto:<\/p>\n<pre><code class=\"cs\">;\nint i = 0;\nwhile (i &lt; 7) {\n    Console.WriteLine(&quot;\u00davod&quot;)\n    Console.WriteLine(&quot;Kapitola &quot; + i);\n    i = i + 1;\n    Console.WriteLine(&quot;Z\u00e1ver&quot;);\n}\n<\/code><\/pre>\n<p>\n\u0160tudenti sa neust\u00e1le stret\u00e1vaj\u00fa s t\u00fdmto probl\u00e9mom, ako na za\u010diatku, tak aj pri zlo\u017eitej\u0161\u00edch \u00faloh\u00e1ch.<br \/>\nK\u013e\u00fa\u010dov\u00e1 rada v tomto pr\u00edpade:<\/p>\n<blockquote><p>Ko\u013ekokr\u00e1t je treba opakova\u0165 nap\u00edsanie pr\u00edkazu: raz alebo mnohokr\u00e1t?\n<\/p><\/blockquote>\n<p>\nPr\u00edkazy na v\u00fdstup slov \"\u00davod\" a \"Z\u00e1ver\", ako aj deklar\u00e1cia a inicializ\u00e1cia premennej i sa nel\u00ed\u0161ia od ostatn\u00fdch opakovan\u00fdch akci\u00ed. Vykon\u00e1vaj\u00fa sa iba raz, preto ich treba nap\u00edsa\u0165 mimo tela cyklu.<\/p>\n<p>V k\u00f3de musia zosta\u0165 v\u0161etky tri etapy rie\u0161enia, aby sa na ne nesk\u00f4r dalo odvol\u00e1va\u0165 v pr\u00edpade \u0165a\u017ekost\u00ed. Prv\u00e9 dve varianty sta\u010d\u00ed okomentova\u0165, aby neprek\u00e1\u017eali.<br \/>\nPozornos\u0165 \u0161tudenta treba upriami\u0165 na nasleduj\u00face skuto\u010dnosti:<br \/>\n \u2014 Vo vyjadren\u00ed cyklu sa zvy\u010dajne porovn\u00e1va \u010d\u00edta\u010d a obmedzenie. \u010c\u00edta\u010d sa m\u00f4\u017ee zmeni\u0165 v tele cyklu, zatia\u013e \u010do obmedzenie \u2014 nie. Na poru\u0161enie tohto pravidla je potrebn\u00e9 navrhn\u00fa\u0165 presved\u010div\u00e9 d\u00f4vody.<br \/>\n \u2014 Pr\u00edkazy na v\u00fdstup slov \"\u00davod\" a \"Z\u00e1ver\" s\u00fa mimo tel\u00e1 cyklu. Mus\u00edme ich vykona\u0165 1-kr\u00e1t. \"\u00davod\" \u2014 pred opakovan\u00edm \u010dinnost\u00ed, \"Z\u00e1ver\" \u2014 po.<br \/>\nV procese upev\u0148ovania tejto t\u00e9my, osvojenia nasleduj\u00facich, ako aj pri rie\u0161en\u00ed probl\u00e9mov je aj siln\u00fdm \u0161tudentom u\u017eito\u010dn\u00e9 polo\u017ei\u0165 ot\u00e1zku: \u201eA toto opatrenie, ko\u013ekokr\u00e1t je treba vykona\u0165? Raz alebo ve\u013eakr\u00e1t?\u201c<\/p>\n<h4>Rozvoj \u010fal\u0161\u00edch zru\u010dnost\u00ed<\/h4>\n<p>\nV procese \u0161t\u00fadia cyklov si \u0161tudenti st\u00e1le tr\u00e9nuj\u00fa zru\u010dnos\u0165 diagnostiky a rie\u0161enia probl\u00e9mov. Na vykonanie diagnostiky si mus\u00ed \u0161tudent predstavi\u0165 \u017eelan\u00fd v\u00fdsledok a porovna\u0165 ho s aktu\u00e1lnym v\u00fdsledkom. Od rozdielu medzi nimi z\u00e1visia akcie potrebn\u00e9 na n\u00e1pravu.<br \/>\nKe\u010f\u017ee \u0161tudenti v tejto f\u00e1ze e\u0161te len \u0165a\u017eko predstavuj\u00fa \u201e\u017eelan\u00fd\u201c v\u00fdsledok, m\u00f4\u017eu sa orientova\u0165 na testovacie \u00fadaje. Zvy\u010dajne nikto na tejto \u00farovni e\u0161te nech\u00e1pe, \u010do sa m\u00f4\u017ee pokazi\u0165 a ako s t\u00fdm bojova\u0165. Preto zapisujem do zo\u0161ita opis typick\u00fdch probl\u00e9mov a nieko\u013eko sp\u00f4sobov ich rie\u0161enia. V\u00fdber najvhodnej\u0161ieho z nich je \u00falohou samotn\u00e9ho \u0161tudenta.<br \/>\nZ\u00e1znam je potrebn\u00fd, aby sa dalo op\u00fdta\u0165: \u201eDosiahli sme to, \u010do sme o\u010dak\u00e1vali?\u201c, \u201eKtor\u00e1 z t\u00fdchto situ\u00e1ci\u00ed sa vykonala?\u201c, \u201ePomohlo uplatnen\u00e9 rie\u0161enie?\u201c<\/p>\n<ol>\n<li>Po\u010det akci\u00ed je o 1 menej alebo viac, ne\u017e sa o\u010dak\u00e1va. Sp\u00f4soby rie\u0161enia:<br \/>\n \u2014 zv\u00fd\u0161i\u0165 po\u010diato\u010dn\u00fa hodnotu po\u010d\u00edtadla o 1.<br \/>\n \u2014 nahradi\u0165 pr\u00edsny oper\u00e1tor porovnania () na nepr\u00edsny (=).<br \/>\n \u2014 zmeni\u0165 hodnotu obmedzenia o 1.<\/li>\n<li>Akcie v cykle sa uskuto\u010d\u0148uj\u00fa nepretr\u017eite, do nekone\u010dna. Sp\u00f4soby rie\u0161enia:<br \/>\n \u2014 prida\u0165 pr\u00edkaz na zmenu po\u010d\u00edtadla, ak ch\u00fdba.<br \/>\n \u2014 opravi\u0165 pr\u00edkaz na zmenu po\u010d\u00edtadla tak, aby sa jeho hodnota pribl\u00ed\u017eila k obmedzeniu.<br \/>\n \u2014 odstr\u00e1ni\u0165 pr\u00edkaz na zmenu obmedzenia, ak je v tele cyklu.<\/li>\n<li>Po\u010det akci\u00ed v cykle je o viac ne\u017e 1 menej alebo viac, ne\u017e sa o\u010dak\u00e1valo. Akcia v cykle sa nevykonala ani raz. Najprv je potrebn\u00e9 zisti\u0165 aktu\u00e1lne hodnoty premenn\u00fdch tesne pred za\u010diatkom cyklu. Sp\u00f4soby rie\u0161enia:<br \/>\n \u2014 zmeni\u0165 po\u010diato\u010dn\u00fa hodnotu obmedzenia<br \/>\n \u2014 zmeni\u0165 po\u010diato\u010dn\u00fa hodnotu po\u010d\u00edtadla<\/li>\n<\/ol>\n<p>\nObvykle je probl\u00e9m 3 spojen\u00fd s pou\u017eit\u00edm nespr\u00e1vnej premennej alebo s ne-inicializovan\u00edm po\u010d\u00edtadla.<\/p>\n<p>Po tomto vysvetlen\u00ed m\u00f4\u017eu ma\u0165 \u0161tudenti st\u00e1le r\u00f4zne omyly o fungovan\u00ed cyklov.<br \/>\nAby som rozpt\u00fdlil naj\u010dastej\u0161ie, d\u00e1vam \u00falohy:<\/p>\n<ol>\n<li>Kde je obmedzenie, po\u010diato\u010dn\u00e1 hodnota po\u010d\u00edtadla alebo krok po\u010d\u00edtadla zadan\u00e9 pou\u017e\u00edvate\u013eom.<\/li>\n<li>Kde je potrebn\u00e9 pou\u017ei\u0165 hodnotu po\u010d\u00edtadla v nejakom aritmetickom v\u00fdraze. Ide\u00e1lne so po\u010d\u00edtadlom v pod\u010ditate\u013enom v\u00fdraze alebo v menovateli, aby bola rozl\u00ed\u0161enie neliner\u00e1rne.<\/li>\n<li>Kde sa hodnota \u010d\u00edta\u010dky nezobrazuje na obrazovke po\u010das behu cyklu. Napr\u00edklad na v\u00fdstup potrebn\u00e9ho po\u010dtu identick\u00fdch fragmentov textu alebo na nakreslenie fig\u00fary pomocou \u017eelvovej grafiky.<\/li>\n<li>Kde je potrebn\u00e9 najprv vykona\u0165 jedny opakuj\u00face sa \u00fakony a potom in\u00e9.<\/li>\n<li>Kde je potrebn\u00e9 vykona\u0165 in\u00e9 \u00fakony pred a po opakuj\u00facich sa.<\/li>\n<\/ol>\n<p>\nPre ka\u017ed\u00fa \u00falohu je potrebn\u00e9 poskytn\u00fa\u0165 testovacie d\u00e1ta a o\u010dak\u00e1van\u00fd v\u00fdsledok.<\/p>\n<p>Aby sme pochopili, akou r\u00fdchlos\u0165ou m\u00f4\u017eeme post\u00fapi\u0165, je potrebn\u00e9 da\u0165 pre\u010d\u00edta\u0165 podmienky t\u00fdchto \u00faloh a op\u00fdta\u0165 sa: \u201e\u010c\u00edm sa l\u00ed\u0161ia od pr\u00edkladu?\u201c, \u201e\u010co je potrebn\u00e9 zmeni\u0165 v pr\u00edklade, aby sa vyrie\u0161ili?\u201c. Ak \u0161tudent rozumne odpoved\u00e1, nech vyrie\u0161i aspo\u0148 jednu na hodine, ostatn\u00e9 nech rie\u0161i doma samostatne. Ak bude rie\u0161enie \u00faspe\u0161n\u00e9, m\u00f4\u017eeme za\u010da\u0165 vysvetlenie podmienok vo vn\u00fatri cyklov.<br \/>\nAk s\u00fa s samostatn\u00fdm rie\u0161en\u00edm \u0165a\u017ekosti, je potrebn\u00e9 v\u0161etko precvi\u010di\u0165 na hodine. Aby rie\u0161enie \u00falohy nepripom\u00ednalo kreslenie sovy, odpor\u00fa\u010dam najsk\u00f4r vyrie\u0161i\u0165 \u00falohu nie univerz\u00e1lne. Teda tak, aby rie\u0161enie pre\u0161lo prv\u00fdm testom a nepou\u017e\u00edvalo kon\u0161trukciu cyklu. A\u017e potom aplikova\u0165 transform\u00e1cie na dosiahnutie univerz\u00e1lnosti rie\u0161enia.<\/p>\n<h4>Cyklus a vetvenia<\/h4>\n<p>\nPod\u013ea m\u00f4jho n\u00e1zoru je u\u017eito\u010dn\u00e9 poskytn\u00fa\u0165 t\u00e9mu \u201ecykly vo vnoreniach\u201c osobitne. Tak, aby bolo nesk\u00f4r vidite\u013en\u00e9, ak\u00fd je rozdiel medzi opakovan\u00fdm overen\u00edm podmienky a jednorazov\u00fdm.<br \/>\n\u00dalohy na upevnenie bud\u00fa o v\u00fdstupe \u010d\u00edsel od A do B, ktor\u00e9 zad\u00e1va pou\u017e\u00edvate\u013e:<br \/>\n \u2014 v\u017edy v rast\u00facom porad\u00ed.<br \/>\n \u2014 v rast\u00facom alebo klesaj\u00facom porad\u00ed v z\u00e1vislosti od hodn\u00f4t A a B.<\/p>\n<p>K t\u00e9me \u201evetvenia v cykloch\u201c by sa malo prist\u00fapi\u0165 a\u017e po tom, \u010do \u0161tudent osvojuje techniky: \u201enahradenie z\u00e1konitosti premennou\u201c a \u201enahradenie opakuj\u00facich sa \u010dinnost\u00ed cyklom\u201c.<br \/>\nHlavn\u00fd d\u00f4vod na pou\u017eitie vetven\u00ed vo vnoreniach je anom\u00e1lie v z\u00e1konitosti. Uprostred je potla\u010den\u00e1 v z\u00e1vislosti od vstupn\u00fdch d\u00e1t.<br \/>\n\u0160tudenti, ktor\u00ed s\u00fa schopn\u00ed h\u013eada\u0165 rie\u0161enie kombinovan\u00edm jednoduch\u00fdch techn\u00edk, potrebuj\u00fa len poveda\u0165 \u201evetvenia je mo\u017en\u00e9 p\u00edsa\u0165 vo vnoreniach\u201c a da\u0165 \u00falohu \u201epre pr\u00edklad\u201c \u00faplne na samostatn\u00e9 rie\u0161enie.<br \/>\n\u00daloha na pr\u00edklad:<\/p>\n<blockquote><p>Pou\u017e\u00edvate\u013e zad\u00e1 \u010d\u00edslo X. Vyp\u00ed\u0161te v st\u013apci \u010d\u00edsla od 0 do 9 a dajte znak \u2018+\u2019 pri tom \u010d\u00edsle, ktor\u00e9 je rovn\u00e9 X.<\/p><\/blockquote>\n<p>\n<b class=\"spoiler_title\">Ak bolo zadan\u00e9 0<\/b>0+<br \/>\n1<br \/>\n2<br \/>\n3<br \/>\n4<br \/>\n5<br \/>\n6<br \/>\n7<br \/>\n8<br \/>\n9<\/p>\n<p><b class=\"spoiler_title\">Ak bolo zadan\u00e9 6<\/b>0<br \/>\n1<br \/>\n2<br \/>\n3<br \/>\n4<br \/>\n5<br \/>\n6+<br \/>\n7<br \/>\n8<br \/>\n9<\/p>\n<p><b class=\"spoiler_title\">Ak bolo zadan\u00e9 9<\/b>0<br \/>\n1<br \/>\n2<br \/>\n3<br \/>\n4<br \/>\n5<br \/>\n6<br \/>\n7<br \/>\n8<br \/>\n9+<\/p>\n<p><b class=\"spoiler_title\">Ak bolo zadan\u00e9 777<\/b>0<br \/>\n1<br \/>\n2<br \/>\n3<br \/>\n4<br \/>\n5<br \/>\n6<br \/>\n7<br \/>\n8<br \/>\n9<\/p>\n<p>Ak kr\u00e1tke vysvetlenie nesta\u010d\u00ed na nap\u00edsanie cyklu, potom je potrebn\u00e9 dosiahnu\u0165 univerz\u00e1lne rie\u0161enie tej istej \u00falohy bez cyklu.<br \/>\nBude to jedna z dvoch mo\u017enost\u00ed:<br \/>\n<b class=\"spoiler_title\">\u017delan\u00fd<\/b><\/p>\n<pre><code class=\"cs\">string temp;\ntemp = Console.ReadLine();\nint x;\nx = int.Parse(temp);\nif (x==0) {\n    Console.WriteLine(0 + \"+\");\n} else {\n    Console.WriteLine(0);\n}\nif (x==1) {\n    Console.WriteLine(1 + \"+\");\n} else {\n    Console.WriteLine(1);\n}\nif (x==2) {\n    Console.WriteLine(2 + \"+\");\n} else {\n    Console.WriteLine(2);\n}\nif (x==3) {\n    Console.WriteLine(3 + \"+\");\n} else {\n    Console.WriteLine(3);\n}\nif (x==4) {\n    Console.WriteLine(4 + \"+\");\n} else {\n    Console.WriteLine(4);\n}\nif (x==5) {\n    Console.WriteLine(5 + \"+\");\n} else {\n    Console.WriteLine(5);\n}\nif (x==6) {\n    Console.WriteLine(6 + \"+\");\n} else {\n    Console.WriteLine(6);\n}\nif (x==7) {\n    Console.WriteLine(7 + \"+\");\n} else {\n    Console.WriteLine(7);\n}\nif (x==8) {\n    Console.WriteLine(8 + \"+\");\n} else {\n    Console.WriteLine(8);\n}\nif (x==9) {\n    Console.WriteLine(9 + \"+\");\n} else {\n    Console.WriteLine(9);\n}\n<\/code><\/pre>\n<p><b class=\"spoiler_title\">Mo\u017en\u00fd<\/b><\/p>\n<pre><code class=\"cs\">string temp;\ntemp = Console.ReadLine();\nint x;\nx = int.Parse(temp);\nif (x==0) {\n    Console.WriteLine(\"0+n1n2n3n4n5n6n7n8n9\");\n}\nif (x==1) {\n    Console.WriteLine(\"0n1+n2n3n4n5n6n7n8n9\");\n}\nif (x==2) {\n    Console.WriteLine(\"0n1n2+n3n4n5n6n7n8n9\");\n}\nif (x==3) {\n    Console.WriteLine(\"0n1n2n3+n4n5n6n7n8n9\");\n}\nif (x==4) {\n    Console.WriteLine(\"0n1n2n3n4+n5n6n7n8n9\");\n}\nif (x==5) {\n    Console.WriteLine(\"0n1n2n3n4n5+n6n7n8n9\");\n}\nif (x==6) {\n    Console.WriteLine(\"0n1n2n3n4n5n6+n7n8n9\");\n}\nif (x==7) {\n    Console.WriteLine(\"0n1n2n3n4n5n6n7+n8n9\");\n}\nif (x==8) {\n    Console.WriteLine(\"0n1n2n3n4n5n6n7n8+n9\");\n}\nif (x==9) {\n    Console.WriteLine(\"0n1n2n3n4n5n6n7n8n9+\");\n}\n<\/code><\/pre>\n<p>Podobn\u00fa \u00falohu d\u00e1vam vopred po\u010das \u0161t\u00fadia t\u00e9my o vetven\u00ed.<br \/>\nAk \u0161tudent dosiahne \u201emo\u017en\u00fd\u201c variant, je potrebn\u00e9 poveda\u0165, \u017ee existuje mnoho rie\u0161en\u00ed tej istej \u00falohy. Rozli\u0161uj\u00fa sa v\u0161ak odolnos\u0165ou vo\u010di zmen\u00e1m po\u017eiadaviek. Polo\u017ete ot\u00e1zku: \u201eKo\u013eko miest v k\u00f3de bude potrebn\u00e9 opravi\u0165, ak bude potrebn\u00e9 prida\u0165 \u010fal\u0161ie \u010d\u00edslo?\u201c V \u201emo\u017enom\u201c variante bude potrebn\u00e9 prida\u0165 e\u0161te jedno vetvenie a dop\u00edsa\u0165 nov\u00e9 \u010d\u00edslo v 10 \u010fal\u0161\u00edch miestach. V \u201e\u017eelanom\u201c variante sta\u010d\u00ed prida\u0165 iba jedno vetvenie.<br \/>\nZadajte \u00falohu reprodukova\u0165 \u201e\u017eelan\u00fd\u201c variant, potom n\u00e1jdite v k\u00f3de pravidelnos\u0165, vykonajte z\u00e1menu premennej a nap\u00ed\u0161te cyklus.<br \/>\nAk m\u00e1te n\u00e1pad, ako vyrie\u0161i\u0165 t\u00fato \u00falohu bez cyklu nejak\u00fdm in\u00fdm sp\u00f4sobom, pros\u00edm nap\u00ed\u0161te v koment\u00e1roch.<\/p>\n<h4>Cykly vo vn\u00fatri cyklov<\/h4>\n<p>\nV tejto t\u00e9me je d\u00f4le\u017eit\u00e9 poznamena\u0165, \u017ee:<br \/>\n \u2014 po\u010d\u00edtadl\u00e1 pre vn\u00fatorn\u00fd a vonkaj\u0161\u00ed cyklus musia by\u0165 r\u00f4znymi premenn\u00fdmi.<br \/>\n \u2014 po\u010d\u00edtadlo pre vn\u00fatorn\u00fd cyklus je potrebn\u00e9 nulova\u0165 mnohokr\u00e1t (t.j. v tele vonkaj\u0161ieho cyklu).<br \/>\n V \u00faloh\u00e1ch v\u00fdstupu textu nie je mo\u017en\u00e9 najprv nap\u00edsa\u0165 jedno p\u00edsmeno na nieko\u013ek\u00fdch riadkoch a potom druh\u00e9. Je potrebn\u00e9 najprv vyp\u00edsa\u0165 v\u0161etky p\u00edsmen\u00e1 prv\u00e9ho riadku, potom v\u0161etky p\u00edsmen\u00e1 druh\u00e9ho a tak \u010falej.<\/p>\n<p>Vysvetlenie t\u00e9my o cykloch v cykloch je najlep\u0161ie za\u010da\u0165 s vysvetlen\u00edm d\u00f4le\u017eitosti nulovania po\u010d\u00edtadla.<br \/>\n\u00daloha na pr\u00edklad:<\/p>\n<blockquote><p>Pou\u017e\u00edvate\u013e zad\u00e1 dve \u010d\u00edsla: R a T. Vyp\u00ed\u0161te dve rady znakov \u201e#\u201c. V prvej rade by malo by\u0165 R kusov znakov. V druhej rade T kusov. Ak by bolo niektor\u00e9 \u010d\u00edslo z\u00e1porn\u00e9, zobrazte spr\u00e1vu o chybe.<\/p><\/blockquote>\n<p>\n<b class=\"spoiler_title\">R=5, T=11<\/b>#####<br \/>\n###########<\/p>\n<p><b class=\"spoiler_title\">R=20, T=3<\/b>####################<br \/>\n###<\/p>\n<p><b class=\"spoiler_title\">R=-1, T=6<\/b>Hodnota R mus\u00ed by\u0165 nez\u00e1porn\u00e1<\/p>\n<p><b class=\"spoiler_title\">R=6, T=-2<\/b>Hodnota T mus\u00ed by\u0165 nez\u00e1porn\u00e1<\/p>\n<p>Je zrejm\u00e9, \u017ee t\u00e1to \u00faloha m\u00e1 tie\u017e minim\u00e1lne dva sp\u00f4soby rie\u0161enia.<br \/>\n<b class=\"spoiler_title\">\u017delan\u00fd<\/b><\/p>\n<pre><code class=\"cs\">string temp;\nint R;\nint T;\ntemp = Console.ReadLine();\nR = int.Parse(temp);\ntemp = Console.ReadLine();\nT = int.Parse(temp);\nint i = 0;\nwhile (i &lt; R)\n{\n    Console.Write(&quot;#&quot;);\n    i = i + 1;\n}\nConsole.WriteLine();\ni = 0;\nwhile (i &lt; T)\n{\n    Console.Write(&quot;#&quot;);\n    i = i + 1;\n}\n<\/code><\/pre>\n<p><b class=\"spoiler_title\">Mo\u017en\u00fd \u010d. 1<\/b><\/p>\n<pre><code class=\"cs\">string temp;\nint R;\nint T;\ntemp = Console.ReadLine();\nR = int.Parse(temp);\ntemp = Console.ReadLine();\nT = int.Parse(temp);\nint i = 0;\nwhile (i &lt; R)\n{\n    Console.Write(&quot;#&quot;);\n    i = i + 1;\n}\nConsole.WriteLine();\nint j = 0;\nj = 0;\nwhile (j &lt; T)\n{\n    Console.Write(&quot;#&quot;);\n    j = j + 1;\n}\n<\/code><\/pre>\n<p>Rozdiel je v tom, \u017ee v \"mo\u017enom\" rie\u0161en\u00ed pre v\u00fdstup druh\u00e9ho riadku bola pou\u017eit\u00e1 druh\u00e1 premenn\u00e1. Je potrebn\u00e9 nalieha\u0165 na pou\u017e\u00edvanie tej istej premennej pre oba cykly. Tento obmedzenie m\u00f4\u017eeme od\u00f4vodni\u0165 t\u00fdm, \u017ee rie\u0161enie s jedn\u00fdm \u010d\u00edta\u010dom pre dva cykly bude ilustr\u00e1ciou pojmu \"nulovanie \u010d\u00edta\u010da\". Pochopenie tohto pojmu je potrebn\u00e9 pri rie\u0161en\u00ed nasleduj\u00facich \u00faloh. Ako kompromis m\u00f4\u017eeme uchova\u0165 obe rie\u0161enia \u00falohy.<\/p>\n<p>Typick\u00fd probl\u00e9m s pou\u017eit\u00edm jednej premennej-\u010d\u00edta\u010da pre dva cykly sa prejavuje takto:<br \/>\n<b class=\"spoiler_title\">R=5, T=11<\/b>#####<br \/>\n######<\/p>\n<p>Po\u010det symbolov v druhom riadku nezhoduje s hodnotou T. Ak potrebujete pomoc s t\u00fdmto probl\u00e9mom, mali by ste \"\u0165ukn\u00fa\u0165 na nos\" v pozn\u00e1mkach o typick\u00fdch probl\u00e9moch s cyklami. Toto je sympt\u00f3m \u010d. 3. Diagnostikuje sa, ak prid\u00e1te v\u00fdstup hodnoty po\u010d\u00edtadla priamo pred druh\u00fd cyklus. Opraven\u00e9 nulovan\u00edm. Ale to by sa lep\u0161ie nemalo hne\u010f hovori\u0165. \u0160tudent by mal sk\u00fasi\u0165 formulova\u0165 aspo\u0148 jednu hypot\u00e9zu.<\/p>\n<p>Samozrejme, je tu aj tak\u00e1 varianta rie\u0161enia. Ale ja som ju u \u0161tudentov nikdy nevidel. V etape u\u010denia cyklov by rozpr\u00e1vanie o \u0148om rozpty\u013eovalo pozornos\u0165. K tomu sa m\u00f4\u017eeme vr\u00e1ti\u0165 nesk\u00f4r, pri \u0161t\u00fadiu funkci\u00ed pr\u00e1ce so stringami.<br \/>\n<b class=\"spoiler_title\">Mo\u017en\u00fd \u010d. 2<\/b><\/p>\n<pre><code class=\"cs\">string temp;\nint R;\nint T;\ntemp = Console.ReadLine();\nR = int.Parse(temp);\ntemp = Console.ReadLine();\nT = int.Parse(temp);\nConsole.WriteLine(new String('#', R));\nConsole.WriteLine(new String('#', T));\n<\/code><\/pre>\n<p>\n\u010eal\u0161ia povinn\u00e1 \u00faloha:<\/p>\n<blockquote><p>Na obrazovku vyp\u00ed\u0161te \u010d\u00edsla od 0 do 9. Ka\u017ed\u00e9 \u010d\u00edslo by malo by\u0165 na svojom riadku. Po\u010det \u010d\u00edsiel na riadku (W) sa zad\u00e1va z kl\u00e1vesnice.<\/p><\/blockquote>\n<p>\n<b class=\"spoiler_title\">W=1<\/b>0<br \/>\n1<br \/>\n2<br \/>\n3<br \/>\n4<br \/>\n5<br \/>\n6<br \/>\n7<br \/>\n8<br \/>\n9<\/p>\n<p><b class=\"spoiler_title\">W=10<\/b><code>0000000000<br \/>\n1111111111<br \/>\n2222222222<br \/>\n3333333333<br \/>\n4444444444<br \/>\n5555555555<br \/>\n6666666666<br \/>\n7777777777<br \/>\n8888888888<br \/>\n9999999999<\/code><\/p>\n<p>Ak \u0161tudent zvl\u00e1dol techniku nahr\u00e1dzania premennej, mal by to zvl\u00e1dnu\u0165 celkom r\u00fdchlo. Mo\u017en\u00fd probl\u00e9m op\u00e4\u0165 spo\u010d\u00edva v nulovan\u00ed premennej. Ak si nevie poradi\u0165 s transform\u00e1ciou, znamen\u00e1 to, \u017ee ste sa pon\u00e1h\u013eali a mali by ste rie\u0161i\u0165 jednoduch\u0161ie \u00falohy.<\/p>\n<p>\u010eakujem za pozornos\u0165. Dajte like a prihl\u00e1ste sa na kan\u00e1l.<\/p>\n<p>P.S. Ak ste na\u0161li preklepy alebo chyby v texte, pros\u00edm, dajte mi vedie\u0165. M\u00f4\u017eete to urobi\u0165 ozna\u010den\u00edm \u010dasti textu a stla\u010den\u00edm na Mac \u201e\u2318 + Enter\u201c, a na klasick\u00fdch kl\u00e1vesniciach \u201eCtrl \/ Enter\u201c, alebo cez s\u00fakromn\u00e9 spr\u00e1vy. Ak tieto mo\u017enosti nie s\u00fa k dispoz\u00edcii, nap\u00ed\u0161te o chyb\u00e1ch v koment\u00e1roch. \u010eakujem!<\/p>\n<p class=\"for_users_only_msg\">Len registrovan\u00ed pou\u017e\u00edvatelia sa m\u00f4\u017eu z\u00fa\u010dastni\u0165 prieskumu. <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/auth\/login\/\">Prihl\u00e1ste sa<\/a><\/noindex>, pros\u00edm.<\/p>\n<h2 class=\"default-block__polling-title\">Prieskum pre \u010ditate\u013eov bez karmy<\/h2>\n<ul class=\"poll-result\">\n<li class=\"poll-result__item\">\n<p>                <strong class=\"poll-result__data-percent\">20,0%<\/strong>U\u010d\u00edm profesion\u00e1lne, +12<\/p>\n<\/li>\n<li class=\"poll-result__item\">\n<p>                <strong class=\"poll-result__data-percent\">10,0%<\/strong>U\u010d\u00edm profesion\u00e1lne, -11<\/p>\n<\/li>\n<li class=\"poll-result__item\">\n<p>                <strong class=\"poll-result__data-percent  poll-result__data-percent_winner\">70,0%<\/strong>Neu\u010d\u00edm, +17<\/p>\n<\/li>\n<li class=\"poll-result__item\">\n<p>                <strong class=\"poll-result__data-percent\">0,0%<\/strong>Neu\u010d\u00edm, -10<\/p>\n<\/li>\n<li class=\"poll-result__item\">\n<p>                <strong class=\"poll-result__data-percent\">0,0%<\/strong>In\u00e90<\/p>\n<\/li>\n<\/ul>\n<p>    Hlasovalo 10 pou\u017e\u00edvate\u013eov. Zdr\u017ealo sa 5 pou\u017e\u00edvate\u013eov.<br \/>\n<br \/>Zdroj: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/456500\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e \u0440\u0435\u0447\u044c \u043f\u043e\u0439\u0434\u0435\u0442 \u043e\u0431 \u043e\u0434\u043d\u043e\u0439 \u0438\u0437 \u0431\u0430\u0437\u043e\u0432\u044b\u0445 \u0442\u0435\u043c, \u0434\u0430\u043d\u043d\u0430\u044f \u0441\u0442\u0430\u0442\u044c\u044f \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0430 \u0434\u043b\u044f \u043e\u043f\u044b\u0442\u043d\u044b\u0445 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0441\u0442\u043e\u0432. \u0426\u0435\u043b\u044c \u2014 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043a\u0430\u043a\u0438\u0435 \u0437\u0430\u0431\u043b\u0443\u0436\u0434\u0435\u043d\u0438\u044f \u0431\u044b\u0432\u0430\u044e\u0442 \u0443 \u043d\u043e\u0432\u0438\u0447\u043a\u043e\u0432 \u0432 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438. \u0414\u043b\u044f \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0443\u044e\u0449\u0438\u0445 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 \u044d\u0442\u0438 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0443\u0436\u0435 \u0434\u0430\u0432\u043d\u043e \u0440\u0435\u0448\u0435\u043d\u044b, \u043f\u043e\u0437\u0430\u0431\u044b\u0442\u044b \u0438\u043b\u0438 \u0432\u043e\u043e\u0431\u0449\u0435 \u043d\u0435 \u0437\u0430\u043c\u0435\u0447\u0435\u043d\u044b. \u0421\u0442\u0430\u0442\u044c\u044f \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u0433\u043e\u0434\u0438\u0442\u044c\u0441\u044f, \u0435\u0441\u043b\u0438 \u0432\u0434\u0440\u0443\u0433 \u0432\u0430\u043c \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u043f\u043e\u043c\u043e\u0433\u0430\u0442\u044c \u0441 \u044d\u0442\u043e\u0439 \u0442\u0435\u043c\u043e\u0439 \u043a\u043e\u043c\u0443-\u043d\u0438\u0431\u0443\u0434\u044c. \u0412 \u0441\u0442\u0430\u0442\u044c\u0435 \u043f\u0440\u043e\u0432\u043e\u0434\u044f\u0442\u0441\u044f [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-40208","post","type-post","status-publish","format-standard","hentry"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.4 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e \u0440\u0435\u0447\u044c \u043f\u043e\u0439\u0434\u0435\u0442 \u043e\u0431 \u043e\u0434\u043d\u043e\u0439 \u0438\u0437 \u0431\u0430\u0437\u043e\u0432\u044b\u0445 \u0442\u0435\u043c, \u0434\u0430\u043d\u043d\u0430\u044f \u0441\u0442\u0430\u0442\u044c\u044f \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0430 \u0434\u043b\u044f \u043e\u043f\u044b\u0442\u043d\u044b\u0445 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0441\u0442\u043e\u0432. \u0426\u0435\u043b\u044c \u2014 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043a\u0430\u043a\u0438\u0435 \u0437\u0430\u0431\u043b\u0443\u0436\u0434\u0435\u043d\u0438\u044f \u0431\u044b\u0432\u0430\u044e\u0442 \u0443 \u043d\u043e\u0432\u0438\u0447\u043a\u043e\u0432 \u0432 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/sk\/blog\/kak-nauchit-preodolevat-trudnosti-a-zaodno-i-pisat-czikly\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.4\" \/>\n\t\t<meta property=\"og:locale\" content=\"sk_SK\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u041a\u0430\u043a \u043d\u0430\u0443\u0447\u0438\u0442\u044c \u043f\u0440\u0435\u043e\u0434\u043e\u043b\u0435\u0432\u0430\u0442\u044c \u0442\u0440\u0443\u0434\u043d\u043e\u0441\u0442\u0438, \u0430 \u0437\u0430\u043e\u0434\u043d\u043e \u0438 \u043f\u0438\u0441\u0430\u0442\u044c \u0446\u0438\u043a\u043b\u044b | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e \u0440\u0435\u0447\u044c \u043f\u043e\u0439\u0434\u0435\u0442 \u043e\u0431 \u043e\u0434\u043d\u043e\u0439 \u0438\u0437 \u0431\u0430\u0437\u043e\u0432\u044b\u0445 \u0442\u0435\u043c, \u0434\u0430\u043d\u043d\u0430\u044f \u0441\u0442\u0430\u0442\u044c\u044f \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0430 \u0434\u043b\u044f \u043e\u043f\u044b\u0442\u043d\u044b\u0445 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0441\u0442\u043e\u0432. \u0426\u0435\u043b\u044c \u2014 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043a\u0430\u043a\u0438\u0435 \u0437\u0430\u0431\u043b\u0443\u0436\u0434\u0435\u043d\u0438\u044f \u0431\u044b\u0432\u0430\u044e\u0442 \u0443 \u043d\u043e\u0432\u0438\u0447\u043a\u043e\u0432 \u0432 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/sk\/blog\/kak-nauchit-preodolevat-trudnosti-a-zaodno-i-pisat-czikly\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-02-01T03:04:35+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-02-01T03:04:35+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Ako nau\u010di\u0165 prekon\u00e1va\u0165 \u0165a\u017ekosti, a z\u00e1rove\u0148 p\u00edsa\u0165 cykly | ProHoster","description":"Napriek tomu, \u017ee sa bude hovori\u0165 o jednej z z\u00e1kladn\u00fdch t\u00e9m, tento \u010dl\u00e1nok je nap\u00edsan\u00fd pre sk\u00fasen\u00fdch odborn\u00edkov. Cie\u013eom je uk\u00e1za\u0165, ak\u00e9 myln\u00e9 n\u00e1zory m\u00f4\u017eu ma\u0165 nov\u00e1\u010dikovia v programovan\u00ed.","canonical_url":"https:\/\/prohoster.info\/sk\/blog\/kak-nauchit-preodolevat-trudnosti-a-zaodno-i-pisat-czikly","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"sk_SK","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u041a\u0430\u043a \u043d\u0430\u0443\u0447\u0438\u0442\u044c \u043f\u0440\u0435\u043e\u0434\u043e\u043b\u0435\u0432\u0430\u0442\u044c \u0442\u0440\u0443\u0434\u043d\u043e\u0441\u0442\u0438, \u0430 \u0437\u0430\u043e\u0434\u043d\u043e \u0438 \u043f\u0438\u0441\u0430\u0442\u044c \u0446\u0438\u043a\u043b\u044b | ProHoster","og:description":"\u041d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e \u0440\u0435\u0447\u044c \u043f\u043e\u0439\u0434\u0435\u0442 \u043e\u0431 \u043e\u0434\u043d\u043e\u0439 \u0438\u0437 \u0431\u0430\u0437\u043e\u0432\u044b\u0445 \u0442\u0435\u043c, \u0434\u0430\u043d\u043d\u0430\u044f \u0441\u0442\u0430\u0442\u044c\u044f \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0430 \u0434\u043b\u044f \u043e\u043f\u044b\u0442\u043d\u044b\u0445 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0441\u0442\u043e\u0432. \u0426\u0435\u043b\u044c \u2014 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043a\u0430\u043a\u0438\u0435 \u0437\u0430\u0431\u043b\u0443\u0436\u0434\u0435\u043d\u0438\u044f \u0431\u044b\u0432\u0430\u044e\u0442 \u0443 \u043d\u043e\u0432\u0438\u0447\u043a\u043e\u0432 \u0432 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438.","og:url":"https:\/\/prohoster.info\/sk\/blog\/kak-nauchit-preodolevat-trudnosti-a-zaodno-i-pisat-czikly","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-02-01T03:04:35+00:00","article:modified_time":"2020-02-01T03:04:35+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"40208","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 00:43:24","updated":"2022-09-29 01:18:32","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/posts\/40208","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/comments?post=40208"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/posts\/40208\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/media?parent=40208"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/categories?post=40208"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/tags?post=40208"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}