{"id":998,"date":"2019-02-27T13:44:24","date_gmt":"2019-02-27T12:44:24","guid":{"rendered":"https:\/\/www.kompikownia.pl\/?p=998"},"modified":"2019-02-27T13:51:26","modified_gmt":"2019-02-27T12:51:26","slug":"matura-z-informatyki-2016-liczba-pi","status":"publish","type":"post","link":"https:\/\/www.kompikownia.pl\/index.php\/2019\/02\/27\/matura-z-informatyki-2016-liczba-pi\/","title":{"rendered":"Matura z informatyki 2016 &#8211; Liczba PI (C++, arkusz kalkulacyjny)"},"content":{"rendered":"<span class=\"rt-reading-time\" style=\"display: block;\"><span class=\"rt-label rt-prefix\">Czas czytania:<\/span> <span class=\"rt-time\">2<\/span> <span class=\"rt-label rt-postfix\">minut<\/span><\/span>\n\n\n<p>Witajcie \ud83d\ude42 Mam nadziej\u0119, \u017ce przygotowujecie si\u0119 do matury, drodzy czytelnicy? Cofamy si\u0119 kolejny roczek do ty\u0142u. Bierzemy na warsztat zadanie &#8222;Liczba PI&#8221; znajduj\u0105ce si\u0119 na arkuszu maturalnym w roku 2016. Mamy do rozwi\u0105zania jedynie trzy podpunkty. Czy p\u00f3jdzie g\u0142adko? Zobaczymy. No to zaczynajmy \ud83d\ude42 <\/p>\n\n\n\n<p>Je\u015bli chcesz przeczyta\u0107 om\u00f3wienie rozwi\u0105za\u0144 innych zada\u0144 maturalnych z informatyki, zapraszam do odwiedzin <a href=\"https:\/\/www.kompikownia.pl\/index.php\/matura-z-informatyki-spis\/\">specjalnie przygotowanej do tego celu strony<\/a>. Agreguje ona nie tylko wszystkie om\u00f3wione do tej pory tre\u015bci, ale daje \u0142atwy dost\u0119p do arkuszy maturalnych z informatyki oraz ich rozwi\u0105za\u0144.<\/p>\n\n\n\n<p>Dobra. Wystarczy ju\u017c gl\u0119dzenia. Bierzmy si\u0119 za robot\u0119 i rozwalmy kolejne zadanko z matury \ud83d\ude42 <\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Zadanie 4. Liczba PI<\/h2>\n\n\n\n<p>W kartezja\u0144skim uk\u0142adzie wsp\u00f3\u0142rz\u0119dnych na p\u0142aszczy\u017anie narysowano kwadrat o boku d\u0142ugo\u015bci 400 i \u015brodku symetrii w punkcie (200;200). Boki kwadratu s\u0105 r\u00f3wnoleg\u0142e do osi uk\u0142adu wsp\u00f3\u0142rz\u0119dnych. W kwadrat wpisano ko\u0142o. Nast\u0119pnie wylosowano 10 000 punkt\u00f3w nale\u017c\u0105cych do kwadratu. Wsp\u00f3\u0142rz\u0119dne (x,y) punkt\u00f3w zosta\u0142y zapisane w pliku <em><a href=\"https:\/\/www.kompikownia.pl\/wp-content\/uploads\/2019\/02\/punkty.txt\">punkty.txt<\/a><\/em> Ka\u017cdy punkt w osobnym wierszu. Wiersz ma posta\u0107 dw\u00f3ch liczb ca\u0142kowitych z zakresu &lt;0;400&gt;, rozdzielonych pojedynczym znakiem odst\u0119pu. <\/p>\n\n\n\n<p>Korzystaj\u0105c z powy\u017cszych danych oraz dost\u0119pnych narz\u0119dzi informatycznych, wykonaj zadania. Wyniki zapisz w pliku tekstowym wyniki_4.txt. Odpowied\u017a do ka\u017cdego zadania poprzed\u017a numerem zadania. <\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Kod uniwersalny dla wszystkich podpunkt\u00f3w<\/h3>\n\n\n<div class=\"codecolorer-container cpp default\" style=\"overflow:auto;white-space:nowrap;width:90%;height:500px;\"><table cellspacing=\"0\" cellpadding=\"0\"><tbody><tr><td class=\"line-numbers\"><div>1<br \/>2<br \/>3<br \/>4<br \/>5<br \/>6<br \/>7<br \/>8<br \/>9<br \/>10<br \/>11<br \/>12<br \/>13<br \/>14<br \/>15<br \/>16<br \/>17<br \/>18<br \/>19<br \/>20<br \/>21<br \/>22<br \/>23<br \/>24<br \/><\/div><\/td><td><div class=\"cpp codecolorer\"><span class=\"kw4\">const<\/span> <span class=\"kw4\">int<\/span> MIDDLEX <span class=\"sy1\">=<\/span> <span class=\"nu0\">200<\/span><span class=\"sy4\">;<\/span><br \/>\n<span class=\"kw4\">const<\/span> <span class=\"kw4\">int<\/span> MIDDLEY <span class=\"sy1\">=<\/span> <span class=\"nu0\">200<\/span><span class=\"sy4\">;<\/span><br \/>\n<span class=\"kw4\">const<\/span> <span class=\"kw4\">int<\/span> R <span class=\"sy1\">=<\/span> <span class=\"nu0\">200<\/span><span class=\"sy4\">;<\/span><br \/>\n<span class=\"kw4\">struct<\/span> Point <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw4\">int<\/span> x<span class=\"sy4\">;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw4\">int<\/span> y<span class=\"sy4\">;<\/span><br \/>\n<span class=\"br0\">&#125;<\/span><span class=\"sy4\">;<\/span><br \/>\n<br \/>\nvector<span class=\"sy1\">&lt;<\/span>Point<span class=\"sy1\">&gt;<\/span> loadPointsFromFile<span class=\"br0\">&#40;<\/span>string filename<span class=\"br0\">&#41;<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; vector<span class=\"sy1\">&lt;<\/span>Point<span class=\"sy1\">&gt;<\/span> data<span class=\"sy4\">;<\/span><br \/>\n&nbsp; &nbsp; ifstream file<span class=\"sy4\">;<\/span><br \/>\n&nbsp; &nbsp; file.<span class=\"me1\">open<\/span><span class=\"br0\">&#40;<\/span>filename<span class=\"br0\">&#41;<\/span><span class=\"sy4\">;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">if<\/span><span class=\"br0\">&#40;<\/span>file.<span class=\"me1\">is_open<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">==<\/span><span class=\"kw2\">false<\/span><span class=\"br0\">&#41;<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw3\">cout<\/span><span class=\"sy1\">&lt;&lt;<\/span><span class=\"st0\">&quot;Nie uda\u0142o si\u0119 otworzy\u0107 pliku &quot;<\/span><span class=\"sy1\">&lt;&lt;<\/span>filename<span class=\"sy1\">&lt;&lt;<\/span>endl<span class=\"sy4\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">return<\/span> data<span class=\"sy4\">;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">for<\/span><span class=\"br0\">&#40;<\/span><span class=\"kw4\">int<\/span> i <span class=\"sy1\">=<\/span> <span class=\"nu0\">0<\/span><span class=\"sy4\">;<\/span>i<span class=\"sy1\">&lt;<\/span><span class=\"nu0\">10000<\/span><span class=\"sy4\">;<\/span>i<span class=\"sy2\">++<\/span><span class=\"br0\">&#41;<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw4\">struct<\/span> Point pp<span class=\"sy4\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; file<span class=\"sy1\">&gt;&gt;<\/span>pp.<span class=\"me1\">x<\/span><span class=\"sy4\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; file<span class=\"sy1\">&gt;&gt;<\/span>pp.<span class=\"me1\">y<\/span><span class=\"sy4\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; data.<span class=\"me1\">push_back<\/span><span class=\"br0\">&#40;<\/span>pp<span class=\"br0\">&#41;<\/span><span class=\"sy4\">;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">return<\/span> data<span class=\"sy4\">;<\/span><br \/>\n<span class=\"br0\">&#125;<\/span><\/div><\/td><\/tr><\/tbody><\/table><\/div>\n\n\n\n<p>Na samym pocz\u0105tku tworzymy sobie trzy sta\u0142e. Okre\u015blaj\u0105 nam one \u015brodek okr\u0119gu oraz jego promie\u0144. Nast\u0119pnie napisali\u015bmy sobie strukturk\u0119, w kt\u00f3rej b\u0119dziemy przechowywali informacje na temat pojedynczego punktu. <\/p>\n\n\n\n<p>Funkcja odczytuj\u0105ca plik wygl\u0105da standardowo, podobnie jak w om\u00f3wieniu zadania z <a href=\"https:\/\/www.kompikownia.pl\/index.php\/2019\/02\/20\/matura-z-informatyki-2017-piksele-c\/\">2017<\/a> i <a href=\"https:\/\/www.kompikownia.pl\/index.php\/2019\/02\/12\/matura-z-informatyki-2018-zadanie-wega-c\/\">2018<\/a> roku. Na pocz\u0105tku tworzymy vector, w kt\u00f3rym b\u0119dziemy przechowywali odczytane dane. Otwieramy plik. Sprawdzamy, czy ta operacja sie uda\u0142a. Je\u015bli si\u0119 uda\u0142a, to odczytujemy 10000 wsp\u00f3\u0142rz\u0119dnych z pliku. Korzystamy ze strumieni, gdy\u017c w tym wypadku to one s\u0105 najwygodniejsze. Na samym ko\u0144cu funkcji zwracamy pobrane punkty.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Zadanie 4.1. (0-3) <\/h3>\n\n\n\n<p>Wypisz wsp\u00f3\u0142rz\u0119dne tych punkt\u00f3w, kt\u00f3re nale\u017c\u0105 do brzegu ko\u0142a (okr\u0119gu), oraz podaj liczb\u0119 punkt\u00f3w nale\u017c\u0105cych do wn\u0119trza ko\u0142a (brzeg ko\u0142a nie nale\u017cy do wn\u0119trza ko\u0142a).<\/p>\n\n\n\n<p><strong>Wskaz\u00f3wka:<\/strong><\/p>\n\n\n\n<p>R\u00f3wnanie okr\u0119gu o \u015brodku w punkcie S = (a,b) i promieniu r &gt; 0 ma posta\u0107: <br><\/p>\n\n\n\n<p>(x-a)^2+(y-b)^2=r^2<\/p>\n\n\n\n<p><strong>Informacja<\/strong><\/p>\n\n\n\n<p>W pliku w\u015br\u00f3d 100 pierwszych punkt\u00f3w 80 nale\u017cy do wn\u0119trza ko\u0142a. <\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Rozwi\u0105zanie<\/h4>\n\n\n<div class=\"codecolorer-container cpp default\" style=\"overflow:auto;white-space:nowrap;width:90%;\"><table cellspacing=\"0\" cellpadding=\"0\"><tbody><tr><td class=\"line-numbers\"><div>34<br \/>35<br \/>36<br \/>37<br \/>38<br \/>39<br \/>40<br \/>41<br \/><\/div><\/td><td><div class=\"cpp codecolorer\"><span class=\"kw4\">bool<\/span> isOnTheCircumference<span class=\"br0\">&#40;<\/span>Point p<span class=\"br0\">&#41;<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">if<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#40;<\/span><span class=\"kw3\">pow<\/span><span class=\"br0\">&#40;<\/span>p.<span class=\"me1\">x<\/span><span class=\"sy2\">-<\/span>MIDDLEX,<span class=\"nu0\">2<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy2\">+<\/span><span class=\"kw3\">pow<\/span><span class=\"br0\">&#40;<\/span>p.<span class=\"me1\">y<\/span><span class=\"sy2\">-<\/span>MIDDLEY,<span class=\"nu0\">2<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">==<\/span><span class=\"br0\">&#40;<\/span>R<span class=\"sy2\">*<\/span>R<span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span> <span class=\"kw1\">return<\/span> <span class=\"kw2\">true<\/span><span class=\"sy4\">;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">return<\/span> <span class=\"kw2\">false<\/span><span class=\"sy4\">;<\/span><br \/>\n<span class=\"br0\">&#125;<\/span><br \/>\n<span class=\"kw4\">bool<\/span> isInTheCircle<span class=\"br0\">&#40;<\/span>Point p<span class=\"br0\">&#41;<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">if<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#40;<\/span><span class=\"kw3\">pow<\/span><span class=\"br0\">&#40;<\/span>p.<span class=\"me1\">x<\/span><span class=\"sy2\">-<\/span>MIDDLEX,<span class=\"nu0\">2<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy2\">+<\/span><span class=\"kw3\">pow<\/span><span class=\"br0\">&#40;<\/span>p.<span class=\"me1\">y<\/span><span class=\"sy2\">-<\/span>MIDDLEY,<span class=\"nu0\">2<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">&lt;<\/span><span class=\"br0\">&#40;<\/span>R<span class=\"sy2\">*<\/span>R<span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span> <span class=\"kw1\">return<\/span> <span class=\"kw2\">true<\/span><span class=\"sy4\">;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">return<\/span> <span class=\"kw2\">false<\/span><span class=\"sy4\">;<\/span><br \/>\n<span class=\"br0\">&#125;<\/span><\/div><\/td><\/tr><\/tbody><\/table><\/div>\n\n\n\n<p>Jak na najprostsze zadanie przysta\u0142o, nic szczeg\u00f3lnego. CKE poda\u0142o nam na tacy wszystkie wzory. Wystarczy tylko odpowiednio z nich skorzysta\u0107. <\/p>\n\n\n\n<p>Co zrobili\u015bmy w powy\u017cszym listingu? Utworzyli\u015bmy dwie funkcje pomocnicze. Pierwsza sprawdza, czy punkt znajduje si\u0119 na kraw\u0119dzi ko\u0142a. Korzystamy tam z podanego w tre\u015bci polecenia wzoru. Sprawdzamy, czy jest on prawdziwy. Je\u015bli tak, oznacza to \u017ce punkt le\u017cy na kraw\u0119dzi ko\u0142a. Zwracamy wtedy true. <\/p>\n\n\n\n<p>Druga funkcja jest stworzona analogicznie. Tym razem jednak warunek jest inny. Sprawdzamy, czy lewa cz\u0119\u015b\u0107 wzoru jest mniejsza od prawej. Dlaczego? Wynika to po prostu z matematyki. Je\u015bli punkt le\u017cy w \u015brodku ko\u0142a oznacza to, \u017ce musi le\u017ce\u0107 w odleg\u0142o\u015bci mniejszej od \u015brodka ni\u017c promie\u0144 tego ko\u0142a. W\u0142a\u015bnie dlatego zastosowali\u015bmy w funkcji znak mniejszo\u015bci. <\/p>\n\n\n<div class=\"codecolorer-container cpp default\" style=\"overflow:auto;white-space:nowrap;width:90%;\"><table cellspacing=\"0\" cellpadding=\"0\"><tbody><tr><td class=\"line-numbers\"><div>42<br \/>43<br \/>44<br \/>45<br \/>46<br \/>47<br \/>48<br \/>49<br \/>50<br \/>51<br \/>52<br \/><\/div><\/td><td><div class=\"cpp codecolorer\"><span class=\"kw4\">int<\/span> main<span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><br \/>\n<span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; vector<span class=\"sy1\">&lt;<\/span>Point<span class=\"sy1\">&gt;<\/span> data <span class=\"sy1\">=<\/span> loadPointsFromFile<span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;punkty.txt&quot;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy4\">;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw4\">int<\/span> inTheCircleCount <span class=\"sy1\">=<\/span> <span class=\"nu0\">0<\/span><span class=\"sy4\">;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">for<\/span><span class=\"br0\">&#40;<\/span>Point pt <span class=\"sy4\">:<\/span> data<span class=\"br0\">&#41;<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">if<\/span><span class=\"br0\">&#40;<\/span>isInTheCircle<span class=\"br0\">&#40;<\/span>pt<span class=\"br0\">&#41;<\/span><span class=\"sy1\">==<\/span><span class=\"kw2\">true<\/span><span class=\"br0\">&#41;<\/span> inTheCircleCount<span class=\"sy2\">++<\/span><span class=\"sy4\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">if<\/span><span class=\"br0\">&#40;<\/span>isOnTheCircumference<span class=\"br0\">&#40;<\/span>pt<span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span> <span class=\"kw3\">cout<\/span><span class=\"sy1\">&lt;&lt;<\/span><span class=\"st0\">&quot;(&quot;<\/span><span class=\"sy1\">&lt;&lt;<\/span>pt.<span class=\"me1\">x<\/span><span class=\"sy1\">&lt;&lt;<\/span><span class=\"st0\">&quot;,&quot;<\/span><span class=\"sy1\">&lt;&lt;<\/span>pt.<span class=\"me1\">y<\/span><span class=\"sy1\">&lt;&lt;<\/span><span class=\"st0\">&quot;),&quot;<\/span><span class=\"sy4\">;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw3\">cout<\/span><span class=\"sy1\">&lt;&lt;<\/span>inTheCircleCount<span class=\"sy4\">;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">return<\/span> <span class=\"nu0\">0<\/span><span class=\"sy4\">;<\/span><br \/>\n<span class=\"br0\">&#125;<\/span><\/div><\/td><\/tr><\/tbody><\/table><\/div>\n\n\n\n<p>Wyj\u0105tkowo przeanalizujemy funkcj\u0119 main. Co tutaj si\u0119 znajduje? Na samym pocz\u0105tku oczywi\u015bcie wczytujemy dane z pliku. Tworzymy zmienn\u0105 pomocnicz\u0105 w kt\u00f3rej b\u0119dziemy zliczali ilo\u015b\u0107 punkt\u00f3w l\u0119\u017c\u0105cych wewn\u0105trz ko\u0142a. Nast\u0119pna cz\u0119\u015b\u0107 kodu to range-based for. Rozwi\u0105zujemy jednocze\u015bnie obydwa podpunkty zadania. Sprawdzamy, czy punkt znajduje si\u0119 wewn\u0105trz ko\u0142a. Je\u015bli tak &#8211; zwi\u0119kszamy warto\u015b\u0107 zmiennej inTheCircleCount o 1. Podobnie weryfikujemy, czy punkt nale\u017cy do kraw\u0119dzi ko\u0142a. Je\u015bli tak, wypisujemy jego wsp\u00f3\u0142rz\u0119dne. (Oczywi\u015bcie, nie zapominamy o przepisaniu ich r\u0119cznie do pliku wyniki_4.txt, z odpowiedni\u0105 adnotacj\u0105&nbsp;na temat zadania) <\/p>\n\n\n<span class=\"collapseomatic \" id=\"id6a84f738bd9dc\"  tabindex=\"0\" title=\"Kompletne rozwi\u0105zanie zadanie 4.1\"    >Kompletne rozwi\u0105zanie zadanie 4.1<\/span><div id=\"target-id6a84f738bd9dc\" class=\"collapseomatic_content \">\n<script src=\"https:\/\/gist.github.com\/karol221-10\/b1751653fb7848d022cb2a794e7e8fe2.js\"><\/script><br \/>\n<\/div>\n\n\n\n<h3 class=\"wp-block-heading\">Zadanie 4.2 (0-3)<\/h3>\n\n\n\n<p>Przy za\u0142o\u017ceniu r\u00f3wnomiernego rozk\u0142adu punkt\u00f3w w kwadracie, stosunek liczby punkt\u00f3w nale\u017c\u0105cych do ko\u0142a do liczby punkt\u00f3w nale\u017c\u0105cych do kwadratu w przybli\u017ceniu r\u00f3wny jest stosunkowi pola ko\u0142a Pk do pola kwadratu P.<\/p>\n\n\n\n<p>Wyznacz przybli\u017con\u0105 warto\u015b\u0107 liczby pi, bior\u0105c pod uwag\u0119 punkty z pliku <a href=\"https:\/\/www.kompikownia.pl\/wp-content\/uploads\/2019\/02\/punkty.txt\">punkty.txt:<\/a><\/p>\n\n\n\n<ul><li>pierwszych 1000 punkt\u00f3w<\/li><li>pierwszych 5000 punkt\u00f3w<\/li><li>wszystkie punkty<\/li><\/ul>\n\n\n\n<p>Wynik zaokr\u0105glij do 4 miejsc po przecinku.<\/p>\n\n\n\n<p>Wz\u00f3r: <\/p>\n\n\n\n<p><p class=\"ql-center-displayed-equation\" style=\"line-height: 45px;\"><span class=\"ql-right-eqno\"> &nbsp; <\/span><span class=\"ql-left-eqno\"> &nbsp; <\/span><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/quicklatex.com\/cache3\/a2\/ql_ce9f229e58ec5e02f698a1a25545ada2_l3.png\" height=\"45\" width=\"83\" class=\"ql-img-displayed-equation quicklatex-auto-format\" alt=\"&#92;&#091;&#92;&#102;&#114;&#97;&#99;&#123;&#110;&#95;&#123;&#107;&#125;&#125;&#123;&#110;&#125;&#92;&#97;&#112;&#112;&#114;&#111;&#120;&#32;&#92;&#102;&#114;&#97;&#99;&#123;&#80;&#95;&#123;&#107;&#125;&#125;&#123;&#80;&#125;&#92;&#093;\" title=\"Rendered by QuickLaTeX.com\"\/><\/p><\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Rozwi\u0105zanie:<\/h4>\n\n\n\n<p>No c\u00f3\u017c. Matematyka jest kr\u00f3low\u0105 nauk. Nie rozwi\u0105\u017cemy tego zadania, je\u015bli nie b\u0119dziemy potrafili przekszta\u0142ci\u0107 powy\u017cszego wzoru. Pami\u0119tasz jak liczy si\u0119 pole ko\u0142a, prawda? Ta wiedza w tym momencie naprawd\u0119 si\u0119&nbsp;przyda. Je\u015bli za \u017cadne skarby \u015bwiata nie mo\u017cesz sobie przypomnie\u0107 takiego wzoru, sp\u00f3jrz poni\u017cej \ud83d\ude42 <\/p>\n\n\n\n<p><p class=\"ql-center-displayed-equation\" style=\"line-height: 23px;\"><span class=\"ql-right-eqno\"> &nbsp; <\/span><span class=\"ql-left-eqno\"> &nbsp; <\/span><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/quicklatex.com\/cache3\/3a\/ql_632e3bacdd125b62dd2c9ec93b75263a_l3.png\" height=\"23\" width=\"107\" class=\"ql-img-displayed-equation quicklatex-auto-format\" alt=\"&#92;&#091;&#80;&#95;&#123;&#107;&#125;&#61;&#32;&#92;&#112;&#105;&#42;&#114;&#94;&#50;&#92;&#093;\" title=\"Rendered by QuickLaTeX.com\"\/><\/p><\/p>\n\n\n\n<p>Przeprowad\u017amy przekszta\u0142cenie wzor\u00f3w. Musimy wyznaczy\u0107 warto\u015b\u0107 liczby PI.<\/p>\n\n\n\n<p><p class=\"ql-center-displayed-equation\" style=\"line-height: 49px;\"><span class=\"ql-right-eqno\"> &nbsp; <\/span><span class=\"ql-left-eqno\"> &nbsp; <\/span><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/quicklatex.com\/cache3\/75\/ql_9fec0b5e2bb50fa78296ebcf64893175_l3.png\" height=\"49\" width=\"113\" class=\"ql-img-displayed-equation quicklatex-auto-format\" alt=\"&#92;&#091;&#92;&#102;&#114;&#97;&#99;&#123;&#110;&#95;&#123;&#107;&#125;&#125;&#123;&#110;&#125;&#92;&#97;&#112;&#112;&#114;&#111;&#120;&#32;&#92;&#102;&#114;&#97;&#99;&#123;&#92;&#112;&#105;&#32;&#42;&#32;&#114;&#94;&#50;&#125;&#123;&#80;&#125;&#92;&#093;\" title=\"Rendered by QuickLaTeX.com\"\/><\/p><br><p class=\"ql-center-displayed-equation\" style=\"line-height: 23px;\"><span class=\"ql-right-eqno\"> &nbsp; <\/span><span class=\"ql-left-eqno\"> &nbsp; <\/span><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/quicklatex.com\/cache3\/d7\/ql_5dcfc994138e27ebfad49d81574e3dd7_l3.png\" height=\"23\" width=\"179\" class=\"ql-img-displayed-equation quicklatex-auto-format\" alt=\"&#92;&#091;&#110;&#42;&#32;&#92;&#112;&#105;&#32;&#42;&#32;&#114;&#94;&#50;&#32;&#92;&#97;&#112;&#112;&#114;&#111;&#120;&#32;&#110;&#95;&#107;&#32;&#42;&#32;&#80;&#92;&#093;\" title=\"Rendered by QuickLaTeX.com\"\/><\/p><br><p class=\"ql-center-displayed-equation\" style=\"line-height: 45px;\"><span class=\"ql-right-eqno\"> &nbsp; <\/span><span class=\"ql-left-eqno\"> &nbsp; <\/span><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/quicklatex.com\/cache3\/f9\/ql_813e2ab5280f81fbb76e14aa954b10f9_l3.png\" height=\"45\" width=\"107\" class=\"ql-img-displayed-equation quicklatex-auto-format\" alt=\"&#92;&#091;&#92;&#112;&#105;&#61;&#92;&#102;&#114;&#97;&#99;&#123;&#110;&#95;&#107;&#32;&#42;&#32;&#80;&#125;&#123;&#110;&#32;&#42;&#32;&#114;&#94;&#50;&#125;&#92;&#093;\" title=\"Rendered by QuickLaTeX.com\"\/><\/p><\/p>\n\n\n\n<p>Napiszmy teraz program, kt\u00f3ry skorzysta z wyliczonego powy\u017cej wzoru. <\/p>\n\n\n<div class=\"codecolorer-container cpp default\" style=\"overflow:auto;white-space:nowrap;width:90%;\"><table cellspacing=\"0\" cellpadding=\"0\"><tbody><tr><td class=\"line-numbers\"><div>36<br \/>37<br \/>38<br \/>39<br \/><\/div><\/td><td><div class=\"cpp codecolorer\"><span class=\"kw4\">bool<\/span> isBelongToTheCircle<span class=\"br0\">&#40;<\/span>Point p<span class=\"br0\">&#41;<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">if<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#40;<\/span><span class=\"kw3\">pow<\/span><span class=\"br0\">&#40;<\/span>p.<span class=\"me1\">x<\/span><span class=\"sy2\">-<\/span>MIDDLEX,<span class=\"nu0\">2<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy2\">+<\/span><span class=\"kw3\">pow<\/span><span class=\"br0\">&#40;<\/span>p.<span class=\"me1\">y<\/span><span class=\"sy2\">-<\/span>MIDDLEY,<span class=\"nu0\">2<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">&lt;=<\/span><span class=\"br0\">&#40;<\/span>R<span class=\"sy2\">*<\/span>R<span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span> <span class=\"kw1\">return<\/span> <span class=\"kw2\">true<\/span><span class=\"sy4\">;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">return<\/span> <span class=\"kw2\">false<\/span><span class=\"sy4\">;<\/span><br \/>\n<span class=\"br0\">&#125;<\/span><\/div><\/td><\/tr><\/tbody><\/table><\/div>\n\n\n\n<p>Ta funkcja powinna wyda\u0107 ci si\u0119&nbsp;znajoma&#8230; TAK. To prawie ta sama, kt\u00f3r\u0105 napisali\u015bmy w odpowiedzi na poprzedni podpunkt zadania. Czym si\u0119 r\u00f3\u017cni? Wcze\u015bniej musieli\u015bmy oddzielnie wyznaczy\u0107 punkty le\u017c\u0105ce na kraw\u0119dzi ko\u0142a oraz nale\u017c\u0105ce do wn\u0119trza ko\u0142a. Przy wyliczaniu warto\u015bci PI uznajemy, \u017ce do ko\u0142a nale\u017c\u0105 zar\u00f3wno te punkty kt\u00f3re znajduj\u0105 si\u0119&nbsp;na jego obrysie jak i te, kt\u00f3re po\u0142o\u017cone s\u0105 wewn\u0105trz. Dlatego instrukcja warunkowa zmieni\u0142a si\u0119. <\/p>\n\n\n<div class=\"codecolorer-container cpp default\" style=\"overflow:auto;white-space:nowrap;width:90%;\"><table cellspacing=\"0\" cellpadding=\"0\"><tbody><tr><td class=\"line-numbers\"><div>40<br \/>41<br \/>42<br \/>43<br \/>44<br \/>45<br \/>46<br \/>47<br \/>48<br \/><\/div><\/td><td><div class=\"cpp codecolorer\"><span class=\"kw4\">double<\/span> calculateRatio<span class=\"br0\">&#40;<\/span><span class=\"kw4\">int<\/span> circlePoints,<span class=\"kw4\">int<\/span> numberOfPoints<span class=\"br0\">&#41;<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw4\">const<\/span> <span class=\"kw4\">double<\/span> circleArea <span class=\"sy1\">=<\/span> M_PI<span class=\"sy2\">*<\/span><span class=\"br0\">&#40;<\/span>R<span class=\"sy2\">*<\/span>R<span class=\"br0\">&#41;<\/span><span class=\"sy4\">;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw4\">const<\/span> <span class=\"kw4\">double<\/span> squareArea <span class=\"sy1\">=<\/span> <span class=\"br0\">&#40;<\/span><span class=\"nu0\">2<\/span><span class=\"sy2\">*<\/span>MIDDLEX<span class=\"br0\">&#41;<\/span><span class=\"sy2\">*<\/span><span class=\"br0\">&#40;<\/span><span class=\"nu0\">2<\/span><span class=\"sy2\">*<\/span>MIDDLEY<span class=\"br0\">&#41;<\/span><span class=\"sy4\">;<\/span> <span class=\"co1\">\/\/ lub po prostu 400*400<\/span><br \/>\n<br \/>\n&nbsp; &nbsp; <span class=\"kw4\">double<\/span> numerator <span class=\"sy1\">=<\/span> circlePoints<span class=\"sy2\">*<\/span>squareArea<span class=\"sy4\">;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw4\">double<\/span> denominator <span class=\"sy1\">=<\/span> numberOfPoints<span class=\"sy2\">*<\/span>R<span class=\"sy2\">*<\/span>R<span class=\"sy4\">;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw4\">double<\/span> result <span class=\"sy1\">=<\/span> numerator<span class=\"sy2\">\/<\/span>denominator<span class=\"sy4\">;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">return<\/span> result<span class=\"sy4\">;<\/span><br \/>\n<span class=\"br0\">&#125;<\/span><\/div><\/td><\/tr><\/tbody><\/table><\/div>\n\n\n\n<p>Funkcja calculateRatio wylicza liczb\u0119 pi wg wzoru, kt\u00f3ry ustalili\u015bmy na pocz\u0105tku. Jako argument przyjmujemy ilo\u015b\u0107 punkt\u00f3w, znajduj\u0105cych si\u0119 wewn\u0105trz ko\u0142a, a tak\u017ce ilo\u015b\u0107 punkt\u00f3w dla kt\u00f3rych chcemy przeprowadzi\u0107 wyliczenia. Najpierw tworzymy sobie dwie sta\u0142e. Pierwsza z nich zawiera pole ko\u0142a. (W tym miejscu z niego skorzystali\u015bmy metod\u0105 kopiuj-wklej). Druga sta\u0142a to pole kwadratu, kt\u00f3ry jest opisany na tym kole.<\/p>\n\n\n\n<p>Wyliczanie u\u0142amka rozbili\u015bmy sobie na dwa kroki. Najpierw obliczamy licznik (zmienna numerator), a nast\u0119pnie mianownik. Ponownie stosujemy metod\u0119 copy-paste. Podstawiamy nasze wyliczone wcze\u015bniej zmienne pod wyznaczony wz\u00f3r. <\/p>\n\n\n\n<p>Zmienna result zawiera odpowied\u017a do zadania (dla danej liczby punkt\u00f3w) <\/p>\n\n\n<div class=\"codecolorer-container cpp default\" style=\"overflow:auto;white-space:nowrap;width:90%;\"><table cellspacing=\"0\" cellpadding=\"0\"><tbody><tr><td class=\"line-numbers\"><div>49<br \/>50<br \/>51<br \/>52<br \/>53<br \/>54<br \/>55<br \/>56<br \/><\/div><\/td><td><div class=\"cpp codecolorer\"><span class=\"kw4\">double<\/span> calculatePIAccuracy<span class=\"br0\">&#40;<\/span>vector<span class=\"sy1\">&lt;<\/span>Point<span class=\"sy1\">&gt;<\/span><span class=\"sy3\">&amp;<\/span> data,<span class=\"kw4\">int<\/span> numberOfPoints<span class=\"br0\">&#41;<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw4\">int<\/span> inTheCircleCount <span class=\"sy1\">=<\/span> <span class=\"nu0\">0<\/span><span class=\"sy4\">;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">for<\/span><span class=\"br0\">&#40;<\/span><span class=\"kw4\">int<\/span> i <span class=\"sy1\">=<\/span> <span class=\"nu0\">0<\/span><span class=\"sy4\">;<\/span>i<span class=\"sy1\">&lt;<\/span>numberOfPoints<span class=\"sy4\">;<\/span>i<span class=\"sy2\">++<\/span><span class=\"br0\">&#41;<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">if<\/span><span class=\"br0\">&#40;<\/span>isBelongToTheCircle<span class=\"br0\">&#40;<\/span>data<span class=\"br0\">&#91;<\/span>i<span class=\"br0\">&#93;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">==<\/span><span class=\"kw2\">true<\/span><span class=\"br0\">&#41;<\/span> inTheCircleCount<span class=\"sy2\">++<\/span><span class=\"sy4\">;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw4\">double<\/span> result <span class=\"sy1\">=<\/span> calculateRatio<span class=\"br0\">&#40;<\/span>inTheCircleCount,numberOfPoints<span class=\"br0\">&#41;<\/span><span class=\"sy4\">;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">return<\/span> result<span class=\"sy4\">;<\/span><br \/>\n<span class=\"br0\">&#125;<\/span><\/div><\/td><\/tr><\/tbody><\/table><\/div>\n\n\n\n<p>Funkcja calculatePIAccuracy s\u0142u\u017cy do ustalenia ostatecznego wyniku. Jako argumenty przyjmujemy vector z punktami oraz liczb\u0119 punkt\u00f3w, kt\u00f3re chcemy wzi\u0105\u0107&nbsp;pod uwag\u0119 przy wyliczaniu liczby PI. <\/p>\n\n\n\n<p>Liczb\u0119 punkt\u00f3w znajduj\u0105cych si\u0119 wewn\u0105trz ko\u0142a obliczamy podobnie, jak w poprzednim zadaniu. Zmienna pomocnicza inTheCircleCount, p\u0119tla for (dlaczego nie range-based? Poniewa\u017c zadanie wymaga od nas przej\u015bcia okre\u015blonej cz\u0119\u015bci tablicy) i inkrementacja gdy warunek jest spe\u0142niony. Nast\u0119pnie korzystamy z funkcji calculateRatio, kt\u00f3ra odwala ca\u0142\u0105 brudn\u0105 robot\u0119.<\/p>\n\n\n<div class=\"codecolorer-container cpp default\" style=\"overflow:auto;white-space:nowrap;width:90%;\"><table cellspacing=\"0\" cellpadding=\"0\"><tbody><tr><td class=\"line-numbers\"><div>56<br \/>57<br \/>58<br \/>59<br \/>60<br \/>61<br \/>62<br \/>63<br \/>64<br \/><\/div><\/td><td><div class=\"cpp codecolorer\"><span class=\"kw4\">int<\/span> main<span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><br \/>\n<span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; vector<span class=\"sy1\">&lt;<\/span>Point<span class=\"sy1\">&gt;<\/span> data <span class=\"sy1\">=<\/span> loadPointsFromFile<span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;punkty.txt&quot;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy4\">;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw3\">cout<\/span><span class=\"sy1\">&lt;&lt;<\/span>std<span class=\"sy4\">::<\/span><span class=\"me2\">fixed<\/span><span class=\"sy4\">;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw3\">cout<\/span><span class=\"sy1\">&lt;&lt;<\/span>std<span class=\"sy4\">::<\/span><span class=\"me2\">setprecision<\/span><span class=\"br0\">&#40;<\/span><span class=\"nu0\">4<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">&lt;&lt;<\/span>calculatePIAccuracy<span class=\"br0\">&#40;<\/span>data,<span class=\"nu0\">1000<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">&lt;&lt;<\/span>endl<span class=\"sy4\">;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw3\">cout<\/span><span class=\"sy1\">&lt;&lt;<\/span>std<span class=\"sy4\">::<\/span><span class=\"me2\">setprecision<\/span><span class=\"br0\">&#40;<\/span><span class=\"nu0\">4<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">&lt;&lt;<\/span>calculatePIAccuracy<span class=\"br0\">&#40;<\/span>data,<span class=\"nu0\">5000<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">&lt;&lt;<\/span>endl<span class=\"sy4\">;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw3\">cout<\/span><span class=\"sy1\">&lt;&lt;<\/span>std<span class=\"sy4\">::<\/span><span class=\"me2\">setprecision<\/span><span class=\"br0\">&#40;<\/span><span class=\"nu0\">4<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">&lt;&lt;<\/span>calculatePIAccuracy<span class=\"br0\">&#40;<\/span>data,<span class=\"nu0\">10000<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">&lt;&lt;<\/span>endl<span class=\"sy4\">;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">return<\/span> <span class=\"nu0\">0<\/span><span class=\"sy4\">;<\/span><br \/>\n<span class=\"br0\">&#125;<\/span><\/div><\/td><\/tr><\/tbody><\/table><\/div>\n\n\n\n<p>Sp\u00f3jrzmy na funkcj\u0119&nbsp;main(). <\/p>\n\n\n\n<p>Mamy wy\u015bwietli\u0107 wynik z dok\u0142adno\u015bci\u0105 do czterech miejsc po przecinku. S\u0142u\u017cy do tego funkcja setPrecision. Jako argument przyjmuje ilo\u015b\u0107 miejsc po przecinku, kt\u00f3re chcemy wy\u015bwietli\u0107. U\u017cywamy na pocz\u0105tku fixed aby zmusi\u0107 strumie\u0144 do trzymania si\u0119 naszych zalece\u0144. <\/p>\n\n\n<span class=\"collapseomatic \" id=\"id6a84f738bda46\"  tabindex=\"0\" title=\"Kompletne rozwi\u0105zanie - zadanie 4.2\"    >Kompletne rozwi\u0105zanie - zadanie 4.2<\/span><div id=\"target-id6a84f738bda46\" class=\"collapseomatic_content \">\n<script src=\"https:\/\/gist.github.com\/karol221-10\/97d127c4e7d4c69feebb3d70b8f8e00d.js\"><\/script><br \/>\n<\/div>\n\n\n\n<h3 class=\"wp-block-heading\">Zadanie 4.3 (0-5)<\/h3>\n\n\n\n<p>B\u0142\u0105d bezwzgl\u0119dny przybli\u017conej warto\u015bci liczby pi, wyznaczonej z <em>n<\/em> punkt\u00f3w, definiujemy nast\u0119puj\u0105co: <\/p>\n\n\n\n<p><p class=\"ql-center-displayed-equation\" style=\"line-height: 23px;\"><span class=\"ql-right-eqno\"> &nbsp; <\/span><span class=\"ql-left-eqno\"> &nbsp; <\/span><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/quicklatex.com\/cache3\/38\/ql_0e177f8b224e6bf794192dd8a264e738_l3.png\" height=\"23\" width=\"130\" class=\"ql-img-displayed-equation quicklatex-auto-format\" alt=\"&#92;&#091;&#92;&#101;&#112;&#115;&#105;&#108;&#111;&#110;&#95;&#110;&#32;&#61;&#32;&#124;&#32;&#92;&#112;&#105;&#32;&#45;&#32;&#112;&#105;&#95;&#110;&#32;&#124;&#92;&#093;\" title=\"Rendered by QuickLaTeX.com\"\/><\/p><br><\/p>\n\n\n\n<p>Pierwsza zmienna to warto\u015b\u0107 liczby pi b\u0119d\u0105ca wynikiem standardowej funkcji z narz\u0119dzia informatycznego, z kt\u00f3rego korzystasz. Druga natomiast &#8211; przybli\u017cona warto\u015b\u0107 liczby pi wyznaczona z n kolejnych punkt\u00f3w, poczynaj\u0105c od pierwszego punktu z pliku<a href=\"https:\/\/www.kompikownia.pl\/wp-content\/uploads\/2019\/02\/punkty.txt\"> punkty.txt<\/a><\/p>\n\n\n\n<p>Oblicz b\u0142\u0105d bezwzgl\u0119dny dla n=1,2,3&#8230; 1700. Na podstawie powy\u017cszego zestawienia utw\u00f3rz wykres liniowy ilustruj\u0105cy zmiany dok\u0142adno\u015bci wyznaczanej liczby pi. Zadbaj o czytelno\u015b\u0107 wykresu. Warto\u015bci dla n=1000 i n=1700 (zaokr\u0105glone do czterech liczb do przecinku) zapisz do pliku wyniki_4.txt<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Rozwi\u0105zanie:<\/h4>\n\n\n\n<p>Mamy utworzy\u0107 wykres liniowy &#8230; Powinno ci w g\u0142owie za\u015bwita\u0107, \u017ce sam C++ do tego nie wystarczy &#8230; Ale po kolei. <\/p>\n\n\n\n<p>Najpierw wyznaczmy b\u0142\u0105d bezwzgl\u0119dny dla n=1,2,3 &#8230; 1700. <\/p>\n\n\n<div class=\"codecolorer-container cpp default\" style=\"overflow:auto;white-space:nowrap;width:90%;\"><table cellspacing=\"0\" cellpadding=\"0\"><tbody><tr><td class=\"line-numbers\"><div>56<br \/>57<br \/>58<br \/><\/div><\/td><td><div class=\"cpp codecolorer\"><span class=\"kw4\">double<\/span> calculateAbsoluteError<span class=\"br0\">&#40;<\/span><span class=\"kw4\">double<\/span> pi<span class=\"br0\">&#41;<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">return<\/span> <span class=\"kw3\">fabs<\/span><span class=\"br0\">&#40;<\/span>M_PI<span class=\"sy2\">-<\/span>pi<span class=\"br0\">&#41;<\/span><span class=\"sy4\">;<\/span><br \/>\n<span class=\"br0\">&#125;<\/span><\/div><\/td><\/tr><\/tbody><\/table><\/div>\n\n\n\n<p>Obliczenie b\u0142\u0119du bezwzgl\u0119dnego to po prostu podstawienie do wzoru. Nic szczeg\u00f3lnego. Zmienna pi zawiera warto\u015b\u0107&nbsp;wyliczon\u0105 przez nasz program. Natomiast M_PI to sta\u0142a z biblioteki cmath, zawieraj\u0105ca dok\u0142adn\u0105 warto\u015b\u0107 liczby PI. U\u017cywamy funkcji fabs, gdy\u017c operujemy na liczbach zmiennoprzecinkowych.<\/p>\n\n\n<div class=\"codecolorer-container cpp default\" style=\"overflow:auto;white-space:nowrap;width:90%;\"><table cellspacing=\"0\" cellpadding=\"0\"><tbody><tr><td class=\"line-numbers\"><div>60<br \/>61<br \/>62<br \/>63<br \/>64<br \/>65<br \/>66<br \/>67<br \/>68<br \/>69<br \/>70<br \/>71<br \/>72<br \/>73<br \/>74<br \/>75<br \/><\/div><\/td><td><div class=\"cpp codecolorer\"><span class=\"kw4\">void<\/span> writeAbsoluteErrorsToFile<span class=\"br0\">&#40;<\/span>string filename,string filename2,vector<span class=\"sy1\">&lt;<\/span>Point<span class=\"sy1\">&gt;<\/span> <span class=\"sy3\">&amp;<\/span>data<span class=\"br0\">&#41;<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; ofstream file<span class=\"sy4\">;<\/span><br \/>\n&nbsp; &nbsp; ofstream file2<span class=\"sy4\">;<\/span><br \/>\n&nbsp; &nbsp; file.<span class=\"me1\">open<\/span><span class=\"br0\">&#40;<\/span>filename<span class=\"br0\">&#41;<\/span><span class=\"sy4\">;<\/span><br \/>\n&nbsp; &nbsp; file2.<span class=\"me1\">open<\/span><span class=\"br0\">&#40;<\/span>filename2<span class=\"br0\">&#41;<\/span><span class=\"sy4\">;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">if<\/span><span class=\"br0\">&#40;<\/span>file.<span class=\"me1\">is_open<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">==<\/span><span class=\"kw2\">false<\/span> <span class=\"sy3\">||<\/span> file2.<span class=\"me1\">is_open<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">==<\/span><span class=\"kw2\">false<\/span><span class=\"br0\">&#41;<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw3\">cout<\/span><span class=\"sy1\">&lt;&lt;<\/span><span class=\"st0\">&quot;Nie uda\u0142o si\u0119 otworzy\u0107 pliku&quot;<\/span><span class=\"sy1\">&lt;&lt;<\/span>endl<span class=\"sy4\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">return<\/span><span class=\"sy4\">;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><br \/>\n&nbsp; &nbsp; file<span class=\"sy1\">&lt;&lt;<\/span>std<span class=\"sy4\">::<\/span><span class=\"me2\">fixed<\/span><span class=\"sy1\">&lt;&lt;<\/span>std<span class=\"sy4\">::<\/span><span class=\"me2\">setprecision<\/span><span class=\"br0\">&#40;<\/span><span class=\"nu0\">4<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy4\">;<\/span><br \/>\n&nbsp; &nbsp; file2<span class=\"sy1\">&lt;&lt;<\/span>std<span class=\"sy4\">::<\/span><span class=\"me2\">fixed<\/span><span class=\"sy1\">&lt;&lt;<\/span>std<span class=\"sy4\">::<\/span><span class=\"me2\">setprecision<\/span><span class=\"br0\">&#40;<\/span><span class=\"nu0\">4<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy4\">;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">for<\/span><span class=\"br0\">&#40;<\/span><span class=\"kw4\">int<\/span> i <span class=\"sy1\">=<\/span> <span class=\"nu0\">1<\/span><span class=\"sy4\">;<\/span>i<span class=\"sy1\">&lt;=<\/span><span class=\"nu0\">1700<\/span><span class=\"sy4\">;<\/span>i<span class=\"sy2\">++<\/span><span class=\"br0\">&#41;<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; file<span class=\"sy1\">&lt;&lt;<\/span>calculateAbsoluteError<span class=\"br0\">&#40;<\/span>calculatePIAccuracy<span class=\"br0\">&#40;<\/span>data,i<span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">&lt;&lt;<\/span>endl<span class=\"sy4\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">if<\/span><span class=\"br0\">&#40;<\/span>i<span class=\"sy1\">==<\/span><span class=\"nu0\">1000<\/span> <span class=\"sy3\">||<\/span> i<span class=\"sy1\">==<\/span><span class=\"nu0\">1700<\/span><span class=\"br0\">&#41;<\/span> file2<span class=\"sy1\">&lt;&lt;<\/span>calculateAbsoluteError<span class=\"br0\">&#40;<\/span>calculatePIAccuracy<span class=\"br0\">&#40;<\/span>data,i<span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">&lt;&lt;<\/span>endl<span class=\"sy4\">;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><br \/>\n<span class=\"br0\">&#125;<\/span><\/div><\/td><\/tr><\/tbody><\/table><\/div>\n\n\n\n<p>Funkcja przedstawiona powy\u017cej zapisuje wymagane przez polecenie informacje do pliku. Mo\u017cesz si\u0119 zastanowi\u0107, po co nam dwa pliki? W jednym z nich (filename) zapisywane s\u0105 wszystkie wygenerowane dok\u0142adno\u015bci liczby pi, dla n z zakresu &lt;1,1700&gt;. Jego zawarto\u015b\u0107&nbsp;b\u0119dzie nam potrzebna w nast\u0119pnym kroku do wygenerowania wykresu. Drugi plik to spe\u0142nienie \u017c\u0105da\u0144 egzaminator\u00f3w z CKE. Zapisujemy w nim En1000 i En1700 z dok\u0142adno\u015bci\u0105 do 4 miejsc po przecinku. (Pami\u0119tajmy o przekopiowaniu tre\u015bci tego pliku do wyniki_4.txt, z odpowiedni\u0105 adnotacj\u0105 :)) <\/p>\n\n\n\n<p>Do wyliczenia b\u0142\u0119du bezwzgl\u0119dnego u\u017cywamy utworzonej przed chwil\u0105 funkcji calculateAbsoluteError. Jako argument przekazujemy funkcj\u0119 calculatePIAccuracy, kt\u00f3ra zwraca wyznaczon\u0105 warto\u015b\u0107&nbsp;liczby pi dla okre\u015blonej liczby punkt\u00f3w. <\/p>\n\n\n\n<p>Rozwi\u0105zanie dzia\u0142a prawid\u0142owo i nadaje si\u0119 na matur\u0119. Jako zadanie domowe pozostawiam ci optymalizacj\u0119. Przypomnij sobie jak dzia\u0142a funkcja calculatePIAccuracy. Przeanalizuj, jak du\u017co nadmiarowych oblicze\u0144 wykonujemy, u\u017cywaj\u0105c jej w ten spos\u00f3b. Zastan\u00f3w si\u0119, jak mo\u017cna j\u0105 poprawi\u0107 aby nie marnowa\u0107 tyle mocy obliczeniowej. <\/p>\n\n\n\n<p><strong>Tworzenie&nbsp;wykresu<\/strong><\/p>\n\n\n\n<p>Po skopiowaniu liczb z wygenerowanego pliku i wklejeniu ich do LibreOffice Calc uka\u017ce nam si\u0119 nast\u0119puj\u0105ce okienko:<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter\"><img loading=\"lazy\" decoding=\"async\" width=\"604\" height=\"616\" src=\"https:\/\/www.kompikownia.pl\/wp-content\/uploads\/2019\/02\/Screenshot_20190226_214611.png\" alt=\"\" class=\"wp-image-1059\"\/><\/figure><\/div>\n\n\n\n<p>Musimy wskaza\u0107, w jaki spos\u00f3b program ma obs\u0142u\u017cy\u0107 wklejone liczby. Nic nie musimy zmienia\u0107. (Excel r\u00f3wnie\u017c nie powinien mie\u0107 problem\u00f3w z interpretacj\u0105). <\/p>\n\n\n\n<p>Zauwa\u017cymy natomiast jeden problem. Arkusz kalkulacyjny interpretuje wklejone liczby jako tekst! Dzieje si\u0119 tak, gdy\u017c C++ przy zapisie do pliku u\u017cy\u0142 kropki do oddzielenia cz\u0119\u015bci u\u0142amkowej. Natomiast programy kalkulacyjne wol\u0105 przecinek. Mo\u017cemy prosto naprawi\u0107 t\u0119 niedogodno\u015b\u0107. Klikamy Edycja-&gt;Znajd\u017a i zamie\u0144. W okienku jako znajd\u017a wpisujemy kropeczk\u0119, a jako zamie\u0144 przecinek. Klikamy zamie\u0144 wszystkie. <\/p>\n\n\n\n<p>Nast\u0119pnym krokiem jest wygenerowanie wykresu. <\/p>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"783\" height=\"329\" src=\"https:\/\/www.kompikownia.pl\/wp-content\/uploads\/2019\/02\/Screenshot_20190226_214831.png\" alt=\"\" class=\"wp-image-1060\"\/><\/figure>\n\n\n\n<p>Najbardziej dostosowany do naszych potrzeb b\u0119dzie wykres liniowy. <\/p>\n\n\n\n<p>Na ekranie: Zakres danych nie ustawiamy nic. <\/p>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"785\" height=\"328\" src=\"https:\/\/www.kompikownia.pl\/wp-content\/uploads\/2019\/02\/Screenshot_20190226_220308.png\" alt=\"\" class=\"wp-image-1061\"\/><\/figure>\n\n\n\n<p>Kolejny etap to dodanie serii danych. Klikamy przycisk dodaj. Nast\u0119pnie ustawiamy zakres warto\u015bci Y. Klikamy przycisk z symbolem arkusza i plusa po prawej stronie pola edycyjnego. Wybieramy kom\u00f3rki, w kt\u00f3re wkleili\u015bmy liczby (w moim wypadku to kom\u00f3rki od A1 do A1700). Klikamy Utw\u00f3rz. <\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter\"><img loading=\"lazy\" decoding=\"async\" width=\"577\" height=\"348\" src=\"https:\/\/www.kompikownia.pl\/wp-content\/uploads\/2019\/02\/Screenshot_20190226_220602.png\" alt=\"\" class=\"wp-image-1062\"\/><\/figure><\/div>\n\n\n\n<p>Voila: Wykres gotowy \ud83d\ude42 Mo\u017cemy pobawi\u0107 si\u0119 w popraw\u0119 jego wygl\u0105du i dodanie opis\u00f3w, legend. Taki wynik naszej pracy powinien zosta\u0107 bezproblemowo zaakceptowany przez CKE. <\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Gratulacje \ud83d\ude42 <\/h3>\n\n\n\n<p>Czytaj\u0105c ten wpis, wykona\u0142e\u015b kolejny krok w procesie przygotowania si\u0119 do matury z informatyki. Niebawem uka\u017c\u0105 si\u0119 kolejne edukacyjne tre\u015bci. B\u0119dziemy rozwi\u0105zywali zadania z programowania z ubieg\u0142ych lat. Jak om\u00f3wimy wszystkie matury z informatyki pod wzgl\u0119dem programowania, zajmiemy si\u0119 kolejnymi rodzajami zada\u0144.<\/p>\n\n\n\n<p>Je\u015bli masz jakie\u015b uwagi, zauwa\u017cy\u0142e\u015b jaki\u015b b\u0142\u0105d, pisz \u015bmia\u0142o \ud83d\ude42 Jestem otwarty na konstruktywne opinie i komentarze. <\/p>\n\n\n\n<p>Tym czasem &#8211; do zobaczenia \ud83d\ude42 Zach\u0119cam do lektury pozosta\u0142ych wpis\u00f3w. Spis matur oraz om\u00f3wionych do tej pory zada\u0144 <a href=\"https:\/\/www.kompikownia.pl\/index.php\/matura-z-informatyki-spis\/\">znajduje si\u0119&nbsp;tutaj. <\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p><span class=\"rt-reading-time\" style=\"display: block;\"><span class=\"rt-label rt-prefix\">Czas czytania:<\/span> <span class=\"rt-time\">2<\/span> <span class=\"rt-label rt-postfix\">minut<\/span><\/span> Witajcie \ud83d\ude42 Mam nadziej\u0119, \u017ce przygotowujecie si\u0119 do matury, drodzy czytelnicy? Cofamy si\u0119 kolejny roczek do ty\u0142u. Bierzemy na warsztat zadanie &#8222;Liczba PI&#8221; znajduj\u0105ce si\u0119 na arkuszu maturalnym w roku &#8230;<\/p>\n","protected":false},"author":1,"featured_media":835,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"footnotes":""},"categories":[31],"tags":[53,58,56,54],"_links":{"self":[{"href":"https:\/\/www.kompikownia.pl\/index.php\/wp-json\/wp\/v2\/posts\/998"}],"collection":[{"href":"https:\/\/www.kompikownia.pl\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.kompikownia.pl\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.kompikownia.pl\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.kompikownia.pl\/index.php\/wp-json\/wp\/v2\/comments?post=998"}],"version-history":[{"count":78,"href":"https:\/\/www.kompikownia.pl\/index.php\/wp-json\/wp\/v2\/posts\/998\/revisions"}],"predecessor-version":[{"id":1086,"href":"https:\/\/www.kompikownia.pl\/index.php\/wp-json\/wp\/v2\/posts\/998\/revisions\/1086"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.kompikownia.pl\/index.php\/wp-json\/wp\/v2\/media\/835"}],"wp:attachment":[{"href":"https:\/\/www.kompikownia.pl\/index.php\/wp-json\/wp\/v2\/media?parent=998"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.kompikownia.pl\/index.php\/wp-json\/wp\/v2\/categories?post=998"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.kompikownia.pl\/index.php\/wp-json\/wp\/v2\/tags?post=998"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}