Sunteți pe pagina 1din 11

2 Conținut

 Site curs (moodle) – conține materialele de curs, laborator


 Notare
 Bibliografie

Programarea
 Exemplu
 Calculatorul – organizare
 Structura memoriei RAM

calculatoarelor – Curs 1
 Memorarea informației în calculator
 Limbaje de programare
 Cod mașină

Introducere. Calculatorul. Limbaje de programare  Asamblare


 De nivel înalt
 Limbajul C
 Istoric
Ș.l.dr. Iulia Costin

UTCN - Programarea Calculatoarelor - Curs 1 ș.l.dr. Iulia Costin

3 Site curs – moodle.cs.utcluj.ro 4 Site curs – moodle.cs.utcluj.ro


1. Creare cont 2. Înregistrare la curs
 Programarea Calculatoarelor (Automatică seria A + SM), Sem. 1, 2022-2023:
pe platforma moodle.cs.utcluj.ro

Câmpurile marcate cu sunt


obligatorii

Prenume

Nume de familie

Vi se va cere o cheie de înregistrare (Enrollment key)


- veți primi la laborator

UTCN - Programarea Calculatoarelor - Curs 1 ș.l.dr. Iulia Costin UTCN - Programarea Calculatoarelor - Curs 1 ș.l.dr. Iulia Costin
Veți primi pe mail link de activare

1
5 Mod de notare 6 Cunoștințe și abilități dobândite

 Notă laborator (L): test (colocviu) laborator (la sfârșitul semestrului)  Cunoștințe teoretice
 Examen final (E) - scris  Câteva concepte de bază de proiectare a algoritmilor și de scriere a
programelor
 Nota finală la Programarea Calculatoarelor: N = 0.6E + 0.4L
 Noțiuni de programare structurată, programare procedurală
 Restricții: L și E trebuie să fie peste 5
 Limbajul C
 Disciplina – 5 credite
 Câțiva algoritmi simpli
 În activitățile aferente intră studiu individual obligatoriu – minim 4 ore/săptămână
 Abilități
 Proiectare de algoritmi și implementarea lor în limbajul C
 E-mail: Iulia.Costin@cs.utcluj.ro
 Utilizarea unui stil de programare conform conceptelor învățate

UTCN - Programarea Calculatoarelor - Curs 1 ș.l.dr. Iulia Costin UTCN - Programarea Calculatoarelor - Curs 1 ș.l.dr. Iulia Costin

7 Bibliografie 8 Exemplu: un personaj animat

 Liviu Negrescu – Limbajele C și C++ pentru începători, vol. I (partea I, partea a II-a), diverse
edi ții, Editura Albastră, Cluj-Napoca
 P. Deitel, H. Deitel – C – How to Program, Prentice Hall, diverse edi ții (ediția 8, din 2016): zid
https://faculty.ksu.edu.sa/sites/default/files/c_how_to_program_with_an_introduction_to_c
_global_edition_8th_edition.pdf sau https://www.docdroid.net/f1dLps9/deitel-c-how-to-
program-8th-edition-pdf
 Tutoriale C
 www.learn-c.org personaj spațiu
 fresh2refresh.com/c-programming liber
 www.tutorialspoint.com/cprogramming
 www.javatpoint.com/c-programming-language-tutorial
 www.coursera.org/courses?languages=en&query=c+programming
 etc.
piatră
UTCN - Programarea Calculatoarelor - Curs 1 ș.l.dr. Iulia Costin UTCN - Programarea Calculatoarelor - Curs 1 ș.l.dr. Iulia Costin

2
9 Personaj animat – informații date 10 Personaj animat – cerințe

 Lume bidimensională  Pornind din configurația inițială:


 Mărginită de ziduri  să ia piatra din fața lui
 Dimensiune maximă dată  s-o ducă pe o poziție precizată
 Pot exista ziduri interioare  să ajungă în poziția finală cu orientarea precizată
 Pot fi 0 sau mai multe pietre  Care sunt comenzile?
