Fisiere Text

Declararea, închiderea şi deschiderea fişierelor în C++ utilizează anumite clase şi funcţii care sunt declarate în biblioteca fstream.h.
#include<fstream.h>
Declararea fişierelor
Pentru a putea citi/scrie informaţii dintr-un/într-un fişier, acesta se asociază unui stream (flux) de intrare/ieşire.
ifstream nume_fişier_logic (nume_fişier); deschiderea unui fisier pentr a citi date
ofstream nume_fişier_logic (nume_fişier);
deschiderea unui fisier pentru a scrie date
Exemplu:
fisier de intrare fişier de iesire
ifstream f(”numere.in”); ofstream g(”numere.out”);
Crearea unui fisier cu date ce urmeaza a fi citite prin program
FILEà Newà
- scriem date in fisier
- salvam fisierul cu numele specificat intre parantezele rotunde ale functiei ifstream
(de exemplu numere.in)CITIREA datelor

de la tastatura
din fisier
#include<iostream.h>
void main()
{ int x;
cin>>x;citim un numar
}
#include<fstream.h>
void main()
{
ifstream f(”numere.in”);
int x;

f>>x; citim un numar din fisier
}


Fisierele de iesire, cele in care se vor afisa rezultatele NU trebuie create de noi, le va crea programul.

SCRIEREA datelor

Pe ecran
in fisier
#include<iostream.h>
void main()
{ int x;
cin>>x;
cout<<x;
}
#include<fstream.h>
void main()
{
ifstream f(”numere.in”);
ofstream g(”numere.out”);
int x;
f>>x; citim un numar din fisier
g<<x;scriem in fisier
}


ATENTIE:
NU mai utilizati clrscr() si getch() cand lucrati cu fisiere!
Funcţii utile în prelucrarea fişierelor text

eof() – se utilizează pentru detectarea sfârşitului de fişier. Funcţia returnează 0 dacă valoarea curentă nu este sfârşitul de fişier şi 1 în caz contrar.
f.close() – se utilizează pentru închiderea fişierului
CITIREA datelor din fisier

este cunoscut numarul n al valorilor
cand nu este cunoscut numarul valorilor din fisier
Enunt: Se citesc n numere intregi , calculati suma lor si afisati aceasta suma in fisierul date.out.

#include<fstream.h>
void main()
{
ifstream f(”date.in”);
ofstream g(”date.out”);
int x,s=0,n;
f>>n;
for(i=1;i<=n;i++)
{ f>>x;
s=s+x;
}
g<<s;
f.close();g.close();
}
Enunt: Se citesc toate numerele intregi din fisierul date.in, calculati suma lor si afisati aceasta suma in fisierul date.out.
VARIANTA 1
#include<fstream.h>
void main()
{
ifstream f(”date.in”);
ofstream g(”date.out”);
int x,s=0;
while(f>>x)
s=s+x;
g<<s;
f.close();g.close();
}
VARIANTA 2
#include<fstream.h>void main()
{
ifstream f(”date.in”);
ofstream g(”date.out”);
int x,s=0;
f>>x;
while(!f.eof())
{s=s+x;
f>>x;}
g<<s;
f.close();g.close();
}


Enunt: Se citesc n numere intregi , calculati suma lor si afisati aceasta suma in fisierul date.out.
Enunt: Se citesc toate numerele intregi din fisierul date.in, calculati suma lor si afisati aceasta suma in fisierul date.out.
Aplicatii:
Problema: Buchete
(olimpiada locala de informatica 2003 – autor: Crstina Iordaiche)
La o florarie s-au primit n (n<=30000) fire de flori. Din fisierul buchete.in se citeste numarul n.
Florareasa doreste sa le aranjeze in vaze astfel incat:
- toate vazele sa contina acelasi numar de flori
- numarul florilor din vaza sa fie impar
Cerinta: Afisati in fisierul buchete.out, in cate moduri poate imparti florareasa cele n fire de flori.
Pentru fiecare caz afisati numarul de vaze necesare si cate flori va contine fiecare vaza.
Exemplu:
n=9
1 vaza a cate 9 flori
3 vaze a cate 3 flori
9 vaze cate 1 floare
———————-
Florile se pot imparti in 3 moduri:
Problema:Parola
(Concursul National de informatica SATU MARE 2009 – autor: Crstina Iordaiche)
La un joc computerizat trecerea de la un nivel la altul se face prin intermediul unei parole in functie de punctajul obtinut de jucator, la nivelul anterior. Parola este un numar de maxim 9 cifre, cel mai mare posibil care se obtine luand in considerare o singura data toate cifrele ce fac parte din punctajul realizat de jucator. Citindu-se din fisierul parola.in punctajul P obtinut de jucator, afisati in fisierul parola.out, parola ce trebuie tastata pentru trecerea la nivelul urmator.
Exemplu:
P= 41100 parola=410
Probleme pentru pregatire in vederea participarii la olimpiada:http://olimpiada.info/oji2007/index.php?cid=arhiva

http://campion.edu.ro/arhiva/index.php?page=problem&action=view&id=912
http://campion.edu.ro/arhiva/index.php?page=problem&action=view&id=413
http://campion.edu.ro/arhiva/index.php?page=problem&action=view&id=407