You are on page 1of 6

Clasa a IX-a A, E

Prelucrarea secvenelor de valori din fiiere

Despre preluarea datelor dintr-un fisier, o problema ne poate anunta ca avem:


- un numar determinat de valori: Se citesc dintr-un fisier o valoare N si apoi N valori
- un numar nedeterminat de valori: Fisierul contine valori de tip

1. Prelucrarea unui numar determinat de valori


Evident, intai trebuie citita valoarea n si apoi, pe rand fiecare valoare din fisier, de exact N ori. Imediat
dupa citire, valoarea citita poate fi prelucrata.
Forma general pentru rezolvarea acestui tip de probleme este urmtoarea:
f>>n; //citim numarul de valori din fisier
for(i=1;i<=n;i++) //pentru celelalte n valori
{
f>>nr; //citim o valoare din fiier
//prelucreaza nr
}

1.1. Determinarea valorilor pare/impare din fiier


Fiierul pare.in conine pe prima linie un numr natural n i pe adoua linie n valori ntregi separate printr-un
spaiu. S se afieze n fiierul pare.out toate numerele pare din fiierul de intrare, pe o singur linie separate
printr-un spaiu.
Exemplu:

pare.in pare.out Explicaie


7 6 76 8 100 Valorile pare din fiierul pare.in
45 6 76 8 9 11 100 sunt: 6 76 8 100
Rezolvare: vom folosi algoritmul descris mai sus. n acest caz prelucrarea valorii din fiier nseamn s
verificm dac am citit o valoare par i n caz afirmativ s o afim n fiierul de ieire, urmat de un spaiu.

#include <iostream>
#include <fstream>

using namespace std;

ifstream f(..............); //declararea fisierului de intrare


ofstream g(..); //declararea fisierului de iesire

int n, nr, i;

int main()
{
f>>n; //citim numarul de valori din fisier
for(i=1;i<=n;i++) //pentru celelalte n valori
{
f>>nr; //citim o valoare din fiier
if( .........)//daca valoarea citita e para
{
.....//afisam valoarea in fisierul de iesire urmata de spatiu
} //sfarsit if
} //sfarsit for

return 0;
}

1
Clasa a IX-a A, E

Fiierul impare1.in conine pe prima linie un numr natural n i pe a doua linie n valori ntregi separate printr-
un spaiu. S se afieze n fiierul impare1.out cte numere pare sunt n fiierul de intrare
Exemplu:

impare1.in impare1.out Explicaie


7 3 Valorile pare din fiierul pare1.in sunt: 45, 9,
45 6 76 8 9 11 100 11. n total 3 valori.
Rezolvare: vom utiliza o variabil k care va numra cte valori impare sunt n fiier. Vom citi cele n valori din
fiier i dac o valoare este impar valoare lui k se incrementeaz.

...................// biblioteci, namespace

................ //declararea fisierului de intrare


.//declararea fisierului de iesire

int n, nr, k, i;

int main()
{
................ //citim numarul de valori din fisier
k=0; //valoarea initiala
................ //pentru celelalte n valori
{
..........; //citim o valoare din fiier
............//daca valoarea citita e impara
{
.....//creste numarul de elemente impare
} //sfarsit if
} //sfarsit for
//afisam in fisierul de iesire cate valori impare sunt
return 0;
}

1.2. De cte ori apare o anumit valoare n fiier


Fiierul date.in conine pe prima linie dou valori naturale m i n separate printr-un spaiu, iar pe a doua linie n
valori ntregi separate printr-un spaiu. S se determine i s se afieze n fiierul date.out de cte ori apare
numrul m printre valorile de pe al doilea rnd al fiierului de intrare.

Exemplu:
date.in date.out Explicaie
6 10 4 Valoarea 6 apare de 4 ori.
3 6 1 5 6 6 8 6 3 10
Rezolvare: O variabil k va numra de cte ori apare valoare m pe a doua linie a fiierului de intrare. Se ciesc
m i n i apoi se repet de n ori: se citete din fiier o valoare i dac aceast valoare este egal cu m, crete
valoarea variabilei k.

2
Clasa a IX-a A, E

................... // biblioteci, namespace

................ //declararea fisierului de intrare


.//declararea fisierului de iesire

int n, m, nr, k, i;

int main()
{
................ //citim m i n
k=0; //valoarea initiala
................ //pentru celelalte n valori
{
..........; //citim o valoare din fiier
............//daca valoarea citita e egala cu m
{
.....//creste valoarea lui k
} //sfarsit if
} //sfarsit for
//afisam in fisierul de iesire valoarea k
return 0;
}

1.3. Determinarea valorii maxime/minime

Fiierul maxim.in se conine pe prima linie un numr natural n i pe adoua linie n valori ntregi separate printr-
un spaiu. S se afieze n fiierul maxim.out valoarea maxim din fiierul de intrare.
Exemplu:

maxim.in maxim.out Explicaie


7 76 Valoarea maxim e 76
45 6 76 8 9 11 10
Rezolvare: Se presupune c primul numr citit este maximul. Se citesc apoi, pe rnd, numerele i la fiecare pas
se compar numrul citit cu maximul existent. Dac numrul citit este mai mare dect maximul, se nlocuiete
maximul.
...................// biblioteci, namespace