misca
 Personajul poate executa comenzi
iaPiatra
 misca – înaintează un pas misca
intoarceStanga
 intoarceStanga – se întoarce cu 90º spre stânga
misca
 punePiatra – aşează o piatră pe acea poziţie misca
misca
 iaPiatra – ia piatra de pe acea poziţie ...

UTCN - Programarea Calculatoarelor - Curs 1 ș.l.dr. Iulia Costin UTCN - Programarea Calculatoarelor - Curs 1 ș.l.dr. Iulia Costin

11 Personaj animat 12 Personaj animat – comenzi noi

 NU rezultă un program pe care să-l pornim şi să funcţioneze  Vrem să creăm o nouă comandă – intoarceDreapta. Cum?
 Vrem să repetăm de un număr de ori:
 Rezultă un algoritm = o succesiune de paşi, o reţetă pentru a face ceva int i;
for (i=0; i<3; i++)
 Un program – trebuie să fie valid din punct de vedere sintactic (să respecte intoarceStanga();

regulile limbajului)  Presupunem că mai cunoaște și comenzile:


 cum arată programul pentru comenzile anterioare?  fataELibera – află dacă în fața lui nu e zid
 ePiatra – află dacă există piatră pe poziție
 Ce putem face cu ele?
 Vrem să ia piatra de jos doar dacă există:
if (ePiatra())
iaPiatra();
 Dacă vrem să meargă înainte cât poate, până ajunge la zid:
while (fataELibera())
misca();

UTCN - Programarea Calculatoarelor - Curs 1 ș.l.dr. Iulia Costin UTCN - Programarea Calculatoarelor - Curs 1 ș.l.dr. Iulia Costin

3
13 Personaj animat – variantă 14 Personaj animat – superKarel 

 Lumea bidimensională să se poată modifica


zzzzzzzzzz
z z
z z
z zzzzzz
zkp z z
zzzzzzzzzz
 într-un fișier tabla.txt; respectă anumite restricții

UTCN - Programarea Calculatoarelor - Curs 1 ș.l.dr. Iulia Costin UTCN - Programarea Calculatoarelor - Curs 1 ș.l.dr. Iulia Costin

15 Personaj animat – superKarel  16 Karel cu obstacole

UTCN - Programarea Calculatoarelor - Curs 1 ș.l.dr. Iulia Costin UTCN - Programarea Calculatoarelor - Curs 1 ș.l.dr. Iulia Costin

4
17 Karel cu obstacole 18 Principii importante

1. Descompunem problema în părți mai mici


 Condiții:
 intoarceDreapta
 Pot fi cel mult 18 obstacole, pe coloanele pare  sareObstacol

 Obstacolele sunt înalte cel mult cu 1 mai puțin decât înălțimea spațiului în care  urcaObstacol

se mișcă  dreaptaEBlocata

 coboaraObstacol

 Cerințe:  mergiLaPerete

 E mai ușor de înțeles ce face programul


 trebuie să meargă din colțul stânga jos în colțul dreapta jos
2. “Don’t repeat yourself”
 să sară peste obstacole (să le ocolească) dacă există 3. “Programming is not just about writing a program that the computer understands. Programming is
also about writing programs that people understand. This is what programming style is all about.”
 Exemplu – cum ar arăta fără a respecta un stil de programare?
4. Programul să fie cât mai general, respectând cerințele problemei
 Să funcționeze nu doar într-un caz particular

UTCN - Programarea Calculatoarelor - Curs 1 ș.l.dr. Iulia Costin UTCN - Programarea Calculatoarelor - Curs 1 ș.l.dr. Iulia Costin

19 Algoritm 20 Ce vom învăța?

 Cea mai importantă abilitate a unui programator este rezolvarea problemelor  Programare – limbajul C.
 abilitatea de a formula probleme, a gândi soluții ale lor în mod creativ și a exprima o
