{"id":21893,"date":"2015-10-28T09:07:36","date_gmt":"2015-10-28T08:07:36","guid":{"rendered":"http:\/\/kmim.wm.pwr.edu.pl\/myszka\/?page_id=21893"},"modified":"2015-10-28T10:10:54","modified_gmt":"2015-10-28T09:10:54","slug":"laboratorium-4-zip-podstawy-programowania-2","status":"publish","type":"page","link":"https:\/\/kmim.wm.pwr.edu.pl\/myszka\/dydaktyka\/technologie-informacyjne\/zip-zpm032003\/projekt\/laboratorium-4-zip-podstawy-programowania-2\/","title":{"rendered":"Laboratorium 4 (ZIP): Podstawy programowania"},"content":{"rendered":"<div class=\"maketitle\">\n<h2 class=\"titleHead\">Laboratorium 4 (ZIP): Podstawy programowania<\/h2>\n<div class=\"author\">\n      <span class=\"plr-12\">Wojciech Myszka<\/span>\n    <\/div>\n<p><\/div>\n<h3 class=\"sectionHead\"><span class=\"titlemark\">1<\/span> <a id=\"x1-10001\" name=\"x1-10001\"><\/a>Wst\u0119p<\/h3>\n<p class=\"noindent\">Kolejne laboratorium ma zapozna\u0107 student\u00f3w z\u00a0podstawowymi konstrukcjami programistycznymi (w\u00a0najw\u0119\u017cszym mo\u017cliwym zakresie).<\/p>\n<h4 class=\"subsectionHead\"><span class=\"titlemark\">1.1<\/span> <a id=\"x1-20001.1\" name=\"x1-20001.1\"><\/a>Cel laboratorium<\/h4>\n<p class=\"noindent\">Celem zaj\u0119\u0107 jest napisanie programu, kt\u00f3ry przeprowadza \u201eludka\u201d z\u00a0punktu w\u00a0kt\u00f3rym stoi do wyj\u015bcia.<\/p>\n<h4 class=\"subsectionHead\"><span class=\"titlemark\">1.2<\/span> <a id=\"x1-30001.2\" name=\"x1-30001.2\"><\/a>Wymagania<\/h4>\n<p class=\"noindent\">Nie dotyczy.<\/p>\n<h4 class=\"subsectionHead\"><span class=\"titlemark\">1.3<\/span> <a id=\"x1-40001.3\" name=\"x1-40001.3\"><\/a>Pytania<\/h4>\n<p class=\"noindent\">Nie dotyczy.<\/p>\n<h3 class=\"sectionHead\"><span class=\"titlemark\">2<\/span> <a id=\"x1-50002\" name=\"x1-50002\"><\/a>Struktura laboratorium<\/h3>\n<p class=\"noindent\">Zaj\u0119cia prowadzone indywidualnie.<\/p>\n<h3 class=\"sectionHead\"><span class=\"titlemark\">3<\/span> <a id=\"x1-60003\" name=\"x1-60003\"><\/a>Zadania do wykonania<\/h3>\n<h4 class=\"subsectionHead\"><span class=\"titlemark\">3.1<\/span> <a id=\"x1-70003.1\" name=\"x1-70003.1\"><\/a>Rozwi\u0105zanie labiryntu<\/h4>\n<p class=\"noindent\">Najprostszy algorytm typu: \u201eid\u017a do przodu, obr\u00f3\u0107 si\u0119 w\u00a0prawo, id\u017a do przodu, id\u017a do przodu\u2026\u201d dzia\u0142aj\u0105cy tylko i\u00a0wy\u0142\u0105cznie w\u00a0jednej kon\ufb01guracji jest minimalnym dopuszczalnym (3) wynikiem zaj\u0119\u0107.<\/p>\n<p class=\"indent\">Mo\u017cna sformu\u0142owa\u0107 warunki (najlepiej najpierw na papierze, a\u00a0p\u00f3\u017aniej w\u00a0formie programu blockly) pozwalaj\u0105ce rozpozna\u0107 ka\u017cd\u0105 z\u00a0sytuacji opisanych w\u00a0rozdziale <a href=\"#x1-100004.1.1\">4.1.1<\/a> oraz zaprogramowa\u0107 odpowiednie dzia\u0142ania w\u00a0ka\u017cdym przypadku\u2026 B\u0119dzie to podwy\u017csza\u0107 ocen\u0119.<\/p>\n<p class=\"indent\">Mo\u017cna, wreszcie, sprawdzi\u0107 czy opracowane fragmenty programu dzia\u0142aj\u0105 (podprowadzaj\u0105c najpierw ludka do zakr\u0119tu, skrzy\u017cowania czy \u015blepego zau\u0142ka i\u00a0zobaczy\u0107 jaki jest efekt zaplanowanego dzia\u0142ania.<\/p>\n<p class=\"indent\">Studenci jednak powinni stara\u0107 si\u0119 napisa\u0107 wersj\u0119 nieco bardziej ambitn\u0105\u2026 Gdy si\u0119 nie uda \u2014 oddaj\u0105 wersj\u0119 najprostsz\u0105 z\u00a0opisem podj\u0119tych dzia\u0142a\u0144 i\u00a0analiz\u0105 co nie wysz\u0142o i\u00a0czemu. Sprawozdania powinny by\u0107 przygotowane jako (porz\u0105dne) pliki w\u00a0programie Word. Mo\u017cna w\u00a0nich za\u0142\u0105cza\u0107 zrzuty ekranu z\u00a0opisem poszczeg\u00f3lnych faz pracy.<\/p>\n<h3 class=\"sectionHead\"><span class=\"titlemark\">4<\/span> <a id=\"x1-80004\" name=\"x1-80004\"><\/a>Materia\u0142y pomocnicze<\/h3>\n<h4 class=\"subsectionHead\"><span class=\"titlemark\">4.1<\/span> <a id=\"x1-90004.1\" name=\"x1-90004.1\"><\/a>Algorytm rozwi\u0105zania zadania<\/h4>\n<p class=\"noindent\">Jest bardzo wiele sposob\u00f3w mog\u0105cych prowadzi\u0107 do przeprowadzenia ludka przez labirynt niezale\u017cnie od punktu wej\u015bcia i\u00a0wyj\u015bcia z\u00a0labiryntu. Poni\u017cej podam kilka z\u00a0nich.<\/p>\n<h5 class=\"subsubsectionHead\"><span class=\"titlemark\">4.1.1<\/span> <a id=\"x1-100004.1.1\" name=\"x1-100004.1.1\"><\/a>B\u0142\u0105dzenie losowe<\/h5>\n<p class=\"noindent\">Ka\u017cemy ludkowi i\u015b\u0107 w\u00a0dowolnym kierunku. Gdy dojdzie do skrzy\u017cowania podejmuje losow\u0105 decyzj\u0119 w\u00a0kt\u00f3r\u0105 stron\u0119 si\u0119 obr\u00f3ci\u0107 i\u00a0idzie dalej. Po doj\u015bciu do zau\u0142ka bez wyj\u015bcia \u2014 obraca si\u0119, wraca do skrzy\u017cowania i\u00a0ponownie losowo wybiera kierunek.<\/p>\n<p class=\"indent\">Ewentualne problemy:<\/p>\n<ol class=\"enumerate1\">\n<li class=\"enumerate\" id=\"x1-10002x1\">Jak rozpozna\u0107, \u017ce ludek jest na skrzy\u017cowaniu?<\/li>\n<li class=\"enumerate\" id=\"x1-10004x2\">Jak rozpozna\u0107 zakr\u0119t?<\/li>\n<li class=\"enumerate\" id=\"x1-10006x3\">Jak rozpozna\u0107 zau\u0142ek bez wyj\u015bcia?<\/li>\n<\/ol>\n<p class=\"indent\">Dla ka\u017cdego z\u00a0tych przypadk\u00f3w trzeba opracowa\u0107 algorytm dzia\u0142ania:<\/p>\n<ol class=\"enumerate1\">\n<li class=\"enumerate\" id=\"x1-10008x1\">Co zrobi\u0107 gdy jeste\u015bmy na skrzy\u017cowaniu?<\/li>\n<li class=\"enumerate\" id=\"x1-10010x2\">Co zrobi\u0107 na zakr\u0119cie?<\/li>\n<li class=\"enumerate\" id=\"x1-10012x3\">Jak zachowa\u0107 si\u0119 w\u00a0zau\u0142ku bez wyj\u015bcia?<\/li>\n<\/ol>\n<h5 class=\"subsubsectionHead\"><span class=\"titlemark\">4.1.2<\/span> <a id=\"x1-110004.1.2\" name=\"x1-110004.1.2\"><\/a>Regu\u0142a lewej (prawej) r\u0119ki<\/h5>\n<p class=\"noindent\">Inny spos\u00f3b post\u0119powania to w\u0119dr\u00f3wka z\u00a0lew\u0105 (praw\u0105) r\u0119k\u0105 przy \u015bcianie. Ludek idzie tak, aby zawsze lew\u0105 (praw\u0105) r\u0119k\u0105 dotyka\u0107 \u015bciany. Tak te\u017c wykonuje wszystkie obroty: gdy \u015bciana jest przed nim dokonuje obrotu w\u00a0prawo (lewo).<\/p>\n<p class=\"indent\">Generalnie algorytm mo\u017ce sk\u0142ada\u0107 si\u0119 z dwu g\u0142\u00f3wnych czynno\u015bci:<\/p>\n<ol class=\"enumerate1\">\n<li class=\"enumerate\" id=\"x1-11002x1\">Je\u017celi jest \u015bciana przed nosem \u2014 obracamy si\u0119 w prawo.<\/li>\n<li class=\"enumerate\" id=\"x1-11004x2\">Je\u015bli jest \u015bciana po lewej \u2014 idzie do przodu.<\/li>\n<\/ol>\n<h4 class=\"subsectionHead\"><span class=\"titlemark\">4.2<\/span> <a id=\"x1-120004.2\" name=\"x1-120004.2\"><\/a>\u015arodowisko blockly<\/h4>\n<h5 class=\"subsubsectionHead\"><span class=\"titlemark\">4.2.1<\/span> <a id=\"x1-130004.2.1\" name=\"x1-130004.2.1\"><\/a>W laboratorium<\/h5>\n<p class=\"noindent\">Korzystanie ze \u015brodowiska blockly jest dosy\u0107 proste. Trzeba uruchomi\u0107 przegl\u0105dark\u0119 \ufb01refox i przej\u015b\u0107 do adresu <a href=\"https:\/\/blockly-games.appspot.com\/\" class=\"url\"><span class=\"pltt-10x-x-109\">https:\/\/blockly-games.appspot.com\/<\/span><\/a>. Proponuj\u0119 zabaw\u0119 rozpocz\u0105\u0107 od zadania <a href=\"https:\/\/blockly-games.appspot.com\/puzzle?lang=pl\">Puzzle<\/a>. Celem jego jest zapoznanie si\u0119 ze sposobami manipulowania blokami. (jest to dosy\u0107 proste \u2014 nale\u017cy chwyci\u0107 bloczek mysz\u0105 i przenie\u015b w odpowiednie miejsce; wypustki i miejsce gdzie mog\u0105 by\u0107 przyczepione pod\u015bwietlaj\u0105 si\u0119, gdy zbli\u017cymy bloki). Zadanie polega na powi\u0105zaniu obrazka z nazw\u0105 i cechami charakterystycznymi zwierz\u0119cia. Mi\u0142ej zabawy!<\/p>\n<p class=\"indent\">Kolejnym zadaniem jest przej\u015bcie <a href=\"https:\/\/blockly-games.appspot.com\/maze?lang=pl\">labiryntu<\/a>. Zadanie sk\u0142ada si\u0119 z szeregu etap\u00f3w.<\/p>\n<p class=\"indent\">Wchodzimy na stron\u0119 przedstawiaj\u0105c\u0105 \u201eobszar roboczy\u201d:<br class=\"newline\" \/><img decoding=\"async\" src=\"http:\/\/kmim.wm.pwr.edu.pl\/myszka\/wp-content\/uploads\/sites\/2\/2015\/10\/robocza-resized.png\" alt=\"PIC\" \/><\/p>\n<p class=\"indent\">Po lewej stronie jest widok na labirynt, na szarym pasku znajduj\u0105 si\u0119 dost\u0119pne narz\u0119dzia. Mog\u0105 si\u0119 pojawia\u0107 komunikaty informuj\u0105ce o ty co nale\u017cy zrobi\u0107. Mo\u017ce by\u0107 te\u017c informacja m\u00f3wi\u0105ca za pomoc\u0105 ilu bloczk\u00f3w nale\u017cy zadanie wykona\u0107.<\/p>\n<p class=\"indent\">Potrzebny blok wskazujemy, \u201echwytamy\u201d i\u00a0za pomoc\u0105 myszy przeci\u0105gamy na obszar roboczy (po prawej stronie). Bloki mo\u017cna \u0142\u0105czy\u0107 (stykaj\u0105c je ze sob\u0105) \u2014 zwracaj\u0105c uwag\u0119, \u017ceby \u201ewypustki\u201d tra\ufb01a\u0142y w\u00a0odpowiednie \u201ewg\u0142\u0119bienia\u201d. Pojedyncze bloki (lub grupy blok\u00f3w) mo\u017cna wk\u0142ada\u0107 do \u201ewn\u0119trza\u201d innych polece\u0144.<\/p>\n<p class=\"indent\">Gdy mamy kilka blok\u00f3w mo\u017cne je przenosi\u0107 chwytaj\u0105c za blok znajduj\u0105cy si\u0119 na samym szczycie. Chwycenie za inny blok powoduje rozczepienie grupy blok\u00f3w.<\/p>\n<p class=\"indent\">Niepotrzebne bloki lub fragmenty programu usuwamy przenosz\u0105c je do kosza (<img decoding=\"async\" src=\"http:\/\/kmim.wm.pwr.edu.pl\/myszka\/wp-content\/uploads\/sites\/2\/2015\/10\/kosz.png\" alt=\"PIC\" \/>).<\/p>\n<p class=\"indent\">Program uruchamiamy naciskaj\u0105c klawisz \u201eUruchom Program\u201d.<\/p>\n<h4 class=\"subsectionHead\"><span class=\"titlemark\">4.3<\/span> <a id=\"x1-140004.3\" name=\"x1-140004.3\"><\/a>Elementarne operacje<\/h4>\n<p class=\"noindent\">W wariancie j\u0119zyka blockly u\u017cytym do sterowania ludzikiem dost\u0119pne s\u0105 dwie podstawowe operacje, kt\u00f3re mo\u017ce wykonywa\u0107 ludzik. S\u0105 to:<\/p>\n<ol class=\"enumerate1\">\n<li class=\"enumerate\" id=\"x1-14002x1\">Id\u017a do przodu <img decoding=\"async\" src=\"http:\/\/kmim.wm.pwr.edu.pl\/myszka\/wp-content\/uploads\/sites\/2\/2015\/10\/przod.png\" alt=\"PIC\" \/><\/li>\n<li class=\"enumerate\" id=\"x1-14004x2\">Obr\u00f3\u0107 si\u0119 (w lewo, w prawo):<br class=\"newline\" \/><img decoding=\"async\" src=\"http:\/\/kmim.wm.pwr.edu.pl\/myszka\/wp-content\/uploads\/sites\/2\/2015\/10\/obroty.png\" alt=\"PIC\" \/><\/li>\n<\/ol>\n<h4 class=\"subsectionHead\"><span class=\"titlemark\">4.4<\/span> <a id=\"x1-150004.4\" name=\"x1-150004.4\"><\/a>Operacje logiczne i\u00a0steruj\u0105ce<\/h4>\n<p class=\"noindent\">Blockly w\u00a0wersji obs\u0142uguj\u0105cej algorytmy wyposa\u017cony jest w\u00a0elementarny zestaw operacji steruj\u0105cych:<br class=\"newline\" \/><img decoding=\"async\" src=\"http:\/\/kmim.wm.pwr.edu.pl\/myszka\/wp-content\/uploads\/sites\/2\/2015\/10\/opreracje.png\" alt=\"PIC\" \/><\/p>\n<p class=\"indent\">Najwa\u017cniejsza z nich to Powtarzaj (pierwsza na poprzednim obrazku). Zapewnia ona nieprzerwany ruch robocika, kt\u00f3ry ko\u0144czy si\u0119 po osi\u0105gni\u0119ciu wyj\u015bcia (lub wypadni\u0119ciu z trasy).<\/p>\n<p class=\"indent\">Nast\u0119pna to operacja warunkowa (\u201eje\u017celi \u015bcie\u017cka prowadzi prosto\u201d to wykonaj\u2026) i jej wariant je\u017celi \u015bcie\u017cka prowadzi prosto to wykonaj \u2026 w przeciwnym razie wykonaj \u2026 (co\u015b innego). Rodzaj sprawdzanego warunku mo\u017cna prze\u0142\u0105cza\u0107 wybieraj\u0105c odpowiednie pole na bloczku:<br class=\"newline\" \/><img decoding=\"async\" src=\"http:\/\/kmim.wm.pwr.edu.pl\/myszka\/wp-content\/uploads\/sites\/2\/2015\/10\/op-wariant.png\" alt=\"PIC\" \/><\/p>\n<p class=\"indent\">Z tych bloczk\u00f3w nale\u017cy zbudowa\u0107 algorytm przej\u015bcia zadanego labiryntu. Og\u00f3lna metoda rozwi\u0105zywania labiryntu to \u201eregu\u0142a lewej r\u0119ki\u201d: nale\u017cy tak porusza\u0107 si\u0119 po labiryncie, \u017ceby \u015bciana zawsze by\u0142a po lewej stronie. Dodatkowym ograniczeniem jest to, \u017ce program w blockly musi sk\u0142ada\u0107 si\u0119 z co najwy\u017cej 10 blok\u00f3w.<\/p>\n<h3 class=\"sectionHead\"><span class=\"titlemark\">5<\/span> <a id=\"x1-160005\" name=\"x1-160005\"><\/a>Instrukcja w formacie PDF<\/h3>\n<p class=\"noindent\"><a href=\"http:\/\/kmim.wm.pwr.edu.pl\/myszka\/wp-content\/uploads\/sites\/2\/2015\/10\/zipl04.pdf\">Instrukcja w formie PDF<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Laboratorium 4 (ZIP): Podstawy programowania Wojciech Myszka 1 Wst\u0119p Kolejne laboratorium ma zapozna\u0107 student\u00f3w z\u00a0podstawowymi konstrukcjami programistycznymi (w\u00a0najw\u0119\u017cszym mo\u017cliwym zakresie). 1.1 Cel laboratorium Celem zaj\u0119\u0107 jest napisanie programu, kt\u00f3ry przeprowadza \u201eludka\u201d z\u00a0punktu w\u00a0kt\u00f3rym stoi do wyj\u015bcia. 1.2 Wymagania Nie dotyczy. 1.3 Pytania Nie dotyczy. 2 Struktura laboratorium Zaj\u0119cia prowadzone indywidualnie. 3 Zadania do wykonania 3.1 &hellip; <a href=\"https:\/\/kmim.wm.pwr.edu.pl\/myszka\/dydaktyka\/technologie-informacyjne\/zip-zpm032003\/projekt\/laboratorium-4-zip-podstawy-programowania-2\/\" class=\"more-link\">Czytaj dalej <span class=\"screen-reader-text\">Laboratorium 4 (ZIP): Podstawy programowania<\/span> <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"parent":21674,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"ngg_post_thumbnail":0,"footnotes":""},"class_list":["post-21893","page","type-page","status-publish","hentry"],"publishpress_future_action":{"enabled":false,"date":"2026-04-11 20:03:57","action":"change-status","newStatus":"draft","terms":[],"taxonomy":"language","extraData":[]},"publishpress_future_workflow_manual_trigger":{"enabledWorkflows":[]},"_links":{"self":[{"href":"https:\/\/kmim.wm.pwr.edu.pl\/myszka\/wp-json\/wp\/v2\/pages\/21893","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kmim.wm.pwr.edu.pl\/myszka\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/kmim.wm.pwr.edu.pl\/myszka\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/kmim.wm.pwr.edu.pl\/myszka\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/kmim.wm.pwr.edu.pl\/myszka\/wp-json\/wp\/v2\/comments?post=21893"}],"version-history":[{"count":1,"href":"https:\/\/kmim.wm.pwr.edu.pl\/myszka\/wp-json\/wp\/v2\/pages\/21893\/revisions"}],"predecessor-version":[{"id":21900,"href":"https:\/\/kmim.wm.pwr.edu.pl\/myszka\/wp-json\/wp\/v2\/pages\/21893\/revisions\/21900"}],"up":[{"embeddable":true,"href":"https:\/\/kmim.wm.pwr.edu.pl\/myszka\/wp-json\/wp\/v2\/pages\/21674"}],"wp:attachment":[{"href":"https:\/\/kmim.wm.pwr.edu.pl\/myszka\/wp-json\/wp\/v2\/media?parent=21893"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}