Wróć do informacji o e-podręczniku Wydrukuj Pobierz materiał do PDF Pobierz materiał do EPUB Pobierz materiał do MOBI Zaloguj się, aby dodać do ulubionych Zaloguj się, aby skopiować i edytować materiał Zaloguj się, aby udostępnić materiał Zaloguj się, aby dodać całą stronę do teczki

Zadanie 1. Listonosz Patryk

Patryk jest listonoszem. Codziennie ma do dostarczenia bardzo dużo listów. Na każdym liście jest napisany pięciocyfrowy kod pocztowy – dzięki niemu listonosz wie, dokąd ma jechać, aby trafić do adresata.

Patryk pewnego dnia otrzymał do dostarczenia 500 listów. Niestety, nie były one posortowane.

W pliku kody.txt znajduje się 500 pięciocyfrowych liczb naturalnych - są to kody pocztowe listów, które Patryk ma do dostarczenia.

R1WdTSq5apTHC

Przycisk umożliwiający pobranie pliku TXT z treścią zadania.

Plik TXT o rozmiarze 3.42 KB w języku polskim

Patryk jest również entuzjastą statystyki. Posortował on listy według kodów pocztowych niemalejąco, a teraz chce się dowiedzieć, ile wynosi średnia arytmetyczna z liczb znajdujących się na co trzeciej pozycji (czyli kodów, które znajdują się na co trzecim liście).

Napisz program, który dla danych z pliku kody.txt obliczy, ile wynosi średnia arytmetyczna z liczb oznaczających kody pocztowe, które po uporządkowaniu ich niemalejąco znajdowałyby się na pozycjach będących wielokrotnościami liczby 3. Kody numerujemy od 1. Wyniki zapisz do pliku wynik.txt.

Wynik zaokrąglij do liczby całkowitej.

Przykładowo, jeżeli listów byłoby 8, to interesowałyby nas listy, które po posortowaniu niemalejąco znajdują się na miejscu trzecim i szóstym. Listy numerowane są od 1.

Przykład 1

Dla przykładowego pliku:

Linia 1. 58940. Linia 2. 20992. Linia 3. 66027. Linia 4. 65212. Linia 5. 13366. Linia 6. 60493. Linia 7. 21073. Linia 8. 10494. Linia 9. 74230. Linia 10. 55970.

Poprawna odpowiedź wynosi: 48 653.

Obliczyliśmy średnią arytmetyczną z 20 992, 58 940 oraz 66 027.

Do oceny oddajesz:

  • plik wynik.txt, zawierający odpowiedź do zadania (jedna liczba oznaczająca średnią z co trzeciego kodu pocztowego, z pliku kody.txt, gdyby liczby były uporządkowane niemalejąco),

  • plik(i) z komputerową realizacją zadania (kodem programu).

Praca domowa

Twoim zadaniem jest opracowanie rozwiązania zadania w wybranym przez siebie języku programowania: C++, Java lub Python. Odpowiedź do zadania dla danych z pliku znajdziesz pod omówieniem rozwiązania.

Rozwiązanie

Rozwiązanie zadania przedstawimy w postaci pseudokodu, ponieważ na egzaminie maturalnym można korzystać z wybranego języka programowania: C++, Java lub Python.

Ponieważ każdy kod pocztowy jest liczbą pięciocyfrową, a my chcemy wiedzieć, jak wyglądałaby lista posortowana niemalejąco, użyjemy sortowania pozycyjnego. Po posortowaniu liczb obliczymy średnią arytmetyczną z tych, które znajdują się na co trzeciej pozycji. Sortowanie pozycyjne wykorzystuje inne stabilne algorytmy sortowaniasortowanie stabilnestabilne algorytmy sortowania, w rozwiązaniu tego zadania, użyjemy stabilnego algorytmu sortowania przez zliczaniePNx8quWZlsortowania przez zliczanie.

Załóżmy, że do posortowania mamy tablicę tablica – chcemy ją posortować według pozycji r. Przykładowo, jeżeli chcemy ją posortować według pozycji jedności, r wynosi 1, jeżeli natomiast według pozycji dziesiątek, r wynosi 10 - i tak dalej. Algorytm sortowania przez zliczanie wygląda wtedy następująco:

Linia 1. sortowaniePrzezZliczanie otwórz nawias okrągły tablica przecinek r zamknij nawias okrągły. Linia 2. n ← długość otwórz nawias okrągły tablica zamknij nawias okrągły. Linia 3. liczniki otwórz nawias kwadratowy 0 kropka kropka 9 zamknij nawias kwadratowy ← otwórz nawias klamrowy 0 przecinek 0 przecinek 0 przecinek 0 przecinek 0 przecinek 0 przecinek 0 przecinek 0 przecinek 0 przecinek 0 zamknij nawias klamrowy. Linia 4. dla i znak równości 0 przecinek 1 przecinek kropka kropka kropka przecinek n minus 1 wykonuj dwukropek. Linia 5. indeks ← otwórz nawias okrągły tablica otwórz nawias kwadratowy i zamknij nawias kwadratowy div r zamknij nawias okrągły mod 10. Linia 6. liczniki otwórz nawias kwadratowy indeks zamknij nawias kwadratowy ← liczniki otwórz nawias kwadratowy indeks zamknij nawias kwadratowy plus 1. Linia 8. dla i znak równości 1 przecinek 2 przecinek kropka kropka kropka przecinek 9 wykonuj dwukropek. Linia 9. liczniki otwórz nawias kwadratowy i zamknij nawias kwadratowy ← liczniki otwórz nawias kwadratowy i zamknij nawias kwadratowy plus liczniki otwórz nawias kwadratowy i minus 1 zamknij nawias kwadratowy. Linia 11. dla i znak równości n minus 1 przecinek n minus 2 przecinek kropka kropka kropka przecinek 0 wykonuj dwukropek. Linia 12. indeks ← otwórz nawias okrągły tablica otwórz nawias kwadratowy i zamknij nawias kwadratowy div r zamknij nawias okrągły mod 10. Linia 13. liczniki otwórz nawias kwadratowy indeks zamknij nawias kwadratowy ← liczniki otwórz nawias kwadratowy indeks zamknij nawias kwadratowy minus 1. Linia 14. posortowanaTablica otwórz nawias kwadratowy liczniki otwórz nawias kwadratowy indeks zamknij nawias kwadratowy zamknij nawias kwadratowy ← tablica otwórz nawias kwadratowy i zamknij nawias kwadratowy. Linia 16. zwróć posortowanaTablica.

Zapisany za pomocą pseudokodu algorytm sortujący niemalejąco liczby, a następnie wyliczający średnią arytmetyczną z elementów znajdujących się na co trzeciej pozycji wygląda następująco:

Linia 1. tablica ← wczytaj dane z pliku cudzysłów kody kropka txt cudzysłów. Linia 2. r ← 1. Linia 3. liczbaCyfr ← 5. Linia 4. średnia ← 0. Linia 5. ile ← 0. Linia 7. dla i znak równości 4 przecinek 3 przecinek kropka kropka kropka przecinek 0 wykonuj dwukropek. Linia 8. tablica ← sortowaniePrzezZliczanie otwórz nawias okrągły tablica przecinek r zamknij nawias okrągły. Linia 9. r ← r asterysk 10. Linia 11. dla i znak równości 0 przecinek 1 przecinek kropka kropka kropka przecinek 499 wykonuj dwukropek. Linia 12. jeżeli i mod 3 znak równości 2 dwukropek. Linia 13. średnia ← średnia plus tablica otwórz nawias kwadratowy i zamknij nawias kwadratowy. Linia 14. ile ← ile plus 1. Linia 16. średnia ← średnia prawy ukośnik ile. Linia 17. zaokrąglij średnia do liczby całkowitej. Linia 18. wpisz średnia do pliku cudzysłów wynik kropka txt cudzysłów.

Do sortowania pozycyjnego możesz użyć dowolnego stabilnego algorytmu sortowania.

Ważne!

W pseudokodzie wykorzystaliśmy operatory mod oraz div:

  • mod – operator modulo, służy do obliczania reszty z dzielenia,

  • div – operator dzielenia całkowitego.

Odpowiedź do zadania

Odpowiedź do zadania dla danych z pliku kody.txt55 469

Słownik

liczba zmiennoprzecinkowa
liczba zmiennoprzecinkowa

reprezentacja liczby rzeczywistej zapisanej w postaci wykładniczej

sortowanie stabilne
sortowanie stabilne

mechanizm sortowania, w przypadku którego elementy o identycznych wartościach są umieszczane w uporządkowanym zbiorze w takiej samej kolejności, w jakiej znajdowały się przed sortowaniem

system liczbowy
system liczbowy

zbiór reguł dotyczących zapisu liczb z wykorzystaniem kombinacji rozmaitych symboli; wyróżniamy systemy liczbowe addytywne (np. rzymski) i pozycyjne (np. dziesiętny)