soluție în mod clar și precis.  Cum să gândim algoritmic - cum gândim rezolvarea problemelor pe
calculator.
 Soluțiile create prin procesul de rezolvare a problemelor se numesc algoritmi.
 având o problemă, cum putem să determinăm calculatorul s-o rezolve? Cum
 Algoritm corect - listă de pași care, dacă sunt urmați exact, vor duce la putem descrie etapele pe care am vrea să le utilizăm pentru a o rezolva?
rezolvarea problemei considerate.
 este ca o rețetă: trebuie urmat întocmai, trebuie să fie clar și neambiguu și trebuie să
se termine.
 Deci: vrem să determinăm calculatorul să calculeze ceva, să deducă
 Scopul: pentru orice problemă, să se dezvolte un algoritm care să reprezinte o informații noi.
soluție generală
 trebuie să gândim cum reprezentăm informațiile
 valabilă pentru orice instanță a problemei (pentru orice date de intrare care respectă
condițiile și restricțiile problemei)  în anumite entități (variabile simple sau având o anumită structură).
 După ce avem o astfel de soluție, putem utiliza calculatorul pentru a  pentru a putea deduce noi informații pe baza unora existente, există unelte
automatiza execuția. standard (ex. iterația, repetiția, recursivitatea etc.)

UTCN - Programarea Calculatoarelor - Curs 1 ș.l.dr. Iulia Costin UTCN - Programarea Calculatoarelor - Curs 1 ș.l.dr. Iulia Costin

5
21 Ce vom învăța? 22 Calculatorul

 După ce am învățat să descriem rezolvarea unor probleme mai mici, mai  Calculatoarele sunt utilizate tot mai mult în aproape toate domeniile de
simple, le putem folosi pentru a rezolva probleme mai complexe. activitate.
 descriem rezolvarea problemelor mai complexe folosindu-ne de soluții ale unor  Costurile de calcul au scăzut dramatic datorită evoluţiei rapide a tehnologiilor
probleme mai simple (subprobleme ale celor complexe → descompunere). hardware şi software.
 Acum câteva decenii, un calculator se întindea pe o întreagă încăpere şi aceasta
 De asemenea, există clase standard de algoritmi trebuia să fie foarte mare
 o parte îi vom studia la acest curs (căutare, sortare etc.)  costul unui astfel de calculator era de milioane de dolari.
 alții vor fi studiați la un alt curs în anul II (Proiectarea Algoritmilor).  În prezent, un calculator mult mai performant decât cele de atunci încape pe un
chip mai mic decât o unghie
 De multe ori, pentru o aceeași problemă pot exista mai multe rezolvări (mai
 costă câţiva dolari.
mulți algoritmi) posibili
 ex. sortare (ordonare) a unui șir de valori
 Un calculator poate efectua calcule şi lua decizii, la viteze de miliarde de ori
mai mari decât un om.
 de obicei aceștia diferă prin costul lor (ca timp, ca spațiu necesar etc.).
 Calculele pe care un calculator personal le efectuează într-o secundă, i-ar lua unei
 și acest subiect va fi tratat mai detaliat la cursul de Proiectarea Algoritmilor. persoane o viaţă întreagă dacă le-ar efectua doar cu ajutorul unui calculator de
buzunar.

UTCN - Programarea Calculatoarelor - Curs 1 ș.l.dr. Iulia Costin UTCN - Programarea Calculatoarelor - Curs 1 ș.l.dr. Iulia Costin

23 Calculatorul 24 Calculator - organizare

 Calculatoarele prelucrează date (date de intrare) sub controlul unor  Un calculator poate fi privit ca fiind organizat în mai multe unităţi sau secțiuni logice:
mulţimi de instrucţiuni grupate în programe, şi produc rezultate (date de 1. Unitate de intrare – obţine informaţii de la dispozitive de intrare (tastatură, mouse, scanner,
microfon, senzori, touchscreen etc.) şi le pune la dispoziţia altor unităţi pentru a fi prelucrate.
ieșire).
2. Unitate de ieşire – preia informaţii din calculator şi le trimite unor dispozitive de ieşire (ecran,
 Un program precizează o mulţime ordonată de acţiuni pe care trebuie să le imprimantă, plotter, diverse echipamente controlate de calculator) pentru a le pune la
