Skip to main content

Command Palette

Search for a command to run...

Matura próbna informatyka 2022 grudzień (poziom rozszerzony) - zadanie 3.4

Updated
2 min read
Matura próbna informatyka 2022 grudzień (poziom rozszerzony) - zadanie 3.4

Treść zadania:

Dla każdej liczby z pliku liczby.txt znajdź jej reprezentację w systemie szesnastkowym. Dla każdej cyfry szesnastkowej podaj, ile razy występuje ona łącznie w zapisach szesnastkowych wszystkich liczb z pliku liczby.txt.

Rozwiązanie:

Najpierw odczytajmy liczby w systemie dziesiętnym z pliku:

with open("dane/liczby_przyklad.txt", "r") as file:
    nums = [int(n) for n in file.readlines()]

Następnie przekształcamy liczbę z systemu dziesiętnego na szesnastkowy, pamiętając, żeby usunąć przedrostek 0x - domyślnie funkcja hex dodaje go przed wlaściwą liczbą, np.: 0x123 . Metoda upper spowoduje zamienienie małych liter na duże, np.: a -> A itd. Wszystkie te przekształcenia można byłoby przerzucić do momentu, w którym odczytujemy dane z pliku, ale to może poprawić trochę czytelność :)

hex_nums = [hex(n).replace("0x", "").upper() for n in nums]

Generujemy słownik z cyframi w systemie szesnastkowym:

hex_digits = "0123456789ABCDEF"

results = {num: 0 for num in hex_digits}

domyślnie ustawiając im zero, jako wartość :)

Następne linijki to czysta formalność - dla każdej liczby i dla każdej jej cyfry zliczamy jej łączne wystąpienie. results.get(digit, 0) zapewnia pobranie wartości pod danym kluczem, a jeśli ta nie występuje, domyślnie będzie to 0 - tak dla pewności :)


for num in hex_nums:
    for digit in num:
        results[digit] = results.get(digit, 0) + 1

Pod kolejne klucze ("0", "1"... , "E", "F") przypisujemy wartość danego klucza + 1, żeby zliczyć wystąpienie kolejnej cyfry.

Teoretycznie od tego momentu mamy już rozwiązanie, ale możemy je jeszcze posortować i wyświetlić w oczekiwanym formacie, zamiast robić to ręcznie:

sorted_results = sorted(results.items(), key=lambda item: item[0])
for key, value in sorted_results:
    print(f"{key}:{value}")

Cały program:

with open("dane/liczby_przyklad.txt", "r") as file:
    nums = [int(n) for n in file.readlines()]

hex_nums = [hex(n).replace("0x", "").upper() for n in nums]

hex_digits = "0123456789ABCDEF"

results = {num: 0 for num in hex_digits}

for num in hex_nums:
    for digit in num:
        results[digit] = results.get(digit, 0) + 1

sorted_results = sorted(results.items(), key=lambda item: item[0])
for key, value in sorted_results:
    print(f"{key}:{value}")

Wynik:

0:32
1:26
2:37
3:31
4:43
5:25
6:28
7:23
8:38
9:28
A:45
B:33
C:29
D:23
E:44
F:10

Źródło arkusza: https://arkusze.pl/matura-probna-informatyka-2022-grudzien-poziom-rozszerzony/

More from this blog

matura z infy

17 posts