Sunteți pe pagina 1din 54

Programarea

Calculatoarelor
Curs 4
Iulian Nstac

Recapitulare din cursul precedent


Sisteme de operare
Pentru ca un calculator s poat fi
folosit trebuie s existe iniial un soft
de baz care s permit conversaia
ntre un limbaj de programare (sau un
soft specializat, etc.) i procesorul
sistemului de calcul. Acesta este de
fapt sistemul de operare (SO) al
calculatorului.
2

Recapitulare din cursul precedent

Definiie:
Un sistem de operare (S.O.) este un set
de proceduri care permit unui grup de
utilizatori s foloseasc eficient i
eventual simultan sistemul de calcul
(S.C.) avut la dispoziie.

Recap.
Clasificare
sistemele de operare pe loturi (batch
processing);
sistemele de operare cu multiprogramare
(multiprogramming);
sistemele de operare cu divizarea timpului
(time sharing);
sistemele de operare cu multiprelucrare
(multiprocessing).
4

Recap
Alte clasificri :
n timp real (Real-time)
Pentru mai muli utilizatori simultan (Multi-user)
Multi-tasking / single-tasking
Distribuite
ncapsulate (Embedded)

Recap
nscrierea informaiei n unitatea de
memorie de mas (HDD)
Prin partiionarea hard-disk-ului se segmenteaz unitatea n
mai multe regiuni, numite partiii, care pot conine sistemul de
fiiere al unui anume S.O.
Un sisteme de fiiere separat (un SO separat chiar), poate fi
utilizat pe fiecare partiie
Sistemele de operare ale calculatoarelor utilizeaz unul din
cele trei sisteme uzuale de fiiere:
File Allocation Table (FAT)
High Performance File System (HPFS)
New Technology File System (NTFS)
6

Softul instalat n memoria de


mas a unui sistem de calcul
Sistemul de operare (S.O.)
Utilitare

soft pentru plcile conectate pe magistrala I/O


editoare de texte
programe de administrare i instrumente de depanare
programe de editare grafic, video, simulatoare, jocuri,etc.

Limbaje de programare
7

Limbaje de programare
Definiie:
Un limbaj de programare este un limbaj
formal bazat pe instruciuni, care este
proiectat pentru a putea pune n aplicare o
serie de sarcini specifice.

Clase de limbaje de programare


De nivel sczut (limbajele de asamblare - cu
instruciuni procesor)

De nivel ridicat
bazate pe interpretoare: BASIC, MATLAB,
JAVA, unele programe de baze de date
bazate pe compilatoare: FORTRAN, PASCAL,
ADA, C, etc.

Interpretorul
Un interpretor traduce codul surs
ntr-o reprezentare intermediar
eficient i apoi o execut
imediat.

10

Compilatorul
Un compilator transform codul surs
scris ntr-un limbaj de programare
(sursa) ntr-un cod obiect i, n cele
mai multe cazuri, ntr-un program
executabil.

11

O alt clasificare pentru limbajele de


programare cuprinde trei categorii:
Limbaje de nivel nalt (Ada, Pascal, Fortran, etc.)
limbaje de programare cu un nivel nalt de abstracie
care nu depinde de detaliile unui anumit calculator

Limbaje de nivel mediu (C, C++, FORTH, etc.)


Limbaje de nivel sczut (Macro-assembler;
Limbaje de asamblare)
limbaje de programare ce depind puternic de detaliile12
unui anumit calculator

Limbajul de programare C
1966 Martin Richards (University of Cambridge)
a dezvoltat BCPL (Basic Combined
Programming Language)
1969 Ken Thomson ajutat i de Dennis Ritchie
B programming language
1969-1973 Dennis Ritchie C programming
language
13

Dezvoltarea limbajul de
programare C
nceputul anilor 70 codul S.O. UNIX este
rescris n C
De atunci exist ntotdeauna un compilator C
(C shell) ncorporat n fiecare UNIX (chiar n
unele SO nrudite cu UNIX).

1978 Dennis Ritchie i Brian Kernighan


au elaborat mpreun celebra carte "The C
Programming Language".
14

Alte limbaje de programare


bazate pe C

C#, C++, Objective-C


D
Go
Rust
Java, JavaScript
Limbo,
LPC
Perl
PHP
Python
Verilog

15

Se impunea necesitatea unui


standard ...
nainte de sfritul anilor '80, muli utilizatori de C se bazau
doar pe specificaiile crii lui Dennis Ritchie i Brian Kernighan
1989 American National Standards Institute ANSI a
publicat prima versiune a standardului pentru C ("ANSI C" sau
"C89")
1990 - ISO emite standardul internaional (numit "C90").
1995 - ISO laseaz o extensie a C-ului standard
1999 un standard revizuit (cunoscut ca "C99")
Decembrie 2011 versiunea curent a standardului de C
("C11")

