Upload
sempreinter
View
223
Download
0
Embed Size (px)
Citation preview
FUNDAMENTELE
PROGRAMRII
Laura Dioan
INTRODUCERE
UNIVERSITATEA BABE-BOLYAI
Facultatea de Matematic i Informatic
Sumar
Elemente organizatorice
Scopul activitii
Coninut curs
Activiti i evaluare
Dezvoltarea proceselor de programare
Ce este programarea?
Elementele de baz ale unui program Python
Un simplu proces de dezvoltare bazat pe funcionaliti
Octombrie, 2013 Fundamentele programrii - Introducere 2
Elemente organizatorice Profesori coordonatori
Conf. Dr. Laura Dioan www.cs.ubbcluj.ro/~lauras
Lect. Dr. Vasile Prejmarean http://www.cs.ubbcluj.ro/~per/
Asist. Dr. Camelia erban http://www.cs.ubbcluj.ro/~camelia/
Orar Curs 2 ore/sptmn
Seminar 2 ore/sptmn
Laborator 2 ore/sptmn
Informaii utile www.cs.ubbcluj.ro/~lauras/
Teaching
Current year
Fundamentele programarii
Octombrie, 2013 Fundamentele programrii - Introducere 3
Scopul activitii Cunoaterea celor mai importante concepte din
programare
Familiarizarea cu conceptele din software engineering (arhitectur, implementare, ntreinere)
nelegerea instrumentelor sofware de baz
nvarea limbajului de programare Python i utilizarea lui pentru implementarea, rularea, testarea i depanarea programelor
nsuirea i mbuntirea stilului de programare
Octombrie, 2013 Fundamentele programrii - Introducere 4
Coninut curs Introducere n procesul de dezvoltare software Programare procedural Programare modular Tipuri definite de utilizator Principii de dezvoltare a softului Testarea i inspectarea programelor Recursivitate Complexitatea algoritmilor Metode prin divizare Backtracking Algoritmi de cutare Algoritmi de sortare Recapitulare
Octombrie, 2013 Fundamentele programrii - Introducere 5
Activiti i evaluare
Activiti de laborator 30% Documentaii i programe
n timpul semestrului
Evaluare practic 30% n sesiune
Evaluare scris 30% n sesiune
Activitate de seminar 10% n timpul semestrului
Octombrie, 2013 Fundamentele programrii - Introducere 6
Activiti i evaluare Toate activitile sunt obligatorii
Participarea la examen este condiionat de o prezen de 75% la orele de curs
Condiii de promovare:
Nota final >= 5
Fiecare laborator este evaluat cu o not ntre 1 i 10 pe baza explicaiilor, codului surs, exemplelor, testelor, etc.
ntrzierea n predarea unui laborator este penalizat prin diminuarea notei cu 1p pentru fiecare sptmn de ntrziere
Nota pentru laborator se stabilete ca o medie a notelor pentru toate laboratoarele realizate. Laboratoarele nerealizate vor primi nota 1.
Este permis o singur absen de la orele de laborator (absenele suplimentare vor diminua nota cu 1p/absen)
n cursul unui laborator (2 ore) se pot preda maxim 2 teme de laborator
O tem de laborator copiat este notat cu 0
Octombrie, 2013 Fundamentele programrii - Introducere 7
Activiti i evaluare
n sesiunea de restane
Se mai pot preda laboratoare, dar nota primit va fi maxim 5
Se poate re-susine examenul practic
Se poate re-susine examenul scris
Octombrie, 2013 Fundamentele programrii - Introducere 8
Dezvoltarea proceselor de programare
Ce este programarea?
Elementele de baz ale unui program Python
Un simplu proces de dezvoltare bazat pe funcionaliti
Octombrie, 2013 Fundamentele programrii - Introducere 9
Dezvoltarea proceselor de programare Ce este programarea?
Hardware Computere (desktop, laptop, etc) i dispozitive nrudite
Software Programe sau sisteme care ruleaz pe un hardware
Limbaj de programare Notaii i reguli pentru definirea sintaxei i semanticii
programelor
Python Un limbaj de programare de nivel nalt
Interpretatorul Python Un program care permite rularea/interpretarea unor alte
programe
Bibliotecile Python Subprograme i tipuri de date deja definite de ali
programatori
Octombrie, 2013 Fundamentele programrii - Introducere 10
Dezvoltarea proceselor de programare Ce este programarea?
Ce fac computerele? Stocheaz informaii i date n
Memoria intern Memoria extern (hard, stick, CD, etc)
Opereaz Cu ajutorul procesorului
Comunic Prin tastatur, mouse, ecran Conexiuni de tip reea
Informaii i date Informaii interpretarea unor date
Numrul 123 Stringul abc
Data o colecie de simboluri stocate (ntr-o anumit reprezentare) ntr-un computer 12 1100 abc 97 98 99
Procesarea datelor i informaiilor Dispozitivele de intrare transform informaiile n date Datele sunt stocate n memorie Dispozitivele de ieire produc informaii din date
Operaii de baz ale procesoarelor n reprezentare binar Ex. AND, OR, NOT, XOR, etc.
Octombrie, 2013 Fundamentele programrii - Introducere 11
Dezvoltarea proceselor de programare Elementele de baz ale unui program Python
Exemplu
Elemente lexicale Un program Python poate fi alctuit din mai multe linii de
cod Comentarii
ncep cu # i in pn la sfritul liniei ncep cu i in mai multe rnduri, pn la un nou
Identificatori secvene de caractere (litere, cifre, _) care ncep cu o
liter sau cu _ Literali
notaii pentru valorile constante sau pentru tipuri definite de utilizator
Octombrie, 2013 Fundamentele programrii - Introducere 12
# takes two integers and prints the sum of them a = 3 b = 4 c = a + b print("The sum of ", a, " + ", b, " is ", c)
Dezvoltarea proceselor de programare Elementele de baz ale unui program Python
Modelul de date
Toate datele unui program Python obiecte
Un obiect are o identitate adresa lui n memorie un tip care determin valorile pe care le poate lua
obiectul respectiv, precum i operaiile posibile cu acel obiect
o valoare
Odat creat, identitatea i tipul obiectului nu mai pot fi modificate
Valoarea unor obiecte se poate modifica Obiecte mutabile Obiecte ne-mutabile
Octombrie, 2013 Fundamentele programrii - Introducere 13
Dezvoltarea proceselor de programare Elementele de baz ale unui program Python
Tipuri de date
Coninut
Domeniu set de valori
Operaii posibile
Tipologie
Numere - ne-mutabile
Secvene mutabile i ne-mutabile
Mulimi finite i ordonate, indexate prin numere ne-negative
Dac s este o secven, atunci
len(s) returneaz numrul de elemente ale lui s
s[0], s[1], , s[len(s)-1] elementele lui s
Exemplu: s = [1, a, 23, abc]
Octombrie, 2013 Fundamentele programrii - Introducere 14
Dezvoltarea proceselor de programare Elementele de baz ale unui program Python
Tipuri de date numerice - ne-mutabile
int
Domeniu: ntregi pozitivi i negativi
Operaii: +, -, *, /
Literali: 1, 2
bool
Domeniu: adevrat sau false
Operaii: logice (and, or, not,...)
Literali: True, False, 1, 0
float
Domeniu: numere reale n dubl precizie
Operaii: +, -, *, /
Literali: 3.14, -0.25
Octombrie, 2013 Fundamentele programrii - Introducere 15
Dezvoltarea proceselor de programare Elementele de baz ale unui program Python
Tipuri de date secveniale
Stringuri ne-mutabile
Domeniu: iruri de caractere
Operaii: concatentare, cutare
Literali: abc
Octombrie, 2013 Fundamentele programrii - Introducere 16
#concatenate a = "abc" b = "xybc" c = a + b print(c) #search n = c.find("bc") print(n) # n = 1 m = c.rfind("bc") print(m) # m = 5
Dezvoltarea proceselor de programare
Elementele de baz ale unui program Python Tipuri de date secveniale
Liste mutabile
Domeniu: secvene de elemente (similare sau diferite ca tip) separate prin , i ncadrate de [ ]
Operaii
Creare (manual, range)
Accesare (index, len) i modificare elemente
Eliminare (pop) i inserie (insert) de elemente
Feliere i ncapsulare
Utilizare ca stive (append, pop)
Octombrie, 2013 Fundamentele programrii - Introducere 17
Dezvoltarea proceselor de programare Elementele de baz ale unui program Python
Tipuri de date secveniale
Liste mutabile
Octombrie, 2013 Fundamentele programrii - Introducere 18
# create a = [1, 2, 'a'] print (a) x, y, z = a print(x, y, z) # indices: 0, 1, ..., len(a) - 1 print (a[0]) print ('last element = ', a[len(a)-1]) # lists are mutable a[1] = 3 print(a) # slicing print (a[:2]) b = a[:] print (b) b[1] = 5 print (b) a[len(a):] = [7, 9] print(a) a[:0] = [-1] print(a) a[0:2] = [-10, 10] print(a)
# lists as stacks stack = [1, 2, 3] stack.append(4) print (stack) print (stack.pop()) print (stack) # nesting c = [1, b, 9] print (c) #generate lists using range l1 = range(10) print (l1) l2 = range(0,10) print (l2) l3 = range(0,10,2) print (l3) l4 = range(9,0,-1) print (l4) #list in a for loop l = range(0,10) for i in l: print (i)
Dezvoltarea proceselor de programare
Elementele de baz ale unui program Python Tipuri de date secveniale
Tuple ne-mutabile
Domeniu: secvene de valori (similare sau diferite ca tip) separate prin ,
Operaii
Creare (manual mpachetare) i despachetare
ncapsulare
Tuplu cu 0 elemente i tuplu cu un singur element
Octombrie, 2013 Fundamentele programrii - Introducere 19
# Tuples are immutable sequences # A tuple consists of a number of # values separated by commas # tuple packing t = 12, 21, 'ab' print(t[0]) # empty tuple (0 items) empty = () # sequence unpacking x, y, z = t print (x, y, z)
# tuple with one item singleton = (12,) print (singleton) print (len(singleton)) #tuple in a for t = 1,2,3 for el in t: print (el) # Tuples may be nested u = t, (23, 32) print(u)
Dezvoltarea proceselor de programare Elementele de baz ale unui program Python
Tipuri de date secveniale
Dicionare ne-mutabile
Domeniu: mulimi ne-ordonate de perechi (cheie, valoare) cu chei unice
Operaii:
Creare
Accesarea valorii pentru o cheie dat
Adugarea/modificarea/eliminarea unei perechi (cheie, valoare)
Verificarea existenei unie chei
Octombrie, 2013 Fundamentele programrii - Introducere 20
#create a dictionary a = {'num': 1, 'denom': 2} print(a) #get a value for a key print(a['num']) #delete a key value pair del a['num'] print (a)
#set a value for a key a['num'] = 3 print(a) print(a['num']) #check for a key if 'denom' in a: print('denom = ', a['denom']) if 'num' in a: print('num = ', a['num'])
Dezvoltarea proceselor de programare
Elementele de baz ale unui program Python Variabile
Locaii de memorie care stocheaz valori
Au nume, tip i valoare
Introducerea unei variabile ntr-un program asignare
Expresii
O combinaie de valori, constante, variabile, operatori i funcii care sunt interpretate conform regulilor de preceden, calculate i care produc o alt valoare
Exemple
Expresii numerice: 1+2
Expresii booleene: 1 < 2
Expresii de tip string: 1+2
Octombrie, 2013 Fundamentele programrii - Introducere 21
Dezvoltarea proceselor de programare
Elementele de baz ale unui program Python Instruciuni
Operaiile de baz ale unui program
Tipologie
Asignri
Scop: (re)legarea numelor de valori i pentru a modifica valoarea unor obiecte mutabile
Legarea numelui: x = 1, s = [1, 2]
Re-legarea numelui: x = x + 2, s[0] = 3
Blocuri
Parte a unui program care este executat ca o unitate
Secven de instruciuni
Identiicate prin indentarea liniilor de cod
Octombrie, 2013 Fundamentele programrii - Introducere 22
Dezvoltarea proceselor de programare
Elementele de baz ale unui program Python Instruciuni
Atribuiri (asignri)
Condiionale
Octombrie, 2013 Fundamentele programrii - Introducere 23
# takes two integers and prints the sum of them a = 3 b = 4 c = a + b print("The sum of ", a, " + ", b, " is ", c)
# takes two integers and prints the max of them a = 3 b = 4 if (a < b): c = b else: c = a print("The max of ", a, " and ", b, " is ", c)
Dezvoltarea proceselor de programare Elementele de baz ale unui program Python
Instruciuni
De ciclare
for
while
Octombrie, 2013 Fundamentele programrii - Introducere 24
# prints the elements of a sequence a = ['Mary', 'has', 'more', 'flowers'] for i in range(len(a)): print(i, a[i])
# prints the elements of a sequence a = ['Mary', 'has', 'more', 'flowers'] for w in a: print(w)
# computes the gcd of two numbers a = 42 b = 18 if a == 0: gcd = b; else: if b == 0: gcd = a else: while a != b: if a > b: a = a - b else: b = b - a gcd = a print("gcd = ", gcd)
Dezvoltarea proceselor de programare
Cum se scriu programele?
Roluri n ingineria soft
Programator/dezvoltator
Scrie/dezvolt programe pentru utilizatori
Client
Cel interesat/afectat de rezultatele unui proiect
Utilizator
Ruleaz programe pe computer
Procesul dezvoltrii unui soft include construirea, lansarea i ntreinerea unui soft
indic paii care trebuie efectuai i ordinea lor
Octombrie, 2013 Fundamentele programrii - Introducere 25
Dezvoltarea proceselor de programare Pai n rezolvarea unei probleme
Enun pentru definirea problemei
Cerine
Scenariu de utilizare a aplicaiei
Stabilirea funcionalitilor i mprirea lor pe iteraii
Identificarea de activiti (ale fiecrei funcionaliti) i descrierea lor
Octombrie, 2013 Fundamentele programrii - Introducere 26
Dezvoltarea proceselor de programare Pai n rezolvarea unei probleme
Enun pentru definirea problemei
Surt descriere a problemei
Un profesor (client) are nevoie de o aplicaie pentru studenii (utilizatori) care nva s gseasc cel mai mic numr prim mai mic dect un numr natural n dat.
Cerine
Definesc n detaliu ceea ce este necesar din perspectiva clientului, respectiv ce trebuie s fac aplicaia
Stabilirea informailor de intrare i ieire ale aplicaiei
Date de intrare: n numr natural
Date de ieire: cel mai mic numr prim mai mare dect n
Scenariu de utilizare a aplicaiei
Octombrie, 2013 Fundamentele programrii - Introducere 27
Rulare 1 2 3 4
Intrri 5 0 11 -3
Ieiri 7 2 13 Dai un numr natural
Dezvoltarea proceselor de programare Pai n rezolvarea unei probleme
Stabilirea funcionalitilor i planificarea iteraiilor Funcionalitatea
definit ca o funcie client
exprimat n forma aciune rezultat obiect
Aciunea o funcie pe care aplicaia trebuie s o furnizeze
Rezultatul este obinut n urma execuiei funciei
Obiect o entitate n care aplicaia implementeaz funcia
poate fi implementat n cteva ore complexitate redus
F1: gsirea celui mai mic numr prim mai mic dect un numr natural n dat.
Iteraia
O perioad de timp n cadrul creia se realizeaz o versiune stabil i executabil a unui produs, mpreun cu documentaia suport
Ajut la planificarea temporal a ansamblului de funcionaliti
I1 = F1
Octombrie, 2013 Fundamentele programrii - Introducere 28
Problema este simpl i nu are dect o singur
funcionalitate!
Dezvoltarea proceselor de programare
Pai n rezolvarea unei probleme List de activiti (ale fiecrei funcionaliti) i
descrierea lor
Recomandri:
Definirea unei activiti pentru fiecare operaie
Definirea unei activiti pentru interaciunea Utilizator Program (Interfaa utilizator user interface UI)
Definirea unei activiti pentru operaiile UI
Determinarea dependenelor ntre activiti
A1: verificarea calitii de numr prim pentru o valoare dat
A2: gsirea celui mai mic numr prim mai mic dect un numr natural n dat
A3: implementarea iniializrii unui numr, cutrii celui mai mic nr prim mai mic dect n i furnizarea rezultatului
A4: implementarea UI
Octombrie, 2013 Fundamentele programrii - Introducere 29
Dezvoltarea proceselor de programare
Pai n rezolvarea unei probleme List de activiti (ale fiecrei funcionaliti) i
descrierea lor
Cazuri de testare
Specific un set de date de intrare de test, condiii de execuie i rezultate ateptate necesare pentru evaluarea unei pri de program
A1: verificarea calitii de numr prim pentru o valoare dat
Octombrie, 2013 Fundamentele programrii - Introducere 30
Intrri Ieiri
2 True
6 False
3 True
-2 False
1 False
Dezvoltarea proceselor de programare
Pai n rezolvarea unei probleme List de activiti (ale fiecrei funcionaliti) i
descrierea lor
Implementare
A1: verificarea calitii de numr prim pentru o valoare dat
Octombrie, 2013 Fundamentele programrii - Introducere 31
# Description: verifies if the number n is prime # Data: n # Precondition:n - natural number # Results: res # Postcondition:res=FALSE, if n is not prime or res=TRUE, if n is prime if (n < 2): print("no ", n, " is not prime (is composed)") else: d = 2 isPrime = True while (d * d
Recapitulare
Ce este programarea?
Elementele de baz ale unui program Python
Un simplu proces de dezvoltare bazat pe funcionaliti
Octombrie, 2013 Fundamentele programrii - Introducere 32
Cursul urmtor
Programare procedural
Funcii
Vizibilitatea variabilelor
Transmiterea parametrilor
Cazuri de testare
Octombrie, 2013 Fundamentele programrii - Introducere 33
Materiale de citit i legturi utile
1. Limbajul Python http://docs.python.org/3/reference/index.html
2. Biblioteca standard Python http://docs.python.org/3/library/index.html
3. Tutorial Python http://docs.python.org/3/tutorial/index.html
4. Frentiu, M., H.F. Pop, Fundamentals of Programming, Cluj University Press, 2006, 220 pagini
Octombrie, 2013 Fundamentele programrii - Introducere 34
Informaiile prezentate au fost colectate din diferite surse de pe internet, precum i din cursurile de Fundamentele Programrii inute n anii anteriori de ctre:
Lect. Dr. Adriana Guran www.cs.ubbcluj.ro/~adriana
Lect. Dr. Istvan Czibula - www.cs.ubbcluj.ro/~istvanc
Lect. Dr. Andreea Vescan -www.cs.ubbcluj.ro/~avescan
Lect. Dr. Ioan Lazr -www.cs.ubbcluj.ro/~ilazar
Octombrie, 2013 35 Fundamentele programrii - Introducere