Documente Academic
Documente Profesional
Documente Cultură
Laborator 1
Lll
Un numr poate fi reprezentat n mai multe sisteme de numeraie (n mai multe baze).
Reprezentarea cea mai folosit n viaa de zi cu zi este cea zecimal (folosind baza 10),
reprezentarea valorilor fcndu-se folosind cele 10 cifre (de la 0 la 9).
Suportul matematic folosit de computere pentru manevrarea i prelucrarea
informaiilor este numeraia n baza 2, dar i n baze de numeraie care sunt puteri ale lui 2.
Principalele sisteme de numeraie pentru reprezentarea binar a informaiei sunt
prezentate n continuare.
Sistemul binar folosete baza 2, fiind utilizate doar dou cifre - 0 i 1. Astfel, orice
numr va fi reprezentat numai cu aceste dou cifre.
Sistemul octal folosete baza 8, utiliznd cifrele de la 0 la 7. Astfel, numrul 8 va fi
notat n sistemul octal cu 10, numrul 9 va fi notat cu 11, numrul 10 va fi notat n octal cu
12 etc. Sistemul octal este cel mai rar folosit.
Sistemul hexazecimal folosete baza 16 - sunt necesare 16 cifre distincte, i dup cifrele
de la 0 la 9 se folosesc, n ordine, literele A, B, C, D, E, F. Astfel, numrul zecimal 15 va fi
notat cu F, iar numrul 16 cu 10 (se citete unu zero), numrul zecimal 255 va avea notaia
hexa (prescurtare de la hexazecimal) FF .a.m.d.
Trecerea din baza 10 n baza 2 se face prin mpriri succesive a numrului care se
dorete transformat la 2, reinndu-se de fiecare dat restul mpririlor.
Exemplu de trecere din baza 10 n baza 2:
29(10) =>
29 / 2 = 14
(+ 15 rest) 14 /
2 = 7 (+ 04 rest)
7 / 2 = 3 (+ 13 rest)3 / 2 = 11 (+ 12 rest)
= 11101(2)
=> 29 n baza 2
12345
Trecerea din baza 2 n baza 10 se face prin nmuliri succesive ale cifrelor numrului
n baza 2 cu puteri ale lui 2:
Exemplu de conversie din baza 2 n baza 10:
11101(2) = 1*24 + 1*23 + 1*22 + 0*21 + 1*20 = 16 + 8 + 4 + 0 + 1 = 29(10)
Programarea calculatoarelor
Laborator 1
Lll
Din orice baz de numeraie se poate trece n baza 10 prin nmuliri succesive, iar din baza
10 se poate trece n orice baz de numeraie prin mpriri succesive.
n tabelul urmtor sunt prezentate cifrele de la 0 la 15 (n sistemul zecimal) i reprezentrile
lor n bazele prezentate:
Binar
Octal
Zecimal
Hexa
10
11
100
101
110
111
1000
10
1001
11
1010
12
10
1011
13
11
1100
14
12
1101
15
13
1110
1111
16
17
14
15
E
F
Programarea calculatoarelor
Laborator 1
Lll
Bytes (octei)
Multiplu Notaie
Valoarea
Multiplu
Notaie Valoarea
Kilo
Kilobit
Kb
1024 bii
KiloByte
KB
1024 Bytes
Mega
Megabit
Mb
1024 Kb
MegaByte
MB
1024 KB
Giga
Gigabit
Gb
1024 Mb
GigaByte
GB
1024 MB
Terra
Terrabit
Tb
1024 Gb
TerraByte
TB
1024 GB
Programarea calculatoarelor
Laborator 1
Lll
Domeniul de valori
Lungimea
(bii)
1
8
16
Lungimea
(octei)
1/8
1
2
0, 1
0 ... 255 (00h FFh)
0 ... 65.535 (0000h
FFFFh)
double
0 ... 4.294.967.295
word
(00000000h
32
4
FFFFFFFFh)
Tabelul 2.3 Caracteristicile principalelor tipuri de date
Programarea calculatoarelor
Laborator 1
Lll
Programarea calculatoarelor
Laborator 1
Lll
Programarea calculatoarelor
Laborator 1
Lll
SP
!
"
#
00 NUL 32
01 SOH
33
02 STX
34
03 ETX
35
04 EOT
36
24
05 ENQ
37
06 ACK
07
64
65
66
67
40
41
42
43
@
A
B
C
96
97
98
99
60
61
62
63
`
a
b
c
68
44
100
64
25
69
45
101
65
38
26
&
70
46
102
66
BEL
39
27
'
71
47
103
67
08
BS
40
28
72
48
104
68
09
HT
41
29
73
49
105
69
10
0A
LF
42
2A
74
4A
106
6A
11
0B
VT
43
2B
75
4B
107
6B
12
0C
FF
44
2C
76
4C
108
6C
13
0D
CR
45
2D
77
4D
109
6D
14
0E
SO
46
2E
78
4E
110
6E
15
0F
SI
47
2F
79
4F
111
6F
16
10
DLE
48
30
80
50
112
70
17
11
DC1
49
31
81
51
113
71
18
12
DC2
50
32
82
52
114
72
19
13
DC3
51
33
83
53
115
73
20
14
DC4
52
34
84
54
116
74
21
15 NAK
53
35
85
55
117
75
22
16 SYN
54
36
86
56
118
76
23
17
ETB
55
37
87
57
119
77
24
18 CAN
56
38
88
58
120
78
25
19
EM
57
39
89
59
121
79
26
1A SUB
58
3A
90
5A
122
7A
27
1B
ESC
59
3B
91
5B
123
7B
28
1C
FS
60
3C
<
92
5C
124
7C
29
1D
GS
61
3D
93
5D
125
7D
30
1E
RS
62
3E
>
94
5E
126
7E
31
1F US
?
95
5F
_
127 7F DEL
63 3F
Tabelul 1.4 Reprezentarea setului standard de caractere ASCII
Programarea calculatoarelor
Laborator 1
Lll
Programarea calculatoarelor
Laborator 1
Lll
Programarea calculatoarelor
10
Laborator 1
Lll
Programarea calculatoarelor
11
Laborator 1
Lll
Introducere n limbajul C
Limbajul de programare C a fost creat n anii '70 de ctre Dennis Ritchie n cadrul
firmei Bell Telephone Laboratories (Bell Labs), avnd ca obiectiv principal dezvoltarea unui
limbaj care sa fie utilizat pentru implementarea sistemului de operare UNIX. La vremea
respectiva, existau limbaje de programare de nivel sczut (apropiate de nivelul limbajului
main al procesorului), precum si limbaje specializate de nivel nalt (FORTRAN, COBOL).
Cele de nivel sczut erau adecvate pentru dezvoltarea de sisteme de operare deoarece
permiteau acces direct la resursele procesorului, dar aveau dezavantajul unei productiviti
extrem de sczute a programatorului. Cele de nivel nalt permiteau dezvoltarea mai uoar
de aplicaii specializate, dar ridicau numeroase probleme din punct de vedere al
performantelor de execuie a programelor.
Acesta este motivul pentru care s-a cutat o cale de mijloc: dezvoltarea unui limbaj
de programare de uz general, cu caracteristici de nivel nalt pentru mbuntirea
productivitii programatorilor, dar care, la nevoie, sa permit acces direct la resursele
hardware ale sistemului de calcul, pentru a permite optimizarea foarte riguroasa din punct
de vedere al vitezei de execuie a aplicaiilor unde acest criteriu este dominant. Astfel a luat
natere limbajul C, un limbaj de nivel mediu, care pstreaz caracteristicile limbajelor de
nivel nalt din care a fost derivat (B si BCPL), dar care reflecta foarte bine realitile
hardware: acces direct la adrese de memorie, operaii la nivel de bit, accesul resurselor
procesorului (regitri), apel direct al funciilor puse la dispoziie de sistemul de operare.
Fcnd referire la clasificrile limbajelor de programare prezentate n laboratorul 1,
limbajul C este un limbaj de nivel mediu, structurat, tipizat si compilat.
Fiind un limbaj structurat, limbajul C permite crearea de secvene de instruciuni
reunite sub un anumit nume, care efectueaz o anumita operaie clar definita si returneaz
un rezultat. Aceste secvene de instruciuni se numesc funcii. Odat creata o funcie, ea
poate fi referita (apelata) de oricte ori este necesar, pe baza numelui acesteia. Spre deosebire
de alte limbaje de programare nsa, n C toate instruciunile trebuie sa apar numai n cadrul
Programarea calculatoarelor
12
Laborator 1
Lll
Prima linie din program declara o funcie cu numele main, care nu returneaz nici un
rezultat (cuvntul void dinainte de numele funciei) si nu primete nici un parametru
(cuvntul void de dup numele funciei). Simbolul '{' marcheaz nceputul corpului funciei,
iar simbolul '}' marcheaz finalul funciei.
Instruciunile care formeaz corpul funciei trebuie scrise ntre '{' si '}'.
Urmtorul exemplu de program afieaz un mesaj ("Hello World") pe ecran:
#include <stdio.h>
int main ()
{
/* apelam functia printf pentru afisare pe ecran */
printf ("Hello World !");
return 0;
}
Se observa ca si acest program conine o funcie main, dar n corpul funciei este
apelata funcia printf () pentru afiarea unui mesaj. In C, orice instruciune executabila (cum
e cazul apelului la printf() trebuie urmata de ';'. Funcia printf este o funcie din biblioteca
standard pentru intrri i ieiri a limbajului C, de aceea prima linie de program conine acum
o directiva preprocesor, #include <stdio.h>, necesara pentru a putea apela funcii din
biblioteca.
Tot n aceasta secvena de program se observa prezenta unui comentariu n interiorul
funciei main:
/* apelam functia printf pentru afisare pe ecran */
n limbajul C, comentariile sunt texte precedate de secvena ' /* ' care se ncheie cu '
*/ '. Comentariile sunt ignorate n totalitate de ctre compilator.
Programarea calculatoarelor
13
Laborator 1
Lll
verificarea corectitudinii operaiilor care implica acea variabila (spre exemplu, daca
declaram o variabila care sa conin numere ntregi, compilatorul ne va semnala
eroare dac ncercam sa depozitam n acea variabila un ir de caractere).
Programarea calculatoarelor
14
Laborator 1
Lll
nume_variabila reprezint numele simbolic prin care va fi accesata acea zona de memorare.
Numele unei variabile sau al unei funcii n C trebuie sa fie un identificator valid:
poate sa nceap numai cu o litera sau cu caracterul _ (underscore)
dup primul caracter, poate sa conin numai litere, cifre sau _ (underscore)
nu poate sa fie unul dintre cuvintele cheie rezervate ale limbajului: auto break case
char const continue default do double else enum extern float for goto if int long register
return short signed sizeof static struct switch typedef typeid union unsigned using void
volatile while n C, variabilele se pot declara n doua locuri:
n interiorul unei funcii, caz n care ele devin variabile locale si sunt accesibile doar
din acea funcie; la ncheierea execuiei funciei variabilele se distrug automat;
n afara oricrei funcii, caz n care ele devin variabile globale si sunt accesibile din
orice funcie.
Limbajul C este case-sensitive, adic face distincie ntre literele mici si literele mari.
Urmtorii identificatori sunt considerai diferii:
Var1
var1
VAR1
direct n forma zecimala (baza 10), daca nu sunt precedate de cifra 0: 1, 123
Constantele reale se introduc n forma zecimala sau notaia exponenial: 123.1, 127.5E-4.
Constantele de tip caracter sunt incluse ntre doua simboluri apostrof: 'A', ':'.
Constantele de tip sir de caractere sunt incluse ntre doua ghilimele: "irul".
n cadrul constantelor de tip caracter sau sir de caractere, se pot introduce si caractere
speciale de control, daca sunt precedate de caracterul backslash:
\n are ca efect salt la linie noua cnd este afiat
\t caracterul tab, 8 spatii
\r revenire la nceputul liniei curente
Programarea calculatoarelor
15
Laborator 1
Lll
#include <stdio.h>
int main ()
{
int v = 10;
printf ("Valoarea variabilei este %d \n", v);
return 0;
}
Programarea calculatoarelor
16
Laborator 1
Lll
Programarea calculatoarelor
17
Laborator 1
Lll
si care are ca efect copierea valorii din sursa n destinaie. Destinaia trebuie sa fie o variabila.
Sursa poate fi o variabila, o constanta sau o expresie compatibila ca tip cu destinaia.
Compatibilitatea de tipuri permite, spre exemplu, sa atribuim o valoare reala cu zecimale
unei variabile ntregi, caz n care compilatorul realizeaz automat trunchierea.
Funcii matematice
Limbajul C ofer o foarte mare libertate programatorului, libertate nentlnita n
nici un alt limbaj de programare, aceasta fiind una dintre caracteristicile care l-au fcut att
de popular printre programatori. Aceasta libertate se reflecta, n special, n manipularea
tipurilor, compilatorul limbajului C fiind mult mai puin restrictiv n privina folosirii
tipurilor de date (nu face verificri referitoare la compatibilitatea tipurilor). Pentru a putea
folosi aceste funcii ntr-un program, este necesara includerea fiierului header MATH.H,
folosind directiva #include <math.h>.
Cteva dintre funciile matematice folosite n limbajul C sunt urmtoarele:
1; necesita
fiierul header STDLIB.H;
Programarea calculatoarelor
18
Laborator 1
Lll
afiate;
Exemplu:
int nr1=3,nr2=4;
printf("%-5d+%5d=%d",nr1,nr2,nr1+nr2);
n exemplul de mai sus nr1 si nr2 se vor afia pe 5 spatii, nr1 va fi aliniat la stnga
iar nr2 va fi aliniat la dreapta.
Exemplu:
float r=1.12345;
printf(%.3f,r);
Programarea calculatoarelor
19
Laborator 1
Lll
Funcia scanf()
Funcia scanf citete date de la tastatura, conform formatului, si nscrie valorile citite
la adresele specificate. Primul sau argument este un sir de control care conine formatele
corespunztoare interpretrii irurilor de intrare. Urmtoarele argumente sunt adresele
variabilelor. Operatorul & returneaz adresa memoriei unei variabile.
Exemplu:
scanf("%d", &x);
Programarea calculatoarelor
20
Laborator 1
Lll
2.6
1.
Probleme propuse
Realizai diverse conversii din/n bazele studiate (2 - 10, 10 - 2, 10 - 16, 16 - 10, 2 16, 16 2);
2.
3.
4.
5.
6.
7.
8.
9.
10.
Sa se scrie un program C care face conversia din grade Celsius n grade Fahrenheit, C
= (F 32)* 5/9.
11.
Sa se scrie un program C care afieaz cifra unitarilor unei variabile de tip ntreg.
12.