Documente Academic
Documente Profesional
Documente Cultură
2
Aurelia PTRACU
BAZELE INFORMATICII
ELEMENTE DE PROGRAMARE C/C++
EDITURA UNIVERSITAR
Bucureti, 2011
3
Referent tiinific:
Ilustraia copertei:
COPERTA 1
COPERTA 4
Copyright 2011
Editura Universitar
Director: Drd. Vasile Muscalu
B-dul. N. Blcescu nr. 27-33, Sector 1, Bucureti
Tel.: 021 315.32.47 / 319.67.27
www.editurauniversitara.ro
e-mail: redactia@editurauniversitara.ro
004.43 C
004.43 C++
ISBN 978-606-591-328-8
DOI: 10.5682/9786065913288
PREFA
Dup cum rezult i din titlul lucrrii, scopul principal al acesteia este
de iniiere n tainele informaticii i programrii structurate n limbajul C/C++.
Din acest considerent lucrarea se oprete numai asupra unor capitole care s
ajute cititorii sa fac primii pai n programarea structurat. Ea va fi urmat
de o alt lucrare a noastr care va viza programarea avansat n C/C++, unde
vor fi abordate problematicile construirii i utilizrii funciilor, declararea i
utilizarea pointerilor ctre funcii, crearea i exploatarea structurilor
autoreferite, precum i bazele programrii orientate obiect.
Lucrarea este structurat n nou capitole, nsoite de numeroase
aplicaii practice, scheme i comentarii, i abordeaz, gradat, conceptele i
elementele fundamentale ale definirii algoritmilor i schemelor logice,
precum i ale implementrii acestora n limbajul C/C++.
Capitolul I, Arhitectura sistemelor de calcul i bazele aritmetice i
logice ale calculatoarelor, aduce n atenia cititorului elementele structurale
fundamentale ale calculatoarelor numerice. De asemenea, se prezint, bazat
pe exemple concrete, bazele aritmetice i logice ale acestora.
Capitolul II, Algoritmi i scheme logice, ofer cititorului un set de
cunotine de baz privind construirea algoritmilor, precum i premisele
utilizrii acestora la modelarea structurilor fundamentale ale programrii
structurate.
Capitolul III, Prezentarea general a limbajului C, are rolul de a
ajuta utilizatorul s fac primii pai n cunoaterea i utilizarea limbajului
C/C++, n conceperea i dezvoltarea aplicaiilor sale. Sunt trecute n revist
elementele fundamentale de sintax, pornind de la alfabet i semne de
punctuaie, pn la scrierea propoziiilor i/sau frazelor, precum i funcii de
intrare/ieire necesare construirii unor interfee minime ntre utilizator i
aplicaiile sale. De asemenea, sunt prezentate directivele procesor define i
include, acestea fiind unele dintre cele mai utilizate directive procesor la
dezvoltarea de aplicaii C/C++, directive folosite n exemplele prezentate n
lucrare.
Capitolul IV, Tipuri fundamentale de date i clase de memorie,
abordeaz probleme privind declararea i iniializarea tipurilor fundamentale
de date, modurile de reprezentare ale acestora, domeniile valorilor
5
reprezentabile, precum i modul de vehiculare a datelor de diverse tipuri n
cadrul aplicaiilor.
Capitolul V, Operatori i expresii, prezint clasele de operatori ai
limbajului C/C++, modurile lor de aplicare, efectele produse asupra datelor
implicate, precum i modurile de evaluare ale expresiilor n care apar.
Capitolul VI, Intruciuni, abordeaz structurile de programare
fundamentale (secvenial, alternativ i repetitiv), instruciunile care permit
construirea i exploatarea acestor structuri, instruciunile de salt i de
inserare n codul surs C/C++ a instruciunilor n limbaj de asamblare.
Capitolul VII, Pointeri, este dedicat prezentrii modurilor de
declarare i de ncrcare a pointerilor, inclusiv alocarea dinamic de
memorie, trecerii n revist a principalelor operaii care pot fi efectuate cu
pointeri din aa-numita aritmetic de pointeri. innd seama de importana
nelegerii i dobndirii de deprinderi n lucrul cu pointeri, n cadrul
capitolului sunt prezentate o serie de exemple edificatoare.
Capitolul VIII, Masive, este destinat prezentrii modurilor de definire
i utilizare a masivelor de date n C/C++. Sunt abordate tematici privind
declararea masivelor, iniializarea acestora la declarare, prin ncrcare
individual sau citirea de la stdin, referirea elementelor masivelor prin
indexare i prin indirectare, lucrul cu masive de pointeri i alocarea dinamic
de memorie pentru masive.
Capitolul IX, Caractere i iruri de caractere, dup trecerea n revist
a unor aspecte specifice lucrului cu caractere i masive de caractere, precum
i a funciilor i macrodefiniiilor pentru lucrul cu acestea, prezint modurile
de definire i iniializare a irurilor de caractere, funciile specifice de
intrare/ieire, precum i o gam larg de funcii destinate lucrului cu iruri de
caractere. n scopul facilitrii parcurgerii i nsuirii cunotinelor privind
lucrul cu caractere i iruri de caractere, pe parcursul capitolului sunt
prezentate aplicaii nsoite de comentarii.
Contieni c lucrarea este perfectibil, mulumim anticipat celor care,
prin observaiile i recomandrile lor, vor contribui la mbuntirea acesteia.
Autorii
6
CUPRINS
Prefa 5
Capitolul 1. Arhitectura sistemelor de calcul si bazele aritmetice si 11
logice ale calculatoarelor
1.1. Structura unui calculator electronic 11
1.2. Sisteme de numeraie 14
1.2.1. Conversia dintr-o baz oarecare B n baza 10 15
1.2.2. Conversia din baza 10 ntr-o baz de numeraie 15
oarecare B
1.3. Sistemul binar 17
1.3.1. Conversia numerelor din sistemul binar n cel zecimal 17
1.3.2. Operaii aritmetice n sistemul binar 18
1.4. Sistemul hexazecimal 21
1.4.1. Conversia numerelor din sistemul hexazecimal n 22
zecimal i invers
1.4.2. Conversia numerelor din hexazecimal n binar i invers 22
1.4.3. Operaii aritmetice n sistemul hexazecimal 23
1.5. Reprezentarea intern a numerelor n calculator 25
1.5.1. Reprezentarea intern a numerelor ntregi 25
1.5.2. Reprezentarea numerelor reale n virgul mobil 26
1.6. Codificarea datelor 27
7
3.3.1. Directiva #include 58
3.3.2. Directiva #define 60
8
6.2.4. Instruciunea _asm 126
6.3. Aplicaii rezolvate 129
6.4. Aplicaii propuse 145
9
Capitolul 1
11
Bazele informaticii. Elemente de programare C/C++
Programe Comenzi
Rezultate
Date
Date
UI UAL UE Rezultate
UC
Figura 1.1. Schema von Neumann a unui calculator numeric [10, 11].
12
1. Arhitectura sistemelor de calcul
1
Placa de baz (Motherboard) este cea mai important component
a sistemului de calcul. Pe ea sunt montate toate componentele care
controleaz sistemul de calcul. Dintre cele mai cunoscute se amintesc:
soclul (conectorul) procesorului;
soclurile de memorie (RAM);
cipul BIOS;
setul de cipuri al plcii de baz;
conectoarele de magistral:
conectoare ISA (Industry Standard Architecture);
conectoare PCI (Peripheral Component Interconnect);
conectoare AGP (Accelerated Graphics Port).
cipurile super I / O:
controlere pentru unitile de dischet;
controlere pentru porturi paralele;
controlere pentru porturi seriale;
controlere pentru tastatur i mouse.
13
Bazele informaticii. Elemente de programare C/C++
14
1. Arhitectura sistemelor de calcul
Q10 = bn 1 B n 1 + bn 2 B n 2 + K + b1 B + b0 + b1 B 1 + K b m B m (1.2)
11,1012 = 1 21 + 1 2 0 + 1 2 1 + 0 2 2 + 1 2 3 = 3,62510
15
Bazele informaticii. Elemente de programare C/C++
16
1. Arhitectura sistemelor de calcul
101101 = 1 25 + 0 24 + 1 23 +1 22 + 0 21 +1 20 = 1 32 + 0 16 +1 8 +1 4 + 0 2 +11 =
= 45 1011012 = 4510 indicele fiind baza n care este scris numrul.
Pentru a trece un numr din baza 10 n baza 2, se consider numrul
natural n scris n baza 10. Pentru a afla corespondentul binar al acestuia, se
noteaz cu c1 , c2 ,..., ck cturile i cu r1 , r2 ,..., rk resturile respective ale
mpriri succesive la 2. Deoarece mpritorul este 2, resturile vor fi 0 sau 1.
mpririle la 2 se continu pn cnd ck = 0 . Astfel, se obine urmtorul ir
de egaliti:
c1 = c2 2 + r2
c2 = c3 2 + r3
M M M M
ck 1 = ck 2 + rk
unde ck = 0 .
17
Bazele informaticii. Elemente de programare C/C++
Adunarea
0 + 0 = 0
0 + 1 = 1
1 + 0 = 1
1 + 1 = 10
18
1. Arhitectura sistemelor de calcul
11101 +
1101
101010
Exemplul 2: x = 1100011011 i y = 101111101; x + y = ?
111111111 cifrele de transport
1100011011 +
101111101
10010011000
Scderea
0 0 = 0
0 1 = X
1 0 = 1
1 1 = 0
19
Bazele informaticii. Elemente de programare C/C++
nmulirea
0 0 = 0
0 1 = 0
1 0 = 0
11 = 1
20
1. Arhitectura sistemelor de calcul
101101
11101
101101
101101
101101
101101
10100011001
mprirea
11011 101
101 101
==11
101
=111
101 ctul este 101, iar restul 10.
=10
21
Bazele informaticii. Elemente de programare C/C++
}4 } B } 0 } F } 1 } 3
010010110000111100010011
22
1. Arhitectura sistemelor de calcul
Adunarea
1
1AB02+
A13
1B5 15
3+ 2 = 5
1+ 0 = 1
A + B = 15
A+ 1 = B
1 111
ABFF9 +
9F38
B5F31
9 + 8 = 11
F + 3 + 1 = 13
F + F + 1 = 1F + 1 = 1F
9 + B + 1 = 15
A+1 = B
23
Bazele informaticii. Elemente de programare C/C++
0 0 1 2 3 4 5 6 7 8 9 A B C D E F
1 1 2 3 4 5 6 7 8 9 A B C D E F 10
2 2 3 4 5 6 7 8 9 A B C D E F 10 11
3 3 4 5 6 7 8 9 A B C D E F 10 11 12
4 4 5 6 7 8 9 A B C D E F 10 11 12 13
5 5 6 7 8 9 A B C D E F 10 11 12 13 14
6 6 7 8 9 A B C D E F 10 11 12 13 14 15
7 7 8 9 A B C D E F 10 11 12 13 14 15 16
8 8 9 A B C D E F 10 11 12 13 14 15 16 17
9 9 A B C D E F 10 11 12 13 14 15 16 17 18
A A B C D E F 10 11 12 13 14 15 16 17 18 19
B B C D E F 10 11 12 13 14 15 16 17 18 19 1A
C C D E F 10 11 12 13 14 15 16 17 18 19 1A 1B
D D E F 10 11 12 13 14 15 16 17 18 19 1A 1B 1C
E E F 10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D
F F 10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1F
24
1. Arhitectura sistemelor de calcul
Scderea
N = 1, f B E
32 31 24 23 1
S C = E + 127 M
unde:
S bitul de semn care respect aceeai condiie ca la numerele
ntregi: 0 pentru numerele pozitive, 1 pentru cele negative;
C caracteristica;
E exponentul;
M mantisa (partea fracionar).
Pentru a nu se ocupa nc o poziie binar pentru semnul
exponentului, s-a introdus noiunea de caracteristic. Aceasta este
reprezentarea exponentului n exces de 127. Rezult n urma acestei
convenii, c, dac C > 127, exponentul E > 0, iar dac C < 127, atunci E < 0.
26
1. Arhitectura sistemelor de calcul
64 63 53 52 1
S C = E + 127 M
unde:
S bitul de semn;
C caracteristica;
M mantisa.
Att la numerele n simpl precizie, ct i la cele n dubl precizie,
partea fracionar este aliniat stnga, adic de la virgul.
La formatul de reprezentare n virgul mobil, se observ c cifra 1
din faa virgulei nu se reprezint. Acest lucru se va avea n vedere, cnd se va
interpreta numrul real exprimat n virgul mobil.
27
Bazele informaticii. Elemente de programare C/C++
28