Sunteți pe pagina 1din 53

Conspecte – examen final

1. Tipuri de date simple şi structurate (enumerare, caracteristici, exemple în limbaje procedurale)

SIMPLE
Nume Caracteristici Exemple in limbaje
procedurale
 Permite memorarea de valori întregi ( pozitive sau
negative )
int n ;
Integer (INT)  Se folosește atunci cand se lucrează cu numere
naturale cuprinse în intervalul [-32768; 32767]
 Pentru acest tip se rezerva 2 octeti
 Memorează numere reale
 Separatorul zecimal este punctul
 Tipul float se reprezinta pe 4 octeți ; numar real, in
float n ;
Float si Double virgula mobila, simpla precizie
double n ;
 Tipul double se reprezinta pe 8 octeți ; numar real, in
virgula mobila, dubla precizie

 Se rezerva un singur octet


 Se foloseste pentru a retine caractere din setul local de
char n='A';
Char caractere ( coduri ASCII )
char n ;
 Stochează un singur caracter
 Caracterele sunt delimitate prin apostrof
 Datele de acest tip pot avea valorile adevărat sau fals
Boolean bool n ;
(1 si 0)

STRUCTURATE
Nume Caracteristici Exemple in limbaje
procedurale
 Unidimensionale : vectorul tip nume[nr_elem] ;
 Bidimensionale : matricea int v[10] ;
Tablouri int a[5]={-2,4,8,1,9} ;
int a[]={-2,4,8,1,9}

 Tip de variabila care include o succesiune de maxim string sirul_meu = "Acesta


