Sunteți pe pagina 1din 8

Coduri. Sisteme de numeratie. Pseudocod.

Algoritmi
(Codes. Numeration systems. Pseudo-code. Algorithms)
Obiective:

Ctigarea abilitii de a face conversii ntre diferitele baze de numeraie

Scrierea de algoritmi simpli n pseudocod

Dezvoltarea gndirii algoritmice


Objectives:

To learn about base conversions

To develop simple algorithms in pseudo-code.

To develop an algorithmically thinking mode


Rezumat:
Principalele sisteme de numeraie implicate n domeniul calculatoarelor sunt:
- binar cu simbolurile 0, 1;
- octal cu simbolurile 0, 1, , 7;
- zecimal cu simbolurile 0, 1, , 9;
- hexazecimal cu simbolurile 0, 1, , 9, A, B, C, D, E, F.
ntr-un sistem de numeraie n baza b, un numr N format din parte ntreag i fracionar se poate
reprezenta ntr-una din formele:
-

sub forma de ir:


anan-1an-2a1a0,a-1a-2a-m

sub forma unui polinom :


anbn + an-1bn-1 + + a1b1 + a0b0 + a-1b-1 + a-2b-2 + + a-mb-m

(1)

(2)

sub forma unei sume:


n

ai b

i m

Exemplu:

b reprezint baza de numeraie;


ai cifrele;
n (+1) numrul de cifre al prii ntregi;
m numrul de cifre al prii fracionare;
an cifra cea mai semnificativ;
am cifra cea mai puin semnificativ.
3510 = 1000112 = 438 = 2316
1810 = 100102 = 228 = 1216

(3)

Conversia bazei
Prin conversie nelegem transcrierea unui numr dintr-o baz n alta. Exist dou metode mai frecvent
utilizate n procesul de conversie:
- metoda mpririi/nmulirii bazei;
- metoda substituiei.
Conversia numerelor ntregi dintr-o baza b n baza 10
Definim n acest caz partea ntreag prin:
I = anbn + an-1bn-1 + + a1b1 + a0b0

(4)

Fie cazul n care b=2, adic conversia din baza 2 n baza 10 i n acest caz aplicnd regula de mai sus
(substituiei) utiliznd relaia (4) avem:
110112 = 1*24 + 1*23 + 0*22 + 1*21 + 1*20 = 16 + 8 + 2 + 1 = 27
Pentru b=8 avem:
5338 = 5*82 + 3*81 + 3*80 = 347
Pentru b=16 avem:
AC316 = A16*162 + C16*161 + 3*160 = 10*256 + 12*16 +3 = 2755
Conversia numerelor ntregi din baza 10 n alt baz b
n acest caz vom da un procedeu simplu pornind de la relaia (4) care se bazeaz pe mprirea acestei
relaii de definiie cu baza b, aa numita regul de mprire a bazei.
I

C1

R1 = (a b
n

n-1

+ an-1bn-2 + + a1b0) + a0/b,

(5)

unde C1 i R1 sunt ctul respectiv restul.


Termenii din parantez fiind ntregi, ne vor da valoarea C1 i deci :
R1 = a0.

(6)

Continund cu acelai procedeu vom avea:

C1
b

C2

R2

= (anbn-2 + an-1bn-3 + + a2b0) + a1/b ,

(7)

i deci: R2=a1.

(8)

Procesul se continu pn cnd ctul este nul. mpririle se fac n baza 10.
Exemplu:
Convertii numrul 27 n baza 2.
27
13
6
3
1
1
1
0
1
1
a0
a1
a2
a3
a4

0
-

Citirea se va face de la coad spre nceput:27 = a4a3a2a1 = 1100112


Conversia numerelor reale
Deci n acest caz avem reprezentarea numerelor ntregi sub forma de ir, polinom sau sum, dat de relaiile
1, 2, 3.

a) Partea ntreag se convertete conform regulilor specificate anterior n subcapitolul precedent.


b) Dac considerm partea fracionar reprezentat sub forma polinomial:
F = a-1b-1 + a-2b-2 + + a-mb-m

(9)

Atunci:
- un numr fracionar se convertete din baza b n baza 10 folosind regula substituiei pe baza acestei
relaii.
Exemple:
0.11012 = 1*2-1 + 1*2-2 + 0*2-3 + 1*2-4 = + + 1/16 = 0.8125
0.358 = 3*8-1 + 5*8-2 = 29/64 = 0.453125
0.2C16 = 2*16-1 + C16*16-2 = 44/256 = 0.171875
-

un numr fracionar din baza 10 se convertete n baza b folosind regula nmulirii bazei pe baza
urmtorului algoritm:
F = a-1 + (a-2b-1 + a-3b-2 + + a-mb-m+1) = a-1 +F1 = a-1,a-2a-m

i deci
a-1 =

F * b , adic partea ntreag din F*b.

(10)

(11)

Asemntor avem:
a-2 =

F1 * b ,

(12)

i procesul se ncheie dac exist un i astfel nct produsul Fi*b s fie ntreg. Dac nu exist se obine o
fracie periodic.
Exemple:
Convertii numrul N = 0.8125 din baza 10 n baza 2.

