Scrierea într-un fișier
#include <iostream>
#include <fstream>
using namespace std;
int main() {
int suma = 42;
ofstream fout("rezultat.out");
fout << suma << "\n";
fout.close();
ifstream verificare("rezultat.out");
int x;
verificare >> x;
cout << x;
return 0;
}ofstream creează fișierul (sau îl golește dacă există). Se folosește identic cu cout.
Tiparul fundamental: citește → filtrează → scrie
Cerință tip: "în bac.out scrieți numerele PARE din bac.in, separate prin spațiu".
#include <iostream>
#include <fstream>
using namespace std;
int main() {
ofstream pregatire("bac.in");
pregatire << "5 8 3 12 7 4";
pregatire.close();
ifstream fin("bac.in");
ofstream fout("bac.out");
int x;
while (fin >> x)
if (x % 2 == 0)
fout << x << " ";
fin.close();
fout.close();
ifstream citire("bac.out");
string linie;
getline(citire, linie);
cout << linie;
return 0;
}Variațiile care apar la examen
1. Maxim + de câte ori apare (o singură parcurgere):
#include <iostream>
#include <fstream>
using namespace std;
int main() {
ofstream pregatire("bac.in");
pregatire << "5 12 3 12 7";
pregatire.close();
ifstream fin("bac.in");
ofstream fout("bac.out");
int x, maxim = -2000000000, nr = 0;
while (fin >> x) {
if (x > maxim) { maxim = x; nr = 1; }
else if (x == maxim) nr++;
}
fout << maxim << " " << nr;
fin.close();
fout.close();
cout << maxim << " " << nr;
return 0;
}Atenție: Numaratorul se pune pe 1 chiar in momentul in care se gaseste un maxim nou, nu la final. In Pascal, maxim e declarat longint: tipul integer nu poate tine -2000000000 si valoarea s-ar strica prin depasire.
2. Media valorilor pozitive: sumă + contor doar pe pozitive, la final (double)s / n cu verificarea n > 0.
3. Transfer cu transformare: fiecare număr citit se scrie modificat (dublat, fără ultima cifră etc.): aceeași buclă, altă expresie la scriere.
De ce nu "încarci tot în vector"
Fișierele de BAC pot avea până la un milion de valori: prelucrarea DIN MERS (fără memorare) e cerută explicit la multe subiecte ("eficient din punct de vedere al memoriei"). Tiparele de mai sus folosesc O(1) memorie: argumentul de eficiență cerut la subiectul III.
Greșeli frecvente
- ofstream pe fișierul de INTRARE îl golește: verifică de două ori numele.
- Maximul inițializat cu 0 pică pe fișiere doar cu negative: folosește o valoare-santinelă foarte mică.
- La medie, împărțirea întreagă și împărțirea la 0 sunt ambele depunctate: (double) și if (n > 0).