c fundamentele programării - cs.ubbcluj.roper/fp -_-/fp_1.pdf · cunoasterea unor algoritmi pentru...
TRANSCRIPT
11/27/27
Fundamentele programFundamentele programăăriiriiCC_1_1 / 5.10.2012/ 5.10.2012
1414--16 ~ 2 / I16 ~ 2 / I
VineriVineri
Fundamentele Fundamentele programarprogramariiiiMI1MI1Matematica informaticaMatematica informatica
Fundamentele Fundamentele programariiprogramarii111111MatematicaMatematica
SemestrulSemestrul 11
6 cr.C2+2+22+2+2+0 Fundamentele programăriiMLR5005
CrediteFinalizareOre: C+S+L+PDenumireCod
Date despre disciplinăDate despre disciplinăObligatorieReg. Disc.:CEvaluare:1Semestrul:1Anul de studiu:
OrarOrar
22/27/27
TimpulTimpul total total estimatestimat (ore (ore pepe semestrusemestru al al activităactivităţţilorilor didacticedidactice))
20Examinări 4Tutoriat
21Pregătire seminarii/laboratoare, teme, referate, portofolii şi eseuri7Documentare suplimentară în bibliotecă, pe platformele electronice de specialitate, …
14Studiul după manual, suport de curs, bibliografie şi notiţeoreDistribuţia fondului de timp:
28/28seminar/laborator28curs84Total ore din planul de învăţământ
2/2seminar/laborator2curs6Număr de ore pe săptămână
6Numărul de credite150Total ore pe semestru66Total ore studiu individual
33/27/27
Obiectivele disciplineiObiectivele disciplinei
Intelegerea notiunii de algoritm si invatarea limbajuluiPseudocod pentru descrierea algoritmilor;
Formarea deprinderilor de proiectare a algoritmilor; Cunoasterea unor algoritmi pentru unele clase de probleme:
operatii cu vectori, matrice, polinoame, rezolvari de ecuatii sisisteme liniare, cautare, interclasare si sortare;
Formarea deprinderilor de concepere, executie, testare sipunere la punct a programelor Pascal cu structurile de date simple;
Formarea unui stil de programare.
Obiectivele specificeObiectivele specifice
Conceperea şi realizarea unui program într-un limbaj de nivel înalt, precum şi a documentaţiei.
Alegerea unui algoritm/subalgoritm pentru o problema/subproblema data, studierea complexităţii, demonstrarea corectitudinii şi verificarea şi validarea acestuia, precum şi întocmirea unei decumentatii tehnice.
Obiectivul general al Obiectivul general al disciplineidisciplinei
44/27/27
Continut:
4. 4. RecursivitateRecursivitate- Notiunea de Recursivitate- Recursivitate directa si indirecta
ImplementareaImplementarea structuristructuri de date de date staticestatice şşii dinamicedinamice- Tablou, şir de caractere, mulţime, înregistrare- Liste, arbori
3. 3. CodificareaCodificarea algoritmiloralgoritmilor PseudocodPseudocod îînn PascalPascal- Elemente de baza ale limbajului Pascal - Declaratii si Instructiuni- Structura unui program Pascal- Codificare
2. 2. SubalgoritmiSubalgoritmi ((PseudocodPseudocod) ) - Notiunea de subalgoritm- Parametrii formali- Definirea unui subalgoritm (functie si procedura)- Apelul unui subalgoritm- Importanta subalgoritmilor în programare
1. 1. AlgoritmiAlgoritmi sisi descriereadescrierea lorlor- Notiunea de algoritm- Variabila, tip, specificare- Limbajul Pseudocod, structura liniara, alternativa, repetitiva
55/27/27
… Continut:
8. 8. MetodeMetode generalegenerale de de elaborareelaborare a a algoritmiloralgoritmilor- Programare modulara; Programare structurata- Elemente de claritate: indentare, spatiere, denumiri, ...- Stil în programare
Metoda top-down si Rafinarea în pasi succesivi- Metoda top-down; Metoda bottom-up- Rafinarea în pasi succesivi
7. Dezvoltarea corecta a algoritmilor din specificatii7. Dezvoltarea corecta a algoritmilor din specificatii- Algoritm abstract; Ideea de rafinare; Reguli de rafinare; Exemple
6. 6. CorectitudineaCorectitudinea algoritmiloralgoritmilor- Stare în executia unui program; Calculul efectuat de un algoritm;- Rezultatul calculului efectuat de un algoritm; Partial corectitudine, terminare,
(total) corectitudine; Metoda lui Floyd de demonstrare a corectitudinii
5. Faze in 5. Faze in viataviata unuiunui program program - Faze în realizarea unui program: specificare, proiectare, codificare, testare,
documentare, verificare; - Întretinerea programelor: corectiva, adaptiva, perfectiva;- Testarea programelor: Metoda cutiei negre, Metoda cutiei transparente
66/27/27
… Continut:
14. 14. AlgoritmiAlgoritmi de de cautarecautare sisi complexitateacomplexitatea lorlor- Specificarea problemei de cautare; Metode de cautare: parcurgere secventiala, cautare
binara; Complexitatea algoritmilor de cautareAlgoritmi de sortare si complexitatea lor
- Specificarea problemei de sortare; Metode de sortare (BubbleSort, SelectSort, InsertSort, QuickSort, MergeSort, …)
- Complexitatea algoritmilor de sortare
13. 13. ComplexitateaComplexitatea algoritmiloralgoritmilor- Definitia complexitatii; Compararea algoritmilor din punctul de vedere al eficientei;
Complexitatea structurala; …
12. Metode euristice12. Metode euristiceAlte metodeAlte metode: Metoda programarii dinamice; Metoda Branch and Bound
11. Metoda Backtracking11. Metoda Backtracking- Extinderi ale metodei Backtracking
10. 10. MetodaMetoda Greedy Greedy Metoda Divide et Impera
9. 9. TipuriTipuri AbstracteAbstracte de Date de Date - Specificarea unui TAD; Unit Pascal; Implementarea unui TAD în Pascal; Folosirea
unui TAD în programare
77/27/27
EvaluareaEvaluarea : :
Nota Nota finalăfinală se calculează conform ponderilor de mai sus, daca toatetoate notelenotele sunt >= 5 si prezentaprezenta esteeste conform conform regulamentuluiregulamentului (Pr.curs >= 75%, Pr.sem >= 75% si Pr.lab >= 90%).
10%10%
Documentatia realizată Programe predate
Documentatie siPrograme realizate
15%Lucrare de control (sem.)Scrierea de algoritmi si programeSeminarSeminar
//llaboratoraborator
50%15%
Examen scrisExamen practic (lab.)
Aplicarea noţiunilor teoretice în realizarea programelorRezolvarea problemelor
CursCurs
PPondere din ondere din nota finalănota finalăMMetode de evaluareetode de evaluareCriterii de evaluareCriterii de evaluareTip activitateTip activitate
88/27/27
BibliografieBibliografie : : 1. Frentiu, M., H.F. Pop, Fundamentals of Programming, Cluj University Press, 2006, 220 pagini2. M.Frentiu si altii, Manualul incepatorului in Programarea Pascal, Ed. Microinformatica, Cluj-
Napoca, 1995, 252 pagini, ISBN 973-9215-04-3. M.Frentiu si altii, Programare Pascal. Programe ilustrative, probleme propuse, pentru elevi si
studenti, Ed. Promedia, 1995, 229 pagini, ISBN 973-96862-1-4.4. M.Frentiu, V.Prejmereanu, Algoritmica si programare, Lito. Univ. Babes-Bolyai, Cluj-Napoca,
1995, 261 pagini.5. Frentiu, M., I.Lazar, S.Motogna si V.Prejmereanu, vol.I - Elaborarea algoritmilor, 1997, 188
pagini; vol.II - Programare Pascal, 392 pagini; Ed.Universitatii Babes-Bolyai, Cluj-Napoca.6. M.Frentiu si B.Parv, Elaborarea programelor. Metode si tehnici moderne, Ed.Promedia, Cluj-
Napoca, 1994, 217 pag.7. M.Frentiu, Verificarea şi Validarea Programelor, Ed. Presa Universitară clujană, 2007, 173
pagini, ISBN 978-973-610-684-7.-2.8. M.Frentiu, Verificarea Corectitudinii Programelor, Ed.Univ.”Petru-Maior”, Tg.-Mureş, 2001,
116 pagini, ISBN 973-8084-32-69. Livovschi, L., H.Georgescu, Sinteza si analiza algoritmilor, Editura St. si Enciclopedica,
Bucuresti, 1986.10. M.Frenţiu, I.Lazăr, Bazele Programării: Proiectarea Algoritmilor, 2000, Ed. Univ. Petru Maior,
Tg.Mureş 184 pagini ISBN 973-8084-06-711. F.Boian, M.Frenţiu, I.Lazǎr şi L.Tambulea, Informatica de bază, Ed.Universitǎţii "Babeş-
Bolyai", Cluj-Napoca, 2005, 233 pagini, ISBN 973-9261-18-3.12. Knuth, D., Tratat de programarea calculatoarelor, Ed. Tehnica (Algoritmi fundamentali; Cautare
si sortare)13. Prejmerean V., Fundamentele programării – notiţe de curs, http://www.cs.ubbcluj.ro/~per/Fp.html
99/27/27
1. Algoritmi si descrierea lor1. Algoritmi si descrierea lor
-- NotiuneaNotiunea de de algoritmalgoritm-- VariabilaVariabila, tip, , tip, specificarespecificare-- LimbajulLimbajul PseudocodPseudocod, ,
-structura liniara, -alternativa, -repetitiva
1010/27/27
FazeleFazele rezolvăriirezolvării uneiunei problemeprobleme cu cu calculatorulcalculatorul((ciclulciclul de de viataviata al al programuluiprogramului) :) :
Rezolvarea unei probleme cu ajutorul calculatorului presupuneparcurgerea următoarelor fazefaze:
- precizarea cerinţelor beneficiarului (definirea problemei) ;- specificarea problemei (ce trebuie facut?);- proiectarea algoritmului de rezolvare a problemei:
(ansamblu-Specif., detaliu-Subalg.);- programarea propriu-zisă, numită şi implementare (sau codificare);- testarea produsului obţinut (validare-beneficiar, verificarea-executor);- exploatarea şi întreţinerea programului (corectiva, perfectiva, adaptiva);- redactarea documentaţiei fiecăreia din fazele enumerate.
1111/27/27
SpecificaSpecificaţţieie : :
PredicatPredicat de de intrareintrare sau precondiprecondiţţieie φ(X): pentru a preciza datelepentru care problema are sens (pentru celelalte nu are sens să executămprogramul).
Var. de iesire
ZZ
Var. de intrare
XXProgram Program PPVar. de lucru
YY
PredicatPredicat de de ieieşşireire sau postcondipostcondiţţieie ψ(X,Z): pentru a preciza relarelaţţiaiadintre rezultatele Z şi datele iniţiale X. Acesta este corect pentru acelevalori a şi b ale vectorilor X şi Z pentru care rezultatele sunt b în cazul cânddatele iniţiale sunt a şi este fals în caz contrar.
1212/27/27
… Specificaţie :
Specificaţia problemei :- predicatul de intrare φ(X) – precondiprecondiţţieie şi- predicatul de ieşire ψ(X,Z) – postcondipostcondiţţieie.
cEx.: SăSă se se calculezecalculeze radical (r) radical (r) dintrdintr--un un numărnumăr real real pozitivpozitiv xx.Specificaţia problemei este:
precondiţia φ(X): "x>0" ,postcondiţia ψ(X,Z): "r2=x" .
CorectCorect:: SăSă se se calculezecalculeze radical din x cu o radical din x cu o eroareeroare absolutăabsolută maximămaximă εε datădată. Vectorul de intrare este X=(x,ε) iar specificaţia este:
(X): "x>0 şi ε>0" ;ψ(X,Z): "r2-x<ε" .
1313/27/27
DescriereaDescrierea algoritmiloralgoritmilor : :
Prin algoritmalgoritm putem înţelege o succesiune finită de operaţii. Acestapresupune executarea unor calcule într-o anumită ordineordine.
Un algoritmalgoritm este un text finit, o secvenţă finită de propoziţii ale unui limbajde descriere a algoritmilor. O propozipropoziţţieie a limbajului precizează o anumită regulăregulă de de calculcalcul.
Are urmatoarele trei caracteristici: generalitategeneralitate, , finitudinefinitudine şi unicitateunicitate ??
AlgoritmulAlgoritmul AA definedefineşştete o o funcfuncţţieie:
A : D RDescriereaDescrierea algoritmiloralgoritmilor se realizeaza prin mai multe limbajelimbaje de de descrieredescriere,
dintre care cele mai des folosite sunt: - schemeleschemele logicelogice; - limbajul PseudocodPseudocod.
Variabila (nume, domeniul D, valoare, semnificaţie, …)
1414/27/27
SchemeleSchemele logicelogice : :
Utilizeaza:- blocurile pentru calcule; - sagetile pentru ordinea lor.
Start
Citeste a, b, c
Tipăreste Re,Im Tipăreste x1,x21
Stop
Re:=-b / 2a
Im:=-/2a
<0 NuDa
Nu
:=b2-4ac
Mesaj a=0
1
Da
x2:=-b-
2a
x1:=-b+
2a
a=0
1515/27/27
LimbajulLimbajul PseudocodPseudocod : :
LimbajulLimbajul PseudocodPseudocod are două tipuri de propoziţii (pentru calcule): • standard (care au o structură fixă şi este formată cu ajutorul unor cuvinte cheie), • nestandard (care descriu părţi ale algoritmului încă incomplet elaborate,
nefinisate, asupra cărora urmează să se revină)• comentarii (texte scrise între acolade utilizate pentru documentarea
algoritmului).Ordinea executiei este naturala.
Descrierea algoritmilor se poate realiza (structurat) utilizand doar următoarelestructuri:
– secvenţială (formată dintr-o succesiune de propziţii simple), – alternativă (permite executarea anumitor ramuri în funcţie de anumite condiţii)– repetitivă (prin care putem execută aceleaşi propoziţii de mai multe ori).
1616/27/27
StructuraStructura generalăgenerală a a unuiunui algoritmalgoritm descrisdescris îînn PseudocodPseudocod ::
Algoritmul Nume Este : { Antetul algoritmului }. . . { Corpul “ }
Sfarşit_Algoritm. { Sfarşitul “ }
Un algoritm (în general) se desfăşoară în trei etapeetape :
- citirea datelor de intrare (iniţializarea datelor),
- efectuarea de calcule (prelucrarea datelor),- tipărirea rezultatelor (extragerea datelor de ieşire).
PrelucrarePrelucrare
Date de intrare
Date de iesire
1717/27/27
OperatiiOperatii ((propozitiipropozitii):):
Citirea datelor Date Listă_variabile_de_intrare;Tipărirea rezultatelor Rezultate Listă_expresii_de_ieşire;Atribuirea de valori unei var. [Fie] Variabilă := Expresie;Structuri alternative:
- cu o ramură Dacă Condiţie AtunciSecvenţăSf_Dacă ;
- cu doua ramuri Dacă Condiţie AtunciSecvenţă1
AltfelSecvenţă2Sf_Dacă ;
- cu mai multe ramuri Selectează Expresie DintreListă_Valori1 : Secvenţă1;Listă_Valori2 : Secvenţă2;
. . .Listă_Valorin : Secvenţăn[ Altfel Secvenţăn+1 ]Sf_Selectează;
1818/27/27
StructurileStructurile repetitive:repetitive:
Cu numar cunoscut de pasi: Pentru Varc := Li , Lf [ , Pas ] Execută
SecvenţăSf_Pentru;
Cu test initial:Cât_Timp Condiţie Execută
SecvenţăSf_Cât_Timp;
Cu test final:Repetă
SecvenţăPână_Când Condiţie;
Secvenţă
Nu
Condiţie Da
Secvenţă
Nu Condiţie
Da
1919/27/27
ExempluExemplu:: calculeazăcalculează produsulprodusul a a douădouă polinoamepolinoame P P şşii Q , date Q , date prinprin vectvect. . coefcoef..
Algoritmul Produs Este : { R:=PQ }
Date m,(Pi , i=0,m), n,(Qj , j=0,n); { m=gradul lui P, n=gradul lui Q }
Pentru k:=0,m+n Execută { m+n=gradul lui R }Rk:=0
Sf_Pentru;
Pentru i:=0,m ExecutăPentru j:=0,n Execută
Ri+j:=Ri+j+Pi*Qj
Sf_Pentru;Sf_Pentru;
Rezultate (Rk, k=0,m+n)
Sf_Algoritm.
2020/27/27
ExempluExemplu:: determină primele n (n dat) numere prime
Algoritmul Prime Este : { Primele n numere Prime }Date n; { primele n numere prime p =2,3,5, ... }p:=2; i:=0;Cât_Timp i<n Execută { i reprezintă al câtelea număr prim a fost găsit }
d:=2; { p este prim ?( se divide cu 2,3, ... )}Cât_Timp (d<Sqrt(p)) şi (p Mod d > 0) Execută
d:=d+1 {se caută divizori d =2,3,... Rad(p)}Sf_Cât_Timp;Dacă d>Sqrt(p) Atunci { dacă am trecut cu d de Rad(p) atunci p este prim ! }
Rezultate p; i:=i+1Sf_Dacă;Dacă p=2 Atunci p:=p+1 { Se verifică doar pentru }
Altfel p:=p+2 { numerele impare de la 3,... }Sf_Dacă;
Sf_Cât_TimpSf_Algoritm.
2121/27/27
ExempluExemplu:: determină cel mai mare numar n de patru cifre pentru care esteîndeplinită condiţia
Oglindit (n) + Suma_Cifrelor(n) = n + 99 (Oglinditul lui 123 este 321).
Algoritmul Număr Este : { Cel mai mare număr n de patru cifre : }n:=9999; { Ogl (n) + Sc (n) = n + 99 }
Repetăn:=n1;Cât:=n; Sc:=0; Ogl:=0; { Primul Cât este n }Repetă
Uc :=Cât Mod 10; { Determin Ultima cifră a numărului }Sc :=Sc + Uc; { Adun Ultima cifră la Suma cifrelor }Ogl :=Ogl *10+ Uc; { Adaug Ultima cifră la Oglindit }Cât :=[Cât / 10] { Sterg Ultima cifră din număr (Cât Div 10)}
Până_Când Cât=0;Până_Când (Ogl+Sc=n+99) Sau (n=999);Dacă n>999 Atunci Rezultate n
Altfel Rezultate ‘Nu există’Sf_Dacă
Sf_Algoritm. 4104 + 9 = 4014 + 99
2222/27/27
SubalgoritmiSubalgoritmi: : rezolvărezolvă o o anumităanumită subproblemăsubproblemă
Apel: [Cheamă] Nume_Subalgoritm (Lista_parametri_actuali);
SubalgoritmSubalgoritmParametri de Intrare Parametri de iesire
Def.: Subalgoritmul Nume_Subalgoritm (Lista_parametri_formali) Este : {Antet}
. . . { Corp subalgoritm }
Sf_Subalgoritm. { sau Sf_Nume_Subalgoritm. }
ParametriParametri de de IntrareIntrare ExpresiiExpresiiParametriParametri de de iesireiesire VariabileVariabile
2323/27/27
ExempluExemplu:: pentru trei mulţimi date A, B şi C calculăm AB, AC şi BC
Algoritmul Reuniuni Este :Date A,B,C;Cheamă Reuniune (A,B,R1);Cheamă Reuniune (A,C,R2);Cheamă Reuniune (B,C,R3);Rezultate R1;Rezultate R2; Rezultate R3;
Sf_Algoritm.
Subalgoritmul Reuniune ( X,Y, R ) Este :
R:=X;
Pentru fiecare yY ExecutăDacă yyXX Atunci R:=R{y} Sf_Dacă
Sf_Pentru
Sf_Reuniune.
R:=XYX , Y R
Subalgoritmul Reuninune determină mulţimea R = X Y astfel :R := X (Y \ X), adică depune în reuniune mai întâi elementele din mulţimea
X, la care apoi mai adaugă acele elemente din Y care nu aparaparţţinin lui X.
2424/27/27
FunctiiFunctii: ~ : ~ SubalgoritmSubalgoritm + Val. + Val. functieifunctiei
Apelul unei funcţii:se face scriind într-o expresie numele funcţiei urmat de lista parametrilor actuali.
… Nume_Funcţie (Listă_parametri_actuali) … { expr.instr.}
Def.: Funcţia Nume_Funcţie (Listă_parametri_formali) Este : { Antetul funcţiei }
. . .Nume_FuncNume_Funcţţieie := := ExpresieExpresie;; { Corpul funcţiei }
. . .Sf_Funcţie. { sau Sf_Nume_funcţie.}
ParametriParametri de de IntrareIntrare ExpresiiExpresiiParametriParametri de de iesireiesire VariabileVariabile
2525/27/27
ExempleExemple:: Există & Apart
Funcţia Există ( b, A, n, p ) Este :p:=1;Cât_Timp (p<=n) şi (b<>ap) Execută p:=p+1 Sf_Cât_Timp;Există := (p<=n)
Sf_Există.
Funcţia Apart (b,A) Este :p:=1; {Card(A)=|A|}Cât_Timp (p<=Card(A)) şi (b<>A[p]) Execută p:=p+1Sf_Cât_Timp;Apart := (p<=Card(A))
Sf_Apart.
Funcţia Card (A) Este :Card := a0
Sf_Card.
Dacă yX Atunci R:=R{y} Sf_Dacă;
Dacă Not Apart (Apart (y,Xy,X)) Atunci R:=R{y} Sf_Dacă;
2626/27/27
ExempluExemplu:: determinădetermină maximulmaximul dintrdintr--un un şşirir X cu n X cu n componentecomponente ..Funcţia Max (X,k) Este :
Dacă k=1 Atunci Max:=x1 {Consistenţa}Altfel Dacă Max(X,k-1) < xk Atunci Max:= xk
Altfel Max:= Max(X,k-1)Sf_Dacă
Sf_DacăSf_Max.
ExempluExemplu:: decide decide dacădacă b b aparaparţţineine primelorprimelor k k elementeelemente din din şşirulirul AA ..
Funcţia Apart (b,A,k) Este :Apart := (k>0) şi ( Apart(b,A,k-1) Sau (b=ak) )
Sf_Apart.
Apelul:Apart(b,A,Card(A))
Apelul:Max(X,n)
2727/27/27
||347347____________||1616______________||2525______________
. . . C. . . C__11 / / 5.5.10.10.20201122
|_________|_________||12345671234567____|_________|_________
Se Se daudau n n vagoanevagoane pepe treitrei liniilinii de de manevramanevra, in , in ordineordine crescatoarecrescatoare pepe fiecarefiecarelinielinie. Sa se . Sa se depunadepuna toatetoate pepe o o singurasingura linielinie precizataprecizata, , mutandmutand catecate un un singursingurvagonvagon, , astfelastfel incatincat in in oriceorice moment moment pepe toatetoate liniileliniile vagoanelevagoanele sasa fie fie asezateasezatecrescatorcrescator!!
Super TemaTema::
TemaTema ~ ~ probleme elementare (de baza) pt. un sir (vector/tablou) X1, X2, …Xn::• Suma, Nr, Medie / Cond (propr.),• Min/Max – Poz.• Sortare (Ordonare),• Exista/Oricare Cond (propr.),