fişa disciplinei 
1. Date despre program
1.1 Instituţia de învăţământ superior	Universitatea Babeş-Bolyai Cluj-Napoca	
1.2 Facultatea	Facultatea de Matematică şi Informatică	
1.3 Departamentul	Informatică	
1.4 Domeniul de studii	Matematică	
1.5 Ciclul de studii	Licenţă	
1.6 Programul de studiu / Calificarea	Matematică	

2. Date despre disciplină
2.1 Denumirea disciplinei	Fundamentele Programării	
2.2 Titularul activităţilor de curs	Lect. Dr. Vasile Prejmerean	
2.3 Titularul activităţilor de seminar	Lect. Dr. Vasile Prejmerean	
2.4 Anul de studiu	1	2.5 Semestrul	1	2.6. Tipul de evaluare	C	2.7 Regimul disciplinei	Obligatorie	

3. Timpul total estimat (ore pe semestru al activităţilor didactice)
3.1 Număr de ore pe săptămână	6	Din care: 3.2 curs	2	3.3 seminar/laborator	2/2	
3.4 Total ore din planul de învăţământ	84	Din care: 3.5 curs	28	3.6 seminar/laborator	28/28	
Distribuţia fondului de timp:	ore	
Studiul după manual, suport de curs, bibliografie şi notiţe	14	
Documentare suplimentară în bibliotecă, pe platformele electronice de specialitate şi pe teren	7	
Pregătire seminarii/laboratoare, teme, referate, portofolii şi eseuri	21	
Tutoriat	4	
Examinări 	20	
Alte activităţi: ..................	-	
3.7 Total ore studiu individual	66	
3.8 Total ore pe semestru	150	
3.9 Numărul de credite	6	

4. Precondiţii (acolo unde este cazul)
4.1 de curriculum	- Noţiuni elementare de matematică din liceu	
4.2 de competenţe	- Capacitate de abstractizare, gândire logică şi algoritmică	

5. Condiţii (acolo unde este cazul)
5.1 De desfăşurare a cursului	•	videoproiector	
5.2  De desfăşurare a seminarului/laboratorului	•	lab.:  12 calculatoare (staţii de lucru)	

6. Competenţele specifice acumulate
Competenţe profesionale	•	Abilitatea de a inţelege, de a modela şi rezolva probleme reale. 
•	Abilitatea de a analiza, de a sintetiza şi de a comunica oral şi în scris.
•	Înţelegerea şi utilizarea conceptelor de bază din algoritmică şi programare
•	Capacitatea de a utiliza noţiunile fundamentale ale programării.
•	Abilitatea de a elabora un program pentru o problemă practică.	
Competenţe transversale	•	Abilitatea de a scrie o mini-documentaţie pentru o problemă dată.
•	Abilitatea de a scrie un algoritm şi un program, precum şi de a verifica corectitudinea acestora.
•	Insusirea de cunostinte de bază legate de algoritmică şi elaborarea programelor.	

7. Obiectivele disciplinei (reieşind din grila competenţelor acumulate)
7.1 Obiectivul general al disciplinei	•	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.	
7.2 Obiectivele specifice

	•	Intelegerea notiunii de algoritm si invatarea limbajului Pseudocod 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 si sisteme liniare, cautare, interclasare si sortare;
•	Formarea deprinderilor de concepere, executie, testare si punere la punct a programelor Pascal cu structurile de date simple;
•	Formarea unui stil de programare.	

8. Conţinuturi
8.1 Curs	Metode de predare	Observaţii	
1.  Algoritmi si descrierea lor
- Notiunea de algoritm
- Variabila, tip, specificare
- Limbajul Pseudocod, structura liniara, alternativa, repetitiva	Expunerea, conversaţia, demonstraţia didactică, modelarea, algoritmizarea, problematizarea.		
2. Subalgoritmi (Pseudocod) 
- Notiunea de subalgoritm
- Parametrii formali
- Definirea unui subalgoritm (functie si procedura)
- Apelul unui subalgoritm
- Importanta subalgoritmilor în programare	Descriere, explicatie, problematizarea, descoperirea, exemple.
		
3. Codificarea algoritmilor Pseudocod în Pascal
- Elemente de baza ale limbajului Pascal 
- Declaratii si Instructiuni
- Structura unui program Pascal
- Codificare	Expunerea, exemplificarea, studiul de caz.		
4.  Recursivitate 
- Notiunea de  Recursivitate
- Recursivitate directa si indirecta
- Exemple
    Implementarea structuri de date statice şi dinamice