efectueze calculatorul. dispoziţie în afara calculatorului.

 Un calculator e format din diferite echipamente (procesoare, memorie, 3. Unitate de memorie – este o secţiune a calculatorului care are rol de a stoca informaţii (pe
termen scurt).
disc, tastatură, mouse, ecran etc.) care se numesc hardware.  capacitate relativ scăzută, cu acces direct (în orice moment se poate accesa orice locație, nu
trebuie accesate într-o anumită ordine), volatilă (informația se pierde la închiderea calculatorului)
 Programele care rulează pe calculator se numesc software.  reţine informaţii primite prin unitatea de intrare, informaţii din timpul procesării de către calculator,
precum şi informaţii care urmează să fie trimise de unitatea de ieşire către dispozitive de ieşire.
 se numeşte adesea memoria principală (RAM) sau memoria internă (primară, primary).

4. Unitatea aritmetică şi logică – este secţiunea de prelucrare (procesare) a calculatorului


(ALU – Arithmetic and Logic Unit).
 responsabilă de efectuarea calculelor de tip adunări, scăderi, înmulţiri şi împărţiri.
 conţine mecanisme de decizie care permit, de exemplu, compararea a două valori din memorie.

UTCN - Programarea Calculatoarelor - Curs 1 ș.l.dr. Iulia Costin UTCN - Programarea Calculatoarelor - Curs 1 ș.l.dr. Iulia Costin

6
25 Calculator - organizare 26 Calculator - organizare

5. Unitatea centrală de procesare – secţiunea care coordonează şi supervizează


operarea celorlalte secţiuni (CPU – Central Processing Unit) (unitate de control).
program MEMORIE INTERNĂ date
 spune unităţii de intrare când să citească informaţii în unitatea de memorie
 spune ALU când să utilizeze informaţii din unitatea de memorie pentru calcule
 spune unităţii de ieşire când să trimită informaţii din unitatea de memorie către anumite
echipamente de ieşire.
 Multe din calculatoarele din prezent au mai multe unităţi de procesare, deci pot
efectua multe operaţii simultan; aceste calculatoare se numesc multiprocessors UNITATEA DE UNITATEA ARITMETICĂ
(multiprocesoare).
CONTROL ȘI LOGICĂ
6. Unitate de memorie secundară – este secţiunea de memorare pe termen lung a
informaţiilor în calculator (hard-disk, CD, DVD, Blu-Ray, SSD, memory stick etc.).
 capacitate mare de memorare, în general cu acces direct, permanentă (informația nu contor program operații primitive
se pierde la închiderea calculatorului)
 reţine programe şi date pe termen mai lung (ore, zile, luni, ani).
 Accesul la informaţia din memoria secundară durează mai mult decât accesul la
informaţia din memoria principală, dar costul per unitate de stocare e mai mic pentru
memoria secundară faţă de memoria principală.

UTCN - Programarea Calculatoarelor - Curs 1 ș.l.dr. Iulia Costin INPUT


UTCN - Programarea Calculatoarelor - Curs 1 ș.l.dr. Iulia Costin OUTPUT

27 Structura memoriei RAM 28 Structura memoriei RAM

9278 9278
Fiecare celulă memorează un număr de
9279 Memoria este împărţită în locaţii de memorie 9279
biţi (de regulă 8 biţi (1 octet))
9280 (celule) 9280
9281 9281
9282 9282 Valorile mai mari sunt memorate în celule

9283 Fiecare celulă are o adresă numerică, ce o 9283 } consecutive (la adresă multiplu de nr. de
celule)
9284 identifică în mod unic 9284
9285 9285
9286 9286
UTCN - Programarea Calculatoarelor - Curs 1 ș.l.dr. Iulia Costin UTCN - Programarea Calculatoarelor - Curs 1 ș.l.dr. Iulia Costin

