Fundamentele Programării - cs.ubbcluj.rovcioban/Anul1Info/Curs1_FP.pdf · Conținutul cursului 1....
Transcript of Fundamentele Programării - cs.ubbcluj.rovcioban/Anul1Info/Curs1_FP.pdf · Conținutul cursului 1....
Fundamentele Programării notițe de curs
Formațiile de studiu: Matematică/Matematică-Informatică, an 1
Coordonator: Lect. Dr. Camelia ȘERBAN
Obiectivele Disciplinei
• Cunoasterea conceptelor de baza ale programarii
• Cunoasterea conceptelor de baza ale ingineriei software (proiectare, implementare, testare, intretinere)
• Invatarea limbajului de programare Python
• Intelegerea notiunii de algoritm
• Cunoasterea unor algoritmi pentru unele clase de probleme: operatiicu vectori, cautare, interclasare, sortare
• Cunoasterea principiilor de proiectare
Evaluarea
•30% activitatea de la laborator
•30% examen practic
•40% examen scris
Toate activitățile sunt obligatorii
Conținutul cursului1. Introducere în procesul de dezvoltare de soft
2. Programarea procedurală
3. Programarea modulară
4. Tipuri definite de utilizator – Programarea orientată obiect
5. Principii de proiectare și programare – Arhitecturi stratificate
6. Principii de proiectare și programare – Diagrame UML
7. Testarea și inspectarea programelor
8. Recursivitate
9. Complexitatea algoritmilor
10. Algoritmi de căutare și complexitatea lor
11. Algoritmi de sortare și complexitatea lor
12. Metoda Backtracking
13. Metoda Divizării
14. Recapitulare
Introducere în procesul de dezvoltare de soft
• Ce este programarea?
• Elementele de bază ale unui program Python
• Cum scriem programe?
Ce este programarea?•Hardware and software
• Hardware • Computere (desktop, laptop, etc) și dispozitive înrudite
• Software • Programe sau sisteme care rulează pe un hardware
• Limbaj de programare• Notații și reguli pentru definirea sintaxei și semanticii programelor
• Python • Un limbaj de programare de nivel înalt
• Interpretorul Python • Un program care permite rularea/interpretarea unor alte programe
• Bibliotecile Python • Subprograme și tipuri de date deja definite de alți programatori
Ce este programarea?
• Ce fac computerele? • Stochează informații și date în memoria internă si/sau memoria externă
(hard, stick, CD, etc) • Operează cu ajutorul procesorului• Comunică prin tastatură, mouse, ecran , conexiuni de tip rețea
• Informații și date • Informații – interpretarea unor date (Numărul 123, Stringul „abc” )• Data – o colecție de simboluri stocate (într-o anumită reprezentare) într-un
computer (12 – 1100 , „abc” – 97 98 99 )• Procesarea datelor și informațiilor
• Dispozitivele de intrare transformă informațiile în date • Datele sunt stocate în memorie• Dispozitivele de ieșire produc informații din date
• Operații de bază ale procesoarelor • În reprezentare binară (Ex. AND, OR, NOT, XOR, etc. )
Elemente de bază ale unui program PythonExemplu
• Elemente lexicale• Un program Python poate fi alcătuit din mai multe linii de cod
• Comentarii• încep cu # și țin până la sfârșitul liniei• încep cu ’’’ și țin mai multe rânduri, până la un nou ’’’
• Identificatori• secvențe de caractere (litere, cifre, _) care încep cu o literă sau cu _
• Literali• notații pentru valorile constante sau pentru tipuri definite de utilizator
# Reads two integers and prints the sum of thema = input("Enter the first number: ")b = input("Enter the second number: ")c = int(a) + int(b)print("The sum of ", a, " + ", b, " is ", c)
Elemente 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 șioperațiile 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
Elementele de bază ale unui program Python• Tipuri de date standard
Tipurile clasifică valori. Un tip de dată este definit prin domeniu (un set de valori) si de operatiile pe acele valori
• Numerice (ne-mutabile)• int
• Domeniu: întregi pozitivi și negativi • Operații: +, -, *, /, //, **, % comparare:==,!=,<, > operații pe biți: |, ^,• &, <<, >>, ~• Literali: 1, 2
• bool• Domeniu: adevărat sau false • Operații: logice (and, or, not,...) • Literali: True, False, 1, 0
• float • Domeniu: numere reale în dublă precizie • Operații: +, -, *, / • Literali: 3.14, -0.25
Elemente de bază ale unui program Python• Tipuri de date standard – continuare
• Secvențiale - mutabile și ne-mutabile
• Mulțimi finite și ordonate, indexate prin numere ne-negative
• Dacă s este o secvență, atunci
• len(s) – returnează numărul de elemente ale lui s
• s[0], s[1], …, s[len(s)-1] – elementele lui s
• Exemplu: s = [1, ‘a’, 23, “abc”]
• Stringuri – ne-mutabile• Domeniu: șiruri de caractere
• Operații: concatentare, căutare
• Literali: „abc”
• Liste – va urma
Elemente de bază ale unui program Python
• Variabile• Locații de memorie care stochează valori
• Au nume, tip și valoare
• Introducerea unei variabile într-un program – atribuire
• Expresii• O combinație de valori, constante, variabile, operatori și funcții 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”
Elemente de bază ale unui program Python
• Instrucțiuni - Operațiile de bază ale unui program (un program esteo secvență de instrucțiuni)• Atribuirea
• 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 instrucțiuni
• Identicate prin indentarea liniilor de cod
Elemente de bază ale unui program Python
def este_bisect(an):
"""
determina daca un an este bisect
Parametrii: a-nr natural
Returneaza: True, daca a este bisect
False, altfel
"""
if an % 400 == 0:
return 1
elif an % 100 == 0:
return 0
elif an % 4 == 0:
return True
else:
return False
print(este_bisect(2014))
def este_bisect_v2(an):
"""
determina daca un an este bisect
Parametrii: a-nr natural
Returneaza: True, daca a este bisect
False, altfel
"""
if (an%400==0) or (an % 4==0 and an%100!=0):
return True
else:
return False
print(este_bisect_v2(2014))
Instrucțiunea if
Elemente de bază ale unui program PythonInstrucțiunea while
def invers(n):
'''
returneaza inversul unui numar
parametrii: n-nr natural
returneaza: numarul obtinut cu cifrele lui n in ordine inversa
'''
n_inversat=0
while n>0: n_inversat=n_inversat*10+n%10
n=n//10
return n_inversat
print(invers(1234))
Instrucțiunea Forfor i in range(5):
print (i)
for i in range(10,50,5):
print (i)
for i in range(10,5,-1):
print (i)
for i in reversed(range(10,20)):
print (i)
for i in (4,6,9,11):
print (i)
for i in [1,2,4,5]:
print (i)
s = for i in "Aprogramatoarei":
print (i)
Cum scriem programe? • 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 de dezvoltare de soft• include construirea, lansarea și întreținerea unui soft
• indică pașii care trebuie efectuați și ordinea lor
Proces incremental de dezvoltare, bazat pefunctionalități(A simple Features driven development process)
• Definirea problemei• Un profesor de matematică (client) are nevoie de o aplicație pentru elevi (utilizatori) care învață numerele raționale.
Programul va ajuta elevii să facă operații aritmetice de bază.
• Stabilirea cerințelor/funcționalități• Definesc în detaliu ceea ce este necesar din perspectiva clientului, respectiv ce trebuie să facă aplicația
• Principii in stabilirea cerintelor/Requirements guidelines
• Cerințele bine definite conduc la dezvoltarea unui sistem soft conform asteptarilor clientului.
• Identifică funcționalitățile pe care aplicația le oferă
• Funcționalitățile trebuie să clarifice ambiguitățile din enunțul problemei.
Funcționalitatea (feature) - definită ca o funcție client, este exprimată în forma
<acțiune> <rezultat> <obiect > ex. Calculate [action] the total [result] of a sale [object]. • Acțiunea – o funcție pe care aplicația trebuie să o furnizeze
• Rezultatul – este obținut în urma execuției funcției
• Obiect – o entitate în cadrul aplicației ce implementează funcția
• poate fi implementată în câteva ore – complexitate redusă
Proces incremental de dezvoltare, bazat pe functionalități
• Planificarea funcționalităților pe iterații
Iterație: O perioadă de timp în cadrul căreia se realizează o versiune stabilă și executabilă a unui produs, împreună cu documentația suport.
La terminarea iterației avem o versiune funcțională care face ceva util clientului.
Iteration Planned features
I1 F1. Add a number to calculator
I2 F2. Clear calculator
I3 F3. Undo the last operation (user may repeat this operation)
Proces incremental de dezvoltare, bazat pe functionalități
• Modelarea iterațiilor• Definirea sarcinilor/activităților (tasks) pentru fiecare funcționalitate
• Principii pentru definirea sarcinilor
• Definirea unei activități pentru fiecare operație care nu este deja oferiră de platforma(Python) T1, T2
• Definirea unei activități pentru interacțiunea Utilizator – Program (user interface UI) T4
• Definirea unei activități pentru operațiile UI – T3
• Determinarea dependențelor între activități T4 --> T3 --> T2 -->T1
• Planifică sarcinile în funcție de dependențele dintre acestea
T1 Compute the greatest common divisor of two integers
T2 Add two rational numbers
T3 Implement calculator: init, add, and total
T4 Implement user interface
Proces incremental de dezvoltare, bazat pe functionalități• Modelarea iterațiilor - cont
• Scenarii de utilizare –ajută programatorul să înțeleagă mai bine ce trebuie implementat. Un scenariu de utilizare afișează posibile interacțiuni între program și utilizator
User Program Description
a 0 Shows total
b 1/2 Add number to calculator
c 1/2 Shows total
d 2/3 Add number to calculator
e 5/6 Shows total
f 1/6 Add number to calculator
g 1 Shows total
h -6/6 Add number to calculator
i 0 Shows total
Proces incremental de dezvoltare, bazat pe functionalități• Modelarea iterațiilor - cont
• Cazuri de testare (Test Case) - Specifică un set de date de test, condiții de execuție șirezultatele așteptate necesare pentru evaluarea unei părți de program
• Cazuri de testare pentru sarcina/task T1 (cel mai mare divizor comun a două numere)
Input params: a, b gcd(a, b): c, where c is the greatest common divisor of a and b
2 3 1
2 4 2
6 4 2
0 2 2
2 0 2
24 9 3
-2 0 ValueError
0 -2 ValueError
Un process simplu de dezvoltare bazat pe functionalitățiModelarea iterațiilor continuare - Implementare T1
def gcd(a, b):"""returneaza cel mai mare divizor comun a doua numere
naturaleArunca: ValueError daca parametrii sunt numere negative
sau ambele nule"""if a < 0 or b < 0:
raise ValueError("a and b must be greater than 0")if a == 0 and b == 0:
raise ValueError("gcd(0, 0) is undefined")if a == 0:
return belse:
if b == 0:return a
else:while a != b:
if a > b:a = a - b
else:b = b - a
return a
def test_gcd():
assert gcd(0, 2) == 2
assert gcd(2, 0) == 2
assert gcd(2, 3) == 1
assert gcd(2, 4) == 2
assert gcd(6, 4) == 2
assert gcd(24, 9) == 3
try:
gcd(-2, 0)
gcd(0, -2)
gcd(0, 0)
assert False
except ValueError:
assert True
test_gcd()
Referinte bibliografice
• The Python language reference. http://docs.python.org/py3k/reference/index.html
• The Python standard library. http://docs.python.org/py3k/library/index.html
• The Python tutorial. http://docs.python.org/tutorial/index.html