- Tablou, şir de caractere, mulţime, înregistrare
- Liste, arbori	Expunerea, demonstraţia didactică, algoritmizarea, problematizarea, descoperirea.		
5. Faze in viata unui 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	Expunerea, conversaţia, demonstraţia didactică, problematizarea, descoperirea.		
6. Corectitudinea algoritmilor  
- 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	Expunerea, exemplificarea, demonstraţia didactică, problematizarea, descoperirea.		
7. Dezvoltarea corecta a algoritmilor din specificatii
- Algoritm abstract
- Ideea de rafinare
- Reguli de rafinare
- Exemple	Exemplificarea, studiul de caz.		
8. Metode generale de elaborare a algoritmilor 
- Programare modulara
- Programare structurata
- Teorema lui Bohm-Jacopini
- Importanta claritatii în programare
- 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	Expunerea, conversaţia, algoritmizarea, problematizarea, descoperirea,  exemplificarea.		
9.  Tipuri Abstracte de Date 
- Specificarea unui TAD
- Unit Pascal
- Implementarea unui TAD în Pascal
- Folosirea unui TAD în programare	Expunerea, conversaţia, modelarea, algoritmizarea, problematizarea, exemplificarea.		
10. Metoda Greedy 
- Prezentarea generala a metodei Greedy
- Algoritmul Greedy
- Exemple si contraexemple
- Euristica Greedy
    Metoda Divide et Impera 
- Prezentare generala
- Descrierea subalgoritmului
- Exemple	Expunerea, conversaţia, demonstraţia didactică, modelarea, algoritmizarea, problematizarea, descoperirea, exemplificarea, alte metode.		
11. Metoda Backtracking 
- Prezentarea generala a metodei Backtracking
- Algoritm (subalgoritm) Backtracking
- Extinderi ale metodei Backtracking
- Exemple	Expunerea, modelarea, algoritmizarea, problematizarea, descoperirea, exemplificarea.		
12. Metode euristice
- Strategii euristice, aproximarea solutiei
- Exemple
    Alte metode
- Metoda programarii dinamice
- Metoda Branch and Bound	Expunerea, conversaţia, demonstraţia didactică, modelarea, algoritmizarea, problematizarea, descoperirea, exemplificarea.		
13. Complexitatea algoritmilor 
- Definitia complexitatii
- Complexitatea ca timp de executie
- Complexitatea ca memorie suplimentara necesara
- Analiza empirica si analiza asimptotica
- Notatia asimptotica: o-mare, o-mic, omega-mare, omega-mic, theta
- Proprietati
- Ordine de marime particulare
- Compararea algoritmilor din punctul de vedere al eficientei
- Complexitatea structurala
	Expunerea, descrierea, demonstraţia didactică, explicaţia, studii de caz.		
14. Algoritmi de cautare si complexitatea lor
- Specificarea problemei de cautare
- Metode de cautare: parcurgere secventiala, cautare binara
- Complexitatea algoritmilor de cautare
   Algoritmi de sortare si complexitatea lor
- Specificarea problemei de sortare
- Metode de sortare
- Metoda  bulelor (BubbleSort)
- Sortare bazata pe selectarea minimului/maximului (SelectSort)
- Sortare prin inserare (InsertSort)
- Sortare rapida (QuickSort)
- Sortare prin interclasare (MergeSort)
- Complexitatea algoritmilor de sortare
	Expunerea, descrierea, demonstraţia didactică, explicaţia, studii de caz.		

Bibliografie
1. Frentiu, M., H.F. Pop, Fundamentals of Programming, Cluj University Press, 2006, 220 pagini
2. M.Frentiu si altii, Manualul incepatorului in Programarea Pascal, Ed. Microinformatica, Cluj-Napoca, 1995, 252 pagini, ISBN 973-9215-04-1
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. Kasa Z., Ismerkedes az informatikaval, Editura Dacia, 1983.	
8. Kasa, Z., Algoritmusok tervezese, Ed. Studium, Cluj, 1994.
9. Knuth, D., Tratat de programarea calculatoarelor, Ed. Tehnica (Algoritmi fundamentali;  Cautare si sortare)
10. Livovschi, L., H.Georgescu, Sinteza si analiza algoritmilor, Editura St. si Enciclopedica, Bucuresti, 1986.
11. Prejmerean V., Fundamentele programării – notiţe de curs, http://www.cs.ubbcluj.ro/~per/Fp.html
	
