Sunteți pe pagina 1din 3

PROGRAMAREA ORIENTATĂ PE OBIECTE - Laborator 

Lucrarea de laborator 2.

SISTEMUL DE INTRARI/IESIRI DE BAZA DIN C++


Utilizare manipulatori

Utilizarea manipulatorilor pentru formatarea ieşirilor


Manipulatorii sunt o serie funcţii speciale declarate în biblioteca IOMANIP.H.
Aceştia sunt :
- dec, oct, hex – pentru a specifica baza de numeraţie a intrărilor şi ieşirilor; (I/O)
- setbase(int baza) – stabileşte baza valorilor numerice ce intră sau ies din stream; (O)
- endl – pentru un caracter de linie nouă care se şterge (echivalentul unui Enter din tastatură);
(O)
- ends – scrie în stream un caracter null (0x00 sau `\0`);(O)
- ws – pentru streamuri de intrare emite spaţiile libere introduse înainte de valoarea efectivă;
(I)
- flush – goleşte un stream; (O)
- resetiosflags(long f) – dezactivează indicatorii specificaţi în f; (I/O)
- setiosflags(long f) – activează indicatorii specificaţi f; (I/O)
- setprecision(int precizie) – stabileşte numărul de zecimale al valorilor cu virgulă ; (O)
- setfill(int ch) – stabileşte caracterul de umplere; (O)
- setw(int w) – stabileşte lărgimea câmpului în care se va afişa o valoare sau şir de caractere;
(O)
Pentru a folosi un manipulator vom folosi expresia:
cout<<manip1<<v1<<…<<manip2<<manip3<<vk…;
cin>>manip1>>v1>>manip2>>…;
Exemplu în cazul stabilirii câmpului de afişare de 10 având caracterul de umplere ‘*’
putem scrie:
cout.width(10) ;
cout. fill(‘ *’) ;
cout<<”Exemplu”<<endl;
sau
cout<<setw(10)<<setfill(‘*’)<<”Exemplu”<<endl;
cu condiţia includerii bibliotecii iomanip.h.

Exerciţiul 1.
Să se afişeze pe câte un rând,în câmpuri de 20 de caractere, alineate la dreapta, valoarea lui
radical din 2, mai întâi cu o zecimală şi apoi crescând cu unu numărul de zecimale. Vor fi afişate astfel
zece rânduri. Se va da prioritate folosirii manipulatorilor mai sus prezentaţi.
PROGRAMAREA ORIENTATĂ PE OBIECTE - Laborator 

Rezultatul programului va fi cel din figura de mai jos.

Definirea propriilor manipulatori


Se pot crea manipulatori proprii care sa acţioneze asupra unor streamuri.
Pentru a crea un manipulator se poate utiliza această structură general valabilă:
Pentru manipulatori folosiţi împreună cu cout:
ostream& nume_manipulator_out (ostream& cout)
{ // se fac operatii cu streamul
cout<<…<<…;
cout.setf() ;
cout.precision() ;
cout<<endl<<ends;
// aceste operatii sunt date ca exemplu putandu-se alege oricare
// combinatie ce este utila
return cout ; //aceasta comanda este absolut necesara
// este ultima comanda din corpul functiei de definire
}
Pentru manipulatori folosiţi împreună cu cin:
istream& nume_manipulator_in (istream& cin)
{
// se fac operatii cu streamul
cin>>…>>…;
cin.setf() ;
cin.precision() ;
cin>>ws;
// aceste operatii sunt date ca exemplu putandu-se alege oricare
// combinatie ce este utila

return cin ; //aceasta comanda este absolut necesara


// este ultima comanda din corpul functiei de definire
}
Pentru a folosi aceşti manipulatori se va folosi secvenţa:
cout<<…<<nume_manipulator_out<<…;
cin<<…<<nume_manipulator_in<<…;
PROGRAMAREA ORIENTATĂ PE OBIECTE - Laborator 

Exerciţiu 2
Creaţi un manipulator de ieşire cu numele rând_nou, care ataşat unui stream cout sa facă acelaşi
lucru ca manipulatorul endl. Sau un manipulator numit “da_un_bip” care ataşat lui cout să scoată un
sunet scurt de avertizare. (Se va folosi caracterul special ‘\a’).

Exerciţiu 3
Creaţi un manipulator de intrare cu numele cere_parola, care ataşat unui stream cin să ceară
introducerea unui şir de caractere ce semnifică parola. Dacă parola este greşită se va emite un sunet de
avertizare folosindu-se manipulatorul da_un_bip creat mai înainte şi se va repeta secvenţa de solicitare
a parolei. Altfel se va confirma că parola este corectă şi se va încheia programul. (Pentru compararea
şirului introdus cu parola dorită se va folosi funcţia strcmp(sir1,sir2) din biblioteca string.h).