16

Standardul C++
1998 C++ standard a fost ratificat ca ISO/IEC
14882:1998.
2003 unele modificri au fost adugate la
ISO/IEC 14882:2003.
2011 Standardul curent de C++ cu noi adugiri
a fost denumit ISO/IEC 14882:2011 (uneori
denumit C++11)
17

Portabilitatea
calitate a unui limbaj de
programare, scris pentru o anumit
main, de a putea fi utilizat pe o
alt main.

18

Portarea
Portarea este procesul de adaptare a unui
software.

Practic, cu ct mai mic este costul portrii,


relativ la costurile de implementare, cu att
mai portabil este acel soft.

19

Obs.
Conceptul de portabilitate poate fi stabilit
pentru diferite nivele de implementare:
Descrierea n pseudocod
Diagram logic
Program surs
Compilare
Link-editing
Program executabil
20

Un linker sau link editor este un program de


calculator care preia unul sau mai multe fiiere obiect
generate de un compilator i le combin ntr-un singur
program executabil.

21

Compilatorul este un program complex care


transforma instruciunile din limbajul surs n
limbaj main (cod de asamblare).

Rezultatul este un program obiect.


n cazul n care link-editorul este inclus n
compilator, atunci rezultatul este un fiier
executabil.

22

Caracteristici ale limbajului C


1.
2.
3.
4.
5.

Portabilitatea
Tipurile de date
Controlul erorilor
Lucreaz la nivelul limbajului assembler
Numr restrns de cuvinte cheie
(keywords)
6. Intr n categoria limbajelor structurate
7. Considerat un limbaj al programatorului 23

1. Portabilitatea limbajului C

Conform ingineri software cu experien,


limbajul de programare C pare a fi cel mai
portabil mediu pentru conceperea unui
program.

24

2. Tipurile de date
Exist patru specificatori de baz pentru date:

char
int
float
double

Specificatori opionali/ suplimentari :

signed,
unsigned
short
long
25

Tip

Explicaii

char

Cea mai mic unitate adresabila (8 bii), care poate


conine setul de caractere de baz. Este un tip ntreg.
Poate fi cu sau fr semn.

signed char
unsigned char
short
short int
signed short
signed short int
unsigned short
unsigned short int
int
signed int

La fel ca char, dar cu semn obligatoriu

unsigned
unsigned int

La fel ca char, dar sigur fr semn.


ntreg scurt. Lungime de cel puin 16 bii

La fel ca short, dar fr semn


Tipul ntreg de baz. Lungime de cel puin 16 bii (dar
deseori dublu fa de short)
La fel ca int, dar fr semn

26

Tip

Explicaii

long
long int
signed long
signed long int

ntreg lung. Lungime de cel puin 32 bii

unsigned long
unsigned long int

La fel ca long, dar fr semn.

long long
long long int
signed long long
signed long long int

long long este un ntreg cu semn de


mare dimensiune. Lungime de cel puin
64 bii (specificat odat cu versiunea
standard C99).

unsigned long long


unsigned long long int

La fel ca long long, dar fr semn.


(specificat odat cu versiunea standard
27
C99).

Tip

Explicaii

float

Format n virgul mobil cu precizie simpl.


Ocup 4 octei n memorie (32 bii).

double

Format n virgul mobil cu precizie dubl.


Ocup 8 octei n memorie (64 bii).

long double

Format n virgul mobil cu precizie extins.


Extended precision floating-point type. Ocup
80-bii (IEEE 754 quadruple-precision floatingpoint format)
28

long double

Formatul virgul mobil de 80 de bii a fost disponibil pe scar


larg dup 1984.

29

Observaii:
Dimensiunea tipului ntreg variaz n
funcie de implementarea compilatorului
utilizat.
Standardul prevede doar relaii de mrime
ntre tipurile de date i dimensiunile
minime pentru fiecare tip de date.
long long este mai cuprinztor dect
long, care este mai cuprinztor dect int,
care este mai cuprinztor dect short.
30

Observaii:
char este ntotdeauna cel mai mic tip de
date standard.
Dimensiunea minim pentru char este de
8 bii, dimensiunea minim pentru short i
int este de 16 bii, pentru long este de 32
bii, iar long long trebuie s conin cel
puin 64 bii.
Exist o multitudine de conversii posibile
n C.
31

3. Controlul erorilor
Exceptnd erorile de sintax, n C nu
avem un alt tip de control.
Nu exist control pentru verificarea
dimensiunii variabilelor utilizate.

32

4. Lucru la nivelul limbajului


de asamblare
Exist posibilitatea de a lucra direct bii,
octei, cuvinte calculator i pointeri.
Instruciunile n C necesit un numr
minim, prin translatare, de instruciuni
main n cadrul procesului de compilare.
33

