Sunteți pe pagina 1din 0

Operaii cu numere

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.

S-ar putea să vă placă și