W pliku liczby.txt zapisano 500 liczb całkowitych dodatnich, po jednej w każdym wierszu. Każda liczba należy do zakresu .
R1ahTc7ervWZQ
Napisz program(y) dający(e) odpowiedzi do poniższych zadań. Zapisz uzyskane odpowiedzi w pliku wyniki.txt, poprzedzając każdą z nich numerem odpowiedniego zadania.
Uwaga: Plik przyklad.txt zawiera przykładowe dane spełniające warunki zadania. Odpowiedzi dla danych z tego pliku są podane pod treściami zadań.
RYLuW2SWyaCM2
Zadanie zostało przygotowane przez Centralną Komisję Egzaminacyjną i pojawiło się na egzaminie maturalnym z informatyki w 2019 roku (poziom rozszerzony, część II, egzamin w tzw. starej formule). Cały arkusz można znaleźć na stronie internetowej CKE.
Na egzaminie maturalnym mamy możliwość wybrania dowolnego z dostępnych języków programowania, jednak tutaj nie będziemy dokonywać implementacji rozwiązania zadania w konkretnym języku. Zamiast tego przedstawimy rozwiązanie zapisane za pomocą pseudokodu. Twoim zadaniem będzie przełożenie go na język, w którym programujesz.
Zadanie 1.1 (3 pkt)
Podaj, ile z podanych liczb jest potęgą liczby (czyli liczbami postaci , , itd.).
Dla pliku przyklad.txt odpowiedź wynosi .
Do oceny oddajesz:
plik wyniki.txt zawierający poprzedzoną numerem zadania odpowiedź (informację, ile liczb jest potęgami liczby );
plik(i) z komputerową realizacją zadania (kodem programu).
Rozwiązanie
Zanim przystąpimy do rozwiązania, musimy się zastanowić, ile liczb w zadanym zakresie zadania (czyli ) jest potęgami liczby . Dla ułatwienia możemy je wypisać:
Potęga liczby 3
Wartość
Jak widzimy, takich liczb mamy (liczba wykracza poza zakres).
Pisanie programu zaczniemy od utworzenia tablicy liczb naturalnych o nazwie liczby oraz wczytania do niej zawartości pliku liczby.txt. Tablica będzie składać się z elementów.
Linia 1. liczby otwórz nawias kwadratowy 500 zamknij nawias kwadratowy ← wczytaj dane z pliku cudzysłów liczby kropka txt cudzysłów.
W następnym kroku utworzymy zmienną ile, którą zainicjalizujemy wartością . Zmienna ta będzie inkrementowana za każdym razem, gdy znajdziemy liczbę będącą potęgą trójki.
Linia 1. liczby otwórz nawias kwadratowy 500 zamknij nawias kwadratowy ← wczytaj dane z pliku cudzysłów liczby kropka txt cudzysłów.
Linia 3. ile ← 0.
Zapiszemy pętlę dla, której zadaniem będzie iterowanie przez wszystkie indeksy w liście liczby.
Linia 1. liczby otwórz nawias kwadratowy 500 zamknij nawias kwadratowy ← wczytaj dane z pliku cudzysłów liczby kropka txt cudzysłów.
Linia 3. ile ← 0.
Linia 5. dla i znak równości 0 przecinek 1 przecinek kropka kropka kropka przecinek długość otwórz nawias okrągły liczby zamknij nawias okrągły minus 1.
Dla każdego indeksu inicjalizować będziemy zmienną potega wartością 1.
Linia 1. liczby otwórz nawias kwadratowy 500 zamknij nawias kwadratowy ← wczytaj dane z pliku cudzysłów liczby kropka txt cudzysłów.
Linia 3. ile ← 0.
Linia 5. dla i znak równości 0 przecinek 1 przecinek kropka kropka kropka przecinek długość otwórz nawias okrągły liczby zamknij nawias okrągły minus 1.
Linia 6. potega ← 1.
Następnie wewnątrz pętli dla zapisujemy pętlę dopóki. Pętla będzie wykonywać się, dopóki zmienna potega jest mniejsza od wartości liczby[i] lub jej równa.
Linia 1. liczby otwórz nawias kwadratowy 500 zamknij nawias kwadratowy ← wczytaj dane z pliku cudzysłów liczby kropka txt cudzysłów.
Linia 3. ile ← 0.
Linia 5. dla i znak równości 0 przecinek 1 przecinek kropka kropka kropka przecinek długość otwórz nawias okrągły liczby zamknij nawias okrągły minus 1.
Linia 6. potega ← 1.
Linia 7. dopóki potega otwórz nawias ostrokątny znak równości liczby otwórz nawias kwadratowy i zamknij nawias kwadratowy wykonuj.
W kolejnym kroku wewnątrz pętli dopóki zapisujemy instrukcję warunkową. Będzie ona sprawdzać, czy wartość zmiennej potega jest równa wartości liczby[i]. Jeżeli instrukcja zwróci wartość prawda, zmienna ile będzie inkrementowana o , a pętla dopóki zostanie przerwana.
W przeciwnym razie wartość zmiennej potega będzie mnożona razy , a pętla będzie wykonywać się dalej.
Linia 1. liczby otwórz nawias kwadratowy 500 zamknij nawias kwadratowy ← wczytaj dane z pliku cudzysłów liczby kropka txt cudzysłów.
Linia 3. ile ← 0.
Linia 5. dla i znak równości 0 przecinek 1 przecinek kropka kropka kropka przecinek długość otwórz nawias okrągły liczby zamknij nawias okrągły minus 1.
Linia 6. potega ← 1.
Linia 7. dopóki potega otwórz nawias ostrokątny znak równości liczby otwórz nawias kwadratowy i zamknij nawias kwadratowy wykonuj.
Linia 8. jeżeli potega znak równości liczby otwórz nawias kwadratowy i zamknij nawias kwadratowy.
Linia 9. ile ← ile plus 1.
Linia 10. przerwij.
Linia 11. w przeciwnym razie.
Linia 12. potega ← potega asterysk 3.
Po zakończeniu wszystkich iteracji pętli należy wypisać wartość zmiennej ile.
Linia 1. liczby otwórz nawias kwadratowy 500 zamknij nawias kwadratowy ← wczytaj dane z pliku cudzysłów liczby kropka txt cudzysłów.
Linia 3. ile ← 0.
Linia 5. dla i znak równości 0 przecinek 1 przecinek kropka kropka kropka przecinek długość otwórz nawias okrągły liczby zamknij nawias okrągły minus 1.
Linia 6. potega ← 1.
Linia 7. dopóki potega otwórz nawias ostrokątny znak równości liczby otwórz nawias kwadratowy i zamknij nawias kwadratowy wykonuj.
Linia 8. jeżeli potega znak równości liczby otwórz nawias kwadratowy i zamknij nawias kwadratowy.
Linia 9. ile ← ile plus 1.
Linia 10. przerwij.
Linia 11. w przeciwnym razie.
Linia 12. potega ← potega asterysk 3.
Linia 14. wypisz ile.
Poprawna odpowiedź:
Schemat oceniania:
pkt – za podanie poprawnej odpowiedzi;
pkt – za podanie wyniku różniącego się o (np. w przypadku pominięcia liczby lub liczenia od zamiast od );
pkt – za podanie wyniku mniejszego od prawidłowego o lub (w przypadku pominięcia przy zliczaniu maksymalnie trzech liczb);
pkt – za błędną odpowiedź lub brak odpowiedzi.
Schemat oceniania pochodzi z arkusza odpowiedzi do egzaminu maturalnego z informatyki z 2019 roku (poziom rozszerzony, część II, egzamin w tzw. starej formule). Cały arkusz można znaleźć na stronie internetowej CKE.
Zadanie 1.2 (4 pkt)
Silnią liczby naturalnej większej od nazywamy wartość iloczynu i oznaczamy przez . Przyjmijmy, że . Zatem mamy:
itd.
Dowolną liczbę naturalną możemy rozbić na cyfry, a następnie obliczyć sumę silni jej cyfr. Na przykład dla liczby mamy .
Podaj, w kolejności ich występowania w pliku liczby.txt, wszystkie liczby, które są równe sumie silni swoich cyfr.
W pliku przyklad.txt znajduje się jedna taka liczba: .
Do oceny oddajesz:
plik wyniki.txt zawierający poprzedzoną numerem zadania odpowiedź (wszystkie liczby z pliku, które są równe sumie silni swoich cyfr);
plik(i) z komputerową realizacją zadania (kodem programu).
Rozwiązanie
Rozwiązanie zacznijmy od stworzenia pętli dla. Jej zadaniem będzie wskazanie kolejnych liczb z tablicy liczby. Wewnątrz pętli pobieramy do zmiennej liczba aktualnie przetwarzaną liczbę oraz tworzymy zmienną pomocniczą sumaSilni, którą inicjalizujemy wartością .
Linia 1. dla i znak równości 0 przecinek 1 kropka kropka kropka przecinek długość otwórz nawias okrągły liczby zamknij nawias okrągły minus 1 wykonuj dwukropek.
Linia 2. liczba ← liczby otwórz nawias kwadratowy i zamknij nawias kwadratowy.
Linia 3. sumaSilni ← 0.
Zależy nam na przetwarzaniu kolejnych cyfr tworzących badaną liczbę. Zastosujemy więc algorytm, którego zadaniem będzie wyodrębnianie kolejnych cyfr. Nie znamy ich liczby, wiemy natomiast, że operację chcemy powtarzać wielokrotnie. Napiszemy pętlę dopóki, która będzie wykonywać się do czasu, aż liczba stanie się równa . Wewnątrz pętli przypisujemy do zmiennej cyfra wartość wyrażenia liczba % 10, pobierając w ten sposób cyfrę jedności. Zmiennej liczba przypisujemy wynik dzielenia całkowitoliczbowego: liczba = liczba div 10.
Linia 1. dla i znak równości 0 przecinek 1 kropka kropka kropka przecinek długość otwórz nawias okrągły liczby zamknij nawias okrągły minus 1 wykonuj dwukropek.
Linia 2. liczba ← liczby otwórz nawias kwadratowy i zamknij nawias kwadratowy.
Linia 3. sumaSilni ← 0.
Linia 4. dopóki liczba wykrzyknik znak równości 0 wykonuj dwukropek.
Linia 5. cyfra ← liczba procent 10.
Linia 7. kropka kropka kropka.
Linia 9. liczba ← liczba div 10.
Pozostało obliczyć wartość silni poszczególnych cyfr oraz ich sumę. Wewnątrz pętli dopóki tworzymy zmienną pomocniczą silnia, którą inicjalizujemy wartością . Tworzymy pętlę dla, której iterator j będzie przyjmował wartości z zakresu . Wewnątrz pętli dla do zmiennej silnia zapisujemy jej iloczyn z iteratorem j.
Linia 1. dla i znak równości 0 przecinek 1 kropka kropka kropka przecinek długość otwórz nawias okrągły liczby zamknij nawias okrągły minus 1 wykonuj dwukropek.
Linia 2. liczba ← liczby otwórz nawias kwadratowy i zamknij nawias kwadratowy.
Linia 3. sumaSilni ← 0.
Linia 4. dopóki liczba wykrzyknik znak równości 0 wykonuj dwukropek.
Linia 5. cyfra ← liczba procent 10.
Linia 7. silnia ← 1.
Linia 8. dla j znak równości 1 przecinek 2 przecinek kropka kropka kropka przecinek cyfra wykonuj dwukropek.
Linia 9. silnia ← silnia asterysk j.
Linia 11. kropka kropka kropka.
Linia 13. liczba ← liczba div 10.
Wewnątrz pętli dopóki dopisujemy instrukcję dodającą do zmiennej sumaSilni wartość zmiennej silnia.
Linia 1. dla i znak równości 0 przecinek 1 kropka kropka kropka przecinek długość otwórz nawias okrągły liczby zamknij nawias okrągły minus 1 wykonuj dwukropek.
Linia 2. liczba ← liczby otwórz nawias kwadratowy i zamknij nawias kwadratowy.
Linia 3. sumaSilni ← 0.
Linia 4. dopóki liczba wykrzyknik znak równości 0 wykonuj dwukropek.
Linia 5. cyfra ← liczba procent 10.
Linia 7. silnia ← 1.
Linia 8. dla j znak równości 1 przecinek 2 przecinek kropka kropka kropka przecinek cyfra wykonuj dwukropek.
Linia 9. silnia ← silnia asterysk j.
Linia 11. sumaSilni ← sumaSilni plus silnia.
Linia 13. liczba ← liczba div 10.
Ostatnim brakującym elementem kodu jest wypisanie liczby, jeżeli suma silni jej poszczególnych cyfr jest jej równa. Wewnątrz zewnętrznej pętli dla dopisujemy odpowiednią instrukcję warunkową.
Linia 1. dla i znak równości 0 przecinek 1 kropka kropka kropka przecinek długość otwórz nawias okrągły liczby zamknij nawias okrągły minus 1 wykonuj dwukropek.
Linia 2. liczba ← liczby otwórz nawias kwadratowy i zamknij nawias kwadratowy.
Linia 3. sumaSilni ← 0.
Linia 4. dopóki liczba wykrzyknik znak równości 0 wykonuj dwukropek.
Linia 5. cyfra ← liczba procent 10.
Linia 7. silnia ← 1.
Linia 8. dla j znak równości 1 przecinek 2 przecinek kropka kropka kropka przecinek cyfra wykonuj dwukropek.
Linia 9. silnia ← silnia asterysk j.
Linia 11. sumaSilni ← sumaSilni plus silnia.
Linia 13. liczba ← liczba div 10.
Linia 15. jeżeli sumaSilni znak równości liczby otwórz nawias kwadratowy i zamknij nawias kwadratowy wykonaj dwukropek.
Linia 16. wypisz liczby otwórz nawias kwadratowy i zamknij nawias kwadratowy.
Poprawna odpowiedź: , , ,
Schemat oceniania:
pkt – za podanie prawidłowej odpowiedzi ( pkt za każdą poprawnie podaną liczbę w wyniku);
pkt – za błędną odpowiedź lub brak odpowiedzi.
Schemat oceniania pochodzi z arkusza odpowiedzi do egzaminu maturalnego z informatyki z 2019 roku (poziom rozszerzony, część II, egzamin w tzw. starej formule). Cały arkusz można znaleźć na stronie internetowej CKE.
Słownik
modulo
modulo
zastępcza nazwa operacji wyznaczania reszty z dzielenia jednej liczby przez drugą; w pseudokodzie zapisujemy operację w ten sposób:
Linia 1. 10 mod 6.
w językach programowania wykorzystujemy operator %:
Linia 1. 10 procent 6.
Przykład 1
Operacja modulo dla liczb nieujemnych i zwróci resztę z dzielenia liczby przez liczbę , czyli , ponieważ
Linia 1. 9 procent 2 znak równości 1.
Przykład 2
Operacja modulo dla liczb i zwróci resztę z dzielenia liczby przez liczbę , czyli w zależności od języka programowania (np. w języku Python) lub (np. w w językach C++ i Java).