255 caractere este un string";
 Litere de la A la Z, cifre, simboluri si spatii string sirul_meu {"Acesta
String este un string"};
string sirul_meu ;

Pe langa acestea, pentru Pascal mai sunt urmatoarele tipuri de date structurate : înregistrare
(record), obiect (object), multime (set), fisier (file)

2. Structura de tablou

Tabloul – o serie de elemente de același tip, memorate în locații de memorie succesive, care pot fi referite individual
prin adăugarea unui index la un identificator unic.
Tablourile unidimensionale (vectorii)

Tablourile multidimensionale (matricele) pot fi descrise ca "vectori de vectori".

3. Liste (stive, cozi, algoritmi de manevra)


Lista definitie:
Listele sunt cele mai bune și cele mai simple exemple a unei structuri de date dinamice care folosește pointeri la
implementarea sa. În mod esențial, trebuie înțeles că listele funcționează ca un vector care se poate mări sau
micșora după nevoie, din orice punct al mulțimii sale de elemente.

Avantaje ale utilizării listelor:

 Elementele pot fi adăugate sau șterse din mijlocul listei

 Nu trebuie definită o mărime inițială, iar memoria se alocă pe rând, odată cu fiecare element adăugat

Clasificare

Liste simplu înlănțuite - Elementele au o singură legătură către următorul element introdus, iar ultimul element
pointează către NULL.

Liste dublu înlănțuite - Elementele au dublă legătură către precedentul și antecedentul, capul listei pointând
spre NULL și ultimul element de asemenea.

Liste circulare - Pot fi simplu sau dublu înlănțuite cu proprietatea că ultimul element pointează spre primul.
Operații cu liste:

 Adăugare la începutul listei

 Adăugare la sfârsitul listei


 Adăugarea înainte sau după un element dat
 Ștergerea capului de listă
 Ștergerea unui element oarecare din listă

Stive definitie:

O stivă reprezintă o listă cu structuri de date de tipul: Last


In-First-Out(LIFO).
Un exemplu comun ar fi un teanc de cărți: tot punem cărți
pe o masă, dar în momentul când vrem să le ridicăm
începem cu ultima, pusă deasupra teancului.

OPERATII CU STIVE

Definim structura astfel:

struct stack{
int s[size];
int top = -1;
} st;

Verificăm dacă stiva e plină sau goală

int st_full(){ //int st_empty{


if(st.top>=size - 1) //if(st.top==-1)
return 1;
else
return 0;
}

Adăugarea

void push(int item){


st.top++;
st.s[st.top]=item;
}
Ștergerea

int pop(){
int item;
if(st_empty()) //presupunem ca nu exista elemente
return -1; //cu valoarea -1
item = st.s[st.top];
st.top--;
return (item);
}

Observații

1.Când introducem elemente într-o stivă,trebuie să incrementăm top-ul și apoi să adăugam elementul.
2.Când ștergem un element,trebuie întâi să ștergem elementul și apoi să decrementăm top-ul.
3.O stivă poate fi implementată cu ajutorul unui vector sau cu liste înlănțuite.

Coadă definitie:

O coadă este o structură de date ce modelează un buffer de tip


First-In-First-Out (FIFO).Astfel, primul element introdus în
coadă va fi și primul care va fi scos din coadă.

OPERATII CU COZI

Definim structura astfel:

struct queue{
int queue[size];
int rear = -1;
int front = 0;
}Q;

IsEmpty - întoarce 0 dacă coada este goală;1 dacă are cel puțin
un element.

int Qempty(){
if(Q.front > Q.rear)
return 1;
return 0;
}
Enqueue / Adăugarea - adaugă un element (entitate) în coadă.Adăugarea se poate face doar la sfârșitul cozii.

void Qinsert(int item){


Q.rear++;
Q.queue[Q.rear] = item;
}

Dequeue/ștergere - șterge un element din coadă și îl returnează.Ștergerea se poate face doar la începutul cozii.

int Qdelete(){
int item;
if( Qempty() ) //in acest caz, alegem o valoare de return
return -1; // ce NU poate fi confundata cu un element
//presupunem ca NU exista niciun element cu valoarea -1
else {
item = Q.queue[Q.front];
Q.front ++;
return item;
}
}

Clasificare

Dequeue - (sau coadă cu dublu acces) este o structură de tip coadă în care însă accesul (introducere/extragere de
elemente) se poate realiza prin ambele capete. De cele mai multe ori sunt implementate folosind liste dublu
înlănțuite.

Dintr-un anume punct de vedere, se poate considera că atât stiva cât si coada clasică sunt specializări ale tipului
abstract dequeue întrucât ambele se pot implementa folosind dequeue (și restrângând operațiile ce se realizează
asupra sa).

Priority queue - Coada prioritară reprezintă un tip de coadă în care fiecare element are asociată o anume
prioritate.
În aceste condiții,operațiile de bază asupra cozii devin:
Enqueue - adaugă la coadă un element cu prioritatea specificată
Dequeue - extrage elementul cu cea mai mare prioritate
Front - examinează elementul cu cea mai mare prioritate fără a-l extrage din coadă.

Algoritmi de manevra:
Sortarea prin selectie
Sortarea prin insertie
Heapsortma
Turnurile din Hanoi

5. Parcurgerea grafurilor in adâncime și lățime

Se numește graf neorientat o pereche ordonată de mulțimi G=(X,U), unde:

 X este o mulțime finită și nevidă de elemente numite vârfuri sau noduri;


 U este o mulțime finită de submulțimi cu două elemente din X, numite muchii.

Parcurgerea unui graf – examinarea tuturor varfurilor grafului, cu scopul prelucrarii informatiilor acestora.

Parcurgerea in adancime (DFS – Depth First Search)

Parcurgerea incepe cu varful initial. Se viziteaza apoi primul vecin nevizitat al varfului. In continuare se viziteaza primul
vecin nevizitat al primului vecin al varfului și tot așa pana la final. *In situatia in care varful la care am ajuns nu mai are
vecini nevizitati, revenim la varful precedent.

Ex: Din nodul 1 – 1, 2, 3, 5, 4, 6, 7, 8, 9

Parcurgerea in latime (BFS – Breadth First Search)

Parcurgerea incepe cu varful initial. Se viziteaza in ordine toti vecinii nevizitati ai varfului. Apoi se vizitează în ordine toți
vecinii nevizitați ai vecinilor vârfului și tot așa pana la final.

Ex: Din nodul 1 – 1, 2, 4, 3, 5, 6, 7, 8, 9

6. Parcurgerea arborilor binari (inordine, preordine, postordine)


Definiție
Se numește arbore binar un arbore cu rădăcină în care fiecare nod are cel mult doi
descendenți direcți: descendentul stâng și descendentul drept.

În arborele alăturat:
-nodul 1 este rădăcina;
-rădăcina are doi descendenți direcți (fii): 2 este descendent stâng a lui 1, iar 3 este descendent drept;
-nodul 2 are un singur descendent, pe 4. Acest este descendent stâng al lui 2;
-similar, 7 este descendent drept al lui 4;
-nodurile 5, 6 și 7 sunt noduri terminale (frunze).
O altă definiție, recursivă, a arborelui binar este următoarea: Un arbore binar este o mulțime finită de noduri,
astfel:
- există un nod special, numit rădăcina arborelui;
- celelalte noduri sunt grupate în două submulțimi disjuncte A1 și
A2, fiecare dintre ele fiind la rândul lor arbori binari. Arborii A1 și
A2 reprezintă subarborele stâng, respectiv subarborele drept, al
rădăcinii.

Proprietății ale arborilor binari

1. Fiecare nivel i=0,1,2,... dintr-un arbore binar conține cel mult 2i noduri.
2. Un arbore binar de înălțime h conține cel mult 2h+1-1 noduri. Demonstrația se bazează pe afirmația anterioară.
3. Într-un arbore cu n noduri și înâlțime h avem relația h≥log2(n+1)−1.
4. Dacă într-un arbore binar numărul nodurilor terminale este a, iar c este numărul nodurilor care au exact 2 fii,
atunci a = c + 1.

Tipuri speciale de arbori binari

Arbore binar strict

Definiție: Se numește arbore binar strict un arbore binar în care fiecare nod,
cu excepția celor terminale, are exact doi descendenți.

Proprietăți:

Un arbore binar strict cu k noduri terminale are n=2⋅k–1 noduri.

Un arbore binar strict are număr impar de noduri.

Arbore binar plin

Definiție: Se numește arbore binar plin un arbore binar în care fiecare


nivel k∈{0,1,2,⋯,h}, unde h este înălțimea arborelui, conține 2k
noduri.
Proprietăți:

1. Arborele binar plin este un caz particular de arbore binar strict, în care toate nodurile terminale sunt situate pe
același nivel.
2. Un arbore binar plin cu k noduri terminale are n=2⋅k–1 noduri.
3. Un arbore binar plin cu înălțimea h are 2h−1 noduri.

Arbore binar complet

Definiție: Se numește arbore binar complet un arbore binar în care fiecare


k∈{0,1,2,⋯,h–1}, unde h este înălțimea arborelui, conține 2k
nivel
noduri, iar nivelul k conține eventual mai puțin de 2h noduri, acestea fiin
grupate de regulă în partea stângă.

Observație: Arborele binar plin este și arbore binar complet.

Parcurgerea arborilor binari


Pentru a prelucra un arbore este necesar ca nodurile sale să fie vizitate. La fel ca în cazul grafurilor (ceea ce și sunt de
fapt arborii binari), ei pot fi parcurși în lățime sau în adâncime, a doua metodă fiind de regulă folosită.

Parcurgerea începe din rădăcină.

În funcție de ordinea în care se vizitează nodurile avem următoarele parcurgeri:

1. parcurgerea în inordine – SRD – se parcurge mai întâi subarborele stâng (S), apoi rădăcina (R), apoi subarborele
drept (D);
2. parcurgerea în preordine – RSD – se parcurge mai întâi rădăcina (R), apoi subarborele stâng (S), apoi
subarborele drept (D);
3. parcurgerea în postordine – SDR – se parcurge mai întâi subarborele stâng (S), apoi subarborele drept (D), apoi
rădăcina (R).

Pentru arborele de mai sus, ordinea de parcurgere este:

 Inordine – SRD: 4 7 2 1 5 3 6

 Preordine: RSD 1 2 4 7 3 5 6

 Postordine: SDR 7 4 2 5 6 3 1
7. Problema căutării. Căutare secvenţială, căutare binară

Cautarea secventiala se realizeaza prin parcurgerea


unui vector, element cu element si testarea proprietatii
cautate pentru fiecare element in parte. Aceasta cautare se
poate efectua atat intr-un vector sortat, cat si in unul
nesortat. Algoritmul verifică secvențial elementele
colecției, oprindu-se atunci când găsește unul care îndeplinește
criteriile de căutare. Neputând face uz de vreo sortare între
elemente, algoritmul poate concluziona cu certitudine
că setul nu conține niciun element corespunzător numai după
ce le-a verificat pe toate.

Căutarea binară se poate face într-un vector numai dacă


elementele acestuia sunt în ordine (de obicei crescătoare)
după un anumit criteriu (de obicei criteriul este chiar relația de
ordine naturală între numere, cuvinte, etc), vorbind astfel despre un
vector ordonat. Căutarea binară presupune împărțirea vectorului în
secvențe din ce în ce mai mici, înjumătățindu-le și continuând
cu jumătatea în care se poate afla valoarea dorită (conform
ordinii elementelor din vector).

8. Structuri fundamentale și derivate în programarea procedurală

Programarea procedurala – paradigma de programare ce imparte problema in mai multe bucati (proceduri).
1. Structuri fundamentale
a. Structura Secventiala - Instructiunea
b. Structura decizionala - If
c. Repetitia cu test initial - While

2. Structuri derivate
a. Decizia generalizata - Switch
b. Repetitia cu test final - Do While
c. Repetitia cu contor (nr. cunoscut de pasi) – For
9. Subprograme (definire, tipuri de transfer al parametrilor, apelare, variabile locale și globale)
Definiție:
Un subprogram (funcţie) reprezintă un ansamblu de instrucţiuni (de declarare, executabile) scrise în vederea executării
unei anumite prelucrări, ansamblu identificat printr-un nume şi implementat separat (în exteriorul oricărei alte funcţii).

Subprogramele sunt unităţi de program care:

- au un algoritm propriu
- pot fi proiectate independent
- pot fi scrise independent
- pot fi compilate independent
- nu se pot executa independent ci numai în cadrul unui program (apel)
Un program scris în limbajul C/C++ este un ansamblu de funcţii, fiecare dintre acestea efectuând o activitate bine
definită. Doar una dintre aceste funcţii este rădăcină sau funcţie principală - adică nu poate lipsi şi executarea
programului începe automat cu ea. Aceasta se numeşte main.

Avantajele utilizării subprogramelor:


― elaborarea algoritmilor prin descompunerea problemei ce trebuie a fi rezolvată în mai multe probleme mai
simple în acest caz vom rezolva probleme mai simple
― modularizarea problemei (descompunerea in subprobleme)
― reutilizarea codului - subprogramul odată scris poate fi utilizat şi în alte programe
― reducerea numărului de erori care apar scrierea programului
― depistarea şi corectarea cu uşurinţă a erorilor
― realizarea unor programe uşor de urmărit.
Clasificarea subprogramelor
― subprograme standard (subprograme de sistem) – utilizarea lor presupune includerea fişierului ce conţine
prototipul dorit (Ex. #include<cmath> şi apelarea subprogramului funcţiei)
― subprograme definite de utilizator – sunt srise de programator pentru rezolvarea unor cerinţe specifice;
utilizarea lor presupune precizarea prototipului, definirea şi apelul
― subprograme apelate ca instrucţiuni procedurale – funcţii void; returnează (sau nu) o valoare prin intermediul
parametrilor; apelul se face prin nume şi parametri (Ex. clrscr(); gotoxz(); etc.)
― subprograme apelate ca operanzi (funcţii cu tip) – returnează un rezultat chiar prin numele său şi eventual alte
rezultate prin parametri; apelul se face în interiorul unei expresii (Ex. cout<<sqrt(16), x=pow(3,2) etc.)

Apelul subprogramelor

― O funcţie poate fi apelată printr-o instrucţiune de apel, de forma:


nume_funcţie (lista_parametrilor_efectivi);

― Parametrii efectivi trebuie să corespundă cu cei formali ca ordine şi tip.


― Dacă subprogramul este definit de utilizator, el trebuie declarat prin prototip sau prin definirea subprogramului
înainte de blocul apelant.
― Apelul este modul prin care subprogramul e pus în execuţie. Apelul poate fi făcut ori de câte ori este nevoie.
― Apelul poate fi făcut din funcţia rădăcină main(), dintr-o altă funcţie sau din ea însăşi prin autoapelare
(recursivitate)
― Dacă subprogramul este standard (de sistem), trebuie inclus fişierul ce conţine subprogramul utilizat. Pentru a
utiliza funcţia radical sqrt(), de exemplu vom include directiva:
#include <cmath>

Variabile locale
 Sunt declarate în corpul funcţiilor
 Variabilele declarate în coprul funcţiei main() sunt locale
 Atributele variabilelor locale sunt:
1. Clasa de memorare a variabilelor locale este, implicit, segmentul de stivă.

Există posibilitatea ca acestea să fie alocate în registrele microprocesorului, caz în care


declaraţia lor trebuie precedată de cuvântul cheie register.

Variabilele locale nu sunt iniţializate implicit cu 0. Dacă nu sunt iniţializate explicit de


programator, ele reţin o valoare oarecare, numită valoare reziduală.

2. Durata de viaţă a variabilelor locale este locală. Trăiesc atâta timp cât durează
executarea funcţiei sau blocului (bloc înseamnă între două acolade) în care au fost
definite.

3. Vizibilitatea – Vizibilitatea variabilelor locale este la nivelul blocului în care au fost


declarate.
În cazul în care, într-un anumit bloc sunt vizibile mai multe variabile, toate cu acelaşi
nume, dar au domenii de vizibilitate diferite, se accesează variabila cu vizibilitatea cea
mai mică.

Dacă se declară o variabilă locală în ciclul for, ea este vizibilă doar în ciclul for.

Variabile globale:

 Se declară în afara corpului oricărei funcţii.


 Pot fi utilizate de toate funcţiile care urmează în textul sursă declaraţiei variabilei respective.
 La declarare, variabilele globale sunt iniţializate implicit cu 0.
 Atributele variabilelor globale sunt:
1. Clasa de memorare – segmentul de date.

2. Durata de viaţă a variabilelor globale este statică. Ele au spaţiul de memorie rezervat
în tot timpul execuţiei programului.

3. Vizibilitatea – În cazul în care declaraţiile acestora sunt înaintea tuturor funcţiilor, ele
sunt vizibile la nivelul întregului program (fişier). Dacă anumite funcţii se află plasate
înaintea declaraţiilor acestor variabile, atunci ele sunt vizibile doar pentru funcţiile care
sunt plasate după aceste declaraţii.
10. Recursivitate

Recursivitatea reprezintă proprietatea unor noțiuni de a se defini prin ele însele. O funcție trebuie definită iar apoi
se poate apela. Procesul recursiv este procesul care, în timpul execuţiei, generează apariţia unor procese identice, aflate în
legătură directă cu procesul ce le generează. Un proces poate fi descris printr-un subprogram
Recursivitatea constă în faptul că în definiția unei funcție apare apelul ei însăși. Acest apel, care apare în însăși
definiția funcției, se numește autoapel. Primul apel, făcut în altă funcție, se numește apel principal.
Functionalitatea recursivitatii : Pentru fiecare apel al unei funcții se adaugă pe stivă o zonă de memorie în care se
memorează variabilele locale și parametrii pentru apelul curent. Această zonă a stivei va exista până la finalul apelului,
după care se va elibera. Dacă din apelul curent se face un alt apel, se adaugă pe stivă o nouă zonă de memorie, iar
conținutul zonei anterioare este inaccesibil până la finalul acelui apel. Aceste operații se fac la fel și dacă al doilea apel
este un autoapel al unei funcții recursive.
Tipuri de recursivitate :
 recursivitate directă : în definiția funcției F apare apelul funcției F
 recursivitate indirectă : în definiția funcției F apare apelul funcției G, iar în definiția funcției G apare
apelul lui F.

11. Noțiunile de bază ale programării obiectuale: clasă, metodă

OOP – paradigma de programare ce foloseste concepte abstracte (clase si obiecte) pentru a crea modele bazate pe
elemente din lumea reala.

Clasa – sablon prin intermediul caruia se pot crea obiecte. Aceasta contine atribute si metode.

Metoda – funcţie care aparţine unei clase. Este un alt termen pentru comportamentul unei clase.

12 Proprietatile claselor si ale metodelor.


Clase
O clasă descrie unul sau mai multe obiecte care pot fi precizate printr-un set uniform de date şi cod
(funcţionalitate);
- Orice obiect are memoria sa proprie unde se păstrează valorile tuturor datelor sale;
- Orice obiect are memoria sa proprie unde se păstrează valorile tuturor datelor sale;
- Orice obiect are un tip; un obiect este o instanţă a unei clase.
Definiţia unei clase presupune:
a) combinarea datelor pe care clasa le contine cu operaţiile (codul) care prelucreaza aceste date;
b) ascunderea informaţiei.
Clase:
O clasă încapsulează date, metode si alti membri care acţionează asupra acelor date.
Sintatic, o clasă se declară astfel:
class identificator
{
corpul clasei;
}
Inde identificator reprezinta numele clasei, iar corpul clasei contine datele si codul dininteriorul clasei.
Metode
Metodele sunt subrutine care prelucrează datele definite în cadrul clasei și pot oferi accesul la acele date.
De regulă interacțiunea dintre o clasa și celelalte entități dintr-un program se face prin intermediul metodelor
clasei.
Forma generala a unei metode este:
acces tip-rez Nume(lista parametri)
{
//corpul metodei
}
Unde:
acces=modificator de acces care stabileste care dintre celelalte parti ale programului pot apela metoda (este
optonal). Daca lipseste, metoda este privata clasei in care a fost declarata. (Modificatorul de acces poate fi:
public, protected, private, internal);
tip-rez= tipul rezultatului pe care metoda il intoarce (Ex: void, int, double...);
Nume=numele metodei, diferit de cuvintele cheie;
lista parametri =secventa de perechi separate prin virgula, in care primul element este un tip, iar al doilea un
identificator.
Observatii: Exista doua moduri de a reveni dintr-o metoda
- intalnirea acoladei care marcheaza sfarsitul metodei (daca este de tip void);
- executia unei instructiuni return.
Daca metoda returneaza o valoare obtinuta in urma unui calcul sau ca reusita sau
esec a unei operatii atunci se utilizeaza urmatoarea instructiune: return val;
Metode.Utilizarea parametrilor
Parametru efectiv (argument)= valoare transmisa unei metode cand aceasta este invocata.
Parametru formal = variabila in corpul metodei care primeste valoarea parametrului efectiv.
Observatii:
- parametrii formali se declara in interiorul parantezelor, dupa numele metodei;
- parametrii formali au domeniul de valabilitate corpul metodei;
- daca sunt folositi mai multi parametrii atunci fiecare isi specifica tipul. Acesta din urma poate fi diferit
de tipul celorlalti.

