Programowanie

Wczytywanie i zapisywanie plików na maturze z informatyki - Kompletny poradnik dla Pythona i C++

KI

KursInformatyka

Eksperci od przygotowania do matury z informatyki

16 min
Obraz główny artykułu: Wczytywanie i zapisywanie plików na maturze z informatyki - Kompletny poradnik dla Pythona i C++

Dlaczego obsługa plików jest absolutnie kluczowa na maturze?

Dlaczego to kluczowe?

99% zadań praktycznych na egzaminie wymaga wczytania danych z pliku i zapisania wyników do innego pliku. Nawet genialny algorytm jest bezużyteczny, jeśli nie potrafisz poprawnie dostarczyć mu danych!

Typowe formaty danych w plikach maturalnych

Zanim przejdziemy do kodu, musisz wiedzieć, z czym będziesz pracować. Arkusze maturalne najczęściej wykorzystują kilka prostych formatów danych w plikach .txt:

  • Jedna wartość na linię: Najprostszy przypadek. Każdy wiersz pliku zawiera jedną liczbę lub jedno słowo.
  • Wiele wartości w jednej linii: Wartości w wierszu są oddzielone stałym separatorem, najczęściej spacją lub tabulatorem.
  • Mieszane struktury: Niektóre linie mogą zawierać nagłówki lub dane różnego typu. Kluczem jest wtedy identyfikacja wzorca.

W naszym poradniku pokażemy, jak radzić sobie z każdym z tych scenariuszy.

Python: Nowoczesne i Bezpieczne Podejście

Zrozumieć with open() - Twój Najlepszy Przyjaciel

Zawsze używaj `with open()`!

To tzw. menedżer kontekstu, który gwarantuje, że plik zostanie automatycznie zamknięty po zakończeniu pracy z nim, nawet jeśli w kodzie wystąpi błąd. Dodaj też encoding='UTF-8' aby uniknąć problemów z polskimi znakami.

Struktura open('nazwa_pliku', 'tryb') przyjmuje dwa kluczowe argumenty: nazwę pliku oraz tryb otwarcia. Najważniejsze tryby na maturze to 'r' (read - do odczytu) i 'w' (write - do zapisu, nadpisuje istniejący plik lub tworzy nowy). Dobrą praktyką jest też dodanie kodowania: encoding='UTF-8', aby uniknąć problemów z polskimi znakami.

Scenariusz 1: Wczytywanie jednej wartości na linię

To najczęstszy przypadek. Przechodzimy przez plik pętlą for, a w każdej iteracji przetwarzamy jedną linię. Pamiętaj: każda wczytana linia zawiera na końcu ukryty znak nowej linii (\n). Musisz go usunąć metodą .strip() przed konwersją na liczbę.

# Plik dane.txt zawiera liczby, każda w nowej linii
liczby = []
with open('dane.txt', 'r', encoding='UTF-8') as plik:
    for linia in plik:
        # 1. Usuń białe znaki (w tym '\n') z końca i początku linii
        czysta_linia = linia.strip()
        # 2. Skonwertuj oczyszczony string na liczbę całkowitą
        liczba = int(czysta_linia)
        # 3. Dodaj liczbę do naszej listy
        liczby.append(liczba)

print(f"Wczytano {len(liczby)} liczb. Pierwsza z nich to: {liczby[0]}")
python

Scenariusz 2: Wczytywanie wielu wartości z jednej linii

Gdy w jednej linii masz kilka liczb oddzielonych spacjami, kluczową metodą jest .split(). Dzieli ona tekst na listę mniejszych tekstów, używając spacji jako domyślnego separatora.

# Plik dane.txt zawiera w każdej linii kilka liczb po spacji, np. "10 5 8 22"
with open('dane.txt', 'r', encoding='UTF-8') as plik:
    for linia in plik:
        # linia to np. "10 5 8 22\n"
        czysta_linia = linia.strip() # czysta_linia to "10 5 8 22"
        
        # Podziel string na listę stringów: ["10", "5", "8", "22"]
        fragmenty = czysta_linia.split(' ')
        
        # Teraz musimy skonwertować każdy fragment na liczbę
        liczby_z_linii = []
        for fragment in fragmenty:
            liczby_z_linii.append(int(fragment))
        
        # Mamy gotową listę liczb z jednej linii
        print(f"Suma liczb w tej linii to: {sum(liczby_z_linii)}")
