{"id":23375,"date":"2017-01-31T10:36:08","date_gmt":"2017-01-31T09:36:08","guid":{"rendered":"https:\/\/kmim.wm.pwr.edu.pl\/myszka\/?page_id=23375"},"modified":"2017-01-31T10:36:52","modified_gmt":"2017-01-31T09:36:52","slug":"programowanie","status":"publish","type":"page","link":"https:\/\/kmim.wm.pwr.edu.pl\/myszka\/projekty\/fortran-dla-uzytkownikow-mes\/99-dygresje\/programowanie\/","title":{"rendered":"Programowanie"},"content":{"rendered":"<h2>Wst\u0119p<\/h2>\n<p>U\u017cywanie j\u0119zyka programowania zwi\u0105zane jest nieod\u0142\u0105cznie z programowaniem. Dosy\u0107 trudno znale\u017a\u0107 <b>\u0142adn\u0105<\/b> definicj\u0119 programowania. Wikipedia jedno niewiele znacz\u0105ce s\u0142owo zast\u0119puje potokiem s\u0142\u00f3w trywializuj\u0105cych zadanie do problemu <a class=\"https\" title=\"projektowania, tworzenia, testowania i utrzymywania kodu \u017ar\u00f3d\u0142owego program\u00f3w komputerowych\" href=\"https:\/\/pl.wikipedia.org\/wiki\/Programowanie_komputer\u00f3w\">projektowania, tworzenia, testowania i utrzymywania kodu \u017ar\u00f3d\u0142owego program\u00f3w komputerowych<\/a><i>.<\/i><br \/>\nTo tak jakby tworzenie muzyki okre\u015bli\u0107 jako \u201eustawianie nut na pi\u0119ciolinii\u201d \ud83d\ude42<br \/>\nAngielska Wikipedia programowanie okre\u015bla jako: <a class=\"https\" title=\"a process that leads from an original formulation of a computing problem to executable computer programs\" href=\"https:\/\/en.wikipedia.org\/wiki\/Computer_programming\">a process that leads from an original formulation of a computing problem to executable computer programs<\/a>. I to chyba jest nieco trafniejsze. Cho\u0107 zaczyna si\u0119 od nowego poj\u0119cia <i>computing problem<\/i>.<\/p>\n<h2>Problem obliczeniowy<\/h2>\n<p>Zatem co to jest problem obliczeniowy (<i>computing problem<\/i>)?<br \/>\nWyobra\u017amy sobie bardzo proste zadanie: mamy znale\u017a\u0107 miejsca zerowe funkcji \\(y=f(x)=ax^2+bx+c\\). Oczywi\u015bcie dla dowolnych warto\u015bci \\(a, &nbsp;b\\) i \\(c\\).<br \/>\nNaiwne rozwi\u0105zanie jest znane: s\u0105 dwa miejsca zerowe, a wsp\u00f3\u0142rz\u0119dne wyznacza si\u0119 ze wzoru:<br \/>\n$$x_{1,2}=\\frac{-b \\pm\\sqrt{b^2-4ac}}{2a}$$<br \/>\nale po kr\u00f3tkim namy\u015ble zauwa\u017camy, \u017ce powy\u017csze r\u00f3wnanie jest prawdziwe tylko wtedy gdy \\(a\\ne0\\). Zatem nie podali\u015bmy og\u00f3lnego rozwi\u0105zania tylko rozwi\u0105zanie \u201eszczeg\u00f3lne\u201d.<br \/>\nA wi\u0119c b\u0119d\u0105 nas interesowa\u0142y takie problemy obliczeniowe, dla kt\u00f3rych, dla dowolnego zestawu danych wej\u015bciowych spe\u0142niaj\u0105cych za\u0142o\u017cenia wej\u015bciowe, potrafimy poda\u0107 jednoznaczn\u0105 metod\u0119 rozwi\u0105zywania. Tak wi\u0119c podane rozwi\u0105zanie jest dobre dla wyj\u015bciowego problemu opisanego tak: znale\u017a\u0107 miejsca zerowe funkcji \\(f(x)=ax^2+bx+c,\\;a\\ne0\\).<br \/>\nOczywi\u015bcie dla oryginalnego problemu mo\u017cna r\u00f3wnie\u017c poda\u0107 uniwersalne metody jego rozwi\u0105zywania, kt\u00f3re b\u0119d\u0105 uwzgl\u0119dnia\u0142y warunki \\(a=0,\\; b\\ne0\\) oraz \\(a=0,\\; b=0\\).<\/p>\n<h2>Komputer<\/h2>\n<p>Z drugiej strony pojawia si\u0119 \u201erealizator\u201d og\u00f3lnego rozwi\u0105zania problemu obliczeniowego \u2014 komputer. Wszyscy wiedz\u0105, oczywi\u015bcie, co to jest komputer, a nawet go widuj\u0105 (codziennie). W czym zatem problem?<br \/>\n\u017beby problem przybli\u017cy\u0107 opowiem jednak co to jest komputer.<\/p>\n<h3>Kalkulator<\/h3>\n<p>Wyobra\u017amy sobie najprostszy, czterodzia\u0142aniowy komputer. Sk\u0142ada si\u0119 on (z punktu widzenia u\u017cytkownika) z prostej klawiatury oraz czterech klawiszy dzia\u0142a\u0144 i dodatkowo klawisza \u201er\u00f3wna si\u0119\u201d, kt\u00f3rego u\u017cywamy do zako\u0144czenia oblicze\u0144 i uzyskania wyniku.<br \/>\nPozostawiony sam sobie kalkulator nic ciekawego nie wymy\u015bli, ani nie wy\u015bwietli na wy\u015bwietlaczu \u017cadnego rezultatu (chyba, \u017ce jest <s>popsuty<\/s> ma bogate \u017cycie wewn\u0119trzne i sam z siebie co\u015b generuje). Do sensownego jego u\u017cycia potrzebny jest operator, kt\u00f3ry sekwencj\u0105 naci\u015bni\u0119\u0107 klawiszy potrafi\u0142 b\u0119dzie z kalkulatora skorzysta\u0107.<br \/>\nKalkulator, na pierwszy rzut oka nie bardzo nadaje si\u0119 jako przyk\u0142ad dzia\u0142ania komputera. Ale \u2014 zaufajcie mi, jestem informatykiem \u2014 jest to jeden z lepszych przyk\u0142ad\u00f3w.<br \/>\n<a href=\"https:\/\/kmim.wm.pwr.edu.pl\/myszka\/wp-content\/uploads\/sites\/2\/2017\/01\/kalkulator.pdf\" class=\"pdfemb-viewer\" style=\"\" data-width=\"max\" data-height=\"max\" data-toolbar=\"bottom\" data-toolbar-fixed=\"off\">kalkulator<\/a><br \/>\nKomputer od kalkulatora odr\u00f3\u017cnia si\u0119, \u017ce poza rejestrem akumulatora (kt\u00f3ry jest cz\u0119\u015bci\u0105 procesora) posiada znacznie wi\u0119cej pami\u0119ci dodatkowych s\u0142u\u017c\u0105cych do przechowywania danych, wynik\u00f3w po\u015brednich oraz rezultat\u00f3w oblicze\u0144. Kalkulator wymaga jeszcze <b>operatora<\/b> kt\u00f3ry wie co chce liczy\u0107 i w pami\u0119ci (albo na kartce) ma plan (kolejno\u015b\u0107) dzia\u0142a\u0144. Komputer przechowuje t\u0119 kolejno\u015b\u0107 w postaci <b>programu<\/b> i (ci\u0105gle jeszcze) potrzebuje cz\u0142owieka, \u017ceby programy tworzy\u0107.<\/p>\n<h3>Przyk\u0142ad \u201epraktyczny\u201d<\/h3>\n<p>Wyobra\u017amy sobie, \u017ce do rozwi\u0105zania problemu<\/p>\n<p>$$x_{1,2}=\\frac{-b \\pm\\sqrt{b^2-4ac}}{2a}$$<br \/>\nmamy zesp\u00f3\u0142 ludzi potrafi\u0105cy wykona\u0107 pojedyncz\u0105 operacj\u0119 arytmetyczn\u0105:<\/p>\n<ul>\n<li>A potrafi dodawa\u0107<\/li>\n<li>B potrafi odejmowa\u0107<\/li>\n<li>C i D potrafi\u0105 mno\u017cy\u0107<\/li>\n<li>E potrafi dzieli\u0107 i wyci\u0105ga\u0107 pierwiastki<\/li>\n<\/ul>\n<p>Planujemy zatem rozwi\u0105zanie problemu, dziel\u0105c zadanie na elementarne operacje<\/p>\n<ol start=\"1\" type=\"1\">\n<li>\\(t_0=-b\\),<\/li>\n<li>\\(t_1=b*b\\),<\/li>\n<li>\\(t_2=2a\\),<\/li>\n<li>\\(t_3=4a\\),<\/li>\n<li>\\(t_4=t_3c\\),<\/li>\n<li>\\(t_5=t_1-t_4\\),<\/li>\n<li>\\(t_6=\\sqrt{t_5}\\),<\/li>\n<li>\\(t_7=t_0-t_6\\),<\/li>\n<li>\\(t_8=t_0+t_6\\),<\/li>\n<li>\\(x_1=\\frac{t_7}{t_2}\\),<\/li>\n<li>\\(x_2=\\frac{t_8}{t_2}\\).<\/li>\n<\/ol>\n<figure id=\"attachment_23382\" aria-describedby=\"caption-attachment-23382\" style=\"width: 110px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/kmim.wm.pwr.edu.pl\/myszka\/projekty\/fortran-dla-uzytkownikow-mes\/99-dygresje\/programowanie\/aa-crop\/\" rel=\"attachment wp-att-23382\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-23382 size-medium\" src=\"https:\/\/kmim.wm.pwr.edu.pl\/myszka\/wp-content\/uploads\/sites\/2\/2017\/01\/aa-crop-110x300.png\" width=\"110\" height=\"300\" srcset=\"https:\/\/kmim.wm.pwr.edu.pl\/myszka\/wp-content\/uploads\/sites\/2\/2017\/01\/aa-crop-110x300.png 110w, https:\/\/kmim.wm.pwr.edu.pl\/myszka\/wp-content\/uploads\/sites\/2\/2017\/01\/aa-crop-376x1024.png 376w, https:\/\/kmim.wm.pwr.edu.pl\/myszka\/wp-content\/uploads\/sites\/2\/2017\/01\/aa-crop.png 442w\" sizes=\"auto, (max-width: 110px) 100vw, 110px\" \/><\/a><figcaption id=\"caption-attachment-23382\" class=\"wp-caption-text\">Rozdzia\u0142 zada\u0144 pomi\u0119dzy \u201eprocesory\u201d<\/figcaption><\/figure>\n<p>(Nie przejmuj\u0119 si\u0119 teraz zadaniami \u201ezdegenerowanymi\u201d, w kt\u00f3rych krytyczne parametry maj\u0105 warto\u015b\u0107 0.)<br \/>\nZwracam uwag\u0119, \u017ce ka\u017cda operacje to pojedyncza operacja dwuargumentowa. W istocie procesor tylko takie potrafi wykonywa\u0107: pojedyncze operacje na dwu argumentach.<br \/>\nTeraz zadania musimy przydzieli\u0107 \u201efachowcom\u201d. Przedstawia to poni\u017cszy rysunek.<\/p>\n<p>Zwracam uwag\u0119, \u017ce za ka\u017cdym razem gdy zmieni si\u0119 zestaw dost\u0119pnych fachowc\u00f3w i ich kompetencje \u2014 rozdzia\u0142 zada\u0144 b\u0119dzie wygl\u0105da\u0142 inaczej. W szczeg\u00f3lno\u015bci mo\u017cemy mie\u0107 tylko jednego, uniwersalnego fachowca, kt\u00f3ry potrafi wykona\u0107 ka\u017cde obliczenia. W\u00f3wczas sytuacja b\u0119dzie wygl\u0105da\u0107 jeszcze inaczej.<br \/>\nNaszym fachowcem jest uniwersalny procesor. Niestety jego uniwersalno\u015b\u0107 ogranicza si\u0119 do czterech podstawowych dzia\u0142a\u0144 arytmetycznych: dodawanie, odejmowanie, mno\u017cenie i dzielenie. Opr\u00f3cz dzia\u0142a\u0144 arytmetycznych wykonuje on operacje logiczne (suma logiczna, iloczyn logiczny,\u2026). Dodatkowo potrafi on sprawdzi\u0107 znak liczby (w uk\u0142adzie dw\u00f3jkowym znak liczby kodowany jest jako 1 bit \u2014 najbardziej znacz\u0105cy czyli znajduj\u0105cy si\u0119 najbardziej po lewej stronie). Zatem wystarczy go sprawdzi\u0107. Procesor potrafi jeszcze powiedzie\u0107 czy liczba jest r\u00f3wna zeru. Ka\u017cda kolejna operacja (na przyk\u0142ad sprawdzenie czy <tt>A<\/tt> jest wi\u0119ksze od <tt>B<\/tt> sprowadza si\u0119 do odj\u0119cia od <tt>A<\/tt> <tt>B<\/tt> i sprawdzenia jaki jest wynik) musi by\u0107 roz\u0142o\u017cona na elementarne operacji. Wyliczenie pierwiastka kwadratowego czy warto\u015bci funkcji sinus jest pewnym wyzwaniem wymagaj\u0105cym wykonania bardzo wielu operacji. Na szcz\u0119\u015bcie najcz\u0119\u015bciej wykonywane operacje dostarczane s\u0105 w postaci \u201efunkcji standardowych\u201d.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Wst\u0119p U\u017cywanie j\u0119zyka programowania zwi\u0105zane jest nieod\u0142\u0105cznie z programowaniem. Dosy\u0107 trudno znale\u017a\u0107 \u0142adn\u0105 definicj\u0119 programowania. Wikipedia jedno niewiele znacz\u0105ce s\u0142owo zast\u0119puje potokiem s\u0142\u00f3w trywializuj\u0105cych zadanie do problemu projektowania, tworzenia, testowania i utrzymywania kodu \u017ar\u00f3d\u0142owego program\u00f3w komputerowych. To tak jakby tworzenie muzyki okre\u015bli\u0107 jako \u201eustawianie nut na pi\u0119ciolinii\u201d \ud83d\ude42 Angielska Wikipedia programowanie okre\u015bla jako: a process &hellip; <a href=\"https:\/\/kmim.wm.pwr.edu.pl\/myszka\/projekty\/fortran-dla-uzytkownikow-mes\/99-dygresje\/programowanie\/\" class=\"more-link\">Czytaj dalej <span class=\"screen-reader-text\">Programowanie<\/span> <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"parent":23371,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"ngg_post_thumbnail":0,"footnotes":""},"class_list":["post-23375","page","type-page","status-publish","hentry"],"publishpress_future_action":{"enabled":false,"date":"2026-04-19 11:05:47","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\/23375","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=23375"}],"version-history":[{"count":8,"href":"https:\/\/kmim.wm.pwr.edu.pl\/myszka\/wp-json\/wp\/v2\/pages\/23375\/revisions"}],"predecessor-version":[{"id":23385,"href":"https:\/\/kmim.wm.pwr.edu.pl\/myszka\/wp-json\/wp\/v2\/pages\/23375\/revisions\/23385"}],"up":[{"embeddable":true,"href":"https:\/\/kmim.wm.pwr.edu.pl\/myszka\/wp-json\/wp\/v2\/pages\/23371"}],"wp:attachment":[{"href":"https:\/\/kmim.wm.pwr.edu.pl\/myszka\/wp-json\/wp\/v2\/media?parent=23375"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}