13. Structuri de control în programarea vizuală


- Conceptul de structuri de control in programarea vizuala, are legatura cu organizarea componentelor
dialog şi aplicaţie şi mecanismele care generează secvenţierea logică şi comunicarea internă a evenimentelor din
părţile dialog şi aplicaţie
- Instrucțiuni condiționale (if, case) : O instrucțiune condițională selectează pentru execuție o singură
instrucțiune ( sau nici o instrucțiune ) din instrucțiunile sale componente.
- Instrucțiunea IF : If <expresie logică> Then <instrucțiune1>
- Dacă rezultatul evaluării expresiei logice este TRUE se execută instrucțiune1. În caz contrar se trece la
următoarea instrucțiune din program.

- Instrucțiunea Case : Instrucțiunea servește pentru alegerea și execuția unei singure instrucțiuni
dintre mai multe instrucțiuni componente în funcție de valoarea unei expresii scalare de tip ordinal,
numită expresie selector.
-
- Instrucțiunea For : for v:= < expresie1> to < expresie2 > do < instrucțiune simplă sau compusă>
- Când se intră într-o instrucțiune for se evaluează o singură dat expresiile 1 și 2 prin care se determină
valorile inițială și finală a variabilei ciclului. instrucțiunea ciclului se execută o dată pentru fiecare
valoare a variabilei de control.
-
- Instrucțiunea Repeat : repeat <succesiune de instrucțiuni> until < expresie logică>
Succesiunea de instrucțiuni între cuvintele rezervate, repeat și until, se execută în mod repetat până
când expresia logică întoarce rezultatul true. Succesiunea de instrucțiuni este executată cel puțin o dată
deoarece expresia logică este evaluată după execuția succesiunii de instrucțiuni.
-
- Instrucțiunea While : while < expresie logică> do < instrucțiune simplă sau compusă a ciclului>

- Expresia logică între cuvintele rezervate while și do este evaluată înainte ca instrucțiunea ciclului să fie
executată. Instrucțiunea ciclului este executată repetat cât timp expresia logică dă rezultatul true; dacă
expresia logică dă false la început, instrucțiunea ciclului nu se execută nici o dată.
14. Noțiunile de control, proprietate și eveniment în programarea vizuală

Programarea vizuala – un mod de proiectare a unui program prin operare directă asupra unui set de elemente grafice.
Acest lucru are ca efect scrierea automată a unor secvenţe de program. (Fig de mai jos – Visual Basic)

Controalele – pilonii care ajuta la crearea aplicatiei. Acestea sunt obiecte ce pot fi incluse in Form, din Toolbox.

Proprietatea – caracteristică deținută de un obiect vizual. Proprietatile pot fi setate in timpul proiectarii (utilizand
fereastra Properties) sau in timpul executiei.

Evenimentul – un semnal care informeaza aplicatia ca a avut loc ceva important. Ex: atunci cand user-ul face click pe un
control, form-ul poate genera un Click-event si ulterior poate apela o procedura care sa sa se ocupe de acel eveniment.

15. Butoane de comanda, butoane de optiune si alte controale de programare vizuala


Programarea pur vizuală trebuie privită ca un mod de proiectare a unui program prin operare directă asupra unui
set de elemente grafice (de aici vine denumirea de programare vizuală)
Interfaţa Grafică a Utilizatorului (engl. Graphical User Interface, GUI) în tehnică de calcul - un sistem de
mijloace de interacţionare a utilizatorului cu calculator, care se bazează pe reprezentarea a tuturor obiectelor şi a
funcţiilor disponibile utilizatorului, în formă de componente grafice pe ecran (ferestre, iconiţe (pictograme),
meniuri, butoane, liste etc.). Totodată, spre deosebire de interfaţă de tip „Şirul de comandă”, utilizatorul are
acces arbitrar (prin intermediul tastaturii sau mouse-lui) la toate obiectele vizibile pe ecran.
Elemente ale interfeţei grafice principale sunt:
Cursor
Fereastră
Meniu
Pictogramă sau iconiţă
Bara de instrumente, sau bara de unelte
Bară de derulare sau bară de scrolling
Bara de stare
Elemente de control (engl. controls sau widgets) - elemente ale interfeţei grafice a utilizatorului care reflectă
informaţii sistematizate cu posibilitate de a fi modificate de către utilizator. Cele mai importante elemente de
control sunt: etichete (labels), butoane de comandă (buttons), radio-butoane sau butoane de opţiune (radio
buttons), check-box sau casete de validare (check box), liste (list box), liste derulante (combo
box), zone de text (casete de editare) (text box), spinnere (spinners), şi altele.
Button - Acționat va realiza o acțiune, un eveniment descries printr-o secvență de instrucțiuni în codul sursă.

16. Casete de text şi casete de validare. Vectori de controale în programarea vizuală

Casetele de text (TextBox-urile) este un element de control al unei interfețe grafice cu utilizatorul , care ar trebui
să permită utilizatorului să introducă informații text pentru a fi utilizate de un program. O casetă de text tipică este un
dreptunghi de orice dimensiune, eventual cu un chenar care separă caseta de text de restul interfeței. Acestea afișează de
obicei un cursor de text, indicând regiunea curentă a textului care este editat. Sunt flosite de utilizatori pentru a vizualiza,
edita, introduce valori.
O casetă de selectare ( casetă de validare , casetă de bifare) este un widget grafic care permite utilizatorului să facă o
alegere binară, adică o alegere între una dintre două opțiuni posibile care se exclud reciproc. De exemplu, utilizatorul
poate fi nevoit să răspundă „da” (bifat) sau „nu” (nebifat) la o întrebare simplă da/nu. Casetele de selectare sunt afișate ca
☐ când sunt debifate sau ☑ sau ☒ (în funcție de interfața grafică cu utilizatorul) când sunt bifate. O legendă care descrie
semnificația casetei de selectare este afișată în mod normal lângă caseta de selectare. Inversarea stării unei casete de
selectare se face făcând clic cu mouse-ul pe casetă sau pe legendă sau prin utilizarea unei comenzi rapide de la tastatură ,
cum ar fi bara de spațiu .
Adesea, sunt prezentate o serie de casete de selectare, fiecare cu o alegere binară între două opțiuni. Apoi utilizatorul
poate selecta mai multe dintre opțiuni.
Casetele de selectare pot fi dezactivate (indicate cu „ gris ”) pentru a informa utilizatorul despre existența lor și
despre posibila utilizare, în ciuda indisponibilității momentane.

17. Liste simple și liste combinate în programarea vizuală

List Box – afiseaza o lista de elemente. Utilizatorul poate face clic și selecta elementele din listă. Elementele pot fi
adăugate/eliminate în timpul proiectării sau în timpul executării.

Combo Box List – lista de elemente de tip drop-down.


18. Evenimente si tratarea exceptiilor in programarea vizuala
Evenimentele cele mai des utilizate, ar fi:
Load apare când formularul este pentru prima dată încărcat în memorie.
FormClosed apare când formularul este închis.
FormClosing apare când formularul se va închide ca rezultat al acţiunii utilizatorului asupra butonului Close
(Dacă se setează CancelEventArgs.Cancel = True atunci se va opri închiderea formularului).
Activated apare pentru formularul activ.
Deactivate apare atunci când utilizatorul va da click pe alt form-ul aplicației.
În tabelul de mai jos sunt prezentate evenimentele predefinite ce se pot aplica obiectelor unei formei.
19. Crearea şi utilizarea hiperlegăturilor HTML
Limbajul HTML utiliteaza hiperlegaturile pentru a realiza o conexiune cu un alt document de pe Web. Pentru a
putea crea o hiperlegătură trebuie să avem în directorul site-ului Web cel puţin două pagini sau putem realiza
hiperlegături la adrese Web.
Exista trei tipuri de legaturi :
- interne : legaturi in interiorul unui document HTML (pagina Web)
- locale : legaturi la alte pagini HTML de pe acelasi server Web
- externe : legaturi la pagini HTML aflate pe alte servere Web
Limbajul HTML utilizeaza marcajul ancora <A> (anchor=ancora) pentru a crea o legatura spre un alt
document.Un marcaj ancora poat tinti (indica) orice resursa de pe Web:un document HTML ,o imagine (fisier
grafic) ,fisier sunet,film,etc.
Sintaxa: <A HREF="URL"> Text ce va fi afisat </A> unde <A> este utilizat pentru a crea ancora si
atributul "HREF" stabileste adresa documentului de care se leaga ancora.
Hyperlinkurile ne permit să legăm documente la alte documente sau resurse, să legăm către anumite părți ale
documentelor sau să facem aplicații disponibile la o adresă web. Aproape orice conținut web poate fi convertit într-un
link, astfel încât, atunci când este făcut clic sau activat în alt mod, browserul web să ajungă la o altă adresă web ( URL ).
O legătură de bază este creată prin împachetarea textului sau a altui conținut în interiorul unui <a>element și folosind
href atributul, cunoscut și sub numele de referință hipertext , sau țintă , care conține adresa web.
Un hyperlink poate fi o bucată de text, o imagine, o pictogramă sau un grafic care, atunci când dați clic pe el,
indică și vă navighează către o altă pagină web sau un alt document. De asemenea, poate indica o anumită secțiune sau un
element din aceeași pagină web sau document.

20. Formulare HTML

Formularele HTML – folosite pentru a colecta informațiile de tip user-input. User-inputul este trimis in general către un
server pentru procesare.

21. Tipuri de formatare CSS – creare si apelare, exemple


CSS (Cascading Style Sheets) sau foi de stil în cascadă, reprezintă un mecanism simplu de a adăuga elemente
de stil (tipuri de caractere, culori, aliniere, spațiere etc.) unui document web.
Formatarea fundalului (background-ului)
Proprietățile utilizate în CSS pentru a defini fundalul unui element sunt:
Formatarea textului in CSS
Proprietățile de formatare a textului CSS sunt utilizate pentru a proiecta textul, stilul textului, descrie câteva stiluri de
formatare etc. Proprietățile vă oferă reprezentarea vizuală a caracterelor, spațiilor, cuvintelor, alineatelor și multe altele.

Culoarea textului

Este stabilită cu proprietatea color. Culoarea poate fi specificată prin:

 nume - un nume de culoare, de exemplu "red";


 RGB - o valoare RGB, de exemplu "rgb(255,0,0)";
 Hex - o valoare hexazecimală, de exemplu "#ff0000".

Toate proprietățile CSS pentru formatarea textului

22. Exemple de utilizare a funcţiilor Javascript


O functie poate contine mai multe instructiuni si comenzi care ulterior pot fi utilizate usor si de mai multe ori prin
apelarea functiei care le contine. Daca un program necesita multe linii de cod, folosind functiile putem imparti codul in
parti mai mici pe care le putem utiliza separat acolo unde este nevoie.
O funcție JavaScript este un bloc de cod conceput pentru a efectua o anumită sarcină.

SINTAXA :

Functia de invocare : Codul din


interiorul funcția va executa atunci când "something" invocă (calls) funcției

Funcția de retur : Când JavaScript ajunge la o declarație de întoarcere,


funcția va opri de executare. Fuctia calculeaza adesea o valoare returnată.