python

C++: Niezawodna Klasyka

Biblioteka i strumienie plikowe

W C++ za obsługę plików odpowiada biblioteka . Dostarcza ona dwa kluczowe obiekty (typy danych): ifstream (input file stream) do wczytywania oraz ofstream (output file stream) do zapisywania. Praca z nimi jest nieco bardziej sformalizowana niż w Pythonie, ale opiera się na prostych, powtarzalnych krokach.

Złota zasada w C++: zawsze sprawdzaj, czy plik się otworzył (plik.is_open()), i zawsze zamykaj go na końcu (plik.close()).

Scenariusz 1: Wczytywanie danych linia po linii (getline)

Idealne, gdy każda linia to jeden, spójny fragment danych (np. imię i nazwisko), który chcesz wczytać w całości. Pętla while (getline(plik, zmienna)) to standardowy i bezpieczny sposób na przetworzenie całego pliku.

#include <iostream>
#include <fstream>
#include <string>
#include <vector>

int main() {
    std::ifstream plik("dane.txt"); // Otwórz plik w konstruktorze
    std::vector<int> liczby;

    if (plik.is_open()) {
        std::string linia;
        while (getline(plik, linia)) {
            // getline wczytuje całą linię, ale bez znaku '\n'
            int liczba = std::stoi(linia); // Konwertuj string na int
            liczby.push_back(liczba);
        }
        plik.close();
        std::cout << "Wczytano " << liczby.size() << " liczb." << std::endl;
    } else {
        std::cout << "Nie mozna otworzyc pliku!" << std::endl;
    }
    return 0;
}
cpp

Scenariusz 2: Wczytywanie wartości oddzielonych spacją

Jeśli dane w pliku są rozdzielone spacjami lub enterami, możesz wykorzystać operator strumieniowy >>. Działa on podobnie do cin - wczytuje dane do zmiennej, automatycznie pomijając białe znaki (spacje, tabulatory, entery). Pętla while (plik >> zmienna) będzie działać, dopóki w pliku są dane, które da się wczytać.

#include <iostream>
#include <fstream>
#include <vector>

int main() {
    std::ifstream plik("dane.txt"); // Plik zawiera liczby oddzielone spacjami/enterami
    std::vector<int> liczby;
    int aktualna_liczba;

    if (plik.is_open()) {
        // Pętla wczytuje kolejne liczby do zmiennej, dopóki jest to możliwe
        while (plik >> aktualna_liczba) {
            liczby.push_back(aktualna_liczba);
        }
        plik.close();
        std::cout << "Wczytano " << liczby.size() << " liczb." << std::endl;
    } else {
        std::cout << "Nie mozna otworzyc pliku!" << std::endl;
    }
    return 0;
}
cpp

Zapisywanie Wyników do Pliku - Ostatni Krok do Sukcesu

Po przetworzeniu danych musisz zapisać odpowiedzi w pliku wyjściowym. Logika jest bardzo podobna do wczytywania.

Zapisywanie w Pythonie

Używamy tej samej konstrukcji with open, ale w trybie 'w' (write). Metoda plik.write() zapisuje tekst do pliku. Ważne: write nie dodaje automatycznie znaku nowej linii. Musisz dodać \n samodzielnie, jeśli chcesz, aby każdy zapis był w nowym wierszu.

wyniki = [100, 200, 300]
with open('wyniki.txt', 'w', encoding='UTF-8') as plik_wynikowy:
    for wynik in wyniki:
        # Konwertuj liczbę na string i dodaj znak nowej linii
        linia_do_zapisu = str(wynik) + '\n'
        plik_wynikowy.write(linia_do_zapisu)
    
    # Zapisanie odpowiedzi do konkretnego podpunktu
    plik_wynikowy.write("Zadanie 4.1: To jest moja odpowiedz\n")
python

Zapisywanie w C++

Analogicznie do ifstream, do zapisu używamy obiektu ofstream. Zapis odbywa się za pomocą operatora <<, dokładnie tak samo jak w przypadku cout. Użycie std::endl automatycznie dodaje znak nowej linii.

