Lucrarea nr


Operaţii intrare / ieşire



Yüklə 0,56 Mb.
səhifə3/20
tarix17.01.2019
ölçüsü0,56 Mb.
#98835
1   2   3   4   5   6   7   8   9   ...   20

1.5Operaţii intrare / ieşire

Orice aplicaţie ce rulează pe un calculator are un director curent asociat şi fişiere standard de intrare şi ieşire. Fişierul standard de intrare este tastatura iar cel de ieşire este ecranul. In program, orice fişier este asociat unui obiect numit stream. Fişierele standard asociate unei aplicaţii sunt de tipul text. Fişierul text este este compus dintr-un şir de caractere grupate în linii. Liniile constau din zero sau mai multe caractere urmate de un caracter ‘\n’. Streamul de intrare asociat tastaturii are denumirea cin, streamul de ieşire asociat ecranului se numeşte cout.



Operatorul de scriere a datelor

Operatorul de scriere a datelor este <<. El inserează date în streamul de ieşire. De exemplu, secvenţa de instrucţiuni

int i = 123;

cout << “i = ” << i;

afişază pe ecran

i = 123


Operatorul << inserează în stream valoarea expresiei din dreapta sa. Pentru a afişa valori pe mai multe linii, trebuie ca după fiecare linie să scriem caracterul ‘\n’, care este predefinit ca endl. Operatorul << poate scrie orice tip predefinit de date: int, float, şiruri de caractere, etc.

Operatorul de citire a datelor

Operatorul de citire dintr-un stream este >>. El extrage date din streamul de intrare şi le atribuie unor variabile. Operatorul >> este urmat de numele variabilei ce va memora valoarea citită. De exemplu, secvenţa de instrucţiuni

int a;

cin >> a;



va citi o valoare introdusă de la tastatură şi o va atribui variabilei a

Instrucţiunea cin analizează valorile introduse de la tastatură sunt şi le atribuie variabilelor. Pentru fiecare variabilă se procedează astfel :



  • se citesc şi se ignoră toate caracterele spaţiu, ‘\t’ sau ‘\n’ (acesta din urmă este generat la apăsarea tastei Return),

  • se citesc următoarele caractere corespunzând tipului variabilei sau până la întâlnirea unui caracter spaţiu, ‘\t’ sau ‘\n’ şi valoarea citită se atribuie variabilei.

Instrucţiunea cin analizează valorile introduse după apăsarea tastei Return.

Pentru a modifica formatul de scriere sau citire a datelor putem utiliza manipulatori definiţi în biblioteca iomanip. Pentru scrierea sau citirea unui număr întreg în în diferite baze, se utilizează în instrucţiunile cout sau cin manipulatorii:



  • hex pentru baza 16,

  • dec pentru baza 10,

  • oct pentru baza 8.

Aceşti manipulatori rămân la valoarea prescrisă până sunt modificaţi. La începerea execuţiei unui program baza 10 este implicită.

Pentru afişarea bazei se utilizează manipulatorii:



  • showbase pentru scrierea bazei,

  • noshowbase pentru a nu scrie baza.

In cazul numerelor reale avem manipulatorii:

  • fixed numărul este scris fără exponent,

  • scientific numărul este scris cu exponent.

Funcţiile următoare sunt apelate de operatorul de scriere << :

  • setbase(int),

  • setw(int),

  • setfill(char),

  • setprecision(int).

Funcţia setbase(int) indică baza în care va fi afişat un număr întreg, 8, 10 sau 16. Funcţia setw(int) dă dimensiunea câmpului în caractere pe care este scris un număr. Valoarea implicită a acestui manipulator este 0. Dacă dimensiunea câmpului nu este specificată, sau este prea mică, numărul este scris pe câte caractere este necesar. Funcţia setfill(char) indică un caracter cu care se umplu spaţiile libere ale unui câmp. Valoarea implicită a acestui caracter este spaţiul. Funcţia setprecision(int) dă numărul de cifre cu care este scris un număr real.

