Praca z Plikami (Odczyt i Zapis)
Każde zadanie na maturze wymaga wczytania danych z pliku .txt oraz zapisania wyniku do pliki wynik.txt. Naucz się najlepszych praktyk wejścia / wyjścia.
Obsługa Plików Tekstowych (.txt)
Rozwiązanie matury z informatyki zaczyna się od umiejętności otwarcia pliku dane.txt i zrzucenia go do pamięci. Kończy się natomiast zapisaniem rozwiązania do wynikiX.txt. Bez tej wiedzy nie zdobędziesz punktów za praktykę!
Poniżej znajdziesz uniwersalne skrypty do czytania i zapisywania plików w obu językach. W Pythonie korzystamy ze świetnego, automatycznie zamykającego menedżera kontekstu with open(), natomiast w C++ podpinamy się strumieniami ifstream i ofstream.
1. Wczytywanie Danych
Podstawą jest przeczytanie danych i usunięcie z nich znaków przejścia do nowej linii (\n). W Pythonie używamy funkcji strip(), a w C++ strumień >> automatycznie ignoruje białe znaki.
Python
# Menedżer 'with' gwarantuje, że plik automatycznie się zamknie
# Dodajemy parametr encoding='utf-8', by polskie znaki nie stanowiły problemu
tablica_danych = []
with open("dane.txt", "r", encoding="utf-8") as plik:
for linia in plik:
# strip() usuwa białe znaki z obu stron, w tym szkodliwe '\n'
czysta_linia = linia.strip()
# Jeśli plik zawiera liczby, konwertujemy napis na int()
# liczba = int(czysta_linia)
tablica_danych.append(czysta_linia)
print("Wczytano elementów:", len(tablica_danych))C++
#include <iostream>
#include <fstream>
#include <vector>
#include <string>
using namespace std;
int main() {
vector<string> tablicaDanych;
string linia;
// Tworzymy strumień wejściowy z pliku (input file stream)
ifstream plik("dane.txt");
// Zawsze sprawdzaj, czy plik istnieje i nie ma błędu!
if (!plik.is_open()) {
cout << "Blad! Nie mozna otworzyc pliku!" << endl;
return 1;
}
// operator >> wczytuje do najbliższej spacji / nowej linii
while (plik >> linia) {
tablicaDanych.push_back(linia);
}
plik.close(); // Pamiętamy o zamknięciu
cout << "Wczytano elementow: " << tablicaDanych.size() << endl;
return 0;
}2. Zapisywanie Wyników
Zapisywanie na maturze odbywa się często według wzorca: "Odpowiedzi do zadania 4.1 zapisz w pliku wyniki4.txt, podając każdą odpowiedź w oddzielnym wierszu".
Pamiętaj o dodaniu odpowiedniego zakończenia linii (w Pythonie \n, w C++ endl lub \n). Zapis do pliku nadpisze istniejący plik (jeśli go otworzymy w trybie "w" / nadpisywania, co jest domyślne dla C++ ofstream).
Python
wyniki = [100, 200, 300, 400]
# Tryb 'w' (write) stworzy nowy plik, lub NADPISZE stary
with open("wyniki4.txt", "w", encoding="utf-8") as plik:
plik.write("Zadanie 4.1:\n")
for w in wyniki:
# plik.write() przyjmuje tylko stringi, dlatego rzutujemy przez str()
plik.write(str(w) + "\n")C++
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
int main() {
vector<int> wyniki = {100, 200, 300, 400};
// output file stream
ofstream plik("wyniki4.txt");
if (plik.is_open()) {
plik << "Zadanie 4.1:\n";
for (int w : wyniki) {
// Wygodny zapis przypominający cout
plik << w << "\n";
}
plik.close();
}
return 0;
}[!TIP] Dla dociekliwych: Różnica między trybem dopisywania a nadpisywania Jeśli na maturze chcesz wypluwać odpowiedzi w osobnych funkcjach po kawałku do tego samego pliku
wyniki4.txt, możesz otworzyć plik w trybie Dopisywania (Append). W Pythonie używasz argumentu"a"(append):open("wyniki4.txt", "a"). W C++ podajesz dodatkową flagęios::app:ofstream plik("wyniki4.txt", ios::app);. Dzięki temu stare logi się nie usuną!
