Documente Academic
Documente Profesional
Documente Cultură
ntregi
Consideraii teoretice
Probleme propuse
Soluiile problemelor propuse
Capitolul
6
6.1. Consideraii teoretice
n matematic, operaiile simple sunt adunarea i scderea. nmulirea i mprirea
sunt operaii compuse care pot fi definite pe baza primelor dou operaii, astfel:
nmulirea este o adunare repetat;
mprirea este o scdere repetat.
De multe ori n programarea calculatoarelor ne ntlnim cu asemenea situaii: o
operaie compus trebuie s fie implementat prin combinarea mai multor operaii
simple, de aceeai natur sau de natur diferit. n asemenea situaii, corectitudinea
operaiei compuse depinde de cele mai multe ori att de corectitudinea implementrii
operaiilor simple, ct i de corectitudinea nlnuirii logice a acestor operaii.
Ne vom referi la modul de implementare a unor operaii compuse pe baza unor
operaii simple predefinite. Vom nva s nmulim fr a nmuli i s mprim fr
a mpri. De asemenea, vom nva s adunm mai multe numere, fr a ti cte sunt
i s nmulim mai multe numere cu scopul de a efectua un anumit calcul.
nainte de a rezolva probleme, reinei ca regul c, atunci cnd utilizm o variabil
pentru a efectua adunri repetate aceasta va fi iniializat cu 0, iar atunci cnd o utili-
zm pentru a efectua nmuliri repetate, ea va fi iniializat cu 1. Exist i excepii de
la aceast regul, care depind de contextul fiecrei probleme.
Vom rezolva probleme interesante legate de prelucrarea numerelor ntregi. Proble-
mele pe care vi le propunem nu presupun cunotine avansate de matematic, ns v
vei convinge de importana experienei i a intuiiei pentru rezolvarea uoar a altor
probleme. Vei avea ocazia s vedei ce mult se simplific o problem atunci cnd n
rezolvarea ei reuii s observai o anumit regul subtil sau s avei o idee eficient.
58
6. Operaii cu numere ntregi
6.2. Probleme propuse
6.2.1. nmulirea fr a nmuli
Aa cum v-am precizat deja, putem defini nmulirea numerelor ntregi ca o adunare
repetat. Problema noastr este de a scrie un program care s nmuleasc dou nume-
re a i b fr a folosi operatorul de nmulire.
Date de intrare
Se dau dou numere naturale a i b.
Date de ieire
Se va afia produsul celor dou valori date.
Restricii i precizri
1 a, b 100;
Datele de intrare sunt considerate corecte.
Exemplu
Intrare
a=3 b=5
Ieire
produs=15
Explicaie
3*5 = 3+3+3+3+3 = 5+5+5
6.2.2. mprirea fr a mpri
Similar problemei enunate anterior putem formula problema mpririi ntregi. Defi-
nind mprirea ca o scdere repetat, trebuie s aflai ctul i restul mpririi ntregi a
dou numere naturale.
Date de intrare
Se dau dou numere naturale a i b.
Date de ieire
Se vor afia ctul i restul mpririi ntregi dintre a i b.
Restricii i precizri
1 a, b 100;
Datele de intrare sunt considerate corecte.
Exemplu
Intrare
a=11 b=4
Ieire
ct=2 rest=3
Explicaie
11 = 2 * 4 + 3 putem scdea 4 din 11 de
dou ori i mai rmne 3
6. Operaii cu numere ntregi
59
6.2.3. Media aritmetic
Se citesc numere ntregi pn la citirea valorii 0. S se determine media aritmetic a
acestor valori.
Date de intrare
Se dau mai multe numere ntregi.
Date de ieire
Se va afia media aritmetic a acestor valori.
Restricii i precizri
dac prima valoare citit este egal cu zero, se va afia un mesaj adecvat;
valoarea 0 nu se contabilizeaz ca i valoare citit.
Exemplu
Intrare
1 2 3 4 0
0
Ieire
2.5
Nu calculez!!
Explicaie
11 = 2 * 4 + 3 putem scdea 4 din 11 de
dou ori i mai rmne 3
Nu a fost introdus nici o valoare care s fie
contabilizat.
6.2.4. Factorial
n multe probleme este necesar calculul produsului primelor n numere naturale (pentru
valoarea lui n dat). Aceast valoare reprezint factorialul numrului natural n respec-
tiv i se noteaz cu n! (1 2 3 (n 1) n).
S se calculeze factorialul unui numr natural n dat.
Date de intrare
Se d numrul natural n.
Date de ieire
Se va afia factorialul numrului n dat. Dac valoarea citit nu se afl n intervalul
[0, 10] se va afia mesajul 'Nu pot efectua calculele.'
Restricii i precizri
0 n 10;
0! = 1 prin definiie;
datele de intrare nu sunt ntotdeauna corecte.
60
6. Operaii cu numere ntregi
Exemplu
Intrare
n=4
n=-3
Ieire
24
Nu pot efectua calculele.
Explicaie
1*2*3*4=24
A fost introdus o valoare care
nu se afl n intervalul [0, 10].
6.2.5. Suma cifrelor unui numr
Se citete de la tastatur un numr natural avnd cel mult 9 cifre. Calculai suma cifre-
lor acestui numr.
Date de intrare
Se d numrul natural n avnd cel mult 9 cifre.
Date de ieire
Se va afia suma cifrelor numrului n dat.
Restricii i precizri
0 n 999999999;
datele de intrare sunt considerate corecte.
Exemplu
Intrare
n=123456789
Ieire
45
Explicaie
1+2+3+4+5+6+7+8+9=45
6.2.6. Numrul de cifre
n multe situaii ne confruntm cu probleme de numrare. De exemplu, tiind numrul
de picioare pe care le au n total oile dintr-o turm, s se determine numrul de oi din
turma respectiv.
Vom avea acum de rezolvat o alt problem, puin mai grea: s se determine num-
rul maxim de numere naturale consecutive care folosesc n total cel mult n cifre.
Date de intrare
Se d numrul natural n, reprezentnd numrul maxim de cifre.
Date de ieire
Se va afia numrul maxim de numere naturale consecutive care folosesc cel mult n
cifre.
Restricii i precizri
1 n 100000;
6. Operaii cu numere ntregi
61
va fi luat n considerare i numrul 0, care are o cifr;
cifrele folosite nu sunt distincte.
Exemplu
Intrare
n=65
Ieire
37
Explicaie
irul maxim de valori consecutive care se pot scrie cu cel mult 65 de
simboluri cifr este: 0, 1, 2, 3, 4, 5, 6,7, 8, 9, 10, 11, 12, 13, 14, 15,
16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34,
35, 36. Acest ir conine 64 de cifre n total, dar nu se mai poate con-
strui nc un numr format dintr-o singur cifr (ar urma numrul 37).
6.2.7. Palindrom
Un numr este palindrom dac este egal cu oglinditul su. Numrul 121 este palin-
drom, deoarece oglinditul su este tot 121, ns numrul 123 nu este palindrom, deoa-
rece oglinditul su este 321.
Se d un numr natural n. Precizai dac numrul respectiv este palindrom.
Date de intrare
Se d numrul natural n.
Date de ieire
n funcie de proprietatea numrului dat, se va afia rspunsul 'DA' sau 'NU'.
Restricii i precizri
0 n 999999999.
Exemplu
Intrare
n=121
n=123
Ieire
DA
NU
Explicaie
Numrul 121 este palindrom
Numrul 123 nu este palindrom
6.2.8. Numr special
S se afieze pe ecran ptratul unui numr format din n cifre. Prima cifr a numrului
este egal cu 2 i toate celelalte cifre sunt egale cu 3.
Date de intrare
Se d numrul natural n, reprezentnd numrul total de cifre al numrului special.
Date de ieire
Se va afia ptratul numrului special format din cele n cifre.
62
6. Operaii cu numere ntregi
Restricii i precizri
2 n 1000.
Exemplu
Intrare
n=2
n=3
n=4
Ieire
529
54289
5442889
Explicaie
23
2
= 529
233
2
= 54289
2333
2
= 5442889
6.2.9. Cub palindrom
Se d numrul natural n. Determinai cel mai mare numr natural al crui cub (puterea
a treia) este un numr palindrom mai mic dect n.
Date de intrare
Se d numrul natural n.
Date de ieire
Se va afia numrul al crui cub este simultan mai mic dect n i este palindrom.
Restricii i precizri
2 n 2000000000.
Timp de execuie: 1 secund/test
Exemplu
Intrare
n=10
n=1500
Ieire
2
11
Explicaie
2
3
= 8, iar 8 este palindrom
11
3
= 1331, iar 1331 este palindrom
6.3. Soluiile problemelor propuse
6.3.1. nmulirea fr a nmuli
Vom utiliza o variabil produs pe care o vom iniializa cu 0 la care vom aduna apoi
valoarea variabilei a n mod repetat de b ori sau valoarea variabilei b n mod repetat de
a ori.
Pentru a minimiza numrul de operaii ar trebui s adugm valoarea maxim(a, b)
de un numr de ori egal cu minim(a, b).
6. Operaii cu numere ntregi
63
Iat descrierea n pseudocod a algoritmului:
Algoritm AdunareRepetat:
citete a,b
maxim a
minim b
dac a < b atunci
maxim b
minim a
sfrit dac
produs 0
pentru i=1,minim execut:
produs produs + maxim
sfrit pentru
scrie produs
sfrit algoritm
6.3.2. mprirea fr a mpri
innd cont de definiia dat, va trebuie s stabilim de cte ori putem scdea b din a,
fr ca a s devin negativ (aceast valoare reprezint ctul) i ct rmne n a (aceas-
t valoare reprezint restul ce a rmas n urma scderilor).
Pentru a v ajuta n rezolvarea problemei, iat descrierea n pseudocod a algoritmu-
lui:
Algoritm ScdereRepetat:
citete a,b
ct 0
ct timp a b execut:
a a b
ct ct + 1
sfrit ct timp
rest a
scrie ct,rest
sfrit algoritm
6.3.3. Media aritmetic
Media aritmetic a mai multor valori se calculeaz folosind urmtoarea formul:
n
suma
media = ,
unde suma reprezint suma tuturor valorilor a cror medie se calculeaz, iar n repre-
zint numrul valorilor care au intrat n calcul (n sum).
64
6. Operaii cu numere ntregi
Deci, va trebui s reinem n fiecare etap a calculului numrul de valori nenule
citite, precum i suma acestor valori. n final, va trebui s calculm media, ns trebuie
s fim ateni: n cazul particular n care prima valoare citit este egal cu zero, aplica-
rea formulei de mai sus conduce la eroarea de mprire la zero i programul se ntre-
rupe cu un mesaj de eroare ('Error 200: Division by zero.').
Iat descrierea n pseudocod a algoritmului de rezolvare a problemei:
Algoritm MediaNumerentregi:
suma 0
n 0
repet
citete valoare
suma suma + valoare
dac valoare 0 atunci
n n + 1
sfrit dac
sfrit ct timp
dac n = 0 atunci
scrie 'Nu calculez!!'
altfel
media suma/n
scrie media
sfrit dac
sfrit algoritm
6.3.4. Factorial
Problema nu ridic nici un fel de dificulti, ns trebuie s fim ateni la faptul c dup
citirea datelor de intrare trebuie s validm corectitudinea lor. De asemenea, nu uitai
c variabila n care vei calcula produsul cerut trebuie s fie iniializat corespunztor.
n rest, rezolvarea presupune o serie de n nmuliri, pe care le putei efectua n orice
ordine dorii (de la 1 la n sau de la n la 1).
6.3.5. Suma cifrelor unui numr
Pentru a rezolva problema v reamintim faptul c ultima cifr a unui numr se poate
obine folosind operatorul mod i se poate elimina din numr folosind operatorul div.
6.3.6. Numrul de cifre
Dac ar fi vorba despre oie ar fi foarte simplu: mprim la 4 numrul picioarelor i
afim rezultatul mpririi. ns, n cazul problemei noastre, pentru n numr foarte
mare, numerele pot fi de 1, 2, 3, 4 sau chiar 5 cifre.
6. Operaii cu numere ntregi
65
Problema devine extrem de simpl dac vei reui s calculai numrul numerelor
formate cu cel mult o cifr, numrul celor formate cu cel mult dou cifre, cu cel mult
trei cifre etc. Rmne s descoperii singuri la ce ajut aceste valori de referin.
6.3.7. Palindrom
Calea clasic de rezolvare a problemei const n determinarea oglinditului numrului
dat i testarea egalitii dintre numrul n oglind i numrul dat. Numrul n oglind
conine aceleai cifre ca i numrul dat, dar n ordine invers.
Iat ce nseamn determinarea oglinditului unui numr: se separ pe rnd ultima
cifr a numrului i se introduce la sfritul numrului oglindit, pn cnd numrul de
oglindit devine egal cu zero. Inserarea unei cifre la sfritul unui numr se realizeaz
prin nmulirea cu 10 a sumei curente i adunarea cifrei respective (schema lui Horner).
Numrul Ultima cifr Oglinditul su
121
12
1
0
1
2
1
0
0
1
12
121
Observaie
Dac am testa acum egalitatea dintre numrul oglindit i numrul dat iniial, rs-
punsul ar fi c nu sunt egale (0 121). Totui, numrul 121 este palindrom, conform
definiiei date anterior. n concluzie, numrului dat trebuie s-i crem o copie, pentru
a-l avea la dispoziie dup construirea numrului oglindit.
Descrierea n pseudocod a algoritmului de determinare a oglinditului unui numr
este urmtoarea:
Algoritm Oglindit:
citete n
oglindit 0
ct timp n 0 execut:
cifra rest[n/10]
n [n/10]
oglindit oglindit*10 + cifra
sfrit ct timp
scrie oglindit
sfrit algoritm
6.3.8. Numr special
Din exemplele date ncercai s descoperii regula dup care se poate forma ptratul
numrului special dat. Calculai i pentru alte valori de intrare pentru a verifica dac
ai identificat regula corect.
66
6. Operaii cu numere ntregi
6.3.9. Cub palindrom
O abordare la prima vedere ar presupune parcurgerea mulimii numerelor naturale,
ncepnd cu numrul n dat, pn cnd gsim un numr care este cub perfect i care es-
te i palindrom. Aceast variant este inadecvat deoarece, pentru valori mari ale nu-
mrului n nu vom reui s ne ncadrm n timpul de execuie solicitat n enun.
O abordare mai inteligent ar presupune determinarea celui mai mare numr al c-
rui cub este mai mic sau egal cu n i apoi, ncepnd cu acel numr, s cutm numere
din ce n ce mai mici, cutarea oprindu-se atunci cnd cubul numrului curent este i
palindrom.
n prima variant, cazul cel mai defavorabil presupune parcurgerea a cel puin
500000000 de valori distincte.
n a doua variant, numrul total de valori candidate nu depete 1260, dar cazul
cel mai defavorabil presupune verificarea cel mult a ctorva zeci de valori.
O diferen de apte ordine de mrime ntre numrul de valori candidate care trebu-
ie verificate se va reflecta cu siguran i n timpul de execuie al programului.
Dac dorii s v convingei de ineficiena primei variante, ar fi un exerciiu util s
implementai singuri aceast metod de abordare.
Observaie
Este util s nvai cum s extragei radicalul de ordin 3. V oferim o formul gene-
ral, fr a da explicaii acum. Fie m i n dou numere naturale. Radicalul de ordin m
din n se poate calcula folosind urmtoarea formul:
n
1/m
= e
ln(n)/m
Aceast formul o putei scrie n Pascal dup cum urmeaz:
Sqrt3:=Exp(Ln(n)/m)
Totui, se mai tie c utiliznd aceast formul v vei lovi de probleme de precizie
cu care lucreaz calculatorul cnd se prelucreaz numere reale. De asemenea, chiar
dac n cod se scrie mai puin, calculatorului i va lua mai mult timp un astfel de calcul
dect cutarea numrului n care coincide cu presupusul cub:
V prezentm secvena de algoritm n pseudocod cu care se poate verifica dac un
numr dat este sau nu cubul unui alt numr:
Algoritm Cub:
citete n
m 1
ct timp m*m*m < n execut:
m m + 1
sfrit ct timp
6. Operaii cu numere ntregi
67
dac m*m*m = n atunci
scrie 'Cub perfect.'
altfel
scrie 'Nu este cub perfect.'
sfrit algoritm
Dac la ieirea din structura repetitiv avem nevoie i de valoarea a crui cub este
numrul n dat, o avem pe aceasta n variabila m i o putem folosi. Evident, algoritmul
poate fi generalizat pentru o putere oarecare, caz n care calcularea puterii o vom face
ntr-o structur repetitiv cu numr cunoscut de pai.
Atragem ns atenia asupra faptului c astfel nu putem extrage radicalul de ordin k
al unui numr dat care nu este o putere perfect.