Sunteți pe pagina 1din 8

Hustiuc Victor pagina 30-37

Parametrul de control este \n%4d:%-10f .


Primul specificator de format, %4d, indica c valoarea variabilei x va fi afisat pe patru
caractere, cu alinierea implicate la dreapta.Cum valoarea cu pricina, 34, ocupa numai dou
caractere, rezult ca inaintea lui 34 vor fi scrise doua caractere spaiu(inainte si nu dup, din
cauza alinierii la dreapta).
Al doilea specificator de format, %-10f, arat ca valoarea variabilei x, de tipul float, va fi afisat
pe zece caracter, cu alinierea la stanga (dat de caracterul - ).Neprecizandu-se numrul de
zecimale, rezult c acesta va fi cel implicit, adic ase.Deci valoare afiat va fi
6.250000.Aceast valoare ocup opt caractere din cele zece rezervate, deci se vor completa
doua caractere spatiu.Din cauza alinierii la stanga, respectivele spaii vor fi scrise la
sfarit.Efectul va fi urmatorul rand pe ecran:
34:6.250000
b)printf(\n%-4d:%6.3f,a,x);
Specificatorul %-4d ne spune ca valoare lui a va fi afisata pe patru caractere cu alinierea la
stanga, deci dupa numarul 34 se vor scrie doua spaii.
Specificatorul %6.3f stabilete formatul pentru valoarea lui x: sae caractere, din care trei
zecimale, cu alinierea implicata la dreapta.Valoarea este 6.250, ea are numai cinci caractere, deci
trebuie completata cu un caracter spaiu care va fi scris naintea sa.
n urma execuiei acestei instruciuni, s-a obinut afiarea ceruta in enun:
34 : 6.250
Instructiunile c), d) i e) fiind asemanatoare, ilustram grafic efectul lor, fr alte explicaii.
c)printf(\n%6d:%10f,a,x);

34:6.250000

d)printf(\n%-d:%-.3f,a,x);
34:6.250
e)printf(\n%d:%f,a,x);
34:6.250000
Raspuns corect: b)

30

R.I.17
Dac de la tastatur se introduce caracterul a, iar codurile literelor mici sunt successive, sunt
succesive, ncepand cu 97, ce afiseaz programul urmtor ?
#include <iostream.h>
#include<stdio.h>
void main ()
{
char c, p ;
p=getchar() ;
int n=p+259 ;
c=n;
putchar (c) ;
}
a)356

b)a

c)d

d)100

e)programul este greit

Soluie
Funciile getchar(), getch(), i getche() citesc un caracter i returneaz
caracterul citit.Deosebirile dintre cele trei funcii sunt urmtoarele:
Funcia getchar() preia caracterul numai dup apsarea tastei ENTER i l
afieaz pe ecran (vom spune c citirea se face fr ecou);
Funcia getche() preia caracterul far s mai atepte apsarea tastei ENTER, i l
afieaz (adic citirea se face fr ecou)
Funcia getch() preia caracterul fr s mai atepte confirmarea cu ENTER,
dar nu l afieaz.
Cu ajutorul funciei getchar se citete un caracter care se atribuie variabilei p
{p=getchar()}.S urmrim celelalte instruciuni pentru cazul in care am citi caracterul a.
int=p+259;
Operanzii care se adun sunt un caracter i un ntreg.Expresia nu este greit.n acest caz
acioneaz conversia implicit a caracterului ctre tipul int: caracterul din variabila p
(caracterul a) este nlocuit cu codul su ASCII.Vom obine n=97+259=356.Conversia sa
fcut fr pierdere de informaie.
c=n;
Variabilei c de tipul char i se atribuie numrul ntreg n.Aceast instruciune nu este greit,
avand loc conversia invers, de la ntreg la caracter.n urma acestei operaii se va produce o
pierdere de informaie, conversia avand loc n baza urmtoarei reguli:
se determinp valoarea restului mprtirii lui n la 256, iar valoare obinut este
interpretat ca fiind codificarea ASCII a unui caracter.De exemplu, numarul -159
va fi convertit in caracterul a, ca urmare a mparirii cu rest:
-159=---------1*256+97
n cazul reprezentrii ntregului pe doi octei, cu octeii inversai, plecand de la
egalitatea 356=256+100, putem concluziona c octetul din stanga va conine
valoarea 100, iar octetul din dreapta valoarea 256.Variabila c, fiind de tipul
char, are la dispoziie un singur octet pentru memorarea valorii sale.n
consecin, dintre cei doi octei ai valorii lui n, se va reine in c doar octetul din