a-1
a-2
a-3
a-4

0
1
1
0
1

8125
6250
250
50
0

*2

Deci rezultatul este: 0.11012


Convertii numrul N = 0.453125 din baza 10 n baza 8.

a-1
a-2

0
3
5

453125
625
0

Deci rezultatul este 0.358


Operaii aritmetice n binar, octal, hexazecimal

*8

Operaiile aritmetice n alte baze se fac asemnator cu cele din zecimal inndu-se ns cont de
simbolurile i caracteristicile fiecrei baze n parte.
n cadrul sistemelor de calcul de obicei se prefer tabelarea s zicem a operaiilor de adunare i
nmulire pentru bazele:
- binar;
- octal;
- zecimal;
- hexazecimal.
Se poate considera i un algoritm care se bazeaz pe urmtorii pai:
o Numerele care particip la operaie se convertesc n baza zece.
o Se efectueaz calculele n baza zece.
o Rezultatul se convertete n baza b cerut.
Exist i alte procedee de conversie pentru trecerea din dou baze b i B diferite de 10. n cadrul
domeniului calculatoarelor cel mai adesea se fac conversii pornind de la baza 2 n bazele 8 respectiv 16 i
invers din bazele 16 respectiv 8 n baza 2.
Exemple:
Fie N = 10112
Conversia n baza 8 se face prin gruparea a cte 3 cifre binare pornind de la dreapta spre stnga, iar n
baza 16 prin gruparea a 4 cifre, astfel:
N = 1| 011 =
= 1 3
= 138
Procesul de conversie direct din bazele 16, respectiv 8 n baza 2 se face reprezentnd cifrele hexa
respectiv octale pe 4, respectiv 3 bii astfel:
AB16 = 1010.10112
3418 = 011.100.0112
Calculul complementului unui numr
Complementul unui numr se poate determina prin diverse metode:
- reprezentare binar i inversarea strilor
- sau considernd urmtorul procedeu care ne permite determinarea diferenei a dou numere d i
s:
d s = d + (n-s) n, unde n este o valoare arbitrar.
Dac n = bk, unde k e mare (ca i putere a bazei de numeraie) atunci n-s va fi o valoare pozitiv i
scderea lui s din d se va reduce la eliminarea cifrei 1 situat pe primul loc al sumei d + (n-s).
Exemplu:
157 14 = 157 + (104 14) 104 = 157 + 9986 10000
= 10143 10000 = 0143 = 143
Deci algoritmul de calcul al complementului unui numr n dintr-o baz oarecare b este urmtorul :
Considerm:
b baza sistemului de numeraie i
n, o valoare ca i putere a lui b, bk mai mare dect un numr s dat,
s = smsm-1s0, unde si sunt cifrele reprezentrii lui s n baza b
Dac numrul de zerouri n reprezentarea lui n este p, p > m atunci s se reprezint sub forma:
s = 000smsm-1s0,

unde numrul de zerouri din fa este p m iar complementul lui s, n-s se obine scznd cifra s0 din b iar
restul cifrelor si din b-1.
Exemplu:
Fie:
s = 14
n = 10000
atunci:
m=2
p=4
s = 0014
Pentru a calcula complementul avem:
10 4 = 6
91=8
90=9
90=9
i deci complementul este 9986 care poate fi utilizat la calculul diferenei 157 14.
Algoritmi
Un algoritm este o metod de rezolvare a unui anumit tip de problem i desemneaz o mulime finit i
ordonat de operaii.
Algoritmii lucreaz cu date (constante, variabile, tablouri etc.), operatori, expresii,structuri, clase etc .
Pseudocodul este un asa zis limbaj folosit n proiectarea i documentarea programelor.
Pseudocodul, ca orice limbaj, foloseste date, variabile, operatii si instructiuni, insa intr-un mod mai relaxat,
mai apropiat de limbajul natural uman. Poate fi considerat i ca o metod de documentare folosit pentru a
specifica logica de procesare a unui modul.
Enunurile n pseudocod pot contine:
-Instructiuni : de baz - intrare, ieire, de control if, while etc.
-Funcii, Proceduri,
-Operaii pe fiiere, etc.
Un exemplu de algoritm pentru determinarea valorii Min/Max dintr-un sir de numere scris n pseudocod :
MinMax_Alg:
{
Input X[i], i=0,,N-1
min = X[0]
max = X[0]
For i=1 To N-1 Do
If X[i] < min Then
min = X[i]
EndIf
If X[i] > max Then
max = X[i]
EndIf
EndFor
Output min, max
}//end
Cutarea unui numr ntr-un ir de numere ordonat, prin metoda njumtirii intervalului
Algoritm de Cautare:
{
Input X[i], I=0,,N-1
Input val

nceput = 0
sfrit = N-1
mijloc = (nceput + sfrit) / 2
While ((nceput <= sfrit) AND (val <> X[mijloc])) Do
if val < X[mijloc] then
sfrit = mijloc 1
else
nceput = mijloc + 1
mijloc = (nceput + sfrit) / 2
EndWhile
If X[mijloc] = val Then
Output mijloc
Else
Output Nu am gsit valoarea dat
EndIf
}
Algoritmul lui Euclid pentru determinarea c.m.m.d.c. a dou numere ntregi
Algoritm Euclid:
{
Input n1, n2
If n1 > n2 Then
deimp = n1
imp = n2
Else
deimp = n2
imp = n1
EndIf
rest = imp
While rest != 0 Do
rest = deimp modulo imp
deimp = imp
imp = rest
EndWhile
Output deimp
}
Ordonarea unui ir de numere ntregi prin metoda seleciei
Prin aceast metod se caut poziia celui mai mic element, dup care se schimb acesta cu elementul de pe
prima poziie. n continuare, se ia n considerare irul format din elementele 2,3,,N i se caut poziia
celui mai mic element din acest ir .a.m.d.
Algoritm SortareSelectie:
{
Input X[i], i=0,,N-1
For i=0 To N-1 Do
Pozmin = i
For j=i+1 To N-1 Do
If X[pozmin] > X[j] Then
Pozmin = j
EndIf
EndFor
Temp = X[pozmin]
X[pozmin] = X[i]
X[i] = Temp
EndFor

Output X[i], i=0,,N-1


}

