Sunteți pe pagina 1din 10

Valeriu Iorga Programare n C

Probleme rezolvate.
1. S se obin reprezentarea ca fracie zecimal a numrului m/n. Eventuala perioad se afieaz
ntre paranteze.
!eprezentarea zecimal a fraciei ordinare se obine prin simularea mpririi cifr cu cifr. In
prealabil se simplific fracia i se separ partea ntreag.
"ungimea prii neperiodice a fraciei zecimale reprezint ma#imul dintre multiplicitile cifrelor $ i
% din descompunerea numitorului.
&ac fracia zecimal are i parte periodic' atunci descompunerea numitorului conine i ali
factori primi n afar de $ i %. ( condiie mai simpl care stabilete dac e#ist parte periodic
este ca restul parial rmas dup obinerea cifrelor din partea neperiodic sa fie diferit de ).
(peraia de mprire se nc*eie n momentul n care apare un rest parial egal cu primul rest parial din
partea periodic. "a citirea datelor +m si n, se asigur verificarea n -. ).
citire m si n si validare n != 0
simplificarea fractiei cu cmmdc
separarea partii intregi si afisarea ei
determinarea lungimii partii neperiodice
simularea impartirii pe lungimea partii neperiodice
if (exista parte periodica)
salveaza primul rest partial din partea periodica
afisare paranteza deschisa pentru partea periodica
do
calcul cifra din partea periodica si afisare
obtinerea urmatorului rest partial
while (restul partial != primul rest partial)
afisare paranteza inchisa pentru partea periodica
In efectuarea mpririi' o cifr a c/tului se obine prin mprirea ntreag a restului parial cu
numitorul. 0rmtorul rest parial se obine ca restul mpririi cu numitorul a restului parial curent'
completat n ultima poziie cu un zero +nmulit cu 1),. Primul rest parial din partea
neperiodic este numrtorul nmulit cu 1). Simularea mpririi pe lungimea prii neperiodice se
e#prim prin1
rest_partial = 10 * m
for (i = 1 ; i=lungime_parte_neperiodica; i!!)
printf("#d"$ rest_partial % n);
rest_partial = rest_partial # n * 10
Programul complet este1
&include stdio'h(
&include stdlib'h(
int main())
int m$ n$ %* numarator si numitor fractie *%
rp$ %* restul partial *%
lfn$ %* lungimea fractiei neperiodice *%
m*$ m+$ %* multiplicitati * si + in numitor *%
c$ d$ r$ i;
12
Valeriu Iorga Programare n C
%*citire date *%
scanf("#d#d"$ ,m$ ,n);
-hile (n==0) %* fortare n!=0 *%
scanf("#d"$ ,n);
%* simplificarea fractiei cu cmmdc calculat cu algoritmul lui
.uclid *%
c = m;
d = n;
do ) %* algoritmul lui .uclid *%
r = c # d;
c = d;
d = r;
/ -hile(r);
m %= c; %* simplificare fractie *%
n %= c;
%* separare parte intreaga *%
printf("#0d % #0d = #0d'"$ m$ n$ m % n);
m #= n;
%* lungimea fractiei neperiodice *%
m* = 0; c = n; %* multiplicitate * *%
-hile (c # * == 0))
m*!!;
c %= *;
/
m+ = 0; c = n; %* multiplicitate + *%
-hile (c # + == 0))
m+!!;
c %= +;
/
%* lfn = max ( m*$ m+ ) *%
lfn = m*;
if(m+ ( lfn)
lfn = m+;
%* efectuarea impartirii pentru partea neperiodica *%
rp = 10 * m; %* primul rest partial *%
for(i=0; ilfn; i!!))
printf("#1d"$ rp % n); %* cifra din partea neperiodica *%
rp #= n * 10; %* urmatorul rest partial *%
/
%* efectuarea impartirii pentru partea periodica *%
if(rp)) %* exista parte periodica *%
printf("(");
c = rp; %* salvare primul rest partial *%
do)
printf("#1d"$ c % n); %* cifra din partea periodica *%
c #= n * 10; %* urmatorul rest partial *%
/ -hile(c!=rp);
printf(")");
13
Valeriu Iorga Programare n C
/
printf("1n");
return 0;/
Probleme propuse.
1. &e pe mediul de intrare se citete un numr real rad reprezent/nd un ung*i exprimat n radiani.
S se converteasc n grade, minute i secunde centesimale.
2. 0n maratonist pornete n curs la un moment de timp e#primat prin ora, minutul i
secunda startului. Se cunoate de asemeni timpul necesar sportivului pentru parcurgerea
traseului. S se determine momentul terminrii cursei de ctre sportiv.
4. S se stabileasc codomeniul & al valorilor funciei1
f : [x1, x2] D, f(x) = a.x
2
!.xc, a, !, c ", a #.
Se cunosc a, !, c, x1, x2.
5. Cunosc/nd data curent e#primat prin trei numere ntregi reprezent/nd anul' luna' ziua
precum i data naterii unei persoane e#primat n acelai mod' s se calculeze v/rsta persoanei
e#primat n ani' luni i zile. Se consider n mod simplificator c toate lunile au 4) de zile.
%. 0n punct n plan este dat prin coordonatele lui (x, $). S se stabileasc poziia lui prin
indicarea cadranului +1' $' 4 sau 5, n care este plasat. Pentru un punct situat pe una din semia#e se
vor preciza cadranele separate de semia#a respectiv +de e#emplu $64,.
7. Se citesc trei numere reale pozitive ordonate cresctor. S se verifice dac acestea pot s
reprezinte laturile unui triung*i i n caz afirmativ s se stabileasc natura triung*iului1 isoscel'
ec*ilateral' dreptung*ic sau oarecare i s se calculeze aria sa.
2. Cunosc/nd data curent i data naterii unei persoane e#primat fiecare sub forma unui triplet
(an,luna,%i) s se afle v/rsta persoanei n ani implinii.
3. &e pe mediul de intrare se citete un ung*i e#primat n grade,minute,secunde. S se
converteasc n radiani.
8. 0n numr ntreg 2 reprezint o durat de timp e#primat n secunde . S se converteasc n
%ile, ore, minute i secunde utiliz/nd n program c/t mai puine variabile.
1). 9rei valori reale sunt citite n variabilele a, !, c. S se fac sc*imbrile necesare astfel nc/t
valorile din a, !, c s apar n ordine cresctoare.
11. S se scrie algoritmul pentru rezolvarea cu discuie a ecuaiei de gradul 11 a&x!=#' cu valorile
lui a i ! citite de pe mediul de intrare.
1$. S se scrie algoritmul pentru rezolvarea cu discuie a ecuaiei de gradul $1 a&x
2
!&x c =
#. Se dau pe mediul de intrare coeficienii a, !, c care pot avea orice valori reale reprezentabile
n memoria calculatorului.
14. Se consider sistemul de ecuaii1
18
Valeriu Iorga Programare n C
a&x !&$ = c
m&x n&$ = '
dat prin valorile coeficienilor a, !, c, m, n, '. S se rezolve sistemul cu discuie.
15. S se scrie algoritmul pentru :casierul automat: care citete de pe mediul de intrare suma
+intreag, datorat de un client i calculeaz :restul: pe care acesta l primete n numr minim de
bancnote i monezi de 1#####, (####, 1####, (###, 1###, (##, 1##, (#, 2(,
1#, (, ) i 1 leu consider/nd c suma pltit este cel mai mic multiplu de 1##### mai mare
dec/t suma datorat.
1%. S se calculeze data revenirii pe pm/nt a unei rac*ete' e#primat prin an, lun*, %i$
or*, minut, secund*' cunosc/nd momentul lansrii e#primat n acelai mod i durata de
zbor e#primat n secunde.
17. 0n numr perfect este un numr egal cu suma divizorilor si' printre care este considerat
valoarea 1 dar nu i numrul.
S se gseasc toate numerele perfecte mai mici sau egale cu un numr + dat pe mediul de intrare' i
s se afieze fiecare numr astfel determinat' urmat de suma divizorilor lui. &e e#emplu numrul ,
are divizorii 1, 2, ), ,. El este numr perfect deoarece1 , = 1 2 ).
12. &/ndu6se trei numere ntregi reprezent/nd data unei zile (an,lun*,%i)' s se stabileasc a
c/ta zi din an este aceasta.
13. Se dau pe mediul de intrare un numr necunoscut de numere nenule terminate cu o valoare
nul. S se stabileasc dac acestea1
formeaz un ir strict cresctor;
formeaz un ir cresctor;
formeaz un ir strict descresctor;
formeaz un ir descresctor;
sunt identice;
nu sunt ordonate.
18. &/ndu6se un numr ntreg n' s se afieze toi factorii primi ai acestuia precum i ordinele lor de
multiplicitate.
$). <baterea medie ptratic a rezultatelor obinute prin determinri e#perimentale se poate calcula
cu formula1
aplicabil numai dac s6au fcut cel puin $ msurtori.
&/ndu6se pe mediul de intrare - (-2() i rezultatele celor - determinri s se calculeze
abaterea medie ptratic.
$)
) 1 - ( -
x x -
sigma
-
1 i
2
-
1 i
i
2
i

,
_



Valeriu Iorga Programare n C
$1. S se calculeze

n
1 +
. + /
c/nd se cunoate n
$$. S se scrie algoritmul pentru rezolvarea a n ecuaii de gradul $. Se citesc de pe mediul de
intrare valoarea lui n i n triplei (a,!,c) reprezent/nd coeficienii ecuaiilor.
Se recomand realizarea unui program care s utilizeze c/t mai puine variabile.
$4. &/ndu6se notele obinute de o grup de n studeni la o disciplin' s se stabileasc c/i dintre ei au
promovat +nu se vor utiliza dec/t variabile simple,.
$5. Se dau pe mediul de intrare notele obinute de ctre studenii unei grupe la un e#amen' precedate
de numrul studenilor. S se determine dac grupa este sau nu integralist' precum i procenta=ul de
note foarte bune +3''10,.
$%. S se determine cel mai mare (max) precum i cel mai mic (min) element dintr6un ir a
#
,
a
1
, ... a
n01
'
Se dau pe mediul de intrare n precum i cele n elemente ale irului' care sunt citite pe r/nd ntr6o
aceeai variabil a.
$2. &e pe mediul de intrare se citete un numr real ! i un ir de valori reale pozitive terminate
printr6o valoare negativ +care nu face parte din ir,.
S se stabileasc elementul din ir cel mai apropiat de !. Se va preciza i poziia acestuia.
Elementele irului vor fi pstrate pe r/nd n aceeai variabil a.
$3. S se calculeze x
n
pentru x +real, i n +intreg, dai' folosind un numr c/t mai mic de nmuliri de
numere reale.
$8. &e pe mediul de intrare se citesc n valori ntregi pozitive. Pentru fiecare element s se indice cel
mai mare ptrat perfect mai mic sau egal cu el.
4). &e pe mediul de intrare se citete o list de numere ntregi pozitive terminate cu un numr
negativ ce marc*eaz sf/ritul listei. S se scrie n dreptul fiecrei valori numrul prim cel mai
apropiat mai mic sau egal cu numrul dat.
41. S se rezolve ecuaia f(x) = # cu precizia e'silon dat' tiind c are o rdcin n
intervalul 1a,!2 precizat. Se va utiliza metoda n=umtirii intervalului +:bisecie:,.
Indicaie1 Se mparte intervalul 1a,!2 n dou =umti egale; fie m mi=locul intervalului. &ac la
capetele intervalului 1a,m2 funcia are semne contrare soluia se va cuta n acest interval' altfel se
va considera intervalul 1m,!2'Se consider determinat soluia dac mrimea intervalului a
devenit inferioar lui e'silon sau valoarea 3f(m)3 4 e'silon..
4$. &/ndu6se un numr ntreg n s se afle cifrele reprezentrii sale n baza 1# ncep/nd cu
cifra cea mai semnificativ.
44. S se afle cifrele reprezentrii n baza ! +ncep/nd cu cea mai semnificativ, a unui numr a dat n
baza 1#.
$1
Valeriu Iorga Programare n C
Indicaie1
a = c
n
!
n
c
n01
!
n01
... c
#