#include <iostream>
#include <fstream>
#include <vector>

int main() {
    std::ofstream plik_wynikowy("wyniki.txt");
    std::vector<int> wyniki = {100, 200, 300};

    if (plik_wynikowy.is_open()) {
        plik_wynikowy << "Zadanie 4.1:" << std::endl;
        for (int wynik : wyniki) {
            plik_wynikowy << wynik << std::endl;
        }
        plik_wynikowy.close();
    } else {
        std::cout << "Nie mozna utworzyc pliku wynikowego!" << std::endl;
    }
    return 0;
}
cpp

Przykładowe zadanie maturalne z wczytywania plików z rozwiązaniem krok po kroku

Poniżej znajdziesz typowe zadanie maturalne dotyczące wczytywania i przetwarzania danych z pliku.

Zadanie: Znajdź największą liczbę w pliku

Treść zadania: W pliku dane.txt znajduje się 1000 liczb całkowitych (każda w osobnej linii). Znajdź największą liczbę w pliku i wypisz ją do pliku wyniki.txt.

Rozwiązanie krok po kroku (Python)

# Krok 1: Wczytaj wszystkie liczby z pliku
liczby = []
with open('dane.txt', 'r', encoding='UTF-8') as plik:
    for linia in plik:
        liczba = int(linia.strip())
        liczby.append(liczba)

# Krok 2: Znajdź maksimum
# Sposób 1: Użyj wbudowanej funkcji
max_liczba = max(liczby)

# Sposób 2: Zrób to ręcznie (pokazuje logikę)
# max_liczba = liczby[0]
# for liczba in liczby:
#     if liczba > max_liczba:
#         max_liczba = liczba

# Krok 3: Zapisz wynik
with open('wyniki.txt', 'w', encoding='UTF-8') as plik:
    plik.write(f'Maksymalna liczba: {max_liczba}\n')

print(f'Maksymalna liczba: {max_liczba}')
python

Wskazówka na maturę

Na maturze często pojawia się wariant: 'Znajdź liczbę spełniającą warunek X (np. podzielną przez 7) i dodatkowo największą.' Wtedy najpierw filtruj dane (if liczba % 7 == 0), a dopiero potem szukaj maksimum w przefiltrowanej liście.

Podsumowanie - Twoja Checklista Obsługi Plików

Opanowanie tych wzorców to 95% sukcesu w kwestii obsługi plików na maturze. Zanim oddasz arkusz, przejdź w myślach przez tę listę:

  • Lokalizacja: Czy pliki dane.txt i mój program są w tym samym folderze?
  • Python - Odczyt: Czy użyłem with open(...)? Czy usuwam białe znaki za pomocą .strip()?
  • Python - Zapis: Czy otworzyłem plik w trybie 'w'? Czy pamiętałem o dodaniu \n na końcu każdej linii?
  • C++ - Odczyt i Zapis: Czy dołączyłem ? Czy sprawdziłem is_open()? Czy zamknąłem plik close()?
  • Konwersja Danych: Czy zamieniłem wczytany tekst na liczby (int, stoi) przed wykonywaniem na nich obliczeń?
  • Nazwy Plików: Czy pliki wyjściowe nazywają się dokładnie tak, jak podano w poleceniu (np. wyniki4.txt)?

Systematyczne ćwiczenie tych schematów sprawi, że na egzaminie wykonasz je automatycznie, oszczędzając czas i nerwy na rozwiązywanie właściwego problemu algorytmicznego. Powodzenia!

Szukasz więcej praktyki? Sprawdź pełny kurs do matury z informatyki.

Tagi:

matura
informatyka
python
c++
pliki
programowanie
poradnik

Udostępnij artykuł:

KI

O autorze: KursInformatyka

Zespół ekspertów specjalizujących się w przygotowaniu do matury z informatyki. Pomagamy uczniom osiągnąć wymarzony wynik na egzaminie.

Zobacz wszystkie artykuły

Bądź na bieżąco

Zapisz się do newslettera i otrzymuj najnowsze artykuły, porady i materiały prosto na swoją skrzynkę.

Twoje dane są bezpieczne. Możesz wypisać się w każdej chwili.