Summary:
The main numeration systems involved in computer science domain are:
- Binary with 0, 1 symbols;
- octal with 0, 1, , 7 symbols;
- decimal with 0, 1, , 9 symbols;
- hexadecimal with 0, 1 9, A, B, C, D, E, F symbols.
An algorithm is a method used to solve a typical problems being composed by a finite and orderly
set of operations.
The main elements that an algorithm uses are data (constants, variables, arrays, etc.), operators,
expressions, structures, classes, etc.
Pseudo-code is a language used to design and to document problems specifying the control
stream and not the involved data. May be considered as a documentation method used to specify
the processing logic of a module.
A pseudo-code may contain:
-Instructions: base input/output, etc., control if, while, etc.
-Functions, Procedures,
-File Operations, etc.
Example of an algorithm used to determine the Min/Max value from a string of numbers using a
pseudo-code:
MinMax_Alg:
{
Input X[i], i=0,,N-1
min = X[0]
max = X[0]
For i=1 To N-1 Do
If X[i] < min Then
min = X[i]
EndIf
If X[i] > max Then
max = X[i]
EndIf
EndFor
Output min, max
}//end
ntrebri:
1. Ce este un algoritm? De ce este necesar folosirea lui?
2. Care este algoritmul de trecere a unui numr din baza 10 n baza 2? (intreg/real)
3. Cum exprimm n pseudocod situaia n care avem un punct de decizie n program ?
Teme:
1. Convertii:
- n baza 8 numrul 347;
- n baza 16 numrul 2755;
- n baza 2 numrul 20.
2. Convertii n baza 10 numerele: 10001012, 3578, C7A16
3. Efectuai urmtoarele operaii:

a) FA16+2316=
b) 1101 00102 + 1110 11012=
c) 11768-7238=
4. Convertii numerele din baza 2 n baza 8 i apoi 16:
a) 10101010,110010
b) 1100010,11101
5. Convertii numrul 0,63298510 n baza 16.
6. Scriei pseudocodul pentru diverse metode de sortare ca, Heap (heap sort), Bulelor
(buble sort), Rapid (quick sort), Radix (radacina), etc.
7. Considernd dou numere ntregi determinai cmmdc folosind algorimul lui Euclid.
8. Descriei algoritmii pentru descompunerea unui numr n factori primi, determinarea
tuturor numerelor prime pn la un n citit etc.
9. Considernd algoritmul de nmulire chinezeasc descriei n pseudocod paii necesari
pentru a nmuli dou numere ntregi. tii i ali algoritmi interesani de nmulire?
Questions:
1. What do you understand by an algorithm? Why we use algorithms?
2. Which is the algorithm used to convert a value from 10 base to 2 base? (int/real)
3. How do we express in pseudo-code the situation when the program is in a decisive
point?
Homework:
1. Convert:
- the number 347 in the corresponding number in base 8;
- the number 2755 in the corresponding number in base 16;
- the number 20 in the corresponding number in base 2.
2. Convert in base 10 the numbers: 10001012, 3578, C7A16
3. Calculate:
a) FA16+2316=
b) 1101 00102 + 1110 11012=
c) 11768-7238=
4. Convert the following numbers from basa 2 in base 8 and then in base 16:
a) 10101010,110010
b) 1100010,11101
5. Convert the number 0,63298510 in base 16.
6. Describe in pseudo-code different sort methods as Heap (heap sort), Bubble (bubble
sort), Quick (quick sort), Radix (root), etc.
7. Considering two integer numbers determine the greatest common measure using the
Euclidian algorithm.
8. Describe the algorithm used to decompose a number in prime factors, determine all the
prime numbers to a value n, etc.
9. Considering the chines multiplying algorithm describe in pseudo-code the steps to
multiply 2 int numbers. Do you know others interesting algorithms for multiplying?

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