# Informatyka — zadanie 4.1

> Źródło: matura.lol — https://matura.lol/question/maturazai-informatyka-inf-2018-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 2018 (rozszerzona)
- rok: 2018
- poziom: rozszerzona
- typ: open
- punkty: 3
- działy: Programowanie i algorytmika

## Treść

Zadanie 4. WEGA

W ramach projektu WEGA naukowcom udało się odczytać sygnały radiowe pochodzące z przestrzeni kosmicznej. Po wstępnej obróbce zapisali je do pliku sygnaly.txt.

W pliku sygnaly.txt znajduje się 1000 wierszy. Każdy wiersz zawiera jedno niepuste słowo złożone z wielkich liter alfabetu angielskiego. Długość jednego słowa nie przekracza 100 znaków.

Napisz program(y), który(e) da(dzą) odpowiedzi do poniższych zadań. Odpowiedzi zapisz w pliku wyniki4.txt, a każdą odpowiedź poprzedź numerem oznaczającym odpowiednie zadanie.

Uwaga: Plik przyklad.txt zawiera dane przykładowe spełniające warunki zadania. Odpowiedzi dla danych z pliku przyklad.txt są podane pod pytaniami.

Naukowcy zauważyli, że po złączeniu dziesiątych liter co czterdziestego słowa (zaczynając od słowa czterdziestego) otrzymamy pewne przesłanie. Wypisz to przesłanie.

**Uwaga:** Każde co czterdzieste słowo ma co najmniej 10 znaków.

Dla danych z pliku przyklad.txt wynikiem jest:
NIECHCIMATURAPROSTABEDZIE

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

## Poprawna odpowiedź

**ZAPISZODPOWIEDZIWPLIKUTXT** (dla sygnaly.txt)

**NIECHCIMATURAPROSTABEDZIE** (dla przyklad.txt)

## Sposób 1 - interpretacja zadania

**"Co czterdzieste słowo zaczynając od czterdziestego":** słowa o numerach 40, 80, 120, 160, , 1000.
Dla 1000 słów: 1000 / 40 = **25 słów** w sekwencji.

**"Dziesiąta litera":** indeks 9 (od 0) lub indeks 10 (od 1).

**Algorytm:**
1. Wczytaj wszystkie słowa.
2. Wybierz słowa o numerach 40, 80, 120, , 1000 (lub w pythonie indeksy 39, 79, 119, ).
3. Z każdego wybranego słowa weź 10. literę.
4. Złącz w jeden string.

## Sposób 2 - implementacja Python

```python
slowa = []
with open('sygnaly.txt', encoding='utf-8') as f:
for linia in f:
s = linia.strip()
if s:
slowa.append(s)

przeslanie = ''
for i in range(40, len(slowa) + 1, 40): # 40, 80, , 1000
slowo = slowa[i - 1] # 40-te słowo to indeks 39
przeslanie += slowo[9] # 10. litera to indeks 9

print(przeslanie) # ZAPISZODPOWIEDZIWPLIKUTXT

# Zapis do pliku
with open('wyniki4.txt', 'w', encoding='utf-8') as f:
f.write(f"4.1 {przeslanie}\n")

**Weryfikacja długości:** liczba liter w przesłaniu = 1000 / 40 = 25. Słowo "ZAPISZODPOWIEDZIWPLIKUTXT" ma 25 liter ✓.

## Sposób 3 - C++

```cpp
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
using namespace std;

int main() {
ifstream f("sygnaly.txt");
vector<string> slowa;
string s;
while (f >> s) slowa.push_back(s);
string przeslanie;
for (int i = 40; i <= (int)slowa.size(); i += 40) {
przeslanie += slowa[i - 1][9]; // 10. litera = indeks 9
}
cout << "4.1 " << przeslanie << endl;
return 0;
}

## Sposób 4 - Pascal