5. Cuvintele cheie n limbajul C


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
union
unsigned
void
volatile
while
34

Standardul C89
Exist doar 32 cuvinte cheie n primul
standard ANSI C:
Din care 27 introdui deja n cartea
Kernighan & Ritchie

Multe alte limbaje de programare au cel


puin un numr dublu de cuvinte cheie.
35

Standardul C99 adaug cinci


cuvinte cheie noi:
_Bool
_Complex
_Imaginary
inline
restrict
36

Standardul C11 adaug alte 7


cuvinte cheie :
_Alignas
_Alignof
_Atomic
_Generic
_Noreturn
_Static_assert
_Thread_local

37

6. Limbaj structurat
Programare structurat este o paradigm de
programare care vizeaz mbuntirea
(claritate, calitatea i timpul de dezvoltare) unui
program de calculator prin utilizarea pe scar
larg de subrutine, structuri bloc i bucle.
Acest lucru este n contrast cu folosirea de teste
i salturi, cum ar fi instruciunea goto care este
att de dificil de urmrit i de ntreinut.
38

Observaii:
Programe structurate sunt adesea
compuse din structuri nlnuite ierarhic.
Acestea sunt: secvena, selecia, i
repetarea (iteraia).

39

Secven

40

Selecie

41

Iterare (bucle)

42

Not:
compartimentarea facilitatea de
separare i ascundere (fa de restul
programului) a ntregii informaii
(instruciuni) necesare pentru a ndeplini o
anumit sarcin.
Aceasta este o caracteristic a C-ului.

43

Observaie:
Principala component structural n C este
conceptul de funcie.

Principalul posibilitatea de a obine


compartimentarea este de a utiliza un bloc de
instruciuni grupate ntre acolade.

{
..
}
44

7. Un limbaj al programatorului
C-ul este adesea folosit pentru "programare de
sistem", inclusiv punerea n aplicare a sistemelor
de operare i a aplicaiilor de sisteme tip
embedded.
Un programator are nevoie de:
cod portabil i eficient
capacitatea de a accesa adrese RAM specifice
capacitatea de a se mula peste datele impuse din
exterior pentru cerinele de acces
cererea sczut asupra resurselor de sistem

C este uneori folosit uneori ca un limbaj intermediar


de implementare pentru alte programe scrise n 45
diferite alte limbaje.

Structura unui program scris


n C
Declaraii globale:
Includerea de fiiere header
declararea de constante i variabile globale
declararea de funcii locale

Funcia main()

Alte funcii
46

Observaii:
Cuvintele cheie (keywords) sunt scrise
cu litere mici
Un program scris n C trebuie s conin o
singur funcie main (i numai una).
Bibliotecile standard ale C i C++, ce
conin diverse funcii standard se afl n
fiierele header.

47

Fiierele Header (antet)


Fiecare fiier header conine declaraii
pentru una sau mai multe funcii, definiii
de tipuri de date i macro-uri.
Not: Unele fiiere header noi s-au adugat
de fiecare dat la apariia unui nou
standard imbunatit.

48

Cteva fiiere header de baz


<stdio.h>

Definete funciile de intrare/ieire

<stdlib.h>

Definete funcii de conversie numeric,


funcii de generare numere pseudoaleatoare, de alocare de memorie, funcii
de control de proces, etc.

<string.h>

Definete funciile de prelucrare/tratare


pentru iruri de caracter.

<math.h>

Definete funcii matematice comune.


49

Preprocesare n C
Un program surs C poate fi prelucrat
nainte de a fi supus compilrii. Aceast
prelucrare poart numele de preprocesare.
Preprocesorul asigur:
includeri de fiiere cu texte surs;
definiii i apeluri de macrouri;
compilare condiionat.
50

Includeri de fiiere
#include <stdio.h>
int main(void)
{

printf(Salut!\n");
return 0;

Preprocesorul nlocuiete linia


#include <stdio.h> cu coninutul fiierului
'stdio.h', care conine i funcia printf()
printre multe alte funcii

51

Definiii i apeluri de macrouri


Definirea unei constante:
#define PI 3.14159

Definirea unei funcii macro:


#define ABS(a) (a<0) ? a : a

52

Compilarea condiionat
Compilarea condiionat permite compilatorului
s produc diferene n executabilul obinut n
conform cu unii parametri.
Aceasta tehnica este frecvent utilizat atunci
cnd este nevoie de aceste diferene pentru a
rula software-ul de pe platforme diferite, sau cu
diferite versiuni de biblioteci necesare (eventual
pe un hardware diferit).
53

Directiva if-else
Variante ale directivei:
#if
#ifdef
#ifndef
#else
#elif
#endif

poate fi folosit pentru compilare condiionat.


54

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