Teorie
În C++ lucrăm cu fișiere folosind biblioteca <fstream>. Cele mai folosite clase sunt:
ifstream– pentru citirea din fișierofstream– pentru scrierea în fișierfstream– pentru citire și scriere în același fișier
Notă: se presupune using namespace std;
Instrucțiuni de bază
| Pseudocod | C++ |
|---|---|
| Deschide fișier pentru citire | ifstream f("date.in"); |
| Deschide fișier pentru scriere | ofstream g("date.out"); |
| Citește x din fișier | f >> x; |
| Scrie x în fișier | g << x; |
| Închide fișier | f.close(); g.close(); |
Exemple
1. Citirea unui număr din fișier
#include
#include
using namespace std;
int main() {
ifstream f("date.in");
int x;
f >> x;
cout << "Numărul citit este: " << x;
f.close();
return 0;
}
2. Scrierea unui număr în fișier
#include
#include
using namespace std;
int main() {
ofstream g("date.out");
int x = 42;
g << "Numărul scris este: " << x;
g.close();
return 0;
}
3. Citirea numerelor până la EOF
#include
#include
using namespace std;
int main() {
ifstream f("date.in");
ofstream g("date.out");
int x, suma = 0;
while (f >> x) suma += x;
g << "Suma numerelor este: " << suma;
return 0;
}
4. Numărarea numerelor din fișier
#include
#include
using namespace std;
int main() {
ifstream f("date.in");
int x, cnt = 0;
while (f >> x) cnt++;
cout << "Fișierul conține " << cnt << " numere.";
}
Exerciții propuse
-
Fișierul text divizibile.txt conține, pe o singură linie, cel mult 1000 de numere naturale nenule cu cel mult 4 cifre fiecare, separate prin câte un spațiu. Scrieți un program C/C++ care citește de la tastatură un număr natural nenul k și afișează pe ecran, separate prin spațiu, toate numerele din fișier care sunt divizibile cu k. Dacă nu există astfel de numere, afișați mesajul NU EXISTA.
Exemplu: dacă fișierul divizibile.txt conține numerele 10 43 500 534 23200 3400 și k=10, se va afișa: 10 500 23200 3400 -
Scrieţi un program C/C++ care citeşte de la tastatură un număr natural n (n≤50) şi care afişează pe prima linie a fişierului BAC.TXT primele n numere impare, pe a doua linie primele n-1 numere impare, ..., pe linia n primul număr impar. Numerele vor fi afişate pe fiecare linie în ordine crescătoare şi vor fi separate prin câte un spaţiu.
Exemplu: dacă n=3, fişierul BAC.TXT va avea conţinutul:
1 3 5
1 3
1 -
Fişierul BAC.TXT conţine pe prima linie un număr natural n (0<n≤1000000) şi pe a doua linie n numere naturale nenule (cu cel mult 7 cifre fiecare) ordonate crescător. Scrieţi un program C/C++ care citeşte toate numerele şi determină pentru fiecare număr cea mai mică putere a lui 3 mai mare sau egală cu acesta. Numerele determinate se vor afişa pe ecran, separate prin spaţiu.
Exemplu: dacă fişierul conţine: 5 3 5 8 9 12, se va afişa: 3 9 9 9 27
b) Explicaţi succint algoritmul utilizat şi eficienţa metodei. -
Fişierul TAX.TXT conţine pe prima linie un număr natural n (0<n≤1000) şi pe a doua linie n numere naturale nenule (cu cel mult 9 cifre fiecare). Scrieţi un program C/C++ care afişează câte elemente palindrom încadrate între două numere pare se află în şirul de pe a doua linie.
Exemplu: dacă fişierul conţine: 6 12 1221 52 121 1235 4233, se va afişa: 1 -
Fişierul BAC.TXT conţine mai multe numere naturale cu cel mult 6 cifre fiecare, câte un număr pe linie. Scrieţi un program C/C++ care afişează toate numerele, câte patru pe linie, ultima linie putând avea mai puţin de patru numere.
Exemplu: dacă fişierul conţine: 11 21 30 40 51 16 17 10 1, se va afişa:
11 21 30 40
51 16 17 10
1 -
În fişierul numere.txt sunt memorate între 4 şi 90 de numere întregi cu cel mult patru cifre fiecare, separate prin spaţiu. Scrieţi un program C/C++ care afişează cinci numere consecutive în ordine strict crescătoare. Dacă nu există, se va afişa: NU EXISTA.
Exemplu: dacă fişierul conţine: 60 12 15 25 110 45 25, se va afişa: NU EXISTA -
În fişierul numere.txt sunt memorate mai multe numere reale separate prin spaţiu. Scrieţi un program C/C++ care verifică dacă există cel puţin 12 numere naturale şi afişează DA sau NU.
Exemplu: dacă fişierul conţine: 60 -2.67 15 -1 -25.3 156, se va afişa: NU -
Scrieţi un program C/C++ care citeşte din fişierul BAC.TXT numărul întreg n (1<n<10000) şi un şir de n perechi de numere întregi a b (1<a<b<32000), fiecare pe o linie. Programul afişează pentru fiecare pereche cea mai mare putere a lui 3 din intervalul [a,b] sau 0 dacă nu există.
Exemplu: dacă fişierul conţine:
3
2 69
10 20
19 25
se va afişa: 27 0 0 -
Fişierul LTM.TXT conţine pe prima linie un număr natural n (1<n<1000) şi următoarele n linii conţin câte două numere întregi a şi b (1<a<b<32000), fiecare reprezentând un interval. Programul determină intervalul care conţine cel mai mare număr de valori întregi, afișând capetele cu stânga minimă.
Exemplu: dacă fişierul conţine:
4
17 24
-2 3
9 15
8 15
se va afişa: 8 15 -
Fişierul arc.txt conţine pe prima linie n (1<n<10000), pe a doua linie două numere a şi b (a<b), urmate de n numere întregi. Programul afişează cel mai mare număr format doar din cifre pare în intervalul [a,b] sau NU dacă nu există.
Exemplu: dacă fişierul conţine:
4
8 35
-2 72 14 25
se va afişa: NU -
Fişierul ner.at conţine pe prima linie un număr natural n (2≤n≤100), iar pe a doua linie n numere reale pozitive, strict crescătoare. Programul determină două numere naturale x şi y astfel încât toate numerele se află în intervalul [x;y] şi diferenţa y-x să fie minimă.
Exemplu: dacă fişierul conţine: 6 3.5 5.1 9.2 16 20.33 100, se va afişa: 3 100 -
În fişierul seg.txt sunt memorate pe prima linie n (1<n<100) şi următoarele n linii câte două numere întregi x,y (-100<x<y<100). Programul determină intersecţia tuturor segmentelor, afișând capetele rezultatului sau 0 dacă nu există punct comun.
Exemplu: dacă fişierul conţine:
5
-7 10
3 20
-5 5
0 12
-8 30
se va afişa: 3 5 - Problema 1 – Maximul și minimul alternează
Fișierul DATE.TXT conține pe prima linie un număr natural n (2 < n < 100000), iar pe următoarele n linii câte un număr întreg.
Scrieți un program C/C++ care determină dacă există o poziție în fișier așa încât numărul de pe acea poziție este mai mare decât toate precedentele și mai mic decât toate următoarele. Dacă există, afișați numărul altfel, afișați „NU EXISTĂ”.
Exemplu:
Conținut DATE.TXT:
5
1
3
5
4
2
Rezultat afișat:
5 - Problema 2 – Numere consecutive cu produs par
Fișierul NUMERE.TXT conține pe prima linie un număr natural n (3 < n < 100000), iar pe următoarele n linii câte un număr întreg nenul.
Scrieți un program C/C++ care determină numărul de triplete consecutive de numere pentru care produsul este par. Exemplu:
Conținut NUMERE.TXT:
6
1
2
3
4
5
6
Rezultat afișat:
4 - Identificarea tipului de șir** Fișierul NUMERE.TXT conține pe prima linie un număr natural n (3 ≤ n ≤ 100000), iar pe a doua linie n numere întregi separate prin spațiu.
Scrieți un program C/C++ care determină dacă șirul format din aceste numere este:
- Progresie aritmetică – diferența dintre două elemente consecutive este constantă.
- Progresie geometrică – raportul dintre două elemente consecutive este constant.
- Munte – șirul crește strict până la un punct maxim și apoi scade strict.
- Deal – șirul scade strict până la un punct minim și apoi crește strict.
- Niciuna dintre variante – dacă nu se încadrează în niciuna dintre categoriile de mai sus.
5 2 4 6 8 10
Rezultat:Aritmetică
Exemplul 2: Conținut fișier:4 3 9 27 81
Rezultat:Geometrică
Exemplul 3: Conținut fișier:7 1 3 7 6 4 2 0
Rezultat:Munte
Exemplul 4: Conținut fișier:6 10 7 3 5 9 12
Rezultat:Deal
Exemplul 5: Conținut fișier:5 1 2 4 3 5
Rezultat:Niciuna