1.1. Алгоритамски начин размишљања¶
Живимо окружени рачунарима. Они се налазе у нашим мобилним уређајима, сатовима, телевизорима, кухињским апаратима, аутомобилима, лифтовима. Олакшавају нам послове, а учење чине занимљивијим. Захваљујући рачунарима, слободно размењујемо информације и брзо им приступамо.
Мада се чини да су рачунари паметни, то је само привид – рачунари, још увек, не могу самостално да мисле! Наиме, то су машине које следе упутства (наредбе) и тако обављају различите задатке. Наредбе рачунарима пишу људи, мали и велики програмери. Програм je низ наредби које рачунар извршава. Да би рачунар могао да ти помогне да брже и лакше обављаш неки посао, потребно је да га за то „обучиш” – програмираш, слично као што људи треба да се обуче да раде сложене послове.
На пример, кувари користе рецепте у којима је поступак прављења јела задат као низ једноставних корака. Те једноставне кораке, наредбе, кувар уме да уради, а њиховим извршавањем по редоследу наведеном у рецепту може да направи и најсложенија јела која никад раније није правио.
Играч који игра неку игру против другог играча може да победи ако зна правила игре и ако има добар план како да победи – победничку стратегију.
Оно што је заједничко за програм, рецепт и победничку стратегију јесте да су то алгоритми записани језиком који разуме њихов извршилац – рачунар, кувар, играч. Алгоритам је низ корака који воде до решења неког проблема. Све ове активности – (рад рачунара, кување по рецепту, играње игрице коришћењем победничке стратегије), остварују се извршавањем низа елементарних корака по редоследу који је задат алгоритмом.
Нема свака игра победничку стратегију, али ова коју ти нудимо има. То је верзија игре НИМ са једном гомилом жетона. Два играча А и В наизменично повлаче потезе. У сваком потезу играч може да узме 1, 2 или 3 жетона. Први почиње играч А уписивањем броја жетона које узима. Побеђује онај играч који последњи узме жетон. Можеш да играш против рачунара (single player) или против другог играча. Покушај!
На табли je 15 жетона - побеђује ко узме последњи
Ти
На потезу
Рачунар
На потезу
Да ли си успео да победиш рачунар који игра по стратегији која му је уграђена програмом? Колико жетона треба да узмеш у првом потезу да би победа била твоја?
Хајде да заједно анализирамо како доћи до победе. Кренућемо од краја игре.
Побеђује играч који противнику остави 4 жетона. Колико год узео противник, на табли остаје онолико жетона колико други играч може да узме једним потезом. Дакле, у овој игри побеђује онај играч који свом противнику на табли остави неки умножак од 4 жетона – 4, 8 или 12. Ако играч А у првом потезу узме 1 жетон, играч В обезбеђује себи победу узимањем два жетона. Ако играч А у првом потезу узме 2 жетона, играч В обезбеђује себи победу узимањем једног жетона. Међутим, ако играч А у првом потезу узме 3 жетона, обезбедио је победу за себе.
У следећој табели приказана је победничка стратегија за играча А.
Играч А |
Играч В |
---|---|
|
|
Остаје 12. |
|
2a. Ако је противник узео 1, узима 3 жетона. |
|
2b. Ако је противник узео 2, узима 2 жетона. |
|
2c. Ако је противник узео 3, узима 1 жетон. |
|
Остаје 8. |
|
3a. Ако је противник узео 1, узима 3 жетона. |
|
3b. Ако је противник узео 2, узима 2 жетона. |
|
3c. Ако је противник узео 3, узима 1 жетон. |
|
Остаје 4. |
|
|
|
Примећујеш да је у победничком алгоритму природа корака различита.
Неки кораци се извршавају по редоследу како су наведени (Корак 1: Узима 3 жетона);
Неки кораци се извршавају само под одређеним условом (Кораци 2 и 3: Ако је противник узео 1, узима 3 жетона, …);
Неки кораци се понављају (кораци 2 и 3 су идентични, дакле корак 2 се понавља 2 пута).
Ток алгоритма је делом линијски (корак по корак), делом условљен (потез играча А зависи од потеза противника) и делом цикличан (неки кораци се понављају).
Колико жетона треба да узме играч А у првом потезу да би обезбедио победу, ако је на талону 16 жетона, а у једном потезу може да се узме 1-3 жетона?
А ако је на табли 15 жетона, али у једном потезу може да се узме 1-4 жетона?
У првом случају играч А нема победничку стратегију, јер се на почетку налази 16 = 4х4 жетона, што играчу В обезбеђује победу. Једина шанса да победи играч А је да играч В не зна победничку стратегију и вуче потезе насумице.
У другом случају побеђује онај играч који својим потезом остави противнику 5, 10 или 15 жетона. Дакле, играч В има победничку стратегију. Да је на табли 16 жетона и да у једном потезу може да се узме 1-4 жетона, играч А би могао да победи, ако у првом потезу узме 1 жетон.
Не брини ако не разумеш овај пример до танчина. Верујемо да ћеш кроз наредне лекције боље разумети начин рада алгоритама.
Да би и рачунар разумео победнички алгоритам потребно је да му га објасниш користећи неки од програмских језика.
Програмски језици су углавном текстуални. То значи да програмер пише наредбе у специфичном облику енглеског језика. На пример, ако користиш Пајтон (енг. Python), наредба да рачунар на екрану испише „Узимам 3 жетона.“ изгледа овако: print (‘Uzimam 3 žetona.’)
.
Почетницима текстуални програмски језици често делују сложено. Зато су осмишљени визуелни програмски језици, као што је Скреч. Они ти омогућавају да програмираш без куцања наредби, спајањем графичких блокова. За сада ти, можда, и ово делује компликовано, али видећеш да није.
Да бисмо те уверили у једноставност визуелног програмирања, показаћемо ти како се у програмском језику Скреч постиже исписивање реченице „Узимам 3 жетона.“ Довољно је уписати текст у овај блок.
Када рачунар изрвши ову наредбу, на екрану ће се појавити:
Симпатично, зар не?
Мада вероватно немаш програмерско искуство у Скречу, верујемо да ћеш моћи да одговориш на следећа питања.
- Кораке 1 и 2
- Шта се дешава у трећем кораку алгоритма? Размисли.
- Кораке 1 и 3
- Шта се дешава у другом кораку алгоритма? Размисли.
- Кораке 2 и 3
- Шта се дешава у првом кораку алгоритма? Размисли.
- Кораке 1, 2 и 3
- Браво! За тебе је програмирање заиста једноставно!
Q-1: На које кораке алгоритма играча В може да се односи следећи низ наредби?
Програмирање треба да посматраш као нову врсту писања. Када овладаш техникама и логиком програмирања, моћи ћеш да „пишеш” нове врсте „текста” – интерактивне приче, игре, анимације и симулације.
Рачунар је предвидљива машина. Радиће баш оно што му кажеш. Твој програм извршаваће се на потпуно исти начин на различитим рачунарима.
Покушај да даш неко упутство другарицама и друговима. Видећеш да ће свако од њих, иако су добили прецизна упутства, задатак урадити на свој начин. На људе утичу њихове емоције, предзнање, искуство, концентрација и још много чинилаца. Људи могу да увежбају да раде по прецизном упутству, али и даље ће грешити чешће него рачунари (на пример због умора).
Лепота програмирања лежи у могућности да смишљаш разне занимљиве ствари и састављањем програма оствариш своје идеје. Рачунар, сам по себи, не рађа креативност, али може да ти помогне да развијеш и испољиш своју креативност и покажеш је коме год желиш, па чак и целом свету!
Шта смо научили¶
У овој лекцији увели смо појам алгоритма. На примеру игре НИМ показали смо како одговарајућим редоследом потеза можеш да дођеш до победе. Тај низ корака, који називамо победничка стратегија, један је од примера алгоритма. Да би рачунар могао да изврши алгоритам, потребно је да га испрограмираш, односно да кораке алгоритма запишеш језиком који рачунар разуме – програмским језиком. Језик програмирања који ћеш учити кроз лекције овог курса је Скреч.
Додатак¶
Више детаља о структури алгоритама, начину њиховог графичког представљања и начину њиховог записивања у Скречу, можеш да видиш у тексту „Основни елементи програмске логике у Скречу” из нашег практикума.
Провери своје знање пролазећи кроз наредна питања и вежбе.