C++ Modul II

Operații cu fișiere

Operații cu fișiere ( I/O )

Pentru operețiile cu fișiere avem nevoie de o nouă bibliotecă. Aceasta va fi inclusă sus, sub #include<iostream> prin instrucțiunea        #include <fstream>

Pentru a scrie/citi din fișiere folosim streamuri de date.

Streamurile de date sunt practic, doar alte tipuri de date, cu care putem face alte operații. Pentru fișiere de intrare vom avea streamuri de intrare ifstream, iar pentru fișiere de ieșire vom avea streamuri de ieșire: tipul de dată ofstream.

Declararea se va face prin tipul de stream (ifstream/ofstream), numele variabilei, și, între paranteze rotunde, numele fișierului.

Notă: în informatică prin numele unui fișier se înțelege o cale (path), relativă sau absolută prin care poate fi accesat fișierul.

Citirea / afișarea în aceste fișiere se face la fel ca și citirea normală, dar în loc de cin vom avea o variabilă fișier de intrare, iar în loc de cout vom avea o variabilă fișier de ieșire.

Exemplificare

#include <iostream>

#include <fstream>

using namespace std;

int main()

{

     ifstream fin ( "nume_fișier_in");

     ofstream fout ("nume_fișier_out");

     int a, b

     fin    >> a >> b;

     fout << a + b;

 

     return 0;

}

Crearea unui fișier în CodeBlocks

Pentru a putea fi accesate ușor, doar prin numele propriuzis, fișierele trebuiesc plasate ori în folderul proiectului, ori în bin/debug/ lângă executabil.

 

În codeblocks acest lucru se face ușor, automat astfel:

Click   File > New > Empty File

(Add file to project?)  Click Yes

Se va da numele fișierului (ex. "data.in", "info.txt", "abc.abc" etc)

! Se va alege Save as type: All files

Click Save, apoi OK

Aplicații

1. Din fișierul "A.in" se citește numărul a, din fișierul "B.in" se citește numărul b. Afișați, în fișierul "suma.out" suma numerelor a și b.

 

2. Din fișierul "numere.txt" se citește un număr n și un șir de n numere naturale. În fișierul "mici.out" se vor afișa numerele din șir mai mici decât 32. În fișierul "medii.out" se vor afișă numerele din șir mai mari sau egale cu 32 dar mai mici decât 1024. În fișierul "mari.out" se vor afișa numerele mai mari sau egale cu 1024.

Apoi, in fișierul "raport.txt" se va afișa câte au fost din fiecare.

În consolă, se va afișa textul "Gata!".

 

 

Aplicații

3. Din fișierul "A.in" se citește un număr nat. n și un șir de n numere naturale. Din fișierul "B.in" se citește un nr nat. m și un alt sir de nr. naturale. Afișați în consolă pe câte poziții sirurile date sunt egale. Afișați în fișierul "demo.out" numerele de pe aceste poziții.

A.in B.in cout demo.out
6
1 2 4 6 8 3
4
1 3 4 6
3 1 4 6

Aplicații

4. RPS 1.4: Lui Elif și Elsa le place să joace piatră hârtie foarfece. Vacanța asta, ei au plecat în tabere de informatică diferite, dar s-au hotarât să continue să joace RPS de la distanță. Sunt 10 runde. Fiecare dintre ei creează un fișier în care se găsesc 10 caractere, (P, H sau F, piatră hârtie sau foarfecă). Ei au acum nevoie de un program care să le spună cine a câștigat.

Din fișierele "Elif.in" și "Elsa.in" se citește câte un șir de 10 caractere.

Afișați in consolă câte puncte are fiecare si cine  a câștigat.

Elif.in Elsa.in consola out Explicatii
P P H F H H P F F P Elif:  1
Elsa: 2
Egal: 2
Câștigător: Elsa
Am luat exemplul doar pentru 5 runde, nu 10

Aplicații

5. (*simple and FUN) Afișare în consolă a ASCII art din fișier.

Pentru această aplicație tot ce trebuie făcut este afișarea tuturor caracterelor dintr-un fișier (inclusiv spații și new-line-uri). pentru asta se va folosi opțiunea de filtrare noskipws astfel:

fin >> noskipws >> c;

Apoi se va afișa caracterul c cu cout << c;

** Pentru a citi tot, se poate pune citirea în condiție. 

    .-.  _
    | | / )
    | |/ /
   _|__ /_
  / __)-' )
  \  `(.-')
   > ._>-'
  / \/

Fișiere

By Academia de Informatică