Comentariu introductiv
Complexitatea aplicaţiilor de utilizare a calculatorului în diverse domenii de activitate (inclusiv in educatie), a determinat perfecţionarea, atât a sistemelor de operare şi limbajelor de programare, cât şi a tehnologiilor şi platformelor. Au fost concepute şi elaborate noi sisteme de operare, noi limbaje de programare, noi tehnologii. Dacă în anii ’70 inventarea şi utilizarea microprocesorului au însemnat o revoluţie în domeniul arhitecturii calculatoarelor, în anii ’90 a fost o adevărată revoluţie, atât în domeniul reţelelor de calculatoare, cât şi în domeniile limbajelor de programare (Java şi JavaScript) şi sistemelor de operare (Linux, Windows). Astfel, au apărut tehnologiile Web. Trebuie menţionate dezvoltarea şi evoluţia limbajului C++ care în anii ’80 a implementat şi dezvoltat modelul orientat spre obiecte (modelul programării obiectuale are rădăcini în limbajele SmallTalk, Lisp etc.) şi programarea orientată spre obiecte (OOP-Object Oriented Programming).
Definition. Programming Language: An artificial language used to write instructions that can be translated into machine language and then executed by a computer.
(Ref.: M. Vlada,
Concept_algoritmi-CNIV-2004)
Descriptori
Algoritmi, programare, proces de calcul, functii, proceduri, instructiuni, structuri de control, alocare de memorie, structuri de date.
|
Obiectivele disciplinei |
|
|
Obiectivele cursului |
Obiectivele activităţilor aplicative ( laborator, proiect) |
|
|
- Evolutia dezvoltarii informaticii: concepte si tehnici, implementare (software de baza), aplicatii software;
- Etapele rezolvarii problemelor cu ajutorul calculatorului;
- Software orientat spre domeniu, spre utilizator, spre programator;
- Algoritmi: concepere, elaborare, analiza si corectitudine;
2. Repezentarea algoritmilor si limbaje de programare
- Limbajul pseudo-cod: lexic, sintaxa, semantica; exemple ;
- Limbaje de programare: procedurala, functionala, declarativa, OOP, concurenta;
- Procesarea si interpretarea informatiilor;
3. Algoritmi fundamentali si Rezolvarea problemelor
- Rezolvarea unei probleme: Enunt, analiza si proiectarea solutiei (Metoda demonstrativa, metoda algoritmica), Algoritmul in pseudo-cod, Codul C++, Testare si executie;
- Algoritmi de tip Backtracking, exemple;
- Algoritmi de tip “Divide et impera”, exemple
- Algoritmi de tip “Geedy”, exemple
- Algoritmi privind grafuri orintate si neorintate, exemple
- Algoritmi privind arbori, exemple
- Algoritmi privind sortarea informatiilor, exemple
- Algoritmi privind geometria computationala
- Algoritmi raster (J. Bresenham) pentru trasarea segmentului de dreapta si cercului;
- Algoritmul de clipping Cohen-Sutherland (clipping-ul unui segment fata de o fereastra dreptunghiulara);
4. Fundamente de programare C++ si aplicatii software
- Tipuri de date, variabile si expresii;
- Input /output;
- Instructiuni de control al calculului;
- Definirea si utilizarea functiilor;
- Recursivitate;
- Tablouri, Tipuri definite si utilizator, fisiere;
- Pointeri si masive
- Directive de preprocesor
Laborator
2. Dezvoltarea de programe in C++: calcule numerice, modelari geometrice
3. Implementarea algoritmilor privind structuri de date, probleme cu grafuri si arbori
Ref.:
Algoritmi si Programare (tkdokid published this -11.08.2010): http://www.scribd.com/doc/41559851/algC
M. Vlada, Metoda Backtracking: http://www.scribd.com/doc/22277339/Met-Backtrackingkk : (Rusu Radu) rody_radu22 published this (11/08/2009)
1. R. Andonie, I. Garbacea,Fundamental algorithms. A C++ View (in romanian), Ed. Libris,Cluj-Napoca, 1995 (http://www.cwu.edu/~andonie/, http://vega.unitbv.ro/~andonie/)
2. Gr. Albeanu, Grafica pe calculator. Algoritmi fundamentali, Editura Universitatii Bucuresti, 2001
3. D.S. Malik, C++ Programming: Program Design including Data Structure (2nd Edn), 2003
4. M. Vlada, http://ebooks.unibuc.ro/informatica/eureka/index.htm , 2004
5. Bjarne Stroustrup, The C++ Programming Language (Special Edition), Addison Wesley Publishing Company Inc., 3rd Edition, 2000
6. Walter Savitch, Problem Solving with C++, 7th Edition, Addison Wesley Publishing Company, Inc., 2009
Ref.:
ALGORITM = LOGICA + CONTROL ( R. Kowalski 1979 )
PROGRAM = ALGORITM + STRUCTURI DE DATE ( N. Wirth 1976 )
SISTEM EXPERT = CUNOAŞTERE + METAINTERPRETARE (Sterling 1984 )
MODELARE = CUNOAŞTERE + REPREZENTARE
LIMBAJE = PROCESARE + INTERPRETARE
Catherine McGeoch is the Beitzel Professor of Technology and Society at Amherst College, Massachusetts
Ubiquity, Volume 2011, Number August (2011), Pages 1-14
Computer science is often divided into two camps, systems and theory, but of course the reality is more complicated and more interesting than that. One example is the area of "experimental algorithmics," also termed "empirical algorithmics." This fascinating discipline marries algorithm analysis, which is often done with mathematical proofs, with experimentation with real programs running on real machines.
Catherine McGeoch: In fact there are three main activities in algorithm research: analysis, which is about predicting performance; design, which is about finding new and better ways to solve problems; and models of computation, which is about understanding how design and analysis changes when the basic operations (defined by the platform) are modified. In all three areas, theoretical methods necessarily make simplifying assumptions—worst-case inputs, dominant operation costs, and the RAM. Experimental methods fill in the gaps between those simplifying assumptions and real experience by incorporating interesting subclasses of inputs, constant factors and secondary costs, and more realistic machine models. This fundamental gap between theory and practice has existed since the beginning of computing, and experiments have always been used as a bridge between the two. In recent times the gap has become an abyss, due to the increased complexity of systems and algorithms, so the bridge must be stronger and more sophisticated. Also the traffic on the bridge has become more bidirectional—we see experiments developed in the service of theory as well as of practice.
OXFORD UNIVERSITY
About the Course
This course aims to introduce the student to more advanced computer programming using the C++ language. As well as learning C++, the student will learn how problems that are initally described in very general terms can be analysed, outlined and finally transformed into well-organised C++ programs using structured programming techniques. The course also introduces students to programming in C++. The assessment items are designed to reward regular study throughout term and to provide timely feedback to students.
C++ programming fundamentals.
Synopsis (http://web2.comlab.ox.ac.uk/oucl/courses/topics03-04/pp/synopsis.html)
[1] Basic imperative programming constructs: assignments, conditionals and loops. Comparison of procedural and functional programming. Example: summing an array.
[2] Informal introduction to pre-conditions, post-conditions, and invariants for reasoning about the correctness of loops. Example: slow and fast exponentiation.
[3] Further examples of invariants. Example: printing integers in decimal.
[4] Summary of rules for invariants. Example: string matching.
[5] Proof of termination. REPEAT, LOOP and FOR statements. Example: printing matching lines.
[6] Introduction to procedures.
[7] Binary search.
[8] Quicksort. Example: a sort utility.
[9] Introduction to modules. Example: a phone book implemented with arrays.
[10] Pointers, record types and linked lists. Example: phone book as a linked list.
[11] Doubly-linked lists, dummy nodes. Example: priority queues.
[12-13] Dijkstra's algorithm.
[14-15] A larger programming example: designing a text editor. Representations of text buffers; implementing a 2-D view of the text, implementing display update; implementing editor commands.
[16] Summary and closing example.
References
D.S. Malik, C++ Programming: Program Design including Data Structure (2nd Edn), 2003
Bjarne Stroustrup, The C++ Programming Language (Special Edition), Addison Wesley Publishing Company Inc., 3rd Edition, 2000
Walter Savitch, Problem Solving with C++, 7th Edition, Addison Wesley Publishing Company, Inc., 2009.
Pagină actualizată la 12 August 2011.