7
29 Memorarea informației în calculator 30 Memorarea informației în calculator

 Toate informaţiile din calculator: numere, text, imagini, audio, instrucţiuni etc.,  După codificarea informaţiei, ea e stocată în memorie
sunt memorate la fel, adică sub formă numerică.
 Calculatorul ”înțelege” doar 0 și 1  sistemul de numeraţie binar (baza 2)

 O aceeași secvență de 0 și 1 poate fi interpretată diferit în funcție de context  O cifră binară = bit (binary digit) (b)
 e nevoie de o codificare (conversie)  Sistemul zecimal – 10 cifre zecimale (0 ÷ 9)
 textele sunt memorate prin codul caracterelor conţinute:  ex. 324710=3x103+2x102+4x101+7x100
 codificarea ASCII (litere, cifre, semne de punctuaţie, caractere speciale, spaţiu, simboluri
grafice etc.) – 256 caractere ( = 28)  Sistemul binar – 2 cifre binare (0 şi 1)
 codificarea UNICODE (care permite şi codificarea caracterelor altor limbi; prima parte este
comună cu ASCII) – 65536 caractere ( = 216)  ex. 11012=1x23+1x22+0x21+1x20 ( =1310)
 proprietăți ale acestor sisteme de codificare:  Sistemul hexazecimal – 16 cifre hexa (0÷9, A÷F)
 sunt consecutive:
 codurile cifrelor (‘0’, ‘1’, …, ‘9’)
 codurile literelor mari (‘A’ … ‘Z’)
 ex. 7A316=7x162+10x161+3x160 ( =195510=111101000112)
 codurile literelor mici (‘a’ … ‘z’)
 codurile literelor mari au valori mai mici decât cele ale literelor mici

UTCN - Programarea Calculatoarelor - Curs 1 ș.l.dr. Iulia Costin UTCN - Programarea Calculatoarelor - Curs 1 ș.l.dr. Iulia Costin

31 Memorarea informației în calculator 32 Limbaje de programare

 Valorile cu mai mult de 2 stări necesită mai mulţi biţi pentru a fi memorate  Unele limbaje de programare sunt direct înţelese de calculator, altele necesită paşi intermediari
 o colecţie de doi biţi are patru stări posibile:
de traducere pentru a putea fi înţelese de calculator. Există 3 mari categorii de limbaje:
 00, 01, 10, 11
 Limbaje mașină

 o colecţie de trei biţi are opt stări posibile:  Limbaje de asamblare


 000, 001, 010, 011, 100, 101, 110, 111  Limbaje de nivel înalt
 în general, o colecţie de n biţi are 2n stări posibile 1. Limbaj maşină – e specific fiecărui calculator.
 Un calculator înţelege doar propriul limbaj maşină, care e definit de designul hardware al calculatorului.
 Sunt 256=28 coduri ASCII => necesită 8 biţi fiecare
 Un limbaj maşină are instrucţiuni în format numeric (succesiuni de biţi 0 şi 1), pentru operaţiile elementare pe
 8 biți =1 octet (byte) (B) care le ştie efectua calculatorul.
 Puterea calculatorului e dată de faptul că poate executa instrucțiunile respective foarte rapid (miliarde de
 Sunt 65536=216 coduri UNICODE => 16 biţi = 2B instrucțiuni-mașină/secundă)
 Multipli pentru octet:  Deci, limbajele maşină sunt dependente de calculator/procesor (un limbaj maşină poate fi utilizat doar pe
un singur tip de procesor).
 1kB=1024 B = 210 octeţi (kilo)  e foarte greoi pentru oameni, chiar şi pentru specialişti.
 La început, programarea calculatoarelor se făcea chiar în cod-mașină
 1MB=1024 kB = 220 octeţi (mega)
 Un exemplu: o secvenţă în cod mașină care adună două numere A şi B şi memorează rezultatul în C:
 1GB=1024 MB = 230 octeţi (giga) 1300042774