Manipulatorii următori specifică modul de cadrare al valorilor scrise :



  • left - cadrare la stânga,

  • right – cadrare la dreapta.

La scrierea valorii unei variabile booleene valoarea afişată este 0 sau 1, după cum variabila are valoarea false, respectiv true. Pentru afişarea valorii booleene ca true, respectiv false se utilizează manipulatorul boolalpha.

Manipulatori sunt definiţi în biblioteca



1.6Probleme rezolvate



Problema 1. Să se scrie un un program ce afişază şirul de caractere “Primul program”.
#include

using namespace std;

int main(){

cout << “Primul program” << endl;

return 0;

}
Prima linie este o directivă ce indică biblioteca cu definiţia obiectului cout ce scrie datele pe ecran. A treia linie defineşte funcţia main, cerută în orice program C/C++. Execuţia oricărui program C/C++ începe cu funcţia main. Instrucţiunea

cout << “Primul program” << endl;

scrie şirul “Primul program” pe fişierul standard de ieşire, de regulă monitorul calculatorului.

Instrucţiunea

return 0;

asociază valoarea 0 numelui funcţiei, care este şi rezultatul execuţiei funcţiei. De notat că, fiecare instrucţiune a programului se termină cu caracterul ";". Rezultatul rulării programului este cel de mai jos.


Problema 2. Să se scrie un program care calculează suma a două numere întregi.
#include

using namespace std;

int main() {

int a, b, c;

a = 31;

b = 76;


c = a + b;

cout << “a = ” << a << endl;

cout << “b = ” << b << endl;

cout << “a + b = ” << c << endl;

return 0;

}
Problema 3. Să se scrie un program ce calculează aria unui cerc. Raza cercului se citeşte de la tastatură la apariţia mesajului : "Introduceţi raza".


#include

using namespace std;

int main(){

double r;

cout << “Introduceti raza cercului ” << endl;

cin >> r;

cout << “aria cercului este ” << 3.14*r*r << endl;

return 0;

}
Rezultatul rulării programului este cel de mai jos.

Problema 4. Să se scrie un program care să tipărească valorile false şi true ale tipului bool.
#include

using namespace std;

int main() {

bool bv;


bv = false;

cout << “false = “ << bv << endl;

bv = true;

cout << “true = “ << bv << endl;

return 0;

}
Se vor înlocui cele două instrucţiuni cout cu cele de mai jos. Se vor explica rezultatele.

cout << "bv = " << boolalpha << bv << endl;

cout << "bv = " << boolalpha << bv << endl;


Problema 5. Să se scrie un program care să afişeze caracterele A, a, * şi ! şi valoarea lor în codul ASCII.
#include

using namespace std;

int main() {

char d;


d = ‘A’;

cout << “d = “ << d << “, int(d) = ” << int(d) << endl;

d = ‘a’;

cout << “d = “ << d << “, int(d) = ” << int(d) << endl;

d = ‘*’;

cout << “d = “ << d << “, int(d) = ” << int(d) << endl;

d = ‘!’;

cout << “d = “ << d << “, int(d) = ” << int(d) << endl;

return 0;

}
Problema 6. Să se scrie un program care să tipărească domeniile tipurilor întregi (valorile maxime şi minime). Aceste valori sunt definiţii de constante din fişierul antet sau .


#include

using namespace std;

#include

int main() {

cout << "minimum short = " << SHRT_MIN << endl;

cout << "maximum short = " << SHRT_MAX << endl;

cout << "maximum unsigned short = " << USHRT_MAX << endl;

cout << "minimum int = " << INT_MIN << endl;

cout << "maximum int = " << INT_MAX << endl;

cout << "maximum unsigned int = " << UINT_MAX << endl;

cout << "minimum long int = " << LONG_MIN << endl;

cout << "maximum long int =" << LONG_MAX << endl;

return 0;

}
Problema 7. Să se scrie un program care să efectueze operaţii cu numere întregi. Operatorii utilizaţi sunt + - * / %. Se va observa regula împărţirii numerelor întregi, (operatorul /), care are ca rezultat câtul celor două numere întregi. Rezultatele se vor afişa astfel:

m = …

n = …


m + n = …

m – n = …

m * n = …

m / n = …

m % n = …

Programul este următorul


#include

using namespace std;

int main() {

int m = 54, n = 20;

cout << “m = “ << m << “ n = “ << n << endl;

cout << “m + n = “ << m + n << endl;

cout << “m - n = “ << m - n << endl;

cout << “m * n = “ << m * n << endl;

cout << “m / n = “ << m / n << endl;

cout << “m % n = “ << m % n << endl;

return 0;

}
Problema 7. Se dau următoarele variabile întregi: a = 7, b = 3, c = -5. Să se scrie un program care să calculeze valorile următoarelor expresii :

a+b+c a%b a / b (ac)%b

2a +3(a+b) a%c a / c a(c%b)

Se vor afişa valorile variabilelor a, b, c şi valorile expresiilor calculate. Programul este următorul.
#include

using namespace std;

int main(){

int a = 7, b = 3, c = -5;

int d;

cout << "a = " << a << ", b = " << b << ", c = " << c << endl;



d = a + b + c;

cout << "a + b + c = " << d << endl;

cout<<"2*a+3*(a+b)="<<2*a+3*(a+b)<

cout<<"a/b="<

cout<<"a%b="<

cout<<"a/c="<

cout<<"a%c="<

cout<<"(a*c)%b="<<(a*c)%b<

cout<<"a*(c%b)="<

return 0;

}
Rezultatele rulării programului sunt cele de mai jos.


Problema 8. Se dau următoarele variabile reale: x = 8.7, y = 3.5, z = -5.2; Să se se scrie un program care să calculeze valorile următoarelor expresii:
x+y+z (x/y) +z 1/(x+y+z)

2y+5(x-z) (2x)/ (3y) 2 x / (3 y+2.4)

x / y x/(y+z) (x+y)/(x+2y+z)

Se vor afişa valorile variabilelor x, y, z şi valorile expresiilor calculate. Programul este următorul.


#include

using namespace std;

int main(){

float x = 8.7, y = 3.5, z = -5.2;

// se afiseaza valorile variabilelor

cout << "x = " << x << " y = " << y << " z = " << z << endl;

// se calculeaza expresiile

cout << "x+y+z=" << x + y + z << endl;

cout << "2y+5(x-z) = " << 2*y+5*(x-z) << endl;

// se completeaza programul cu calculul celelalte expresii

cout<<"2 x / (3 y+2.4)="<<2*x/(3*y+2.4)<

cout << "(x+y)/(x+2y+z)=" << (x+y)/(x + 2 * y +z) << endl;

return 0;

}
Rezultatele rulării programului sunt cele de mai jos.




Problema 9. Se dă circuitul electric de mai jos, în care rezistenţele au valorile R1= 1kΩ, R2 = 3kΩ. La bornele circuitului se aplică o tensiune U=10V. Să se calculeze curentul şi căderea de tensiune pe fiecare rezistenţă.

Programul este următorul.


#include

using namespace std;

int main(){

float R1=1000,R2=3e3,U=10,I,U1,U2;

I=U/(R1+R2);

U1=R1*I;


U2=R2*I;

cout<<"curentul="<

return 0;

}
Rezultatele rulării programului sunt prezentate mai jos.




Problema 10. Se dau variabilele întregi, i = 2, j = -7, şi variabilele reale x = 14.3, y = 2.5. Să se calculeze expresiile

ln(x) cos(x+y)

tg(x)

Indicaţie. Prototipurile funcţiilor matematice care se află în biblioteca .

Programul este următorul.


#include

using namespace std;

#include