Funcții folosite ca variabile : În JavaScript, puteți utiliza


funcțiile în același mod în care utilizați variabile.

23. Definiția clasică a probabilității

Probabilitatea realizării unui eveniment este raportul dintre numărul de cazuri favorabile și numărul de cazuri posibile.

24. Scheme probabilistice clasice


Schemele clasice de probabilitate sunt modele matematice care ne permit calculul probabiliății de realizare a
unui eveniment în cazul unor distribuții anume.
25. Conceptul de distribuţie
Acest concept de distributie ma duce cu gandul la problemele actuale ale calculului distribuit. Calculul
distribuit cunoaste în zilele noastre o dezvoltare nemaiîntâlnită: reţelele de calculatoare sunt o prezenţă
obisnuită în companii, în instituţii sau la domiciliu. Suntem posesori de telefoane inteligente, sau de alte
dispozitive electronice (smart TV, router, GPS pentru autovehicul, etc.) care ne fac viaţa mai confortabilă,
preluându-ne problemele si rezolvându-le.
Modelul distribuit nu este nou: reţeaua de cale ferată, de exemplu, manifestă concurenţă (mai multe trenuri
se află pe acelasi tronson), latenţă (trenurile întârzie), toleranţă la erori (un tren întârziat nu are impact major
asupra celorlalte), partajarea datelor (evenimentele se anunţă în reţea).
Conceptul de distribuite mai poate face referire si la distributiile de Linux, care este un sistem de operare
construit din nucleul Linux și o serie de pachete asortate, precum Sistemul de Ferestre X și software din
proiectul GNU.

26. Generarea numerelor aleatoare

Principalele metode de generare a numerelor aleatoare sunt:

Metodele manuale – folosesc diferite dispozitive ca: zaruri, urne cu bilete, rulete etc.

Metodele fizice – se bazează pe analogii dintre procesele fizice întâmplătoare (procese radioactive, procese electronice).

Metodele de memorizare – folosesc de regulă memoria internă sau externă a calculatoarelor. Oferă avantajul
reproductibilităţii.

Metodele analitice – folosesc relaţii de recurenţă. Un şir de numere (Un) se numeşte şir de numere pseudoaleatoare
dacă există o anumită formulă de recurenţă şi un număr natural fix k, astfel încât Un = f(Un-1 ... , Un-k), n >= k + 1
27. Problema celui mai scurt drum in grafuri
Problema drumului cel mai scurt se preocupă cu găsirea celei mai scurte căi dintr-un graf sau reţea,
pornind de la un nod, numit nod de start şi până la unul sau mai multe alte noduri din reţea. Pentru aceasta,
fiecare arc are asociată o valoare nenegativă, care reprezintă lungimea arcului, lungime care se poate exprima în
diferite unităţi de măsură, ca de exemplu: kilometri, ore, etc. Atribuirea unei mărimi unui arc se numeşte
marcare. Valoarea acelei mărimi se numeşte marcă şi are semnificaţia de valoare a drumului de lanodul iniţial la
nodul terminal al arcului.
Pentru rezolvarea problemei drumului cel mai scurt se parcurg următorii paşi:

1. Identificaţi nodul iniţial sau de start. Acesta va intra într-o mulţime specială numită mulţimea nodurilor
permanente. De obicei se marchează nodurile din mulţimea permanentă cu un asterisc;
2. Conectaţi acest nod cu acele noduri din reţea cu care acesta are legătură directă.
3. Din mulţimea arcelor rezultate, selectaţi nodul cu cea mai scurtă rută directă către nodul iniţial;
4. Stabiliţi mulţimea permanentă ca fiind construită din nodul iniţial şi nodul selectat la pasul 3;
5. Stabiliţi toate nodurile direct conectate mulţimii nodurilor permanente;
6. Selectaţi nodul cu cea mai scurtă ramură de la grupul de noduri direct conectate cu mulţimea nodurilor
permanente;
7. Repetaţi paşii 5 şi 6 până când toate nodurile s-au adăugat mulţimii nodurilor permanente.
8. Construiţi reţeaua care stabileşte legătura cea mai scurtă dintre nodul de start şi toate celelalte noduri.
Exemplu:

28. Problema fluxului maxim în reţele


Acest subiect face trimitere catre conceptul de grafuri, iar o retea de flux este un graf orientat G=(V,E) cu 2 noduri
speciale (sursa si destinatia). Fiecarei muchii (u,v) a grafului ii este asociata o valoare cap(u,v) numita capacitatea acelei
muchii.
Problema fluxului maxim se defineste ca reprezentand determinarea acelei functii de flux f pentru care |f| este
maxim, iar problema fluxului maxim în rețele de transport este una foarte răspândită și constă în determinarea mărimii
fluxului maxim de produs ce poate fi transportat dintr-un punct, sursă, în alt punct, destinație, printr-o rețea, în care fiecare
arc care unește două vârfuri are o capacitate limitată de transportare.
Teorema : Fie G o retea de flux si f un flux in aceasta retea. Fluxul f este maxim daca si numai daca reteaua
reziduala Gf nu are nici un flux de valoare pozitiva sau, echivalent, daca in reteaua reziduala nu exista nici un drum de la
sursa la destinatie. Pentru soluționarea problemei fluxului maxim au fost descrise un șir de tehnici și metode. Dacă inițial
cercetătorii încercau să reducă complexitatea algoritmilor de soluționare, în ultimii ani se caută varii modalități de
soluționare a unor cazuri speciale ale problemei de bază, cum sunt grafurile neorientate, bipartite sau rețele cu câteva
destinații și surse, dar și posibilități de implementare a algoritmilor pentru soluționarea altor probleme.

29. Rezolvarea
sistemelor algebrice liniare – metode directe

Metodele directe – gasesc solutia teoretica a problemei intr-un numar finit de pasi (Gauss, factorizare LU).

Metoda Gauss:
Factorizare LU (Matrix Factorization)

30. Rezolvarea sistemelor algebrice liniare-metode iterative


Pentru rezolvarea unui sistem de ecuații liniare cela mai folosite metode iterative sunt: Jacobi, Seidel-Gauss și
Seidel-Gauss modificată
Metodele iterative permit determinarea soluţiei exacte a unui sistem de ecuaţii liniare numai atunci când s-ar
parcurge un număr nelimitat (teoretic infinit) de iteraţii. În practică acest lucru nu este posibil, astfel încât
această categorie de metode determină doar o soluţie aproximativă a cărei precizie depinde de o mărime
indicată iniţial, înainte de începerea procesului iterativ.
Generalități
În rezolvarea numerică a sistemelor de ecuații liniare folosind metode iterative se porneşte de la o aproximaţie
iniţială, notată X0, şi se construieşte un şir de aproximaţii succesive X0 , X1 , ..., X k, ... care în anumite condiţii
converge către soluţia exactă, notată X*. Dacă pentru acest şir nu se poate defini o limită se spune că metoda
este divergentă. În caz contrar, metoda este convergentă. Acest lucru este echivalent cu posibilitatea de a defini
o relaţie de recurenţă între două aproximaţii succesive de forma:

Metoda Jacobi
Fie sistemul de ecuaţii liniare dat sub forma:

Pentru sistemul de mai sus se presupune că elementele aii ≠ 0, i = 1, ..., n şi determinatul matricei det(A) ≠ 0,
unde A este matricea coeficienţilor din sistemul de ecuaţii liniare.
Dacă se explicitează fiecare necunoscută a sistemului în funcţie de celelalte necunoscute rezultă o relaţie
iterativă de forma:

Relaţia de recurenţă de mai sus reprezintă formula de iterare a metodei Jacobi.


În cazul în care în forma iniţială a sistemului de ecuaţii matricea A conţine cel puţin un element diagonal nul,
înaintea aplicării metodei Jacobi este necesar schimbarea ordinei unor ecuaţii astfel încât să se asigure valori
nenule pentru toate elementele diagonale. Această operaţie se poate realiza folosind pivotarea parţială care se
execută o singură dată, înaintea intrării în bucla iterativă.
Aplicarea cu succes a metodei Jacobi necesită şi o altă condiţie legată de matricea A care trebuie să fie
dominant diagonală, adică elementele diagonale ale acesteia să domine în valoare absolută elementele din afara
diagonalei principale:

Metoda Seidel-Gauss
Metoda Seidel-Gauss este foarte asemănătoare cu metoda Jacobi, singura deosebire dintre ele fiind următoarea:
la metoda Jacobi în partea dreaptă a relaţiei
apar numai valorile anterioare ale variabilelor (valorile de la iteraţia k–1), iar în cadrul metodei Seidel-Gauss
apar atât unele valori anterioare (pentru variabilele care nu au fost încă recalculate), cât şi unele valori noi
(valorile de la iteraţia k, pentru variabilele care au fost recalculate deja).
Relaţia de calcul iterativ este de forma:

Această variantă de calcul indică o îmbunătăţire a vitezei de convergenţă datorită


folosirii unor informaţii mai precise din iteraţia curentă.

Metoda Seidel-Gauss modificată


Dacă se dorește o accelerare suplimentară a convergeței se poate folosi un factor de accelerare α. În ceea ce
priveşte accelerarea vitezei de convergenţă, aceasta nu se produce pentru orice valoare a factorului α, iar
alegerea optimă a acestuia este dependentă de problemă.
Formula de iterare a metodei Seidel-Gauss modificată este:

31. Rezolvarea numerică a problemelor algebrice de valori şi vectori proprii


Cadrul cel mai natural de abordare a problemei este cel al matricelor complexe, in care caz valorile si vectorii
proprii sunt, in general, numere complexe, respectiv vectori complecsi. Totusi, majoritatea problemelor tehnice conduc la
necesitatea calculului valorilor ¸si vectorilor proprii pentru matrice reale. Desi valorile proprii si vectorii proprii asociati ai
unei matrice reale pot fi numere complexe, respectiv
vectori complecsi, calculul cu numere complexe este sensibil mai putin eficient si, din acest motiv, in cazul datelor initiale
reale, dezvoltarile procedurale vor urmari utilizarea, practic exclusiva, a calculului cu numere reale.
La probleme algebrice de valori şi vectori proprii conduc numeroase probleme tehnico-ştiinţifice. Se ajunge la o
problemă algebrică de valori şi vectori proprii, extinzând problema rezolvării unui sistem omogen de ecuaţii.
O problemă algebrică de valori şi vectori proprii se exprimă prin relaţia : Ax x, unde :
 A este o matrice pătratică de ordin n,
 x un vector (nenul) care se numeşten vector propriu (la dreapta) ce trebuie calculat
 un număr care se numeşte valoare proprie ce trebuie calculată.
Valorile proprii pentru problema Ax x sunt rădăcinile ecuaţiei (numită ecuaţie caracteristică) det(A I )
P() 0, P() fiind un polinom de grad n in obţinut din dezvoltarea determinantului det(A I ). Avand o valoare
proprie , un vector propriu corespunzător x este soluţia nebanală a sistemului omogen de ecuaţii (A I )x = 0.
Metodele de determinare a valorilor proprii sunt categorisite astfel :
- dupa nr. de valori proprii determinate : globale (determina toate n valorile proprii si toti n vectori proprii),
partiale (determina doar anumite valori proprii si vetorii proprii aferenti)
- dupa natura algoritmului de calcul : directe (determină explicit polinomul caracteristic şi calculează
valorile proprii prin rezolvarea ecuației caracteristice), indirecte sau iterative (evită rezolvarea ecuației
caracteristice determinând valorile proprii prin procedee de aproximații succesive bazate pe transformări de
similaritate).

Metode rezolvare numerica :


METODA JACOBI (clasica si ciclica) : Este o modalitate de rezolvare a problemelor de valori si vectori
proprii pentru matrici reale simetrice . Cazul matricelor complexe hermitiene se reduce la cel al matricelor reale simetrice.
Metoda Jacobi este o metodă convenabilă pentru a găsi toate valorile proprii şi vectorii proprii ai unei matrici reale şi
simetrice, de ordin moderat. Determinarea vectorilor proprii este opţională.
În analiza numerică , metoda Jacobi este o metodă iterativă pentru rezolvarea sistemelor liniare , adică o metodă
care calculează soluția unui sistem de ecuații liniare după un număr teoretic infinit de pași.
Pentru a calcula acest rezultat, metoda folosește o secvență x (k) care converge către soluția exactă a sistemului
liniar și îi calculează progresiv valorile, oprindu-se atunci când soluția obținută este suficient de apropiată de cea exactă.
METODA GIVENS (Metoda bisectiei):
METODA PUTERII. METODA PUTERII INVERSE
METODA CÂTULUI RAYLEIGH

32. Aproximarea functiilor prin polinoame. Polinom Lagrange de interpolare

Interpolarea sau aproximarea funcțiilor de o singură variabilă – reprezintă o operație de aproximare care se realizează
atunci când:

 funcția este cunoscută, dar are o formă complicată;


 funcția nu este complet cunoscută, fiind date numai valorile ei pe o mulțime finită.

Interpolarea polinomială – atunci când valorile funcției de aproximare 𝑔(𝑥) au aceleași valori cu cele ale funcției de
aproximat 𝑓(𝑥) în nodurile rețelei 𝑥𝑖: 𝒈(𝒙𝒊) = 𝒇(𝒙𝒊)

Pentru aproximarea functiilor se utilizeaza in principal urmatoarele tipuri de polinoame de interpolare:

 Polinoame de interpolare Lagrange


 Polinoame de interpolare bazate pe diferente (Newton, Gauss, Bessel)

Interpolarea Lagrange

33. Aproximarea functiilor prin polinoame. Polinoame newton de interpolare


Fie f : [a, b] → R o funcţie. Se pune problema determinării unei funcţii F care să aproximeze funcţia f. O astfel
de aproximaţie este necesară în următoarele situaţii:
1) Când nu se cunoaşte expresia analitică a lui f, ci doar valorile sale într- un număr finit de puncte x0, x1, ..., xn
din intervalul [a, b].
2) Când expresia analitică a lui f este prea complicată şi calculele efectuate cu ajutorul acesteia ar fi prea
dificile.
F trebuie să fie o funcţie simplă, uşor de evaluat, de diferenţiat şi de integrat. În cele ce urmează F va fi un
polinom.
Definiţie.
Fie x0, x1, ..., xn n+1 puncte distincte două câte două din
intervalul [a, b] (numite noduri), şi fie yi = f(xi) pentru orice i = 0,1,...n. Se numeşte polinom de interpolare
asociat nodurilor x0, x1, ..., xn şi valorilor y0=f(x0), y1= f(x1), ..., yn=f(xn) un polinom Pn care îndeplineşte
următoarele condiţii:

Polinomul determinat de condiţiile anterioare există şi este unic.


Polinomul Newton de interpolare de speţa I (ascendent)

Polinomul Newton de interpolare de speţa II (descendent)


34. Generarea de conţinut HTML folosind PHP
PHP, acronim care provine din "PHP: Hypertext Preprocessor", este un limbaj de scripting utilizat pe scara larga,
realizat si distribuit în sistem Open Source, care este special realizat pentru a dezvolta aplicatii web, prin integrarea
codului PHP în documente HTML. Scopul principal al limbajului este acela de a scrie rapid pagini web dinamice, dar cu
PHP se pot realiza mult mai multe. PHP și HTML interacționează foarte mult: PHP poate genera HTML, iar HTML poate
transmite informații către PHP.
În linii mari, atunci când vine vorba de utilizarea PHP în HTML, există două abordări diferite. Primul este să
încorporați codul PHP în fișierul HTML în sine cu extensia .html ( acest lucru necesită o considerație specială, despre
care vom discuta într-un moment), iar cealaltă opțiune, modalitatea preferată, este combinarea etichetelor PHP și HTML
în fișiere .php.
Cand accesam o pagina HTML serverul care o gazduieste trimite pagina HTML catre browser spre afisare. In cazul
unei pagini PHP serverul citeste codul PHP, il interpreteaza si genereaza dinamic pagina HTML care este trimisa
browserului spre afisare. Acesta este motivul pentru care utilizatorii folosesc PHP pentru construirea unor pagini cu
continut dinamic.
Codul PHP poate fi utilizat într-un fișier HTML numai cu etichete script deoarece browserul nu îl va putea decoda
decât dacă sunt folosite etichete de script.
Codul PHP este delimitat de unul din urmatoarele seturi de etichete de deschidere si inchidere:
<?php ?> -------------------- etichete recomandate
<script language="php"?> </script>
<? ?> --------------------------------- folosirea lor necesita anumite setari pe server
<% %> ------------------------- etichete tip ASP, folosirea lor necesita anumite setari pe server

35. Utilizarea in PHP a datelor din formularele HTML. Metodele PUT si GET
În interiorul blocului sunt incluse:

 elementele formularului, în care vizitatorul urmează să introducă informaţii.


 un buton de expediere (submit), la apăsarea căruia, datele sunt transmise către server.
 un buton de anulare (reset, cancel)- optional.

Eticheta <FORM> are două atribute esenţiale:

 action – comunică browserului unde să trimită datele introduse în formular. În general valoarea atributului
action este adresa URL a scriptului aflat pe serverul care primeşte datele formularului. De exemplu:

<FORM action="http://localhost/prelucrare.php>.

 method – precizează metoda utilizată de browser pentru expedierea datelor formularului si poate avea 2 valori:
o POST – indica serverului să furnizeze datele direct scriptului ca date de intrare standard.
o GET (valoarea implicită) – datele din formular sunt adăugate la adresa URL precizată de atributul action.

Metoda PUT folosită de unii clienți pentru a stoca fișiere pe un server. Solicitările PUT sunt mult mai simple decât
încărcarea unui fișier folosind solicitări POST și arată cam așa: PUT /path/filename.html HTTP/1.1

36. Utilizarea sistemului PHPMyAdmin


phpMyAdmin este un sistem de gestiune a bazelor de date MySQL liber, open source, scris în PHP și destinat
administrării bazelor de date prin intermediul unui browser web. Prin phpMyAdmin se pot întreprinde diverse
operații cum ar fi crearea, modificarea sau ștergerea bazelor de date, tabelelor, câmpurilor sau rândurilor;
executarea de comenzi (interogări) SQL.
Prin PHPMyAdmin se pot efectua diverse operații, cum ar fi:
- Crează, modifică sau șterge baze de date;
- Execută o interogare/interogări SQL(Structured Query Language / limbaj de interogare structurat);
- Exportă baze de date pe serverul curent;
- Importă baze de date necomprimate .sql sau comprimate .sql.zip in serverul curent.
-
37. Interogări SQL
Cererile de interogare exprimate în SQL prezintă un aspect declarativ deoarece sunt specificate proprietăţile
rezultatului şi nu modul de obţinere (SQL urmăreşte principiile calculului relaţional).
Interogarea unei baze de date poate fi exprimată în SQL prin intermediul instrucţiunii SELECT. O cerere SQL va
lua în considerare doar liniile ce aparţin produsului cartezian al tabelelor listate în clauza from şi va stabili liniile ce
satisfac condiţia exprimată în clauza where. Rezultatul execuţiei unei cereri SQL este un tabel, având câte o linie pentru
fiecare linie selectată de clauza where şi ale cărui coloane rezultă din evaluarea expresiilor ce apar în clauza select (lista
ţintă).
Fiecare coloană poate fi redenumită cu ajutorul unui Alias ce urmează imediat după expresie. Tabelele pot fi de
asemenea redenumite prin intermediul unui Alias.
Clauza FROM : Dacă o interogare implică înregistrări din mai multe tabele, argumentul din clauza from va
reprezenta o listă de tabele. Condiţiile din clauza where sunt aplicate în acest caz produsului cartezian al acestor tabele; se
poate specifica o joncţiune prin indicarea explicită a comparaţiilor între atribute din tabele diferite.
Clauza WHERE : Condiţia din clauza where este o expresie booleană formată prin combinarea predicatelor
simple cu operatorii and, or şi not. Fiecare predicat simplu utilizează operatorii de comparaţie (=, >, >=, <, <=, <>) şi are,
într-un membru, o expresie formată din valori ale atributelor dintr-o linie şi în celălalt membru o valoarea constantă sau o
altă expresie. Prioritar este operatorul not, dar nu se introduce o precedenţă între and şi or. Dacă într-o expresie se
folosesc ambii operatori and şi or este indicată specificarea precedenţei prin utilizarea parantezelor.
Operatorul LIKE : pentru compararea şirurilor de caractere. Acest operator compară un şir cu alt şir, specificat
parţial cu ajutorul caracterelor speciale ’_’ şi ’%’.
• Caracterul ’_’ substituie un caracter oarecare
• Caracterul ’%’ substituie un şir oarecare de caractere, posibil vid
Joncţiuni : sintaxă alternativă pentru specificarea joncţiunilor, fiind astfel posibilă realizarea unei distincţii între
condiţiile ce reprezintă condiţii de joncţiune şi cele ce reprezintă selecţii de linii.
Ordonarea : În general, rezultatul unei interogări conţine linii, aranjate într-o ordine oarecare. Dacă se doreşte
impunerea unei ordonări după un anumit criteriu asupra liniilor returnate de o interogare se va utiliza clauza order by.
Group by : Funcţiile agregat operează pe toate liniile returnate de interogare. În cazul în care se doreşte utilizarea
funcţiilor agregat pe o submulţime a liniilor selectate, SQL pune la dispoziţie clauza group by. Această clauză specifică
modul în care va fi împărţit tabelul în submulţimi de linii.
Having : aceasta clauza conţine condiţii ce trebuie aplicate la terminarea execuţiei interogării ce utilizează clauza
group by. Fiecare submulţime de linii va participa la formarea rezultatului doar dacă satisface condiţia din clauza having.
Pentru a lua în considerare doar grupurile de linii ce satisfac anumite condiţii trebuie utilizată clauza having.

38. Metoda Greedy. Exemple

Metoda Greedy – construieste solutia prin selectarea, dintr-o multime de elemente, a acelora care indeplinesc o
anumita conditie. Pentru ca elementele selectate sa apartina solutiei optime, este ales candidatul optim. Din acest motiv
se numește Greedy (lacom);

Exemple de probleme care se pot rezolva prin metoda greedy:

 Se dă o mulțime A. Să se determine o submulțime B a lui A, astfel încât să fie îndeplinite anumite condiții –
acestea depinzând de problema propriu-zisă.

 Probleme celebre: Problema spectacolelor, Problema continuă a rucsacului, Algoritmul lui Dijkstra pentru
determinarea drumurilor de cost minim într-un graf, Algoritmul lui Prim și Algoritmul lui Kruskal pentru
determinarea arborelui parțial de cost minim al unui graf.