c
n
= a / !
n

a 5 !
n
= c
n01
!
n01
... c
#
45. &/ndu6se numrul real a (# 4 a 4 1) s se determine primele n cifre ale reprezentrii lui
ntr6o baz ! dat.
4%. &e pe mediul de intrare se citesc n cifre constituind reprezentarea unui numr ntr6o
baz !1 4 1#' ncep/nd cu cea mai puin semnificativ. S se obin i s se afieze cifrele
reprezentrii aceluiai numr ntr6o alt baz !2 4 1#.
47. S se verifice dac un numar ntreg citit de pe mediul de intrare este palindrom' adic se citete
la fel de la st/nga la dreapta i de la dreapta la st/nga +numrul este identic cu rsturnatul su,.
0n astfel de numr este 6(171(6. >u se vor folosi tablouri de variabile pentru pstrarea cifrelor
numrului.
42. S se determine toate numerele prime mai mici sau egale cu un numr + dat pe mediul de
intrare.Pentru a verifica dac un numr x este prim se va incerca divizibilitatea lui cu 2,),6,...
1x 2. >umrul este prim dac nu se divide cu niciunul dintre aceste numere i este neprim dac are
cel puin un divizor printre ele.
43. Printre numerele mai mici sau egale cu un numr n dat pe mediul de intrare s se gseasc cel
care are cei mai muli divizori.
48. Se consider funcia f(x) = ln (2.x
2
1). S se scrie un program pentru tabelarea
pe intervalul [01#, 1#] cu urmtorii pai1
#.1 pentru 3 x 3 1.#
#.( pentru 1.# 4 3 x 3 (.#
1.# pentru (.# 4 3 x 3 1#.#
5). Se d un numr ntreg pozitiv reprezentat n baza 1). S se determine i s se afieze cifrele
reprezentrii sale n baza 17. Se precizeaz c n baza 17 cifrele utilizate sunt
#,...8,9,:,;,D,<,=. Prin convenie la sf/ritul numerelor reprezentate n baza 17
+*e#azecimal, se scrie litera >. &ac cifra cea mai semnificativ a reprezentrii sale este <..? atunci
se va afia ca prim cifr un ). E#emplu1
17( = #9=>
(1#) (1,)
#9=> = 1# & 1,
1
1( & 1,
#
51. &e pe mediul de intrare se citesc cifrele reprezentrii unui numr ntreg n baza 17 terminate cu
caracterul @ +cifrele *e#azecimale sunt #,...,8, 9, :, ;, D, <, =,. S se calculeze i s
se afieze reprezentarea numrului n baza 1).
5$. &/ndu6se un numr ntreg n s se afieze reprezentarea sa cu cifre romane impun/nd regula
$$
Valeriu Iorga Programare n C
ca o cifr s nu poat fi urmat de o alta cu valoare strict mai mare dec/t ea. >umrul 88 se va
reprezenta n aceste condiii ca ?@@@@ABBBB i nu ca @;B@.
54. Se dau dou numere ntregi' primul reprezent/nd un an i al doilea' numrul de zile scurse din acel
an. S se determine data +luna i ziua,.
55. S se calculeze coeficienii binomiali ;
n
1
,;
n
2
,... ;
n
'
n care n i ' sunt intregi pozitivi
dai (' 4= n)' tiind c e#ist urmtoarea relaie de recuren1
;
n
+
=(n0+1)/+&;
n
+01
pornind cu ;
n
#
=1
5%. Se consider polinomul: '
n
(x)=a
#
x
n
a
1
x
n01
... a
n
S se calculeze valoarea polinomului ntr6un punct x dat' dac valorile coeficienilor lui x se citesc
pe r/nd' n aceeai variabil a 1
a, n ordinea descresctoare a puterilor lui x +adic n ordinea a
#
,a
1
,...a
n
,
b, n ordinea cresctoare a puterilor lui x' +adic n ordinea a
n
,a
n01
,...a
#
,
57. Pentru a' b i n dai +a,! ", n C, s se calculeze x i $ astfel ca1 xi&$=(ai&!)
n
fr a folosi formula lui Aoivre
52. S se calculeze i s se afieze valorile integralei1
pentru +=1,2,...,n' n care n i x sunt dai' cunosc/nd c1
B
+
(x) =[x
+
D9
+
1
x
+01
9
+
2
x
+02
0 ... (01)
+
9
+
+
]e
x
unde 1
9
+
'
= +(+01) ...(+0'1)
53. S se calculeze pentru n dat' f
n
termenul de rangul n din irul lui ?ibonacci' cunosc/nd relaia
de recuren1
f
'
= f
'01
f
'02
pentru ' E 2 i f
#
= 1, f
1
= 1
58. Birul 1x
n
2 generat cu relaia de recuren x
n
= (x
n01
a/x
n01
)/2 pornind cu x
#
= a/2 este
convergent pentru a E # i are ca limit a . Pentru a oarecare' dat' s se construiasca un
algoritm care calculeaz a ca limit a acestui ir'cu o precizie e's dat.
%). Birurile 1u
n
2 i 1F
n
2 generate cu relaiile de recuren1
u
n
=(u
n01
F
n01
)/2 i F
n
= u
n01
F
n01
pornind cu u
#
=1/3a3, F
#
=1/3!3$ unde a#, !#
au o aceeai limit comun' valoarea integralei eliptice1
$4

2 /
#
2 2 2 2
x sin ! x cos a
dx 2
B

x
#
u +
+
du e u ) x ( B
Valeriu Iorga Programare n C
S se calculeze aceast integral pentru a i ! dai' ca limit comun a celor dou iruri' determinat
apro#imativ cu precizia e's' n momentul n care distana ntre termenii celor dou iruri devine
inferioar lui e's' adic 3u
n
DF
n
3 4 e's.
%1. Pentru calculul lui lg
2
x se genereaz irurile 1a
n
2, 1!
n
2 i 1c
n
2
cu relaiile de recuren1
x a cu 'ornind
2 a
2 a a
a
# 2
1 n
2
1 n
2
1 n
n

'

<


dac
$
a
dac
$
1 6 n
!
n
= !
n01
/ 2 pornind cu !
#
=1
Se tie c pentru 1 4 x 4 2, lim c
n
= lg
2
x'
&ac x (1,2) se aduce argumentul n acest interval folosind relaiile1
lg
2
x = 0 lg
2
(1/x) pentru x 4 1
lg
2
x = +lg
2
(x/2
+
) pentru x 2
+

%$. &ezvoltarea n serie1
este rapid convergent pentru x mic.Pentru x oarecare'acesta se descompune sub forma1
x = i f in care1
i = partea intreag a lui x
f = partea fracionar a lui x.
!ezult e
x
= e
i
& e
f
cu1
$5
# c cu 'ornind
2 a daca ! c
2 a daca c
c
# 2
1 n n 1 n
2
1 n 1 n
n

'

+
<

# +
+
x
. +
x
e
# i 'entru e e e e
i
i
>


# i 'entru
e
1
e
1
e
1
e
i
i
<


x a
2 a
2
a
2 a a
a
# 2
1 n
2
1 n
2
1 n
2
1 n
n

'

<


cu pornind
daca
daca
Valeriu Iorga Programare n C
Pentru x dat' s se calculeze e
x
cu o precizie e's dat.
%4. S se obin reprezentarea ca fracie zecimal a numrului m / n. Eventuala perioad se
afieaz ntre paranteze.
%5. S se determine valoarea n pentru care1
satisface conditia 3/ 0 /)3 4 ' in care e's este dat.Se stie c.
%%. S se calculeze funcia Cessel de spea I6a G
n
(x) tiind c e#ist relaia de recuren1
G
'
(x) = (2'02)/x&G
'01
(x) D G
'02
(x)
Calculele se fac cu precizia e's +x, n i e's se dau pe mediul de intrare,.
%7. Pentru n dat s se calculeze suma1
%2. S se calculeze cu o precizie cunoscut tiind c1
%3. S se calculeze sin(x) i cos(x) cu precizia dat eps utiliz/nd dezvoltrile n serie de puteri1
$%

n
1 +
2
+ n 6
2
/
4
2 lim
5

,
_


)
$
$
)
$
1
+
+
+
+
x
x G
) ! (
) ( ) (

+
+

,
_


)
1 $
1
1
$
1
+
+
+
+ +
x
x G
)! ( !
) ( ) (
n 2 6 2
) 1 n 2 ( ) 1
6 2
) 1
2
1
/



