Sunteți pe pagina 1din 70

www.cartiaz.ro – Carti si articole online gratuite de la A la Z

LIMBAJE DE PROGRAMARE

CAPITOLUL 1.

ELEMENTE DE LOGICĂ MATEMATICĂ ŞI ALGEBRĂ BOOLEANĂ

1.1. Calculul propoziţiilor

1.1.1. Noţiunea de propoziţie

DEFINIŢIA 1.1. Se numeşte propoziţie un enunţ (un ansamblu de cuvinte cărora li s-a dat un sens) despre care se ştie că este sau adevărat sau fals, însă nu simultan şi una şi alta.

Exemple de propoziţii:

1) În orice triunghi suma unghiurilor sale este egală cu 180 o ; 2) 3+2=5; 3) 2>5; 4) Balena este un mamifer. 5) Planeta Saturn este satelit al Pamântului.

Propoziţiile 1), 2) şi 4) sunt adevărate dar 3) şi 5) sunt false.

O clasă foarte largă de propoziţii adevărate o constituie teoremele din matematică.

Contraexemple (enunţuri care nu sunt considerate propoziţii):

1) x+2=5; (enunţurile cu variabile sunt predicate) 2) Deschide uşa !; (enunţ imperativ) 3) Numărul x divide numărul y; (predicat) 4) Atomul de aur este galben. (enunţ absurd)

1.1.2. Valoare de adevăr

Notăm cu P 2 mulţimea propoziţiilor definite după definiţia 1.1.

DEFINIŢIA 1.2. Funcţia v : P 2 {0,1} se numeşte funcţia valoare de adevăr. Fiecărei propoziţii din mulţimea propoziţiilor P 2 i se ataşează valoarea 1 dacă propoziţia este adevărată, şi valoarea 0 dacă este falsă.

De obicei se vor nota propoziţiile prin litere mici: p,q,r

1

şi cu v(p), v(q),

www.cartiaz.ro – Carti si articole online gratuite de la A la Z

v(r)

valorile lor de adevăr.

1.1.3. Operatori (operaţii cu propoziţii)

Cu ajutorul operatorilor definiţi în continuare se pot construi propoziţii compuse.

Negarea propoziţiilor. Negarea propoziţiei este propoziţia "non p", care se notează !p şi care este adevărată când p este falsă şi falsă când p este adevărată.

Valoarea de adevăr a propoziţiei !p este dată în tabela următoare:

v(p) v(!p)

1

0

0

1

Conjucţia propoziţiilor. Conjucţia propoziţiilor p,q este propoziţia care se citeşte "p şi q", notată cu pΛq, care este adevărată atunci şi numai atunci când fiecare din propoziţiile p, q este adevărată. Valoarea de adevăr a propoziţiei pΛq este dată în tabela următoare:

v(p) v(q) v(p q)

0

0

0

0

1

0

1

0

0

1

1

1

Disjuncţia propoziţiilor. Disjuncţia propoziţiilor p, q este propoziţia care se citeşte "p sau q" (notată pVq) şi care este adevărată, atunci şi numai atunci când este adevărată cel puţin una dintre propoziţiile p, q.

2

www.cartiaz.ro – Carti si articole online gratuite de la A la Z

Valoarea de adevăr a propoziţiei pVq este dată în tabela următoare:

v(p) v(q) v(pq)

0

0

0

0

1

1

1

1

0

1

1

1

Implicaţia propoziţiilor.

valoare de adevăr rezultă din tabela urmatoare

Să considerăm propoziţia compusă ( p)Vq a cărei

 

v(p) v(q) v(!p) v((!p)q)

 

0

0

1

1

0

1

1

1

1

0

0

0

1

1

0

1

Propoziţia

(!p)Vq

se notează

p

q

şi se numeşte implicaţia

propoziţiilor p,q (în acestă ordine); p este ipoteza iar q este concluzia.

Observăm că

(!p)Vq

este falsă atunci şi numai atunci când p este

adevărată şi q falsă, în celelalte cazuri fiind adevărată.

Echivalenţa propoziţiilor. Cu propoziţiile p, q putem forma propoziţia compusă (p q) Λ (q p) care se notează p şi se citeşte "p dacă şi numai dacă q". Din tabela următoare se vede că propoziţia p q este adevărată atunci şi numai atunci când p şi q sunt în acelaşi timp adevărate sau false.

v(p)

v(q) v(p q)

v(q p) v(p q)

0

0

1

1

1

0

1

1

0

0

1

0

0

1

0

1

1

1

1

1

Formule echivalente în calculul propoziţional

3

www.cartiaz.ro – Carti si articole online gratuite de la A la Z

Cu operaţiile anterioare se pot construi diverse expresii numite formule ale calculului propoziţional (notate cu a,b

) care are valoarea o propoziţie adevărată indiferent

se numeşte formulă identic adevărată sau

cum sunt propoziţiile p, q, r, tautologie.

O formulă a(p,q,r,

Proprietăţi:

1) pV(qΛr)

(pVq)Λ (pVq)

distributivitaţi

2) pΛ (qVr)

(pΛq)V(pΛr)

3) p

!(!p)

 

negarea negaţiei

4) ! (pVq)

 

!p Λ !q

legile lui De Morgan

5) ! (pΛq)

!p V !q

6) p

q

!p

!q

principiul reducerii la absurd

7) pVq

qVp

comutativităţi

8) pΛq

qΛp

1.2. Elemente de algebră booleană

Elementele pe care le vom prezenta în cele ce urmează sunt strict necesare pentru a putea explica, în capitolele următoare, principiile funcţionării calculatoarelor. Ne vom mărgini doar la prezentarea elementelelor de strictă necesitate, fără a intra în detalii referitoare la calculul propoziţiilor, formele normale etc.

1.2.1. Mulţimea B 2 , operaţii

Unul dintre capitolele importante ale logicii matematice este calculul propoziţiilor, având ca principale operaţii negarea propoziţiilor, conjuncţia propoziţiilor şi disjuncţia propoziţiilor. Valoarea de adevăr a unei propoziţii este notată cu "1", iar valoarea de fals cu "0", simbolurile "1" şi "0" fiind aici simboluri fără înţeles numeric.

Mulţimea formată din elementele 0 şi 1, cu operaţiile + şi definite în clasa de resturi modulo 2, formează un inel. După cum se va vedea, mulţimea formată din elementele 0 şi 1 are extrem de multe aplicaţii în informatică.

4

