Zadanie 1. Miłośnik piątki

Ulubioną cyfrą Antka jest 5. Jego ulubionymi urodzinami były te, kiedy kończył pięć lat, a gdy robi sobie zdjęcia ze znajomymi, pokazuje pięć palców. Pewnego dnia Antek postanowił napisać 200 unikalnych liczb całkowitych z przedziału <1, 1000>.

Nie zauważył jednak, że jego komputer był zainfekowany niegroźnym wirusem, który wykonał konwersję zapisanych przez niego liczb do systemu dwójkowego, czyli systemu liczbowegosystem liczbowysystemu liczbowego o podstawie 2.

W pliku liczby.txt znajduje się 200 unikalnych liczb całkowitych z przedziału <1, 1000>, zapisanych w systemie dwójkowym.

RIjnO8Ubt87oX

Przycisk do pobrania pliku TXT zawierający treść zadania.

Plik liczby.txt.
Plik TXT o rozmiarze 2.13 KB w języku polskim

Ulubione liczby Antka to takie, w których w zapisie dziesiętnym występuje cyfra 5.

Napisz program, który spośród liczb zapisanych w systemie binarnym wybierze ulubione liczby Antka i zapisze je w systemie dziesiętnym. Każda liczba powinna zostać zapisana w osobnej linii.

Przykład 1

Dla danych:

Linia 1. 101. Linia 2. 101101111. Linia 3. 110111100. Linia 4. 1000100111. Linia 5. 1111100111.

prawidłowa odpowiedź wygląda następująco:

Linia 1. 5. Linia 2. 551.

Do oceny oddajesz:

  • plik wynik.txt zawierający odpowiedź (liczby z pliku liczby.txt, które w zapisie dziesiętnym zawierają cyfrę 5; liczby zapisane w systemie dziesiętnym),

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

Przedstaw rozwiązanie w postaci programu w języku C++, Java lub Python. Odpowiedź do zadania znajdziesz w pliku umieszczonym po omówieniu rozwiązania.

Rozwiązanie

Rozwiązanie tego zadania przedstawimy w postaci pseudokodu.

Wykorzystamy algorytm zamiany liczb z systemu dwójkowego na dziesiętny. Jego implementacja może się różnić w zależności od wybranego języka. W pseudokodzie zostanie przedstawione ogólne działanie algorytmu. Gdy zamienimy liczbę z systemu dwójkowego na dziesiętny, sprawdzimy, czy w jej zapisie występuje cyfra 5. Jeżeli tak, wpiszemy tę liczbę do pliku wynikowego.

Linia 1. liczby otwórz nawias kwadratowy 0 kropka kropka 199 zamknij nawias kwadratowy ← wczytaj dane z pliku cudzysłów liczby kropka txt cudzysłów. Linia 3. dla i znak równości 0 przecinek 1 przecinek kropka kropka kropka przecinek 199 wykonuj dwukropek. Linia 4. liczba ← napis otwórz nawias okrągły liczby otwórz nawias kwadratowy i zamknij nawias kwadratowy zamknij nawias okrągły. Linia 5. wynik ← całk otwórz nawias okrągły liczba otwórz nawias kwadratowy 0 zamknij nawias kwadratowy zamknij nawias okrągły. Linia 6. dla j znak równości 1 przecinek 2 przecinek kropka kropka kropka przecinek długość otwórz nawias okrągły liczba zamknij nawias okrągły minus 1 wykonuj dwukropek. Linia 7. wynik ← wynik asterysk 2 plus całk otwórz nawias okrągły liczba otwórz nawias kwadratowy j zamknij nawias kwadratowy zamknij nawias okrągły. Linia 9. y ← napis otwórz nawias okrągły wynik zamknij nawias okrągły. Linia 10. dla j znak równości 0 przecinek 1 przecinek kropka kropka kropka przecinek długość otwórz nawias okrągły y zamknij nawias okrągły minus 1 wykonuj dwukropek. Linia 11. jeżeli y otwórz nawias kwadratowy j zamknij nawias kwadratowy znak równości 5 dwukropek. Linia 12. dopisz y do pliku cudzysłów wynik kropka txt cudzysłów. Linia 13. przerwij pętlę. Linia 15. zamknij plik cudzysłów liczby kropka txt cudzysłów. Linia 16. zamknij plik cudzysłów wynik kropka txt cudzysłów.
  • Dane z pliku liczby.txt wczytujemy do tablicy liczby. [linia kodu 1]
    Uwaga! Tablica nie jest konieczna – możemy wczytywać po jednym wierszu (czyli po jednej liczbie).

  • Tworzymy zewnętrzną pętlę, która będzie przechodziła przez każdą liczbę w tablicy liczby. [linia kodu 3]

  • Wykonujemy algorytm zamiany liczby z systemu dwójkowego na dziesiętny. [linie kodu 4‑7]

  • Zamieniamy liczbę na napis, by sprawdzić, czy zawiera ona cyfrę 5. [linia kodu 9]

  • Przechodzimy przez każdą cyfrę w liczbie; jeżeli trafimy na cyfrę 5, wpisujemy tę liczbę do pliku wynikowego. [linie kodu 10‑13]

  • Zamykamy plik. [linie kodu 15–16]

Ważne!

W pseudokodzie wykorzystaliśmy funkcje: długość oraz napis. Mają one swoje odpowiedniki w językach programowania.

Odpowiedniki funkcji długość:

  • C++: length()

  • Java: length()

  • Python: len()

Odpowiedniki funkcji napis:

  • C++: to_string()

  • Java: Integer.toString()

  • Python: str()

W pseudokodzie wykorzystaliśmy funkcję całk(x). Przyjmuje ona napis x i zwraca jego wartość jako liczbę całkowitą.

Odpowiedniki funkcji całk:

  • C++: stoi()

  • Java: Integer.parseInt()

  • Python: int()

Odpowiedź

Odpowiedź do zadania dla danych z pliku liczby.txt znajduje się w załączniku, w pliku wynik.txt:

RoLZ92ioNQNJO

Przycisk do pobrania pliku TXT z wynikiem zadania.

Plik wynik.txt.
Plik TXT o rozmiarze 260.00 B w języku polskim

Słownik

system liczbowy
system liczbowy

zbiór reguł zapisywania liczb, określający m.in. zestaw znaków (symboli), za pomocą których przedstawiane są liczby, np. w systemie dwójkowym wykorzystywane są cyfry 0 i 1, w dziesiętnym – cyfry ze zbioru ⟨0, 9⟩, a w szesnastkowym – cyfry ze zbioru ⟨0, 9⟩ oraz litery od A do F