8.2 Seminar 	Metode de predare	Observaţii	
1.  Algoritmi si descrierea lor
- Algoritmi simplii (fără subprograme)
- Algoritmi de bază (elementari)
- Tablouri unidimensionale şi bidimensionale	Conversaţia, demonstraţia didactică, modelarea, algoritmizarea.		
2. Subalgoritmi (Pseudocod) 
- Descrieri de subalgoritmi usuali.
- Corelarea parametrilor (apel/definire).	Conversaţia, algoritmizarea, problematizarea, descoperirea.		
3. Codificarea algoritmilor elemenatri Pseudocod în Pascal
- Programe Pascal simple,
- Descriere şi apeluri de subprograme. 	Conversaţia, dezbaterea, algoritmizarea, descoperirea.		
4.  Programe şi subprograme Pascal  care utilizează
- Recursivitatea
- Structuri de date statice (tablou, şir de caractere, mulţime, înregistrare)
- Liste, arbori	Conversaţia, modelarea, 
descoperirea, algoritmizarea.		
5. Structuri de date dinamice
- Liste simple şi duble (stivă, coadă, …)
- Arbori binari (creare, traversare, …)	Conversaţia, modelarea, descoperirea, algoritmizarea.		
6. Testarea programelor (Metoda cutiei transparente)
    Corectitudinea algoritmilor  (partiala, terminare)	Conversaţia, modelarea, 
descoperirea.		
7. Dezvoltarea corecta a algoritmilor din specificatii
- Reguli de rafinare
- Exemple de dezvoltare corectă	Conversaţia, 
descoperirea, evaluarea.		
8. Programare modulara şi Programare structurata
    Metoda top-down si Rafinarea în pasi succesivi	Conversaţia, modelarea.		
9.  Tipuri Abstracte de Date 
- Specificarea unui TAD
- Implementarea unui TAD în Pascal şi utilizarea lui	Conversaţia, modelarea, problematizarea,
descoperirea, algoritmizarea.		
10. Metoda Greedy 
- Exemple si contraexemple
- Implementări
    Metoda Divide et Impera 
- Exemple şi implementări	Exemplificarea, conversaţia, modelarea, problematizarea,
descoperirea, algoritmizarea.		
11. Metoda Backtracking 
- Exemple şi implementări	Exemplificarea, conversaţia, modelarea, problematizarea,
algoritmizarea.		
12. Metode euristice
- Exemple şi implementări
    Alte metode
- Metoda programarii dinamice	Exemplificarea, conversaţia, modelarea, problematizarea,
descoperirea, algoritmizarea.		
13. Complexitatea algoritmilor de cautare 
- efectuarea calculelelor de complexitate pentru algoritmii uzuali	Dezbaterea, descoperirea.		
14. Complexitatea algoritmilor de sortare 
- efectuarea calculelelor de complexitate pentru algoritmi uzuali 
      Lucrare de control	Dezbaterea, descoperirea, evaluarea.		
Bibliografie
1.  M.Frenţiu, I.Lazăr, Bazele Programării: Proiectarea Algoritmilor, 2000, Ed. Univ. Petru Maior, Tg.Mureş 184 pagini   ISBN 973-8084-06-7
2. M.Frentiu,  Verificarea Corectitudinii Programelor, Ed.Univ.”Petru-Maior”, Tg.-Mureş,  2001, 116 pagini, ISBN 973-8084-32-6
3. 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.
4. M.Frentiu,  Verificarea şi Validarea Programelor, Ed. Presa Universitară clujană, 2007, 173 pagini, ISBN 978-973-610-684-7.-2.
5. Knuth, D.E., Tratat de programare a calculatoarelor. Algoritmi fundamentali. Ed.Tehnica, Bucuresti 1974 
6. Knuth, D.E., Tratat de programare a calculatoarelor. Sortare si cautare. Ed.Tehnica, Bucuresti 1976	
8.3  Laborator	Metode de predare	Observaţii	
1. Structura documentaţiei (lucrării/temei de laborator)
    Descrierea unui algoritm.	Explicaţia şi justificarea.		
2. Descrierea de subalgoritmi şi apelul acestora	Explicaţia şi justificarea.		
3. Realizarea unui program simplu în limbajul Pascal
	Dialogul, exemplificarea, dezbaterea, evaluarea.		