www.cartiaz.ro – Carti si articole online gratuite de la A la Z

Fie mulţimea B 2 = {0,1}. Peste această mulţime se definesc mai multe operaţii. DEFINIŢIA 1.3. Operaţia binară notată , definită prin tabelul 1.1. se numeşte disjuncţie

0

1

0

0

1

1

1

1

Tabelul 1.1. Definirea operaţiei

DEFINIŢIA 1.4. Operaţia binară notată numeşte conjuncţie.

sau , definită prin tabelul 3.2. se

 

0

1

0

0

0

1

0

1

Tabelul 1.2. Definirea operaţiei

DEFINIŢIA 1.5. Operaţia unară notată ! definită prin tabelul 3.3. se numeşte negaţie.

x

! x

0

1

1

0

Tabelul 1.3. Operaţia !

În ordinea priorităţilor, aceste operaţii se succed astfel:

conjuncţia, disjuncţia).

!, ,

(negaţia,

În continuare vor fi prezentate principalele proprietăţi ale acestor operaţii. Ele pot fi demonstrate uşor, folosindu-se tabelele de adevăr.

TEOREMA 3.1. Următoarele 10 grupuri de proprietăţi sunt adevărate:

5

www.cartiaz.ro – Carti si articole online gratuite de la A la Z

1. a (b c) = (a b) c

2. a (bc) = a ba c

3. a a = a

4. a b = b a

5. a (ab) = a

6. ! ! a = a

7. ! (a b) = !a

!b

a(bc) = (ab)c abc = (ab)(ac) aa = a ab = ba aa b = a

(Asociativităţi) (Distributivităţi) (Idempotenţe) (Comutativităţi) (Absorbţii) (Dubla negaţie)

! (ab) = !a !b (Legile lui De Morgan)

8. a 0 = 0

a0

= a

9. a 1 = a

a1

= 1

10. a !a = 0

a!a = 1

DEFINIŢIA 1.6. Structura algebrică (B 2 , , , !) formează o algebră booleană

DEFINIŢIA 1.7. Operaţia binară notată , definită prin tabelul 1.4. se numeşte suma modulo 2 sau sau-exclusiv.

0

1

 

0 0

1

1 1

0

Tabelul 1.4. Definirea operaţiei

TEOREMA 1.2. Structura algebrică (B 2 , , ) formează un inel comutativ cu element unitate. Acest inel poartă numele de inel boolean.1

1.2.2. Funcţii booleene şi reprezentări ale lor

Vom nota prin B 2 n produsul cartezian al mulţimii B 2 cu ea însăşi de n ori. Deci

B 2 n

=

B 2 B 2

B

2 .

DEFINIŢIA 1.8. O funcţie

f : B 2 n --- > B 2 se numeşte funcţie booleană.

Un n-uplu x = (x 1 , x 2 ,

, x n )

B 2 n va fi numit punct din B 2 n . Prin f(x) =

6

www.cartiaz.ro – Carti si articole online gratuite de la A la Z

f(x 1 ,x 2 ,

Este uşor de văzut că în B 2 n sunt 2 n puncte. Deci, pentru a reprezenta o funcţie booleană este necesară construcţia tabelului cu valorile funcţiei în fiecare dintre aceste puncte. Un astfel de tabel va avea 2 n linii şi n+1 coloane, ca în tabelul 1.5.

,x

n ) vom înţelege valoarea funcţiei în punctul x.

x

1

x

2

x

n-1

x

n

f(x)

0

0

 

0

0

y

0

0

0

 

0

1

y

1

0

0

 

1

0

y

2

0

0

 

1

1

y

3

1

1

 

1

0

y

2 n-2

1

1

 

1

1

y

2 n-1

Tabelul 1.5. Definirea unei funcţii Booleene de n variabile

Prin y i

B 2 n .

B 2 , i

{0, 1,

, 2 n -1 } am notat valorile funcţiei f în toate punctele din

De exemplu, se poate defini astfel funcţia booleană de trei variabile din tabelul

1.6.

a

B

c

f(a,b,c)

0

0

0

0

0

0

1

0

0

1

0

1

0

1

1

1

1

0

0

0

1

0

1

0

1

1

0

1

7

www.cartiaz.ro – Carti si articole online gratuite de la A la Z

1

1

1

0

Tabelul 1.6. O funcţie Booleană de 3 variabile

Pe lângă reprezentarea prin tabel, funcţiile booleene pot fi reprezentate şi cu ajutorul expresiilor booleene. În aceste expresii sunt folosiţi operatorii: !,

şi . Operanzii sunt formaţi din variabilele funcţiei şi eventual din simbolurile 0 şi 1 având rolul de constante. Pentru schimbarea ordinii de efectuare a operaţiilor se folosesc parantezele ( şi ). În continuare vom da trei reguli după care se poate construi o expresie ce defineşte o funcţie booleană dată prin tabelul ei de valori.

R1. Pentru fiecare linie din tabel pentru care y i =1 se va construi un termen conjunctiv în conformitate cu regula R2. Termenii conjunctivi se vor lega între ei prin operatori de disjuncţie.

R2. La un termen conjunctiv participă cele n variabile, în conformitate cu regula R3. Acestea variabile sunt legate între ele prin operatori de conjuncţie.

R3. Dacă valoarea unei variabile în linia i este 1 atunci în termenul conjunctiv apare variabila; dacă valoarea ei este 0, atunci în termenul conjunctiv apare negaţia variabilei respective.

Urmând aceste reguli, funcţia de trei variabile dată ca exemplu în tabelul 1.6 va fi definită astfel:

f : B 2 3

B 2

f(a,b,c) = !a b !c

!a b c

a b !c

Cei trei termeni conjunctivi corespund liniilor y 2 , y 3 şi y 6 . Valorile celor trei variabile în aceste linii sunt respectiv 010, 011 şi 110. Aplicând cele trei reguli, se obţine formula de mai sus. După cum este cunoscut din calculul propoziţiilor, o funcţie booleană

8

www.cartiaz.ro – Carti si articole online gratuite de la A la Z

poate avea mai multe reprezentări prin expresii. Acelaşi calcul al propoziţiilor defineşte diverse forme normale şi descrie metode de simplificare a expresiilor care reprezintă funcţii booleene. Obţinerea unei expresii prin regulile R1-R3 de mai sus conduce la forma normală disjunctivă perfectă.

9

CAPITOLUL 2.

SISTEME ŞI BAZE DE NUMERAŢIE

Numim sistem de numeraţie totalitatea regulilor folosite pentru scrierea numerelor, cu ajutorul unor simboluri numite cifre. În decursul istoriei s-au impus mai multe sisteme de numeraţie.

2.1. Tipuri de sisteme de numeraţie

Cel mai primitiv mod de reprezentare a numerelor este răbojul. Pe un băţ numit răboj, omul primitiv cresta câte o linie pentru fiecare obiect sau animal care-i aparţinea (blănuri, oi etc.). Tot pe un astfel de răboj se marcau datoriile unui gospodar faţă de altul (de unde şi cunoscuta expresie "am scris pe răboj"). S-a constatat că acest mod de scriere a numerelor este deosebit de incomod. Pentru numere mari trebuie folosite multe semne, eventual trebuie folosite semne diferite pentru numere mai deosebite (10, 50, 100 etc.). Aceste semne se combină în diferite moduri. După felul de grupare şi ordonare a semnelor se deosebesc două sisteme de numeraţie: sistemul aditiv şi sistemul poziţional.

2.1.1. Sistemul de numeraţie aditiv (roman)

Sistemul de numeraţie roman foloseşte pentru scrierea numerelor cifrele:

I, V, X, L, C, D, M

care corespund valorilor: unu, cinci, zece, cincizeci, o sută, cinci sute, respectiv o mie.

Trei reguli importante guvernează acest sistem de numeraţie:

Regula 1.

Mai

reprezintă suma acestor cifre.

multe

cifre

de

aceeaşi

valoare,

scrise

De exemplu:

XXX = 30;

II = 2;

MM = 2000.

consecutiv,

Regula 2. O pereche de cifre de valori diferite, în care cifra de valoare mai mare se află în faţa cifrei de valoare mai mică reprezintă,

Regula 3.

de asemenea, suma acestor cifre.

De exemplu:

XI = 10+1 = 11; VI = 5+1 = 6.

O pereche de cifre de valori diferite, în care cifra de valoare mai mică se află în faţa cifrei de valoare mai mare reprezintă diferenţa acestor cifre.

De exemplu:

IX = 10-1 = 9;

IC = 100-1 = 99.

Sistemul de numeraţie roman prezintă dezavantajul unei scrieri greoaie şi a lipsei unei reprezentări unice a numerelor. Astfel avem:

49

=

IL

=

LIC

Alte neajunsuri ale acestui mod de scriere: numerele mari sunt în general lungi şi adesea de necuprins cu privirea, iar operaţiile aritmetice cu aceste semne sunt foarte anevoioase.

2.1.2. Sistemul de numeraţie poziţional (arab)

Acest sistem a fost introdus de către indieni şi chinezi şi a fost preluat de către europeni datorită arabilor. El este un sistem poziţional, în care aportul unei cifre în stabilirea valorii numărului depinde atât de valoarea ei cât şi de poziţia pe care o ocupă în scrierea numărului. Această caracteristică asigură superioritatea sistemului de numeraţie arab faţă de sistemul de numeraţie roman. În scrierea arabă, fiecare grup de 10 elemente numărate (unităţi) formează o grupă de rang superior (zeci), 10 grupe de zeci formează o grupă de rang superior grupei zeci (sute) ş.a.m.d., conform celor cunoscute de elevi încă din clasa I primară. Datorită faptului că numărul zece este pragul de trecere la un rang superior, se spune că este folosită baza de numeraţie 10. Pentru scrierea în baza 10 sunt folosite cifrele:

0, 1, 2, 3, 4, 5, 6, 7, 8, 9

În secţiunile următoare vom dezvolta acest sistem de numeraţie folosind nu numai baza 10, ci şi alte baze de numeraţie.

2.2. Sisteme poziţionale de numeraţie în diverse baze

2.2.1. Reprezentarea numerelor naturale într-o bază b

N, b > 1 un număr numit bază de numeraţie. Întreaga teorie

aritmetică a reprezentării numerelor în baza b este fundamentată pe teorema care urmează.

Fie b

TEOREMA 2.1. Pentru orice număr natural nenul x, există în mod unic un

număr natural n numit rang şi n+1 numere naturale c 0 , c 1 , baza b, care satisfac relaţiile:

c n numite cifre în

1) x

