{"id":"informator-maturalny-informatyka-2015/zad/18","paper_id":"informator-maturalny-informatyka-2015","number":"18","points":null,"ptype":"open","subject":"informatyka","category":"informator-maturalny","year":2015,"month":null,"level":null,"text":"Zadanie 18. Telefony (0-11)\nFirma „Ciasteczko” wprowadziła na rynek nowy baton czekoladowy. Z tej okazji\nprzeprowadziła konkurs SMS-owy. Zadanie konkursowe polega na przesłaniu odpowiedzi\nna pytanie: „Czy smakuje Ci nasz nowy baton czekoladowy? Odpowiedz: Tak lub Nie.”\nWiele osób, licząc na zwiększenie szansy wygranej, wysyłało SMS-y wielokrotnie. W pliku\ntekstowym o nazwie telefony.txt znajduje się 2000 zarejestrowanych numerów telefonów\nwraz z wysłaną odpowiedzią. Każdy numer telefonu i udzielona odpowiedź umieszczona jest\nw jednym wierszu, informacje rozdzielone są pojedynczym znakiem odstępu.\nKorzystając z danych umieszczonych w pliku telefony.txt, wykonaj następujące\npolecenia.\nOdpowiedzi\ndo\nposzczególnych\npodpunktów\nzapisz\nw\npliku\nwyniki_konkursu.txt (poza wykresem do podpunktu a), a każdą z nich poprzedź\nliterą oznaczającą ten podpunkt.\na) Podaj, ile razy wysłano odpowiedź „Tak”, a ile razy odpowiedź „Nie”. Sporządź wykres\nprocentowy ilustrujący otrzymane wyniki. Pamiętaj o prawidłowym i czytelnym opisie\nwykresu.\nb) Numery telefonów należą do czterech grup numeracyjnych rozpoczynających się cyframi:\n5, 6, 7, 8. Ile numerów telefonów należy do każdej z grup? W swoim zestawieniu\nuwzględnij powtarzające się numery telefonów.\nc) Nagrodę I stopnia otrzymała osoba, w której numerze telefonu suma cyfr jest największa.\nPodaj numer telefonu oraz sumę cyfr numeru.\nd) Najdłuższym malejącym numerem telefonu nazywamy taki numer, którego początkowe\ncyfry tworzą najdłuższy malejący ciąg, tzn. kolejna jego cyfra, począwszy od drugiej, jest\nmniejsza od cyfry ją poprzedzającej, np. w numerze 654209192 pięć pierwszych cyfr\ntworzy malejący ciąg, zaś w numerze 865320542 sześć pierwszych cyfr tworzy malejący\nciąg. Do nagrody II stopnia wybrano te numery telefonów, których cyfry tworzą\nnajdłuższy malejący ciąg. Podaj numery telefonów, które otrzymały tą nagrodę.\ne) Firma postanowiła wręczyć nagrodę pocieszenia właścicielowi tego numeru, z którego\nwysłano najwięcej SMS-ów. Jaką największą liczbę SMS-ów wysłano z jednego numeru?\nDo oceny oddajesz plik(i) o nazwie ,\ntu wpisz nazwę(y) pliku(ów)\nzawierający(e)\nkomputerową(e)\nrealizację(e)\nTwoich\nobliczeń,\nplik\ntekstowy\nwyniki_konkursu.txt z odpowiedziami do punktów a-e (odpowiedź do każdego\npodpunktu powinna być poprzedzona jego nazwą) oraz plik ,\ntu wpisz nazwę pliku\nzawierający wykres do podpunktu a.\n48 Informator o egzaminie maturalnym z informatyki od roku szkolnego 2014/2015\nWymagania ogólne\nIII. Rozwiązywanie problemów i podejmowanie\ndecyzji z wykorzystaniem komputera, z zastosowaniem\npodejścia algorytmicznego.\nWymagania szczegółowe\n4. Opracowywanie informacji za pomocą komputera,\nw tym: rysunków, tekstów, danych liczbowych,\nanimacji, prezentacji multimedialnych i filmów.\nZdający:\n4) wykorzystuje arkusz kalkulacyjny do obrazowania\nzależności funkcyjnych i do zapisywania algorytmów.\n5. Rozwiązywanie problemów i podejmowanie decyzji\nz wykorzystaniem komputera, stosowanie podejścia\nalgorytmicznego.\nZdający:\n1) analizuje, modeluje i rozwiązuje sytuacje\nproblemowe z różnych dziedzin;\n2) stosuje podejście algorytmiczne do rozwiązywania\nproblemu;\n21) przeprowadza komputerową realizację algorytmu\ni rozwiązania problemu.\nSchemat punktowania\nPodpunkt\nCzynność\nLiczba\npunktów\nza\npodpunkt\nLiczba\npunktów\nza\nzadanie\na\nZa podanie poprawnej liczby odpowiedzi \"Tak\" oraz\npoprawnej liczby odpowiedzi \"Nie\" - 1 punkt.\nZa poprawny wykres - 2 punkty, w tym:\n\npoprawny dobór danych i typ wykresu - 1 punkt,\n\nczytelny opis wykresu - 1 punkt.\n3\n11\nb\nZa podanie poprawnej liczby numerów telefonów dla\nczterech grup - 2 punkty.\nZa podanie poprawnej liczby numerów telefonów dla\nco najmniej dwóch grup - 1 punkt.\n2\nc\nZa podanie poprawnego numeru telefonu - 1 punkt.\nZa podanie poprawnej sumy cyfr dla poprawnego\nnumeru - 1 punkt.\n2\nd\nZa podanie poprawnych trzech numerów - 3 punkty,\npo 1 punkcie za każdy poprawny numer.\n3\ne\nZa podanie poprawnej liczby - 1 punkt.\n1\nPrzykładowe zadania z rozwiązaniami 49\nZadanie 18. Telefony (0-11) - rozwiązanie\nPliki zawierające rozwiązania znajdują się w folderze TELEFONY.\nKomentarz\nWiększość podpunktów zadania sprowadza się do zliczania wierszy spełniających określone\nkryteria. Naturalnym narzędziem do rozwiązania takiego zadania jest język programowania\nbądź arkusz kalkulacyjny. Ponieważ podpunkty b, c oraz d wymagają dostępu nie tylko do\ncałych pól naszej tabeli (czyli numer telefonu i odpowiedź), ale do poszczególnych cyfr\nnumeru, wygodniejszym narzędziem wydaje się język programowania. Niemniej rozwiązanie\nzadania jest również możliwe w oparciu o arkusz kalkulacyjny. Poniżej omówimy dwa różne\nrozwiązania: w pierwszym napiszemy program w języku C, a w drugim korzystać będziemy\nz funkcji i innych narzędzi dostępnych w MS Excel.\nRozwiązanie 1: język programowania.\nKorzystając z dostępnych operacji wejścia/wyjścia z wykorzystaniem plików (lub strumieni),\nmożemy zapisać tabelę z pliku w tablicach. W naszym rozwiązaniu numery telefonów\nzapisujemy jako napisy w tablicy num, natomiast odpowiadające im odpowiedzi\n(„Tak”/”Nie”) reprezentujemy w tablicy liczb całkowitych odp, gdzie 1 odpowiada wartości\n„Tak” a 0 wartości „Nie”:\n#define n 2000 // liczba wierszy\ntypedef char napis9[10]; // typ dla napisow o długości 9\nint odp[n]; // odp[i]=1/0 gdy odpowiedz „Tak”/”Nie” w i-tym\nwierszu\nnapis9 num[n]; // num[i] to numer telefonu w i-tym wierszu\nPodpunkt a\nPrzy powyższej reprezentacji danych punkt a) sprowadza się do policzenia sumy\nodp[0]+odp[1]+…+odp[1999].\nPodpunkt b\nAby wyznaczyć liczbę numerów zaczynających się od cyfry i dla i=5, 6, 7, 8, utworzyliśmy\ntablicę liczb całkowitych grupa, gdzie grupa[i] ma spełniać rolę licznika dla numerów\nzaczynających się od i. Przeglądając w pętli wartości num[j][0] dla j=0, 1,…, 1999,\nuzupełniliśmy odpowiednio wartości liczników. Aby zamienić znak reprezentowany przez\nnum[j][0] na odpowiadającą mu cyfrę, użyliśmy podstawienia:\ncyf=num[j][0]-'0';\nPodpunkt c\nUtworzyliśmy osobną funkcję sumaCyfr, która w pętli zlicza sumę cyfr liczby podanej jako\nciąg cyfr w tablicy typu napis9. Z użyciem tej funkcji punkt c) sprowadzony został do\nklasycznego problemu wyznaczania największej wartości w ciągu.\nPodpunkt d\nW podpunkcie d również zastosowaliśmy modularyzację, wydzielając osobno funkcję\nmalejacy, której wynikiem jest liczba elementów najdłuższego ciągu malejącego,\n50 Informator o egzaminie maturalnym z informatyki od roku szkolnego 2014/2015\nzłożonego z początkowych cyfr ciągu podanego na wejściu. Używając tej funkcji:\n najpierw wyznaczyliśmy maxD, największą długość malejącego ciągu złożonego\nz początkowych cyfr numeru telefonu,\n następnie przejrzeliśmy raz jeszcze wszystkie numery telefonów, wypisując jako wynik te\nnumery, których początkowe maxD cyfr tworzy ciąg malejący.\nPodpunkt e\nPolecenie w podpunkcie e) jest o tyle trudne, że zliczanie wystąpień poszczególnych numerów\nwymaga wielokrotnego przeglądania listy telefonów. W naszym rozwiązaniu zliczamy\nwystąpienia kolejnych numerów, stosując dwie zagnieżdżone pętle. Zastosowaliśmy jednak\ndrobną optymalizację. Wspomogliśmy się dodatkową tablicą liczony, ustawiając\nliczony[i] na 1 tylko wtedy, gdy i-ty numer jest równy numerowi występującemu\nwcześniej. Mogliśmy wówczas pominąć zliczanie tych elementów, dla których wartość\nw tablicy zliczony była równa 1.\nMożna sobie oczywiście wyobrazić inne rozwiązania tego podpunktu. Gdyby numery\ntelefonów były uporządkowane w pliku wejściowym, mielibyśmy pewność, że wszystkie\nwystąpienia danego numeru pojawiają się „obok siebie” (w kolejnych wierszach). A to\nz kolei ułatwiłoby znacznie zliczanie wystąpień poszczególnych numerów. Można zatem\nzacząć od sortowania ciągu numerów lub np. zastosować funkcje sortujące dostępne\nz biblioteki algorithm, dostępnej w większości kompilatorów języka C. W naszym rozwiązaniu\nprzyjęliśmy jednak, że samodzielna implementacja sortowania byłaby utrudnieniem sobie\nzadania, natomiast wykorzystanie bibliotecznych funkcji sortujących pozostawiamy jako\nćwiczenie dla czytelnika (wygodniej przy tym byłoby reprezentować numery jako tablicę\nliczb, nie napisów).\nRozwiązanie 2: arkusz kalkulacyjny.\nOmówimy teraz rozwiązanie utworzone w oparciu o MS Excel. Po zaimportowaniu danych\nz pliku tekstowego przyjmujemy, że numery telefonów i odpowiedzi „Tak”/”Nie” znajdują się\nodpowiednio w kolumnach A i B arkusza, w wierszach 2, 3, …, 2001 (dodajemy nowy wiersz\nna początku dla opisu kolumn). Rozwiązania punktów a), b) i e) możemy wówczas uzyskać\nz pomocą funkcji LICZ.JEŻELI.\nPodpunkt a\nAby zliczyć liczbę odpowiedzi „Tak”, dla funkcji LICZ.JEŻELI wskazujemy obszar\nB2:B2001 oraz jako kryterium wyszukiwania podajemy „Tak”:\n=LICZ.JEŻELI(B2:B2001;”Tak”)\nPodpunkty b - d\nRozwiązanie dla podpunktów b), c) i d) zadania wymaga wydzielenia cyfr kolejnych\nnumerów telefonów. Można do tego wykorzystać bardziej ogólną funkcję\nFRAGMENT.TEKSTU, która pozwala „wyciąć” z podanego tekstu fragment o wskazanej\ndługości i od podanej pozycji. Na przykład wartością formuły\n= FRAGMENT.TEKSTU(A2;2;1) będzie fragment tekstu z komórki A2, zaczynający się\nod drugiej pozycji, o długości jeden (czyli drugi znak z tekstu w A2). Co więcej, jeśli\nw komórce A2 znajduje się liczba, funkcja „automatycznie” przekształci ją na tekst przed\nwydzieleniem odpowiedniego fragmentu. W naszym rozwiązaniu „zautomatyzowaliśmy”\nproces wydzielania wszystkich 9 cyfr z kolejnych numerów w następujący sposób:\nPrzykładowe zadania z rozwiązaniami 51\n w komórkach D1…L1 umieszczone zostały cyfry 1, 2,…,9,\n w komórce D2 wpisana została formuła: = FRAGMENT.TEKSTU($A2;D$1;1),\n skopiowanie tej formuły do całego bloku D2:L1999 pozwoliło wydzielić wszystkie cyfry\nz każdego numeru.\nZwróćmy uwagę na sposób adresowania w formule z komórki D2:\n adres $A2 gwarantuje, że po skopiowaniu formuły nie zmieni się kolumna, z której\npobieramy tekst,\n adres D$1 z kolei gwarantuje, że numer pozycji, od której zaczyna się wycinany fragment\ntekstu, zawsze pobierany będzie z pierwszego wiersza.\nW rezultacie kolejne cyfry liczb z kolumny A umieścimy w kolumnach D…L. Nie możemy\njednak wykonywać na nich operacji arytmetycznych, ponieważ wynikiem funkcji\nFRAGMENT.TEKSTU jest napis, nie liczba. Zastosujemy zatem funkcję WARTOŚĆ, która\n„zamienia” tekst na liczbę. Wzorcowa formuła w komórce D2 będzie więc wyglądać\nnastępująco:\n= WARTOŚĆ(FRAGMENT.TEKSTU($A2;D$1;1))\nPodpunkt b\nAby zliczyć liczbę numerów telefonów zaczynających się od wskazanej cyfry, wykorzystamy\nfakt, że w kolumnie D wydzieliliśmy pierwsze cyfry numerów telefonów. Aby uzyskać liczbę\nnumerów zaczynających się od 5, możemy użyć formuły: =LICZ.JEŻELI(A2:A2001;5).\nAby uniknąć kilkukrotnego „ręcznego” wpisywania formuły wg powyższego schematu,\nmożemy zastosować adresowanie pośrednie i wskazać jako kryterium komórki, w których\nkolejno umieścimy liczby 5, 6, 7 i 8. Poniżej zamieszczamy przykładowe rozwiązanie\nzapisane w komórkach A9 B12 drugiego arkusza.\nFormuły w komórkach odpowiadających wartościom 6, 7, 8 i 9 możemy otrzymać, kopiując\nformułę wpisaną dla cyfry 5.\nPodpunkt c\nAby rozwiązać podpunkt c, wystarczy zsumować wartości z kolumn D…L w każdym wierszu,\nwyznaczyć największą z tych sum i wyszukać numer odpowiadający tej sumie.\n52 Informator o egzaminie maturalnym z informatyki od roku szkolnego 2014/2015\nPodpunkt d\nW podpunkcie d) zapiszemy przy pomocy formuł następujący algorytm wyznaczania długości\nnajdłuższego ciągu malejącego, będącego początkiem wskazanego ciągu c1, c2,…,ck:\nKrok 1:\nJeśli c1c2 to r2 1\nw przeciwnym przypadku r2 0\nKrok 2:\nPowtarzaj dla i=3,4,…,k:\nJeśli (ci - 1c i) oraz (ri - 1=1) to ri 1\nw przeciwnym przypadku ri 0\nKrok 3:\nZwróć (1 + r2 + r3 + … + rk )\nW naszym przypadku wartość k z powyższego algorytmu to 9, a pierwszy ciąg znajduje się\nw komórkach D2, E2, …, L2. Formuły wyznaczające wartości r2,…,r9 w komórkach\nN2,…,U2 realizujące powyższy algorytm mogą wyglądać następująco:\n unikalna formuła w komórce N2:\n=JEŻELI(D2>E2;1;0)\n formuła w komórce O2, którą kopiujemy do P2,…,U2:\n=JEŻELI(N2=1;JEŻELI(E2>F2;1;0);0)\nNastępnie możemy:\n skopiować powyższe formuły do kolejnych wierszy arkusza,\n w kolumnie V każdego wiersza wyliczyć wartość jeden plus największa z wartości r2, r3,\n…, r9 (czyli maksimum wartości z kolumn N, M,…,U tego wiersza),\n wybrać największą wartość z kolumny V,\n wyszukać numery telefonów z wierszy, w których pojawia się ta największa wartość\nw kolumnie V.\nPodpunkt e\nPo raz kolejny zastosujemy funkcję LICZ.JEŻELI, umiejętnie wykorzystując też\nadresowanie pośrednie. Jeśli w komórce C2 arkusza z danymi wpiszemy formułę\n=LICZ.JEŻELI($A$2:$A$2001;A2), wówczas uzyskamy nie tylko liczbę wystąpień\npierwszego numeru (znajdującego się w komórce A2) w bloku A2:A2001, ale po\nskopiowaniu tej formuły do kolejnych komórek kolumny C wyznaczymy liczby wystąpień\nkolejnych numerów.\nPodpunkty a) i e) zadania nie wymagają wydzielania elementów (cyfr) numerów telefonów,\nmożna je więc zaliczyć do klasycznych ćwiczeń z zakresu analizowania i filtrowania danych,\nktóre bez większych trudności można zrealizować w wybranym arkuszu kalkulacyjnym.\nW pozostałych punktach zadania uzyskanie wyniku zasadniczo wymaga dostępu do\nposzczególnych cyfr numerów telefonów. Co prawda wyniki punktu b) zależą jedynie od\npierwszych cyfr a zatem możliwe jest rozwiązanie w oparciu o porównania całych numerów\n(np. numery zaczynające się od 5 są nie mniejsze niż 500000000 i nie większe niż\n599999999), jednak w punktach c) i d) wyniki zależą od wszystkich cyfr w numerach\ntelefonów. Dlatego rozwiązanie z wykorzystaniem języka programowania wydaje się bardziej\nnaturalne. Zaprezentowaliśmy jednak również rozwiązanie w arkuszu kalkulacyjnym, aby\nzademonstrować, że stosując odpowiednie formuły można „implementować” proste\nalgorytmy, gdzie komórki arkusza służą do przechowywania wartości zmiennych w kolejnych\netapach obliczeń. Niemniej szczególnie w podpunkcie d) (gdzie konieczne było ustalanie\nnajdłuższego malejącego ciągu początkowych cyfr numeru), nasze rozwiązanie wymagało\nniestandardowych i dość nienaturalnych pomysłów.\nPrzykładowe zadania z rozwiązaniami 53\nW zaprezentowanym rozwiązaniu programistycznym numery telefonów reprezentowane są\njako ciągi znaków, co ułatwia dostęp do poszczególnych cyfr. Warto wspomnieć,\nże reprezentacja numerów w postaci liczb również daje wygodny dostęp do cyfr. Zauważmy,\nże dla zmiennej n typu int wartość n%10 jest równa ostatniej jej cyfrze, natomiast n/10\nto wartość uzyskana po usunięciu z zapisu dziesiętnego n ostatniej cyfry (pamiętajmy,\nże w języku C wartość n/10 dla zmiennej n typu int jest równa wynikowi dzielenia\ncałkowitego n przez 10). Taki sposób dostępu do cyfr numeru jest jednak niewygodny\nw podpunkcie d) zadania, gdzie konieczne jest „przeglądanie” kolejnych cyfr w kolejności\nod pierwszej (najbardziej znaczącej), a nie od ostatniej (najmniej znaczącej).\nNa końcu należy podkreślić, że zadanie nie narzuca żadnego sposobu rozwiązania, więc nic\nnie stoi nic na przeszkodzie, aby odpowiednio dobrać takie narzędzia informatyczne do\nrozwiązania zadań w kolejnych podpunktach, aby część z nich rozwiązać przy pomocy języka\nprogramowania, a część przy pomocy arkusza kalkulacyjnego.\n54 Informator o egzaminie maturalnym z informatyki od roku szkolnego 2014/2015","answer":null,"answer_text":null,"solution":null,"image":"img/informator-maturalny-informatyka-2015/zad-18.webp","solution_image":null,"topics":null,"page_from":47,"source":"ocr","answer_source":null,"answer_text_source":null,"solution_source":null,"text_source":"ocr","source_label":"Informatyka · Informator maturalny · 2015","subject_label":"Informatyka","category_label":"Informator maturalny","text_html":"<p>Zadanie 18. Telefony (0-11)<br>Firma „Ciasteczko” wprowadziła na rynek nowy baton czekoladowy. Z tej okazji<br>przeprowadziła konkurs SMS-owy. Zadanie konkursowe polega na przesłaniu odpowiedzi<br>na pytanie: „Czy smakuje Ci nasz nowy baton czekoladowy? Odpowiedz: Tak lub Nie.”<br>Wiele osób, licząc na zwiększenie szansy wygranej, wysyłało SMS-y wielokrotnie. W pliku<br>tekstowym o nazwie telefony.txt znajduje się 2000 zarejestrowanych numerów telefonów<br>wraz z wysłaną odpowiedzią. Każdy numer telefonu i udzielona odpowiedź umieszczona jest<br>w jednym wierszu, informacje rozdzielone są pojedynczym znakiem odstępu.<br>Korzystając z danych umieszczonych w pliku telefony.txt, wykonaj następujące<br>polecenia.<br>Odpowiedzi<br>do<br>poszczególnych<br>podpunktów<br>zapisz<br>w<br>pliku<br>wyniki_konkursu.txt (poza wykresem do podpunktu a), a każdą z nich poprzedź<br>literą oznaczającą ten podpunkt.<br>a) Podaj, ile razy wysłano odpowiedź „Tak”, a ile razy odpowiedź „Nie”. Sporządź wykres<br>procentowy ilustrujący otrzymane wyniki. Pamiętaj o prawidłowym i czytelnym opisie<br>wykresu.<br>b) Numery telefonów należą do czterech grup numeracyjnych rozpoczynających się cyframi:<br>5, 6, 7, 8. Ile numerów telefonów należy do każdej z grup? W swoim zestawieniu<br>uwzględnij powtarzające się numery telefonów.<br>c) Nagrodę I stopnia otrzymała osoba, w której numerze telefonu suma cyfr jest największa.<br>Podaj numer telefonu oraz sumę cyfr numeru.<br>d) Najdłuższym malejącym numerem telefonu nazywamy taki numer, którego początkowe<br>cyfry tworzą najdłuższy malejący ciąg, tzn. kolejna jego cyfra, począwszy od drugiej, jest<br>mniejsza od cyfry ją poprzedzającej, np. w numerze 654209192 pięć pierwszych cyfr<br>tworzy malejący ciąg, zaś w numerze 865320542 sześć pierwszych cyfr tworzy malejący<br>ciąg. Do nagrody II stopnia wybrano te numery telefonów, których cyfry tworzą<br>najdłuższy malejący ciąg. Podaj numery telefonów, które otrzymały tą nagrodę.<br>e) Firma postanowiła wręczyć nagrodę pocieszenia właścicielowi tego numeru, z którego<br>wysłano najwięcej SMS-ów. Jaką największą liczbę SMS-ów wysłano z jednego numeru?<br>Do oceny oddajesz plik(i) o nazwie ,<br>tu wpisz nazwę(y) pliku(ów)<br>zawierający(e)<br>komputerową(e)<br>realizację(e)<br>Twoich<br>obliczeń,<br>plik<br>tekstowy<br>wyniki_konkursu.txt z odpowiedziami do punktów a-e (odpowiedź do każdego<br>podpunktu powinna być poprzedzona jego nazwą) oraz plik ,<br>tu wpisz nazwę pliku<br>zawierający wykres do podpunktu a.<br>48 Informator o egzaminie maturalnym z informatyki od roku szkolnego 2014/2015<br>Wymagania ogólne<br>III. Rozwiązywanie problemów i podejmowanie<br>decyzji z wykorzystaniem komputera, z zastosowaniem<br>podejścia algorytmicznego.<br>Wymagania szczegółowe</p>\n<ol><li>Opracowywanie informacji za pomocą komputera,</li></ol>\n<p>w tym: rysunków, tekstów, danych liczbowych,<br>animacji, prezentacji multimedialnych i filmów.<br>Zdający:</p>\n<ol><li>wykorzystuje arkusz kalkulacyjny do obrazowania</li></ol>\n<p>zależności funkcyjnych i do zapisywania algorytmów.</p>\n<ol><li>Rozwiązywanie problemów i podejmowanie decyzji</li></ol>\n<p>z wykorzystaniem komputera, stosowanie podejścia<br>algorytmicznego.<br>Zdający:</p>\n<ol><li>analizuje, modeluje i rozwiązuje sytuacje</li></ol>\n<p>problemowe z różnych dziedzin;</p>\n<ol><li>stosuje podejście algorytmiczne do rozwiązywania</li></ol>\n<p>problemu;</p>\n<ol><li>przeprowadza komputerową realizację algorytmu</li></ol>\n<p>i rozwiązania problemu.<br>Schemat punktowania<br>Podpunkt<br>Czynność<br>Liczba<br>punktów<br>za<br>podpunkt<br>Liczba<br>punktów<br>za<br>zadanie<br>a<br>Za podanie poprawnej liczby odpowiedzi &quot;Tak&quot; oraz<br>poprawnej liczby odpowiedzi &quot;Nie&quot; - 1 punkt.<br>Za poprawny wykres - 2 punkty, w tym:<br><br>poprawny dobór danych i typ wykresu - 1 punkt,<br><br>czytelny opis wykresu - 1 punkt.<br>3<br>11<br>b<br>Za podanie poprawnej liczby numerów telefonów dla<br>czterech grup - 2 punkty.<br>Za podanie poprawnej liczby numerów telefonów dla<br>co najmniej dwóch grup - 1 punkt.<br>2<br>c<br>Za podanie poprawnego numeru telefonu - 1 punkt.<br>Za podanie poprawnej sumy cyfr dla poprawnego<br>numeru - 1 punkt.<br>2<br>d<br>Za podanie poprawnych trzech numerów - 3 punkty,<br>po 1 punkcie za każdy poprawny numer.<br>3<br>e<br>Za podanie poprawnej liczby - 1 punkt.<br>1<br>Przykładowe zadania z rozwiązaniami 49<br>Zadanie 18. Telefony (0-11) - rozwiązanie<br>Pliki zawierające rozwiązania znajdują się w folderze TELEFONY.<br>Komentarz<br>Większość podpunktów zadania sprowadza się do zliczania wierszy spełniających określone<br>kryteria. Naturalnym narzędziem do rozwiązania takiego zadania jest język programowania<br>bądź arkusz kalkulacyjny. Ponieważ podpunkty b, c oraz d wymagają dostępu nie tylko do<br>całych pól naszej tabeli (czyli numer telefonu i odpowiedź), ale do poszczególnych cyfr<br>numeru, wygodniejszym narzędziem wydaje się język programowania. Niemniej rozwiązanie<br>zadania jest również możliwe w oparciu o arkusz kalkulacyjny. Poniżej omówimy dwa różne<br>rozwiązania: w pierwszym napiszemy program w języku C, a w drugim korzystać będziemy<br>z funkcji i innych narzędzi dostępnych w MS Excel.<br>Rozwiązanie 1: język programowania.<br>Korzystając z dostępnych operacji wejścia/wyjścia z wykorzystaniem plików (lub strumieni),<br>możemy zapisać tabelę z pliku w tablicach. W naszym rozwiązaniu numery telefonów<br>zapisujemy jako napisy w tablicy num, natomiast odpowiadające im odpowiedzi<br>(„Tak”/”Nie”) reprezentujemy w tablicy liczb całkowitych odp, gdzie 1 odpowiada wartości<br>„Tak” a 0 wartości „Nie”:<br>#define n 2000 // liczba wierszy<br>typedef char napis9[10]; // typ dla napisow o długości 9<br>int odp[n]; // odp[i]=1/0 gdy odpowiedz „Tak”/”Nie” w i-tym<br>wierszu<br>napis9 num[n]; // num[i] to numer telefonu w i-tym wierszu<br>Podpunkt a<br>Przy powyższej reprezentacji danych punkt a) sprowadza się do policzenia sumy<br>odp[0]+odp[1]+…+odp[1999].<br>Podpunkt b<br>Aby wyznaczyć liczbę numerów zaczynających się od cyfry i dla i=5, 6, 7, 8, utworzyliśmy<br>tablicę liczb całkowitych grupa, gdzie grupa[i] ma spełniać rolę licznika dla numerów<br>zaczynających się od i. Przeglądając w pętli wartości num[j][0] dla j=0, 1,…, 1999,<br>uzupełniliśmy odpowiednio wartości liczników. Aby zamienić znak reprezentowany przez<br>num[j][0] na odpowiadającą mu cyfrę, użyliśmy podstawienia:<br>cyf=num[j][0]-&#x27;0&#x27;;<br>Podpunkt c<br>Utworzyliśmy osobną funkcję sumaCyfr, która w pętli zlicza sumę cyfr liczby podanej jako<br>ciąg cyfr w tablicy typu napis9. Z użyciem tej funkcji punkt c) sprowadzony został do<br>klasycznego problemu wyznaczania największej wartości w ciągu.<br>Podpunkt d<br>W podpunkcie d również zastosowaliśmy modularyzację, wydzielając osobno funkcję<br>malejacy, której wynikiem jest liczba elementów najdłuższego ciągu malejącego,<br>50 Informator o egzaminie maturalnym z informatyki od roku szkolnego 2014/2015<br>złożonego z początkowych cyfr ciągu podanego na wejściu. Używając tej funkcji:<br> najpierw wyznaczyliśmy maxD, największą długość malejącego ciągu złożonego<br>z początkowych cyfr numeru telefonu,<br> następnie przejrzeliśmy raz jeszcze wszystkie numery telefonów, wypisując jako wynik te<br>numery, których początkowe maxD cyfr tworzy ciąg malejący.<br>Podpunkt e<br>Polecenie w podpunkcie e) jest o tyle trudne, że zliczanie wystąpień poszczególnych numerów<br>wymaga wielokrotnego przeglądania listy telefonów. W naszym rozwiązaniu zliczamy<br>wystąpienia kolejnych numerów, stosując dwie zagnieżdżone pętle. Zastosowaliśmy jednak<br>drobną optymalizację. Wspomogliśmy się dodatkową tablicą liczony, ustawiając<br>liczony[i] na 1 tylko wtedy, gdy i-ty numer jest równy numerowi występującemu<br>wcześniej. Mogliśmy wówczas pominąć zliczanie tych elementów, dla których wartość<br>w tablicy zliczony była równa 1.<br>Można sobie oczywiście wyobrazić inne rozwiązania tego podpunktu. Gdyby numery<br>telefonów były uporządkowane w pliku wejściowym, mielibyśmy pewność, że wszystkie<br>wystąpienia danego numeru pojawiają się „obok siebie” (w kolejnych wierszach). A to<br>z kolei ułatwiłoby znacznie zliczanie wystąpień poszczególnych numerów. Można zatem<br>zacząć od sortowania ciągu numerów lub np. zastosować funkcje sortujące dostępne<br>z biblioteki algorithm, dostępnej w większości kompilatorów języka C. W naszym rozwiązaniu<br>przyjęliśmy jednak, że samodzielna implementacja sortowania byłaby utrudnieniem sobie<br>zadania, natomiast wykorzystanie bibliotecznych funkcji sortujących pozostawiamy jako<br>ćwiczenie dla czytelnika (wygodniej przy tym byłoby reprezentować numery jako tablicę<br>liczb, nie napisów).<br>Rozwiązanie 2: arkusz kalkulacyjny.<br>Omówimy teraz rozwiązanie utworzone w oparciu o MS Excel. Po zaimportowaniu danych<br>z pliku tekstowego przyjmujemy, że numery telefonów i odpowiedzi „Tak”/”Nie” znajdują się<br>odpowiednio w kolumnach A i B arkusza, w wierszach 2, 3, …, 2001 (dodajemy nowy wiersz<br>na początku dla opisu kolumn). Rozwiązania punktów a), b) i e) możemy wówczas uzyskać<br>z pomocą funkcji LICZ.JEŻELI.<br>Podpunkt a<br>Aby zliczyć liczbę odpowiedzi „Tak”, dla funkcji LICZ.JEŻELI wskazujemy obszar<br>B2:B2001 oraz jako kryterium wyszukiwania podajemy „Tak”:<br>=LICZ.JEŻELI(B2:B2001;”Tak”)<br>Podpunkty b - d<br>Rozwiązanie dla podpunktów b), c) i d) zadania wymaga wydzielenia cyfr kolejnych<br>numerów telefonów. Można do tego wykorzystać bardziej ogólną funkcję<br>FRAGMENT.TEKSTU, która pozwala „wyciąć” z podanego tekstu fragment o wskazanej<br>długości i od podanej pozycji. Na przykład wartością formuły<br>= FRAGMENT.TEKSTU(A2;2;1) będzie fragment tekstu z komórki A2, zaczynający się<br>od drugiej pozycji, o długości jeden (czyli drugi znak z tekstu w A2). Co więcej, jeśli<br>w komórce A2 znajduje się liczba, funkcja „automatycznie” przekształci ją na tekst przed<br>wydzieleniem odpowiedniego fragmentu. W naszym rozwiązaniu „zautomatyzowaliśmy”<br>proces wydzielania wszystkich 9 cyfr z kolejnych numerów w następujący sposób:<br>Przykładowe zadania z rozwiązaniami 51<br> w komórkach D1…L1 umieszczone zostały cyfry 1, 2,…,9,<br> w komórce D2 wpisana została formuła: = FRAGMENT.TEKSTU(<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"inline\"><mrow><mi>A</mi><mn>2</mn><mi>;</mi><mi>D</mi></mrow></math>1;1),<br> skopiowanie tej formuły do całego bloku D2:L1999 pozwoliło wydzielić wszystkie cyfry<br>z każdego numeru.<br>Zwróćmy uwagę na sposób adresowania w formule z komórki D2:<br> adres $A2 gwarantuje, że po skopiowaniu formuły nie zmieni się kolumna, z której<br>pobieramy tekst,<br> adres D$1 z kolei gwarantuje, że numer pozycji, od której zaczyna się wycinany fragment<br>tekstu, zawsze pobierany będzie z pierwszego wiersza.<br>W rezultacie kolejne cyfry liczb z kolumny A umieścimy w kolumnach D…L. Nie możemy<br>jednak wykonywać na nich operacji arytmetycznych, ponieważ wynikiem funkcji<br>FRAGMENT.TEKSTU jest napis, nie liczba. Zastosujemy zatem funkcję WARTOŚĆ, która<br>„zamienia” tekst na liczbę. Wzorcowa formuła w komórce D2 będzie więc wyglądać<br>następująco:<br>= WARTOŚĆ(FRAGMENT.TEKSTU(<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"inline\"><mrow><mi>A</mi><mn>2</mn><mi>;</mi><mi>D</mi></mrow></math>1;1))<br>Podpunkt b<br>Aby zliczyć liczbę numerów telefonów zaczynających się od wskazanej cyfry, wykorzystamy<br>fakt, że w kolumnie D wydzieliliśmy pierwsze cyfry numerów telefonów. Aby uzyskać liczbę<br>numerów zaczynających się od 5, możemy użyć formuły: =LICZ.JEŻELI(A2:A2001;5).<br>Aby uniknąć kilkukrotnego „ręcznego” wpisywania formuły wg powyższego schematu,<br>możemy zastosować adresowanie pośrednie i wskazać jako kryterium komórki, w których<br>kolejno umieścimy liczby 5, 6, 7 i 8. Poniżej zamieszczamy przykładowe rozwiązanie<br>zapisane w komórkach A9 B12 drugiego arkusza.<br>Formuły w komórkach odpowiadających wartościom 6, 7, 8 i 9 możemy otrzymać, kopiując<br>formułę wpisaną dla cyfry 5.<br>Podpunkt c<br>Aby rozwiązać podpunkt c, wystarczy zsumować wartości z kolumn D…L w każdym wierszu,<br>wyznaczyć największą z tych sum i wyszukać numer odpowiadający tej sumie.<br>52 Informator o egzaminie maturalnym z informatyki od roku szkolnego 2014/2015<br>Podpunkt d<br>W podpunkcie d) zapiszemy przy pomocy formuł następujący algorytm wyznaczania długości<br>najdłuższego ciągu malejącego, będącego początkiem wskazanego ciągu c1, c2,…,ck:<br>Krok 1:<br>Jeśli c1c2 to r2 1<br>w przeciwnym przypadku r2 0<br>Krok 2:<br>Powtarzaj dla i=3,4,…,k:<br>Jeśli (ci - 1c i) oraz (ri - 1=1) to ri 1<br>w przeciwnym przypadku ri 0<br>Krok 3:<br>Zwróć (1 + r2 + r3 + … + rk )<br>W naszym przypadku wartość k z powyższego algorytmu to 9, a pierwszy ciąg znajduje się<br>w komórkach D2, E2, …, L2. Formuły wyznaczające wartości r2,…,r9 w komórkach<br>N2,…,U2 realizujące powyższy algorytm mogą wyglądać następująco:<br> unikalna formuła w komórce N2:<br>=JEŻELI(D2&gt;E2;1;0)<br> formuła w komórce O2, którą kopiujemy do P2,…,U2:<br>=JEŻELI(N2=1;JEŻELI(E2&gt;F2;1;0);0)<br>Następnie możemy:<br> skopiować powyższe formuły do kolejnych wierszy arkusza,<br> w kolumnie V każdego wiersza wyliczyć wartość jeden plus największa z wartości r2, r3,<br>…, r9 (czyli maksimum wartości z kolumn N, M,…,U tego wiersza),<br> wybrać największą wartość z kolumny V,<br> wyszukać numery telefonów z wierszy, w których pojawia się ta największa wartość<br>w kolumnie V.<br>Podpunkt e<br>Po raz kolejny zastosujemy funkcję LICZ.JEŻELI, umiejętnie wykorzystując też<br>adresowanie pośrednie. Jeśli w komórce C2 arkusza z danymi wpiszemy formułę<br>=LICZ.JEŻELI(<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"inline\"><mrow><mi>A</mi></mrow></math>2:<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"inline\"><mrow><mi>A</mi></mrow></math>2001;A2), wówczas uzyskamy nie tylko liczbę wystąpień<br>pierwszego numeru (znajdującego się w komórce A2) w bloku A2:A2001, ale po<br>skopiowaniu tej formuły do kolejnych komórek kolumny C wyznaczymy liczby wystąpień<br>kolejnych numerów.<br>Podpunkty a) i e) zadania nie wymagają wydzielania elementów (cyfr) numerów telefonów,<br>można je więc zaliczyć do klasycznych ćwiczeń z zakresu analizowania i filtrowania danych,<br>które bez większych trudności można zrealizować w wybranym arkuszu kalkulacyjnym.<br>W pozostałych punktach zadania uzyskanie wyniku zasadniczo wymaga dostępu do<br>poszczególnych cyfr numerów telefonów. Co prawda wyniki punktu b) zależą jedynie od<br>pierwszych cyfr a zatem możliwe jest rozwiązanie w oparciu o porównania całych numerów<br>(np. numery zaczynające się od 5 są nie mniejsze niż 500000000 i nie większe niż<br>599999999), jednak w punktach c) i d) wyniki zależą od wszystkich cyfr w numerach<br>telefonów. Dlatego rozwiązanie z wykorzystaniem języka programowania wydaje się bardziej<br>naturalne. Zaprezentowaliśmy jednak również rozwiązanie w arkuszu kalkulacyjnym, aby<br>zademonstrować, że stosując odpowiednie formuły można „implementować” proste<br>algorytmy, gdzie komórki arkusza służą do przechowywania wartości zmiennych w kolejnych<br>etapach obliczeń. Niemniej szczególnie w podpunkcie d) (gdzie konieczne było ustalanie<br>najdłuższego malejącego ciągu początkowych cyfr numeru), nasze rozwiązanie wymagało<br>niestandardowych i dość nienaturalnych pomysłów.<br>Przykładowe zadania z rozwiązaniami 53<br>W zaprezentowanym rozwiązaniu programistycznym numery telefonów reprezentowane są<br>jako ciągi znaków, co ułatwia dostęp do poszczególnych cyfr. Warto wspomnieć,<br>że reprezentacja numerów w postaci liczb również daje wygodny dostęp do cyfr. Zauważmy,<br>że dla zmiennej n typu int wartość n%10 jest równa ostatniej jej cyfrze, natomiast n/10<br>to wartość uzyskana po usunięciu z zapisu dziesiętnego n ostatniej cyfry (pamiętajmy,<br>że w języku C wartość n/10 dla zmiennej n typu int jest równa wynikowi dzielenia<br>całkowitego n przez 10). Taki sposób dostępu do cyfr numeru jest jednak niewygodny<br>w podpunkcie d) zadania, gdzie konieczne jest „przeglądanie” kolejnych cyfr w kolejności<br>od pierwszej (najbardziej znaczącej), a nie od ostatniej (najmniej znaczącej).<br>Na końcu należy podkreślić, że zadanie nie narzuca żadnego sposobu rozwiązania, więc nic<br>nie stoi nic na przeszkodzie, aby odpowiednio dobrać takie narzędzia informatyczne do<br>rozwiązania zadań w kolejnych podpunktach, aby część z nich rozwiązać przy pomocy języka<br>programowania, a część przy pomocy arkusza kalkulacyjnego.<br>54 Informator o egzaminie maturalnym z informatyki od roku szkolnego 2014/2015</p>","solutions":[]}