39. Metoda Backtracking. Exemple


Definiție:
Backtracking este o metodă de parcurgere sistematică a spaţiului soluţiilor posibile al unei probleme. 
Este o metodă generală de programare, şi poate fi adaptata pentru orice problemă pentru care dorim să obţinem
toate soluţiile posibile, sau să selectăm o soluţie optimă, din mulţimea soluţiilor posibile. 
Solutia este compusa din mai multe elemente (x1, x2, x3…xn) in care fiecare element xi este ales dintr-o
multime corespunzatoare Mi numita multimea de baza a elementului xi.
Backtracking este însă şi cea mai costisitoare metodă din punct de vedere al timpului de execuţie.
Backtracking = “to go back to an earlier point in a sequence”
În general vom modela soluţia problemei ca un vector v=(v1,v2,v3,...,vn) în care fiecare element vk aparţine
unei mulţimi finite şi ordonate Sk, cu k=1,n. În anumite cazuri particulare, mulţimile S1 ,S2, S3,...,Sn pot fi
identice . Procedăm astfel:
1. La fiecare pas k pornim de la o soluţie parţială v=( v1,v2,v3,...,vk-1) determinate până în acel moment şi
încercăm să extindem această soluţie adăugând un nou element la sfârşitul vectorului.
2. Căutăm în mulţimea Sk , un nou element.
3. Dacă există un element neselectat încă, verificăm dacă acest elementîndeplineşte condiţiile impuse de
problemă, numite condiţii de continuare.
4. Dacă sunt respectate condiţiile de continuare, adăugăm elementul soluţiei
parţiale.
5. Verificăm dacă am obţinut o soluţie completă.
- dacă am obţinut o soluţie completă o afişăm şi se reia algoritmul de la pasul 1.
- dacă nu am obţinut o soluţie, k <----- k+1 si se reia algoritmul de la pasul 1.
6. Dacă nu sunt respectate condiţiile de continuare se reia algoritmul de la pasul 2.
7. Dacă nu mai există nici un element neverificat în mulţimea Sk înseamnă că nu mai avem nici o
posibilitate din acest moment, să construim soluţia finală aşa că trebuie să modificăm alegerile făcute în
prealabil, astfel k <----- k-1 şi se reia problema de la pasul 1.
Exemple de implementare a metodei
40. Metoda Divide et Impera. Exemple
Metoda Divide et Impera (Imparte si Stapaneste) este o metoda de programare care se aplica problemelor care pot
fi descompuse in subprobleme independente unele de altele (care folosesc mulţimi de date de intrare disjuncte), similare
problemei initiale, de dimensiuni mai mici si care pot fi rezolvate foarte usor. Procesul recursiv de descompunere a unei
subprobleme în alte subprobleme continuă până se obţine o subproblemă cu rezolvarea imediată (cazul de bază), după
care se compun soluţiile subproblemelor până se obţine soluţia problemei iniţiale.
Nu toate problemele pot fi rezolvate prin utilizarea acestei tehnici.
Se poate afirma că numărul celor rezolvabile prin “divide et impera” este relativ
mic, tocmai datorită cerinței ca problema să admită o descompunere
repetata.
Subproblemele în care se descompun problema dată trebuie să fie:
 de același tip cu problema dată;
 de dimensiuni mai mici (mai “ușoare”);
 independente (să nu se suprapună, prelucrează seturi de date
distincte).
Metoda divide et impera se recomandă în următoarele cazuri:
- algoritmul obţinut este mai eficient decât algoritmul clasic
(iterativ) – de exemplu, algoritmul de căutare într-un vector sortat şi
algoritmii pentru sortarea unui vector;
- rezolvarea problemei prin divizarea ei în subprobleme este mai simplă decât rezolvarea clasică (iterativă) –
de exemplu, problema turnurilor din Hanoi şi generarea unor modele fractale.
Exemple de folosire a metodei Divide et Impera :
- suma elementelor dintr-un vector
- c.m.m.d.c. al elementelor dintr-un vector
- sortarea rapida (quick sort)
- problema turnurilor din Hanoi
- calcularea termenului n al şirului lui Fibonacci
- maximul/minimul dintr-un vector
- cautarea binara.
41. Operatii cu structuri dinamice de date (liste, arbori)

Listele – structuri de date dinamice (simplu inlantuite, dublu inlantuite si circulare).

Operatii cu liste simplu inlantuite:

Arborii – grafuri neorientate conexe, fara cicluri. Arbore binar: fiecare nod are maxim 2 fii. Pot fi: de cautare (BST -
S<R<D) si de selectie.

Parcurgeri arbori binari: preordine (RSD), inordine (SRD), postordine (SDR).

43. Algebra relaţională


În informatică, algebra relațională și calculul relațional aferent fac parte din setul de limbaje care vă permit
examinarea interogărilor care trebuie efectuate în contextul gestionării / utilizării unei baze de date.
Algebra relationala se bazează pe o colecţie de operatori ce sunt aplicaţi relaţiilor, producând relaţii. Scopul
fundamental al algebrei relationale este de a permite scrierea expresiilor relationale. Expresiile servesc ca o reprezentare
de nivel superior, simbolică, a intenţiilor utilizatorului şi pot fi supuse unei diversităţi de reguli de transformare
(optimizare).
Relaţiile sunt închise faţă de algebra relaţională (operanzii şi rezultatele sunt relaţii → ieşirea unei operaţii poate
deveni intrare pentru alta) → posibilitatea imbricării rxpresiilor în algebra relaţională).
* Operatorii algebrici relaţionali pot fi împartiti în următoarele clase:
 Operatori clasici din teoria mulţimilor – reuniune, intersecţie, diferenţă (se aplică doar asupra
perechilor de relaţii definite pe aceleaşi atribute);
 Operatori specifici algebrei relationale - redenumire, selecţie, proiecţie;
 Operatorul join (joncţiune), împreună cu variantele sale – joncţiune naturală, produs cartezian, theta
joncţiune şi joncţiune externă ( permite realizarea unei conexiuni între datele conţinute de diverse relaţii )

* O alta clasificare a operatorilor algebrici :

Operatori fundamentali (de bază):


 Uniune (operator binar)
 Diferență (operator binar)
 Produs cartezian (operator binar)
 Selecție (operator unar)
 Proiecție (operator unar)
 Redenumire (operator unar)

Operatori derivați (din cei de bază):


 intersecție (operator binar)
 Join (operator binar) sub diferite forme (theta-join, natural-join etc.)
 Divizie (operator binar)

44. SGBD relationale: caracteristici, componente, arhitectura, mecanisme de optimizare

Sistemul de Gestiune al Bazei de Date (SGBD) – un pachet de programe specializat pentru definirea, crearea,
întreţinerea şi accesul controlat la baza de date.

Istoria SGBD delimitează trei generaţii:

 sisteme de tip ierarhic şi de tip reţea,


 sisteme relaţionale – cel mai folosit;
 sisteme orientate obiect, multimedia etc.

SGBD Relaţionale - caracterizate de structuri de date simple şi intuitive, ce au ca scop definirea, căutarea şi
reactualizarea datelor. Modelul relaţional are capacităţi limitate de modelare a datelor. Ele nu folosesc obiecte nu
realizează gestiunea distribuită a datelor şi nici gestiunea de cunoştinţe.

Arhitectura pe componente a unui SGBD

Mecanisme de optimizare

 Mecanisme pentru protecţia datelor (integritate, securitate);


 Mecanisme de interogare (transformari relationale, optimizare alocari, optimizare acces).
45. Normalizarea bazelor de date
Definitie: Normalizarea reprezinta procesul de descompunere a unui tabel relational in mai multe tabele
care satisfac anumite reguli si care stocheaza aceleasi date ca si tabelul initial astfel incat sa fie eliminate
redundanta in date si anomaliile la actualizare.
Dependinte functionale - reprezinta un set de restrictii intre atributele unei relatii si anume valoare unui
atribut (sau grup de atribute) poate fi determinata prin valoarea altui atribut (sau grup) :

X -> Y adica X determina pe Y sau Y depinde functional de X

Tipuri de dependinte functionale:


Triviala: X->Y este triviala daca Y e inclus in X
Partiala: X->Y este partiala daca Y depinde de o submultime a lui X
Totala: X->Y este totala daca nu exista o submultime a lui X care sa determine pe

Prima forma normala (1NF – First Normal Form)


Prima forma normala exclude posibilitatea existentei grupurilor repetitive cerand ca fiecare camp intr-o
baza de date sa cuprinda numai o valoare atomica. De asemenea, prima forma normala cere si ca fiecare
inregistrare sa fie definita astfel incat sa fie identificata in mod unic prin intermediul unei chei primare.

A doua forma normala (2NF – Second Normal Form)


A doua forma normala cere ca toate elementele unei tabele sa fie dependente functional de totalitatea
cheii primare. Daca unul sau mai multe elemente sunt dependente functional numai de o parte a cheii
primare, atunci ele trebuie sa fie separate in tabele diferite.

A treia forma normala (3NF – Third Normal Form)


Toate atributele non-chei ale unei relatii depind numai de chei candidate ale acelei relatii. Toate
atributele non-cheie sunt (trebuie sa fie) mutual independente.

46. Limbajul SQL


SQL (Structured Query Language) este limbajul de programare standard pentru crearea, actualizarea şi
regăsirea informaţiilor stocate în bazele de date prin intermediul sistemelor de gestionare a bazelor de date.
Limbajul SQL permite :
 accesarea datelor dintr-un sistem de baze de date relationale.
 definirea tipurilor de date si manipularea acestora.
 folosirea alaturi de alte limbaje folosind diverse module, librarii si pre-compilatoare.
 crearea de baza de date si tabele precum si stergerea acestora (drop).
 crearea de view-uri, stored procedure, functii si multe altele.
 setarea de permisiuni pentru utilizatori, tabele, proceduri, view-uri, etc

Comenzile SQL pot fi grupate in 5 categorii :

SQL – Structured Query Language : Limbajul de interogare permite regăsirea liniilor memorate în tabelele bazei de
date. Interogările se scriu cu ajutorul comenzii SELECT .

DDL – Data Definition Language : permite definirea structurii tabelelor care compun baza de date
Comanda Descriere
CREATE Creaza un table, un view sau orice alt obiect intr-o baza de date
ALTER Modificarea structurii unei baze de date (ex: modificare tabel).
DROP Stergerea unui tabel, view sau orice alt obiect.
RENAME Schimba numele unei tabele
TRUNCATE Sterge conţinutul unei tabele

DML – Data Manipulation Language : permite modificarea conţinutului tabelelor


Comanda Descriere
SELECT Afiseaza doar toate (sau doar unele) informatii dintr-un tabel.
INSERT Insereaza informatii intr-un tabel.
UPDATE Modifica informatiile dintr-un tabel.
DELETE Sterge informatiile dintr-un tabel.

DCL – Data Control Language


Comanda Descriere
GRANT Ii da anumite privilegii unui anumit utilizator.
REVOKE Reveoca anumite privilegii de la un anumit utilizator

TC - TRANSACTION CONTROL : limbajul de control al tranzactiilor


Comanda Descriere
COMMIT vă permite să faceţi ca modificările asupra bazei de date să devină
permanente
ROLLBACK permite renunţarea la ultimele modificări asupra bazei de date
SAVEPOINT vă permite să definiţi un "punct de salvare" la care să puteţi reveni,
renunţând la modificările făcute după acel punct asupra bazei de date.