=

c n b n + c n-1 b n-1

+

+

c 1 b + c 0 ,

 

2) c i

{ 0, 1,

, b-1 },

i

{ 0, 1,

,

n }

3) c n

π

0.

Demonstraţie: Deoarece x 1, iar b > 1, rezultă că există, în mod unic, un număr natural n pentru care este verificată dubla inegalitate (axioma lui Arhimede):

b n

x

< b n+1

Acest număr n este cel din enunţul teoremei. În continuare, vom aplica inducţia completă după n.

Pentru n = 0, avem chiar c 0 = x şi alegerea este unică. Presupunem teorema adevărată pentru n şi să demonstrăm că rămâne valabilă şi pentru n+1. Scriind teorema împărţirii cu rest, unde deîmpărţitul este x şi împărţitorul este b, rezultă:

x

=

yb + r,

cu 0

r < b

Vom pune acum c 0 = r, care este determinat în mod unic. Dacă b n+1 x <

b n+2 , rezultă că b n y < b n+1 . Pentru y este valabilă ipoteza de inducţie, deci

pentru el există n+1 cifre, pe care le vom nota c 1 , c 2 , asemenea unic determinate. Rezultă că avem:

, c n+1 şi care sunt de

x

=

c n+1 b n+1

+ c n b n +

+

c 1 b + c 0

şi că sunt verificate celelalte două relaţii din teoremă. Cu aceasta, teorema este complet demonstrată.

, b-1 } câte un