stanga cu valoarea 100.Acesta reprezint al treilea caracter dupa 97 , n spe,


codificarea lui d.
Cu ajutorul funciei putchar (c) se tiparete caracterul memorat n variabila c.

R.I.18.
Ce valoare afieaza programul de mai jos?
#include <iostream.h>
void mai ()
{
int a=3, b=2, n=4,x;
x=(a<<n)+(a&b)+(n|b);
cout<<x;
}
a) 2
b) 8
c) 51
d) 56

e)programul este greit

S OLU I E
Limbajul C++ dispune de o serie de operatori pentru prelucrarea valorilor ntregi la
nivel de bit.Acetia sunt:
&I pe bii (conjuncie), | SAU pe bii (disjuncie);
^ SAU EXCLUSIV pe bii (disjuncie exclusiv);
~ negarea pe biti ;
<< deplasarea pe stanga pe bii: a<<n are ca effect deplasarea biilor lui a cu n
poziii la stanga; este echivalent cu a*2 la puterea n;
>> deplasarea la dreapta pe bii: a>>n are ca efect deplasarea bitilor lui a cu n
pozitii la dreapta; este echivalent cu a/2 la puterea n ;

Operaiile elementare ntre cifrele binare sunt:


~1=0, ~0=1
0&0=0, 0&1=0, 1&0=0, 1&1=1
0|0=0, 0|1=1, 1|0=1, 1|1=1
0^0=0, 1^1=1, 1^0=1, 0^1=1
Vom deduce n continuare valoarea expresiei (a<<n)+(a&b)+(n|b), atribuit lui x,
pentru a=3,b=2,n=4.
Avem nevoie de reprezentarile n baza 2 ale valorilor a i b.ntrucat 3=1*2+1*2 i
2=1*2, rezult a=(011) si b=(010).
Aa cum am spus, a<<n este echivalent cu a*2 la puterea n , adic 16.
Valorile lui a&b si n|b sunt :
a0 1 1(I)
b0 1 0
________
a&b0 1 0 2

n1 0 0 (SAU)
b0 1 0
_________
n|b1 1 0 6

Drept urmare, prin atribuirea x=(a<<n)+(a&b)+(n|b) se obine x=48+2+6, x=56.


Rspuns corect: d).

TEste GRILA PROPUSE


P.I.1 Care dintre valorile de jos sunt constant intregi scrise correct?
a)123
b)-17
c) +843
d)0154
e)- -67
P.I.2 Care dintre constructiile de mai jos reprezinta constante caracter?
1)
2)/
3)a
4)
5)//
6)/13
8)
a) 2),3) si 8)
b) toate
c) toate mai putin 5) si 6)
b) 2),3),4) si 8)
e) 3),4),5),6) si 8)

7) a

P.I.3 Pentru fiecare dintre constantele aflate in coloana A), alegeti din coloana B) tipul sau :
Coloana A)
Coloana B)
A1) 5.0
B1) constantaintreaga
A2) 5
B2)constanta reala
A3) 5
B3)constantahexazeci
A4) 05
B4)constanta octala
A5) 5
B5)constantacaracter
A6) 0*5
B6)constanta sir de
caractere
a)A1
B2, A1 B1, A3 B5, A4
B1, A5 B6, A6
B3
b) A1
B2, A1 B1, A3 B5, A4 B4, A5 B5, A6 B3
c) A1
B2, A2 B1, A3 B5, A4 B4, A5 B6, A6 B3
d) A1
B2, A2 B1, A3 B5, A4 B4, A5 B6, A6 eronata
e) A1 B2, A2
B1, A3
B5, A4
B1, A5
B6, A6
eronata

P.I.4 Care dintre urmatoarele declaratii de variabile declara correct o variabila x ce poate
memora valori reale ?
a) float x;
b) double x;
c) unsigned float x;
d) x:float;
e) x:double;

P.I.5 Care dintre liniile de program de mai jos realizeaza initializarea corecta a variabilei x la
declararea sa ?
a) int x==2
b) x:int=2;
c) int x=2;
d) int x 2;
e) x=2 : int;

34