1400593419
 1TB=1024 GB = 240 octeţi (tera) 1200274027

UTCN - Programarea Calculatoarelor - Curs 1 ș.l.dr. Iulia Costin UTCN - Programarea Calculatoarelor - Curs 1 ș.l.dr. Iulia Costin

8
33 Limbaje de programare 34 Limbaje de programare

2. Limbaj de asamblare – programarea în limbaj mașină era mult prea lentă şi dificilă. Ca urmare, 3. Limbaj de nivel înalt – Pentru a creşte viteza de scriere a programelor, au
programatorii au început să utilizeze prescurtări în limba engleză pentru a reprezenta operaţiile
elementare. Acestea au format baza pentru limbajele de asamblare. fost create limbaje de nivel înalt (high-level languages), în care o singură
 Fiecărei operaţii (instrucţiune) din limbaj maşină i-a fost asociată o astfel de prescurtare (deci există o instrucţiune desemnează mai multe operaţii (instrucțiuni-mașină).
corespondenţă 1 la 1 între instrucţiunile maşină şi instrucţiunile din limbaj de asamblare).
 Ex. o secvenţă în limbaj de asamblare care face acelaşi lucru ca mai sus:  Bineînţeles, nici aceste programe nu sunt înțelese de calculator şi trebuie traduse
LOAD A în limbaj maşină.
ADD B
STORE C
 Programele care traduc un program din limbaj de nivel înalt în limbaj maşină se
 un astfel de cod este mai clar pentru oameni numesc compilatoare (compiler)
 nu este înţeles de calculator, ci trebuie tradus în limbaj maşină.  procesul de traducere din limbaj de nivel înalt în limbaj maşină se numeşte compilare.
 Au fost dezvoltate programe de traducere numite asambloare (assembler)  pe lângă compilare, mai e necesară o operație numită link (legare), care creează
 pentru a converti programele din limbaj de asamblare în limbaj maşină, pentru ca ele să poată fi apoi programul executabil
executate de calculator.
 Limbajul de asamblare, ca şi limbajul maşină, este specific unui tip de calculator (procesor).  Limbajele de nivel înalt permit programatorilor să scrie instrucţiuni care arată
 dacă trebuie efectuate aceleaşi operaţii pe un nou calculator, trebuie rescris întregul program în limbajul noului
calculator.
aproape ca propoziţiile din limba engleză şi care conţin notaţii matematice
 Trebuie să fie cunoscută foarte bine arhitectura procesorului și a calculatorului și modul lui de funcționare uzuale.
 Utilizarea calculatoarelor a crescut rapid odată cu apariţia limbajelor de asamblare, dar şi programarea în  Ex. pentru a efectua aceeaşi operaţie ca în exemplul din limbaj maşină şi limbaj
aceste limbaje (ca şi cea în limbaj maşină) necesită multe instrucţiuni, pentru a realiza chiar şi cele mai
simple sarcini. de asamblare, într-unul din limbajele de nivel înalt:
C=A+B

UTCN - Programarea Calculatoarelor - Curs 1 ș.l.dr. Iulia Costin UTCN - Programarea Calculatoarelor - Curs 1 ș.l.dr. Iulia Costin

35 Limbaje de programare 36 Limbaje de programare

 Din punctul de vedere al programatorului, e mult mai uşor de utilizat un  Compilarea unui program dintr-un limbaj de nivel înalt poate dura mult
limbaj de programare de nivel înalt decât un limbaj de asamblare sau un uneori.
limbaj maşină.
 necesită traducere în limbaj mașină = compilare  Există şi programe numite interpretoare, care au rolul să execute
 Un limbaj de nivel înalt e mult mai puţin dependent de calculator decât programele de nivel înalt direct, practic prin traducerea fiecărei instrucţiuni
celelalte variante din program în limbaj maşină şi execuţia ei imediată.
 un program scris într-un limbaj de nivel înalt poate fi compilat pentru diferite