simbol (caracter, semn etc.) în aşa fel, încât la numere diferite să ataşăm simboluri diferite. Convenim, de asemenea, că atunci când ne referim la o cifră c i , să-i scriem de fapt simbolul C i asociat numărului c i . Cu aceste convenţii (şi

cu ipoteza că simbolurile "(" şi ")" nu reprezintă cifre, avem reprezentarea numărului x în baza b:

Să ataşăm acum fiecărui număr din mulţimea { 0, 1,

(C

m C m-1

C

1

C 0 ) b

În tot ceea ce urmează, vom identifica cifrele simbolurile ataşate lor C i (şi le vom scrie tot c i ).

c i

din teoremă cu

Observaţie: Din definiţia dată reprezentării unui număr într-un sistem de numeraţie poziţional cu baza b, rezultă că o cifră indică o valoare de b ori mai mare decât aceeaşi cifră situată într-o poziţie de rang mai mic cu o unitate. Din acest motiv sistemele de numeraţie poziţionale mai sunt numite sisteme ponderate.

În sistemul de numeraţie cu baza 10, numit sistem zecimal, sunt folosite simbolurile de cifre:

0, 1, 2, 3, 4, 5, 6, 7, 8, 9

Acest sistem este utilizat pe scară largă în prelucrarea manuală a datelor, precum şi în comunicarea cu un sistem de calcul.

Sistemul de numeraţie cu baza doi, numit sistem binar, foloseşte numai cifrele 0 şi 1. El stă la baza construcţiei sistemelor de calcul.

Sistemul de numeraţie cu baza 16, numit sistem hexazecimal foloseşte cifrele:

0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F

ultimele şase simboluri, de fapt primele şase litere ale alfabetului, scrise fie cu majuscule fie cu minuscule, desemnează numerele 10, 11, 12, 13, 14 şi 15 ca cifre în baza 16. Din raţiuni de scriere comodă, şi pentru evitarea unor confuzii, simbolurile de cifre dintr-o anumită bază sunt preluate în bazele de numeraţie superioare. Astfel, în orice bază de numeraţie cu b 16 se folosesc simbolurile indicate mai sus, fiecare simbol indicând acelaşi număr, indiferent de bază. De exemplu, în baza 7 se folosesc simbolurile 0 6, iar

în baza 13 se folosesc simbolurile 0 9, A C; simbolul B este cifră doar începând cu baza 12 şi reprezintă cifra care are valoarea 11.

Este momentul să precizăm că sunt folosite şi alte reprezentări ale cifrelor decât cea prin simboluri grafice. Această afirmaţie este, aparent, neobişnuită, deoarece majoritatea covârşitoare a populaţiei nu cunoaşte alt sistem de numeraţie decât cel zecimal! Dar, spre exemplu, atunci când se foloseşte calculatorul pentru lucrul cu baze de numeraţie foarte mari, fiecare cifră este reprezentată prin conţinutul unui cuvânt din memoria calculatorului.

2.2.2. Reprezentarea numerelor reale într-o bază b

Definiţia dată reprezentării numerelor naturale poate fi extinsă şi la numerele reale. Fie x > 0 un număr real.

DEFINIŢIA 2.1. Reprezentarea unui număr real x > 0 în baza b este (şi se scrie):

x

= dacă sunt îndeplinite condiţiile:

(c

n c n-1

c

1

c 0 ,c -1 c -2 c -3

1)

x = c n b n +c n-1 b n-1 +

+c

1 b+c

0 +c -1 b -1 +c -2 b -2 +c

2)

c i

{0,1,

,b-1}

,

i

{n,

,1,0,-1,-2,-3,

3)

c n π 0

 

4)

k

0

j < k astfel, încât

c j

<

b-1

)

b

-3 b -3

}

Comparând definiţia dată reprezentării numerelor reale cu cea dată reprezentării numerelor întregi, se observă că la numerele reale avem în plus condiţia 4). Această condiţie cere să nu existe un rang la partea fracţionară după care toate cifrele reprezentării să fie egale cu b-1. Ea este necesară pentru a asigura unicitatea reprezentării numerelor. Drept contraexemplu, considerăm egalităţile:

1/2 = 0,5 = 0,499999… numerele fiind scrise în baza 10.

Are loc următoarea:

TEOREMA 2.2. Fiind dată o bază de numeraţie b, pentru orice număr real x > 0 există o reprezentare unică în baza b conform definiţiei 4.1. Numărul:

(c

n c n-1

c

1

c 0 ) b

reprezintă, în baza b, partea iintreagă a numărului x, iar numărul

(0,c -1 c -2 c -3

)

b

reprezintă, în baza b, partea fracţionară a numărului x.

DEFINITIA 2.2 Reprezentarea unui număr real x în baza b (extinderea definiţiei 4.1 la toate numerele reale).

a) Dacă x > 0, atunci numărul se reprezintă conform def. 2.1.

b) Dacă x = 0, atunci x se reprezintă 0.

c) Dacă x < 0, atunci se pune mai întâi semnul -, după care urmează

reprezentarea numărului -x, conform definiţiei 2.1.

2.2.3. Conversii între baze de numeraţie

Existenţa şi utilizarea mai multor baze de numeraţie ridică problema conversiei dintr-o bază în alta. Pentru fixarea ideilor, să presupunem că numărul x este reprezentat într-o bază (baza veche) p şi se doreşte conversia lui într-o bază (baza nouă) q. Cele mai cunoscute metode de conversie sunt:

a) Metoda împărţirii la bază a numerelor întregi, cu calcule în baza p (baza veche);

b) Metoda înmulţirii cu baza a părţilor fracţionare, cu calcule în bază p

(baza veche);

c) Metoda substituţiei, cu calcule în baza q (baza nouă).

2.2.3.1. Conversia întregilor prin împărţiri succesive

Esenţa metodei este descrisă în demonstraţia teoremei 4.1 şi constă în faptul că cifra unităţilor unui număr natural x scris într-o anumită bază q coincide cu restul împărţirii lui x la q. Această metodă se aplică cu toate calculele efectuate în baza veche pentru a obţine reprezentarea lui x în noua bază q. Algoritmul de conversie este descris în figura 4.1., folosind un limbaj de tip pseudocod. În esenţă, se fac împărţiri succesive ale numărului x la q. Se

reţine de fiecare dată restul, iar câtul va deveni noul deîmpărţit. Resturile, luate în ordinea inversă a apariţiei, vor fi cifrele în noua bază q.

DATE x ( din N * , scris în baza p), q (noua bază) ;

n := -1;

CAT TIMP d > 0 EXECUTA

d

:=

x;

n

:=

n + 1;

c n

:=

d mod q;

C n := simbolul asociat cifrei c n în baza q;

d :=

d div q;

SF CAT TIMP ; REZULTATE C n C n-1

C 1 C 0

Figura 2.1 Conversia întregilor prin împărţiri succesive

Exemple: Să considerăm numărul (985437) 10 pe care vrem să-l reprezentăm pe rând în bazele 6 şi 16. Organizarea calculelor depinde de fantezia celui care face conversia. Noi vă propunem organizarea sub formă de tabel. Aşa cum am mai spus, toate calculele se fac în baza p, în cazul de faţă baza 10. Conversia în baza 6 este prezentată în tabelul 2.1.