4. Scrierea de subprograme şi apelul lor dintr-un program. 
	Dialogul, exemplificarea, dezbaterea.		
5. Subprograme recursive apelate dintr-un program care foloseşte vectori şi matrice (tablouri uni/bi dimensionale).	Dialogul, exemplificarea, explicaţia.		
6. Programe care utilizează alte structuri de date statice
- Inregistrări, mulţimi, string-uri, …	Dialogul, exemplificarea, explicaţia, evaluarea.		
7. Programe care utilizează structuri de date dinamice
- Liste
- Arbori binari	Dialogul, exemplificarea, explicaţia.		
8. Testarea programelor: Metoda cutiei negre, Metoda cutiei transparente	Dialogul, exemplificarea, explicaţia.		
9. Demonstrarea corectitudii unui algoritm. 
- Partial corectitudine, terminare, (total) corectitudine;	Explicaţia justificarea, evaluarea.		
10. Scrierea de programe utilizând 
- Metoda top-down,
- Rafinarea în pasi succesivi	Exemplificarea, dialogul, dezbaterea.		
11.  Tipuri Abstracte de Date 
- Specificarea unui TAD
- Implementarea unui TAD în Pascal (Scrierea unui modul) 
- Utilizarea TAD-ului descris	Dialogul, exemplificarea, explicaţia, dezbaterea, evaluarea.		
12. Metoda Greedy 
- Program de rezolvare a unei probleme utilizând această metodă
     Metoda Divide et Impera 
- Program de rezolvare a unei probleme utilizând această metodă	Dialogul, exemplificarea, explicaţia.		
13. Metoda Backtracking 
- Program de rezolvare a unei probleme utilizând această metodă
      Metode euristice
- Program de rezolvare a unei probleme utilizând această tehnică	Dialogul, exemplificarea, explicaţia.		
14. Proba practică, evaluare finala a activităţii de laborator.	Evaluarea.		
Bibliografie	
1.  M.Frenţiu, I.Lazăr, Bazele Programării: Proiectarea Algoritmilor, 2000, Ed. Univ. Petru Maior, Tg.Mureş 184 pagini   ISBN 973-8084-06-7
2. M.Frentiu,  Verificarea Corectitudinii Programelor, Ed.Univ.”Petru-Maior”, Tg.-Mureş,  2001, 116 pagini, ISBN 973-8084-32-6
3. 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.
4. M.Frentiu,  H.F.Pop, Fundamentals of Programming, Ed. Presa Universitară clujană, 2006, 220 pagini, ISBN (10)973-610-453-2 şi (13)978-973-610-453-4.
5. M.Frentiu,  H.F.Pop, G.Serban, Programming Fundamentals, Ed. Presa Universitară clujană, 2007, 234 pagini, ISBN (10)973-610-494-X şi (13)978-973-610-494-7.
6. M.Frentiu,  Verificarea şi Validarea Programelor, Ed. Presa Universitară clujană, 2007, 173 pagini, ISBN 978-973-610-684-7.-2.	

9. Coroborarea conţinuturilor disciplinei cu aşteptările reprezentanţilor comunităţii epistemice, asociaţiilor profesionale şi angajatori reprezentativi din domeniul aferent programului
•	Cursuri similare există în toate facultăţile de informatică atât din tară cât şi din străinătate;
•	Fundamentele programării este un curs de bazele informaticii care vizează noţiunile de algoritmică şi de programare fundamentală.	

10. Evaluare
Tip activitate	10.1 Criterii de evaluare	10.2 metode de evaluare	10.3 Pondere din nota finală	
10.4 Curs	Aplicarea noţiunilor teoretice în realizarea programelor
Rezolvarea problemelor	Examen scris

Examen practic 	50%

15%	
10.5 Seminar
	/
	laborator	Scrierea de algoritmi si programe	Lucrare de control (sem.)	15%	
	Documentatie si
Programe realizate	Documentatia realizată Programe predate 	10%
10%	
10.6 Standard minim de performanţă	
•	 Nota finală se calculează conform celor cinci ponderi de mai sus, cu conditia ca toate notele să fie cel putin 5.	

Data completării		Semnătura titularului de curs		Semnătura titularului de seminar
25 Sept. 2012			Lect. Dr.  PREJMEREAN Vasile		Lect. Dr.  PREJMEREAN Vasile

Data avizării în departament			           Semnătura directorului de departament	
...........................................						…............................