int main() {

double x, y, e;

x = 14.3;

y = 2.5;

e = sqrt(x * x + y * y);

cout<<"sqrt (x^2+y^2) = "<

e = exp(x);

cout<<"e^x = "<

e = log(x);

cout<<"ln(x) = "<

e = cos(x + y);

cout << "cos(x+y) = " << e <

e = tan(x);

cout << "tg(x) = " << e << endl;

e = log10(x);

cout << "log.10(x) = " << e <

e = fabs(x + y);

cout << "|x+y| = " << e << endl;

int i = 2, j = -7;

e = abs(i + j);

cout<<"|i+j| = "<

return 0;

}
Rezultatele rulării programului sunt cele de mai jos.




Problema 12. Fie x1, x2 şi x3 trei variabile tip caracter ce au valorile ‘2’, ‘?’ şi ‘G’. Să se afişeze valoarile acestor variabile şi codurile ASCII ale caracterelor şi să se calculeze valorile numerice ale expresiilor:

x1 / x2 x1 % x2 2 * x1

x1 / x3 x1 % x3 ‘3’ * x1

x1 + x2 - x3 + 200 ‘2’ + ‘3’ (x1 / x2) * x3

x1 + 2 x1 + ‘@’ + 1 x1 / x2 * x3

La efectuarea calculelor, valorile variabilelor şi constantelor tip char sunt convertite în tipul int şi calculele se fac cu numere întregi pe 32 biţi. Dacă rezultatul trebuie atribuit unei variabile de tip char, el este trunchiat la 8 biţi. In program valorile expresiilor sunt atribuite unei variabile tip int şi unei variabile tip unsigned char, ce sunt apoi afişate.

Pentru a preciza dimensiunea câmpului în care se scrie o valoare se foloseşte manipulatorul setw(int) din biblioteca iomanip. Argumentul funcţiei setw() dă dimensiunea în caractere a câmpului următor.

Programul este cel de mai jos.


# include

using namespace std;

# include

int main() {

char x1 = '5', x2 = '?', x3 = 'G';

char e;


int i;

cout << "codurile ASCII ale caracterelor folosite" << endl;

cout << "\t" << x1 << "\t" << int(x1) << endl

<< "\t" << x2 << "\t" << int(x2) << endl

<<"\t" << x3 << '\t' <
<<"\t" << '@' << '\t'<

cout << setw(12) << "expresie" << setw(10) << "rezultat" << setw(12)



<< " conversie la char" << endl;

i = x1 / x2; e = x1 / x2;

cout << setw(12) << "x1/x2" <

i = x1 % x2; e = x1 % x2;

cout << setw(12) << "x1%x2" <

i = x1 + x2 - x3 + 200; e = x1 + x2 - x3 + 200;

cout << setw(12) << "x1+x2-x3+2" <

i = '2' + '3'; e = '2' + '3';

cout << setw(12) << "'2'+'3'" <

i = x1 + '@' + 1; e = x1 + '@' + 1;

cout << setw(12) << "x1+'@'+1" <

i = x1 + 2; e = x1 + 2;

cout << setw(12) << "x1+2" <

i = 2 * x1; e = 2 * x1;

cout << setw(12) << "2*x1" <

i = '3' * x1; e = '3' * x1;

cout << setw(12) << "'3'*x1" <

i = (x1 / x2) * x3; e = (x1 / x2) * x3;

cout << setw(12) << "(x1/x2)*x3" <

}
Rezultatele rulării programului sunt cele de mai jos.



Să se explice rezultatele expresiilor x1 / x2, '3' * x1 şi (x1 / x2) * x3. De ce nu se afişază caracterul corespunzător primei şi ultimei expresii?


Yüklə 0,56 Mb.

Dostları ilə paylaş:
1   2   3   4   5   6   7   8   9   ...   20




Verilənlər bazası müəlliflik hüququ ilə müdafiə olunur ©muhaz.org 2024
rəhbərliyinə müraciət

gir | qeydiyyatdan keç
    Ana səhifə


yükləyin