Citind ultima coloană din tabelul 2.1 de jos în sus, obţinem rezultatul conversiei:

(985437) 10 = (33042113) 6

 

Deîmpărţit

Impărţitor

Cât

Rest

Simbol cifră (C n ) (baza 6)

n

(baza 10)

(q)

(baza 10)

(c

n )

(baza 10)

(baza 10)

0

985437

6

164239

3

3

1

164239

6

27373

1

1

2

27373

6

4562

1

1

3

4562

6

760

2

2

4

760

6

126

4

4

5

126

6

21

0

0

6

21

6

3

3

3

7

3

6

0

3

3

Tabelul 2.1 Conversia unui număr în baza 6

Acum conversia în baza 16 este dată în tabelul 2.2.

 

Deîmpărţit

Impărţitor

Cât

Rest

Simbol cifră (C n ) (baza 16)

n

(baza 10)

(q)

(c

n )

(baza 10)

(baza 10)

(baza 10)

0

985437

16

61589

13

D

1

61589

16

3849

5

5

2

3849

16

240

9

9

3

240

16

15

0

0

4

15

16

0

15

F

Tabelul 2.2 Conversia unui număr în baza 16

Citind ultima coloană de jos în sus, obţinem rezultatul conversiei: (985437) 10 = (F095D) 16

În fine, aplicăm aceeaşi metodă pentru a trece din baza 6 în baza 16, cu calculele făcute în baza 6. Tabelul 2.3 redă aceste calcule, toate numerele din tabel fiind în baza 6.

 

Deîmpărţit

Impărţitor

Cât

Rest

Simbol cifră (C n ) (baza 16)

n

(baza 6)

(q)

(c

n )

(baza 6)

(baza 6)

(baza 6)

0

33042113

24

1153045

21

D

1

1153045

24

25453

5

5

2

25453

24

1040

13

9

3

1040

24

23

0

0

4

23

24

0

23

F

Tabelul 2.3 Conversia din baza 6 în baza 16 Citind acum ultima coloană de jos în sus, obţinem rezultatul conversiei:

(33042113) 6 = (F095D) 16

2.2.3.2. Conversia părţilor fracţionare prin înmulţiri succesive

Ne interesează acum să găsim cifrele zecimale la trecerea dintr-o bază veche p într-o bază nouă q.

Să notăm cu y partea fracţionară. După obţinerea cifrei c -1 = [ q y ] în baza q, se aplică din nou metoda înlocuind pe y cu { q y } ş.a.m.d. Acest algoritm este descris în figura 2.2.

DATE y ( din (0,1), scris în baza p), q (noua bază) ;

n

CAT_TIMP

:=

0 ;

f

:=

y; (f > 0) sau (nu s-au obţinut suficiente cifre) sau (nu s-a obţinut perioadă: f nu coincide cu unul anterior)

EXECUTA

n

:=

n - 1;

c n

:=

[ f q ]; C n := simbolul asociat cifrei c n în baza q;

f

:=

{ f q }

SF_CATTIMP REZULTATE C n C n-1

C 1 C 0

Figura 2.2 Conversia părţii fracţionare prin înmulţiri succesive

Prezentăm în continuare câteva exemple. Pentru simplificarea calculelor, presupunem că baza p este 10. Mai întâi, vom trece numărul (0,43359375) 10 în baza 8 (deci vom înmulţi mereu părţile fracţionare cu 8).

0

4

3 3 5 9 3 7 5

3

4

6 8 7 5

.8

3

7

5

6

0

Rezultă că (0,43359375) 10 = (0,336) 8 şi s-au obţinut un număr finit de cifre la partea fracţionară.

În continuare vom converti tot în baza 8 numărul 0,51437, dar vom reţine numai trei cifre după virgulă:

17

0

0 5 1 4 3 7

5 1 4 3 7

0 5 1 4 3 7

8

4

1

1 4 9 6

0

9

1 9 6 8

7

3

5 7 4 4

-

- - - -

Rezultă că (0,51437) 10 =

(0,407

)

8 .

Să convertim acum, tot în baza 8, numărul (0,45) 10 .

0

4

5

3

6

0

8

4

8

6

4

 

3

2

1

6

4

8

6

4

3

2

1

-

6

- -

Rezultă că (0,45) 10 = (0,346314631

periodică mixtă, deci (0,45) 10 = (0,3(4631)) 8 .

)

8 . Se observă că se obţine o fracţie

Să trecem acum numărul (0,85) 10 în baza 16.

0

8

5

13

6

0

16

9

6

9

6

-

- - -

 

Rezultă că (0,85) 10 = (0,D(9)) 16 , unde D este simbolul cifrei cu valoarea (13) 10 .

Observaţii:

1. Procesul de conversie se încheie fie când dat partea fracţionară devine zero, fie când se consideră că s-au extras suficiente cifre, fie când se

observă apariţia perioadei. Dacă conversia se face cu ajutorul calculatorului, depistarea perioadei este dificilă, motiv pentru care se foloseşte doar prima sau a doua condiţie de oprire.

2. Calculele se fac întotdeauna cu un număr finit de cifre după

virgulă, indiferent dacă conversia se face manual sau cu ajutorul calculatorului. Din această cauză, teoretic întotdeauna apare perioada. Într- adevăr, dacă se reţin k cifre după virgulă, după maximum b k încercări variabila f din algoritmul 4.2 se va repeta. 3. Din cauza observaţiilor de mai sus, o conversie dublă conduce la erori de trunchiere. Spre exemplu, să trecem numărul (0,6) 10 în baza 8 şi să reţinem

patru cifre. Avem că (0,6) 10 = (0,4631

8 . Acum să aplicăm acelaşi algoritm

pentru trecerea numărului (0,4631) 8 în baza 10, cu calculele în baza 8.

)

0

4

6 3 1

 
   

(12) 8

5

7

7 7 2

11

7

7 0 4

; (11) 8 = (9) 10

11

6

6 5 0

10

4

2 2

; (10) 8 = (8) 10

5

2

6 4

3

- -

4

1 0

- - - - -

 

Rezultă că (0,4631) 8 = (0,599853

)

10 . Aceasta înseamnă că în loc de (0,6) 10 ,

în urma dublei conversii, se obţine (0,599853

)

10 .

2.3. Relaţii între bazele 2, 8 şi 16

2.3.1. Cifre binare, octale, zecimale, hexazecimale

