01_intro.pdf
TRANSCRIPT
-
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