IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
kaarfii
Člen
Avatar
kaarfii:1.1.2018 16:02

Čest práci,
Učím se programovat v Práskalovi a zasekl jsem se na cyklech. Zkouším si vytvořit program do nápojovýho automatu, který má jenom 3 tlačítka pro volbu kafe, čaje a čokolády. Samozřejmě to je jenom taková blbost, k ničemu to nikdy nebude, jenom se na tom potřebuju procvičit.

Na konci procesu, kdy automat vydá nápoj, se program zeptá, zda chce uživatel novej požadavek, tj. další volba a vydání nápoje - tedy pokračování cyklu. A tady mám problém - pokud zadám NE, program okamžitě skončí a vyhodí mě to zpátky do editoru. Jenže já za UNTIL mám další příkazy a ty program z nějakýho neznýmýho důvodu přeskakuje. Potřebuju se tedy zeptat, kde soudruzi udělali chybu.
Předem viele dank.

Odpovědět
1.1.2018 16:02
Kde se maká, nepřekážej!
Avatar
Odpovídá na kaarfii
Neaktivní uživatel:1.1.2018 16:57

Ahoj, trošku offtopic – pokud se teprve učíš programovat, zkus kouknout na nějaký modernější jazyk – například C#. Máme tu na to výborně popsané tutoriály včetně cvičení. https://www.itnetwork.cz/csharp/zaklady

Nahoru Odpovědět
1.1.2018 16:57
Neaktivní uživatelský účet
Avatar
Odpovídá na kaarfii
Matúš Olejník:1.1.2018 17:08

Program ti vypíše aj ten "Konec" avšak hneď skončí a ty si to nevšimneš, je to kvôli tomu že tam máš

read(Dotaz)

čiže sa ti načíta len to písmeno 'n' a popri tom ako ho zadávaš stlačíš enter a ten ti zožerie ten readln na konci, preto nečaká až kým stlačíš enter. Stačí namiesto read(Dotaz) dať

readln(Dotaz)
Nahoru Odpovědět
1.1.2018 17:08
/* I am not sure why this works but it fixes the problem */
Avatar
Martin Petrovaj
Tvůrce
Avatar
Martin Petrovaj:1.1.2018 17:14

Ahoj, nie som žiaden expert na Pascal, mám ho len na strednej, ale jediná vec, ktorá sa mi tam nepozdáva je možno načítavanie vstupu príkazom Read. Ak načítavaš len jeden znak do premennej typu char, najlepšie by asi bolo použiť ReadKey alebo ReadLn. Nie som si ale 100% istý či to je ono, kód inak vyzerá z môjho pohľadu v poriadku.

Nechcem ťa nijako uraziť, ale len pre istotu sa spýtam, či mám brať tvoj príspevok doslovne a do vstupu zadávaš "NE". Pokiaľ áno, tak ti to jednoznačne padá na tom, tvoj program očakáva presne jeden znak, ak mu podsunieš dva a viac tak zrejme spadne.

Edit: Alebo ako už bolo napísané hore (a dokumentácia to potvrdzuje), príkaz Read "neabsorbuje" Enter na konci, ale ponechá ho na vstupe. Nahradenie ReadKey alebo ReadLn by ti mohlo pomôcť.

Editováno 1.1.2018 17:16
Nahoru Odpovědět
1.1.2018 17:14
if (this.motto == "") { throw new NotImplementedException(); }
Avatar
kaarfii
Člen
Avatar
kaarfii:1.1.2018 19:21

Díky moc, bylo to fakt tím readLn(Dotaz); teď to maká podle mýho původního plánu. :-)
Ale je mi divný, že se příkaz read() nezastavil na předchozím řádku writeLn; Zatím v tom mám zmatky.

Daniel Vítek:
Proč to je mimo téma? Jedu podle "R. Hylmar: Programování pro úplné začátečníky" a vše probíhá jenom v Práskalovi. Až s ní budu hotovej, chci se vrhnout podle možností do LUA. Podle mě to je nejlehčí jazyk na výuku, začínat v C apod. by byla asi sebevražda.