În informatică, bazele 2, 8 şi 16 au o deosebită importanţă. După cum se va vedea imediat, conversiile între aceste baze se pot realiza deosebit de simplu. Ca terminologie, vom spune că lucrăm în sistemul binar dacă baza este 2, sistemul octal dacă baza este 8 şi sistemul hexazecimal dacă baza este 16. În acest context, este firesc să folosim termenul de sistem zecimal dacă baza este 10.

Tabelul 2.4. conţine corespondenţa între cele patru reprezentări ale numerelor de la 0 la 15. Pentru o manevrare uşoară între aceste patru baze de numeraţie, recomandăm memorarea acestui tabel.

Zecim

Binar

Octal

Hexa

al

0

0000

0

0

1

0001

1

1

2

0010

2

2

3

0011

3

3

4

0100

4

4

5

0101

5

5

6

0110

6

6

7

0111

7

7

8

1000

10

8

9

1001

11

9

10

1010

12

A

11

1011

13

B

12

1100

14

C

13

1101

15

D

14

1110

16

E

15

1111

17

F

Tabelul 2.4. Corespondenţa între cifrele bazelor 10, 2, 8 şi 16.

Orice grup de 3 cifre binare determină, în mod unic, o cifră octală; reciproc, o cifră octală se reprezintă în binar printr-un grup de 3 cifre binare, completând zerourile necesare la stânga. Un astfel de grup de 3 cifre binare îl numim triadă. Analog, orice grup de 4 cifre binare determină, în mod unic, o cifră hexazecimală; reciproc, o cifră hexazecimală se reprezintă în binar printr-un grup de 4 cifre binare, completând cu zerourile necesare la stânga. Un astfel de grup de 4 cifre binare îl vom numi tetradă.

2.3.2. Conversii binar - octal

-k ) 2 . Fără a restrânge

generalitatea, presupunem că n+1 este multiplu de 3, iar k este de asemenea un multiplu de 3 (deci atât partea întreagă a numărului, cât şi partea fracţionară a lui au câte un număr de cifre multiplu de 3). Dacă nu este aşa, se adaugă,

după necesităţi, zerouri înaintea lui c n , şi/sau după c -k . Aceste zerouri nu modifică valoarea numărului. Să scriem acum valoarea numărului x, grupând în triade cifrele din

Să considerăm numărul x = (c n c n-1

c

1

c 0 ,c -1 c -2 c -3

c

stânga şi din dreapta virgulei zecimale şi să evidenţiem astfel câteva triade:

X

=

c n 2 n +c n-1 2 n-1 +c n-2 2 n-2

+

c n-3 2 n-3 +c n-4 2 n-4 +c n-5 2 n-5

+

+c 5 2 5 +c 4 2 4 +c 3 2 3 +c 2 2 2 +c 1 2+ c 0 + c -1 2 -1 +c -2 2 -2 +c -3 2 -3 +

k+1 +c -k 2 -k =

+ c -k+2 2 -k+2 +c -k+1 2 -

= (c n 2 2 +c n-1 2+c n-2 )2 n-2 + (c n-3 2 2 +c n-4 2+c n-5 )2 n-5 +

+

+ (c -k+2 2 2 +c -k+1 2+c -

(c 5 2 2 +c 4 2+c 3 )2 3 + c 2 2 2 +c 1 2+c + (c -1 2 2 +c -2 2+c -3 )2 -3 +

k )2 -k

Să notăm j=(n-2)/3 şi s= k/3.

Se observă că numerele:

n-2, n-5,

,

3, 0, -3,

, -k

sunt multiplii lui 3 dintre -s3 şi j 3.

Fiecare paranteză de forma:

(c l+2 2 2 +c l+1 2+c l ), l

{n-2, n-5,

,

3, 0, -3,

, -k}

este un număr de trei cifre în baza 2, deci un număr între 0 şi 7. Altfel spus, o

astfel de paranteză este o cifră în baza 8. Vom nota cu r i , cu i această cifră.

l / 3

=

Fiecare dintre puterile lui 2 care apar pe lângă cifrele exponenţi poate fi transformată astfel:

deci

l

2 l

=

2 3(l/3)

{n-2, n-5,

,

i

{j, j-1,

Cu aceste notaţii, avem:

x = (r j r j-1

x

=

r j 8 j + r j-1 8 j-1 +

r 1 r 0 ,r -1 r -2 r -3

r

-s ) 8 .

=

8 l/3

=

8 i , unde

3, 0, -3,

, -k}, respectiv

,

1, 0, -1,

, -s}

+ r 1 8 + r 0 + r -1 8 -1 +

+ r -s 8 -s

r i

cu aceşti

Raţionând invers, dacă avem un număr scris în octal, reprezentarea lui binară se obţine păstrând virgula zecimală, iar spre stânga şi spre dreapta ei se înlocuieşte fiecare cifră octală cu triada corespunzătoare ei.

Sintetizând cele demonstrate mai sus, avem următoarele două reguli practice de trecere între bazele 2 şi 8:

- Pentru trecerea din baza 2 în baza 8, se grupează cifrele reprezentării binare în triade, pornind de la virgulă spre stânga şi spre dreapta. Dacă cel mai din stânga grup al părţii întregi, respectiv cel mai din dreapta grup al părţii fracţionare, nu are exact trei cifre, se completează cu zerouri la stânga pentru partea întreagă, respectiv la dreapta pentru partea fracţionară. Se înlocuieşte fiecare triadă cu cifra octală corespunzătoare. - Pentru trecerea din baza 8 în baza 2, pornind de la virgulă, spre stânga şi spre dreapta, se înlocuieşte fiecare cifră octală cu triada binară corespunzătoare ei (fiecara cifră octală se va înlocui cu exact trei cifre binare!).

Să considerăm câteva exemple:

(100 101 110 , 111 011 001) 2 = (456,731) 8

(1001101011.0110100100101011) 2 = (001 001 101 011.011 010 010 010 101 100) 2 =(1153.322254) 8

(11100111000001101) 2 = (011 100 111 000 001 101) 2 = (347015) 8

(0,001000000111011011) 2 = (000,001 000 000 111 011 011) 2 = (0,100733) 8

2.3.3. Conversii binar - hexazecimal

-k ) 2 . Fără a restrânge