................ //declararea fisierului de intrare


.//declararea fisierului de iesire

int n, maxim, nr, i;

int main()
{
................ //citim n
f>>nr;//citim prima valoare din fisier
maxim = nr; //prima valoare e valoarea maxima
for(i=2;i<=n;i++) //pentru celelalte valori incepand cu a doua
{
..........; //citim o valoare din fiier
............//daca valoarea citita este mai mare decat maximul
} //sfarsit if
} //sfarsit for
//afisam in fisierul de iesire valoarea maxima
return 0;
}

3
Clasa a IX-a A, E

1.4. Determinarea sumei/produsului elementelor

Fiierul suma.in conine pe prima linie un numr natural n i pe a doua linie n valori ntregi separate printr-un
spaiu. S se afieze n fiierul suma.out valoarea sumei elementelor de pe a doua linie a fiierului de intrare.
Exemplu:

suma.in suma.out Explicaie


5 8 5 + 2 + (-2) + 7 + (-4) = 8
5 2 -2 7 -4
Rezolvare: fiecare valoare citit din fiier va fi adunat la o variabil s. Orice variabil care reine o sum se
iniializeaz cu 0.

...................// biblioteci, namespace

................ //declararea fisierului de intrare


.//declararea fisierului de iesire

int n, nr, s, i;

int main()
{
................ //citim numarul de valori din fisier
s=0; //valoarea initiala
................ //pentru celelalte n valori
{
..........; //citim o valoare din fiier
s = s + ...... // valoarea citit e adunat la sum
} //sfarsit for
//afisam in fisierul de iesire valoarea sumei
return 0;
}

1.5. Determinarea valorilor cu o anumit proprietate

Determinarea valorilor prime din fiier


Fiierul prime.in conine dou linii. Pe prima linie este scris un numr natural nenul n, (5<n<30). Pe cea de-a
doua linie a fiierului sunt scrise n numere naturale separate prin cte un spaiu, formate fiecare din cel mult 9
cifre, reprezentnd un ir de n numere naturale. S se scrie un program n limbajul C++, care s afieze n
fiierul prime.out, pe o linie separate printr-un spaiu, toate numerele prime din ir.

Exemplu:
prime.in prime.out
8 17 7 101 2
17 10 21 7 101 56 2 30

4
Clasa a IX-a A, E

Rezolvare : vom citi pe rnd cele n numere din fiier i pentru fiecare valoare citit verificm dac numrul e
prim. n caz afirmativ, acesta se afieaz n fiierul de ieire.

...................// biblioteci, namespace

................ //declararea fisierului de intrare


.//declararea fisierului de iesire

int .;//declaratii variabile

int main()
{
................ //citim n
for(.........) //pentru cele n valori de pe a doua linie
{
..........; //citim o valoare din fiier
//verificam daca valoarea citita e numar prim
..; //presupunem ca numarul este prim
.; //incepem cu cel mai mic divizor propriu
while (.) //cat timp nu am ajuns la si numarul este prim
{
if (..) //daca restul impartirii numarului la d este 0
..; //numarul nu mai este prim, deoarece am gasit un divizor
..; // trecem la urmatoarea valoare pentru divizor
} //sfarsit while
if () //daca numarul este prim
.; //il afisam in fisierul de iesire urmat de spatiu

} //sfarsit for

return 0;
}

Determinarea valorilor palindrom din fiier


Fiierul palindrom.in conine dou linii. Pe prima linie este scris un numr natural nenul n, (5<n<30). Pe cea
de-a doua linie a fiierului sunt scrise n numere naturale separate prin cte un spaiu, formate fiecare din cel
mult 4 cifre, reprezentnd un ir de n numere naturale. S se scrie un program n limbajul C++, care s scrie n
fiierul palindrom.out, pe o linie, separate prin cte un spaiu, numerele de tip palindrom din irul dat.

Exemplu:
palindrom.in palindrom.out
6
343 11 101 2222
343 35 11 101 7897 2222
Rezolvare: citim n i apoi pe rnd cele n valori din fiier. Pentru fiecare valoare citit vom calcula inversul
(rsturnatul). Dup calculul inversului acesta este comparat cu numrul citit din fiier. n caz de egalitate

5
Clasa a IX-a A, E

valoarea este scris n fiierul de ieire. Atenie! La calculul inversului valoarea iniial a numrului se pierde,
aa c vom avea nevoie de o variabil auxiliar pentru pstrarea numrului citit din fiier.

...................// biblioteci, namespace

................ //declararea fisierului de intrare


.//declararea fisierului de iesire

int .;//declaratii variabile

int main()
{
................ //citim n
for(.........) //pentru cele n valori de pe a doua linie
{
..........; //citim o valoare din fiier
//calculam inversul valorii citite
aux = .; //pstrm valoarea citit ntr-o variabil auxiliar
inv = ; //valoarea initiala a inversului
while (aux != .) //cat timp numarulare cifre
{
//calculam ultima cifra
inv = ; //prelucram ultima cifra
aux = ..; // eliminam ultima cifra
} //sfarsit while
if () //daca numarul este egal cu inversul sau
.; //il afisam in fisierul de iesire urmat de spatiu

} //sfarsit for

return 0;
}