01_intro.pdf

35
FUNDAMENTELE PROGRAMĂRII Laura Dioşan INTRODUCERE UNIVERSITATEA BABEŞ-BOLYAI Facultatea de Matematică şi Informatică

Upload: sempreinter

Post on 17-Sep-2015

213 views

Category:

Documents


0 download

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