Lucrarea nr



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

2.8Probleme propuse


Problema 1. Fie numărul întreg x = 10. Să se deplaseze numărul la stânga cu trei biţi şi la dreapta cu doi biţi. Se vor afişa în zecimal şi hexazecimal numărul iniţial şi numărul deplasat.
Problema 2. Se dă variabila întreagă a = 10. Se vor extrage biţii numărului a executând operaţia & între variabila a şi fiecare dintre variabilele: m1=0x1, m2=0x2, m3= 0x4 şi m4=0x8. Rezultatele se vor scrie în hexazecimal cu manipulatorul hex.
Problema 3. Se dă numărul întreg x = 23457. Se vor extrage cifrele hexazecimale ale numărului executând operaţia & între variabila x şi fiecare din variabilele m1 = 0xf, m2 = 0xf0, m3 = 0xf00 şi m4 = 0xf000. Rezultatele se vor scrie în hexazecimal cu manipulatorul hex.
Problema 4. Se dă numărul întreg x = 345. Se vor extrage cifrele octale ale numărului executând operaţia & între variabila x şi fiecare din variabilele m1 = 07, m2 = 070, m3 = 0700. Rezultatele se vor scrie în octal cu manipulatorul oct.
Problema 5. Fie numerele întregi 57 şi 28. Se vor efectua operaţiile & , | şi ^ între cele două numere. Rezultatele se vor scrie în hexazecimal cu manipulatorul hex.
Problema 6. Să se facă un program care să testeze dacă un număr întreg este divizibil cu altul. Cele două numere întregi se vor citi de la tastatură.

Indicaţie. Se va calcula restul împărţirii celor două numere.



Problema 7. Să se facă un program care să calculeze minimul a două numere întregi. Numerele se vor citi de la tastatură.
Problema 8. Să se facă un program care să calculeze minimul a trei numere întregi care se citesc de la tastatură.
Problema 9. Să se facă un program care să citească vârsta şi să afişeze mesajele: tânăr dacă vârsta < 18, adult dacă 18 <= vârsta <= 65 şi bătrân dacă vârsta > 65.

Problema 10. Fie un vector x cu cinci componente reale care se citesc de la tastatură. Să se calculeze cel mai mare dintre componentele vectorului.
Problema 11. Fie a un vector cu patru componente reale ce se citesc de la tastatură. Să se calculeze norma vectorului a.

Indicaţie. Norma vectorului a este .



Problema 12. Fie z un vector cu şase componente reale ce se citesc de la tastatură. Să se calculeze suma componentelor pare şi suma componentelor impare ale vectorului z.
Problema 13. Să se calculeze valorile expresiei pentru cu pasul 0.2.
Problema 14. Fie A o matrice cu 2 linii şi 3 coloane cu elemente reale. Elementele matricei se citesc de la tastatură. Să se determine valoarea celui mai mare dintre elementele matricei.
Problema 15. Să se citească două numere reale de la tastatură şi un operator +, - *, / şi să se calculeze rezultatul operaţiei corespunzătoare. Operatorul se va citi într-o variabilă de tip char.

Indicaţie. Pentru a calcula rezultatul se va utiliza instrucţiunea switch.


Problema 16. Să se calculeze valorile funcţiei f(x) = sin(x) + sin(2x) pentru cu pasul 0.1 şi să se afişeze valorile minimă şi maximă calculate pe acest interval.
Problema 17. Să se calculeze produsul a n numere reale citite de la tastatură. Valoarea n se va citi de la tastatură. Citirea şi produsul numerelor se vor face într-un ciclu realizat cu instrucţiunea while.

2.9Precizia calculelor. Depăşirea. Rotunjirea.


Problema 1. Depăşirea gamei de reprezentare la operaţii cu numere întregi şi reale.

a) Se dă numărul întreg n = 1000. Să se calculeze valorile n2, n3, n4.

b) Se dă numărul real x = 1000.0. Să se calculeze valorile x2, x4, x8, x16.

Gama numerelor întregi de tip int este [-231..231-1] adică [-2147483648.. 2147483647]. Numărul n4, = 1012, depăşeşte acestă gamă.

Gama numerelor reale de tip float este 3.4*10-38..3.4*1038. Numărul x16, = 1048, depăşeşte această gamă.

Programul este cel de mai jos.


#include

using namespace std;

#include

int main(){

int n=1000, p;

cout << "n=" << n << endl;;

p=n*n; cout << "n*n=" << p << endl;

p=n*n*n; cout << "n*n*n=" << p << endl;

p=n*n*n*n; cout << "n*n*n*n=" << p;

cout<<" gresit, depasire gama de reprezentare int !!!"<

float x=1.0e3, xp;

cout << "x=" << x << endl;

xp=x*x; cout<<"x*x="<

xp=xp*xp; cout<<"x^4="<

xp=xp*xp; cout<<"x^8="<

xp=xp*xp;

cout<<"x^16="<

cout<<" gresit, depasire gama de reprezentare float!!!"<

double putere;

putere=pow(x,16);

cout<<"x^16="<

return 0;

}
Rezultatele rulării programului sunt cele din caseta de mai jos. Se vor explica rezultatele pentru şi .

Problema 2. Erorile de rotunjire. Se vor calcula valorile variabilelor reale de tip float

; y=x-333; z=3y-1. Ele trebuie să aibă valorile: ; ; z = 0.

Programul este următorul.


#include

using namespace std;

int main() {

float x, y, z;

x = 1000.0 / 3.0;

y = x - 333;

z = 3 * y -1;

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

return 0;

}
Rezultatele rulării programului sunt cele de mai jos. Se vor explica rezultatele.



Problema 3. Erorile de rotunjire. Se vor calcula valorile expresiei x*x*cos(x) pentru 1 <= x

<= 2.95 cu pasul 0.15. Programul este următorul.
#include

#include

#include

#include


using namespace std;
int main(int argc, char *argv[])

{

float x, e;



// double x, e;

for(x = 1; x <= 2.95; x = x + 0.15){

e = x * x * cos(x);

cout << setw(4) << x << " " << setw(6) << e << endl;

}

system("PAUSE");



return EXIT_SUCCESS;

}
Rezultatele rulării programului sunt cele de mai jos. In stânga avem rezultatele pentru x, e de tip float, în dreapta pentru x, e de tip double. Se vor explica rezultatele.








float x, e;

double x, e;

Pentru a vedea erorile de rotunjire vom afişa doar valorile variabilei x tip float şi tip double, cu 5 zecimale şi respectiv cu 15 zecimale.


#include

#include

#include
using namespace std;
int main(int argc, char *argv[])

{

float x;



// double x;

cout << setw(5) << "x" << " " << setw(12) << "x" << endl;

cout << fixed;

for(x = 1; x <= 2.95; x = x + 0.15){

cout << setprecision(5) << x << " " << setprecision(15) << x << endl;

}

system("PAUSE");



return EXIT_SUCCESS;

}
Rezultatele sunt cele de mai jos. Se vor observa valorile variabilei x afişate cu 15 zecimale.








float x;

double x;

Reamimtim că, în reprezentarea în virgulă mobilă scurtă (float) precizia calculelor este de aproximativ 8 cifre zecimale, iar în reprezentarea în virgulă mobile lungă (double) precizia calculelor este de aproximativ 16 cifre zecimale.



Yüklə 0,56 Mb.

Dostları ilə paylaş:
1   2   3   4   5   6   7   8   9   10   ...   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