47. Elementele unei baze de date Oracle

Oracle s-a alăturat ligii bazelor de date relaționale, împreună cu Microsoft SQL Server, Sybase și DB2 etc.

Arhitectura Oracle poate fi împărțită în 4 categorii majore:

 Structuri de memorie (instanță)


 Structuri fizice
 Procese
 Componente logice
48. Limbajul PL/SQL
PL/SQL (Procedural Language /SQL) este o extensie la SQL, incorporind multe facilitati ale limbajalor de
programare din ultimii ani. El permite ca manipularea datelor si procedurile de interogare din SQL sa fie incluse
in blocuri stucturate si proceduri, PL/SQL devenind astfel un puternic limbaj de procesare al tranzactiilor.
Avantaje ale PL/SQL
Stuctura de bloc: PL/SQL este un limbaj structurat, adica programele pot fi impartite in blocuri logice, fiecare
continind resursele necesare in acel bloc. variabilele pot fi declarate local in cadrul unui bloc in care vor fi
folosite, iar tratarea erorilor (sau Exceptiile) se poate face in blocul in care apar.
Controlul executiei: Deciziile, buclele si salturile pot fi folosite pentru a controla executia programelor,
decizind daca si cind SQL si alte actiuni sa fie executate. Aceste facilitati permit aplicatiilor ORACLE cum ar fi
SQL*Forms, de a grupa comenzi si de a controla executia lor prin PL/SQL
Portabilitatea: Deoarece PL/SQL deriva din ORACLE, programele pot fo portate pe toate masinile ce suporta
ORACLE si PL/SQL.
Integrarea: PL/SQL joaca un rol din ce in ce mai important in RDBMS si in aplicatiile ORACLE. Variabilele
si tipurile de date din PL/SQL sunt compatibile cu cele din SQL.PL/SQL acopera golul dintre nevoia de access
la tehnologia bazelor de date si nevoia de facilitati pentru programarea procedurala.
Performantele: Utilizarea PL/SQL poate ajuta la imbunatatirea performantelor aplicatiilor. Avantajele difera ,
functie de mediul in care PL/SQL este folosit. Aceste avantaje vor fi discutate mai tirziu in acelasi unit.
49. Scopul Inteligenţei Artificiale. Definiţii, abordări, aplicaţii
IA este capacitatea unei mașini de a imita funcții umane, cum ar fi raționamentul, învățarea, planificarea și
creativitatea. De asmenea, permite sistemelor tehnice să perceapă mediul în care funcționează, să prelucreze această
percepție și să rezolve probleme, acționând pentru a atinge un anumit obiectiv. Calculatorul primește datele (deja pregătite
sau colectate prin intermediul propriilor senzori, cum ar fi o cameră video), le prelucrează și reacționează. Sistemele IA
sunt capabile să își adapteze, într-o anumită măsură, comportamentul, analizând efectele acțiunilor anterioare și
funcționând autonom.
În termeni simpli, IA înseamnă sisteme sau mașini care imită inteligența umană, pentru a efectua diverse
activități, și care se pot îmbunătăți iterativ pe baza informațiilor pe care le colectează.
IA în viața de zi cu zi :
 Cumpărăturile și publicitatea online : Inteligența artificială este utilizată pe scară largă pentru a oferi
internauților recomandări personalizate, pe baza căutărilor sau achizițiilor lor anterioare, de exemplu, sau a altor tipuri de
comportament online. IA are o importanță enormă în economie, pentru optimizarea produselor, planificarea inventarelor,
logistică etc.
 Căutarea pe internet : Motoarele de căutare învață din volumul imens de date introduse de utilizatori
pentru a oferi rezultate pertinente.
 Asistenții personali digitali : Telefoanele inteligente utilizează IA pentru a oferi produse cât mai adaptate
și mai personalizate. Asistenții virtuali care răspund la întrebări, oferă recomandări și contribuie la organizarea
activităților zilnice au devenit omniprezenți.
 Traducerea automată : Software-urile de traducere, scrisă sau orală, utilizează inteligența artificială
pentru a face traducerile, dar și pentru a le îmbunătăți. Același este și cazul altor funcții, cum ar fi subtitrarea automată.
 Locuințe, orașe și infrastructuri inteligente : Termostatele inteligente învață din comportamentul nostru
pentru a economisi energie, iar dezvoltatorii orașelor inteligente speră să controleze traficul pentru a îmbunătăți
conectivitatea și a reduce ambuteiajele.
 Automobilele : Deși vehiculele autonome nu sunt încă norma, automobilele utilizează deja funcții de
siguranță bazate pe IA. UE a contribuit, de exemplu, la finanțarea VI-DAS, senzori automați care detectează posibilele
situații periculoase și accidente. Navigația este în mare măsură bazată pe IA.
 Securitatea cibernetică : Sistemele IA ajută la identificarea și combaterea atacurilor cibernetice și a altor
amenințări cibernetice bazate pe inputul continuu de date, recunoscând tiparele și trasând atacurile.
 Inteligența artificială împotriva Covid-19 : În contextul epidemiei de Covid-19, IA este utilizată în
imagistica termică din aeroporturi și din alte locuri. În medicină, IA poate ajuta la recunoașterea infecțiilor prin
tomografia computerizată a plămânilor. De asemenea, a fost utilizată la colectarea datelor pentru a urmări răspândirea
bolii.
 Combaterea dezinformării : Anumite aplicații de IA pot detecta știrile false și dezinformarea prin
extragerea informațiilor false postate pe platformele de socializare, căutând cuvinte senzaționale sau alarmante și
identificând sursele online considerate oficiale.
 Sănătatea : Cercetătorii studiază cum poate fi utilizată IA pentru a analiza cantități mari de date medicale
și a găsi modele care ar putea conduce la noi descoperiri în medicină și la îmbunătățirea diagnosticării pacienților. De
exemplu, a fost creat un program de IA pentru a răspunde apelurilor de urgență, care să recunoască un stop cardiac în
timpul apelului mai rapid și mai frecvent decât dispeceratul medical. Un alt exemplu este KConnect, cofinanțat de UE,
care dezvoltă servicii de căutare de text multilingve, pentru a ajuta oamenii să găsească cele mai relevante informații
medicale disponibile.
 Fabricația : IA poate ajuta producătorii europeni să devină mai eficienți și să readucă fabricile în Europa,
prin utilizarea roboților în fabricație, optimizarea vânzărilor și prin anticiparea din timp a întreținerii sau a întreruperilor în
fabricile inteligente. SatisFactory este un proiect de cercetare cofinanțat de UE, care utilizează sisteme colaborative și de
realitate augmentată pentru a crește gradul de satisfacție profesională în fabricile inteligente.
 Alimentația și agricultura : Inteligența artificială poate fi utilizată pentru a construi unui sistem alimentar
sustenabil în UE: IA poate asigura o alimentație mai sănătoasă prin reducerea la minimum a utilizării îngrășămintelor, a
pesticidelor și irigațiilor, precum și prin susținerea productivității și reducerea impactului asupra mediului. Roboții ar
putea elimina plantele dăunătoare, reducând astfel utilizarea erbicidelor, de exemplu. Numeroase ferme din Europa
utilizează deja IA pentru a monitoriza mișcarea, temperatura și consumul de hrană pentru animalele lor.

Care sunt tehnologiile cele mai importante ale inteligenței artificiale?

 Recunoașterea vocală : Procesul de convertire a cuvintelor vorbite în format digital în scopul transcrierii
acestora într-un cod util pentru diverse aplicații software poartă numele de recunoaștere vocală. Ea este utilizată în
principal pentru sisteme interactive de răspuns vocal și pentru aplicații mobile.
 Tehnologia limbajului și procesarea limbajului natural : În această categorie intră sistemele care
utilizează procesarea limbajului natural în scopul analizei textuale. Pentru a obține o înțelegere bună a conținutului atât
din punct de vedere al sintaxei, cât și a semanticii, aceste sisteme folosesc tehnologii de identificare a tonului vocal și a
intensității de exprimare a unei propoziții. Soluțiile software sunt utilizate pentru a preveni tentativele de fraudă și sunt
preferate de anumite companii în analiza datelor nestructurate, cum ar fi conversațiile din mediul online sau pentru
creșterea eficienței asistenților virtuali.
 Asistenții virtuali : Chiar dacă putem observa o creștere a numărului de chatbots, utilizați în scopul
îmbunătățirii experienței clienților, evoluția tehnologică din prezent este îndreptată spre dezvoltarea asistenților virtuali.
Cel mai probabil, aceasta își va atinge apogeul în următorii 2-4 ani. Asistenții virtuali sunt capabili să interacționeze direct
cu oamenii și să indeplinească task-uri specifice, în special în cazurile în care sunt angajați în proiecte din rețeaua Internet
of Things (IoT), cum ar fi și cel al caselor inteligente.
 Automatizarea proceselor : Aceasta reprezintă unul dintre cele mai puternice trenduri tehnologice,
deoarece poate fi aplicat unui număr mare de industrii. Datorită lui, multe activități umane au fost automatizate, iar
procesele de business au fost optimizate.
 Platforma de Machine Learning : În acest caz vorbim de platforme tehnologice pre-configurate, care
exploatează într-un mod eficient și simplu inteligența artificială. Ea integrează în cadrul lor diferitele sale funcționalități,
în particular algoritmi de machine learning. În general, ele sunt soluții cloud prin care se construiesc modele matematice,
care vor fi ulterior utilizate în dezvoltarea aplicațiilor. În prezent, obiectivul lor principal este implementarea unor soluții
de analiză predictivă.
 Recunoașterea biometrică : Tehnologia recunoașterii biometrice oferă soluții promițătoare, capabile să
îmbunătățească interacținea dintre om și mașină, nu doar prin recunoașterea limbajului, ci și a feței, a tonului vocii și, în
general, a tot ceea ce desemnăm ca limbaj corporal. În prezent, ea reprezintă una dintre cele mai active zone de cercetare.
 Îmbunătățirea managementului și a luării deciziilor : În acest câmp, sunt dezvoltate sisteme și soluții care
integrează reguli logice la nivelul aplicațiilor inteligenței artificiale, cu scopul de a oferi instrumente eficiente de
management și date exacte pe baza cărora pot fi luate decizii. Astfel, prin aceste sisteme se urmărește nu doar asumarea
unor decizii mai bune, ci și eficientizarea procesului prin care se poate ajunge la ele.

50. Demonstrarea automata

Inteligenta Artificiala (AI) – se ocupă cu studiul posibilităţii calculatoarelor de a avea o comportare asemănătoare cu cea

omenească. AI cuprinde: intelegerea limbajului, invatarea, rationamentul, rezolvarea problemelor, demonstrarea


automata a teoremelor, etc.

Demonstrarea automata a teoremelor – este cea mai veche aplicație a inteligenței artificiale. Aceasta se bazează pe
generalitatea și rigoarea logicii

In 1956 a fost realizat programul LOGIC THEORIST, al carui scop a fost de a demonstra teoreme matematice. Succesorul
lui este sistemul GPS (General Problem Solver), elaborat in 1957.

Mod de functionare:

 În prezent, programele acționează adesea ca asistenți.


 Specialiștii împart sarcina în mai multe subsarcini, apoi euristicile sunt gândite pentru a le rezolva.
 Apoi, programul demonstrează leme, verifică ipoteze mai puțin esențiale și face completări la aspectele formale