```pascal
program Wega41;
var f: TextFile; s: String; slowa: array[1 1000] of String;
i, n: Integer; przeslanie: String;
begin
AssignFile(f, 'sygnaly.txt'); Reset(f);
n := 0;
while not Eof(f) do begin
Readln(f, s);
if Length(s) > 0 then begin
Inc(n);
slowa[n] := s;
end;
end;
CloseFile(f);
przeslanie := '';
i := 40;
while i <= n do begin
przeslanie := przeslanie + slowa[i][10]; // Pascal indeksuje od 1
i := i + 40;
end;
Writeln('4.1 ', przeslanie);
end.

## Reference informatyczny - przetwarzanie pliku tekstowego

> Reference - Czytanie pliku linia-po-linii:
> - **Python**: `for linia in open('file.txt'):` lub `f.readlines()`.
> - **C++**: `while (f >> s)` lub `getline(f, s)`.
> - **Pascal**: `while not Eof(f) do Readln(f, s)`.
>
> Reference - Indeksowanie znaków:
> - **Python**: od 0. `s[9]` = 10. znak.
> - **C++**: od 0. `s[9]` = 10. znak.
> - **Pascal**: od 1. `s[10]` = 10. znak.
>
> Reference - Co k-ty element:
> - **Range step**: Python `range(40, n+1, 40)` lub `[i for i in range(n) if (i+1) % 40 == 0]`.
> - **C++**: `for (int i = 40; i <= n; i += 40)`.
> - Wzór: `i = k * 40` dla k = 1, 2, , n/40.

## Schemat oceniania CKE

> Klucz CKE (zadanie 4.1, max 3 pkt):
> - **3 pkt** - prawidłowa odpowiedź **ZAPISZODPOWIEDZIWPLIKUTXT**
> - **1 pkt** - wynik z 1 błędem (np. zła litera)
> - **0 pkt** - błędna lub brak
>
> **Uwaga: NIE PRZYZNAJE SIĘ 2 PUNKTÓW.**

## Typowe pułapki

- **Off-by-one przy indeksie litery** - "dziesiąta" to indeks 9 (Python) lub 10 (Pascal). Łatwo wziąć 9. (indeks 8) lub 11. (indeks 10).
- **Off-by-one przy numerze słowa** - "40-te" to indeks 39 w Python, 40 w Pascal. Lepiej iterować jasno: `for i in [40, 80, ]`.
- **"Zaczynając od czterdziestego"** - pierwsze słowo to numer 40, NIE pierwsze (1) ani 41-sze.
- **Pomyłka z "co czterdzieste"** - `range(40, 1001, 40)` da 40, 80, , 1000 = 25 elementów. NIE `range(40, 1000, 40)` które zatrzymuje się na 960.
- **Nieskasowanie newline** - `.strip()` lub `s.trim()` na końcu.
- **Słowo krótsze niż 10 znaków** - gwarancja z treści: "każde co czterdzieste ma co najmniej 10 znaków".

## Złożoność obliczeniowa

- Wczytanie 1000 słów: **O(N)**.
- Przejście co 40-te: **O(N/40)** = O(25).
- Pobranie 10. litery: O(1).
- **Łącznie: O(N) ≈ 1000 operacji.**

## Linki

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

## Podobne zadania

- [Zadanie 3](https://matura.lol/question/informatyka-2026-maj-matura-rozszerzona/zad/3) — Zadanie 3. Pary slow W pliku tekstowym pary.txt znajduje sie 500 par slow zlozonych z liter alfabetu angielskiego a, b, , z. Kazda para slow jest zapisana w oso
- [Zadanie 2](https://matura.lol/question/informatyka-2026-maj-matura-rozszerzona/zad/2) — Zadanie 2. Dodawanie Rozwazamy dodawanie pisemne dwoch liczb zapisanych w systemie dziesietnym, zilustrowane na przykladzie. Przeniesienie: 1 1 1 1 Liczba a: 2 
- [Zadanie 4.2](https://matura.lol/question/informatyka-2020-lipiec-matura-rozszerzona-2/zad/4.2) — Zadanie 4.2. (0-4) Podaj wszystkie te identyfikatory dokumentów z pliku identyfikator.txt, których seria lub numer są palindromami, czyli czytane od lewej do pr
- [Zadanie 4.2](https://matura.lol/question/informatyka-2018-maj-matura-rozszerzona-2/zad/4.2) — Kontekst - patrz zadanie 4.1. Znajdź słowo, w którym występuje największa liczba **różnych** liter. Wypisz to słowo i liczbę występujących w nim różnych liter. 

_Ostatnia aktualizacja danych: 2026-10-03_