generalitatea, presupunem că n+1 este multiplu de 4, iar k este de asemenea un multiplu de 4 (deci atât partea întreagă a numărului, cât şi partea fracţionară a lui au câte un număr de cifre multiplu de 4). Dacă nu este aşa, se adaugă după necesităţi zerouri înaintea lui c n , şi/sau după c -k . Aceste zerouri nu modifică valoarea numărului. Analog conversiilor binar - octal, aici se scrie valoarea numărului x, grupând în tetrade spre stânga şi spre dreapta virgulei zecimale. Întreaga demonstraţie decurge analog celei prezentate în secţiunea precedentă, motiv pentru care nu o mai reluăm. Dăm numai două reguli practice de trecere între bazele 2 şi 16:

- Pentru trecerea din baza 2 în baza 16, se grupează cifrele reprezentării binare în tetrade, pornind de la virgulă spre stânga şi spre dreapta. Dacă cel mai din stânga grup al părţii întregi, respectiv cel mai din dreapta grup al părţii fracţionare, nu are exact patru cifre, se completează cu zerouri la stânga

Să considerăm numărul x = (c n c n-1

c

1

c 0 ,c -1 c -2 c -3

c

pentru partea întreagă, respectiv la dreapta pentru partea fracţionară. Se înlocuieşte fiecare tetradă cu cifra hexazecimală corespunzătoare.

- Pentru trecerea din baza 16 în baza 2, pornind de la virgulă, spre

stânga şi spre dreapta, se înlocuieşte fiecare cifră hexazecimală cu tetrada binară corespunzătoare ei (fiecara cifră hexazecimală se va înlocui cu exact patru cifre binare!).

Să considerăm câteva exemple:

(110100101010,00111101) 2 =

(D2A,3D) 16

( 1001101011.0110100100101011) 2 = (0010 0110 1011,0110 1001 0010 1011) 2 = =(26B,692B) 16

( 11100111000001101) 2 = (0001 1100 1110 0000 1101) 2 = (1CE0D) 16

( 0,001000000111011011) 2 = =(0,2076C) 16

(0000,0010

0000

0111

0110

1100) 2

2.3.4 Conversii octal - hexazecimal

Este evident că cel mai simplu mod de a face conversii între aceste două baze de numeraţie este acela al folosirii bazei 2 ca intermediar. Pentru a nu opera cu şiruri nesfârşite de cifre binare, facem următoarele recomandări:

- Pentru trecerea din baza 8 în baza 16, se grupează la stânga şi dreapta

virgulei, câte 4 cifre octale. Acestea vor fi transformate mai întâi în 12 cifre

binare, care apoi vor fi transformate în 3 cifre hexazecimale.

- Pentru trecerea din baza 16 în baza 8, se procedează analog, adică se

grupează la stânga şi dreapta virgulei, câte 3 cifre hexazecimale. Acestea vor fi transformate mai întâi în 12 cifre binare, care apoi vor fi transformate în 4 cifre octale.

De

exemplu,

(27354357,3576) 8

=

(5DD8EF,77E) 16 .

Grupările

intermediare în baza 2 se pot organiza astfel:

 

( 2735 4357,

3576 ) 8

= (010 111

011 101

100

011

101

111 , 011

101 111

110) 2

=

(0101 1101 1101

1000

1110

1111 , 0111

0111

1110 ) 2

= ( 5DD

8EF , 77E

) 16

CAPITOLUL 3. CODIFICAREA INFORMAŢIEI

3.1. Noţiunea de cod; exemple

Codificarea a apărut din necesitatea de a se face schimb de mesaje care să poată fi înţelese numai de către persoanele care cunosc cheia codificării. Aceste schimburi de mesaje sunt necesare atunci când se manipulează informaţii secrete. În astfel de comunicaţii este esenţial mecanismul de codificare, care trebuie să fie suficient de complex încât să împiedice descifrarea lui de către persoane neautorizate sau rău intenţionate.

Ca parte integrantă a prelucrării informaţiilor cu ajutorul calculatorului, codificarea urmăreşte transpunerea informaţiei din forma ei primară într-o formă accesibilă calculatorului. Mecanismul codificării trebuie să fie simplu, astfel încât să poată fi automatizat în mod eficient.

3.1.1. Definirea codului

Trecând peste particularităţi şi diferenţe de exprimare, se poate crea un model matematic cuprinzător şi general al procesului de codificare. Să notăm prin:

S =

{ s 1 , s 2 ,

, s p }

mulţimea simbolurilor primare de informaţie. După caz, S poate fi mulţimea caracterelor ce se pot tipări, o mulţime de cuvinte dintr-un anumit limbaj sau limbă, o submulţime finită de numere etc. Să notăm prin:

A

=

{ a 1 , a 2 ,

, a q }

un alfabet al codificării, în care elementele a i le vom numi litere. Cu ajutorul literelor alfabetului A, elementele mulţimii S vor fi reprezentate într-o nouă formă, forma codificată. Vom nota prin A n mulţimea tuturor cuvintelor de lungime n formate cu litere din A. Deci

A n = { w

w = a i1 a i2

a in / a ij A, j = 1,n }

Prin A + vom nota mulţimea tuturor cuvintelor ce se pot forma cu litere din A. Deci

24

A + = A

A 2

A n

DEFINIŢIA 3.1. O aplicaţie injectivă C : S A + se numeşte codificare a simbolurilor din S, sau mai simplu, cod.

DEFINIŢIA 3.2. Un cod pentru care toate cuvintele de cod au aceeaşi lungime n se numeşte uniform, iar n se numeşte lungimea codului. În acest caz avem că

C

:

S

A n

Codurile care nu sunt uniforme se numesc coduri neuniforme.

3.1.2. Exemple simple de coduri

Să stabilim o corespondenţă între cifrele zecimale şi reprezentarea lor binară. În acest caz avem de-a face cu un cod uniform, în care:

S = { 0, 1,

, 9 },

A = B 2 = { 0 , 1 },

n = 4

Codificarea prin funcţia de codificare C este cea cunoscută, adică:

C(0) = 0000, C(1) = 0001, C(2) = 0010,

, C(9) = 1001

Este binecunoscut alfabetul Morse. El este un cod pentru care S este mulţimea literelor mici, a cifrelor zecimale şi a unor semne speciale. Mulţimea A este formată din "." (punct); "-" (linie), care are ca lungime echivalentul a trei puncte; "pauza" care poate avea trei lungimi: lungime de un punct între două semne din A, de trei puncte între două semne din S, de cinci puncte între două cuvinte din S. Tabelul 3.1 defineşte funcţia C pentru alfabetul Morse. Mesajele în cod Morse sunt afişate de regulă pe o bandă îngustă şi continuă de hârtie. Până la apariţia mijloacelor moderne de comunicaţie, acest cod s-a folosit pe scară largă în telegrafie şi în transportul feroviar. Codul Morse a fost astfel conceput încât caracterele mai frecvente să aibă codificarea mai scurtă. Din punctul de vedere al modelului matematic, codul Morse este cod neuniform, deoarece cuvintele de codificat au lungimi cuprinse între 1 şi 6 litere din A.

a

.-

n

-.

1

.----

ă

.-.-

o

---

2

---

25

b

-

ö

---.

3

--

c

-.-.

p

.--.

4

-

d

-

q

--.-

5

 

e

.

r

.-.

6

-

f

-.

s

 

7

--

g

--.

ş

----

8

---

h

 

t

-

9

----.

i

 

u

-

0

-----

j

.---

ü

--

.

 

k

-.-

v

-

,

.-.-.-

l

.-

w

.--

;

-.-

m

--

x

- -

:

---

   

y

-.--

?

--

   

z

--

!

-- --

Tabelul 3.1. Codificarea în alfabetul Morse

3.1.3. Problema decodificării

Deoarece funcţia de codificare C este injectivă, rezultă că funcţia:

C

:

S

C(S)

A +

este bijectivă. În acest caz problema decodificării se pune astfel: fiind dat un cuvânt w A + să se determine s i S astfel încât C(s i ) = w sau să se răspundă că nu există un astfel de s i . Cu alte cuvinte, trebuie evaluată în w funcţia:

C -1

:

C(S)

S

Pentru codurile uniforme, problema decodificării este simplă. În schimb, ea se complică la codurile neuniforme. O posibilă rezolvare a decodificării la codurile neuniforme constă în introducerea unui simbol consacrat ca element despărţitor între două secvenţe C(w 1 ) şi C(w 2 ) consecutive. Codul Morse foloseşte în acest scop "pauza" de diverse lungimi. Utilizarea unui astfel de

26

simbol determină creşterea numărului de litere cu care se codifică o succesiune de simboluri din S.

Există coduri neuniforme pentru care decodificarea se poate face fără folosirea simbolurilor despărţitoare. Clasa acestor coduri este dată de definiţia care urmează.

DEFINIŢIA 3.3. Un cod C poartă numele de cod unic decodificabil dacă pentru orice două simboluri s i şi s j din S, nici una dintre secvenţele de cod C(s i ) şi C(s j ) nu este prefix pentru cealaltă.

De exemplu, dacă unui simbol s 1 îi atribuim codul a 1 a 1 a 2 , atunci nu mai

În

putem avea, pentru alte caractere, secvenţele de cod a 1 , a 1 a 1 ,a 1 a 1 a 2 a 4

tabelul 3.2 este redată o codificare unic decodificabilă pentru mulţimile

 

S

=

{ 0, 1,

,

9 }

şi

A

=

{ 1, 2, 3 }

 

0

1

2

3

4

5

6

7

8

9

11

12

212

222

31

321

322

211

3321

3312

Tabelul 3.2. Un cod unic decodificabil

3.2. Codificarea datelor în calculator

3.2.1. Codificarea caracterelor

.} mulţimea

