Sunteți pe pagina 1din 4

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).