ale dovezilor prezentate de persoană.

Metode folosite:

 Metoda semantica – se presupune ca in orice interpretare formula propriu-zisa este adevarata.


 Metoda directa – daca in toate interpretarile premisele sunt simultan adevarate, concluzia este adevarata.
 Metoda inversa – se construieste tabelul de adevar si se marcheaza liniile in care concluzia este falsa. Pentru
aceste linii se verifica daca putin una dintre premise nu este satisfacuta.

51. Sisteme inteligente. Sisteme multi-agent. Metauristici. Exemple


Sisteme inteligente
Un sistem inteligent este capabil să demonstreze în mod autonom și adaptiv cât mai
multe capacități cognitive de nivel înalt (percepția, acțiunea, învățarea, planificarea, memoria, decizia,
recunoașterea limbajului, emoția etc.). Inteligenta artificială este capacitatea unei mașini de a imita funcții
umane, cum ar fi raționamentul, învățarea, planificarea și creativitatea. IA permite sistemelor tehnice să
perceapă mediul în care funcționează, să prelucreze această percepție și să rezolve probleme, acționând pentru a
atinge un anumit obiectiv. Calculatorul primește datele (deja pregătite sau colectate prin intermediul propriilor
senzori, cum ar fi o cameră video), le prelucrează și reacționează. Sistemele IA sunt capabile să își adapteze,
într-o anumită măsură, comportamentul, analizând efectele acțiunilor anterioare și funcționând autonom.
Sisteme multi-agent
Sistemul multi-agent este format dintr-un număr de agenți software inteligenți de același tip sau diferit
specializați care acționează separat spre rezolvarea în colectiv a unei probleme, interacționând prin schimb de
mesaje. Agenții individuali angajați într-un sistem multiagent au diferite țeluri sau motivații. Sistemele multi-
agent pot rezolva probleme care pentru un agent software individual sau un sistem software monolitic (care
activează la modul "mono-agent") sunt prea dificile (practic nerezolvabile). Pentru succesul interacțiunii, agenții
trebuie să aibă capacitatea de cooperare, de coordonare și de negociere cu alți agenți.
Metauristici. Exemple
O metaheuristică este un algoritm de optimizare pentru rezolvarea problemelor de optimizare dificilă (adesea
din domeniile cercetării operaționale , ingineriei sau AI ) pentru care nu există o metodă clasică cea mai
eficientă cunoscută.
Metaheuristica este, în general , algoritmi stochastici iterați , care progresează către un optim global, adică
extremul global al unei funcții , prin eșantionarea unei funcții obiective . Se comportă ca niște algoritmi de
căutare, încercând să învețe caracteristicile unei probleme pentru a găsi o aproximare a celei mai bune soluții
(într-un mod similar cu algoritmii de aproximare ).
Algoritmii metaeuristici sunt tehnici generale de căutare în spațiul soluțiilor
care în cazul problemelor dificile de optimizare:
- permit identificarea unor soluții acceptabile,
- cu un consum rezonabil de resurse de calcul.
Algoritmi metaeuristici care folosesc o soluție candidat:
Algoritmi de căutare locală, Algoritmi de căutare globală
Algoritmi metaeuristici care folosesc o populație de soluții candidat:
Algoritmi evolutive, Algoritmi bazați pe modelarea inteligenței collective, Algoritmi bazați pe diferențe,
Algoritmi bazați pe modelarea sistemului imunitare, Algoritmi bazați pe estimarea distribuției de probabilitate.
52. Utilizarea listelor în PROLOG. Operații fundamentale pe liste
Structura de lista reprezintă unul dintre tipurile cele mai utilizate de structuri de date, atât în PROLOG cât şi în
alte limbaje simbolice. O listă este o secvenţă ordonată de obiecte de acelaşi tip. În PROLOG elementele unei liste se
separă între ele prin virgulă şi întreaga secvenţă este închisă între paranteze drepte.
Exemple:
[ ] – lista vidă
[X, Y, Y] – listă ale cărei elemente sunt variabilele X, Y şi Z
[[0, 2, 4], [1, 3]] – listă de liste de numere întregi
Tipurile de liste utilizate într-un program PROLOG trebuie declarate în secţiunea domains sub forma: tip_lista =
tip* , unde tip este un tip standard sau definit de utilizator. O listă este compusă conceptul din două părţi:

 cap (head), care desemnează primul element din listă


 rest (tail), care desemnează lista elementelor rămase după eliminarea primului element

PROLOG permite să se aleagă nu doar primul element al unei liste ci mai multe. De asemenea este permis să se
lucreze cu liste în care elementele nu au acelaşi tip. Prelucrarea conţinutului listelor se bazează pe separarea lor în cap şi
rest.
Operaţii de prelucrare a listelor :
 Apartenenţa unui element la o listă : predicatul apartine
(X,Y) este adevărat dacă X aparţine listei Y şi fals în caz contrar. Un
element X aparţine unei liste Y dacă lista începe cu X sau dacă X aparţine
restului listei.

 Aflarea ultimului element din listă : predicatul


ultim_elem(X,Y) este adevărat dacă şi numai dacă X este ultimul
element al listei Y.

 Aflarea elementului de pe poziţia k din listă : predicatul


elem_k(N, X, E) este adevărat dacă şi numai dacă elementul de pe poziţia
N din lista X este E.

 Aflarea numărului de elemente ale unei liste : predicatul


nr_elem(X,N) are ca efectlegarea variabilei N la numărul de elemente ale
listei X.

 Concatenarea a două liste : predicatul


concatenare(X,Y,Z) este adevărat dacă şinumai dacă lista Z coincide cu
lista obţinută adăugând după elementele lui X elementele lui Y.

 Inversarea unei liste : predicatul invers(X,Y) are ca efect


legarea la variabila Y a listei obţinute prin inversarea listei X (de exemplu
prin inversarea listei [1,2,3,4,5] înţelegem operaţia prin care se obţine lista
[5,4,3,2,1]). Pentru a defini predicatul invers(X,Y) folosim un predicat
auxiliar inv(X,Z,Y) cu semnificaţia următoare: Y est rezultatul
adăugării la Z a elementelor lui X aranjate în ordine inversă.

 Aflarea elementului minim dintr-o listă cu elemente de tip


numeric : predicatul min(X,Y) este adevărat dacă şi numai dacă Y este
egal cu elementul minim din lista X.

 Afişarea elementelor unei liste: predicatul afis1(X) are ca


efect afişarea elementelor listei X delimitate prin spaţii, predicatul
afis2(X) determină afişarea elementelor listei X pe linii diferite, iar
predicatul afis3(X) determină afişarea elementelor listei X în ordine inversă.

 Sortarea prin selecţie : constă în alegerea celui mai mic


element din listă, sortarea recursivă a restului listei şi
adăugarea apoi în faţă a elementului eliminat. Predicatul
sort_sel(X,Y), definit mai jos, are ca efect sortarea listei
X prin selecţie şi legarea variabilei Y la lista sortată
obţinută. Pentru definirea acestui predicat se utilizează
următoarele predicate auxiliare: min(X,M) cu semnificaţia M
este minimul dintre elementele listei X (acest predicat a fost definit mai înainte) şi predicatul dif(X,M,Y) cu semnificaţia
Y este lista obţinută X prin eliminarea elementului M.
 Sortarea rapidă : presupune
alegerea unui element oarecare din listă (de regulă
primul
element), divizarea listei în două subliste
formate din elementele mai mici şi respectiv
mai mari decât elementul ales. Cele două
subliste se sortează recursiv şi rezultatele
se concatenează, obţinându-se astfel lista
sortată. Predicatul sort_rapid(X,Y), definit mai
jos, are ca efect sortarea listei X, utilizând
metoda sortării rapide, şi legarea variabilei Y la lista sortată obţinută. Pentru definirea acestui predicat se utilizează
următoarele predicate auxiliare: concatenare(X,Y,Z) cu semnificaţia Z este lista obţinută concatenând la lista X lista Y
(acest predicat a fost definit mai înainte) şi predicatul part(X,Y,Mici,Mari) cu semnificaţia Mici este lista elementelor din
Y mai mici sau egale cu X, iar Mari lista elementelor din Y mai mari decât X.

 Sortare prin inserţie : constă în eliminarea


unui element din listă sortarea listei obţinute şi în final
reinserarea elementului în listă astfel încât lista să rămână
sortată. Predicatul sort_inserţie(X,Y), definit mai jos,
determină sortarea listei X prin inserţie şi legarea variabilei Y
la lista sortată obţinută. Pentru definirea acestui predicat se
utilizează următorul predicat auxiliar:
insert(X,Y,Z) cu semnificaţia Z este lista sortată obţinută prin inserarea elementului X în lista sortată Y.

 Sortarea prin interclasare : presupune


divizarea liste în două subliste aproximativ egale (dacă
lista iniţială are n elemente, atunci una din subliste va fi
formată din primele [n/2] elemente iar cealaltă din
următoarele n-[n/2] elemente). Cele două subliste se
sortează şi se interclasează rezultatele
(interclasarea este operaţia de obţinere a unei liste sortate
din două liste sortate). Predicatul
sort_intercl(X,Y), determină sortarea listei X prin
interclasare şi legarea variabilei Y la lista sortată
obţinută. Pentru definirea acestui predicat se utilizează următoarele predicate auxiliare: intercl(X,Y,Z) cu semnificaţia Z
este lista sortată obţinută prin interclasarea listelor sortate X şi Y, şi predicatul partitie(N,X,Y,Z) cu semnificaţia Y este
lista primelor N elemente din X, iar Z este lista restului elementelor din X.

53. Problema sortarii. Algoritmi de sortare

Sortarea – presupune existenta unei ordini totale.

Algoritmi de sortare:
Alte tipuri de sortari: Counting Sort, Quick Sort.

54. Procesarea unui arbore PROLOG.


Prolog, abreviere de la " Programmation et Logique".
Definitia recursiva a structurii din Prolog ne permite sa reprezentam obiecte recursive cum sunt arborii sau
listele.
Exista mai multe posibilitati de reprezentare a unui arbore binar in termeni Prolog. O prima varianta este de a
considera radacina ca functorul termenului si subarborii ca argumente. In acest caz insa, accesul la nodurile
interioare este dificil si se foloseste numai in situatia in care putem avea un numar mic si cunoscut de atomi care
pot fi noduri interioare. Un exemplu in acest sens il reprezinta expresiile aritmetice.
O reprezentare mai avantajoasa este urmatoarea: alegem un simbol special pentru arborele vid, si un functor cu
ajutorul caruia construim arborele binar din cele trei componente (radacina si cei doi subarbori).
In aceasta maniera, arborele din figura este reprezentat prin termenul Prolog
t(a, t(b, empty, empty), t(c, empty, t(d, empty, empty))).

Un arbore binar are proprietatea că pentru un nod părinte:


- fiecare nod aflat în partea stângă a sa are o valoare numerică mai mică decât a sa.
- fiecare nod aflat în partea dreaptă a nodului părinte are o valoare mai mare decât a sa.

Pentru reprezentarea în Prolog, presupunem că fiecare nod are câte două legături către alţi arbori:
- una către subarborele stâng,
- una către subarborele drept.

arb(8, arb(4, arb(3, n, n), arb(6, n, n)), arb(11, arb(9, n, n), arb(16, n, n)))

S-ar putea să vă placă și