+ +

+
+ +

7
1
(
1
)
1
1
6
+ +
. 7
x
. (
x
. )
x
. 1
x
) x sin(
7 ( )
Valeriu Iorga Programare n C
%8. ?ie irurile 1a
n
2,1!
n
2,1c
n
2 generate cu relaiile de recuren1
a
n
= (!
n01
c
n01
)/2!
n
= (c
n01
a
n01
)/2c
n
= (a
n01
!
n01
)/2 cu
a
#
= alfa H !
#
= !eta H c
#
= gama
alfa, !eta,gama date. Btiind c cele trei iruri sunt convergente i au o limit comun' s se
calculeze cu o precizie e's dat aceast limit.
7). S se calculeze prin dezvoltare in serie' cu precizia e's dat' sin(x)6
&eoarece seria este rapid convergent c/nd argumentul se afl n primul cadran' se va face
reducerea sa la primul cadran utiliz/nd urmtoarele relaii1
sin(x) = 0 sin(0x) dac* x 4 #
sin(x) = sin(x02n) dac* x E 2n
sin(x) = 0 sin(x0) dac* x E
sin(x) = sin(0x) dac* x E /2
$7
+ +
. ,
x
. 6
x
. 2
x
1 ) x cos(
, 6 2
+ +
. 7
x
. (
x
. )
x
x ) x sin(
7 ( )