# Informatyka — zadanie 4.1

> Źródło: matura.lol — https://matura.lol/question/maturazai-informatyka-inf-2015-05/zad/4.1
> Wersja Markdown strony zadania (dla asystentów AI). Przy cytowaniu podaj matura.lol i link powyżej.

- arkusz: Informatyka · Matura · maj 2015 (rozszerzona)
- rok: 2015
- poziom: rozszerzona
- typ: open
- punkty: 3
- działy: Programowanie i algorytmika, programowanie

## Treść

Zadanie 4. Liczby binarne

W pliku liczby.txt znajduje się 1000 liczb naturalnych zapisanych binarnie. Każda liczba zapisana jest w osobnym wierszu. Każda liczba binarna zawiera co najwyżej 250 cyfr binarnych, co oznacza, że w wielu językach programowania wartości niektórych z tych liczb nie da się zapamiętać w pojedynczej zmiennej typu całkowitoliczbowego.

Przykład: Dla zestawu liczb 101011010011001100111, 10001001, 1000000, 101010011100, 100010 - wynikiem jest 3 (3 liczby mają w zapisie więcej zer niż jedynek).

Podaj, ile liczb z pliku liczby.txt ma w swoim zapisie binarnym więcej zer niż jedynek.

## Rozwiązanie — maturazai.pl (AI)

## Poprawna odpowiedź

**422** liczb z pliku liczby.txt ma więcej zer niż jedynek w zapisie binarnym.

## Sposób 1 - przetwarzanie ciągu znaków (każda liczba to STRING, nie int)

Kluczowa obserwacja: liczby mają do 250 cyfr binarnych → nie mieszczą się w int64 (max ~63 bity). Dlatego traktujemy każdą liczbę jako **string** i zliczamy znaki.

**Python:**
```python
licznik = 0
with open('liczby.txt') as f:
for linia in f:
s = linia.strip() # usuwa whitespace, \n
zera = s.count('0')
jedynki = s.count('1')
if zera > jedynki:
licznik += 1
print(licznik) # 422

## Sposób 2 - implementacja w C++ i Pascal

**C++:**
```cpp
#include <iostream>
#include <fstream>
#include <string>
using namespace std;

int main() {
ifstream plik("liczby.txt");
string linia;
int licznik = 0;
while (plik >> linia) {
int zera = 0, jedynki = 0;
for (char c : linia) {
if (c == '0') zera++;
else if (c == '1') jedynki++;
}
if (zera > jedynki) licznik++;
}
cout << licznik << endl; // 422
return 0;
}

**Pascal:**
```pascal
program LiczbyBinarne;
var
f: TextFile;
s: String;
i, zera, jedynki, licznik: Integer;
begin
AssignFile(f, 'liczby.txt');
Reset(f);
licznik := 0;
while not Eof(f) do
begin
Readln(f, s);
zera := 0; jedynki := 0;
for i := 1 to Length(s) do
if s[i] = '0' then Inc(zera)
else if s[i] = '1' then Inc(jedynki);
if zera > jedynki then Inc(licznik);
end;
CloseFile(f);
Writeln(licznik); // 422
end.

## Reference informatyczny - operacje na napisach

> Reference - String processing:
> - **Python**: `s.count('0')` - liczba wystąpień znaku '0'. O(n).
> - **C++**: `std::count(s.begin(), s.end(), '0')` z `<algorithm>`. Lub pętla for.
> - **Pascal**: pętla for i := 1 to Length(s).
> - **Plik tekstowy**: czytanie linijka po linijce - `for line in f` (Python), `getline()` (C++), `Readln` (Pascal).
> - Kluczowe: liczby binarne mogą być długie (250 cyfr = ~10^75) - NIE używaj typu int!

## Schemat oceniania CKE

> Klucz CKE (zadanie 4.1, max 3 pkt):
> - **3 pkt** - poprawna odpowiedź **422**
> - **2 pkt** - uwzględnienie tylko 250 wierszy (wynik: 98) - częsty błąd Pascala przy odczycie ograniczonym
> - **1 pkt** - nieuwzględnienie ostatniego znaku w wierszu (wynik: 419) - np. zatrzymanie pętli na n-1
> - **0 pkt** - odpowiedź niepełna lub błędna albo brak

## Typowe pułapki

- **Konwersja na int**: `int('1010 250bitów', 2)` w Pythonie zadziała (Python ma arbitrary precision), ale w C++/Pascal `long long` to maksimum 63 bity - przepełnienie. Lepiej trzymać jako string.
- **Pomylenie liczby zer z jedynkami** - sprawdź `zera > jedynki`, nie `zera >= jedynki`.
- **Zliczanie ostatniego znaku** - w Pascal `Length(s)` zwraca długość włącznie z ostatnim znakiem.
- **Pomylenie czytania**: w Pascal `Readln(f, s)` wczytuje całą linię razem z `\n`. Sprawdź czy nie ma whitespace na końcu.
- **Limit 250 wierszy zamiast 1000** - Pascal ma czasem domyślny limit linii w starych wersjach.

## Złożoność obliczeniowa

- Przetwarzanie pliku: O(N · L), gdzie N = 1000 (liczb), L = 250 (max długość). To O(250 000) = bardzo szybko.
- Pamięć: O(L) (jedna linia w pamięci na raz).
- **Całkowita: O(N · L)**.

## Linki

- [dane JSON](https://matura.lol/api/question/maturazai-informatyka-inf-2015-05/zad/4.1)
- [otwórz w wyszukiwarce](https://matura.lol/?problem=maturazai-informatyka-inf-2015-05%2Fzad%2F4.1)

## Podobne zadania

- [Zadanie 2](https://matura.lol/question/informatyka-2025-maj-matura-rozszerzona/zad/2) — Zadanie 2. Zapis symboliczny W pliku symbole.txt zapisano 2000 napisów. Każdy z nich jest zapisany w osobnym wierszu i składa się z dokładnie 12 znaków spośród:
- [Zadanie 7](https://matura.lol/question/informatyka-2025-maj-matura-rozszerzona/zad/7) — Zadanie 7. Poszukiwanie wody na Marsie W trzech plikach tekstowych o nazwach laziki.txt, obszary.txt, pomiary.txt zapisano informacje zawierające dane o poszuki
- [Zadanie 3](https://matura.lol/question/informatyka-2023-maj-matura-rozszerzona/zad/3) — Zadanie 3. Liczba Pi Pewien matematyk jest zafascynowany liczbą π ≈ 3,14159265 do tego stopnia, że zapisał jej rozwinięcie dziesiętne z dokładnością do 10 000 c
- [Zadanie 3](https://matura.lol/question/informatyka-2025-maj-matura-rozszerzona/zad/3) — Zadanie 3. Dron Tor lotu pewnego drona składa się z prostych odcinków. Lot rozpoczyna się w punkcie (0, 0), a kończy w punkcie (20000, 0). Dron poza startem i l

_Ostatnia aktualizacja danych: 2026-10-03_