Nahoru Odpovědět
1.1.2018 19:21
Kde se maká, nepřekážej!
Avatar
Martin Petrovaj
Tvůrce
Avatar
Odpovídá na kaarfii
Martin Petrovaj:1.1.2018 19:50

Určite ti k tomu má čo povedať najmä aj oslovený p. Vítek, ale nedá sa nevyjadriť aj mne :-)

Po prvé, písaná kniha z roku 2012 sa dá v tejto oblasti považovať za značne zastaralý zdroj.
Po druhé, prepáč, ale Pascal je už dlho zastaralý jazyk, s ktorým sa dnes už snáď nikde okrem niektorých stredných škôl nestretneš. Mimo toho, že pôvodne bol typickým zástupcom prístupu k programovaniu, ktorý je už desaťročia prekonaný.
No a po tretie ti môžem potvrdiť, že na stránkach ako je táto (a najmä na tejto) nájdeš veľmi kvalitné materiály k neprebernému množstvu moderných jazykov, ktoré sú často dokonca jednoduchšie a menej mätúce než Pascal. Plne súhlasím s tým, že vybrať si C/C++ ako svoj prvý jazyk je harakiri, ale modernejší C# s kľudnou dušou začiatočníkom sám vedľa Pythonu 3 odporúčam. Pascal je už dlho v štádiu, že nad ním ani ja, ani nikto iný už vôbec neuvažuje.

Nahoru Odpovědět
1.1.2018 19:50
if (this.motto == "") { throw new NotImplementedException(); }
Avatar
kaarfii
Člen
Avatar
kaarfii:1.1.2018 21:05

Tak že jsou dneska daleko lepší programy je jasný. Ale někdo zasvěcenej taky psal, že Práskal je na výuku ideální, jinak je k ničemu. Takže já ho chápu jenom jako vstupní bránu k dalším krokům v programování. Knížku už mám rozečtenou do půlky a chci ji dojet. Jak říkám, autor všechno popisuje a vysvětluje na Práskalovi, takže nějakej čas se v něm budu muset ještě pohybovat. Potom od něho zdrhnu na něco lepšího.

Nahoru Odpovědět
1.1.2018 21:05
Kde se maká, nepřekážej!
Avatar
Odpovídá na kaarfii
Matúš Olejník:1.1.2018 21:16

Tak ako writeln('text') vypíše slovo "text" zakončené novým riadkom tak writeln bez parametra len vypíše nový riadok, takže s tým funkcia read nemá nič spoločné :-)

Nahoru Odpovědět
1.1.2018 21:16
/* I am not sure why this works but it fixes the problem */
Avatar
Martin Petrovaj
Tvůrce
Avatar
Martin Petrovaj:1.1.2018 22:37

Ozaj, viem, že ideš postupne podľa knihy, možno to tam niekde ďalej dokonca je, ale snáď ťa zaujme ešte taký malý trik na úsporu kódu: ak si všimneš, pre každý číselný kód v case vlastne vykonávaš tie isté príkazy, len sa ti mení názov nápoja. Čo tak v case len nastaviť obsah nejakej premennej typu string na zvolený nápoj a všetky príkazy vykonať mimo case? Myslím, žs by sa ti zdroják dosť skrátil a sprehľadnil ;-)

Nahoru Odpovědět
1.1.2018 22:37
if (this.motto == "") { throw new NotImplementedException(); }
Avatar
kaarfii
Člen
Avatar
Odpovídá na Matúš Olejník
kaarfii:1.1.2018 22:59

Matúš Olejník:
Jo vidíš to, to mi vůbec nedošlo...

UzivatelXYZ:
Jojo, určitě zkusím. :-)

Nahoru Odpovědět
1.1.2018 22:59
Kde se maká, nepřekážej!
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 10 zpráv z 10.