calculatoare/procesoare, făcând eventual mici modificări programului (codului
 Programele în formă compilată se execută mult mai repede decât
sursă) programele interpretate.
 în unele situaţii/pentru unele limbaje – chiar fără a modifica deloc codul (ex.  Printre cele mai utilizate limbaje de nivel înalt sunt C, C++, Java, Python etc.
Java).
 Un limbaj de nivel înalt permite ignorarea multor detalii legate de
funcţionarea calculatorului şi gestionarea memoriei, cum sunt
 utilizarea regiştrilor procesor
 modul de alocare a memoriei pentru variabile
 gestionarea stivei la apeluri de funcţii etc.
UTCN - Programarea Calculatoarelor - Curs 1 ș.l.dr. Iulia Costin UTCN - Programarea Calculatoarelor - Curs 1 ș.l.dr. Iulia Costin

9
37 Limbaje de nivel înalt – scurt istoric 38 Limbaje de nivel înalt – scurt istoric

 Au fost create sute de limbaje de nivel înalt, dar puţine au fost adoptate pe  Activitatea de cercetare în domeniu din anii '60 a dus la evoluţia
scară largă. programării structurate
 Fortran – a fost creat de IBM în anii '50, pentru aplicaţii ştiinţifice şi inginereşti  Programare structurată = o abordare disciplinată de scriere a programelor, care
care necesită calcule matematice complexe. sunt mai clare, mai uşor de testat şi depanat şi mai uşor de modificat.
 Este un limbaj încă utilizat pentru aplicaţii inginereşti.
 Unul din rezultatele mai tangibile ale acestei cercetări a fost apariţia
 COBOL – a fost creat în 1959 de diverşi producători de calculatoare în limbajului Pascal, dezvoltat de profesorul Niklaus Wirth în 1971.
colaborare cu guvernul SUA.
 a fost proiectat pentru a putea preda programarea structurată
 Este utilizat pentru aplicaţii care necesită manipularea eficientă a unor volume mari
de date, şi se utilizează şi în prezent.  a fost adoptat rapid în multe instituţii de învăţământ din SUA.
 În anii '60, multe proiecte software de dimensiuni mari aveau probleme majore,  limbajului îi lipseau multe caracteristici, necesare pentru a putea fi util pentru
întârzieri mari în livrare, costuri care depăşeau cu mult bugetul şi multe erori în aplicaţii comerciale, industriale şi guvernamentale.
produsul final.
 Ca atare, nu a fost adoptat şi în aceste medii.
 Dezvoltarea de software era o activitate mult mai complexă decât părea.

UTCN - Programarea Calculatoarelor - Curs 1 ș.l.dr. Iulia Costin UTCN - Programarea Calculatoarelor - Curs 1 ș.l.dr. Iulia Costin

39 Limbaje de nivel înalt – scurt istoric 40 Istoria limbajului C

 Dezvoltarea limbajului Ada a fost sponsorizată de Departamentul Apărării  C a evoluat din două limbaje, BCPL şi B.
 BCPL a fost dezvoltat în 1967 ca limbaj pentru scrierea de software pentru sisteme de
(DOD) al SUA, în anii '70 şi începutul anilor '80. operare şi de compilatoare.
 Existau sute de limbaje utilizate pentru giganticele sisteme software de comandă  Limbajul B a fost modelat de Ken Thompson după BCPL, şi în 1970 l-a utilizat pentru a crea
versiunile iniţiale ale sistemului de operare Unix, la Bell Laboratoires, pentru un calculator DEC
şi control ale DOD. PDP-7.
 DOD dorea crearea unui singur limbaj care să îi indeplinească majoritatea necesităţilor.  BCPL şi B erau limbaje netipizate (typeless), adică nu aveau definite tipuri de date (întreg,
real, caracter etc.)
 Limbajul Ada a fost numit după fiica poetului lord Byron, Lady Ada Lovelace,  Dennis Ritchie a dezvoltat limbajul C din B, la Bell Laboratoires