P.I.6 Care dintre variabile vor avea valori intregi dupa executie secventei de program
urmatoare ?
int a=3,b,c;
float x=-11.23;
char d;
b=x;
d=A;
c=M-N;
a) variabila x b)variabila c c)variabila d d)variabila a e)variabila b
P.I.7 Definiti o constanta simbolica PI cu valoarea 3.14, folosind directiva-preprocesor
define.
a)#define 3.14 PI;
b)#define PI 3.14;
c)#define float PI 3.14;
d)#define PI=3.14;
e)#define float PI=3.14;
P.I.8 Care dintre programele de mai jos nu contin erori si afiseaza cuvintele Program si
simplu unu sub altul (fiecare pe cate un rand)?
a)
b)
#include<iostream.h>
#include <iostream.h>
void main ();
main()
{cout<<Program;
{
cout<</n<<simplu;
cout<<Program/n;
}
cout<<simplu;
}
c)
d)
#include<iostream.h>
#include <iostream.h>
void main ()
void main ()
{
{
cout<<Program;
cout<<Program/nsimplu;
cout<<simplu<</n
cout<</n
}
}
e) Nici unul dintre programele anterioare .
P.I.9 Ce valoare afiseaza programul urmator ?
#include <iostream.h>
#include <math.h>
void main ()
{
int x=4, y=-9 ,
z=(x+y)/2,
u;
z--;
u=(sqrt(abs(x))+sqrt(abs(y)))/(x+y);
z-=u/52-x-y;
cout<</n<<z;
}
a) -7

b)-8

c)-9

d)4

e)5

P.I.10 Fie variabilele intregi a=1, b=2, c=3, d=4.Care dintre constructiile de mai jos sunt expresii
scrise correct, cu valoarea 0?
a)!d
b)a+b<d
c)a*b+c
d)a=b<c
e)(a<b)!=(b<c)
P.I.11 Care dintre urmatoarele afirmatii sun adevarate ?
a)Operatorul de atribuire este ==
b)Operatorul care realizeaza SAU logic intre 2 expresii este &&
c)!= este un operator logic .
d)a%b reprezinta restul impartirii a lui a la b
e)Intr-o expresie, operatorii relatioanali se executa inaintea celor aritmetici.
P.I.12 Pentru care dintre seturile de valori ale variabilei x, y, z de mai jos expresia
(x<y)<((z!=x)<((z-y)<x) are valoarea 1?
a) x=3;y=5;z=4; b) x=4;y=3; z=4;
c) x=3; y=4; z=3
d) x=5; y=4;z=3;
e) x=5; y=5; z=5;
P.I.13 Fie variabilele intregi a si b.Expresia

ab + a-b /2
a-2
a
b-2
b
a) ((a*b) + (a-b)/2)/((a-2)/(b-2)-(a/b))
b)(a*b+(a-b)/2/((a-2)/(b-2)-a/b)
c)(a*b+(a-b)/2)/a-2/b-2-(a/b)
d)((a*b+(a-b)/2)/a-2/b-2)-a/b
e)(a*b+(a-b)/2)/(a-2/b-2-/b)
P.I.14 Fiind date variabilele intregi a si b, cum se scrie correct conditia a mai mic decat b si b
mai mic decat c?
a)(a<b) && (b<c)
b) (a<b) & (b<c)
c)a<b && b<c
d)
(a<b) (b<c)
e) a<b | b<c
P.I.15 Care dintre urmatoarele expresii au valoarea 1 daca si numai daca valorile variabilelor x si
y sunt numere pare ?
a)x-y==2
b)x*y%4==o
c)(x+y)%2==0
d)y%x==2
e) (x%2==0) && (y%2==0)
P.I.16 Care dintre urmatoarele expresii sunt adevarate daca si numai daca valorile variabilelor x
si y sunt numere naturale consective ?
a)x-y==1
b)(x==1) && (y==2)
c)(x-y==1) && (y-x==1)
d)y==x1
e) (x-y==1) (y-x==1)

P.I.17 Se considera urmatoarele declaratii de variabile :


int a, b, e;
float c, d;
Care dintre instructiunile de mai jos sunt corecte ?
a) a=a*b;
b)e=a<c;
c) b=a+a/b;
cout<<(d=(a+b)/2);
e)c*d=a-b;

d)

P.I.18 Fie variabilele a, b, c, si m toate de tipul float. Care dintre secventele de mai jos afiseaza
correct media aritmetica a numerelor a, b si c?
a)printf (%f, (a+b+c)/3);
b)printf(%f, a+b+c/3)
c)printf(%d, a/3+b/3+c/3);
d) printf(%f,((a+b)/2+c)/2);
e) printf(%f,m=(a+b+c)/3)

P.I.19 Fie variabilele x, y, ai u de tipul int.Care dintre instructiunile de mai jos mareste
valoarea variabilei u cu catul intreg al impartirii lui x la y ?
a)u+=x%y;
b) u=x%y+u;
c) u=x/y;
d)u+=x/y;
e)u=x/y+u;