Documente Academic
Documente Profesional
Documente Cultură
Programarea Calculatoarelor - Curs 1
Programarea Calculatoarelor - Curs 1
Programarea
Exemplu
Calculatorul – organizare
Structura memoriei RAM
calculatoarelor – Curs 1
Memorarea informației în calculator
Limbaje de programare
Cod mașină
Prenume
Nume de familie
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
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
UTCN - Programarea Calculatoarelor - Curs 1 ș.l.dr. Iulia Costin UTCN - Programarea Calculatoarelor - Curs 1 ș.l.dr. Iulia Costin
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();
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
UTCN - Programarea Calculatoarelor - Curs 1 ș.l.dr. Iulia Costin UTCN - Programarea Calculatoarelor - Curs 1 ș.l.dr. Iulia Costin
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
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
UTCN - Programarea Calculatoarelor - Curs 1 ș.l.dr. Iulia Costin UTCN - Programarea Calculatoarelor - Curs 1 ș.l.dr. Iulia Costin
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
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).
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
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
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ă
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
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
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#
11