caracterelor tipăribile, existente la fiecare imprimantă, tastatură etc. Pentru codificarea acestor caractere în vederea prelucrării lor automate, standardele internaţionale impun o serie de restricţii. După cum se va vedea, aceste restricţii sunt benefice pentru prelucrarea automată a caracterelor. Să considerăm mulţimile: l mulţimea literelor mici ale alfabetului latin, L mulţimea literelor mari (în aceste mulţimi nu intră caracterele româneşti ă, â, î, ş, ţ), c mulţimea cifrelor zecimale, s mulţimea caracterelor speciale (spaţiul îl

vom nota cu _), iar f mulţimea caracterelor funcţionale, cele care nu apar la tipărire (afişare), ci doar dirijează tipărirea (afişarea). Aşadar:

Fie S = { _, a, b,

., z, A, B,

., Z, 0, 1,

., 9, +, ., ;, :, $,

27

l

= { a, b,

,

z },

L = { A, B,

,

Z },

c = { 0, 1,

 

,

9 }, s = { _, +, ;, :, $,

},

f = {CR, LF, TAB, FF, BEL, BS,

}

În continuare, vom nota S = l L c s f. Înainte de a descrie condiţiile codificării, să prezentăm rolul câtorva dintre caracterele funţionale, simbolizate mai sus prin grupuri de litere mari. CR provoacă deplasarea dispozitivului de afişare (tipărire) la început de rând (Carriage Return). LF provoacă deplasarea dispozitivului cu un rând mai jos (Line Feed), păstrându- se poziţia în cadrul rândului. De obicei, se foloseşte succesiunea de caractere CR LF pentru a separa două linii de afişat, efectul lor cumulat fiind trecerea la începutul rândului următor. TAB este caracterul de tabulare, deci avansul dispozitivului la poziţia următorului stop de tabulare (de obicei peste 5-8 caractere). FF (Form Feed) provoacă trecerea la pagina (ecranul) următoare (următor). BEL provoacă emiterea unui semnal sonor, iar BS provoacă deplasarea dispozitivului de afişare (tipărire) cu o poziţie spre stânga, în vederea ştergerii (supraimprimării) ultimului caracter.

Funcţia de codificare se defineşte astfel:

C: S

[0,m]

,

unde m este 127 sau 255. Dacă considerăm reprezentarea binară, avem de-a face cu un cod uniform pe 7 biţi, respectiv pe 8 biţi. Având în vedere faptul că octetul este unitatea de adresare a memoriei, codul pe 7 biţi se extinde la 8 biţi punând 0 la bitul cel mai semnificativ. Deci codificarea unui caracter este un număr care încape pe un octet.

0 00

NUL

32 20

64

40 @

96

60

`

1 01

SOH

33 21

!

65 41

A

97

61

a

2 02

STX

34 22

"

66 42

B

98

62

b

3 03

ETX

35 23

#

67

43

C

99

63

c

4 04

EOT

36 24

$

68 44

D

100

64

d

5 05

ENQ

37 25

%

69 45

E

101

65

e

6 06

ACK

38 26

&

70

46

F

102

66

f

7 07

BEL

39 27

'

71 47

G

103

67

g

8 08

BS

40 28

(

72 48

H

104

68

h

9 09

TAB

41 29

)

73 49

I

105

69

I

10 0A

LF

42 2A

*

74 4A

J

106

6A

j

11 0B

VT

43 2B

+

75 4B