care a scris primul program pentru calculator, la începutul anilor 1800 (pentru  a fost implementat iniţial în 1972 pe un DEC PDP-11.
echipamentul mecanic de calcul Analytical Engine, proiectat de Charles  C utilizează conceptele importante din BCPL şi B, dar i-a adăugat tipuri de date şi alte
Babbage, care nu a fost construit vreodată). caracteristici.
 C a devenit cunoscut pe scară largă ca limbajul de implementare al sistemului de
 O trăsătură importantă a limbajului Ada este faptul că este multitasking, adică operare Unix.
permite specificarea mai multor activităţi care se pot executa în paralel.  În prezent, practic toate sistemele de operare importante sunt scrise în C şi/sau C++.
 În prezent, multe limbaje de nivel înalt au această facilitate.  C este disponibil pe cele mai multe calculatoare şi este independent de hardware.
 Se pot scrie, cu puţină atenţie, programe C portabile (sau măcar codul lor sursă) pe cele
mai multe calculatoare (portabile = care pot fi rulate pe diferite platforme).
UTCN - Programarea Calculatoarelor - Curs 1 ș.l.dr. Iulia Costin UTCN - Programarea Calculatoarelor - Curs 1 ș.l.dr. Iulia Costin

10
41 Istoria limbajului C 42 Istoria limbajului C

 La sfârşitul anilor '70, limbajul C a evoluat în ceea ce azi se numeşte „C tradiţional”.  Motivele pentru care C este utilizat şi astăzi:
 Ritchie a publicat împreună cu Brian Kernighan „The C Programming Language”, făcând
astfel limbajul mult mai cunoscut.
 are caracteristicile unui limbaj de nivel înalt

 Expansiunea rapidă a limbajului C pe diverse tipuri de calculatoare (platforme hardware)  poate trata activităţi de nivel scăzut (ex. lucrul pe biţi)
a condus la multe variaţii, asemănătoare dar adesea incompatibile.
 poate produce programe eficiente
 Programatorii aveau nevoie să scrie cod care să ruleze pe mai multe platforme, deci a
fost necesară o versiune standard a limbajului.  proiectat pentru a încuraja programarea independentă de platformă
 Primul standard adoptat este din 1989, de către ANSI (American National Standards  un program C poate fi compilat pentru diverse platforme (calculatoare, sisteme
Institute) – e numit ANSI C (sau ISO C, C standard sau C90) de operare), necesitând doar schimbări minimale în codul sursă
 a fost actualizat în 1995, 1999, 2011 şi 2018, versiuni cunoscute cu numele C95, C99, C11,
C18.  Principalul dezavantaj al limbajului C (între limbajele de nivel înalt) → nu are
 C99 a introdus modificări semnificative, care extind capabilităţile limbajului.
un mecanism de detectare a erorilor
 Totuşi, C99 nu e suportat complet de toate compilatoarele, multe implementând doar un subset al  permite crearea de programe cu erori greu de depistat.
noilor caracteristici.

UTCN - Programarea Calculatoarelor - Curs 1 ș.l.dr. Iulia Costin UTCN - Programarea Calculatoarelor - Curs 1 ș.l.dr. Iulia Costin

43 C++, Java, C#

 Limbajul C++ a fost dezvoltat de Bjarne Stroustrup la Bell Laboratories.


 Are rădăcinile în limbajul C, furnizând diferite îmbunătăţiri faţă de C, precum şi
capabilităţi de programare obiectuală.
 Referitor la învăţarea acestui limbaj, există multe păreri în favoarea ideii că
strategia cea mai bună este de a stăpâni limbajul C şi apoi de a studia C++.
 Java şi C# au de asemenea rădăcini în limbajul C
 sunt limbaje pur obiectuale
 bibliotecile de clase ale acestora le fac potrivite pentru o largă arie de aplicaţii,
de la aplicaţii web la aplicaţii pe telefoane mobile.

UTCN - Programarea Calculatoarelor - Curs 1 ș.l.dr. Iulia Costin

11

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