RSS

Fisiere – prelucrarea valorilor

21 Nov

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 de tip…”
  • un numar nedeterminat de valori: “Fisierul contine un maxim 10000 de valori de tip… “

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.

fin>>N;
for(I=1;I<=N;I++)
{fin>>X;
PREL X;}

Pe acest sablon se pot lucra toate problemele de la siruri de valori:

  • numarul de valori pare/impare din sir
  • de cate ori apare in sir o valoare data Y?
  • care este valoarea maxima/minima din sir?
  • cate valori din sir au o proprietate anume (numar prim, palindrom, …)

Prelucrarea unui numar nedeterminat de valori

In cazul unui sir nedeterminat de valori, problema este ca nu stim cand anume ne oprim din citit si prelucrat. Pentru aceasta, C/C++ ne vine in intampinare cu doua posibilitati de a rezolva situatia.

Varianta 1

while (fin>>X) PREL X;

Asa cum stim, instructiunea WHILE cicleaza conform rezultatului unei conditii. In acest caz, se incearca citirea din fisier a valorii X. Daca instructiunea se executa cu succes, se returneaza valoarea 1 (ADEVARAT) si putem prelucra valoarea citita. Daca citirea din fisier nu se poate realiza, se va returna valoarea 0 (FALS).

Cu aceasta situatie ne-am mai intalnit la situatii de genul

A=7;
if (A=5) cout <<” este 5″; else cout<<“nu este 5”;
 

Rezultatul acestui cod este intotdeauna “este 5“. Care este motivul? Asa cum vedeti , la intrarea in test variabila A are valoarea 7. In test A primeste valoarea 5; Instructiunea se executa corect (A poate primi valoarea 5) si sistemul returneaza valoarea 1, pentru executie corecta; In consecinta. instructiunea care se executa este cout <<” este 5″. Corect ar fi fost sa se scrie:

A=7;
if (A==5) cout <<” este 5″; else cout<<“nu este 5”;
 

Varianta 2

Aceasta varianta foloseste o functie atasata variabilelor tip fisier de intrare, functia EOF (End Of File = Sfarsit De Fisier) Aceasta functie verifica daca mai exista valori pana la sfarsitul fisierului.

  • fin.eof() are valoarea 1 daca pana la sfarsitul fisierului nu mai exista nici o valoare
  • fin.eof() are valoarea 0 daca pana la sfarsitul fisierului mai exista valori
//cat timp nu este sfarsitul fisierului….
while (! fin.eof() )
{ fin>>x;
PREL X;}
 

Probleme propuse:

  • numarul de valori pare/impare din sir
  • de cate ori apare in sir o valoare data Y?
  • care este valoarea maxima/minima din sir?
  • cate valori din sir au o proprietate anume (numar prim, palindrom, …)
  • numarul de schimbari de semn din sir
  • numarul de schimbari de paritate (par-impar si impar=par)
  • numarul de “vai” si “dealuri” (o vale este o succesiune de tipul 7-3-5; un deal este o sucesiune de tipul 3-7-5)
  • lungimea maxima a unui subsir crescator
  • lungimea maxima a unui subsir de valori cu aceeasi paritate
 

Tags:

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

 
%d bloggers like this: