Sunteți pe pagina 1din 137

Metodica predării tehnicilor de programare pentru grupele de performanţă

CUPRINS

CAPITOLUL I 4
ALGORITMI..........................................................................................4
ALGORITMI. NOŢIUNI INTODUCTIVE.......................................................4
ANALIZA COMPLEXITĂŢII ALGORITMILOR ...........................................7
TIMPUL DE EXECUŢIE........................................................................... 7
Date de Intrare................................................................................................7
Măsurarea Timpului de Execuţie........................................................................7
Cazul cel mai Defavorabil şi Cazul Mediu............................................................8

ORDINUL DE COMPLEXITATE................................................................. 9
Notaţia Asimptotică. Simbolul lui Landau............................................................9

CAPITOLUL II
TEHNICI DE PROGRAMARE..........................................................12
RECURSIVITATE.......................................................................................13
Descriere Metodă.....................................................................................................13
Mecanismul de Realizare a Recursivităţii....................................................................13
Avantaje şi Dezavantaje...........................................................................................14

METODA BACTRACKING ..........................................................................15


Descriere Metodă.....................................................................................................15
Backtracking Iterativ................................................................................................16
Backtracking Recursiv..............................................................................................17
Backtracking în Plan (recursiv)..................................................................................17
Avantaje şi Dezavantaje...........................................................................................18
Aplicaţii Backtracking...............................................................................................19
Probleme de Concurs...............................................................................................25

METODA GREEDY.....................................................................................38

1
Metodica predării tehnicilor de programare pentru grupele de performanţă

Descriere Metodă.....................................................................................................38
Avantaje şi Dezavantaje...........................................................................................39
Aplicaţii Greedy........................................................................................................40
Probleme de Concurs...............................................................................................45

DIVIDE ET IMPERA.................................................................................52
Descriere Metodă.....................................................................................................52
Timpul de Calcul......................................................................................................53
Aplicaţii Divide et Impera..........................................................................................53
Probleme de Concurs...............................................................................................57

PROGRAMARE DINAMICĂ........................................................................67
Descriere Metodă.....................................................................................................67
Aplicaţii Programare Dinamică..................................................................................69
Probleme de Concurs...............................................................................................74

CAPITOLUL III
METODICA PREDARII INFORMATICII......................................81
PREDAREA INFORMATICII.......................................................................81
MEDODICA PREDĂRII INFORMATICII......................................................82
CE PREDĂM ?..........................................................................................82
Obiectivele Generale ale Informaticii în Învăţământul Românesc.................................82

CÂT PREDĂM ?........................................................................................84


CUM PREDĂM ?.......................................................................................87

METODE DE ÎNVÃTÃMÂNT...........................................................89
METODE ŞI PROCEDEE EXPOZOTIV - EURISTICE.....................................89
METODE ŞI PROCEDEE ALGORITMICE.....................................................98
INSTUIREA PROGRAMATĂ ASISTATĂ DE CALCULATOR............................99
Direcţii de Modernizare a Metodelor de Predare-Învaţare..........................................101

STRATEGII DIDACTICE................................................................102
MIJLOACE DE ÎNVÃTÃMÂNT.....................................................108
LECTIA. TIPOLOGIA LECTIEI....................................................109
TIPURI DE LECŢII SPECIFICE ORELOR DE INFORMATICĂ.....................111

2
Metodica predării tehnicilor de programare pentru grupele de performanţă

EVALUAREA.....................................................................................115
DEFINIREA CONCEPTULUI DE EVALUARE..............................................115
FUNCŢIILE EVALUĂRII...........................................................................117
MODURI DE EVALUARE ŞI IMPLICAŢIILE LOR.......................................119
PROIECTAREA OBIECTIVELOR DE EVALUARE.........................................120
METODE ŞI TEHNICI DE EVALUARE.......................................................121
INSTUMENTE DE EVALUARE...................................................................122
METODE ALTERNATIVE DE EVALUARE....................................................123
TESTELE DE EVALUARE..........................................................................127

CONCLUZII.......................................................................................136
BIBLIOGRAFIE................................................................................136

3
Metodica predării tehnicilor de programare pentru grupele de performanţă

CAPITOLUL I

ALGORITMI

ALGORITMI. NOŢIUNI INTODUCTIVE

Un algoritm1 este o secvenţă finită de paşi, aranjată într-o ordine logică specifică care, atunci când
este executată, produce o soluţie corectă pentru o problemă precizată. [3] [4] [19]
Această definiţie ne permite să intuim proprietăţile pe care trebuie să le posede un algoritm
performant şi bine conceput:
 Claritatea – în fiecare moment trebuie să ştim exact care este următoarea operaţie pe care
trebuie să o realizăm;
 Finitudinea – algoritmul trebuie să fie format dintr-un număr finit de operaţii. În caz contrar,
chiar dacă ar putea rezolva problema noastră, nu ar da niciodată răspunsul pe care îl aşteptăm,
deoarece pentru o infinitate de operaţii, oricât de rapid le-am realiza, am avea nevoie de un timp
infinit (??) pentru a le termina;
 Generalitatea – algoritmul pe care îl concepem trebuie să se poată aplica unui număr cât mai
mare de probleme. Veţi vedea atunci când vom realiza programe, cât de important este să
respectăm această proprietate a unui algoritm bun: cu cât creşte generalitatea unui algoritm, cu
atât va fi mai mare numărul de probleme practice pe care le vom putea rezolva cu ajutorul
programului care se bazează pe acel algoritm.

În orice alt domeniu, în programare există anumite reguli clare, a căror formulare are o motivaţie
temeinică şi pe care va trebui să le respectăm. Vom întâlni o mare diversitate de probleme de rezolvat.
Acestea pot fi grupate într-o mare diversitate de clase de probleme. Pentru acestea putem concepe o
mare diversitate de algoritmi, care conţin o mare diversitate de operaţii…

Etapele elaborării unui algoritm:


 Analiza problemei şi identificarea algoritmului de rezolvare;

1
Noţiunea de algoritm este foarte veche. Cuvântul algoritm este de origine arabă, derivând din numele
matematicianului Abu Ja’far Mohammed ibn Mûsâ al-Khowârizmî (autor persan, sec VII-IX) care a scris o carte de
matematică celebră intitulată “Kitab al jabr w’ai-muquabala” cunoscută în traducere latină ca “Algorithmi de numero
indorum”, iar apoi ca “Liber algorithmi”, unde “algorithm” provine de la “al-Khowârizmî”, ceea ce înseamnă “din
oraşul Khowârizmî”
4
Metodica predării tehnicilor de programare pentru grupele de performanţă

 Implementarea algoritmului.
În perioada de început a programării calculatoarelor, complexitatea algoritmilor ce stăteau la baza
programelor era destul de redusă. Evoluţia firească a fost spre creşterea complexităţii ceea ce a condus la
dificultăţi din ce în ce mai mari legate în principal de modul „dezordonat” în care se scriau programele. A
devenit evident că se impune fundamentarea unui alt mod de elaborare a algoritmilor şi programelor.
În anul 1969 apare lucrarea „Note on Structured Programming” în care E.W. Dijkstra pune bazele
unei noi paradigme de programare (un nou stil), programarea structurată. La baza noului concept stă
necesitatea elaborării în echipă a unor programe complexe, fiind necesar un mod unitar de descriere şi
implementare a algoritmilor de către programatorii din cadrul echipei. [9]

Dijkstra propune în lucrarea sa ca întregul proces de elaborare a unui algoritm (program) să se


bazeze pe următoarele două principii:
 Modularizarea – adică descompunerea unei probleme complexe în altele mai simple, rezolvate
relativ independent şi înlănţuirea corespunzătoare a problemelor mai simple;
 Structurarea datelor şi a prelucrărilor – adică, gruparea datelor pe baza anumitor criterii în
funcţie de scopul urmărit, şi prelucrarea lor în conformitate cu structura. Prelucrările datelor se
efectuează separat în cadrul diferitelor module.
Modul de structurare a prelucrărilor este precizat prin „ Teorema de structură” formulată de către
Böhm şi Jacopini în anul 1966: pentru descrierea oricărei prelucrări asupra datelor se pot utiliza trei
structuri fundamentale: structura liniară, structura alternativă şi structura repetitivă . [2]

Elaborarea unui algoritm presupune:


 un limbaj de descriere al algoritmilor - pseudocod, scheme logice, etc.;
 un limbaj de programare – Pascal, C++;
 un editor de texte pentru a scrie programele;
 un compilator pentru limbajul de programare utilizat care va transforma textele programelor
scrise de noi într-o succesiune de instrucţiuni pe care calculatorul va fi capabil să le execute.

Aspecte generale care apar la rezolvarea unei probleme


Aşa cum am spus, programatorului i se cere să elaboreze un algoritm pentru o problemă dată, care
să furnizeze o soluţie (fie şi aproximativă, cu condiţia menţionării acestui lucru). [15]

Teoretic, paşii sunt următorii:


 demonstrarea faptului că este posibilă elaborarea unui algoritm pentru determinarea unei soluţii;
 elaborarea unei algoritm (caz în care pasul anterior devine inutil);
 demonstrarea corectitudinii algoritmului;
 determinarea timpului de executare a algoritmului;
 demonstrarea optimalităţii algoritmului (a faptului că timpul de executare este mai mic decât
timpul de executarea al oricărui alt algoritm pentru problema studiată).

5
Metodica predării tehnicilor de programare pentru grupele de performanţă

Timpul de executare a algoritmilor


Un algoritm este elaborat nu numai pentru un set de date de intrare, ci pentru o mulţime de astfel
de seturi. Timpul de executare se măsoară în funcţie de lungimea n a datelor de intrare. [4] [16]
Ideal este să determinăm o formulă matematică pentru T(n)=timpul de executare pentru orice set de
date de intrare de lungime n. Din păcate, acest lucru nu este în general posibil. De aceea, în majoritatea
cazurilor ne mărginim la a evalua ordinul de mărime al timpului de executare.
Mai precis, spunem că timpul de executare este de ordinul f(n) şi exprimăm acest lucru prin
T(n)= (f(n)), dacă raportul între T(n) şi f(n) tinde la un număr real atunci când n tinde la .
De exemplu, dacă f(n)=nk pentru un anumit număr k, spunem că algoritmul este polinomial.
Un algoritm se numeşte "acceptabil" dacă este polinomial.

Optimalitatea algoritmilor
Să presupunem că pentru o anumită problemă am elaborat un algoritm şi am putut calcula şi timpul
său de executare T(n). Este natural să ne întrebăm dacă algoritmul nostru este "cel mai bun" sau există
un alt algoritm cu timp de executare mai mic.
Problema demonstrării optimalităţii unui algoritm este foarte dificilă, în mod deosebit datorită
faptului că trebuie să considerăm toţi algoritmii posibili şi să arătăm că ei au un timp de executare
superior.
Ne mărginim la a enunţa două probleme şi a demonstra optimalitatea algoritmilor propuşi, pentru a
pune în evidenţă dificultăţile care apar.

Exemplul 1.
Se cere să determinăm m=min(a1,a2,...,an).
Algoritmul binecunoscut este următorul:
m  a1
Pentru i=2,n Execută
Dacă ai<m Atunci m  ai
Sfârşit pentru
care necesită n-1 comparări între elementele vectorului a=(a1,a2,...,an).
Propoziţia 1.
Algoritmul de mai sus este optimal.
Trebuie demonstrat că orice algoritm bazat pe comparări necesită cel puţin n-1 comparări.
Demonstrarea optimalităţii acestui algoritm se face uşor prin inducţie.
Pentru n=1 este evident că nu trebuie efectuată nici o comparare.
Presupunem că orice algoritm care rezolvă problema pentru n numere efectuează cel puţin n-1
comparări să considerăm un algoritm oarecare care determină cel mai mic dintre n+1 numere.
Considerăm prima comparare efectuată de acest algoritm; fără reducerea generalităţii, putem
presupune că s-au comparat a1 cu a2 şi că a1<a2. Atunci m=min(a1,a3,...,an=1). Dar pentru

6
Metodica predării tehnicilor de programare pentru grupele de performanţă

determinarea acestui minim sunt necesare cel puţin n-1 comparări, deci numărul total de comparări
efectuat de algoritmul considerat este cel puţin egal cu n.

ANALIZA COMPLEXITĂŢII ALGORITMILOR

În cadrul acestui capitol vom prezenta câteva detalii referitoare la complexitatea algoritmilor. Vom
arăta că ordinul de complexitate al unui algoritm depinde de dimensiunea datelor de intrare, vom
prezenta noţiunile de caz mediu şi caz cel mai defavorabil şi vom introduce noţiunea de ordin de
complexitate.

TIMPUL DE EXECUŢIE

Este evident faptul că durata execuţiei unui program depinde de dimensiunea şi de particularităţile
datelor de intrare. De exemplu, putem spune cu certitudine că sortarea unui şir care conţine o mie de
numere va dura mai mult decât sortarea unui şir care conţine o sută de numere.

DATE DE INTRARE

Definiţia dimensiunii datelor de intrare depinde de problema care trebuie rezolvată. De exemplu,
pentru problema sortării unui şir de N numere, dimensiunea intrării este N. Cea mai des utilizată "măsură"
a dimensiunii datelor este numărul "obiectelor" care constituie intrarea. Totuşi, nu în toate cazurile este
utilizată o astfel de măsură. De exemplu, pentru adunarea a două numere, o măsură ar putea fi numărul
biţilor folosiţi pentru a reprezenta cele două numere.
Aşadar dimensiunea datelor de intrare este o funcţie care depinde de anumite variabile. În foarte
multe cazuri avem o singură astfel de variabilă, dar există şi situaţii în care sunt necesare mai multe. De
exemplu, dacă intrarea constă în descrierea unui graf neorientat, putem descrie dimensiunea datelor de
intrare în funcţie de două variabile: numărul nodurilor şi numărul muchiilor.

MĂSURAREA TIMPULUI DE EXECUŢIE

În principiu, timpul de execuţie al unui program este durata (exprimată în secunde, milisecunde,
nanosecunde etc.) necesară pentru ca programul să preia datele de intrare, să efectueze anumite operaţii
asupra lor şi să furnizeze datele de ieşire. Evident, acest timp depinde întotdeauna de calculatorul pe care
este executat programul. Nu ne putem aştepta ca un program care sortează un milion de numere să
necesite acelaşi timp de execuţie pe un calculator dotat cu un procesor Pentium II şi pe un calculator
Pentium IV.
Chiar dacă avem procesoare din aceeaşi familie, vom observa diferenţe vizibile între un procesor cu
frecvenţa de 2 GHz şi un procesor cu frecvenţa de 3 GHz. De fapt, chiar dacă avem acelaşi tip de

7
Metodica predării tehnicilor de programare pentru grupele de performanţă

procesor şi aceeaşi frecvenţă, pot apărea unele diferenţe de timp datorate altor factori cum ar fi: sistemul
de operare, cantitatea de memorie, rata de transfer a discului etc.
În concluzie, măsurarea exactă a timpului de execuţie nu este un criteriu valid pentru a descrie
timpul de execuţie al unui algoritm.
O măsură mult mai utilă a timpului de execuţie este dată de numărul paşilor elementari necesari
execuţiei unui algoritm.
Aşadar, dacă dimensiunea intrării este n, putem exprima numărul de paşi sub forma unei funcţii
T(n). Dacă algoritmul constă într-un număr de paşi egal cu pătratul valorii lui n vom avea T(n)=n2 .
Dacă, din diverse motive, mai avem nevoie de încă n paşi, vom avea T(n)=n+n.

CAZUL CEL MAI DEFAVORABIL ŞI CAZUL MEDIU

Timpul de execuţie al unui algoritm nu depinde doar de dimensiunea datelor de intrare, ci şi de


configuraţia acestora. De exemplu, pentru a sorta un şir de numere "aproape sortat" vom avea nevoie, în
principiu, de mai puţin timp decât pentru un şir "sortat în ordine inversă".
Din acest motiv au fost introduse noţiunile de caz mediu şi caz cel mai defavorabil. Timpul de
execuţie în cazul mediu reprezintă o medie a timpilor de execuţie pentru toate configuraţiile posibile ale
unei intrări de dimensiune dată.
Timpul de execuţie în cazul cel mai defavorabil reprezintă cel mai mare dintre timpii de execuţie
corespunzători configuraţiilor posibile ale unei intrări de dimensiune dată. De obicei, în analiza algoritmilor
se utilizează cazul cel mai defavorabil. Există trei motive pentru această alegere.
În primul rând, timpul de execuţie în cel mai defavorabil caz reprezintă o limită superioară pentru
timpul de execuţie corespunzător oricărei configuraţii de dimensiune dată. Este garantat faptul, că pentru
nici o configuraţie, nu vom avea un timp de execuţie mai mare.
În al doilea rând, în cazul multor algoritmi cazul cel mai defavorabil apare relativ frecvent. De
exemplu, pentru căutarea unei valori într-un vector, cazul cel mai defavorabil apare atunci când valoarea
nu există, iar o astfel de situaţie este destul de frecventă.
În al treilea rând, în marea majoritate a cazurilor, cazul mediu este "aproape la fel de nefavorabil"
ca şi cel mai nefavorabil caz. De exemplu, pentru a determina maximul unui şir, indiferent ce metodă
aplicăm, va trebui întotdeauna să parcurgem toate elementele şirului.
Totuşi, în anumite situaţii, timpul de execuţie pentru cazul mediu se poate dovedi util. Cea mai mare
dificultate întâmpinată în momentul în care se încearcă determinarea acestui timp este dată de faptul că,
în marea majoritate a cazurilor, nu vom putea determina timpii de execuţie pentru toate cazurile pentru
ca apoi să calculăm o medie. De aceea, va trebui să estimăm o astfel de medie fără a fi siguri că obţinem
media exactă. În principiu, în acest scop putem considera că orice configuraţie a datelor de intrare are
aceleaşi şanse să apară ca şi oricare alta. Din nefericire, în practică, această presupunere se dovedeşte
deseori falsă.

8
Metodica predării tehnicilor de programare pentru grupele de performanţă

ORDINUL DE COMPLEXITATE

Funcţiile obţinute pentru timpii de execuţie pot fi uneori foarte complicate şi, din acest motiv, devin
inutile. Tocmai de aceea a fost introdus ordinul de complexitate al unui algoritm. Acesta reprezintă o
caracterizare a funcţiei respective, o descriere a ordinului de mărime. [4] [16] [18]
Ordinul de complexitate va indica doar ordinul de mărime al funcţiei, eliminându-se toţi termenii
care nu sunt importanţi.
Din păcate, chiar pentru o instanţă 1 fixată a unei probleme, numărarea instrucţiunilor executate este
o sarcină foarte dificilă. Din această cauză se socoteşte suficient a se măsura de câte ori se repetă
instrucţiunea care se execută cel mai mult. Aceasta este instrucţiunea dominantă, şi se găseşte de regulă
în interiorul tuturor buclelor. Numărul de repetiţii al instrucţiunii dominante este o aproximaţie rezonabilă
pentru numărul total de instrucţiuni executat de algoritm. Oricum, din moment ce nici o instrucţiune nu
se mai execută atât de mult, dacă înmulţim lungimea programului cu numărul de repetiţii al instrucţiunii
dominante avem imediat o margine superioară pentru timpul de execuţie.
În tabelul următor vom prezenta modul în care se stabileşte termenul dominant (coeficienţii au fost
eliminaţi).
Termen dominant Termen "dominat" Condiţii
n! an Întotdeauna
an bn a > b > 1 sau 0 < b < a < 1
an nb Întotdeauna
na nb a > b > 0 sau b < a < 0
na n a > 1
n logan a > 1
logan 1 a > 1

Ar putea părea că ar trebui să avem şi o linie care să indice că logan "domină" pe logbn dacă
a > b. Oarecum surprinzător, nu este cazul. Câteva calcule matematice simple ne arată că toţi termenii
logaritmici sunt la fel de importanţi. Avem:

Am notat prin c raportul 1/logba, pentru a sugera faptul că este o constantă. Datorită faptului că
valorile constante (coeficienţii) nu sunt luaţi în considerare, o funcţie logaritmică nu poate domina o altă
funcţie logaritmică. Din acest motiv, pentru descrierea ordinului de complexitate nici nu mai este prezentă
baza logaritmului, notaţia fiind (log n).

NOTAŢIA ASIMPTOTICĂ. SIMBOLUL LUI LANDAU

Pentru că de fapt noi socotim numai numărul de repetiţii al instrucţiunii dominante, şi nu toate
instrucţiunile executate, nu are foarte mult sens să comparăm între un algoritm cu complexitatea n şi
unul cu complexitate n+1. Toate instrucţiunile care nu au fost măsurate au o contribuţie care să facă
1
Instanţele unei probleme: mulţimea tuturor intrărilor din care se poate calcula o soluţie pentru problemă

9
Metodica predării tehnicilor de programare pentru grupele de performanţă

algoritmul cu n să dureze în realitate mai mult decât cel cu n+1. Ceea ce trebuie să comparăm de fapt
este ordinul de mărime al complexităţii, care pune în evidenţă creşteri substanţial diferite. Pentru a face
evident acest lucru se foloseşte o notaţie pentru ordinul de mărime al unei funcţii, introdus de fizicianul
Lev Davidovich Landau. [4] [16] [19]
Notaţia foloseşte simbolul („   mare”) pentru a indica mulţimea funcţiilor care cresc mai
repede decât o funcţie dată. Această notaţie compară numai funcţii la limită, în creşterea lor spre infinit.
Pentru a putea compara complexitatea a doi algoritmi care rezolvă o aceeaşi problemă în acest fel,
trebuie ca ei să poată lucra cu probleme de mărimi arbitrar de mari! [4]

Definiţie: fie dată o funcţie f : N --> N, astfel încât de la un rang încolo f(n) > 0; atunci mulţimea
funcţiilor dominate de f se notează cu (f) şi se defineşte astfel:

În cuvinte, o funcţie g este în mulţimea (f) dacă „g creşte mai încet” decât f la infinit.
Din considerentele indicate, metoda preferată pentru a indica complexitatea unui algoritm este de a
o face prin ordinul de mărime al funcţiei sale de complexitate. Din cauza că analizează această
comportare spre infinit complexitatea algoritmilor se numeşte „complexitate asimptotică”. Astfel,
complexitatea asimptotică exprimă concis o limită superioară a timpului de execuţie a unui algoritm.
În foarte multe situaţii putem estima mult mai uşor timpii de execuţie (şi ordinele de complexitate)
pentru anumite secţiuni ale algoritmilor. În această situaţie, este mult mai uşor să determinăm ordinul de
complexitate al întregului algoritm, deoarece se reduc semnificativ calculele necesare.
În concluzie, notaţia (f) se utilizează pentru a limita superior timpul necesar unui algoritm,
măsurând eficienţa acelui algoritm. Uneori este util să estimăm şi o limită inferioară a acestui timp.
În acest scop, definim mulţimea:

Introducem notaţia numită ordinul exact al lui f. Pentru a putea compara


ordinele a două funcţii, notaţia nu este însă mai puternică decât notaţia , în sensul că relaţia
este echivalentă cu

Proprietăţi ale notaţilor asimptotice


 Tranzitivitatea:
f(n)= (g(n)) şi g(n)= (h(n)) implică f(n)= (h(n))
f(n)= (g(n)) şi g(n)= (h(n)) implică f(n)= (h(n))
f(n)= (g(n)) şi g(n)= (h(n)) implică f(n)= (h(n))
 Reflexivitatea:
f(n)= (f(n))
f(n)= (f(n))
f(n)= (f(n))
 Simetria:

10
Metodica predării tehnicilor de programare pentru grupele de performanţă

f(n)= (g(n)) dacă şi numai dacă g(n)= (f(n))


 Antisimetria:
f(n)= (g(n)) dacă şi numai dacă g(n)= (f(n))

În continuare vom presupune că funcţia f(n) domină funcţia g(n). În această situaţie vom avea
întotdeauna:
 (f(n)) + (g(n)) = (f(n));
 (f(n)) · (g(n)) = (f(g(n)));
 min( (f(n)), (g(n))) = (g(n));
 max( (f(n)), (g(n))) = (f(n)).
De exemplu, presupunem că am reuşit să stabilim că ordinul de complexitate al operaţiei de citire a
datelor de intrare este (n), ordinul de complexitate al operaţiei de prelucrare al acestora este
(n2) şi ordinul de complexitate al operaţiei de scriere a datelor de ieşire este (n). În acest caz,
ordinul de complexitate al algoritmului va fi:
(n) + (n2) + (n) = (n2)
De exemplu, dacă avem T(n) = 2·n2+ 5·n + 3, ordinul de complexitate va fi (n2).
Când cineva spune « acesta este un algoritm de complexitate n2 », de fapt vrea să spună: « pentru
anumite date de intrare de mărime n algoritmul execută instrucţiunea dominantă de cel mult n2 ori ».
Dacă notăm cu (1) ordinul funcţiilor mărginite superior de funcţia constantă, obţinem ierarhia:
O(1) O(log n) O(n) O(n log n) O(n2) O(n3) O(2n)

11
Metodica predării tehnicilor de programare pentru grupele de performanţă

CAPITOLUL II

TEHNICI DE PROGRAMARE
Unele probleme se pot rezolva, altele nu. De exemplu, o problemă notorie, a cărei imposibilitate este
riguros demonstrată în anii '30 de către matematicianul englez Alan Turing, este de a decide dacă un
program se va opri vreodată pentru o anumită instanţă a datelor de intrare.
Pe de altă parte, chiar între problemele care pot fi rezolvate, teoreticienii trag o linie imaginară între
problemele care au rezolvări «rezonabil  de rapide», şi restul problemelor, care se numesc «intratabile».
În mod arbitrar, dar nu nejustificabil, o problemă se numeşte « intratabilă » dacă complexitatea ei
este exponenţială în mărimea datelor de intrare. (Nu uitaţi, este vorba de complexitate «  worst-case »
asimptotică). O problemă este « tratabilă » dacă putem scrie complexitatea ei sub forma unui polinom,
de un grad oricât de mare.
Aşa cum s-a subliniat în capitolele anterioare, complexitatea în timp a algoritmilor joacă un rol
esenţial. În primul rând un algoritm este considerat "acceptabil" numai dacă timpul său de executare este
polinomial – notăm această clasă de probleme cu P, adică de ordinul O(nk) pentru date de intrare de
mărime n, unde k este o constantă.
Pentru a ne convinge de acest lucru, vom considera un calculator capabil să efectueze un milion de
operaţii pe secundă.
n=20 n=40 n=60
n3   0,2 sec
2n 1 sec 12,7 zile 366 secole
3n 58 min 3855 secole 1013 secole

Chiar dacă în prezent calculatoarele performante sunt capabile de a efectua zeci de miliarde de
operaţii pe secundă, tabelul de mai sus arată că algoritmii exponenţiali nu sunt acceptabili.
Algoritmii cu care suntem obişnuiţi să lucrăm zi de zi sunt determinişti. Asta înseamnă că la un
moment dat evoluţia algoritmului este unic determinată, şi ca instrucţiunea care urmează să se execute
este unic precizată în fiecare moment. [15]
Un algoritm nedeterminist este corect dacă există o posibilitate de executare a sa care găseşte
răspunsul corect. Pe măsură ce un algoritm nedeterminist se execută, la anumiţi paşi se confruntă cu
alegeri nedeterministe. Ei bine, dacă la fiecare pas există o alegere, care făcută să ducă la găsirea
soluţiei, atunci algoritmul este numit corect.

12
Metodica predării tehnicilor de programare pentru grupele de performanţă

Clasa tuturor problemelor care se pot rezolva cu algoritmi nedeterminişti într-un timp polinomial se
notează cu NP (Nedeterminist Polinomial). Este clar că orice problemă care se află în P se află şi în NP,
pentru că algoritmii determinişti sunt doar un caz extrem al celor determinişti: în fiecare moment au o
singură alegere posibilă.
Iată câteva exemple de probleme NP-complete:
 Problema comis-voiajorului (turneu Hamiltonian de cost minim): dându-se o reţea de oraşe,
o reţea de drumuri între oraşe şi o lungime k, există un traseu de cost mai mic decât k
trecând prin fiecare oraş o singură dată şi revenind la punctul de plecare?
 Dându-se o mulţime de numere naturale, se poate împărţi în două mulţimi de numere de
sume egale?
 „Clica”: dându-se un graf G şi un număr k, are G un subgraf complet cu k vârfuri (adică o
mulţime de k vârfuri unite fiecare cu fiecare)?
 „Acoperire”: dându-se un graf G şi un număr k, pot alege k vârfuri în aşa fel încât toate
muchiile din G au un capăt ales?
Pentru a afirma că o problemă este NP-completă, trebuie dată o demonstraţie a inaccesibilităţii sale.

RECURSIVITATE

DESCRIERE METODĂ

“O noţiune este definită recursiv dacă în cadrul definiţiei intervine însăşi noţiunea care se defineşte ”.
Noţiunea de recursivitate din informatică derivă din noţiunea matematică denumită recurenţă.
Recursivitate este o tehnică de programare utilizată frecvent în implementarea subprogramelor şi
constă în referirea, în corpul subprogramului definit, la subprogramul însuşi.
O definiţie recursivă corectă trebuie să satisfacă condiţia de consistenţă : valoarea trebuie să fie
direct calculabilă sau calculabilă cu ajutorul unor valori direct calculabile (mai exact, procesul de
autoapelare trebuie să se oprească după un număr finit de paşi).
Deci, regula fundamentală pentru o recursie definită corect este:
 Să existe cazuri elementare, rezolvabile direct
 Cazurile care nu se rezolvă direct să progreseze către un caz elementar.
Exemplu de definiţie de funcţie care nu respectă condiţia de consistenţă, este următorul (nu pot fi
calculate valorile funcţiei pentru n>0):

cu f: NxNN

MECANISMUL DE REALIZARE A RECURSIVITĂŢII

Am precizat anterior că un subprogram este recursiv dacă se autoapelează.


Autoapelul poate fi:
 direct – subprogramul recursiv conţine un apel explicit al subprogramului respectiv

13
Metodica predării tehnicilor de programare pentru grupele de performanţă

 indirect – subprogramul recursiv apelează un alt subprogram, care, la rândul său, conţine un
apel (direct sau indirect) la primul subprogram.
La baza utilizării recursivităţii stă stiva, gestionată implicit de sistem, care, ca în cazul oricărui apel
de subprogram, reţine următoarele informaţii:
 valorile parametrilor de tip valoare
 adresele parametrilor de tip variabilă
 variabilele locale ale subprogramului
 adresa de revenire în subprogramul/programul apelant (adresa instrucţiunii aflată după
instrucţiunea de apel).

AVANTAJE ŞI DEZAVANTAJE

Avantajul metodei constă în simplificarea scrierii programelor, acestea preluând de multe ori definiţia
recursivă a unor procese de calcul, rezultând exprimări ale algoritmilor compacte şi clare.
Dezavantajul folosirii acestei metode derivă din faptul că folosirea stivei presupune un consum
suplimentar de timp şi memorie.
Există situaţii când varianta recursivă este nerecomandată – de exemplu cazul calculării numerelor
Fibonacci, deoarece se recalculează de mai multe ori aceleaşi valori (recursivitate în cascadă).

Pentru ilustrarea metodei la clasă, se recomandă analiza şi implementarea rezolvărilor pentru


următoarele probleme:
 Calculul lui n! (factorialul unui număr natural n)
 Şirul Fibonacci
 Funcţia Ackermann
 Inversarea unui cuvânt
 Cel mai mare divizor comun a 2 numere
 Suma cifrelor unui număr natural n
 Anagrame

14
Metodica predării tehnicilor de programare pentru grupele de performanţă

METODA BACTRACKING

DESCRIERE METODĂ

Metoda backtracking este o metodă de programare cu ajutorul căreia se rezolvă problemele în care:
 soluţia se poate reprezenta sub forma unui tablou X = (x1, x2, …, xn) cu x1M1, x2M2
etc. M1, M2, ..., Mn fiind mulţimi finite având s1, s2, ..., sn elemente.
 Între elementele tabloului X există anumite relaţii impuse în enunţ.

Condiţii interne
În fiecare problemă sunt date anumite relaţii care trebuie să existe între componentele
x1, x2,..., xn ale vectorului X, numite condiţii interne.

Spaţiul soluţiilor posibile


Mulţimea M1M2...Mn se numeşte spaţiul soluţiilor posibile.

Condiţii de continuare
Dacă la pasul k, condiţiile interne sunt satisfăcute, algoritmul se continuă în funcţie de cerinţe. Dacă
mai trebuie căutate componente, deoarece numărul lor se cunoaşte şi încă nu le-am obţinut pe toate, sau
componentele încă nu constituie o soluţie pe baza unor proprietăţi, condiţiile de continuare vor permite
continuarea algoritmului.

Soluţii rezultat
Acele soluţii dintre soluţiile posibile care satisfac condiţiile impuse de problemă (condiţiile
interne şi condiţiile de continuare nu cer componente în plus) se numesc soluţii rezultat. Metodă
de rezolvare a acestei categorii de probleme ar fi determinarea tuturor soluţiilor posibile şi apoi căutarea
acelora care satisfac condiţiile interne. Dezavantajul este uşor de observat deoarece timpul cerut de
această căutare este foarte mare.

Modul de lucru al metodei backtracking1


 Tabloul X se completează progresiv, începând cu prima componentă. Elementele din tablou
primesc pe rând valori, adică lui xk i se atribuie o valoare numai dacă au fost deja atribuite
valori elementelor x1, x2, ..., xk-1
 În plus, lui xk i se atribuie o valoare numai dacă pentru valorile x1, x2, ..., xk-1 şi
valoarea propusă pentru xk sunt îndeplinite condiţiile interne şi cele de continuare impuse
de problemă. (în cazul în care aceste condiţii nu sunt îndeplinite, oricum am alege următorii

1
Backtracking = parcurgerea limitată în adâncime a unui arbore conform condiţiilor de continuare

15
Metodica predării tehnicilor de programare pentru grupele de performanţă

termeni xk+1,..., xn, nu vom ajunge la o soluţie în care condiţiile interne să fie
satisfăcute)
 Dacă la pasul k condiţiile de continuare nu sunt îndeplinite trebuie să se facă o altă alegere
pentru xk din mulţimea Mk
 Dacă mulţimea Mk a fost epuizată (s-au testat toate valorile din mulţime) se decrementează
k şi se încearcă o altă alegere pentru xk-1 din mulţimea Mk-1 .

Observaţii
Acestei decrementări a lui k i se datorează numele metodei, exprimând faptul că atunci
când nu putem avansa, se avansează în sens invers (înapoi) în secvenţa curentă a soluţiei
Între condiţiile interne şi cele de continuare există o strânsă legătură. O bună alegere a
condiţiilor de continuare are ca efect reducerea numărului de calcule
Modul progresiv de completare a tabloului X (avans/revenire) este specific tehnicii LIFO (stiva).
Stiva este acea formă de organizare a datelor (structură de date) cu proprietatea că operaţiile
de introducere şi extragere a datelor se fac la un singur capăt, respectiv în vârful ei.

Altfel spus, distingem următoarele cazuri posibile la alegerea lui xk:


 Atribuie şi avansează: mai sunt valori neconsumate din Mk şi valoarea xk aleasă satisface
condiţiile de continuare  se măreşte kk+1
 Încercare eşuată: mai sunt valori neconsumate din Mk şi valoarea xk aleasă dintre acestea
nu satisface condiţiile de continuare  se va relua, încercându-se alegerea unei noi valori
pentru xk
 Revenire: nu mai există valori neconsumate din Mk  kk-1, întreaga mulţime Mk devine
disponibilă
 Revenire după determinarea unei soluţii: este reţinută soluţia.
Observaţie: Pentru a puncta modul specific de completare a tabloului X (LIFO), vom schimba notaţia
acestuia din în X în ST – stivă.

BACKTRACKING ITERATIV

Subalgoritm Backtracking:
k1
ST[k]0
Cât timp k > 0 execută:
okfals
Cât timp (ST[k]< valoare maximă permisă) AND NOT ok execută:
{mai sunt valori netestate în mulţime, deci lui ST[k] i se atribuie o
altă valoare }
ST[k]  ST[k]+1
okPosibil(k) {poate am găsit valoare posibilă pentru ST[k]}
sfârşit cât timp
Dacă Not ok Atunci

16
Metodica predării tehnicilor de programare pentru grupele de performanţă

{dacă nu, se decrementează k pentru a alege o valoare nouă pentru


aceasta}
kk-1
Altfel {dacă am ajuns la sfârşitul generării}
Dacă (k=numărul de elemente cerut) Atunci {sau altă condiţie}
Scrie_soluţia(k)
Altfel
kk+1 {trecem la următorul element din soluţie}
ST[k]0 {iniţializăm noul element din tabloul soluţie}
sfârşit dacă
sfârşit dacă
sfârşit cât timp

Condiţiile interne vor fi verificate în subalgoritmul Posibil(k). Acesta returnează adevărat


dacă adăugarea componentei STk a şirului soluţie este posibilă şi fals în caz contrar.

BACKTRACKING RECURSIV
Subalgoritm Back(k):
Pentru i=1,valoarea maximă impusă de problemă execută:
ST[k]i
Dacă Posibil(k) Atunci
{dacă am ajuns la sfârşitul generării}
Dacă (*) (k=numărul de elemente cerut) Atunci
{sau altă condiţie de continuare}
Scrie soluţia(k)
Altfel
Bacă(k+1)
sfârşit dacă
sfârşit dacă
sfârşit pentru

Un caz special îl reprezintă categoria de probleme care se implementează cu ajutorul unei matrice în
care se codifică posibilităţile de deplasare prin zone cu restricţii,regulate sau neregulate, (caz în care
soluţia se compune din două (sau mai multe) şiruri care descriu, de exemplu, coordonatele în plan).

BACKTRACKING ÎN PLAN (RECURSIV)


Subalgoritm Back_plan(x,y):
//(x,z) reprezintă coordonatele poziţiei curente
analizeaza_poz_curenta(x,y);
Dacă punct_final(x,y) Atunci soluţie()
Altfel
Pentru i=1,nr_direcţii execută
Dacă nevizitat(x+dx[i],y+dy[i]) atunci
bacă_plan(x+dx[i],y+dy[i])
Sfârşit dacă
Sfârşit pentru
Sfârşit dacă
unde:
dx,dy – deplasările corespunzătoare celor 2 axe de coordonate în plan, Ox respectiv Oy.

17
Metodica predării tehnicilor de programare pentru grupele de performanţă

Concluzii:
Soluţia se construieşte pas cu pas
Dacă se constată că, pentru o valoare aleasă, nu avem cum să ajungem la soluţie, se
renunţă la acea valoare şi se reia căutarea din punctul în care am rămas
Dacă s-au determinat componentele x1, x2, …, xk-1 ale unei soluţii parţiale, un element
xkMk nu este ataşat imediat soluţiei, ci se verifică mai întâi dacă el satisface anumite
condiţii de continuare. Dacă ele nu sunt satisfăcute, atunci xk nu este adăugat soluţiei,
încercând alt element, dacă există. Dacă Mk s-a epuizat, atunci se revine la elementul xk-1
pentru care se caută altă valoare din Mk-1, dacă există
alegere bună a condiţiilor de continuare conduce la reducerea numărului de calcule. Ideal,
condiţiile de continuare nu trebuie să fie numai necesare ci şi suficiente pentru obţinerea
unei soluţii.

AVANTAJE ŞI DEZAVANTAJE

Avantajul metodei constă în garantarea obţinerii soluţiei. Dezavantajul principal îl reprezintă timpul
de execuţie mare.
Pentru ilustrarea metodei la clasă, se recomandă analiza şi implementarea rezolvărilor pentru
următoarele probleme:
 Generarea de elemente combinatorice:
- generarea tuturor permutărilor şirului 1, 2, 3, ..., n
- generarea tuturor aranjamentelor de n luate câte m
- generarea tuturor combinărilor n luate câte m
- generarea partiţiilor mulţimii {1, 2, 3, ..., n}
 Aşezarea pe tabla de şah de dimensiune nxn a n regine, fără ca acestea să se atace
 Generarea tuturor partiţiilor unui număr natural n
 Plata unei sume cu monede de valori date
 Generarea tuturor şirurilor de n paranteze rotunde care se închid corect
 Problema comis-voiajorului
 Problema colorării hărţilor.
Se pot adăuga câteva probleme clasice de backtracking în plan:
 Problema labirintului
 Problema săriturii calului
 Problema fotografiei.

Însă scopul acestei lucrări este acela de a ilustra modul de abordare şi implementare a acestei
metode din perspectiva pregătirii copiilor pentru performanţă, caz în care algoritmii de rezolvare vor
respecta forma generală a metodei, dar obiectivul principal este acela de a găsi posibilităţi de optimizare
şi implementări cât mai specifice problemei.

18
Metodica predării tehnicilor de programare pentru grupele de performanţă

Din acest motiv, voi prezenta, comparativ, rezolvări clasice şi rezolvări optimizate pentru câteva
probleme de concurs.
Observaţie:
Deşi rezolvarea unei probleme folosind metoda backtracking garantează obţinerea soluţiei, timpul
de execuţie al unui astfel de algoritm poate fi inacceptabil de mare. În consecinţă, atunci când trebuie să
rezolvăm o problemă încercăm elaborarea unui algoritm care nu se bazează pe backtracking. Dacă nu
găsim un astfel de algoritm sau nu există, analizăm datele de intrare:
o Pentru date de intrare cu dimensiuni rezonabile, se poate aborda problema în manieră
backtracking
o Pentru date de intrare de dimensiuni mari, abordarea backtracking este inacceptabilă (se
caută altă variantă care să genereze soluţie “aproape” optimă). [12]

APLICAŢII BACKTRACKING

Generarea combinărilor

Fie mulţimea S={1,2,3,…,n} şi 1≤k≤n. Se numeşte combinare de n elemente luate câte k un


k-uplu ={a1, a2,…, ak}, unde aiS şi ai< ai+1.  i  {1,2,3,…,n-1}.[8]

Notăm cu ={( a1, a2,…, ak) aiS, ai< ai+1.  i  {1,2,3,…,n-1}}mulţimea

combinărilor.

Se cunoaşte că numărul acestora este card = .

Pe mulţimea introducem relaţia de ordine lexicografică, prin:

astfel încât aj=bj ,  j<i şi ai<bi.

Considerăm combinările ca numere scrise în baza n+1, ordinea naturală coincide cu cea
lexicografică.
Să se genereze, pentru n şi k numere naturale date, combinările de n elemente luate câte k.

Soluţie:
Spaţiul soluţiilor posibile: generarea tuturor numerelor cuprinse în intervalul (1,n).
Condiţii de continuare:
 Elementele mulţimii st={a1, a2,…, ak) trebuie să fie distincte
 Generarea mulţimilor în ordine lexicografică
Program combinari;
Type stiva=array[1..100] of integer;
Var
st:stiva;
n,k,kk:integer;
Function valid(kk:integer):boolean;
var
i:integer;
ev:boolean;

19
Metodica predării tehnicilor de programare pentru grupele de performanţă

begin
{elemente distincte}
ev:=True;
for i:=1 to kk-1 do
if st[kk]=st[i] then ev:=False;
{ordine lexicografica}
if (kk>1) And (st[kk]<st[kk-1]) then ev:=False;
valid:=ev;
end;
Function solutie(kk:integer):boolean;
begin
solutie:=(k=kk)
end;
Procedure tipar(kk:integer);
var
i:integer;
begin
for i:=1 to kk do
write(st[i],' ');
writeln;
end;
Procedure back(kk:integer);
var
i:integer;
begin
for i:=1 to n do
begin
st[kk]:=i;
if valid(kk) then
if solutie(kk) then tipar (kk)
else back(kk+1);
end;
end;
Begin
write('n='); readln(n);
write('k='); readln(k);
back(1);
End.

Soluţie [Algoritm secvenţial optimal1]:


Initializam prima multime
Pentru i=1,k Execută
Ci k
Sfârşit Pentru
Afiseaza multimea Ci
Pentru i=1, Execută
Determina NextComb
Sfârşit Pentru

Subalgoritm NextComb
jk
Cât timp cj=n-k+j Execută
jj-1;
Sfârşit Cât timp
Dacă j≠0 Atunci
cj cj+1
Pentru i=j+1,k Execută

1
Algoritm curs „Calcul paralel”, M. Drăgan, Timişoara
20
Metodica predării tehnicilor de programare pentru grupele de performanţă

Ci  Ci-1+1
Sfârşit Pentru
Afişează mulţimea Ci
Altfel exit
Sfârşit Dacă
Sfârşit Subalgoritm

Implementare algoritm
Program combinari;
Type vect=array[0..100] of integer;
Var
c:vect;
i,n,k,j:integer;
Procedure tipar;
var
i:integer;
begin
For i:=1 To k Do
Write(c[i],' ');
Writeln;
end;
Procedure Nextcomb;
var i,j:integer;
begin
While true Do
begin
j:=k;
{cautam elementul care poate fi marit}
While c[j]=n-k+j Do
j:=j-1;
{Daca s-au generat toate elementele parasim fortat}
If j=0 then exit;
{incrementam valoarea elementului curent}
c[j]:=c[j]+1;
{reinitializam elementele aflate dupa elementul curent}
For i:=j+1 to k do
c[i]:=c[i-1]+1;
tipar;
end;
end;
Begin
Write('n=');Readln(n);
Write('k=');Readln(k);
{generam si afisam prima multime}
For i:=1 To k Do
c[i]:=i;
tipar;
Nextcomb;
End.
Scanarea combinării curente de la dreapta la stânga se face în cel mult O(k) paşi. Generarea

primei combinări necesită cel mult O(k) paşi, iar generarea tuturor combinărilor necesită iteraţii,

deci timpul total este . [7]

Descompunere

Fiind dat un număr natural N, se cere să se afişeze toate descompunerile sale ca sumă de numere prime.
Soluţie:

21
Metodica predării tehnicilor de programare pentru grupele de performanţă

Spaţiul soluţiilor posibile: generarea tuturor numerelor cuprinse în intervalul (1,N).


Condiţii de continuare:
 testarea condiţiei de primalitate – subprogramul Prim(k)
 testarea condiţiei de sumă – subprogramul Suma(k)
Subalgoritm Backtracking:
k1
ST[k]0
Cât timp k > 0 execută
okfals
Cât timp (ST[k]< (N-1) AND NOT ok execută:
ST[k]  ST[k]+1
okPrim(k)
sfârşit cât timp
Dacă Not ok Atunci kk-1
Altfel
Dacă Suma(k) Atunci Scrie_soluţia(k)
Altfel kk+1
ST[k]0
Sfârşit dacă
Sfârşit dacă
Sfârşit cât timp

Subalgoritm Prime(k)
okTrue
Pentru divizor=2, Execută
Dacă ST[k] Mod divizor=0 Atunci ok False
Sfârşit pentru
Return ok

Subalgoritm Suma(k)
S0
Pentru i=1,k Execută
SS+ST[k]
Sfârşit pentru
okS=N
Return ok

Este acest algoritm un algoritm eficient?


Algoritmul generează toate numerele din intervalul (1,N), numere care, apoi, vor fi testate dacă
sunt numere prime. Câte numere din interval sunt prime? Se impune, oare, ca pe fiecare nivel al stivei să
generăm toate numerele din intervalul (1,N), ca mai apoi să le verificăm primalitatea?
Pentru eficienţă, vom calcula mai întâi toate numerele prime mai mici ca N-2; acestea vor fi
memorate în vectorul Np.
Un alt inconvenient este dat de calculul sumelor parţiale de numere prime. Remarcăm faptul că nu
este necesară recalcularea sumei parţiale S de fiecare dată când adăugăm un număr prim (Pentru
i=1,k Execută SS+ST[k]).

Program Descompune_prime;
var ST, Np:array[0..1000] of integer;

22
Metodica predării tehnicilor de programare pentru grupele de performanţă

n, K, P, S, i:integer;

Function Prim( X : integer):boolean;


var i:integer;
begin
Prim:=true;
i:=2;
while i*i<=X do
begin
if X mod i=0 then
begin
Prim:=false;
i:=X
end;
i:=i+1
end
end;

procedure scrie_sol;
var i:integer;
begin
for i:=1 to k do
write(Np[ST[i]],' ');
writeln
end;

Begin
fillchar(ST,sizeof(ST),0);
fillchar(Np,sizeof(Np),0);
write('N='); readln(N);
P:=0;
for i:=2 to N do
if Prim(i) then
begin
inc(P);
Np[P]:=i
end;
k:=1;
S:=0;
while k>0 do
begin
ST[k]:=ST[k]+1;
if (ST[k]<=P) and (S+Np[St[k]]<=N) then
if S+Np[St[k]]=N then scrie_sol
else
begin
S:=S+Np[ST[k]];
k:=k+1;
ST[k]:=ST[k-1]-1
end
else
begin
k:=k-1;
S:=S-Np[St[k]]
end
end
End.

23
Metodica predării tehnicilor de programare pentru grupele de performanţă

Subşiruri crescătoare [ Concursul interjudeţean Info-Oltenia 2002]

Fiind dat un număr natural N şi un vector V cu N componente întregi, se cer următoarele:


 să se determine toate subşirurile crescătoare de lungime [N/5];
 să se calculeze p(1)+p(2)+...+p(k), unde p(k) reprezintă numărul subşirurilor
crescătoare de lungime k.
Soluţie:
Vom scrie o singură rutină de backtracking, care va genera subşirurile crescătoare de lungime L.
Pentru a afişa soluţiile doar pentru L=[N/5] folosim variabila booleană scrie.
Punctul doi se realizează prin însumarea numărului de soluţii generate de aceeaşi procedură, cu L
luând valori între 1 şi k.
În stivă vom reţine indicele din vectorul iniţial al elementului aşezat pe poziţia i în subşir. În
procedura de backtracking, condiţia de validitate pentru a pune un element pe poziţia i este ca acesta să
se afle în şirul iniţial după elementul anterior lui din subşir (ST[i]>ST[i-1]) şi valoarea sa efectivă să
fie mai mare decât a elementului selectat anterior: V[ST[i]]≥ V[ST[i-1]].
S-a considerat "mai mare sau egal" pentru că în cerinţă se cer subşirurile crescătoare şi nu strict-
crescătoare.

program Subsiruri;
var ST,V :array[0..1000] of integer;
N,k,i :integer;
sol :longint;
scrie :boolean;
procedure Printsol(l:integer);
var i:integer;
begin
if scrie then
begin
for i:=1 to l do write(V[ST[i]],' ');
writeln
end;
sol:=sol+1
end;
procedure Bkt(l:integer);
var f,i:integer;
begin
i:=1;
ST[1]:=0;
while i>0 do
begin
repeat
ST[i]:=ST[i]+1
until ((ST[i]>ST[i-1]) and (V[ST[i]]>=V[ST[i-1]])) or (ST[i]>N);
if ST[i]<=N then
if i=l then Printsol(l)
else
begin
i:=i+1;
ST[i]:=0
end
else i:=i-1

24
Metodica predării tehnicilor de programare pentru grupele de performanţă

end
end;
Begin
write('N,k:'); readln(N,k);
for i:=1 to N do
begin
write('V[',i,']=');
readln(V[i])
end;
scrie:=true;
writeln('Subsirurile crescatoare de lungime ',N div 5,' sunt: ');
Bkt(N div 5);
sol:=0;
scrie:=false;
for i:=1 to k do Bkt(i);
write('Numarul subsirurilor crescatore de lungime <= ',K,' este: ',sol)
End.

PROBLEME DE CONCURS

Maşinuţe [ Concursul interjudeţean Grigore Moisil - Cluj] [13]

Un copil doreşte să aşeze n maşinuţe numerotate de la 1 la n în n cutii identificate prin numere de


la 1 la n. Să se afişeze toate modalităţile în care copilul poate să aşeze maşinuţele în cutii, ştiind că într-o
cutie încap cel mult m maşinuţe.

Date de intrare
Fişierul de intrare MASINI.IN conţine o singură linie pe care sunt trecute valorile n şi m, separate
printr-un spaţiu.

Date de ieşire
Fişierul de ieşire MASINI.OUT va conţine pentru fiecare soluţie obţinută câte n linii care vor descrie
conţinutul cutiilor. Pe linia i (i = 1, 2, ..., n) se scriu m numere de or dine ale maşinuţelor care
sunt puse în cutia având numărul de ordine i. Aceste numere se vor despărţi printr-un spaţiu, iar în faţa
numerelor de ordine a maşinuţelor se va scrie cuvântul cutia, apoi un spaţiu şi numărul de ordine i,
care la rândul lui este urmat de ': '. Dacă într-o cutie nu se pune nici o maşinuţă, ea nu va conţine
după ': ' nimic.

Restricţii şi precizări
1 ≤ n, m ≤ 7.
Exemplu
MASINI.IN
3
MASINI.OUT
cutia 1: 1 2
cutia 2:

25
Metodica predării tehnicilor de programare pentru grupele de performanţă

cutia 1: 1
cutia 2: 2
cutia 1: 2
cutia 2: 1
cutia 1:
cutia 2: 1 2

Soluţie: [15]
Această problemă se rezolvă prin metoda backtracking deoarece trebuie generate toate soluţiile. În
această idee vom realiza următoarea codificare a datelor:
 x va fi şirul soluţie şi vom păstra în xi numărul de ordine al cutiei în care punem maşinuţa i;
 în şirul nri păstrăm numărul (cantitatea) maşinuţelor puse în cutia i;
 în şirul pusi vom avea valoarea adevărat dacă maşinuţa i a fost pusă deja în soluţia curentă,
iar în caz contrar pusi va avea valoarea fals.

Exemplu
Fie n = 2 şi m = 3.
 x = (1, 1) cu semnificaţia că atât maşinuţa 1, cât şi maşinuţa 2 se introduc în cutia 1;
 x = (1, 2) maşinuţa 1 se introduce în cutia 1 şi maşinuţa 2 în cutia 2;
 x = (2, 1) maşinuţa 1 se introduce în cutia 2 şi maşinuţa 2 în cutia 1;
 x = (2, 2) ambele maşinuţe se introduc în cutia 2.

Pentru rezolvarea problemei avem nevoie de un algoritm care verifică condiţiile de continuare. Am
putea număra apariţiile fiecărei cutii până la pasul curent k şi am putea verifica apoi dacă numerele
obţinute nu sunt cumva mai mari decât m. Renunţăm la această idee şi vom verifica la fiecare pas k, dacă
maşinuţa k nu este pusă deja în vreo cutie şi dacă cutia în care vrem s-o punem nu este deja plină,
folosindu-ne de şirurile pus şi nr.

Subalgoritm Posibil(k):
Posibil  (nr[i] < m) şi (nu pus[k])
Sfârşit subalgoritm

Afişarea cerută în enunţ are un format special, adică trebuie să scriem cuvântul ‘cutia’,
apoi numărul de ordine al cutiei şi după ': ' numerele maşinuţelor care sunt
În acea cutie separate prin c\te un spaţiu. Subalgoritmul prin care obţinem afişarea cerută este:
Subalgoritm Afişare(x):
Pentru i=1,n execută
Scrie 'cutia ',i,': '
Pentru j=1,n execută
Dacă i = x[j] atunci scrie j,' '
Sfârşit pentru
Sfârşit pentru
Sfârşit subalgoritm
26
Metodica predării tehnicilor de programare pentru grupele de performanţă

Algoritmul de backtracking în formă recursivă este:


Subalgoritm Back(k):
Pentru i=1,n execută { putem alege dintre n cutii }
x[k]  i {încercăm să punem maşinuţa k în cutia i }
Dacă Posibil(k,i) Atunci { dacă este posibil }
pus[k]  adevărat { o punem, deci maşinuţa k este pusă }
nr[i]  nr[i] + 1 { creşte numărul maşinuţelor în cutia i }
Dacă k = n Atunci { dacă am pus şi a n-a maşinuţă }
Afişare(x) { avem o soluţie, o afişăm }
Altfel
Back(k+1) { altfel, încercăm să plasăm urm. maşinuţă}
Sfârşit dacă
pus[k]  fals {la revenire scoatem maşinuţa k din cutia i}
nr[i]  nr[i] - 1 { descreşte numărul maşinuţelor în cutia i }
Sfârşit dacă
Sfârşit pentru
Sfârşit subalgoritm

În această implementare a metodei backtracking am înlocuit traversarea şirului soluţiei cu scopul de


a verifica dacă o anumită componentă nu este deja prezentă în soluţie, prin utilizarea şirului de valori
logice pus. În plus, pentru o mai uşoară verificare a spaţiului ocupat în cutii, ne-am folosit de şirul nr.
Ceea ce apare ca element nou din această cauză se poate formula în felul următor: în momentul alegerii
unei componente din spaţiul soluţiilor posibile pentru soluţia curentă, toate entităţile care sunt atinse de
această alegere se modifică În mod corespunzător (pus[k] devine adevărat, nr[i] creşte), iar în
momentul revenirii dintr-un apel recursiv aceste valori se restaurează la starea anterioară ( pus[k]
devine fals, nr[i] descreşte), deoarece renunţăm la valoarea componentei k şi astfel toate modificările
făcute din cauza alegerii acesteia la pasul precedent se anulează. Această abordare accelerează
algoritmul, deoarece în loc să traversăm un şir, adresăm direct un element (valoare logică). Astfel
evităm generarea inutilă a multor soluţii care ulterior s-ar dovedi a fi neinteresante (incorecte).

Cal şi nebun pe tabla de şah [CEOI 2000] [17]

Pe o tablă de şah de dimensiune n × n se află un nebun în poziţia (x, y) şi un cal în poziţia


iniţială (x0, y0). Calul trebuie să ajungă din această poziţie iniţială într-o poziţie finală (x1, y1) fără
să treacă de două ori prin aceeaşi poziţie şi fără să se oprească pe un pătrat aflat în raza de acţiune a
nebunului.
Afişaţi toate secvenţele de paşi de lungime minimă prin care calul poate să ajungă din poziţia iniţială
în poziţia finală fără a fi capturat de nebun.
Date de intrare
Fişierul de intrare CALNEBUN.IN are următoarea structură:
 pe prima linie se află un număr natural diferit de 0, reprezentând dimensiunea tablei;
 pe cea de-a doua linie sunt scrise două numere naturale, despărţite printr-un spaţiu,
corespunzător poziţiei nebunului;
 pe următoarele două linii sunt înregistrate, în formatul liniei doi, poziţia iniţială a calului, precum
şi poziţia pe care trebuie să ajungă.
27
Metodica predării tehnicilor de programare pentru grupele de performanţă

Date de ieşire
Fişierul de ieşire CALNEBUN.OUT va conţine câte o linie, corespunzătoare unei soluţii. Fiecare soluţie
va fi scrisă sub forma unor perechi de numere naturale indicând traseul calului. Aceste perechi reprezintă
coordonatele pătratelor tablei de şah atinse de cal pe traseul lui începând cu poziţia iniţială şi terminând
cu poziţia finală. Perechile se vor scrie încadrate între paranteze rotunde şi în interiorul parantezei
despărţite de o virgulă.
Dacă din start calul se află în bătaia nebunului sau coordonatele citite din fişier nu se află în
interiorul tablei, în fişierul de ieşire se va scrie mesajul 'Imposibil'.
Restricţii şi precizări
 2 ≤ n ≤ 8;
 calul nu are voie să iasă de pe tablă;
 poziţia iniţială nu poate să coincidă cu poziţia finală;
 în cazul în care coordonatele iniţiale şi finale ale calului se află în interiorul tablei şi poziţia
iniţială nu este atacată de nebun, atunci va exista întotdeauna cel puţin o soluţie.
Exemplu
CALNEBUN.IN
6
2 3
2 2
4 4
CALNEBUN.OUT
(2,2)(4,3)(2,4)(3,6)(4,4)
(2,2)(4,3)(5,5)(3,6)(4,4)
(2,2)(4,3)(5,5)(6,3)(4,4)
(2,2)(4,3)(6,4)(5,2)(4,4)
(2,2)(4,3)(5,1)(6,3)(4,4)
(2,2)(4,3)(3,1)(5,2)(4,4)

Soluţie1:
În figura de mai jos sunt haşurate poziţiile pe care bate nebunul când se află pe poziţia N având
coordonatele (2, 4). Calul se află iniţial în poziţia de start marcată cu C (2, 2) şi trebuie să ajungă
în poziţia finală F (5, 5). El are două trasee de aceeaşi lungime minimă pentru a ajunge în poziţia
finală, si anume:
(2, 2)(3, 4)(5, 5)
(2, 2)(4, 3)(5, 5)

1
O abordare interesantă se poate găsi în [17]
28
Metodica predării tehnicilor de programare pentru grupele de performanţă

Prima observaţie pe care o facem se referă la faptul că în enunţ se cer toate soluţiile problemei care
corespund cerinţelor. În acest moment ştim că metoda de rezolvare va fi backtracking. Analizând
cerinţele, constatăm că trebuie să determinăm un minim. În această problemă minimul nu este doar un
număr (care de altfel nici nu trebuie afişat la ieşire), ci un şir de coordonate de pe tabla de şah care
corespund traseului de lungime minimă. În plus, se cer toate aceste şiruri. Prima idee ar fi să stabilim
(conform algoritmului clasic) un astfel de minim, apoi să afişăm toate soluţiile care corespund acestuia.
Astfel ar trebui să efectuăm algoritmul realizat cu metoda backtracking o dată pentru stabilirea tuturor
soluţiilor, reţinând valoarea minimă a traseului, apoi să executăm î ncă odată acelaşi algoritm pentru
găsirea tuturor soluţiilor (traseelor) având lungimea minimă.
Este evident că o astfel de soluţie nu este acceptabilă, deoarece ar conduce la un timp de execuţie
mult prea mare. Analizând în continuare problema, ajungem la concluzia că trebuie să găsim o modalitate
care nu execută integral procedura care implementează metoda backtracking de două ori.
Mai întâi ne propunem să găsim o rezolvare în care s-o executăm o singură dată. Dacă am putea
stabili minimul şirului, traversându-l o singură dată, am găsit simplificarea pe care ne-am propus-o.
În următorul algoritm presupunem că se caută (mai simplu) toate poziţiile din şirul x pe care se
află valoarea minimă a şirului x. Rezultatul se va furniza programului apelant în şirul rez de lungime j:

Subalgoritm Minim(n,x,j,rez):
min  x[1]
j  1
rez[j]  1
pentru i = 2, n execută
dacă min > x[i] atunci
j  1
rez[j]  i
min  x[i]
altfel
dacă min = x[i] atunci
j  j + 1
rez[j]  i
sfârşit dacă
sfârşit dacă
sfârşit pentru
sfârşit subalgoritm

Dar în cazul nostru trebuie reţinute soluţii care sunt şiruri de coordonate şi nu doar indici. Alegem
altă cale de rezolvare. Vom scrie rezultatul curent în fişier şi atunci când găsim unul care corespunde
aceluiaşi minim, deschidem fişierul cu Append şi îl scriem, iar când găsim o soluţie corespunzătoare unui
minim mai mic decât cel curent, deschidem fişierul cu ReWrite, astfel începând scrierea grupului nou de
soluţii.
Se poate observa că pe lângă această modalitate mai există şi altele care rezolvă problema.
De exemplu, putem presupune că traseul minim are lungimea minimă 1. Apelăm procedura
Back(i,j,pas) şi căutăm trasee având această lungime. Dacă găsim un astfel de traseu, îl scriem în
fişier, dacă nu, atunci mărim valoarea minimului la 2 şi căutăm trasee având această lungime. Algoritmul
se opreşte, evident, atunci când am găsit cel puţin o soluţie care corespunde minimului presupus

29
Metodica predării tehnicilor de programare pentru grupele de performanţă

la pasul respectiv. Suntem siguri că astfel găsim soluţiile corespunzătoare minimului, deoarece am luat
în considerare valorile posibile în ordine crescătoare.
Acest algoritm este următorul:
Subalgoritm Minim:
min  2
ok  fals
repetă
Back(x0,y0,2,min,ok)
min  min +1
până când ok
sfârşit algoritm

Soluţia o vom codifica într-un tablou t, corespunzător tablei de şah, iniţializându-i elementele cu 0.
Atunci când în căutarea soluţiei efectuăm un pas permis într-o anumită poziţie, valoarea acelui element
va fi egală cu numărul de ordine al pasului. Evident, la revenire vom avea grijă să restabilim valoarea
iniţială a elementului respectiv pentru ca în timpul generării unei soluţii noi să putem efectua un pas în
această poziţie.
În procedura Back(i,j,pas) vom genera poziţiile (ii,jj) corespunzătoare paşilor noi pe care
un cal le poate efectua dintr-o poziţie curentă (i,j) cu ajutorul a două şiruri de constante (di şi dy)
care reprezintă deplasamentele liniilor, respectiv coloanelor celor 8 poziţii în care poate sări un cal.

Type sir=array[1..8] of -2..2;


const di:sir=(-2,-1,1,2,2,1,-1,-2);
dj:sir=(1,2,2,1,-1,-2,-2,-1);

Pentru fiecare astfel de poziţie nouă, vom verifica dacă ea se află sau nu pe tabla de şah
(if (ii in [1..n]) and (jj in [1..n])).
Dacă ne aflăm pe tablă, vom verifica dacă această poziţie este în afara bătăii nebunului (aflat în
poziţia (x,y) cu instrucţiunea if (Abs(x-ii) <> Abs(y-jj)). Totodată verificăm şi elementul
corespunzător din tabloul t. Dacă acest element are valoarea 0, înseamnă că încă nu a fost inclus în
traseu, deci putem efectua un pas aici. Acum vom verifica dacă această poziţie nu este cumva cea finală,
caz în care urmează să ne convingem că lungimea traseului este egală cu lungimea minimă propusă.
Dacă am atins poziţia finală şi numărul paşilor este egal cu min, am obţinut o soluţie şi o putem
afişa. În caz contrar vom continua traseul început, dar numai dacă numărul de ordine al pasului curent
este mai mic decât lungimea minimă propusă , deoarece nu are sens să determinăm soluţii care conduc la
o lungime mai mare decât cea propusă din moment ce acestea nu se valorifică.
În concluzie, algoritmul recursiv care implementează metoda backtracking este următorul:

Subalgoritm Back(i,j,pas):
Pentru k=1,8 execută
iii+ di[k] { indicele de linie a poziţiei noi }
jjj+ dj[k] { indicele de coloana a poziţiei noi }
{ dacă poziţia aleasă este pe tablă }
Dacă (ii  {1,2,...,n}) şi (jj  {1,2,...,n}) atunci
{dacă poziţia nu se află pe traiectoriile nebunului şi }
Dacă (x-ii)  y-jj) şi (t[ii,jj] = 0) atunci

30
Metodica predării tehnicilor de programare pentru grupele de performanţă

{ în această poziţie nu am trecut la un pas anterior }


t[ii,jj]  pas { efectuăm pasul (marcăm poziţia) }
{ dacă am ajuns Ón poziţia finală }
Dacă (ii = x1) şi (jj = y1) atunci
{dacă numărul paşilor efectuaţi este egal cu minimul }
Dacă pas = min atunci
Afişare(t)
ok  adevărat
Sfârşit dacă
Altfel
Dacă pas < min atunci
{dacă nr. paşilor efectuaţi este mai mic decât min.curent}
Back(ii,jj,pas+1) { continuăm drumul }
Sfârşit dacă
Sfârşit dacă
t[ii,jj]  0
{ştergem urma pasului efectuat,deoarece am revenit la o stare
anterioară}
Sfârşit dacă
Sfârşit dacă
Sfârşit pentru
Sfârşit subalgoritm

Afişarea rezultatului se realizează pe baza valorilor diferite de zero din tabloul t. Deoarece ştim că
numărul acestor elemente este min (accesibilă, deoarece algoritmul s-a terminat când am găsit un traseu
având cea mai mică valoare), în tabloul t vom căuta valori cuprinse între 1 şi min, în această ordine
afişând indicii de linie şi de coloană a acestora.

Subalgoritm Afişare(t):
k  1
cât timp k  min execută
pentru i=1,n execută
pentru j=1,n execută
dacă t[i,j] = k atunci
scrie i, j
k  k + 1
sfârşit dacă
sfârşit pentru
sfârşit pentru
sfârşit cât timp
sfârşit subalgoritm

Scara [Olimpiada de Informatică, faza judeţeană, 2005] [5]

Ion şi-a construit o vilă pe frumosul vârf al unui munte. Acum proiectează o scară specială, pe care
va urca de la şosea până la vilă. Diferenţa de nivel dintre şosea şi vilă este H (deci aceasta trebuie să fie
înălţimea totală a scării). Scara va avea N trepte, toate de aceeaşi lăţime, dar de înălţimi distincte două
câte două.
Ion a sesizat că efortul pe care îl depune pentru a urca o treaptă este egal cu înălţimea treptei. Dar
dacă el urcă x trepte deodată, efortul depus este egal cu media aritmetică a înălţimilor acestor x trepte
pe care le urcă deodată + un efort de valoare constantă p (necesar pentru a-şi lua avânt).

31
Metodica predării tehnicilor de programare pentru grupele de performanţă

Fiind un tip atletic, Ion poate urca mai multe trepte deodată, dar suma înălţimilor treptelor urcate
deodată nu trebuie să depăşească o valoare maximă M.
Cerinţă
Scrieţi un program care să determine efortul minim necesar pentru a urca pe o scară construită
conform restricţiilor problemei, precum şi o modalitate de a construi scara care va fi urcată cu efort
minim.

Date de intrare
Fişierul de intrare scara.in va conţine pe prima linie 4 numere naturale separate prin câte un
spaţiu H N M p (cu semnificaţia din enunţ).

Date de ieşire
Fişierul de ieşire scara.out va conţine
 pe prima linie va fi scris efortul minim necesar (cu 2 zecimale cu rotunjire);
 pe cea de a doua linie vor fi scrise N numere naturale nenule care reprezintă înălţimile celor
N trepte ale scării (în ordinea de la şosea către vilă), separate prin câte un spaţiu.
Restricţii şi precizări
0 < H  75
0 < N  8
0 < M < 14
0  p  10
Pentru datele de test, problema are întotdeauna soluţie.
Dacă există mai multe soluţii (modalităţi de a construi scara astfel încât să obţineţi efortul minim
dorit), veţi afişa prima soluţie în ordine lexicografică.
Spunem că vectorul x=(x1, x2, ..., xk) precedă în ordine lexicografică vectorul y=(y1,
y2, ..., yk) dacă există i1 astfel încât xj=yj, pentru orice j<i şi xi<yi.
Dacă a doua zecimală a efortului minim este 0, sau chiar ambele zecimale sunt 0 nu este necesar să
le afişaţi. Deci în exemplu s-ar fi putut scrie efortul minim 9 sau 9.0.
Exemplu
scara.in scara.out
10 4 5 2 9.00
1 4 2 3

Soluţie:
Reprezentarea informaţiilor
 Vectorul în care generăm soluţiile: sol, cu n componente, cu semnificaţia
sol[i]=înălţimea treptei i
 Soluţia care necesită efort minim o vom reţine în vectorul solmin
 Pentru a verifica dacă toate înălţimile sunt distincte vom construi vectorul caracteristic al
înălţimilor: uz cu M componente (nu putem folosi înălţimi mai mari decât M)
 uz[i]=1, dacă înălţimea i a fost utilizată şi 0 în caz contrar

32
Metodica predării tehnicilor de programare pentru grupele de performanţă

 htot=suma înălţimilor treptelor până la un moment dat


 efmin=efortul consumat pentru solmin
 Pentru a calcula efortul minim necesar la fiecare pas, vom utiliza un vector ef cu n
componente, cu semnificaţia:
 ef[i]=efortul minim necesar pentru a urca primele i trepte din soluţia memorată în
vectorul sol

Condiţii interne
 sol[i] din {1, 2, ..., M}
 sol[i]<>sol[j], pentru orice i<>j
 sol[1]+s[2]+...+sol[N]=H

Efortul minim pentru a urca treptele 1, 2, ..., i se calculează astfel:


ef[i]=min{ef[i-1]+sol[i],min{ef[j]+p+(sol[j+1]+sol[j+2]+...+sol[i])/(i-j),
dacă (sol[j+1]+sol[j+2]+...+sol[i])<=M}, j=i-2, i-3, ...
Implementare algoritm în C++
#include <fstream.h>
#include <iomanip.h>
#define InFile "scara.in"
#define OutFile "scara.out"
#define NMax 101
#define HMax 101

int sol[NMax], solmin[NMax], uz[HMax], htot;


double ef[NMax], efmin;
//ef[i]=efortul minim cu care urc primele i trepte din sol
int N, H, p, M;

void Citire();
void Back (int);
void Afisare();
double efort ();

void main()
{
Citire();
efmin=(double)H*N+1;
Back (1);
Afisare();
}

void Citire()
{ifstream fin(InFile);
fin>>H>>N>>M>>p;
fin.close();}

void Afisare()
{
int i;
ofstream fout(OutFile);
fout<<setprecision(2)<<efmin<<endl;
for (i=1; i<N; i++)
33
Metodica predării tehnicilor de programare pentru grupele de performanţă

fout<<solmin[i]<<' ';
fout<<solmin[N]<<endl;
fout.close();
}
double efort()
{
int k, j;
double x, sum;
for (k=1; k<=N; k++)
{x=sol[k]+ef[k-1];
//urc cu efort minim primele k-1 trepte si apoi urc treapta k de
inaltime i
sum=sol[k];
for (j=2; k-j>=0; j++)
{//urc deodata j trepte k, k-1, ..., k-j+1, daca suma inaltimilor
lor este <=M
//in sum calculez suma inaltimilor
sum+=sol[k-j+1];
if (sum>M) break;
if (sum/j+p+ef[k-j]<x)
x=sum/j+ef[k-j]+p;
}
ef[k]=x;
}
return ef[N];
}

void Back(int k)
{
int i;
double x;
if (k==N+1)
{
if (htot==H)
{x=efort();
if (x<efmin && efmin-x>0.001)
{efmin=x;
for (i=1; i<=N; i++) solmin[i]=sol[i]; }
}
}
else
for (i=1; i<=H && htot+i<=H && i<=M; i++)
if (!uz[i])
{
//care ar fi efortul minim daca as pune inaltimea treptei k=i?
sol[k]=i; htot+=i; uz[i]=1;
Back (k+1);
uz[i]=0; htot-=i;
}
}

Vilă de senator [ACM, 1997] [13]

Un senator are o vilă, reprezentată printr-o matrice ce conţine numai caracterele "1" şi "-" (minus),
unde 1 reprezintă "zid", iar 0 "spaţiu liber". Spre exemplu o vilă modestă, cu doar 3 camere arată în felul
următor:

34
Metodica predării tehnicilor de programare pentru grupele de performanţă

1111111111111
1-------1---1
1---111111111
1-------1---1
1111111111111
Problema cere să aflaţi:
a) Câte camere are vila senatorului
b) Care este camera cu suprafaţa cea mai mare
c) Ce perete trebuie îndepărtat (prin perete se înţelege un singur caracter de '1') astfel încât să
se obţină o cea mai mare cameră.
d) se cere o singură soluţie.

Datele de intrare
Se citesc din fişierul "vila.in" ce are următorul format:
 pe prima linie se găsesc două numere naturale n şi m despărţite printr-un spaţiu
(1<=n,m<=100), care reprezintă numărul de linii n, respectiv numărul de coloane m al
matricei
 pe următoarele n linii se găsesc cate m caractere "1" sau "-"
Datele de ieşire
Fişierul "vila.out", va avea următorul format
 prima linie conţine numărul de camere
 a doua linie conţine aria camerei de suprafaţă maximă
 a treia linie conţine coordonatele zidului eliminat şi aria camerei de suprafaţă maximă
rezultată

Exemplu:
1)
vila.in vila.out Observaţie:
5 13 4 Camerele nu se învecinează
1111111111111 17 pe diagonala.
1-------1---1 4 9 22
1---1111-1111
1-------1---1
1111111111111

2)
vila.in
4 12 vila.out Observaţie:
111111111111 2 Vila se consideră
-----11----- 10 înconjurată de ziduri
-----11----- 1 1 11
111111111111

Soluţie1:

1
Idee de rezolvare preluată din [11]
35
Metodica predării tehnicilor de programare pentru grupele de performanţă

Rezolvarea problemei se bază pe fill (backtracking recursiv în plan). Problema avea totuşi două
capcane:
I. Prima dintre ele este legată de gestionarea corectă a stivei. O procedură de genul
"procedure fill(x,y:integer)" este din start greşită, deoarece nu avem suficient spaţiu pe stiva
pentru a parcurge in felul acesta o matrice de 10000 de elemente. O implementare corectă este
următoarea:
procedure fill;
begin
.....
inc(x);fill;dec(x);
dec(x);fill;inc(x);
inc(y);fill;dec(y);
dec(y);fill;inc(y);
.....
end;
unde x si y sunt variabile globale. În acest fel, pe stiva se alocă numai apelul de procedură (şi nici
un parametru). Este de reţinut această metodă şi pentru alte tipuri de proceduri recursive.
II. A doua capcană era legată de algoritmul folosit în determinarea peretelui ce trebuie scos. O variantă de
genul "scot fiecare perete, şi fac un fill pornind din locul unde se află peretele pentru a determina aria
camerei rezultate" este total ineficientă, deoarece măreşte în mod drastic complexitatea rezolvării. Ca
idee, pentru fiecare element (i,j) din matrice trebuie să cunosc aria camerei din care face parte,
arie[i,j]. Atunci pentru fiecare perete (x,y), aria camerei ce rezultă prin îndepărtarea lui este
1+arie[x-1,y]+arie[x+1,y]+arie[x,y-1]+arie[x,y+1].
Bineînţeles, se verifică sp, nu adun de doua ori aria aceleaşi camere la îndepărtarea unui perete. De
asemenea aria a[i,j] pentru (i,j) perete este zero.
Implementare algoritm Pascal
{$A+,B-,D+,E-,F+,G+,I-,L+,N+,O-,P-,Q-,R-,S-,T-,V+,X+}
{$M 65200,0,655360}
var
fil :text;
N,M,i,j,k,smax,mi,mj,t :integer;
A :array[1..100] of string[100];
C :array[1..100,1..100] of integer;
V :array[1..10000] of integer;
U :array[1..10000] of byte;

Procedure fill;
begin
if (A[i,j]<>'-') or (c[i,j]<>0) then exit;
C[i,j]:=k;
inc(V[k]);
if i>1 then begin dec(i); fill; inc(i) end;
if j>1 then begin dec(j); fill; inc(j) end;
if i<N then begin inc(i); fill; dec(i) end;
if j<M then begin inc(j); fill; dec(j) end;
end;

Begin
assign(fil,'VILA.IN'); reset(Fil); readln(fil,N,M);
for i:=1 to N do readln(fil,A[i]);
close(fil);

36
Metodica predării tehnicilor de programare pentru grupele de performanţă

fillchar(C,sizeof(C),0);
fillchar(V,sizeof(V),0);
k:=0;
smax:=0;
for i:=1 to N do
for j:=1 to M do
if (A[i,j]='-') and (C[i,j]=0) then
begin
inc(k);
Fill;
if V[k]>smax then smax:=V[k]
end;
assign(fil,'VILA.OUT'); rewrite(fil);
writeln(fil,k);
writeln(fil,smax);
smax:=0;
fillchar(u,sizeof(u),0);
for i:=1 to N do
for j:=1 to M do
if A[i,j]='1' then
begin
t:=0;
if (i>1) and (A[i-1,j]='-') then begin
t:=t+V[C[i-1,j]]; u[c[i-1,j]]:=1
end;
if (j>1) and (A[i,j-1]='-') and (u[c[i,j-1]]=0) then begin
t:=t+V[C[i,j-1]]; u[c[i,j-1]]:=1
end;
if (j<M) and (A[i,j+1]='-') and (u[c[i,j+1]]=0) then begin
t:=t+V[C[i,j+1]]; u[c[i,j+1]]:=1
end;
if (i<N) and (A[i+1,j]='-') and (u[c[i+1,j]]=0) then
t:=t+V[C[i+1,j]];
if t>smax then begin
smax:=t; mi:=i; mj:=j
end;
if (i>1) and (A[i-1,j]='-') then u[c[i-1,j]]:=0;
if (j>1) and (A[i,j-1]='-') then u[c[i,j-1]]:=0;
if (j<M) and (A[i,j+1]='-') then u[c[i,j+1]]:=0
end;
if mi+mj=0 then writeln(fil,'nu exista pereti de daramat...')
else writeln(fil,mi,' ',mj,' ',smax+1);
close(fil)
End.

37
Metodica predării tehnicilor de programare pentru grupele de performanţă

METODA GREEDY1

DESCRIERE METODĂ

Metoda rezolvă probleme de optim în care soluţia se construieşte pe parcurs. Optimul global se
determină prin estimări succesive ale optimului local. Dintr-o mulţime de elemente A trebuie determinată
o submulţime B, care verifică anumite condiţii şi care, de obicei, este soluţia unei probleme de
optimizare. Soluţia problemei se construieşte treptat. Iniţial B este mulţimea vidă. Se adaugă în B
succesiv elemente din A, atingându-se de fiecare dată un optim local. Dar, această construire nu
asigură întotdeauna atingerea unui optim global. De aceea metoda greedy nu poate fi aplicată decât dacă
se demonstrează că modul de construire a mulţimii B duce la obţinerea unui optim global. [12]
Datorită modului de construire a soluţiei, metoda se mai numeşte metoda optimului local.

Forma generală a metodei Greedy:

Subalgoritm Greedy(A,B):
B  Ø
Cât timp nu Soluţie(B) şi A ≠ Ø execută
Alege(A,b)
Elimină(A,b)
Dacă Posibil(B,b) Atunci
Adaugă(B,b)
Sfârşit dacă
Sfârşit cât timp
Dacă Solutie(B) Atunci scrie B
Altfel scrie 'Nu s-a gasit solutie.'
Sfârşit dacă
Sfârşit subalgoritm
În acest algoritm am utilizat următoarele subalgoritmi:
 Subalgoritmul Soluţie(B) de tip funcţie verifică dacă B este soluţie optimă a
problemei;
 Alege(A,b) extrage cel mai promiţător element b din mulţimea A pe care îl poate alege la
un moment dat;
 Subalgoritmul Posibil(B,b) de tip funcţie verifică dacă este posibil să se obţină soluţie,
nu neapărat optimă, prin adăugarea lui b la mulţimea B.

Observaţii:
La fiecare pas se alege cel mai promiţător element la momentul respectiv. Dacă un element
se introduce în mulţimea B, el nu va fi niciodată eliminat de acolo.
Dacă se alege un element din A care nu se poate adăuga mulţimii B, el se elimină din A şi nu
se mai testează ulterior.

1
Greedy - lacom
38
Metodica predării tehnicilor de programare pentru grupele de performanţă

În rezolvarea problemelor, de multe ori este utilă ordonarea mulţimii A înainte ca algoritmul propriu-
zis să fie aplicat în funcţie de cerinţele problemei. Datorită or donării, elementele din A vor fi testate pe
rând, începând cu primul.

AVANTAJE ŞI DEZAVANTAJE

Avantajul metodei constă în faptul că algoritmul oferă întotdeauna o soluţie. Dezavantajul: algoritmii
de tip greedy nu asigură întotdeauna găsirea soluţiei optime, chiar dacă la fiecare pas se determină
soluţia optimă pentru pasul respectiv. De aceea, în momentul în care rezolvăm o problemă prin această
metodă, va trebui să găsim o demonstraţie matematică riguroasă referitoare la optimalitatea globală a
soluţiei. De cele mai multe ori ea se face prin inducţie matematică sau prin reducere la absurd.
Observaţii:
Metoda Greedy poate fi privită ca un caz particular al metoda Backtracking, în care se
renunţă la mecanismul de întoarcere;
Pentru a evita trierea tuturor submulţimilor mulţimii A în metoda Greedy se utilizează un
criteriu (o regulă) care asigură alegerea directă a elementelor necesare.
Tehnica Greedy conduce la timp de calcul polinomial. Să presupunem că mulţimea din care se face
alegerea are n elemente si că soluţia are tot n elemente (caz maxim). Se fac n alegeri, la fiecare alegere
se fac n teste, rezulta un algoritm cu timp O(n2).
De multe ori este necesar ca elementele mulţimii A să fie sortate, pentru ca apoi să alegem din
acestea, iar sortarea necesita un timp minim O(n * log2n). Însă sortarea se efectuează la început. Prin
urmare, acest timp se adună, deci nu influenţează rezultatul. [15]

Problemele în care trebuie aplicată metoda Greedy:


 determinarea ordinii în care se vor servi persoanele care stau la o coadă, astfel încât timpul
mediu de aşteptare să fie minim;
 determinarea submulţimii de sumă maximă a unei mulţimi de numere reale date;
 eliminarea unor puncte date de-a lungul unei linii drepte, astfel încât distanţa minimă dintre
oricare două puncte succesive să fie cel puţin egală cu o distanţă dată;
 problema benzii magnetice (Să se stabilească ordinea în care se vor înregistra N fişiere
pe o bandă magnetică, astfel încât timpul mediu de accesare a lor să fie minimă. Se ştie că
pentru accesarea unui fişier, toate cele înregistrate înaintea lui trebuie citite);
 problema continuă a rucsacului (Într-un rucsac încap obiecte de greutate totală G. Cunoscând
greutăţile şi valorile a N obiecte, să se determine care trebuie împachetate în rucsac pentru a
obţine o valoare totală maximă.);
 obţinerea unei configuraţii de N numere plasate pe N + 1 poziţii (o poziţie fiind liberă) dintr-o
configuraţie iniţială dată în care există, de asemenea, o poziţie neocupată de nici un număr; un
număr poate fi mutat dintr-o anumită poziţie doar în poziţia liberă;
 eliminarea de către doi jucători a unor numere dintr-un şir de numere, ştergând un număr de
la una din marginile şirului; se declară câştigător cel care şterge numere având suma maximă;

39
Metodica predării tehnicilor de programare pentru grupele de performanţă

 închirierea unei cabane pe anumite intervale de timp solicitate, astfel încât numărul
solicitanţilor serviţi să fie maxim;
 problema spectacolelor (Într-o sală de spectacole trebuie planificate cât mai multe spectacole
dintre cele N existente în repertoriu, astfel încât fiecare să respecte ora de începere şi de
încheiere planificate);
 descompunerea unui şir de numere dat în număr minim de subşiruri descrescătoare; ordinea
din subşiruri trebuie să fie aceeaşi cu ordinea din şirul dat:
 coduri Huffman;
 analiza problemei plăţii sumei cu bancnote de valori date; găsirea unei mulţimi de monede
pentru care algoritmul furnizează (respectiv nu furnizează) soluţie optimă. [15]

APLICAŢII GREEDY

Plata unei sume

Pentru plata unei sume S avem la dispoziţie n tipuri de monede, printre care şi moneda cu valoarea
1. Să se găsească o modalitate de plată a sumei cu un număr minim de monede.
Soluţie:
Algoritmul folosit este foarte simplu. Se ia moneda cu valoarea cea mai mare şi se foloseşte de câte
ori este posibil. Apoi moneda cu valoarea imediat următoare şi aşa mai departe.
Exemplu: S=13 n=3 M1=7 M2=3 M3=1
Se foloseşte moneda M1 de S div M1=13 div 7=1 ori.
Apoi M2 de S div M2=6 div 2=3 ori.
Am găsit o modalitate de plată cu 4 monede: S=13=7+2+2+2.
Algoritmul folosit nu conduce tot timpul la soluţia optimă, dar este foarte eficient. Putem găsi uşor
un contraexemplu: S=17 n=3 M1=7 M2=5 M3=1 , soluţia algoritmului va avea 5 monede:
S=17=7+7+1+1+1, în timp ce soluţia optimă are numai 3 monede: S=17=7+5+5.
Programul constă dintr-o sortare şi o parcurgere a vectorului de monede. Complexitatea algoritmului
este O(n× lg n+n)=O(n× lg n).

program Plata_sumei;
var M, F :array [1..100] of integer;
S, n, i :integer;

procedure Citire;
var i:integer;
f:text;
begin
assign(f,’mode.in’); Reset(f);
readln(f,S,n);
for i:=1 to n do
read(f,M[i])
close(f);
end;

40
Metodica predării tehnicilor de programare pentru grupele de performanţă

procedure QuickSort(li, ls: integer);


var i, j, x, y: integer;
begin
i := li; j := ls; x := M[(li+ls) div 2];
repeat
while M[i] > x do i := i + 1;
while x > M[j] do j := j - 1;
if i <= j then begin
y := M[i]; M[i] := M[j]; M[j] := y;
i := i + 1; j := j - 1;
end;
until i > j;
if li < j then QuickSort(li, j);
if i < ls then QuickSort(i, ls);
end;
Begin
Citire;
QuickSort(1,n);
FillChar(F,2*n,0);
i:=0;
while S>0 do begin
i:=i+1;
F[i]:=S div M[i];
S:=S-M[i]*F[i]
end;
writeln('Am folosit: ');
for i:=1 to n do writeln(F[i],' monede de ',M[i],' lei');
End.

Problema continuă a rucsacului [12]

Se consideră un rucsac de capacitate (greutate) maximă G şi n obiecte caracterizate prin:


 greutăţile lor g1,...,gn;
 câştigurile c1,...,cn obţinute la încărcarea lor în totalitate în rucsac.
Din fiecare obiect poate fi încărcată orice fracţiune a sa. Se cere o modalitate de încărcare de
(fracţiuni de) obiecte în rucsac, astfel încât câştigul total să fie maxim.
Soluţie:
Prin soluţie înţelegem un vector x=(x1,…,xn) cu

O soluţie optimă este soluţie care maximizează funcţia .

Dacă suma greutăţilor obiectelor este mai mică decât G, atunci încarc toate obiectele:
x=(1,...,1). De aceea presupunem în continuare că g1+...+gn>G.
Conform strategiei Greedy, ordonez obiectele descrescător după câştigul la unitatea de greutate,
deci lucrăm în situaţia:

(*)

Algoritmul constă în încărcarea în această ordine a obiectelor, atâta timp cât nu se depăşeşte
greutatea G (ultimul obiect poate fi eventual încărcat parţial):
G1  G { G1 reprezintă greutatea disponibilă }
41
Metodica predării tehnicilor de programare pentru grupele de performanţă

Pentru i=1,n Execută


Dacă giG1 Atunci
xi1;
G1G1-gi
Altfel
xiG1/gi;
Pentru j=i+1,n Execută
xj  0
Sfârşit Pentru
stop
Sfârşit Dacă
Sfârşit Pentru

Am obţinut deci x=(1,...,1,xj,0,...,0) cu xj[0,1]. Arătăm că soluţia astfel obţinută este


optimă.

Fie y soluţia optimă: y=(...,yk,...) cu

Dacă yx, fie k prima poziţie pe care ykxk.


Observaţii:
 kj: pentru k>j se depăşeşte G.
 yk<xk:
o pentru k<j: evident, deoarece xk=1;
o pentru k=j: dacă yk>xk se depăşeşte G.

Considerăm soluţia: y’=(y1,…,yk-1,xk,yk+1,…, yn) cu <1 (primele k-1 componente


coincid cu cele din x). Păstrez greutatea totală G, deci:

gkxk+(gk+1yk+1+...+gnyn)=gkyk+gk+1yk+1+...+gnyn. Rezultă:
gk(xk-yk)=(1-)(gk+1yk+1+…+gnyn) (**)
Compar performanţa lui y' cu cea a lui y:

f(y’)-f(y) = ckxk +ck+1yk+1 +...+ cnyn - (ckyk+ck+1yk+1 +...+cnyn) =


= ck(xk-yk) + (-1)(ck+1yk+1+...+cnyn) =
= ck/gk[gk(xk-yk)+(-1)(gk/ckck+1yk+1+...+gk/ckcnyn)]
Dar -1>0 şi gk/ck gs/cs, s>k.

Atunci f(y’)-f(y)>ck/gk [gk(xk-yk)+(-1)(gk+1yk+1+...+gnyn)]=0,


deci f(y')>f(y). Contradicţie.
Problema discretă a rucsacului diferă de cea continuă prin faptul că fiecare obiect poate fi
încărcat numai în întregime în rucsac.
Să observăm că aplicarea metodei Greedy eşuează în acest caz. Într-adevăr, aplicarea ei pentru:
G=5, n=3 şi g=(4,3,2), c=(6,4,2.5)
are ca rezultat încărcarea primul obiect; câştigul obţinut este 6. Dar încărcarea ultimelor două
obiecte conduce la câştigul superior 6.5.

42
Metodica predării tehnicilor de programare pentru grupele de performanţă

Arborele parţial de cost minim (APM)

Propoziţie: Fie G un graf neorientat conex G=(X,U), cu funcţia de cost . Există un


subgraf parţial H al lui G conex şi de cost minim, şi mai mult acesta este arbore.
Fie G=(X,U), un graf neorientat cu muchiile etichetate cu costuri strict pozitive. Se cere
determinarea unui graf parţial de cost minim.
Ca exemplificare, să considerăm n oraşe iniţial nelegate între ele. Pentru fiecare două oraşe se

cunoaşte costul conectării lor directe (considerăm acest cost egal cu + dacă nu este posibilă conectarea
lor). Constructorul trebuie să conecteze oraşele astfel încât din oricare oraş să se poată ajunge în oricare
altul. Ce legături directe trebuie să aleagă constructorul astfel încât costul total al lucrării să fie minim?
Este evident că graful parţial căutat este un arbore (dacă ar exista un ciclu, am putea îndepărta
orice muchie din el, cu păstrarea conexităţii şi micşorarea costului total).
Soluţie:
Vom aplica metoda Greedy: adaug mereu o muchie de cost minim dintre cele nealese şi care nu
formează un ciclu cu precedentele muchii alese.
Acest algoritm poartă numele de algoritmul lui Kruskal.
Fie graful neorientat conex G=(X,U) cu X={1,2,..,n} şi funcţia cost .
Se pleacă iniţial de la n arbori disjuncţi H1,H2,...,Hn. La pasul k al algoritmului avem n-k arbori
disjuncţi, fie aceştia H1,H2,..,Hn-k, pentru care Hi=(Xi, Ui), i=1...(n-k) astfel încât:

Vom încerca unificarea (uniformizarea) acestor arbori. Alegerea, pentru a fi unificaţi, a doi arbori
se face astfel: dintre toate muchiile nealese încă, se selectează acea muchie de cost minim care are cele
două extremităţii (u,v) în două mulţimi diferite Xu şi Xv, muchie care nu duce la apariţia unui ciclu în
graful parţial de cost minim ce se construieşte.
Descriere algoritm:
Se pleacă de la graful parţial H=(V,A). Acesta va avea aşadar n componente conexe. Deoarece
ştim că un arbore cu n vârfuri are n–1 muchii, rămâne să stabilim modul de selectarea a arcelor
arborelui dintre muchiile grafului G.
Mai întâi se adaugă la graf muchia de cost minim şi se obţine un graf parţial cu n–1 componente
conexe. Dintre toate muchiile nealese, se selectează, la un moment dat, muchia de cost minim care să nu
formeze cicluri cu muchiile deja alese (se alege o muchie de cost cât mai mic ale cărei extremităţi se află
în componente conexe diferite). Prin adăugarea unei astfel de muchii, se reduce cu o unitate numărul
componentelor conexe (cele două componente conexe în care se aflau extremităţile muchiei selectate
devin în acest fel o unică componentă conexă).
Algoritmul se termină când se obţine un graf parţial H astfel încât oricare din muchiile nealese
formează cicluri cu muchiile din H.

43
Metodica predării tehnicilor de programare pentru grupele de performanţă

Pentru a marca componenta conexă în care se află fiecare vârf la un moment dat, vom folosi un
vector C cu n elemente (C[i] indică componenţa conexă în care se găseşte vârful i).
Etapele algoritmului sunt următoarele:
 Pas 1
Iniţializarea vectorului componentelor conexe C
Pentru i = l,n execută
C[i] : = i ;
 Pas 2
Se alcătuieşte lista U a muchiilor grafului G, în ordinea crescătoare a costurilor
 Pas 3
ct:= 0; {costul APM este iniţial 0}
ms:=0; {numărul muchiilor selectate iniţial este 0}
k:=1;
 Pas 4
Cât timp ms<n-1 execută
4.1 Repetă
Treci la următoarea muchie (u,v) U
Până când C[u]<>C[v];
4.2 Pune muchia (u,v) în H;
4.3 ct:=ct + Cost(u,v);
4.4 ms:=ms+1;
4.5 Pentru i := 1, n execută
{unifică componentele conexe din care fac parte vârfurile u şi v }
Dacă C[i]=max(C[u],C[v]) atunci
C[i]:=min(C[u],C[v]);
 Pas 5
Scrie ct;

Observaţie:
Deoarece la unificarea componentelor conexe din care fac parte vârfurile u şi respectiv v am notat
componenta conexă comună cu min(C[u],C[v]), în final toate elementele vectorului C sunt egale cu
1. Dacă notam componenta conexă comună la întâmplare, fie cu C[u], fie cu C[v], în final elementele
vectorului C ar fi fost de asemenea egale între ele, dar cu neapărat egale cu 1. Acest lucru nu ar fi
schimbat cu nimic algoritmul general, iar pasul 4.5 poate fi scris sub forma:
4.5 Pentru i:=1,n execută
{unifică componentele conexe din care fac parte vârfurile u şi v}
Dacă C[i]=C[u] atunci
C[i]:=C[v];

Complexitatea algoritmului : O(max(m2, nm)).

PROBLEME DE CONCURS

44
Metodica predării tehnicilor de programare pentru grupele de performanţă

Reactivi [ Olimpiada de Informatică, faza judeţeană, 2004]

Într-un laborator de analize chimice se utilizează N reactivi. Se ştie că, pentru a evita accidentele sau
deprecierea reactivilor, aceştia trebuie să fie stocaţi în condiţii de mediu speciale. Mai exact, pentru
fiecare reactiv x, se precizează intervalul de temperatură [minx, maxx] în care trebuie să se încadreze
temperatura de stocare a acestuia.
Reactivii vor fi plasaţi în frigidere. Orice frigider are un dispozitiv cu ajutorul căruia putem stabili
temperatura (constantă) care va fi in interiorul acelui frigider (exprimată într-un număr întreg de grade
Celsius).
Cerinţă
Scrieţi un program care să determine numărul minim de frigidere necesare pentru stocarea
reactivilor chimici.
Date de intrare
Fişierul de intrare react.in conţine:
 pe prima linie numărul natural N, care reprezintă numărul de reactivi;
 pe fiecare dintre următoarele N linii se află min max (două numere întregi separate printr-
un spaţiu); numerele de pe linia x+1 reprezintă temperatura minimă, respectiv temperatura
maximă de stocare a reactivului x.
Date de ieşire
Fişierul de ieşire react.out va conţine o singură linie pe care este scris numărul minim de frigidere
necesar.
Restricţii
 1 <= N <= 8000
 -100 <= minx <= maxx <= 100 (numere întregi, reprezentând grade Celsius), pentru orice x
de la 1 la N
 un frigider poate conţine un număr nelimitat de reactivi
Exemple
react.in react.out react.in react.out react.in react.out
3 2 4 3 5 2
-10 10 2 5 -10 10
-2 5 5 7 10 12
20 50 10 20 -20 10
30 40 7 10
7 8

Soluţie:
Problema se poate rezolva prin metoda greedy. O variantă mai explicită a enunţului este
următoarea:
"Se consideră N intervale pe o axă. Să se aleagă un număr minim de puncte astfel încât fiecare
interval să conţină cel puţin unul dintre punctele alese."

45
Metodica predării tehnicilor de programare pentru grupele de performanţă

Facem o primă observaţie: pentru orice soluţie optimă există o soluţie cu acelaşi număr de puncte
(frigidere), în care fiecare punct să fie sfârşitul unui interval. Aceasta se poate obţine mutând fiecare
punct spre dreapta, până când ar ajunge la sfârşitul intervalului care se termină cel mai repede, dintre
intervalele care îl conţin. Se observă că noua soluţie respectă restricţiile din enunţ.
În continuare ne vom concentra pe găsirea unei soluţii de acest tip.
Sortăm reactivii după sfârşitul intervalului. Pentru intervalul care se termină cel mai repede, alegem
ultimul punct al său ca temperatură a unui frigider. Se observă că această alegere este cea mai bună,
dintre toate alegerile unui punct în intervalul respectiv, în sensul că mulţimea intervalelor care conţin
punctul este mai mare (conform relaţiei de incluziune), decât mulţimea corespunzătoare oricărei alte
alegeri. Acest fapt este adevărat, deoarece mutarea punctului mai la stânga nu duce la selectarea unor
noi intervale.
Intervalele care conţin punctul respectiv sunt eliminate (reactivii corespunzători pot fi plasaţi într-un
frigider), iar procesul continuă cu intervalele rămase, în acelaşi mod
Notăm cu D numărul de temperaturi întregi din intervalul care conţine temperaturile din enunţ. Se
observă că D este cel mult 201.
Citirea datelor de intrare are ordinul de complexitate O(N).
Sortarea intervalelor după capătul din dreapta are ordinul de complexitate O(N · log N).
Urmează F paşi, unde F este numărul de frigidere selectate. Deoarece fiecare frigider este setat la o
temperatură întreagă, F ≤ D.
În cadrul unui pas, determinarea intervalului care se termină cel mai repede, pe baza vectorului
sortat, are ordinul de complexitate O(1). Eliminarea intervalelor care conţin un anumit punct (sfârşitul
intervalului care se termină cel mai repede) are ordinul de complexitate O(N).
Afişarea rezultatului are ordinul de complexitate O(1). În concluzie, ordinul de complexitate al
algoritmului de rezolvare a acestei probleme este O(N · D + N · log N); deoarece în general
D > log N, considerăm ordinul de complexitate ca fiind O(N · D).

Implementare algoritm Pascal


$R-,S-}
Program Reactivi;
Type Frigider = Record
min, max: ShortInt
End;
Var f : Array[1..10000] Of Frigider;
r : Array[1..10000] Of Frigider;
Fisier : Text;
Cate, i, j, N: Integer;
min, max : ShortInt;
Function Maxim(x, y: ShortInt): ShortInt;
Begin
If x>y Then
Maxim := x
Else
Maxim := y
End;
Function Minim(x, y: ShortInt): ShortInt;

46
Metodica predării tehnicilor de programare pentru grupele de performanţă

Begin
If x<y Then
Minim := x
Else
Minim := y
End;
Function Cauta(min, max: ShortInt): Integer;
Var i: Integer;
Begin
Cauta := -1;
For i := 1 To Cate Do
Begin
If (f[i].max>=min) And (f[i].max<=max) Then
Begin Cauta := i; Break End
Else
If (f[i].min>=min) And (f[i].min<=max) Then
Begin Cauta := i; Break End
Else
If (f[i].min<=min) And (f[i].max>=max) Then
Begin Cauta := i; Break End
Else
If (f[i].max<min) Or (f[i].min>max) Then
Cauta := -1
End;
End;
Procedure Intersectie(j: Integer; min, max: ShortInt);
Begin
f[j].min := Maxim(min, f[j].min);
f[j].max := Minim(max, f[j].max)
End;
procedure QuickSortCresc(Lo, Hi: Integer);
procedure Sort(Stanga, Dreapta: Integer);
var i, j, x: integer;
y: Frigider;
begin
i := Stanga; j := Dreapta; x := r[(Stanga+Dreapta) DIV 2].min;
repeat
while r[i].min < x do i := i + 1;
while x < r[j].min do j := j - 1;
if i <= j then
begin
y := r[i]; r[i] := r[j]; r[j] := y;
i := i + 1; j := j - 1;
end;
until i > j;
if Stanga < j then Sort(Stanga, j);
if i < Dreapta then Sort(i, Dreapta);
end;
begin {QuickSort};
Sort(Lo,Hi);
end;

procedure QuickSortDescresc(Lo, Hi: Integer);


procedure Sort(Stanga, Dreapta: Integer);
var i, j, x: integer;
y: Frigider;
begin
i := Stanga; j := Dreapta; x := r[(Stanga+Dreapta) DIV 2].max;
repeat
while r[i].max > x do i := i + 1;
while x > r[j].max do j := j - 1;

47
Metodica predării tehnicilor de programare pentru grupele de performanţă

if i <= j then
begin
y := r[i]; r[i] := r[j]; r[j] := y;
i := i + 1; j := j - 1;
end;
until i > j;
if Stanga < j then Sort(Stanga, j);
if i < Dreapta then Sort(i, Dreapta);
end;
begin {QuickSort};
Sort(Lo,Hi);
end;

Begin
Assign(Fisier, 'reactivi.in'); Reset(Fisier);
ReadLn(Fisier, N);
For i := 1 To N Do
ReadLn(Fisier, r[i].min, r[i].max);
Close(Fisier);
QuickSortCresc(1, N);
i := 1; j := i+1;
While j<=N Do
Begin
While (r[j].min=r[i].min) And (j<=N) Do Inc(j);
QuickSortDescresc(i, j-1);
i := j; j := i+1
End;

f[1].min := r[1].min; f[1].max := r[1].max; Cate := 1;


For i := 2 To N Do
Begin
min := r[i].min; max := r[i].max;
j := Cauta(min, max);
If j>0 Then
Intersectie(j, min, max)
Else
Begin
Inc(Cate);
f[Cate].min := min;
f[Cate].max := max
End
End;
Assign(Fisier, 'reactivi.out'); ReWrite(Fisier);
WriteLn(Fisier, Cate);
Close(Fisier)
End.

Lupul Uriaş şi Rău [ PreOni 2006, concursul on-line infoarena] [24]

Lupul uriaş şi rău îşi doreşte să se poată juca cu prietenele sale oiţele mici şi pufoase. În calea
fericirii sale stă însă ciobănaşul Eduard care decide să nu-l lase pe lup să se joace cu toate oile sale, îl
lasă să aleagă doar câteva. Lupul se află într-un punct fix pe pajişte, iar oile stau la diferite distanţe faţă
de el. Alegerea oilor se face în mai multe etape. Lupul uriaş şi rău alege o oaie aflată la o distanţă de
maxim X şi în acel moment toate celelalte oi se vor îndepărta (la cerinţele ciobănaşului Eduard) cu
distanţa L faţă de lup. Pentru fiecare oaie se cunoaşte cantitatea de lână pe care o are, iar lupul îşi
doreşte ca suma cantităţilor de lână pentru oile alese să fie cât mai mare (ca să fie cât mai pufoase).

48
Metodica predării tehnicilor de programare pentru grupele de performanţă

 Cerinţă
Ajutaţi-l pe lupul uriaş şi rău să aleagă oile astfel încât să aibă cât mai multă lână.
 Date de intrare
Prima linie a fişierului de intrare lupu.in conţine trei numere întregi N , X si L reprezentând
numărul de oi, distanţa maximă de la care lupul poate alege oi şi distanţa cu care se depărtează oile de
lup după fiecare alegere. Pe următoarele N linii se află câte două numere întregi D şi A reprezentând
distanţa iniţială şi cantitatea de lână a fiecărei oi.
 Date de ieşire
În fişierul lupu.out veţi afişa un singur număr întreg S, reprezentând cantitatea maximă de lână
pe care o poate aduna lupul de la oile alese.
 Restricţii si precizări
1 ≤ N ≤ 100.000
1 ≤ X ≤ 500.000
Pentru 40% din teste N ≤ 1000
Toate numerele din fişierul de intrare sunt întregi din intervalul [0, 231-1]
Exemplu
lupu.in lupu.out
10 6 2 54
1 13
4 14
4 3
6 7
0 7
5 16
3 16
4 10
4 18
3 16

Soluţie:
Se construieşte vectorul T[i] care retine timpul maxim la care oaia i poate fi aleasa si notăm
T_max valoarea maxima din T.
O abordare care însă nu conduce la punctaj maxim este programarea dinamică, calculând sol[i]
[j] cantitatea maximă de lână care se poate alege cu primele i oi până la momentul j. Răspunsul se va
găsi în sol[n][T_max]. Complexitatea este O(n2) şi ar obţine aproximativ 50-60 de puncte.
    O rezolvare ce aduce 100 de puncte se bazează pe metoda greedy. Pentru fiecare valoare j de la
T_max la 1 se adaugă într-o mulţime toate cantităţile de lână A[i] pentru oile cu T[i]=j, apoi se
extrage valoarea maximă care se adaugă la soluţie, restul valorilor păstrându-se în mulţime pentru pasul
următor. Atenţie, se va extrage valoarea maximă chiar dacă la acest pas nu s-au introdus valori noi în
mulţime. Pentru a implementa eficient aceste operaţii ne vom folosi un heap care suporta operaţiile de
extragere maxim şi adăugare element în O(log n). Complexitatea finală a algoritmului va fi de
O(n log n). Demonstraţia intuitivă a faptului ca algoritmul conduce la soluţie optimă este că la fiecare
pas j se alege valoarea maximă dintre cele care nu vor mai putea fi alese la pasul j+1.

49
Metodica predării tehnicilor de programare pentru grupele de performanţă

    O alta soluţie tot greedy a problemei este sortarea descrescătoare după cantităţile de lână. Pentru
fiecare valoare apoi se vede cel mai mare timp mai mic sau egal cu T[i] şi la care nu a mai fost aleasă
nici o alta oaie. Dacă există un astfel de timp se adaugă valoare respectiva la soluţie. Acest lucru se poate
realiza cu o căutare binara a acestui timp. O alternativă la acest lucru ar fi folosirea mulţimilor disjuncte.
Iniţial se consideră fiecare moment de timp o mulţime. Notam X = minimul din mulţimea care îl conţine
pe T[i]. Daca alegem A[i] pentru a-l adăuga la soluţie se va reuni mulţimea care îl conţine pe X cu
mulţimea care îl conţine pe X-1.

Cutii [25]

S-a mutat muzeul. Obiectele au fost împachetate în cutii având forme cubice de diverse dimensiuni.
La despachetare lucrează multe persoane în paralel şi pentru a evita dezordinea, prin încăperile unde se
lucrează la despachetare s-a instalat o bandă rulantă pe care se aşează cutiile goale, cu singura
deschizătură orientată în sus.
Ştefan stă la capătul benzii şi strânge cutiile. El a primit sarcina să împacheteze cutiile unele în
altele, astfel încât numărul pachetelor de cutii să fie cel mai mic posibil.
Directorul muzeului, văzându-l pe Ştefan dezorientat datorită acestei cerinţe, s-a hotărât să-l ajute şi
a stabilit regulile următoare:
 cutiile se culeg de pe bandă în ordinea sosirii lor;
 cutia curentă se aşează într-o altă cutie, dacă aceasta are dimensiunea mai mică;
 dacă nu există pachet început în care să încapă cutia curentă, aceasta va constitui prima
cutie dintr-un pachet nou;
 într-un pachet început se aşează o singură cutie (nu se pun mai multe cutii unele lângă
altele, chiar dacă există loc);
 o cutie aşezată la un moment dat nu se mai scoate;
 un pachet început nu se aşează în alt pachet, chiar dacă acest lucru ar fi posibil;
 nici o cutie nu poate fi ignorată.
Scrieţi un program care determină numărul minim de pachete de cutii rezultate în urma muncii lui
Ştefan, precum şi secvenţele de cutii din fiecare pachet.
Date de intrare
Prima linie a fişierului de intrare CUTII.IN conţine un singur număr natural n, reprezentând
numărul cutiilor. Următoarele n linii conţin fiecare câte un număr natural, reprezentând dimensiunile
cutiilor.
Date de ieşire
Pe prima linie a fişierului CUTII.OUT se va scrie numărul minim m de pachete de cutii. Pe
următoarele m linii se vor scrie dimensiunile cutiilor pe care Ştefan le va împacheta într-un singur pachet,
în ordinea împachetării.
Restricţii
 0 ≤ n ≤ 1000;
 1 ≤ dimensiune_cutie ≤ 10.000.

50
Metodica predării tehnicilor de programare pentru grupele de performanţă

Exemplu
CUTII.IN
10
4
1
5
10
7
9
2
8
3
2
CUTII.OUT
4
4 1
5 2
10 7 3 2
9 8
Soluţie:
Această problemă a fost propusă în altă formă la o selecţie a lotului olimpic din 1999.
Pentru a rezolva problema putem folosi metoda greedy, astfel: punem cutia curentă în cea mai mică
cutie, care este mai mare decât ea, existentă printre cutiile deja poziţionate.
Şirul dimensiunilor cutiilor deschise este crescător. Această afirmaţie poate fi demonstrată uşor
prin inducţie şi prezentăm în continuare această demonstraţie.
Pentru un singur pachet afirmaţia este adevărată. În cazul în care avem un şir de n pachete
ordonate crescător şi adăugăm o cutie nouă, atunci ea fie formează un nou pachet (deci şirul este
crescător), fie intră într-un pachet deja format, şi din modul de alegere a pachetului rezultă că şirul
dimensiunilor rămâne crescător.
În concluzie, dacă folosim proprietatea că şirul este crescător, pentru a găsi locul cutiei curente vom
folosi o căutare binară în locul unei căutări secvenţiale.
Analiza complexităţii
Operaţiile de citire a datelor de intrare şi scriere a rezultatelor au ordinul de complexitate O(n).
Operaţia de împachetare a cutiilor are ordinul de complexitate O(n · log n), deoarece pentru
fiecare cutie care vine pe bandă căutăm locul unde va fi poziţionată folosind o căutare binară. În
concluzie, ordinul de complexitate a soluţiei acestei probleme este O(n) + O(n · log n)+ O(n) =
O(n · log n).

51
Metodica predării tehnicilor de programare pentru grupele de performanţă

DIVIDE ET IMPERA

DESCRIERE METODĂ

Divide et Impera este o metodă de elaborare a algoritmilor aplicabilă problemelor care pot fi
descompuse în subprobleme independente de dimensiuni mai mici, care pot fi rezolvate direct.
Dându-se o funcţie care lucrează asupra a n date, tehnica Divide et Impera („Divide şi
Stăpâneşte”) presupune o împărţire a celor n date în k submulţimi distincte, 1<=k<=n care produc k
subprobleme similare, elementare sau nu. [7]
Paradigma divide şi stăpâneşte implică trei paşi:
 Divide problema într-un număr de subprobleme
 Stăpneşte subproblemle prin rezolvarea acestora
 Combină soluţiile tuturor subproblemelor în soluţia finală pentru problema iniţială.
Subproblemele elementare se rezolvă simplu, printr-un algoritm optim, iar cele ne-elementare se
descompun la rândul lor, în subprobleme, până când toate descompunerile au ajuns la probleme
elementare care se pot rezolva imediat.
Se determină o metodă de recombinare (compunere) a soluţiile problemelor elementare pentru a
obţine soluţia problemei iniţiale.
Metoda se poate implementa atât recursiv cât şi iterativ.
Considerând k=2 (problema iniţială P descompusă în două subprobleme de dimensiuni aproximativ
egale n1,n2) şi dimensiunea minimă a unei probleme rezolvabile direct n0, atunci forma generală a
metodei este:
Subprogram div_imp(P,n,s); {n-dimensiunea problemei P}
Dacă n<n0 atunci rezolvă(n,s) {problema elementara rezolvabila direct}
altfel
descompune(n,n1,n2);
{obţinem 2 subprobleme de dimensiuni n1,n2}
div_imp(n1,s1);
div_imp(n2,s2);
{recombinăm soluţiile s1,s2 => soluţia finală s}
combină(s1,s2,s)
Sfârşit dacă

Pentru ilustrarea metodei la clasă, se recomandă analiza şi implementarea rezolvărilor pentru


următoarele probleme:
 Determinarea elementului minim/maxim dintr-un sir
 Căutarea binară
 Turnurile din Hanoi
 Determinarea cmmdc al unui şir de numere
 Sortarea prin interclasare (merge-sort)
 Sortarea rapidă (quick-sort)
 Parcurgerile în preordine, inordine şi postordine ale unui arbore binar

52
Metodica predării tehnicilor de programare pentru grupele de performanţă

 Sortarea folosind arbori de sortare

În practică, de foarte multe ori, cele n date pot fi memorate în tabloul A(1,n). Procedura generală
de împărţire în 2 subprobleme similare revine la împărţirea subşirului (xp, xq) în subşirurile:
o (xp,xm) şi (xm+1,xq) sau
o (xp,xm-1) şi (xm+1,xq)
Unde m este mijlocul subşirului (xp, xq).

TIMPUL DE CALCUL

Dacă mărimile celor două subprobleme sunt aproximativ egale, atunci timpul de calcul pentru
subprogramul anterior (div_imp) este descrisă prin următoarea formulă de recurenţă:

 g (n}, n mic
T ( n)  
T(n/2)  f (n), altfel
Unde: T(n) este timpul consumat de funcţie pentru n intrări, g(n)- timpul pentru calculul
răspunsului direct pentru intrările date, iar f(n) – timpul consumat pentru funcţiile div_imp şi compune.
Lemă: Dacă f(n)=a*n, cu a o constantă, atunci T(n) =O(n log2n) .
Observaţie: O problemă de tipul Divide et Impera poate scoate un timp optim dacă algoritmul
care rezolvă problema elementară este optim.

APLICAŢII DIVIDE ET IMPERA

Căutarea binară

Se consideră vectorul a=(a1, ...,an) ordonat crescător şi o valoare x. Se cere să se


determine dacă x apare printre componentele vectorului. [22]
Problema enunţată constituie un exemplu pentru cazul în care problema se reduce la o singură
subproblemă.
Ţinând cont de faptul că a este ordonat crescător, vom compara pe x cu elementul din "mijlocul"
vectorului. Dacă avem egalitate, algoritmul se încheie; în caz contrar vom căuta fie în "jumătatea" din
stânga, fie în cea din dreapta. Deoarece problema se reduce la o singură subproblemă, nu mai este
necesar să folosim recursivitatea.
Algoritmul este următorul:
Subprogram CautBin
p ← 1; u ← n;
Cât timp p≤u Execută
m ← (p+u)/2
Dacă a[m]=x Atunci Return True
Altfel
Dacă x<a[m] Atunci u ← m-1
Altfel p ← m+1

53
Metodica predării tehnicilor de programare pentru grupele de performanţă

Sfârşit dacă
Sfârşit dacă
Return False

Algoritmul necesită o mică analiză, legată de corectitudinea sa parţială. Mai precis, ne întrebăm:
când se ajunge la p>u?
 pentru cel puţin 3 elemente nu se poate ajunge la p>u;
 pentru 2 elemente, adică pentru u=p+1, se alege m=p. Dacă x<am, atunci up-1. Se
observă că se iese din ciclul cât timp şi am-1<x<am=ap;
 pentru un element, adică p=u, se alege m=p=u. Dacă x<am atunci up-1, iar dacă x>am
atunci pu+1; în ambele cazuri se părăseşte ciclul cât timp şi va fi returnat un rezultat
corect.

Sortare prin interclasare

Fie a=(a1,...,an) vectorul care trebuie ordonat crescător. [22]


Ideea este următoarea: împărţim vectorul în doi sub-vectori, ordonăm crescător fiecare sub-vector şi
asamblăm rezultatele prin interclasare. Se observă că este aplicată tocmai metoda Divide et Impera.
Începem cu procedura de interclasare. Fie secvenţa de indici p..u şi fie m un indice intermediar.
Presupunând că (ap,...,am) şi (am+1,...,au) sunt ordonaţi crescător, procedura Inter va ordona
crescător întreaga secvenţă (ap,...,au).
Mai precis, vom folosi notaţiile:
k1 = indicele curent din prima secvenţă;
k2 = indicele curent din a doua secvenţă;
k3 = poziţia pe care va fi plasat cel mai mic dintre ak1 şi ak2 într-un vector auxiliar b.

procedure Inter(p,m,u)
k1p; k2m+1; k3p;
while k1m And k2u
if ak1<ak2 then bk3ak1; k1k1+1
else bk3ak2; k2k2+1
k3k3+1
if k1>m { au fost epuizate elementele primei subsecvenţe }
then
for i=k2,u
bk3ai;
k3k3+1
else { au fost epuizate elementele primei subsecvenţe }
for i=k1,m
bk3ai;
k3k3+1
for i=p,u
aibi
end
Timpul de calcul este de ordinul O(u-p), adică liniar în lungimea secvenţei analizate.

54
Metodica predării tehnicilor de programare pentru grupele de performanţă

Programul principal urmează întocmai strategia Divide et Impera, deci se face apelul
SortInter(1,n), unde procedura recursivă SortInter are forma:

procedure SortInter(p,u)
if p<>u then
m(p+u)/2;
SortInter(p,m);
SortInter(m+1,u);
Inter(p,m,u)
end

Calculăm în continuare timpul de executare T(n), unde T(n) se poate scrie:


 t0 (constant), pentru n=1;
 2T(n/2)+an, pentru n>1, unde a este o constantă: problema de dimensiune n s-a
descompus în două subprobleme de dimensiune n/2, iar combinarea rezultatelor s-a
făcut în timp liniar (prin interclasare).
Presupunem că n=2k. Atunci:
T(n) = T(2k) =2 T(2k-1) + a 2k =
=2[2T(2k-2) + a 2k-1] + a 2k = 22T(2k-2) + 2 a 2k =
=22[T(2k-3) + a 2k-2] + 2 a 2k = 2 T(2k-3) + 3 a 2k =
. . .
= 2iT(2k-i) + i a 2k =
. . .
=2kT(1) + k a 2k = nt0 + a n log n.

Rezultă că T(n)=0(n.log n).

Metoda Quicksort [12] [18]

Prezentăm încă o metodă de sortare a unui vector a=(a1,...,an). Va fi aplicată tot metoda Divide
et Impera. Şi de această dată fiecare problemă va fi descompusă în două subprobleme mai mici de
aceeaşi natură, dar nu va mai fi necesară combinarea (asamblarea) rezultatelor rezolvării subproblemelor.
Fie (ap,...,au) secvenţa curentă care trebuie sortată. Vom poziţiona pe ap în secvenţa
(ap,...,au), adică printr-o permutare a elementelor secvenţei:
 x=ap va trece pe o poziţie k;
 toate elementele aflate la stânga poziţiei k vor fi mai mici decât x;
 toate elementele aflate la dreapta poziţiei k vor fi mai mari decât x.
În acest mod ap va apărea pe poziţia sa finală, rămânând apoi să ordonăm crescător elementele
aflate la stânga sa, precum şi pe cele aflate la dreapta sa.
Fie poz funcţia cu parametrii p,u care întoarce indicele k pe care va fi poziţionat ap în cadrul
secvenţei (ap,...,au).
Atunci sortarea se realizează prin apelul QuickSort(1,n), unde procedura QuickSort are
forma:
55
Metodica predării tehnicilor de programare pentru grupele de performanţă

procedure QuickSort(p,u)
if p<>u then
k  poz(p,u);
QuickSort(p,k-1);
QuickSort(k+1,n)
end

Funcţia poz lucrează astfel:


function poz(p,u)
ip; ju; ii0; jj-1
while i<j
if ai>=aj then
aiaj;
(ii,jj)  (-jj,-ii)
ii+ii; jj+jj (*)
poz ← i
end

Să urmărim cum decurg calculele pentru secvenţa:


(a4,...,a11)=(6,3,2,5,8,1,9,7)
 se compară 6 cu a11,a10,... până când găsim un element mai mic. Acesta este a9=1. Se
interschimbă 6 cu 1. Acum secvenţa este (1,3,2,5,8,6,9,7) şi vom lucra în continuare
pe subsecvenţa (3,2,5,8,6), schimbând direcţia de comparare conform (*);
 6 va fi comparat succesiv cu 3,2,... până când găsim un element mai mare. Acesta este
a8=8. Se interschimbă 6 cu 8.
 Se obţine astfel (1,3,2,5,6,8,9,7), în care la stânga lui 6 apar valori mai mici, iar la
dreapta lui 6 apar valori mai mari, deci l-am poziţionat pe 6 pe poziţia 8, valoare întoarsă de
funcţia poz.

Observaţie: Cazul cel mai defavorabil este cel în care vectorul este deja ordonat crescător: se
compară a1 cu a2,...,an rezultând că el se află pe poziţia finală, apoi se compară a2 cu a3,...,an
rezultând că el se află pe poziţia finală etc.
Trecem la calculul timpul mediu de executare al algoritmului Quicksort. Vom număra câte
comparări se efectuează (componentele vectorului nu sunt neapărat numere, ci elemente dintr-o mulţime
ordonată oarecare). Timpul mediu este dat de formulele:

deoarece:
 în cazul cel mai defavorabil a1 se compară cu celelalte n-1 elemente;
 a1 poate fi poziţionat pe oricare dintre poziţiile k=1,2,...,n; considerăm aceste cazuri
echiprobabile;
 T(k-1) este timpul (numărul de comparări) necesar ordonării elementelor aflate la stânga
poziţiei k, iar T(n-k) este timpul necesar ordonării elementelor aflate la dreapta poziţiei k.

56
Metodica predării tehnicilor de programare pentru grupele de performanţă

nT(n) = n(n-1)+2[T(0) +T(1)+….+T(n-1)]


(n-1)T(n-1) = (n-1)(n-2)+2[T(0)+….+T(n-2)]
Scăzând cele două relaţii obţinem:
nT(n)–(n-1)T(n-1) = 2(n-1)+ 2T(n-1), deci:
nT(n) = (n+1)T(n-1)+2(n-1).
Împart cu n(n+1):

2 3 n n+1

Prin adunarea relaţiilor de mai sus obţinem:

Suma ultimilor doi termeni este negativă, deci :

≤ 2 ln(n+1)

(am folosit o inegalitate bazată pe sumele Riemann pentru funcţia f(x)=ln x).
Deci T(n)=0(n.log n).
Încheiem cu menţiunea că metoda Divide et Impera are o largă aplicativitate în calculul paralel.

PROBLEME DE CONCURS

Serbare [Olimpiada de Informatică, faza judeţeană, clasa a X-a, 1999 ]

Pentru serbarea şcolii profesorul de dans a adus un costum de urs polar care poate fi îmbrăcat doar
de un copil care are înălţimea adecvată. El încearcă să găsească elevul potrivit pentru a purta costumul.
Profesorul, observând că nu există doi elevi cu aceeaşi înălţime, cere elevilor să se aşeze în ordinea
crescătoare a înălţimii lor. Speră astfel ca să găsească mai uşor elevul potrivit.
Cunoscând numărul elevilor, precum şi înălţimile lor în ordine crescătoare, scrieţi un program care să
determine dacă există un elev cu înălţimea cerută şi care este locul lui în şirul elevilor. Dacă nu există un
astfel de elev, determinaţi locul elevului care are cea mai mică înălţime şi este mai înalt decât înălţimea
cerută – adică locul pe care ar sta un elev cu înălţimea potrivită.

Date de intrare
57
Metodica predării tehnicilor de programare pentru grupele de performanţă

Prima linie a fişierului de intrare SERBARE.IN va conţine două numere întregi pozitive: înălţimea
căutată h în centimetri şi numărul de elevi n. Aceste numere vor fi separate printr-un spaţiu. Pe
următoarea linie se află n numere întregi, separate prin câte un spaţiu, în ordine strict crescătoare,
reprezentând înălţimea elevilor în centimetri.

Date de ieşire
Fişierul de ieşire SERBARE.OUT va conţine o linie pe care se va afla răspunsul 'NU', dacă nu există
un elev de înălţime potrivită, sau 'DA' dacă acesta există. Pe următoarea linie se va scrie poziţia
elevului în şirul ordonat fie că este cel găsit, fie că este a elevului imediat mai mare.
Restricţii şi precizări
 60 ≤ h ≤200;
 1 ≤ n ≤ 1000
Exemple
SERBARE.IN
150 7
110 112 140 137 150 151
155 158 167
SERBARE.OUT
NU
4
Soluţie:
Dacă şirul nu ar fi ordonat, profesorul ar fi nevoit să încerce să găsească elevul potrivit luând elev
după elev şi verificând înălţimea sa. În momentul în care a găsit elevul căruia i se potriveşte costumul,
căutarea profesorului ar lua sfârşit. Copilul căutat poate fi primul, dar tot aşa de bine poate fi şi ultimul.
Având în vedere faptul că înălţimea elevilor este dată în ordine crescătoare, o soluţie prin care se
găseşte elevul potrivit ar trebui să ţină cont de acest fapt.
O strategie posibilă este ca profesorul să încerce să găsească elevul potrivit studiind înălţimea
elevului aflat pe poziţia din mijloc al şirului. Dacă elevul căutat nu este cel din mijloc, profesorul îşi poate
da seama dacă elevul este în prima sau în cea de-a doua jumătate a şirului. Şirul este ordonat
crescător, iar dacă elevul din mijloc este mai mic decât cel căutat, este sigur că elevul căutat nu se
găseşte în prima jumătate a şirului. Dacă elevul din mijloc este mai mare decât cel căutat, este de
asemenea sigur că elevul căutat nu se găseşte în cea de-a doua jumătate. În cele ce urmează, profesorul
trebuie să continue căutarea doar în grupul format din jumătate dintre elevi, grup care la rândul lui este
un şir ordonat.
Acest subşir va fi împărţit în două (la fel ca şirul iniţial) şi eventual (dacă elevul căutat nu este cel
din mijlocul subşirului) se continuă căutarea în jumătatea corespunzătoare a subşirului. Această metodă
se repetă până când este găsit elevul cu înălţimea potrivită sau în cazul în care nu există un astfel de elev
până când lungimea subşirului este egală cu 1. În acest caz răspunsul la problema profesorului este: „Nu
se află în şir nici un elev cu înălţimea potrivită”.

58
Metodica predării tehnicilor de programare pentru grupele de performanţă

Această strategie aplică algoritmul de căutare binară. Algoritmul constă în căutarea unei valori val
într-un şir ordonat de elemente. Astfel, dacă trebuie găsită valoarea val în şirul x1, x2, …, xn, se
testează dacă val este egal cu xm, unde m = [(n + 1)/2].
Dacă cele două valori sunt egale, căutarea se opreşte cu succes.
Dacă cele două valori nu sunt egale, nu înseamnă că nu vom găsi în viitor valoarea val. S-ar putea
ca valoarea căutată să se găsească într-unul dintre cele două subşiruri obţinute: în subşirul x1, …,xm-1
în situaţia în care xm > val sau în subşirul xm+1, …, xn, în situaţia în care xm < val.
Împărţirea şirului în două subşiruri arată că problema face parte din categoria celor rezolvate cu
ajutorul metodei Divide et Impera, deoarece împărţirea unui astfel de subşir se poate realiza independent
de împărţirea celorlalte subşiruri. În concluzie, problema se împarte în subprobleme independente.
Metoda de rezolvare Divide et Impera în majoritatea cazurilor conduce la algoritmi având complexitate
logaritmică.
Problemele care se rezolvă folosind această metodă presupun posibilitatea de a le împărţi în
subprobleme distincte care se pot rezolva mai uşor şi soluţiile acestor subprobleme se combină pentru a
obţine rezultatul final al problemei de rezolvat.
În cazul căutării binare împărţirea problemei în subprobleme se realizează prin determinarea celor
două subşiruri. Astfel, dacă se caută o valoare în şirul (xst, …, xdr), împărţirea problemei constă în
stabilirea subşirurilor (xst, …, xm-1) şi (xm+1, …, xdr), unde m = [(st + dr) / 2].
Subalgoritm CăutareBinară(st,dr,h):
mij (st + dr) div 2 { stabilirea mijlocului subşirului curent }
dacă h = x[mij] atunci
scrie DA, mij
altfel
dacă h < x[mij] atunci
CăutareBinară(st,mij-1,h)
altfel
CăutareBinară(mij+1,dr,h)
sfârşit

În rezolvarea acestei probleme nu există compunerea soluţiilor subproblemelor pentru a


obţine soluţia finală. Practic găsim valoarea căutată în „ultima” clipă sau aflăm că nu există soluţie.

Arbore Cartezian [ propusă Olimpiada Locală de Informatică, 2002 ]

Un arbore cartezian al unui vector este un arbore binar definit recursiv astfel:
 rădăcina arborelui este elementul cel mai mic din vector;
 subarborele stâng este arborele cartezian al sub-vectorului stâng (faţă de poziţia
elementului din rădăcină);
 subarborele drept este arborele cartezian al sub-vectorului drept.
Exemplu: Pentru vectorul

i 1 2 3 4 5 6 7 8 9

59
Metodica predării tehnicilor de programare pentru grupele de performanţă

V[i] 9 8 23 10 16 3 12 4 7

Se pune în rădăcină elementul cel mai mic din vector, anume 3. Subarborele stâng este la rândul lui
un arbore cartezian al sub-vectorului V[1..5], iar cel drept al lui V[7..9]. Ca rădăcină a subarborelui
stâng (adică fiu stânga al rădăcinii), alegem elementul minim din V[1..5], adică V[2]=8. Procedeul
continuă recursiv pentru restul vectorului. Iată arborele rezultat:

Se dă un vector cu n elemente. Să se afişeze muchiile arborelui său cartezian.

Soluţie:
Pentru construirea arborelui folosim o procedură recursivă divide(i,j,Tata). Tata este nodul
al cărui subarbore este arborele cartezian al lui V[i..j]. Se determină Min, indicele elementului minim
din V[i..j], şi se apelează recursiv procedura pentru V[i..Min-1] şi V[Min+1..j].
Exemplu: n=9 V=(9,8,23,10,16,3,12,4,7)
Iniţial procedura se apelează cu i=1 şi j=n=9. Minimul este găsit pe poziţia Min=6. Se apelează
recursiv pentru V[i..Min-1], adică V[1..5], şi pentru V[Min+1..j], adică V[7..9], cu parametrul
Tata=Min=6.
Analizăm doar primul apel. i=1, j=5, Tata=6. Se găseşte Min=2. Se afişează muchia
(V[Tata],V[Min]), adică muchia (3,8). Apelăm recursiv pentru V[1..1] şi V[3..5].
program Arbore_cartezian;
var V :array [1..100] of integer;
n :integer;
M :array [1..101,1..2] of integer;

procedure Citire;
var i:integer;
f:text;
begin
assign(f,’arbore.in’); reset(f);
readln(f,n);
for i:=1 to n do
read(f,V[i])
close(f);
end;

procedure Divide(i, j, Tata :integer);


var k,Min:integer;
begin
if i<=j then
begin
Min:=i;

60
Metodica predării tehnicilor de programare pentru grupele de performanţă

for k:=i+1 to j do
if V[k]0 then writeln(V[Min],' ',V[Tata]);
Divide(i,Min-1,Min);
Divide(Min+1,j,Min);
end;
end;
Begin
Citire;
writeln('Muchiile arborelui sunt:');
Divide(1,n,0);
End.

Piese [ Olimpiada Naţională de Informatică, 1995 ]

Se dă o tablă de dimensiuni 2nx2n. Pe această tablă există o gaură la poziţia (Lg,Cg). Pentru
acoperirea acestei table avem la dispoziţie piese de forma:

Aceste piese pot fi rotite cu 90, 180 sau 270° . Se cere să se afişeze o acoperire completă a tablei
(cu excepţia găurii). Pe fiecare linie se vor afişa 6 valori separate prin spaţii: l1 c1 l2 c2 l3 c3,
reprezentând coordonatele pătratelor din care este formată fiecare piesă aşezată pe tablă.
Soluţie:
Procedura recursivă Acopera primeşte ca parametrii:
 bucată de tablă prin (L1,C1) – coordonatele pătratului din colţul stânga-sus de pe tablă, şi
(L2,C2) coordonatele pătratului din colţul dreapta-jos.
 coordonatele găurii de pe această bucată de tablă, (Lg,Cg).
Urmând strategia generală Divide et Impera, la fiecare nivel descompunem problema curentă în 4
subprobleme, după care apelăm procedura recursivă pentru fiecare din ele. Împărţim tabla în 4 bucăţi
egale. Una dintre aceste 4 bucăţi are deja o gaură în ea. În celelalte trei bucăţi facem câte o gaură prin
aşezarea unei piese la îmbinarea bucăţilor, ca în figură.
Dacă se ajunge la o bucată 2x2 se opreşte apelarea recursivă; se aşează o piesă pe cele 3 pătrate
libere (un pătrat fiind gaură) şi se revine din apel.
Exemplu:
N=3 Lg=3 Cg=6

Notăm cele 4 sferturi ale pătratului cu cifre:

61
Metodica predării tehnicilor de programare pentru grupele de performanţă

În sfertul 3 avem deja gaura iniţială. Pentru a face o gaură şi în celelalte trei sferturi aşezăm o piesă
la îmbinarea lor, ca mai jos:

Afişăm coordonatele piesei pe care am aşezat-o şi apelăm recursiv pentru cele 4 subprobleme:

program piese;
var Lg,Cg,n,i :integer;
L :longint;
procedure Citire;
var f:text;
begin
assign(f,’’piese.in);reset(f);
readln(f,n);
readln(f,Lg,Cg);
close(f);
end;
procedure Acopera(L1,C1,L2,C2:longint;Lg,Cg:integer);
var Ml,Mc:longint;
begin
Ml:=(L1+L2) div 2;
Mc:=(C1+C2) div 2;
if (Lg>Ml) and (Cg>Mc) then
begin
writeln(Ml+1,' ',Mc,' ',Ml,' ',Mc,' ',Ml,' ',Mc+1);
if L2-L1>1 then
begin
Acopera(L1,C1,Ml,Mc,Ml,Mc);
Acopera(L1,Mc+1,Ml,C2,Ml,Mc+1);
Acopera(Ml+1,C1,L2,Mc,Ml+1,Mc);
Acopera(Ml+1,Mc+1,L2,C2,Lg,Cg)
end;
end
else if (Lg>Ml) and (Cg<=Mc) then
begin
writeln(Ml,' ',Mc,' ',Ml,' ',Mc+1,' ',Ml+1,' ',Mc+1);
if L2-L1>1 then
begin
Acopera(L1,C1,Ml,Mc,Ml,Mc);
Acopera(L1,Mc+1,Ml,C2,Ml,Mc+1);
Acopera(Ml+1,C1,L2,Mc,Lg,Cg);

62
Metodica predării tehnicilor de programare pentru grupele de performanţă

Acopera(Ml+1,Mc+1,L2,C2,Ml+1,Mc+1)
end
end
else if (Lg<=Ml) and (Cg>Mc) then
begin
writeln(Ml,' ',Mc,' ',Ml+1,' ',Mc,' ',Ml+1,' ',Mc+1);
if L2-L1>1 then
begin
Acopera(L1,C1,Ml,Mc,Ml,Mc);
Acopera(L1,Mc+1,Ml,C2,Lg,Cg);
Acopera(Ml+1,C1,L2,Mc,Ml+1,Mc);
Acopera(Ml+1,Mc+1,L2,C2,Ml+1,Mc+1)
end
end
else
begin
writeln(Ml+1,' ',Mc,' ',Ml+1,' ',Mc+1,' ',Ml,' ',Mc+1);
if L2-L1>1 then
begin
Acopera(L1,C1,Ml,Mc,Lg,Cg);
Acopera(L1,Mc+1,Ml,C2,Ml,Mc+1);
Acopera(Ml+1,C1,L2,Mc,Ml+1,Mc);
Acopera(Ml+1,Mc+1,L2,C2,Ml+1,Mc+1)
end
end;
end;
Begin
Citire;
L:=1;
for i:=1 to n do
L:=L*2;
Acopera(1,1,L,L,Lg,Cg);
End.

Râul Highwater [Olimpiada Balcanică de Informatică, Grecia - 1999]

Două oraşe, Westmouth şi Eastmouth, sunt situate pe malul vestic, respectiv malul estic al râului
Highwater. Westmouth se află la sud de Eastmouth. Malurile râului sunt linii poligonale astfel încât o linie
orientată de la est la vest intersectează fiecare mal în exact un punct.
Căpitanul Hook navighează des între cele două oraşele. Din dorinţa de a minimiza cheltuielile pentru
combustibil, el ar vrea să afle cea mai scurtă rută de la Westmouth la Eastmouth.
Date de intrare
Fişierul de intrare INPUT.TXT conţine pe prima linie două numere întregi M şi N (2≤M, N≤2000)
reprezentând numărul colţurilor de pe malul vestic, respectiv estic.
Pe următoarele M linii se află câte două numere întregi X şi Y (0≤X, Y≤3600). Aceste numere
reprezintă coordonatele colţurilor de pe malul vestic începând de la Westmouth la un punct care se află
pe aceeaşi latitudine (adică având aceeaşi coordonată Y) cu Eastmouth.
Următoarele N linii conţin câte două numere întregi X şi Y (0≤X, Y≤3600) care reprezintă
coordonatele colţurilor de pe malul estic începând cu un punct aflat la aceeaşi latitudine geografică (adică
având aceeaşi coordonată Y) ca Westmouth, către Eastmouth.

63
Metodica predării tehnicilor de programare pentru grupele de performanţă

Date de ieşire
Fişierul de ieşire OUTPUT.TXT conţine linii în care sunt scrise câte două numere întregi X şi Y,
separate printr-un spaţiu, reprezentând coordonatele colţurilor rutei între Westmouth şi Eastmouth. (Este
evident că prima linie trebuie să conţină coordonatele orăşelului Westmouth, iar ultima linie conţine
coordonatele orăşelului Eastmouth.)
Exemplu
INPUT.TXT
3 3 0 0
0 0 50 50
50 50 50 100
0 150 100 150
OUTPUT.TXT
100 0
50 100
100 150

Soluţie: [13]
Se verifică dacă traseul direct între punctul de plecare şi cel de sosire este împiedicat de vreun colţ
al unui mal. Dacă nu, atunci drumul este, evident, segmentul determinat de cele două puncte. Altfel, se
selectează un colţ O (despre care se ştie cu siguranţă că aparţine traseului final) şi se determină drumul
în două etape: de la punctul de plecare la O şi de la O la punctul de sosire.
Tipurile de obstacole care pot apărea sunt:
a) colţuri ale malului vestic care se află în dreapta traseului direct;
b) colţuri ale malului estic care se află în stânga traseului direct.
Selectăm "cel mai din dreapta" obstacol de tip (a) şi "cel mai din stânga" obstacol de tip (b).
(Atenţie! Aceste exprimări nu se referă la abscisele punctelor de pe maluri, ci la unghiurile pe care le
formează cu abscisa semidreptele determinate de punctul de plecare şi aceste puncte). Obstacolul O
căutat este cel cu ordonata mai mică dintre cele două selectate.
Complexitatea algoritmului descris este O((M+N)2).

const ni='input.txt';
no='output.txt';
mare=1000000.0;
type punct=record
x,y:Longint;
mal:Byte
end;
list=array[1..4000] of Integer;
listp=array[1..4000] of punct;
var p:listp; q:^listp;
t:list;
i,j,k,l,m,n,e,f:Longint;
tg,u,ctg,st,dr,ust,udr:Real;
procedure citeste;
begin
Assign(input,ni); Reset(input);
Readln(m,n);
for i:=1 to m do

64
Metodica predării tehnicilor de programare pentru grupele de performanţă

with p[i] do begin


Readln(x,y); mal:=1
end;
for i:=m+1 to m+n do
with p[i] do begin
Readln(x,y); mal:=2
end
end;
procedure QuickSort(var A:List; Lo,Hi:Integer);
procedure Sort(l,r:Integer);
var i,j,x,y:Integer;
begin
i:=l; j:=r; x:=a[(l+r) div 2];
repeat
while p[a[i]].y<p[x].y do Inc(i);
while p[x].y<p[a[j]].y do Dec(j);
if i<=j then
begin
y:=a[i]; a[i]:=a[j]; a[j]:=y;
i:=i+1; j:=j-1
end
until i>j;
if l<j then Sort(l,j);
if i<r then Sort(i,r)
end;
begin
Sort(Lo,Hi)
end;
procedure gaseste(k,l:Integer);
var e,f:Integer;
begin
if k=l-1 then
begin t[k]:=l; Exit end;
if p[k].x=p[l].x then u:=Pi/2
else begin
tg:=(p[l].y-p[k].y)/(p[l].x-p[k].x);
u:=Arctan(tg);
if u<0 then u:=u+Pi
end;
st:=-mare; e:=0;
dr:=mare; f:=0;
for i:=k+1 to l-1 do
if p[k].y<>p[i].y then
begin
ctg:=(p[i].x-p[k].x)/(p[i].y-p[k].y);
if p[i].mal=1 then begin
if ctg>=st then begin
st:=ctg; e:=i
end;
end
else
if ctg<=dr then begin
dr:=ctg; f:=i
end
end;
if e=0 then ust:=Pi
else
if st=0 then ust:=Pi/2
else begin
ust:=Arctan(1/st);
if ust<0 then ust:=ust+Pi

65
Metodica predării tehnicilor de programare pentru grupele de performanţă

end;
if f=0 then udr:=0
else
if dr=0 then udr:=Pi/2
else begin
udr:=Arctan(1/dr);
if udr<0 then udr:=udr+Pi;
end;
if (ust>=u) and (udr<=u) then t[k]:=l
else
if ust>=u then
begin gaseste(k,f); gaseste(f,l) end
else
if udr<=u then begin
gaseste(k,e);
gaseste(e,l)
end
else
if e<f then begin
gaseste(k,e);
gaseste(e,l)
end
else begin
gaseste(k,f);
gaseste(f,l)
end
end;
procedure rezolva;
begin
for i:=1 to m+n do t[i]:=i;
quicksort(t,1,m+n);
if t[2]=1 then begin
t[2]:=t[1];
t[1]:=1
end;
if t[m+n]<>m+n-1 then begin
t[m+n-1]:=t[m+n];
t[m+n]:=m+n
end;
New(q);
for i:=1 to m+n do q^[i]:=p[t[i]];
p:=q^; Dispose(q);
gaseste(1,m+n);
t[m+n]:=0;
end;
procedure scrie;
begin
Assign(output,no); Rewrite(output);
i:=1;
while i>0 do
begin
Writeln(p[i].x,' ',p[i].y); i:=t[i]
end
end;
Begin
citeste;
rezolva;
scrie
End.

66
Metodica predării tehnicilor de programare pentru grupele de performanţă

PROGRAMARE DINAMICĂ

Termenul de programare dinamică a apărut în anul 1957. Programarea dinamică desemnează o


metodă de rezolvare a problemelor a căror soluţie poate fi construită dinamic în timp. Iniţiatorul metodei
este profesorul şi cercetătorul Richard Bellman care a publicat în anul 1957 o carte cu titlul „Dynamic
programming”. [1]

DESCRIERE METODĂ

Programarea dinamică este o metodă de elaborare a algoritmilor care se aplică în general


problemelor pentru care se cere determinarea unui optim în urma adoptării unor decizii.
Nu există un criteriu pe baza căruia să identificăm cu siguranţă o problemă pentru rezolvarea căreia
trebuie să utilizăm metoda programării dinamice, dar putem formula două proprietăţi care sugerează o
soluţie prin programare dinamică. [5]

 Substructură optimală
Problema dată poate fi descompusă în subprobleme şi soluţia optimă a problemei depinde de
soluţiile optime ale subproblemelor sale.
Acest criteriu nu indică neapărat o soluţie prin programare dinamică, ar putea fi şi un indiciu că se
poate aplica metoda Greedy sau metoda „Divide et Impera”.

 Subprobleme superpozabile
Subproblemele problemei date nu sunt independente, ci se suprapun.
Datorită faptului că subproblemele problemei date se suprapun, deducem că o abordare prin
metoda „Divide et Impera” ar fi dezastruoasă din punctul de vedere al timpului de execuţie (datorită
faptului că problemele se suprapun se ajunge la rezolvarea repetată a aceleiaşi subprobleme). Prin
urmare, vom rezolva subproblemele o singură, dată, reţinând rezultatele într-o structură de date
suplimentară (de obicei un tablou).
Rezolvarea unei probleme prin programare dinamică presupune următorii paşi:
 Se identifică subproblemele problemei date.
 Se alege o structură de date suplimentară, capabilă să reţină soluţiile subproblemelor.
 Se caracterizează substructura optimală a problemei printr-o relaţie de recurenţă.

Definiţie: Definim un PD–arbore de rădăcină z ca fiind un graf de dependenţe în care:

 x, xOz (există drum de la x la z);


 X={xgrad-(x)=0}.

Exemplu. Următorul graf este un PD-arbore de rădăcină z=5.

67
Metodica predării tehnicilor de programare pentru grupele de performanţă

5 5
4
4

1 2 1 2
Un PD-arbore nu este neapărat un arbore, dar:
 poate fi pus pe niveluri: fiecare vârf x va fi pus pe nivelul egal cu lungimea celui mai lung
drum de la x la z;
 poate fi parcurs (cu mici modificări) în postordine;
 Prin parcurgerea în postordine, vârfurile apar sortate topologic.
Algoritmul de parcurgere în postordine foloseşte un vector parcurs pentru a ţine evidenţa
vârfurilor vizitate. Este iniţializat vectorul parcurs şi se începe parcurgerea prin apelul postord(z):

Pentru toate vârfurile x Execută


parcurs(x)  xX
postord(z)

unde procedura postord are forma:

procedure postord(x)
Pentru toţi jAx cu parcurs(j)=false Execută
postord(j)
calculează v(x) conform funcţiei fx;
parcurs(x)true
end

Timpul de executare a algoritmului este evident liniar.


Metoda programării dinamice se aplică problemelor care urmăresc calcularea unei valori şi constă în
următoarele:
 Se asociază problemei un graf de dependenţe;
 În graf este pus în evidenţă un PD-arbore; problema se reduce la determinarea valorii
asociate lui z (rădăcina arborelui);
 Se parcurge în postordine PD-arborele.
Mai pe scurt, putem spune: « Metoda programării dinamice constă în identificarea unui PD-arbore şi
parcurgerea sa în postordine ». [12]
Pentru a rezolva o problemă folosind metoda programării dinamice, mai întâi trebuie să o aducem la
o formă discretă în timp, adică trebuie găsită o funcţie dependentă de timp şi de deciziile anterioare.

68
Metodica predării tehnicilor de programare pentru grupele de performanţă

Bellman a enunţat un principiu numit principiul optimalităţii: « O strategie are proprietatea că
oricare ar fi starea iniţială şi decizia iniţială, deciziile rămase trebuie să constituie o strategie optimală
privitoare la starea care rezultă din decizia anterioară »
Demonstrarea corectitudinii algoritmului de rezolvare a unei probleme, a cărei rezolvare se obţine
folosind metoda programării dinamice, se face, de obicei, prin inducţie matematică.
Metoda programării dinamice se poate aplica cu următoarele abordării:
 Metoda înainte – pentru rezolvare se plecă de la starea finală
 Metoda înapoi – pentru rezolvare se plecă de la starea iniţială
 Metoda mixtă – o combinaţie a primelor două [12]
Implementări sugerate
În scopul formării deprinderilor de a rezolva probleme în care se utilizează metoda programării
dinamice se pot realiza implementarea următorilor algoritmi pentru:
 Sumă maximă în triunghi
 Problema tirului
 Determinarea subşirului crescător de lungime maximă
 Subşir comun maximal

APLICAŢII PROGRAMARE DINAMICĂ

Sumă maximă în triunghi [Olimpiada Internaţională de Informatică, 1994]

Se consideră un triunghi cu numere aşezate ca în figura alăturată. Dintr-o poziţie putem coborî pe
una din cele două aflate sub aceasta (pe diagonală în stânga sau în dreapta). Poziţia iniţială este cea din
vârf. Costul unui drum din vârf până la o poziţie din triunghi este suma valorilor de pe poziţiile prin care
trece drumul. Să se afle drumul de cost maxim care pleacă din vârf şi se încheie pe ultimul rând al
triunghiului (baza sa).
Datele de intrare vor fi citite din fişierul triunghi.in. Pe prima linie a fişierului se află valoarea N
(1N100), care reprezintă numărul de rânduri ale triunghiului (5 în exemplul de mai sus). Pe
următoarele N linii ale fişierului se află numerele din triunghi.
În fişierul triunghi.out, pe o singură linie, se va scrie costul maxim care poate fi obţinut în
condiţiile date în enunţ.
Exemplu:
triunghi.in triunghi.out
5 30
7
3 8
8 1 0
2 7 4 4
4 5 2 6 5

Soluţie:
Vom reţine triunghiul într-o matrice pătratică T, de ordin n, sub diagonala principală. Subproblemele
problemei date constau în determinarea sumei maxime care se poate obţine din numere aflate pe un

69
Metodica predării tehnicilor de programare pentru grupele de performanţă

drum între numărul T[i,j], până la un număr de pe ultima linie, fiecare număr din acest drum fiind
situat sub precedentul, la stânga sau la dreapta sa. Evident, subproblemele nu sunt independente: pentru
a calcula suma maximă a numerelor de pe un drum de la T[i,j] la ultima linie, trebuie să calculăm
suma maximă a numerelor de pe un drum de la T[i+1,j] la ultima linie şi suma maximă a numerelor
de pe un drum de la T[i+1,j+1] la ultima linie.
Pentru a reţine soluţiile subproblemelor, vom utiliza o matrice suplimentară S, pătratică de ordin n,
cu semnificaţia
S[i,j]= suma maximă ce se poate obţine pe un drum de la T[i,j] la un element de pe ultima
linie, respectând condiţiile problemei.
Evident, soluţia problemei va fi S[1,1].
Relaţia de recurenţă care caracterizează substructura optimală a problemei este:
 S[n,i]=T[n,i], i{1,2,...,n}
 S[i,j]=T[i,j]+max{S[i+1,j], S[i+1,j+1]}
Rezolvăm relaţia de recurenţă în mod bottom-up.
Complexitatea algoritmului descris este O(n2).
Program triunghi;
Type mat=Array[1..100,1..100] of integer;
var
S,T:mat;
n,i,j:integer;
f:text;
Procedure citire;
begin
Assign(f,'triunghi.in'); Reset(f);
Readln(f,n);
For i:=1 To n Do
For j:=1 To i Do
Read(f,T[i,j]);
Close(f);
end;
Begin
citire;
{initia;izari}
For i:=1 To n Do
S[n,i]:=T[n,i];
For i:=n-1 Downto 1 Do
For j:=1 To i Do
begin
S[i,j]:=T[i,j]+S[i+1,j];
If S[i+1,j]<S[i+1,j+1] Then
S[i,j]:=T[i,j]+S[i+1,j+1];
end;
Assign(f,'triunghi.out');
Rewrite(f);
Writeln(f,S[1,1]);
Close(f);
End.

70
Metodica predării tehnicilor de programare pentru grupele de performanţă

Subşir comun maximal

Fie X=(x1, x2, ..., xn) şi Y=(y1, y2, ..., ym) două şiruri de n, respectiv m numere întregi.
Determinaţi un subşir comun de lungime maximă. [5]
Exemplu
Pentru X=(2,5,5,6,2,8,4,0,1,3,5,8) şi Y=(6,2,5,6,5,5,4,3,5,8) o soluţie posibilă
este: Z=(2,5,5,4,3,5,8).
Soluţie:
Notăm cu Xk=(x1, x2, ..., xk) (prefixul lui X de lungime k) şi cu Yh=(y1, y2, ..., yh) prefixul lui
Y de lungime h. O subproblemă a problemei date constă în determinarea celui mai lung subşir comun al
lui Xk, Yh. Notăm cu LCS(Xk,Yh) lungimea celui mai lung subşir comun al lui Xk, Yh. Utilizând aceste
notaţii, problema cere determinarea LCS(Xn,Ym), precum şi un astfel de subşir.
Observaţie
 Dacă Xk=Yh atunci LCS(Xk,Yh)=1+LCS(Xk-1,Yh-1).
 Dacă XkYh atunci LCS(Xk,Yh)=max(LCS(Xk-1,Yh), LCS(Xk,Yh-1)).
Din observaţia precedentă deducem că subproblemele problemei date nu sunt independente şi că
problema are substructură optimală.
Pentru a reţine soluţiile subproblemelor vom utiliza o matrice cu n+1 linii şi m+1 coloane, denumită
lcs. Linia şi coloana 0 sunt utilizate pentru iniţializare cu 0, iar elementul lcs[k,h] va fi lungimea celui
mai lung subşir comun al şirurilor Xk şi Yh.
Vom caracteriza substructura optimală a problemei prin următoarea relaţie de recurenţă:
 lcs[k,0]=lcs[0,h]=0, k{1,2,..,n}, h{1,2,..,m}
 lcs[k,h]=1+lcs[k-1,h-1], dacă x[k]=y[h]
 max{lcs[k,h-1], lcs[k-1,h]}, dacă x[k]y[h]
Rezolvăm relaţia de recurenţă în mod bottom-up.
Deoarece nu am utilizat o structură de date suplimentară cu ajutorul căreia să memorăm soluţia
optimă, vom reconstitui soluţia optimă pe baza rezultatelor memorate în matricea lcs. Prin reconstituire
vom obţine soluţia în ordine inversă, din acest motiv vom memora soluţia într-un vector, pe care îl vom
afişa de la sfârşit către început:
Complexitatea algoritmului descris este O(n2).
Program L_C_S;
var
f:text;
k,n,m,i,j:byte;
lcs:Array[0..100,0..100] of word;
x,y,z:Array[1..100] of integer;
Procedure citire;
begin
assign(f,'date.in'); reset(f);
readln(f,m);
for i:=1 to m do
read(f,x[i]);
readln(f,n);
for i:=1 to n do
71
Metodica predării tehnicilor de programare pentru grupele de performanţă

read(f,y[i]);
close(f);
end;
Begin
Citire;
{bordam matricea}
for i:=1 to m do
lcs[i,0]:=0;
for i:=1 to n do
lcs[0,i]:=0;
for i:=1 to m do
for j:=1 to n do
if x[i]=y[j] then lcs[i,j]:=lcs[i-1,j-1]+1
else
if lcs[i-1,j]>lcs[i,j-1] then lcs[i,j]:=lcs[i-1,j]
else lcs[i,j]:=lcs[i,j-1];
assign(f,'date.out');
rewrite(f);
writeln(f,lcs[m,n]);
{ reconsituirea subsirului, plecam de la lcs[m,n] }
k:=0; i:=m;j:=n;
while (i>0) And (j>0) do
begin
if (a[i]=b[j]) then begin
k:=k+1;
c[k]:=a[i];
i:=i-1;
j:=j-1;
end
else
if lcs[i,j]=lcs[i-1,j] then i:=i-1
else j:=j-1;
end;
for i:=k downto 1 do
write(f,c[i],' ');
close(f)
End.

Subşir crescător maximal

Fie un şir A=(a1, a2, ..., an). Numim subşir al şirului A o succesiune de elemente din A, în
ordinea în care acestea apar în A: ai1, ai2, ..., aik, unde 1<= i1<i2<...<ik<= n.
Determinaţi un subşir crescător al şirului A, de lungime maximă. [5]
Exemplu
Pentru A=(8,3,6,50,10,8,100,30,60,40,80) o soluţie poate fi: (3,6,10,30,60,80).

Soluţie:
Fie Ai1=(ai1ai2 ...aik) cel mai lung subşir crescător al lui şirului A. Observăm că el coincide cu cel
mai lung subşir crescător al şirului (ai1, ai1+1, ..., an). Evident Ai2=(ai2ai3 ...aik) este cel mai lung
subşir crescător al lui (ai2, ai2+1, ..., an), etc. Prin urmare, o subproblemă a problemei iniţiale constă în
determinarea celui mai lung subşir crescător care începe cu ai,i{1,.., n}. Subproblemele nu sunt
independente: pentru a determina cel mai lung subşir crescător care începe cu ai, este necesar să
determinăm cele mai lungi subşiruri crescătoare care încep cu aj, aiaj, j{i+1,.., n}.
72
Metodica predării tehnicilor de programare pentru grupele de performanţă

Pentru a reţine soluţiile subproblemelor vom considera doi vectori suplimentari l şi poz, fiecare cu
câte n componente, având semnificaţia:
 l[i]=lungimea celui mai lung subşir crescător care începe cu a[i];
 poz[i]=poziţia elementului care urmează după a[i] în cel mai lung subşir crescător care
începe cu a[i], dacă un astfel de element există, sau -1 dacă un astfel de element nu
există.
Relaţia de recurenţă care caracterizează substructura optimală a problemei este:
 l[n]=1; poz[n]=-1;
 l[i]=max{1+l[j]|a[i]a[j]}, j=i+1,n
poz[i]= indicele j pentru care se obţine maximul l[i].
Rezolvăm relaţia de recurenţă în mod bottom-up.
Pentru a determina soluţia optimă a problemei, determinăm maximul din vectorul l, apoi afişăm
soluţia, începând cu poziţia maximului şi utilizând informaţiile memorate în vectorul poz.
Complexitatea algoritmului descris este O(n(n+1)/2).
Program subsir;
var
i,j,n,max,p:integer;
f:text;
poz,a,l:array[1..1000] of integer;
Procedure citire;
begin
assign(f,'sir.in'); reset(f);
readln(f,n);
for i:=1 to n do
read(f,a[i]);
close(f);
bnd;
Begin
Citire;
l[n]:=1; poz[n]:=-1;
for i:=n-1 downto 1 do
begin
l[i]:=1; poz[i]:=-1;
for j:=i+1 to n do
if (a[i]<=a[j]) And (l[i]<1+l[j]) then
begin
l[i]:=1+l[j];
poz[i]:=j;
end;
end;
{afisare solutie}
max:=l[1];p:=1;
for i:=2 to n do
if max<l[i] then begin
max:=l[i];
p:=i;
end;
assign(f,'sir.out');
rewrite(f);
writeln({Lungimea maxima}f,max);
i:=p;
while i<>-1 do
begin
73
Metodica predării tehnicilor de programare pentru grupele de performanţă

write(f,a[i],' ');
i:=poz[i];
end;
close(f);
End.

Soluţie1 „Cel mai lung subşir crescător în O(n log n)”


Fie A secvenţa de n numere în care căutăm subşirul şi B un vector auxiliar de lungime cel mult n. La
sfârşitul algoritmului numărul de elemente din B va fi exact lungimea celui mai lung subşir crescător.
Cum construim vectorul B?
Se procedează astfel:
 se parcurge secvenţa A şi pentru fiecare element A[i] se caută în B cel mai mic element
B[j] strict mai mare decât A[i].
 Când B[j] e găsit, B[j] ia valoarea lui A[i]. În cazul în care nu există un astfel de
element, adică nu exista B[j] cu proprietatea că B[j] > A[i] atunci A[i] este adăugat
la sfârşitul lui B (dimensiunea lui B creste cu 1). Putem observa că vectorul B rămâne în
permanenţă sortat (inducţie: presupunem ca la pasul i vectorul B e sortat şi găsim B[j],
cel mai mic element mai mare decât A[i]; atunci valoarea lui B[j] scade fiindcă ia
valoarea lui A[i], însă ştim că A[i] >= B[j-1], deci B rămâne sortat; de ce? întrucât
B[j-1] < B[j] şi, prin absurd, dacă A[i] < B[j-1] atunci l-am fi găsit pe B[j-1] cel
mai mic element mai mare decât A[i], ceea ce e o contradicţie). Prin urmare, vectorul B,
fiind în permanenţă sortat, ne permite să aplicăm căutarea binară pentru a găsi elementul
B[j] cu proprietăţile menţionate mai sus. Aşadar complexitatea finală e O(n log n).
Atenţie: la sfârşit lungimea vectorului B coincide cu lungimea celui mai lung subşir crescător al lui
A, însă conţinutul lui B nu coincide cu cel mai lung subşir crescător. Pentru a determina efectiv subşirul
avem nevoie de încă un tablou.

PROBLEME DE CONCURS

Tir [Olimpiada de Informatică, faza municipală, 2004] [20]

La un concurs de tir, ţinta este alcătuită din n cercuri concentrice, numerotate din exterior către
interior de la 1 la n. Cercurile delimitează pe ţintă n zone circulare (o zonă între cercul 1 şi cercul 2, a
doua zonă între cercul 2 şi cercul 3, ş.a.m.d, o zonă între cercul n-1 şi cercul n şi a n-a zonă interiorul
cercului n).
Fiecare zonă are ataşată o valoare strict pozitivă, reprezentând numărul de puncte pe care le poate
primi un concurent în cazul în care va lovi această zonă.

Cerinţă

1
Acest algoritm împreună cu o demonstraţie a corectitudinii sunt explicate în cartea lui Cătălin Frâncu -
"Psihologia concursurilor de informatică"[11], capitolul "Probleme de concurs", problema 13
74
Metodica predării tehnicilor de programare pentru grupele de performanţă

Să se determine numărul minim de lovituri pe care trebuie să le execute un concurent pentru a


obţine exact k puncte.
Date de intrare
Fişierul de intrare este TIR.IN are următoarea structură:
 pe prima linie este scris numărul de cercuri (valoarea n)
 pe a doua linie este scris numărul de puncte ce urmează a fi obţinute de concurent
(valoarea k)
 pe a treia linie sunt scrise cele n valori ataşate zonelor, despărţite prin câte un spaţiu.
Date de ieşire
Fişierul de ieşire este TIR.OUT va conţine pe prima linie este scris numărul minim de lovituri
necesar pentru a obţine k puncte, dacă problema are soluţie sau cifra 0 dacă problema nu are soluţie.
Dacă problema are soluţie, pe a doua linie sunt scrise valorile asociate zonelor în care a lovit trăgătorul,
pentru a obţine cele k puncte, despărţite prin câte un spaţiu
Restricţii şi precizări
 5  n  50
 k  1000
Numerele care reprezintă punctajele zonelor circulare au valori întregi cuprinse între 1 şi 1000 şi nu
sunt neapărat în ordine crescătoare.
Soluţia nu este în mod necesar unică.
Exemplu
TIR.IN TIR.OUT Explicaţie
5 4 Ţinta este formată din 5
23 2 5 8 8 cercuri concentrice, care
2 3 5 6 8 determină 5 zone având valorile
2, 3, 5, 6. şi 8.
Pentru a obţine 23 de
puncte, numărul minim de
lovituri necesar este 4. Loviturile
2 3 5 6 8 pot fi efectuate în mai multe
moduri. O soluţie este de a
trage un foc în zona de valoare
2, un foc în zona de valoare 5 şi
2 focuri în zona de valoare 8

Soluţie:
Valorile sectoarelor le vom reţine într-un vector v, vector anterior ordonat crescător.
Trebuie să găsim o modalitate de a-l scrie pe k sub forma unei sume având număr minim de
termeni din şirul v.
Notăm cu c[i] numărul minim de elemente din şirul v[i], având suma i. Soluţia problemei
o vom obţine în c[k].
Relaţia de recurenţă:

75
Metodica predării tehnicilor de programare pentru grupele de performanţă

 C[0]=0
 C[i]=1 + min{c[j] cu i=j+v[k], k=1,2,…,n}
Pentru a nu lucra cu numere negative vom pleca cu c[0]=1. Dacă c[i]=0, atunci se consideră că
i este nemarcat.
Numerele c[i] se calculează astfel:
 La pasul 0 se marchează c[0]=1
 Pentru fiecare dintre cele n sectoare căutăm în vectorul c valorile care au fost deja ‚atinse’ şi
pornind de la acestea adăugăm punctajul sectorului curent.
 Dacă valoarea rezultată a fost obţinută printr-un număr mai mic de „trageri”, modificăm
vectorul c, iar în vectorul d reţinem valoarea anterioara (de la care am ajuns în poziţia
curentă).
Program tir;
var
f:text;
v:array[1..50] of integer;
c,d:array[0..50] of integer;
i,n,k:longint;
Procedure citire;
var
i:longint;
begin
assign(f,'tir.in'); reset(f);
i:=0;
while not seekeoln(f) do
begin
inc(i);
read(f,v[i]);
end;
n:=i;
readln(f);
read(f,k);
end;
Procedure calcul;
var i,j:integer;
begin
c[0]:=1;
for j:=1 to n do
for i:=0 to k-v[j] do
if c[i]>0 then
if (c[i+v[j]]=0) or (c[i+v[j]]>c[i]+1) then
begin
c[i+v[j]]:=c[i]+1;
d[i+v[j]]:=i;
end;
end;
procedure reconstituie(k:longint);
begin
if k<>0 then
begin
reconstituie(d[k]);
writeln(f,k-d[k]);
end;
end;
Begin

76
Metodica predării tehnicilor de programare pentru grupele de performanţă

citire;
calcul;
assign(f,'tir.out');
rewrite(f);
if k=0 then write(f,0)
else
begin
writeln(f,'nr. min. de operatii : ',c[k]-1);
reconstituie(k);
end;
close(f);
End.

Palindrom [Concursul interjudeţean de informatică „Grigore Moisil”, 2003]

Un palindrom este un cuvânt care se citeşte la fel şi de la stânga la dreapta şi de la dreapta la


stânga. Dacă un cuvânt nu este palindrom, el poate fi tăiat în mai multe părţi care să fie palindroame.
Cerinţă:
Scrieţi un program care să determine numărul minim de palindroame în care poate fi împărţită o
secvenţă de caractere dată.
Date de intrare:
Fişierul de intrare „pal.in” conţine pe prima linie o secvenţă de caractere (litere mici ale
alfabetului englez).
Date de ieşire:
Fişierul de ieşire „pal.out” conţine pe prima linie numărul minim de palindroame determinat.
Restricţii:
Lungimea secvenţei de caractere nu depăşeşte 100.
Exemple
PAL.IN PAL.OUT EXPLICATIE
a
anaban 2
naban

Soluţie: [5]
Problema cere să determinăm numărul minim de palindroame în care poate fi împărţit şirul s de
lungime Lg. Să notăm cu si prefixul şirului s ce se termină pe poziţia i (1≤i≤Lg), deci şirul format din
caracterele s1, s2, …, si. O subproblemă a problemei date constă în determinarea numărului minim
de palindromuri în care poate fi împărţit şirul si.
Pentru reţinerea soluţiilor subproblemelor vom folosi un vector nrp cu Lg componente, unde
nrp[i] reprezintă numărul minim de palindromuri din descompunere şirului si.
Relaţia de recurenţă:
 nrp[i]=1, dacă şirul este si palindrom
 nrp[i]=1 + min(nrp[j], 0≤j<i, şi sj,sj+1,…,si este palindrom), dacă si nu este
palindrom
Rezolvăm relaţia de recurenţă în mod bottom-up.

77
Metodica predării tehnicilor de programare pentru grupele de performanţă

Pentru implementare este necesară o funcţie care să testeze dacă o subsecvenţă a şirului dat este
sau nu palindrom.
Program palindroam;
const
fi='pal.in';
fo='pal.out';
var
s:string;
Lg,rez:integer;
f:text;
procedure citire;
begin
assign(f,fi); reset(f);
readln(f,s);
Lg:=length(s);
close(f);
end;
function palindrom (i,j:byte):boolean;
begin
while (i<=j) and (s[i]=s[j]) do
begin
i:=i+1; j:=j-1;
end;
palindrom:=i>j;
end;
procedure dinamica;
var
i,j,nrmin:integer;
nrp:array[1..102] of integer;
begin
fillchar(nrp,sizeof(nrp),0);
for i:=1 to Lg do
if (palindrom(1,i)) then nrp[i]:= 1
else begin
nrmin:=MaxInt;
for j:=1 to i-1 do
if palindrom(j+1, i) And (nrp[j] < nrmin) then
nrmin:=nrp[j];
nrp[i]:=nrmin+1;
end;
rez:=nrp[Lg];
end;
procedure scrie;
begin
assign(f,fo);rewrite(f);
writeln(f,rez);
close(f);
end;
Begin
citire;
dinamica;
scrie;
End.

Lăcusta [Olimpiada judeţeană de informatică, 2005]

Se consideră o matrice dreptunghiulară cu m linii şi n coloane, cu valori naturale. Traversăm


matricea pornind de la colţul stânga-sus la colţul dreapta-jos. O traversare constă din mai multe
deplasări. La fiecare deplasare se execută un salt pe orizontală şi un pas pe verticală. Un salt înseamnă

78
Metodica predării tehnicilor de programare pentru grupele de performanţă

că putem trece de la o celulă la oricare alta aflată pe aceeaşi linie, iar un pas înseamnă că putem trece de
la o celulă la celula aflată imediat sub ea. Excepţie face ultima deplasare (cea în care ne aflăm pe ultima
linie), când vom face doar un salt pentru a ajunge în colţul dreapta-jos, dar nu vom mai face şi pasul
corespunzător. Astfel traversarea va consta din vizitarea a 2m celule.
Cerinţă
Scrieţi un program care să determine suma minimă care se poate obţine pentru o astfel de
traversare.
Date de intrare
Fişierul de intrare lacusta.in conţine pe prima linie două numere naturale separate printr-un
spaţiu m n, reprezentând numărul de linii şi respectiv numărul de coloane ale matricei. Pe următoarele m
linii este descrisă matricea, câte n numere pe fiecare linie, separate prin câte un spaţiu.
Date de ieşire
Fişierul de ieşire lacusta.out va conţine o singură linie pe care va fi scrisă suma minimă găsită.
Restricţii
 1  m, n  100
 Valorile elementelor matricei sunt numere întregi din intervalul [1, 255]
Exemplu
lacusta.in lacusta.out Explicaţie
4 5 28 Drumul este:
3 4 5 7 9 (1,1)->(1,3)->
6 6 3 4 4 (2,3)->(2,2)->
6 3 3 9 6 (3,2)->(3,3)->
6 5 3 8 2 (4,3)->(4,5)

Soluţie: [24]
Problema cere determinarea sumei minime ce se poate obţine din colţul din stânga-sus (A[0][0])
până în colţul din dreapta-jos (A[m-1][n-1]), traversând matricea în condiţiile specificate.
O subproblemă a problemei date constă în determinarea sumei minime, care se poate obţine
pornind din colţul stânga-sus până la fiecare element A[i][j] al matricei.
Pentru a reţine soluţiile subproblemelor vom folosi o matrice B, cu m linii şi n coloane, cu
semnificaţia că B[i][j] reprezintă suma minimă care se poate obţine din colţul stânga-sus până la
elementul A[i][j].
Relaţia de recurenţă:
 B[0][0]=A[0][0]
 B[0][i]=∞ , nu putem ajunge la elementul A[0][i] făcând un salt şi un pas
 B[1][0]=∞ , nu putem ajunge la elementul A[1][0] făcând un salt şi un pas
 B[1][j]=A[0][0]+A[0][j]+A[1][j],  0<j<n, facem un salt până la elementul
A[0][j], apoi un pas până la A[1][j].

79
Metodica predării tehnicilor de programare pentru grupele de performanţă

 B[1][j]=A[i][j]+ A[i-1,j]+min(B[i-1][k]), 0≤k<n, k≠j – pentru a ajunge


la A[i][j] am făcut un pas de pe elementul A[i-1][j], iar pentru a ajunge pe
elementul A[i-1][j]am făcut un salt.
În calculul lui B[i][j]este posibil să întâmpinăm o problemă: elementul minim de pe linia i-1 să
se găsească pe chiar pe coloana j. În acest caz vom calcula min1 şi min2, două valori minime de pe
linia i-1.
Rezolvăm relaţia de recurenţă în mod bottom-up.
#include <stdio.h>
#define M 100

int main()
{
FILE *fi,*fo;
unsigned int a[M][M],b[M][M],m,n,i,j,min1,min2,jmin;
fi=fopen("lacusta.in", "rt");
fscanf(fi,"%u %u", &m, &n);
for(i=0; i<m; i++)
for(j=0; j<n; j++)
fscanf(fi,"%u",&a[i][j]);
fclose(fi);
b[1][0]=32000;
for(i=1; i<n; i++)
b[1][i]=a[0][0]+a[0][i]+a[1][i];
for(i=1; i<m-1; i++)
{
if(b[i][0]<=b[i][1])
{
min1=b[i][0];
min2=b[i][1];
jmin=0;
}
else
{
min1=b[i][1];
min2=b[i][0];
jmin=1;
}
for(j=2; j<n; j++)
if(b[i][j]<min1)
{
min2=min1;
min1=b[i][j];
jmin=j;
}
else
if(b[i][j]<min2)
min2=b[i][j];
for(j=0; j<n; j++)
if(j!=jmin)
b[i+1][j]=min1+a[i][j]+a[i+1][j];
else
b[i+1][j]=a[i][j]+a[i+1][j]+min2;
}
min1=b[m-1][0];
for (j=1; j<n; j++)
if(b[m-1][j]<min1) min1=b[m-1][j];
fo=fopen("lacusta.out", "wt");

80
Metodica predării tehnicilor de programare pentru grupele de performanţă

fprintf(fo,"%u\n", min1+a[m-1][n-1]);
fclose(fo);
return 0;
}

CAPITOLUL III

METODICA PREDARII
INFORMATICII

PREDAREA INFORMATICII

Predarea informaticii diferă în conţinut şi stil faţa de predarea altor discipline. Metodica predării
informaticii se conturează abia acum. Toata lumea recunoaşte necesitatea ei, dar este nevoie de curaj şi
timp pentru a o dezvolta, respectiv însuşi. Curaj, deoarece un instrument folositor viitorilor profesori de
informatica nu poate fi realizat fără îndrăzneală necesară de a împărtăşi experienţa didactică proprie.
Timp, deoarece este important ca viitorul profesor să descopere propriile resurse ale imaginaţiei şi
creativităţii.
În predarea informaticii nu există şabloane sau reţete care sa fie obligatorii, în schimb este nevoie
de talent şi de dorinţa de a descoperi chemarea, vocaţia, pentru meseria de profesor. Aceasta chemare
trebuie conştientizată.
Viitorul profesor va trebui să descopere secretele modului în care trebuie educată viitoarea
generaţie care trebuie să dobândească o viziune cu totul nouă despre lume . Societatea super-
informatizată va solicita din partea membrilor săi nu doar cunoaşterea calculatorului şi a modului de
utilizare a acestuia, ci şi o atitudine curajoasă, flexibilă şi dinamică în faţa unor situaţii sau instrumente
informatice noi, necunoscute. Cultura informatică (Computer Literacy) va trebui să devină parte
integrantă din cultura generala a fiecărei persoane, fapt ce impune învăţarea elementelor ei de bază în
şcoală.
Toţi tinerii trebuie să-şi asigure un minim de cunoştinţe de tehnologia informaţiei, necesare utilizării
calculatoarelor în rezolvarea problemelor profesionale în diversele domenii ale vieţii economice. Indiferent
dacă vor absolvi sau nu o instituţie de învăţământ superior, vor avea extrem de mult de câştigat dacă vor

81
Metodica predării tehnicilor de programare pentru grupele de performanţă

avea cunoştinţe de informatică, reuşind astfel să corespundă cerinţelor pe care locurile de muncă ale
prezentului şi viitorului le vor ridica în faţa lor.

MEDODICA PREDĂRII INFORMATICII

Metodica predării unei discipline, în general, caută să răspundă la întrebările:


Ce predăm?
Cât predăm?
Cum predăm?
Fixând atenţia asupra informaticii, trebuie să răspundem la aceste întrebări. Programele şcolare de
azi lasă o libertate destul de mare profesorilor să stabilească chiar şi conţinutul unei discipline. Face parte
din politica curriculară a fiecărei şcoli ca în jumătate din orele rezervate pentru o disciplină, să decidă ce
anume va preda. Apoi trebuie găsit răspuns la întrebarea: „de cat de multa informatica are nevoie fiecare
tânăr?”. Cunoştinţele de informatică prezentate şi învăţate în şcoală se grupează în funcţie de forma de
învăţământ şi de categoria de vârstă.

CE PREDĂM ?

Evident, este foarte important să predam adecvat sferei de interes şi categoriei de vârstă a elevilor,
astfel încât să nu pierdem din vedere faptul ca este mai bine mai puţin dar temeinic, decât mult şi
superficial.

OBIECTIVELE GENERALE ALE INFORMATICII ÎN ÎNVĂŢĂMÂNTUL


ROMÂNESC

a) Pornind de la faptul că nu există domeniu de activitate unde să nu se prelucreze şi să nu se


transmită informaţii atât în cadrul domeniului respectiv cât şi spre exteriorul lui, se poate
afirma că azi informaţia este foarte valoroasă. Ea trebuie stocată, prelucrată şi transmisă în
condiţii care asigură corectitudine şi exactitate, deci la nivel profesional. Rezultă direct că
unul din obiectivele învăţământului de informatică trebuie să fie asigurarea înţelegerii tuturor
problemelor legate de informaţie şi de stocarea , prelucrarea, respectiv transmiterea ei .
b) Dezvoltarea deprinderilor moderne de utilizator , adică pregătirea elevilor astfel încât să poată
folosi posibilităţile oferite de cultura informatică, trebuie să stea în atenţia învăţământului
preuniversitar. Aceasta presupune identificarea şi înţelegerea principalelor componente ale
calculatorului, precum şi a funcţionării reţelelor de calculatoare. Elevii trebuie să cunoască
interfeţele utilizator ale sistemelor de operare şi ale celor mai răspândite utilitare, modul de
instalare, exploatare şi utilizare a acestora. Ei trebuie să deprinderi necesare cunoaşterii şi
folosirii oricărui software nou.

82
Metodica predării tehnicilor de programare pentru grupele de performanţă

c) Dezvoltarea gândirii algoritmice este un obiectiv la realizarea căruia informatica contribuie


esenţial şi eficient. Asemenea matematicii, informatica dezvoltă gândirea în general şi are în
şcoală, dar şi în viaţa de zi cu zi, un rol esenţial în procesul de învăţare, în formarea
caracterului dar şi a personalităţii. Dar informatica dezvoltă gândirea algoritmică prin faptul
că îi obligă pe elevi să finalizeze rezolvări ale unor aplicaţii practice concrete, deci este nevoie
de dezvoltarea abilităţilor concrete de a rezolva probleme.
d) Dezvoltarea deprinderilor necesare muncii individuale se realizează într-un proces firesc, în
dialog cu calculatorul. Calculatorul este un instrument care reacţionează imediat la încercările
elevului şi care totodată nu îşi pierde răbdarea niciodată, oferă şansa învăţării conform
ritmului propriu al fiecăruia, dă posibilitatea lucrului diferenţiat cu elevii talentaţi sau cu cei
care lucrează mai lent. Informatica este esenţial legată de lucrul individual cu un calculator,
deci dezvoltă în mod firesc deprinderea de a lucra individual . Din nefericire, aceasta poate
duce la formarea unor trăsături cum ar fi individualismul sau egoismul. Aici intervine rolul
profesorului: să încurajeze şi să organizeze activitatea în grupuri.
e) Educarea elevilor în spiritul unei activităţi desfăşurate în grup, în colaborare, se finalizează
prin predarea informaticii orientată pe proiecte . Realizarea unei aplicaţii mai complexe
impune lucrul în grup, modularizarea programului şi păstrarea contactului cu ceilalţi membrii
ai grupului. Obişnuirea elevilor cu diverse responsabilităţi, cu răspunderea privind finalizarea
propriei munci şi asigurarea înlănţuirii unor elemente realizate în paralel, îi va pregăti cu o
activitate pe care cu siguranţă o vor întâlni în viitor.
f) Este important ca elevii să fie capabili să aleagă din instrumentarul existent pe cel de care au
nevoie, să identifice şi să folosească software-ul cel mai potrivit aplicaţiei pe care o
realizează. Rezultă că trebuie să fie capabili să analizeze problema, să descopere cerinţele şi
să decidă ce software şi ce instrumente ale acestuia sunt cele mai util. Pe de altă parte,
pentru ca elevul să poată “alege” ceva, el trebuie să afle măcar de existenţa şi caracteristicile
esenţiale mai multor tipuri de software.
g) Educarea elevilor urmărind atent dezvoltarea spiritului inventiv şi creator , se realizează în mai
multe sensuri în cadrul disciplinei informatică. Indiferent de conţinutul programului sau al
aplicaţiei, ceea ce realizează elevul trebuie să funcţioneze, trebuie să fie utilizabil; altfel spus,
trebuie să aibă toate calităţile unui produs finit. Aceste cerinţe î n informatică se realizează
prin:
o interfaţă prietenoasă;
o asigurarea funcţionării aplicaţiei în mod inteligent chiar şi în cazul unui utilizator
neautorizat, sau a unei persoane care nu cunoaşte aplicaţia;
o fiabilitate - aplicaţiile trebuie să fie verificate şi testate;
o performanţă - analiza complexităţii (în cadrul algoritmilor) şi a eficienţei (în cazul
aplicaţiilor nealgoritmice) trebuie să devină obişnuinţă;
o portabilitate;

83
Metodica predării tehnicilor de programare pentru grupele de performanţă

h) În liceu, informatica trebuie să pornească de la un nivel de bază, incluzând Tehnologia


informaticii (Computer Literacy). La acest nivel, informatica nu este o disciplină izolată sau
independentă. Un scop important este ca elevii să ştie să folosească tehnologia informaţiei
pentru a rezolva probleme apărute la alte discipline, sau în alte sfere ale vieţii . Astfel,
profesorii altor discipline pot prezenta sau solicita realizarea unor aplicaţii de tip software
educaţional, deci elevii ar trebui să ştie să uzeze de cunoştinţele dobândite la orele de
informatică, realizând, la rândul lor, instrumente noi, utilizabile în cadrul altor lecţii.
Principalele domenii care ar trebui abordate sunt:
o cunoaşterea şi utilizarea calculatorului;
o procesoare de texte;
o procesoare grafice;
o algoritmi simpli şi noţiuni de programare;
o procesoare calcul tabelar;
o servicii INTERNET;
o documente HTML;
o facilităţi multimedia.
Elevii trebuie să fie capabili să elaboreze, programeze şi execute algoritmi simpli care rezolvă
probleme elementare, sau care pot fi utilizate în cadrul altor discipline. Această introducere în programare
nu trebuie să fie cel mai important capitol; pate fi abordat şi accentuat în mod diferit în clasele cu profil
tehnic, în funcţie de specialitatea studiată.
i) Elevii trebuie să conştientizeze influenţa informaticii asupra societăţii şi invers . Dezvoltarea
impetuoasă a informaticii modifică societatea, de aici rezultând necesitatea înţelegerii rolului
pe care îl au calculatoarele în schimbările din viaţa socială, economică şi aspectelor etice ale
utilizării lor. Elevii trebuie să conştientizeze avantajele şi dezavantajele care derivă din
utilizarea calculatoarelor, respectiv ale reţelelor. În schimb, etica are rolul de a-i atenţiona
asupra drepturilor de autor, a confidenţialităţii informaţiilor, a protecţiei bazelor de date,
asupra efectelor spargerii unor reţele, conturi, ale viruşilor, etc.

CÂT PREDĂM ?

Între componentele procesului de învăţământ, conţinutul învăţământului ocupă locul central


deoarece formarea tânărului se bazează pe informare, pa calitatea informaţiilor şi pe modalităţile
participative de achiziţionare a acestora. Proiectarea întregului demers didactic se realizează în funcţie de
conţinuturile învăţării.
Conceptul de conţinut al procesului de învăţământ defineşte: „ansamblul valorilor specifice şi
dominante într-o societate, selectate din ceea ce a creat mai valoros umanitatea, din cultura epocii
structurate în cunoştinţe ce conduc la formarea unor priceperi, deprinderi, capacităţi, modele de acţiune
şi trăiri afective în conformitate cu cerinţele actuale şi de perspectivă ale societăţii".

84
Metodica predării tehnicilor de programare pentru grupele de performanţă

Proiectarea conţinutului se realizează pornind de la câteva întrebări: „Ce se va preda? Câte valori
urmează să fie transmise şi asimilate? Cum sunt structurate aceste valori? Ce fel de
personalităţi vrem să formăm ?" şi se materializează în instrumentele cu care lucrează învăţământul:
plan cadru, programa şcolară, manual. Odată cu structurarea planului cadru se stabilesc:
 Obiectele de învăţământ de-a lungul anilor de studiu, „într-o succesiune, ordine şi gradare,
avându-se în vedere complexitatea, dinamica şi specificitatea conţinutului, sarcinile de învăţare
pe care le solicită raportate la posibilităţile şi nivelul dezvoltării ontogenetice a elevilor din diferite
grade de şcolarizare"
 Programa şcolară reprezintă un instrument al procesului instructiv-educativ la o disciplină de
învăţământ. Descrie condiţiile deziderabile pentru reuşita învăţării în termeni de obiective,
conţinuturi, activităţi de învăţare.

Programa şcolară descrie „oferta educaţională" la o disciplină pe o perioadă limitată de timp (un an
şcolar) şi oferă sugestii metodologice de abordare a conţinuturilor astfel încât să se atingă obiectivele
stabilite sau competenţele vizate. Noile programe şcolare sunt elaborate în concordanţă cu noile planuri -
cadru de învăţământ.
"Viziunea curriculară" de alcătuire a programelor şcolare permite o „bună orientare" a
predării/învăţării în raport cu „obiectivele de formare care vizează competenţele de nivel superior, de
aplicare a cunoştinţelor şi competenţelor în contexte noi şi de rezolvare de probleme teoretice şi
practice". [23]
Noile programe şcolare nu mai reprezintă o „înşiruire" de conţinuturi grupate în capitole şi lecţii, ci în
interiorul lor, conţinuturile sunt privite ca „vehicule de formare a competenţelor intelectuale şi relaţionale
de nivel superior, a atitudinilor şi comportamentelor necesare unui tânăr într-o societate democratică a
timpului nostru".
în structura programei pentru clasa a IX-a s-a pornit de la ideea că această clasă face parte din
ciclul curricular de observare şi orientare, în elaborarea programei s-au avut în vedere şi următoarele
aspecte:
 Trecerea de la programe analitice centrale pe conţinuturi fixe la programe „centrate pe
obiective care urmăresc achiziţiile finale ale învăţării la elev";
 Promovarea unor strategii didactice care „plasează elevul în centrul procesului didactic".
 Deschiderea spre o „abordare multidisciplinară" care să permită realizarea unor legături între
discipline.
Ţinând cont că liceul trebuie să asigure o pregătire bazată pe achiziţii finale uşor evaluabile,
programele pentru aceste clase, au fost organizate într-o structură care să permită „centrarea pe
competenţe ce urmează a fi formate la elevi şi în acelaşi timp să asigure corelarea conţinuturilor învăţării
cu aceste competenţe".
Organizarea liceului pe filiere, profiluri, specializări a impus elaborarea unor programe şcolare,
pentru curriculum-ul nucleu, diferite pentru specializări diferite. Astfel pentru filiera teoretică, profilul
matematică a fost realizată o programă pentru disciplina Informatică, care vizează dezvoltarea
deprinderilor în elaborarea şi aplicarea unor algoritmi în rezolvarea unor probleme specifice.

85
Metodica predării tehnicilor de programare pentru grupele de performanţă

Pentru disciplinele Tehnologia Informaţiei şi Informatică, care se studiază pe trunchiul comun toate
filierele şi specializările, a fost realizată o programă şcolară care vizează, în primul rând, dezvoltarea
deprinderilor moderne de utilizator.
în sens larg, Curriculum defineşte sistemul de procese decizionale, manageriale şi de monitorizare
care preced, însoţesc şi urmează proiectarea, elaborarea, implementarea, evaluarea şi revizuirea
permanentă şi dinamică a setului de experienţe de învăţare oferite de şcoală.
În sens restrâns, Curriculum defineşte sistemul documentelor de tip reglator sau de altă natură, în
cadrul cărora se consemnează experienţele de învăţare recomandate prin şcoală, elevilor.
În România, Curriculum Naţional formal cuprinde: [23]
 Cadrul curricular - Planul de învăţământ pentru clasele I - XII;
 Programele şcolare elaborate conform tradiţiei româneşti, pe cicluri: primar, gimnazial,
liceal, care sunt aprobate anual, prin ordin al Ministerului Educaţiei şi Cercetării. Elaborarea
acestor documente se realizează în Comisiile Naţionale pentru fiecare disciplină cu profesori
reprezentanţi din ţară care exprimă puncte de vedere direct din interiorul sistemului, din
experienţa de la catedră.
 Reglementări, ghiduri de implementare pentru şcoli, profesori, directori;
 Manuale alternative pentru clasele I - XII;
 Materiale - suport folosite la clasă: auxiliare, culegeri de probleme, texte suplimentare,
caiete de laborator
Noul Curriculum Naţional vizează toate componentele de bază ale procesului de învăţământ:
A. Principii privind curriculum-ul ca întreg :
 Curriculum-ul trebuie să reflecte idealul educaţional al şcolii româneşti aşa cum este acesta
definit în Legea învăţământului
 Curriculum-ul trebuie să respecte caracteristicile de vârstă ale elevului, corelate cu
principiile de psihologie a învăţării
 Curriculum-ul trebuie să stimuleze dezvoltarea unei gândiri critice şi creative
 Curriculum-ul trebuie să-i ajute pe elevi să-şi descopere disponibilităţile şi să le valorifice la
maximum în folosul lor şi al societăţii
B. Principii privind învăţarea:
 Elevii învaţă în stiluri diferite şi în ritmuri diferite.
 învăţarea presupune investigaţii continue, efort şi autodisciplină
 învăţarea dezvoltă atitudini, capacităţi şi contribuie la însuşirea de cunoştinţe.
 învăţarea trebuie să pornească de la aspecte relevante pentru dezvoltarea personală a
elevului şi pentru inserţia sa în viaţa socială.
 învăţarea se produce prin studiu individual şi prin activităţi de grup.
C. Principii privind predarea :
 Predare trebuie să genereze şi să susţină motivaţia elevilor pentru învăţarea continuă.
 Profesorii trebuie să creeze oportunităţi diverse, care să faciliteze atingerea obiectelor
propuse.

86
Metodica predării tehnicilor de programare pentru grupele de performanţă

 Profesorii trebuie să descopere şi să stimuleze aptitudinile şi interesele elevilor.


 Predarea nu înseamnă numai transmitere de cunoştinţe, ci şi de comportamente şi de
atitudini.
 Predarea trebuie să faciliteze transferul de informaţii şi de competenţe de la o disciplină la
alta.
 Predarea trebuie să se desfăşoare în contexte care leagă activitatea şcolară de viaţa
cotidiană.

CUM PREDĂM ?

 Folosind strategiile didactice care includ metode de învăţământ, utilizând materiale şi


mijloace didactice, în diverse forme de activitate didactică;
 Folosind diverse forme de grupare a elevilor: frontal, individual, în echipă.
Strategia de predare este o parte componenta a strategiei didactice, prin care se stabileşte, se
demonstrează, realizează modalitatea generala de concepere şi desfăşurare a predării şi învăţării. Aceasta
modalitate generală se concretizează în stabilirea şi utilizarea a trei elemente: metode de predare,
mijloace de învăţământ, forme de organizare a acţiunilor.
Aceste strategii sunt diferite:
A.
După varietatea elementelor antrenate:
 strategia dirijată - dacă predarea este exclusivă a profesorului şi învăţarea este diferită pas
cu pas, sau
 strategie semi-dirijată - când nu mai domină total profesorul
 strategie inductivă - dacă în predare se pune accent pe modul de gândire al elevilor după
raţionamentul utilizat
 strategie deductivă - când predarea-învăţarea porneşte de la lucruri generale către
exemplificări concrete
 strategii analogice - când predarea-învăţarea se realizează prin comparare cu cunoştinţe,
deprinderi învăţate anterior.

B.
După modul de echilibru al antrenării elevilor în învăţare:
 strategii euristice - când învăţarea domină pe baza acţiunii de căutare a elevilor, iar
predarea este doar de sinteză, coordonare
 strategie algoritmică - când învăţarea este pe baza de reguli, de norme precise
Ioan Neacşu asociază strategiile de predare-învăţare cu modelele de predare rezultate din aplicarea
teoriilor predării. Astfel rezultă strategii care pun accentul pe comportamentul profesorului şi elevilor, pe
modul de conducere a logicii învăţării pe structurarea etapelor învăţării sau după specificul a ceea ce se
învaţă (strategii pentru formarea noţiunilor, strategii pentru învăţarea atitudinilor sau a capacităţilor) sau
strategii care se referă la modalitatea individuală a fiecărui elev de învăţare. [10]

87
Metodica predării tehnicilor de programare pentru grupele de performanţă

Dan Potolea în lucrarea „Structuri strategii si performanţe în învăţământ” arată ca strategiile de


predare sunt determinate de afirmarea rolului conducător al profesorului în lecţie, prin conducere
înţelegând acţiunea de proiectare, de organizare a condiţiilor, de luare de decizii, de adaptare, de
îndrumare continuă, de asigurare a raportului între control şi independentă a elevilor în predare-învăţare.
Rezultă de aici diferite roluri şi competenţe ale profesorului în predare-învăţare: rol de captare a atenţiei,
rol de organizare a condiţiilor, rol de reactualizare, explicare, expunere a cunoştinţelor, rol de provocare a
dialogului cu elevii, rol de sistematizare a conţinutului, rol de pregătire şi utilizare a mijloacelor de
învăţământ în lecţie, rol de îndrumare a elevilor, rol de oferire a punctelor de sprijin în învăţare, rol de
dozare a sarcinilor şi a timpului în lecţie, rol de conducere a demonstraţiei, rol de corectare continuă sau
oferire de noi sarcini, noi exemple.
Dan Potolea precizează ca aceste roluri asigură realizarea tehnologiei didactice, adică a modului
de aplicare a teoriilor predării-învăţării în condiţii concrete. [10]
Metodele de predare sunt părţi componente ale strategiilor de predare şi arată căile prin care se
realizează transmiterea de cunoştinţe, deprinderi şi căile de învăţare corespunzătoare. Metodele se
deosebesc de procedee, acestea fiind aplicaţii ale metodelor în diferite situaţii de predare-învăţare.
Fiecare metodă are mai multe procedee de aplicare după situaţiile concrete. Metodele de predare se
bazează în mod deosebit pe comunicarea cunoştinţelor de către profesor si ele sunt variate după gradul
de antrenare a elevului. Astfel, avem metode de comunicare, orală ( prelegerea, expunerea, descrierea,
povestirea, instructajul) sau metode orale pe seama de dialog sau integrative ( conversaţia, dialogul,
dezbaterea, problematizarea), sau metode de comunicare scrisă prin munca cu manualul, cu alte cărţi,
studiul documentelor sau metoda de comunicare cu sprijinul mijloacelor de învăţământ. Pe lângă aceste
metode de predare avem şi metode de învăţare ale elevului corelate cu cele de predare: metoda prin
descoperire, căutare directă sub conducerea profesorului (sub forma exerciţiului, metodelor practice).
Adrian Neculau arată că metodele de predare indică o cale ştiinţifică metodica de realizare a
strategiilor predării, şi ele constau în indicarea modului de accesabilizare a cunoştinţelor de către
profesor, indică comportamentul profesorului în predare, rolurile pe care le îndeplineşte în predare, arată
cât poate să predea din conţinut şi cum poate să predea conţinutul în funcţie de elevi şi de formele de
învăţare, arată cum să adapteze sarcinile de lucru la particularităţile individuale ale elevilor, arată cum să
fie activaţi elevii prin diversificarea procedeelor la fiecare metoda, arată elevului modele cum să se
cunoască şi să se trateze o tema, un conţinut, indică criteriile de evaluare a rezultatelor prin metode
specifice de verificare şi evaluare. [22]
Stil de predare - acesta indică modalitatea în care profesorul concepe proiectarea activităţii, îşi
alege, îşi ordonează strategiile, metodele, mijloacele după obiective tipul de învăţare, după nivelul elevilor
şi alte condiţii.
El indica modul personal al profesorului, de concepere şi desfăşurare a activităţii, el evidenţiază
experienţa acumulată, pregătirea pedagogică arată modelul de predare ales în conceperea activităţii,
nivelul de creativitate didactică al profesorului, modelul de combinare specifică a procesului de
învăţământ, reflectă nivelul competentelor didactice, reflectă modul de conducere al elevilor.
Stilul de predare este strâns legat de celelalte trăsături ale personalităţii: aptitudini pedagogice,
motivaţia profesională, trăsături de caracter, etc.
88
Metodica predării tehnicilor de programare pentru grupele de performanţă

Exista mai multe tipuri de stiluri de învăţare:


 după accentul pus pe învăţare:
o stil centrat pe elev, cu metode de activizare a elevilor;
o stil centrat pe metode de expunere;
o stil de echilibrare a celor două elemente.
 după relaţia cu elevii:
o stil autoritar;
o stil democratic;
o stil permisiv;
o stil consultativ;
o stil participativ în grupuri de elevi;
 după acţiunile desfăşurate:
o stil de predare propriu-zisă;
o stil de îndrumare;
o stil de încurajare;
o stil de atribuire de sarcini;
 după modul de concepere al realizării obiectivelor:
o stil bazat pe normele pedagogice;
o stil creativ prin adaptarea la situaţie.

METODE DE ÎNVÃTÃMÂNT
Metodele de învăţământ reprezintă modalităţi sistematice de lucru de care se pot servi profesorii în
activitatea de instruire iar elevii în aceea de învăţare, capabile să conducă spre rezolvarea obiectivelor
pedagogice propuse.
Din perspectiva profesorului, metodele de învăţământ servesc la organizarea şi conducerea unei
acţiuni sistematice prin care elevul va realiza obiectivele pedagogice, arătându-i  ce face  şi  cum să
acţioneze .
Din perspectiva elevului, metodele de învăţământ au menirea să parcurgă calea spre cunoaştere,
spre dobândirea de noi comportamente care îi sporesc valoarea personalităţii arătându-i de asemenea 
ce să facă  şi  cum să facă .
Metodele de învăţare-formare pot fi grupate în trei secţiuni:
 metode şi procedee expozitiv-euristice;
 metode şi procedee algoritmice;
 metode şi procedee evaluativ-stimulative (vezi Evaluarea).

89
Metodica predării tehnicilor de programare pentru grupele de performanţă

METODE ŞI PROCEDEE EXPOZOTIV - EURISTICE

 EXPUNEREA
Caracterizare:
Este o metodă complexă de comunicare sistematică şi continuă a cunoştinţelor dintr-un anumit
domeniu de specialitate prin intermediul limbajului oral, îmbinat, după caz şi posibilităţi, cu alte  limbaje
, cum ar fi cele demonstrativ-intuitive, audio-vizuale, experimental-aplicative şi de investigaţie, logico-
matematică şi altele.
În funcţie de particularităţile şi cerinţele specifice ale gradului şi profilului învăţământului, ale
disciplinei de studiu, ale tipului de activitate didactică, de particularităţile elevilor etc., expunerea poate
folosi forme variate de realizare: descrierea, explicaţia, prelegerea.
 Descrierea
Este o formă de expunere care, realizată pe baza observaţiei, îndeosebi, prezintă caracteristicile şi
chiar detaliile exterioare tipice ale obiectelor, proceselor, fenomenelor etc. care se studiază, urmărind să
evidenţieze aspectele fizice ale acestora.
Descrierea se bazează pe intuiţie (observaţie directă) şi se corelează cu datele experienţei şi nivelul
pregătirii elevilor în domeniul respectiv de specialitate, fapt care serveşte îmbinării cunoaşterii şi învăţării
senzoriale cu a celei raţionale.
 Explicaţia
Metoda urmăreşte clarificarea unor noţiuni, principii, legi prin evidenţierea notelor esenţiale,
a legăturilor cauzale dintre obiecte şi fenomene. În acest sens se apelează la diferite procedee cum ar fi:
procedeul inductiv, procedeul deductiv, procedeul comparaţiei şi analogiei, procedeul genetic şi istoric,
procedeul analizei cauzale etc.
Explicaţia contribuie la lărgirea şi adâncirea orizontului ştiinţific, la dezvoltarea proceselor
intelectuale, la formarea gândirii tehnice, la formarea concepţiei despre lume şi viaţa.
 Prelegerea
Constă în expunerea de către profesor a unui volum mai mare de informaţii printr-o înlănţuire logică
de raţionamente prin relevarea legăturilor complexe dintre obiecte şi fenomene. Se foloseşte atunci când
materialul ce urmează a fi predat este bogat şi cu caracter de noutate pentru elevi. Apelează la capacită-
ţile intelectuale ale elevilor şi necesită o atenţie concentrată din partea acestora şi o maturizare în
gândire.

Potenţialul pedagogic:
 Permit transmiterea unui volum mare de cunoştinţe într-un timp scurt.
 Asigură desfăşurarea procesului de învăţământ într-un ritm planificat.
 Constituie un cadru corespunzător de argumentare ştiinţifică.
 Solicită concomitent mai multe procese psihice (gândirea, imaginaţia, afectivitatea).
 Sporesc motivaţia de participare a elevilor în situaţia când profesorul se bucură de prestigiu
recunoscut.

90
Metodica predării tehnicilor de programare pentru grupele de performanţă

Cerinţe de aplicare:
Conţinutul transmis trebuie să beneficieze de:
 nivel ştiinţific ridicat;
 argumentaţie logică şi ierarhizare riguroasă a ideilor;
 claritate în expunere;
 accesibilitatea cunoştinţelor transmise;
 expresivitate în exprimare;
 formularea concluziilor parţiale şi generale.

Limitele metodei:
 Comunicarea se face în sens unic, profesor spre elevi;
 Solicitare mică a gândirii independente;
 Grad redus de participare a elevilor la actul de învăţare;
 Nu asigură conexiunea inversă.

Modalităţi de realizare:
 Prin expunerea sistematică a unor fapte sau evenimente.
 Ex: operaţiile tehnologice din cadrul unei tehnologii de fabricaţie.
 Explicarea prin argumentarea logică.
 Ex: explicarea unui lanţ cinematic.
 Efectuarea de instructaje.
 Ex: realizarea unui instructaj curent de protecţia muncii.
 Prezentarea de probleme şi soluţii.
 Ex: expunerea fenomenului de coroziune a metalelor şi a soluţiilor de protejarea
suprafeţelor.
 Lectura unor texte în colectiv.
 Ex: despre standardizare şi tipizare.

 CONVERSAŢIA
Caracterizare:
Este metoda care vehiculează cunoştinţe prin intermediul dialogului (întrebărilor şi răspunsurilor),
discuţiilor sau dezbaterilor.
Conversaţia poate lua una din cele două forme principale cunoscute:
 conversaţia socratică implică utilizarea unor întrebări judicios alese şi formulate astfel
încât să-l conducă pe elev către descoperirea adevărului pe care îl urmăreşte cel care
conduce conversaţia. Întrebările, în acest caz, conduc în mod unidirecţional către un răspuns
final pe care profesorul îl aşteaptă din partea elevului.

91
Metodica predării tehnicilor de programare pentru grupele de performanţă

 conversaţia catehetică presupune simpla reproducere a cunoştinţelor asimilate în etapele


anterioare în vederea fixării şi consolidării lor.
După specificul întrebărilor care declanşează răspunsul putem distinge următoarele tipuri de
conversaţii:
 conversaţii ce se bazează pe întrebări închise (întrebările presupun un singur răspuns, elevul
alegând una din cele două variante posibile, adevărat sau fals);
 conversaţii ce se bazează pe un lanţ de întrebări închise (răspunsul dat la fiecare întrebare
declanşează alte întrebări până se ajunge la rezultatul final stabilit în prealabil)
 conversaţii ce se bazează pe întrebări deschise (elevii au posibilitatea să aleagă răspunsurile
corecte dintre mai multe posibilităţi sau să-şi formuleze ei înşişi răspunsurile apelând la
cunoştinţele dobândite);
 conversaţii ce se bazează pe întrebări stimulatorii şi exploratorii (elevii formulează răspunsurile şi
întrebările pe baza căutărilor şi frământărilor individuale).

În funcţie de modul în care este implicat procesul gândirii în asimilarea cunoştinţelor se disting:
 conversaţia convergentă (întrebările vizează obţinerea aceluiaşi răspuns);
 conversaţia divergentă (angajează elevii în descoperirea adevărului prin analiza alternativelor pe
care le implică întrebarea)

Tehnicile interogative sunt eficiente, evaluarea răspunsurilor la întrebări putându-se constitui în


punctaje, oferind astfel posibilitatea de competiţie între elevi, stimulând interesul şi ambiţia de depăşire şi
autodepăşire.

Potenţialul pedagogic:
 Favorizează perfecţionarea relaţiei profesor-elev.
 Stimulează efortul elevilor pentru exprimări clare şi răspunsuri corecte.
 Dezvoltă ambiţia elevilor de afirmare intelectuala, curiozitatea, înţelegerea şi iniţiativa.

Cerinţe de aplicare:
 Să se bazeze pe cunoştinţe, experienţe şi observaţii anterioare sau pe materiale intuitive.
 Să vizeze un singur răspuns la o întrebare.
 Să inducă o tensiune psihică pentru aflarea răspunsului.
 Formularea răspunsurilor trebuie să aibă următoarele calităţi:
o corectitudine de fond;
o exprimare precisă şi clară;
o răspuns complet;
o să probeze înţelegerea faptelor şi a legăturilor cauzale;
o să fie elaborate independent.

92
Metodica predării tehnicilor de programare pentru grupele de performanţă

Limitele metodei:
 Nu asigură în suficientă măsură sistematizarea cunoştinţelor.
 Participarea efectivă la conversaţie revine numai unui grup de elevi dintr-o clasă.
 Fragmentează problemele şi nu asigură continuitatea activităţilor individuale.
 Nu se pot folosi în cazul în care noile cunoştinţe nu sunt sprijinite de materiale intuitive şi de
experienţă.
 Participarea la dialog este condiţionată de interesul şi pregătirea elevilor.
 De regulă această metoda nu creează fond emoţional.
 Se manifestă tendinţa de a depăşi timpul afectat unei lecţii.

Modalităţi de folosire:
 Omogenizarea momentului iniţial al unei activităţi de instruire.
Ex: discutarea realizării sarcinilor primite în lecţia anterioară.
 Însuşirea de noi cunoştinţe.
Ex: obţinerea prin organizarea unei conversaţii a părţilor principale ale unei maşini-unelte.
 Consolidarea cunoştinţelor.
Ex: recunoaşterea prin conversaţie a lanţului cinematic pentru obţinerea mişcării principale a
arborelui principal la o maşină-unealtă.
 Formarea şi dezvoltarea capacităţilor intelectuale.
Ex: organizarea unei conversaţii care să-i solicite pe elevi să găsească soluţii noi de fabricaţie a
unor repere.
 Formarea de deprinderi.
Ex: organizarea unei conversaţii pentru formarea deprinderilor de comunicare prin simboluri a
stării suprafeţelor pieselor prelucrate.

 PROBLEMATIZAREA
Caracterizare:
Problematizarea este modalitatea de instruire a elevilor în care se îmbină rezolvarea de probleme şi
situaţii-problemă, valorificarea experienţei anterioare a elevilor cu efectuarea unui efort personal de
rezolvare.
Situaţia-problemă se caracterizează prin aceea că oferă elevului posibilitatea să caute singur soluţia,
orientându-se după anumite repere mai mult sau mai puţin detaliate.
În cadrul aplicării acestei metode se pot delimita trei momente succesive:
 momentul pregătitor care constă în crearea situaţiei-problemă.
Se pot distinge trei cazuri:
− profesorul creează în mod intenţionat o situaţie-problemă, iar explicaţiile conduc
la rezolvarea ei.
− profesorul creează în mod intenţionat o situaţie-problemă, rezolvarea având loc
în mod independent de către elevi;
− elevii înşişi creează o situaţie-problemă şi tot ei o rezolvă în mod independent.
93
Metodica predării tehnicilor de programare pentru grupele de performanţă

 momentul tensional care reprezintă intensitatea contradicţiilor dintre ceea ce se


solicită şi cunoştinţele anterioare;
 momentul rezolutiv care urmăreşte desprinderea soluţiei şi confirmarea ei de către
profesor.

Potenţialul pedagogic al metodei:


 Stimulează participarea elevilor la cunoaşterea prin efort propriu.
 Contribuie substanţial la educarea sistemului de gândire.
 Sprijină formarea unor deprinderi de muncă intelectuală.
 Familiarizează elevul cu modul de soluţionare a unor situaţii tipice.
 Contribuie la perfecţionarea relaţiei profesor-elev.
 Sprijină formarea unor capacităţi cognitive (sesizarea situaţiilor-problemă, capacitatea de
rezolvare a problemelor, capacitatea de recunoaştere a noilor soluţii, capacitatea de aplicare în
practică a soluţiei propuse).

Cerinţe de aplicare:
 Profesorul trebuie să dea clasei seturi de probleme pe care trebuie să le elaboreze.
 Sarcinile de activitate cerute să provoace dinamizarea cunoştinţelor existente în sprijinul
dobândirii de cunoştinţe noi.
 Elementele cognitive noi să derive din cele dobândite de elevi.
 Problemele să fie adaptate la posibilităţile de rezolvare ale elevilor.
 Învăţarea problematizată să se realizeze continuu.

Limitele metodei :
 Timpul de desfăşurare este impus de posibilităţile de rezolvare a majorităţii elevilor.
 La elevii neantrenaţi se produce frecvent o stare de oboseală.
 Participarea elevilor este condiţionată de motivaţia de învăţare.
 Elevii pot pierde continuitatea învăţării dacă nu este asigurată o conexiune inversă de reglaj.

Modalităţi de folosire:
 Poate fi aplicată în predarea tuturor disciplinelor de învăţământ, în toate etapele procesului
didactic şi la nivelul tuturor ciclurilor şcolare.

 DESCOPERIREA
Caracterizare:
Metoda descoperirii constă în utilizarea de către elevi a experienţei şi capacităţii individuale în
vederea aplicării lor asupra unei situaţii-problemă în scopul găsirii soluţiei. Elevul desfăşoară în acest sens
o activitate intensă de observare, prelucrare şi stabilire a concluziilor.
Descoperirea presupune raportarea continuă la experienţa anterioară în vederea folosirii ei pentru
soluţionarea problemei. Este cunoscut faptul că ceea ce se obţine prin efort propriu nu se reduce la

94
Metodica predării tehnicilor de programare pentru grupele de performanţă

simpla întipărire în memorie ci conduce la dezvoltarea aptitudinilor şi intereselor, a deprinderilor de


investigare, crearea unei atitudini explorative şi experimentale.
Descoperirea poate fi:
 independentă - predominantă fiind activitatea individuală a elevilor, profesorul având
rol de supraveghere şi control;
 dirijată - profesorul conduce descoperirea prin sugestii, întrebări ajutătoare, informaţii
suplimentare etc., toate urmărind canalizarea spre soluţia scontată.
Potenţialul pedagogic:
 Asigură însuşirea metodologiei de descoperire a cunoştinţelor.
 Dezvoltă spiritul de observaţie, gândirea logică şi creativitatea.
 Creează spiritul analitic.
 Asigură posibilitatea elevilor să surprindă legăturile cauzale dintre fenomene.
 Favorizează efortul de gândire şi diminuează activitatea de memorare mecanică.
 Sporeşte motivaţia învăţării.
 Asigură remanenţa cunoştinţelor dobândite.
 Deschide elevului posibilitatea participării active la educaţia permanentă.

Cerinţe de aplicare:
 Proiectarea procesului de învăţământ trebuie să se facă în raport cu elementele caracteristice
acestei metode.
 Pentru realizarea sarcinilor didactice, elevii trebuie să parcurgă etapele:
o confruntarea cu problema;
o declanşarea procesului de descoperire;
o sesizarea relaţiilor anterioare şi formularea rezultatelor.

Limitele metodei:
 Necesită rezervarea unui timp mai îndelungat.
 În cazul unor probleme complexe, realizarea înţelegerii bazate numai pe efortul personal al
elevului poate întâmpina dificultăţi.

 MODELAREA
Caracterizare:
Modelul reprezintă un sistem material sau teoretic care reproduce, la scară, structura unui sistem pe
care ne propunem să-l cunoaştem. Cu alte cuvinte, un obiect, un fenomen, un sistem tehnologic sau un
proces real poate fi reprodus cu ajutorul modelului.
Cunoaşterea realităţii se realizează astfel în mod indirect prin intermediul modelului, care trebuie să
îndeplinească astfel o funcţie demonstrativă condensând informaţiile pe care elevii urmează să le
descopere.
Modelele didactice pot fi:

95
Metodica predării tehnicilor de programare pentru grupele de performanţă

 obiectuale - reproduc sub forma materială la o scară redusă diferite obiecte şi procese
din realitate (machete, piese secţionate);
 iconice- reproduc fenomenul sau procesul tehnologic cu ajutorul imaginii (scheme,
schiţe, organigrame, grafice etc.);
 simbolice - reproduc originalul cu ajutorul semnelor convenţionale;
 informatice - reproduc originalul cu ajutorul unor facilităţi oferite de mijloacele
multimedia (imagine, animaţie, sunet).
Modele informatice sunt practic programe de calculator interactive care permit simularea
funcţionării unor echipamente tehnologice, instalaţii etc.
Ex: poate fi modelat modul de funcţionare al unui motor cu aprindere prin scânteie.
Indiferent de natura lor modelele didactice sunt considerate analogii ale realităţii şi nu copii ale ei,
reproducând în principal structura obiectelor, fenomenelor şi proceselor în vederea realizării sarcinilor
învăţării.

Potenţialul pedagogic:
 Modelul didactic sprijină trecerea de la cunoaşterea senzorială la formele logice ale cunoaşterii.
 Modelul stimulează funcţiile creative ale gândirii.
 Modelul serveşte ca instrument de sprijin pentru soluţionarea unor probleme.
 Cu ajutorul modelului se pot exersa diferite deprinderi.
 Modelul oferă posibilitatea elevilor de a exersa şi aplica cunoştinţele în contexte noi, variate.
 Cu ajutorul modelelor elevii pot analiza părţile componente ale unei machete tehnice.

 LUCRĂRILE EXPERIMENTALE
Caracterizare:
În acest caz elevii sunt puşi în situaţia de a experimenta pentru a cunoaşte în mod nemijlocit diferite
fenomene. În cadrul lucrărilor experimentale sunt utilizate instalaţii, dispozitive şi materiale
corespunzătoare. Metoda constă în efectuarea de către elevi , sub supravegherea profesorului a unor
experienţe in scopul acumulării de informaţii ştiinţifice de către elevi. Experienţele pot fi efectuate
individual sau în grup, în laborator sau atelier.
Profesorul indică principalele etape ce urmează a fi parcurse şi supraveghează desfăşurarea
experimentelor prin întrebările ce le adresează pe parcurs pentru a orienta atenţia elevilor spre soluţia
finală sau spre concluzii valide. Simultan cu executarea operaţiilor indicate, elevii observă ceea ce se
întâmplă şi înregistrează rezultatele obţinute.
După încheierea lucrării experimentale are loc o conversaţie finală în cadrul căreia se desprind ideile
generale fixându-le sub formă de concluzii.
Lucrările experimentale pot fi:
 frontale - toţi elevii efectuează concomitent aceeaşi experienţă. Profesorul urmăreşte activitatea
elevilor putând interveni cu recomandări şi precizări individuale sau colective. Acest tip de lucrări
este posibil când fiecare elev posedă câte o trusă de instrumente;

96
Metodica predării tehnicilor de programare pentru grupele de performanţă

 pe grupe - se repartizează fiecărei grupe sarcini diferite sau toate grupele efectuează aceeaşi
lucrare;
 individuale - fiecare elev îndeplineşte o sarcină concretă diferită de a celorlalţi, folosind aparate
şi instrumente adecvate.
După finalitatea lor pedagogică lucrările experimentale pot fi:
 demonstrative - sunt efectuate de către profesor, în faţa clasei cu scopul de a demonstra şi
confirma adevărurile transmise;
 aplicative - se efectuează de către elevi pe baza unui protocol întocmit de profesor în vederea
urmăririi posibilităţilor de aplicare în practică a cunoştinţelor teoretice;
 experimentale - sunt destinate formării abilităţilor şi deprinderilor motrice de mânuire a
instrumentelor şi aparatelor din laboratoare şi ateliere şcolare;
 cu caracter de cercetare - elevii sunt puşi în situaţia de a concepe ei înşişi montajul
experimental, pornind de la o ipoteza şi continuând cu culegerea datelor şi desprinderea
concluziilor.

 LUCRĂRILE PRACTICE ŞI APLICATIVE


Caracterizare:
În cazul acestei metode, elevii sunt puşi în situaţia de a executa ei înşişi, sub conducerea şi
îndrumarea profesorului, diferite lucrări cu caracter aplicativ în scopul fixării şi consolidării cunoştinţelor şi
pentru formarea priceperilor şi deprinderilor.

Potenţialul pedagogic:
 Efectuarea unor lucrări practice sprijină consolidarea şi aplicarea cunoştinţelor în situaţii concrete.
 Contribuie la formarea corectă a deprinderilor.
 Formează şi consolidează aptitudini.
 Efectele pedagogice sporesc pe măsură ce creşte caracterul creator al acestora.
 Elevul beneficiază de posibilitatea autocontrolului.
 Cultivă aptitudini profesionale.

Cerinţe de aplicare:
 Elevii trebuie să cunoască şi să înţeleagă scopul şi principiul pe care îl fundamentează lucrarea.
 Efectuarea corectă a lucrării necesită dimensionarea prealabilă.

Limitele metodei:
 Aplicarea metodei necesită un mediu de instruire corespunzător.

 LUCRUL ÎN GRUP
Caracterizare:
Presupune distribuirea elevilor pe grupuri, rezolvarea sarcinilor didactice având loc prin confruntarea
punctelor de vedere, prin discuţii reciproce.
97
Metodica predării tehnicilor de programare pentru grupele de performanţă

Metoda constă în declanşarea şi menţinerea unor relaţii de cooperare şi competiţie dintre membrii
unui grup sau mai multor grupe de elevi în vederea obţinerii unei performanţe sporite a învăţării.

Potenţialul pedagogic:
 Poate spori eforturile individuale ale învăţării ca urmare a îmbinării lor cu eforturile şi inteligenţa
grupului.
 Conduce la ridicarea ştachetei învăţării.
 Stimulează un control reciproc între elevi şi spiritul de iniţiativă.
 Este o metodă de socializare, de formare a spiritului de cooperare şi întrajutorare reciprocă, de
competiţie loială.
 Întreţine un climat deschis, democratic, stimulativ.

METODE ŞI PROCEDEE ALGORITMICE

 ALGORITMIZAREA
Caracterizare:
Constă în elaborarea şi aplicarea unor scheme, constituite dintr-o succesiune de secvenţe şi operaţii,
în scopul rezolvării unor probleme şi asimilării pe această bază a cunoştinţelor, concomitent cu formarea
capacităţilor operaţionale corespunzătoare.
Algoritmii se prezintă sub diferite forme:
 reguli de calcul;
 scheme de desfăşurare a unei activităţi;
 instructaj riguros care indică ordinea acţiunilor ce trebuie executate etc.
Orice algoritm se caracterizează printr-o succesiune de elemente (secvenţe, operaţii), prin caracterul
univoc al acestei succesiuni, printr-o finalitate precisă, prin claritatea lui în sensul că, aplicat de persoane
diferite, va asigura un răspuns corect.

Potenţialul pedagogic:
 Micşorează eforturile şi timpul de efectuare a acţiunilor.
 Măreşte productivitatea muncii intelectuale sau practice.

Cerinţe de aplicare:
 Alegerea corectă a algoritmului corespunzător rezolvării problemei.
 Conştientizarea caracteristicilor algoritmului pentru a fi folosit adecvat, creator şi eficient.

 INSTRUIREA PROGRAMATĂ
Caracterizare:
Constituie o aplicare a principiilor ciberneticii la procesul de învăţământ.

98
Metodica predării tehnicilor de programare pentru grupele de performanţă

Aplicând principiul transmiterii şi receptării informaţiei procesului de învăţământ, instruirea


programată realizează o ordonare specială a informaţiei prin divizarea ei în unităţi logice (paşi) care
urmează să fie asimilate de către elevi.
Toate aceste unităţi prezentate într-o succesiune logică constituie programul activităţii de predare-
învăţare.

Potenţialul pedagogic:
 Activează şi individualizează maxim instruirea.
 Dezvoltă un stil eficient de muncă individuală.
 Manifestă un puternic caracter formativ.
 Poate fi adaptat la colectivul de elevi cu pregătire eterogenă.
 Realizează feed-back-ul la cel mai înalt grad.

Limitele metodei:
 Elevii obosesc repede.
 Serveşte latura de instruire şi în mai mică măsură latura educativă.
 Creează decalaje mari în ritmul de învăţare a elevilor.
 Implică cheltuieli ridicate.

 EXERCIŢIUL
Caracterizare:
Exerciţiile sunt considerate ca acţiuni intelectuale sau motrice ce se repetă relativ identic în scopul
învăţării sau formării unor tehnici de lucru de natură mentală sau motrică.
Dacă asimilarea cunoştinţelor se realizează prin comunicare verbală sau prin contactul nemijlocit cu
realitatea, formarea deprinderilor motrice sau intelectuale este posibilă numai prin efectuarea repetată a
unor acţiuni motrice sau intelectuale.
Exerciţiul se desfăşoară în mod algoritmic şi se încheie cu formarea unor priceperi şi deprinderi ce
vor putea fi aplicate ulterior în rezolvarea unor sarcini mai complexe.

Potenţialul pedagogic:
 Contribuie la formarea corectă a deprinderilor.
 Efectele pedagogice sporesc pe măsură ce creşte caracterul creator al exerciţiilor.
Cerinţe de aplicare:
 Tipurile de exerciţii trebuie să corespundă dezvoltării psihice a elevilor în sensul că ponderea
exerciţiilor pentru stimularea creativităţii să sporească în comparaţie cu exerciţiile reproductive.
 Pentru a asigura automatizarea deprinderilor, exerciţiile trebuie desfăşurate într-o succesiune
didactică.
 Efectuarea de către elevi a exerciţiilor în mod conştient.

99
Metodica predării tehnicilor de programare pentru grupele de performanţă

INSTUIREA PROGRAMATĂ ASISTATĂ DE CALCULATOR

Societatea informatizării aduce modificări sensibile în programele de educaţie. Şcoala trebuie să


pregătească analişti, programatori, tehnicieni pentru întreţinere şi telecomandă etc. În acelaşi timp, se
impune pregătirea cadrelor didactice pentru a folosi în învăţământ calculatorul electronic combinat cu
sistemul video-text şi videodisc, sistemele EXPERT, instruirea cu ajutorul televizorului şi a filmului
tridimensional, emisiunile cu conţinut didactic transmise prin sateliţi, tehnologia comunicării de la distanţă
în învăţământ, băncile de date care cuprind programe educaţionale, diferite tipuri de simulatoare etc.
Aceste tehnici informaţionale impun restructurarea conţinutului procesului de învăţământ, a
programelor, manualelor şi cursurilor universitare, reconsiderarea metodelor şi a formelor de organizare a
activităţilor didactice, care vor fi centrate pe individualizarea procesului de instruire. [10]
În învăţământ, calculatoarele pot îndeplini mai multe funcţii: de instruire, instrument de cercetare
ştiinţifică şi funcţia administrativă ( gestiunea financiară, lucrări de birotică şcolară etc.).
Calculatorul, asociat cu video-textul şi video discul este folosit în activităţile didactice în diferite
forme:
 secvenţe de pregătire pentru transmiterea de informaţii, punerea de întrebări, rezolvări de
exerciţii şi probleme, prezentarea de algoritmi pentru rezolvare unor probleme-tip,
proiectarea de grafice şi diagrame, aplicaţii practice, demonstrarea unor modele,
interpretarea unor date etc.;
 simularea unor fenomene, a unor experienţe şi interpretarea lor, simulatoare pentru
formarea unor deprinderi (conducerea auto, dactilografie);
 simularea unor jocuri didactice; evaluarea rezultatelor la învăţătură şi autoevaluare;
 organizarea şi dirijarea învăţării independente pe baza unor programe de învăţare, însoţite
de fişe-program, constituind şi un fel de documentaţie a soft-ului.
La fizică pot fi folosite soft-uri pentru studiul individual, pentru un dispozitiv experimental,
interpretarea datelor experimentale, formarea deprinderilor de a rezolva probleme de fizică pe baza unor
scheme logice, spre exemplu pentru rezolvarea problemelor de mecanică.
Programele computerelor de instruire inteligentă oferă informaţii la cerere pentru diferite teme,
posibilitatea de a dialoga adaptându-se la nivelul interlocutorului, schimbarea temei de conversaţie,
având şi capacitatea de a recunoaşte şi corecta greşelile.
Programele cuprind informaţii organizate metodic, care pot fi însuşite activ şi conştient, folosind
învăţarea prin descoperire, simulare şi jocul didactic.
Fazele de elaborare programelor ( soft-urilor) pentru un calculator sunt aproximativ aceleaşi ca la
instruirea programată folosind manualul:
 precizarea obiectivelor operaţionale şi a conţinutului; structurarea logică a conţinutului şi
fragmentarea lui pe secvenţe de învăţare;
 stabilirea întrebărilor, a exerciţiilor sau a problemei de rezolvat, după fiecare secvenţă de
învăţare;

100
Metodica predării tehnicilor de programare pentru grupele de performanţă

 fixarea procedeelor de lucru sub formă de comenzi: formulează răspunsul, confruntă-l cu cel
corect, alege răspunsul, rezolvă, doreşti informaţie suplimentară, identifică, interpretează,
explică, demonstrează etc.;
 elaborarea programului şi transpunerea lui în limbajul cunoscut de calculator;
 verificarea şi corectarea programului, dacă este necesar.

Pentru rezolvarea unor probleme cu ajutorul calculatorului, fazele pot fi următoarele:


 enunţarea problemei, evidenţiindu-se ce se cunoaşte şi ce se solicită;
 analiza problemei (pentru a decide dacă este rezolvabilă cu calculatorul);
 se studiază suficienţa datelor, alegerea sau găsirea unui algoritm pentru rezolvare;
 alegerea limbajului de programare convenabil;
 eliberarea algoritmului (a schemei logice de rezolvare);
 scrierea programului în limbajul calculatorului;
 testarea, verificarea şi cercetarea programului, după ce au fost înlăturate erorile constatate;
pregătirea datelor ce urmează a fi prelucrate de calculator.

Învăţarea asistată de calculator este un factor de progres în activitatea didactică, însă, dacă
programele nu sunt alcătuite pe baza unor cerinţe didactice şi nu are în vedere dezvoltarea creativităţii,
eficienţa poate fi scăzută, mai ales din punct de vedere formativ.
Instruirea programată poate fi transformată cu succes într-o metodă activă dacă se are în vedere
implementarea sa, cu măiestrie, într-o strategie, activ-participativă, ca rezultat al aplicării unor metode de
genul descoperirii, algoritmizării, problematizării şi exerciţiului etc.
Desigur că nu vom avea pretenţia de a considera suficiente observaţiile făcute din perspectiva
modernizării şi activizării metodelor prezentate, dar sperăm ca ideile respective să poată fi luate în
considerare în cazul unui studiu făcut asupra metodelor, mai larg, şi mai amănunţit, care să cuprindă un
volum mai mare de informaţii şi din aceste motive nu ar putea fi inclus în lucrarea prezentă.

DIRECŢII DE MODERNIZARE A METODELOR DE


PREDARE-ÎNVAŢARE

Principalele mobiluri ale perfecţionării şi modernizării metodelor de învăţământ nu sunt altele decât
aceleaşi impulsuri care propulsează dezvoltarea progresivă a întregului învăţământ de astăzi. Profesorul
trebuie să dovedească o mai mare capacitate de gândire creatoare şi de acţiune constructivă, de
cercetare şi previziune, spirit de invenţie şi de inovaţie.
În ultima vreme s-a ajuns la înţelegerea mai profundă a raportului dintre învăţare şi legile dezvoltării
mintale, dintre instrucţie şi formarea personalităţii. Dispunem de o metodă de abordare sistematică a
învăţământului, de o taxonomic a obiectivelor. Recentele progrese ne ajută să înţelegem altfel decât până
acum multe dintre principalele aspecte ale organizării învăţării, ne dau posibilitatea să întrevedem o
inovaţie metodologică dedusă nu doar din stricta experienţă directă la catedră, dar şi ştiinţifică, inspirată
din cunoaşterea legităţilor învăţării şi ale dezvoltării personalităţii.
101
Metodica predării tehnicilor de programare pentru grupele de performanţă

Vechile metode mai pot fi utilizate în anumite situaţii, atunci când profesorul decide că este necesar,
dar pot fi îmbinate, îmbunătăţite şi modernizate, astfel încât să se atingă scopul propus.

Luate în forma brută, iniţială, a lor, metodele învechite, practicate până acum, au câteva
caracteristici, cum ar fi:
 acordă prioritate instrucţiei;
 pun accent pe însuşirea materiei, au orientare intelectualistă;
 sunt centrate pe activitatea profesorului, promovând un „învăţământ magistral";
 pun accentul pe predare;
 elevul este privit ca obiect al instruirii;
 neglijează însuşirea metodelor de studiu individual, personal;
 sunt centrate pe comunicarea orală, pe cuvânt, livreşti;
 sunt receptive şi pasive, bazate pe memorie şi reproducere;
 sunt orientate pe produs, prezentând ştiinţa ca pe o sumă de cunoştinţe finite;
 sunt abstracte, orientate spre aspectul formal al realităţii, au prea puţin caracter aplicativ,
menţinând o legătură sporadică cu activitatea practică;
 impun o conducere rigidă a instrucţiei;
 impun un control formal, aversiv;
 promovează numai competiţia;
 presupun fie o individualizare excesivă, fie o socializare exagerată a învăţării;
 se bazează pe o motivaţie exterioară ( extrinsecă), cu evidente elemente de reprimare, de
frică şi de constrângere;
 întreţin relaţii rigide, autocratice între profesor şi elevi;
 profesorul are rolul de „depozitar" şi „transmiţător" de cunoştinţe;
 disciplina învăţării este impusă prin constrângere.

Revoluţionarea metodologiei didactice presupune transformarea celui care învaţă în subiect activ al
propriei formări, dar şi apropierea cunoaşterii didactice de cunoaşterea ştiinţifică. Tehnologia şi strategiile
didactice au rolul de a crea un cadru propice, angajării şi participării active a celui care învaţă la realizarea
obiectivelor predării.

STRATEGII DIDACTICE
Învăţarea este un act personal care cere participarea personală, efortul depus trebuie să fie
conştient, motivat, susţinut, cu rezultate vizibile în timp. Producerea învăţării, dezvoltarea intelectuală a
elevilor depind în egală măsură atât de prezenţa lor fizică în clasă, cât şi de participarea efectivă la
propria formare..

102
Metodica predării tehnicilor de programare pentru grupele de performanţă

Participarea activă prin educaţie, autoeducaţie, şi instruire, respectiv autoinstruire presupune


respectarea condiţiilor necesare specifice trăsăturilor definitorii ale autoeducaţiei.

în lucrarea sa, Autoeducaţia-sens şi devenire, Steliana Toma [22] propune o definiţie a


autoeducaţiei, ale cărei caracteristici conceptuale sunt expuse în tabelul următor, şi consider că ar trebui
bine cunoscute de fiecare profesor care şi-a propus modernizarea stilului de predare, respectând folosirea
unei metodologii moderne, ce presupune metode activ-participative şi mijloace de învăţământ de ultimă
oră:

Nr. Trăsături definitorii ale


Condiţii necesare
crt. autoeducaţiei
 cunoştinţe şi modalităţi de gândire cu valoare instrumental-
operatorie cunoscută;
1. activitate
 tehnici ale muncii intelectuale;
 priceperi şi deprinderi de muncă independentă;
 conştiinţă de sine;
2. conştientă
 motivaţie interioară;
 persistenţă, capacitate de concentrare;
3. constantă
 calităţi volitive;

 autocontrol;
4. sistematică
 capacitate de analiză şi autoreglare a propriei activităţi;

 cunoştinţe;
direcţională spre  însuşirea criteriilor de distingere şi ierarhizare a valorilor, şi de
5. perfecţionarea propriei autoapreciere;
personalităţi, scop  capacitate de selecţie;
 capacitate de a fixa un ideal, scopuri şi obiective, mobilizatoare;

 capacitate de a evalua critic diferite posibilităţi;


6. ales
 capacitate de discernere şi opţiune;

 autoanaliză ;
 capacitate de a decide în legătură cu sine, cu propria evoluţie;
pe baza unei decizii
7.  capacitate de concretizare a valorilor dorite în norme de acţiune
personale
proprie;
 capacitate de elaborare a unui program de acţiuni imediate;

 capacitate de automobilizare;
8. (de) autoangajare
 voinţă;

103
Metodica predării tehnicilor de programare pentru grupele de performanţă

 capacitatea de a depune efort personal;


depunere a unui efort
9.  capacitatea de a acţiona rapid şi sistematic, potrivit unor norme
propriu
proprii de muncă şi viaţă.

Ca un corolar a celor înfăţişate până acum referitor la autoeducaţie, la efortul personal depus pentru
„a învăţa", imperativele impuse de loan Neacşu [10], privind ceea ce numeşte un „ghid normativ
destinat învăţării eficiente", sunt:
a) cunoaşterea bună a profilului mnezic;
b) buna pregătire a mecanismelor memoriei pentru activitate;
c) organizarea materialului care trebuie prelucrat şi asimilat;
d) învăţarea activă;
e) cunoaşterea dominantelor memoriei şi gândirii;
f) asocierea memoriei cu gândirea;
g) cultivarea capacităţii de concentrare şi de mobilizare; h) antrenarea proceselor psihice
necesare învăţării.
Realizarea unei lecţii bune nu înseamnă a face pe elevi să înmagazineze un volum de informaţii, ci a-
i învăţa cum să ia parte activă la procesul de învăţare, la formarea propriei personalităţi, la autoeducaţie
şi autoinstrucţie.
Activitatea intelectuală trebuie desfăşurată conform cu metodele şi tehnicile de utilizare şi prelucrare
a informaţiilor, care începe cu munca la clasă şi se continuă cu alte activităţi intelectuale şcolare sau
extraşcolare (de exemplu munca în bibliotecă). E necesar ca acestor preocupări să li se adauge iniţierea
în problematica cercetării ştiinţifice, elaborării unor lucrări personale, creaţiei şi invenţiei.
Este foarte importantă crearea unei motivaţii interioare justificată, care să-1 facă pe elev să
acţioneze din propria-i pornire, din înţelegerea şi convingerea necesităţii de a îndeplini sarcinile de
învăţare ce îi revin.
Revenind la problematica participării la învăţare, se ştie că fiecare lecţie oferă suficiente posibilităţi
de angajare activă. Cheia succesului învăţării depline şi active este:
 trăirea deplină a experienţei de învăţare;
 angajarea autentică a elevului;
 implicarea plenară, cu toate forţele în procesul de învăţare;
 participarea intensivă şi activă, conştientă şi creatoare .
Gradul de participare, intensitatea, variază în funcţie de gradul de dirijare a învăţării propusă de
către profesor şi modul de realizare a acesteia, de metodele şi procedeele folosite. Pedagogia lecţiei
active este condiţionată de utilizarea metodelor activ-participative.
Profesorul trebuie să înţeleagă rolul metodelor pe care le utilizează în lecţie, astfel încât să nu fie
tentat să substituie efortul propriu al celui care învaţă, oferindu-i cunoştinţe de-a gata, şi probleme sau
situaţii problematice dinainte rezolvate, dirijând şi controlând prea îndeaproape fiecare acţiune întreprinsă
de elevi, în şi aşa puţinul timp şi spaţiu care le mai rămâne.

104
Metodica predării tehnicilor de programare pentru grupele de performanţă

Gândirea şi imaginaţia elevului sunt „blocate", în acest caz, iar acesta, fie renunţă la învăţare
căutând modalităţi de „înşelare", fie se plafonează realizând o memorare forţată şi neeficientă a
informaţiilor.
Activizarea este cu atât mai intensă cu cât sunt declanşate şi puse în funcţiune componentele
superioare ale celor doi parametri, unul de natură cognitiv-intelectuală, format din procesele cognitive
(senzaţii, percepţii, reprezentări, imaginaţia, memoria, gândirea, etc.), iar celei afective, atitudini,
trăsături caracteriale etc), şi în plus menţinerea unui echilibru optim între aceşti parametri.
Valorificarea posibilităţilor de activizare pe care le incumbă metodele şi mijloacele de învăţământ
depinde de măiestria cu care sunt folosite şi aplicate de către profesor. Cunoscând factorii implicaţi într-
un context concret, el poate decide asupra tehnologiei didactice celei mai apte, să contribuie la realizarea
activizării.
Acţiunea didactică începe cu sfârşitul ei, în sensul că înainte de a trece la efectuarea propriu-zisă a
acesteia, profesorul îşi proiectează în plan mintal rezultatele finale şi performanţele la care se aşteaptă să
ajungă elevii.
El analizează cu grijă toate elementele care intervin în procesul de predare-învăţare şi gândeşte la
ce are de înfăptuit, anticipează natura şi nivelul modificărilor ce trebuie produse în comportamentul
elevilor săi, pe plan cognitiv, afectiv şi psihomotor. în concluzie, metodele se definesc în modul cel mai
simplu prin obiectivele pe care şi le-a propus. Prin faptul că aceleaşi metode pot duce la realizarea unor
obiective diferite, ele manifestă şi o relativă interdependenţă faţă de finalităţile educaţiei.
Această relativă autonomie este întărită de însăşi caracterul polifuncţional al metodelor, de faptul că
ele pot îndeplini funcţii diferite în raport cu obiectivele propuse. Cu alte cuvinte este vorba şi despre
alegerea celei mai bune funcţii pentru o anumită metodă, în raport cu cerinţele de îndeplinire a
obiectivelor propuse.
Metoda are o deschidere bidirecţională în raport cu ceea ce face şi cum face profesorul, în raport cu
obiectul, şi în acelaşi timp subiectul instrucţiei. Am dedus că opţiunea pentru o metodă sau alta este
condiţionată de competenţa profesorului, de capacitatea sa de reflecţie pedagogică şi de analiză a
situaţiei de moment.
Succesul depinde de talentul cu care o metodă este utilizată. În acelaşi timp, o metodă poate să
compenseze carenţele aptitudinale ale profesorului, sau să pună în valoare cu şi mai multă vigoare
anumite aptitudini. Deci succesul mai depinde şi de rigurozitatea cu care sunt respectate particularităţile
metodei. Profesorii îşi pot folosi metodele proprii, originale, însă nu se poate merge până într-acolo încât
să se poată spune că fiecare, trebuie, şi poate să-şi găsească, şi să utilizeze metoda proprie, în întregime
personală şi originală. Acest lucru nu este posibil atât timp cât o metodă nu este determinată de un
singur factor, ci de o mulţime de alte variabile, intercorelate şi întrepătrunse.
Procesul de modernizare al metodelor stă, în primul rând, sub semnul progreselor înregistrate de
psihologie, psihopedagogie, psihosociologie, aspectul esenţial fiind adaptarea metodologiilor de instruire
la legile dezvoltării psihice.
Astfel, „metodologia se cere a fi suplă şi permisivă la dinamica schimbărilor care au loc în
componentele procesului instructiv-educativ. Calitatea unei tehnologii este dată de flexibilitatea şi
deschiderea ei faţă de situaţiile şi exigenţele noi, complexe ale învăţământului contemporan."

105
Metodica predării tehnicilor de programare pentru grupele de performanţă

Criteriul raportării unei metode la o anumită realitate poate să facă o metodă „bună" sau „rea",
eficientă, sau mai puţin eficientă.
Considerând că utilizarea metodelor activ-participative reprezintă o condiţie ce nu ar mai trebui
comentată, în plus trebuie asigurate oportunitatea, adecvarea şi congruenţa metodologică.
Profesorul trebuie să-şi însuşească principiile generale care stau la baza unei metodologii,
rămânându-i posibilitatea să inventeze alte procedee, să descopere o modalitate mai bună de aplicare a
metodei care convine cel mai bine, în concordanţă cu caracteristicile personale ale temperamentului său
şi cu obiectivele pe care şi le-a propus.
Modernitatea în alegerea (sau crearea) unor noi metode constă şi în respectarea unor factori
subiectivi, care ţin de psihologia vârstei şi de individualităţile elevilor (stadiul dezvoltării intelectuale şi
fizice, de mecanismele de achiziţie constituite), de suportul motivaţional şi atitudinal, atenţia şi gradul de
efort dovedit, de specificul clasei şi relaţiile elevi-elevi anterior formate etc.
Optimizarea activităţii didactice corespunde aşadar, cu necesitate, unei căutări şi dorinţe reale de
perfecţionare şi creaţie, venită din partea profesorului, pe lângă buna pregătire psihopedagogică şi
ştiinţifică dovedită de acesta, conform cu funcţiile metodelor şi cu scopurile pe care şi le-a propus.
Modernitatea metodelor nu este un dat sau o etichetă atribuită artificial, ea are un conţinut concret,
determinat pe de o parte, de forţa cu care se stimulează efortul constructiv şi creator al subiectului, iar pe
de altă parte, de relaţiile sale cu celelalte metode şi procedee, cu mijloacele folosite într-o situaţie
concretă dată.
Modernitatea derivă din idealul educativ nou ce se impune. Metodele trebuie să se orienteze spre
activizarea elevilor, astfel încât, aceştia să se deprindă ei înşişi cu metode-instrumente de gândire şi de
lucru, de exerciţiu, prin muncă personală să obţină rezultatele dorite, să devină un fel de autodidacţi
moderni.
Astfel, comparativ cu însuşirile metodelor învechite, precizate la începutul acestui subcapitol, se pot
deduce câteva caracteristici şi direcţii de înnoire a metodologiei didactice pe care le încearcă învăţământul
actual:
 îmbină armonios educaţia cu instrucţia;
 dau întâietate dezvoltării personalităţii, exersării şi dezvoltării capacităţilor şi aptitudinilor;
 sunt axate pe activitatea elevului;
 deplasează accentul pe învăţare, cu ridicarea concomitentă a exigenţelor faţă de predare;
 elevul a fost obiect, dar devine subiect al actului de instrucţie şi educaţie, al propriei sale
formări;
 sunt subordonate principiului educaţiei permanente, urmărind însuşirea unor tehnici de
muncă intelectuală, de autonomie continuă;
 sunt centrate pe acţiune, pe cercetare, redescoperire, explorare, experimentare;
 se preferă metodele activ-participative, care presupun o cunoaştere cucerită prin efort
propriu;
 îşi îndreaptă atenţia spre proces, spre metodele euristice şi de cercetare, spre învăţarea prin
descoperire;
 presupun contactul direct cu problemele realităţii, ale muncii practice;

106
Metodica predării tehnicilor de programare pentru grupele de performanţă

 sunt concrete, cultivând spiritul aplicativ, practic şi experimental;


 încurajează munca independentă şi creativă;
 stimulează efortul de autocontrol şi autoevaluare;
 stimulează complementaritatea şi ajutorul mutual, şi mai puţin competiţia;
 caută să îmbine armonios învăţarea individualizată cu învăţarea socială, munca individuală
cu munca de echipă şi în colectiv;
 dezvoltă o motivaţie interioară (intrinsecă), ce izvorăşte din actul învăţării, din satisfacţiile
depăşirii dificultăţilor şi bucuria succeselor obţinute;
 raporturile profesor-elevi se apropie de condiţiile vieţii sociale şi de cerinţele psihologice ale
tânărului în dezvoltare; sunt promovate relaţii democratice, ce intensifică aspectele de
cooperare;
 profesorul este organizator al condiţiilor de învăţare, îndrumător şi animator, ce catalizează
energiile celor care învaţă;
 disciplina învăţării derivă din organizarea raţională a activităţii.
Caracteristicile şi diferenţele esenţiale dintre o metodologie învechită şi cea nouă, rezultat al
modernizării, creaţiei şi inovaţiei, rezultă din faptul că metodele tradiţionale, rigide răspund unor cerinţe
de mult depăşite, unor scopuri ambigue, sau chiar inadecvate realităţii actuale, pe când metodele
moderne, exprimă cerinţele unui model nou de educaţie, extrem de dinamic, ca reflectare a unor realităţi
şi nevoi social-culturale specifice lumii prezente şi viitoare.
Putem concluzionăm prin câteva dintre exigenţele şi cerinţele de modernizare spre care ar trebui să
avanseze metodologia de instruire:
 punerea în practică a unor noi metode şi procedee de instruire care să soluţioneze adecvat
noile situaţii de învăţare;
 dezvoltarea în „cantitate" a metodologiei, prin adaptarea şi integrarea unor metode
nespecifice, din alte spaţii problematice, dar care pot rezolva bine unele cerinţe (de exemplu
brainstorming-ul, care este la origine o metodă de dezvoltare a creativităţii);
 creşterea în „cantitate" ,însă, nu este soluţia cea mai fericită, dacă nu este pusă în valoare
de celelalte condiţii de îmbunătăţire;
 folosirea pe scară mai largă a unor metode activ-participative, prin activizarea structurilor
cognitive şi operatorii ale elevilor şi prin apelarea la metode pasive numai când este
absolută nevoie;
 maximizarea dimensiunii active a metodelor (în mai toate metodele identificăm această
potenţialitate) şi minimalizarea efectelor pasive ale acestora;
 fructificarea dimensiunii şi aspectelor „calitative" ale metodei;
 extinderea utilizării unor combinaţii şi ansambluri metodologice prin alternări ale unor
caracteristici (în planurile activitate-pasivitate, abstractizare-concretizare, algoritmicitate-
euristicitate etc.) şi nu prin dominanţă metodologică;
 renunţarea la o metodă dominantă în favoarea unei varietăţi şi flexibilităţi metodologice,
care să vină în întâmpinarea nevoilor diverse ale elevilor şi care să fie adecvate permanent
la noile situaţii de învăţare;
107
Metodica predării tehnicilor de programare pentru grupele de performanţă

 instrumentalizarea optimă a metodologiei prin integrarea unor mijloace de învăţământ


adecvate care au un aport autentic în eficientizarea predării-învăţării, prin redi-mensionarea
şi pregătirea mijlocului adăugat în perspectiva metodologică;
 extinderea folosirii unor metode care solicită componentele relaţionale ale activităţii
didactice, respectiv aspectul comunicaţional pe axa profesor-elevi sau elevi-elevi;
 atenuarea tendinţei magistrocentriste a metodologiei didactice;
 întărirea dreptului elevilor de a învăţa prin participare, alături de alţii;
 accentuarea tendinţei formativ-educative a metodei didactice;
 extinderea metodelor de căutare şi identificare a cunoştinţelor, şi nu de transmitere a lor pe
cont propriu;
 cultivarea metodelor de autoinstrucţie şi autoeducaţie permanentă;
 promovarea celor mai adecvate metode testate direct prin evaluarea rezultatelor învăţării şi
adaptarea lor la realitatea existentă;
 includerea metodelor în variante metodologice compozite, în mod creator, prin difuziunea
permanentă;
 a unor trăsături şi prin articularea a două sau mai multe metode.

MIJLOACE DE ÎNVÃTÃMÂNT
Mijloacele de învăţământ pot fi definite ca „un ansamblu de resurse sau instrumente
materiale şi tehnice adoptate şi selectate" în vederea realizării sarcinilor instructiv-educative ale
şcolii.
Dintre mijloacele de învăţământ, clasificate conform propunerilor făcute de P. J. Nills, L.P. Presman,
M. lonescu [10], după funcţia pedagogică îndeplinită, cel mai des utilizate în lecţiile de informatică sunt
următoarele:
a) Mijloace informativ demonstrative
 mijloace sau reprezentări figurative: planşe, folii transparente de retroproiector, imagini
audiovizuale;
 reprezentări simbolice: scheme logice, diagrame, desene pe tablă.

b) Mijloace audio-vizuale
 mijloace realizate pe suporturi sonore: benzi audio, discuri, CD-uri, emisiuni radiofonice
 mijloace realizate pe suporturi audio-vizuale: filme didactice, emisiuni TV, utilizarea
programelor demonstrative pe calculator
c) Mijloace realizate pe alte tipuri de suporturi:
 colecţii
 modele spaţiale (mulaje, modele statice, modele funcţionare, simulatoare)

108
Metodica predării tehnicilor de programare pentru grupele de performanţă

 naturalizări (preparate microscopice, schelete, preparate uscate)


 jocuri cu obiecte
 bibliotecii multimedia

După tipul mijloacelor de învăţământ avem:


a) Mijloace naturale, reale si originale :
 colecţii de materiale
 mostre
 piese, scule, dispozitive
 aparate, utilaje, instalaţii
b) Mijloace de substituire :
 obiectuale(fizice) - modele, machete fixe sau funcţionale, simulatoare
 iconice (figuri, imagini):
o reprezentări grafice - scheme, schiţe, diagrame
o audio-vizuale - discuri magnetice, dischete, benzi, diapozitive, diafilme, folii, filme
didactice, casete video, prezentări Power Point
c) Mijloace logico-matematice:
 concepte, raţionamente
 operaţii logice, formale, simboluri, algoritmi
d) Mijloace acţionale:
 lucrări practice
 modele experimentale
e) Mijloace informatice:
 calculatorul
f) Mijloace de evaluare:
 modele de evaluare orală
 modele de evaluare scrisă (teste)
 programe de evaluare
 standuri de probă
 instalaţii de verificare

LECTIA. TIPOLOGIA LECTIEI


În „Dicţionarul de Pedagogie" găsim definiţia tipului de lecţie enunţată astfel: „categorie de lecţie
constituită ca unitate de structură în funcţie de un anumit criteriu, ca de exemplu: scopul lecţiei, metode
şi mijloace de învăţământ, ciclul şcolar (primar, gimnazial, liceal)", în tipologia lecţiilor se ia ca principal
criteriu de clasificare scopul didactic.

109
Metodica predării tehnicilor de programare pentru grupele de performanţă

Se stabilesc astfel următoarele tipuri de lecţii:


 lecţia de predare (de comunicare, de transmitere) a noilor cunoştinţe;
 lecţia de fixare a cunoştinţelor;
 lecţia deformare a priceperilor şi deprinderilor;
 lecţia de sinteză;
 lecţia de verificare şi apreciere a cunoştinţelor şi deprinderilor;
 lecţia combinată (mixtă), care urmăreşte atât predarea, cât şi fixarea, verificarea şi
aplicarea cunoştinţelor în raport cu vârsta elevilor şi cu specificul obiectului.
În învăţământul modern, în perspectiva pregătirii elevilor pentru educaţia permanentă, datorită
accentuării caracterului formativ, intensificării participării elevilor la procesul de învăţământ, utilizării pe
scară largă a metodelor active (problematizare, învăţare prin descoperire etc.), a mijloacelor audio-
vizuale, se utilizează forme simple de organizare şi desfăşurare a lecţiei."
Tipul de lecţie reprezintă un mod de concepere (proiectare) şi realizare a lecţiei, o categorie a lecţiei
care reprezintă „o unitate structurală cu valoare orientativă".
Tipul de lecţie este un model didactic sub forma unui ansamblu de elemente caracteristice (verigi,
momente sau etape) pe baza căruia se proiectează structura unei anumite lecţii.
Structura lecţiei este tot un model didactic care stabileşte numărul de etape didactice şi le
ordonează într-un mod coerent, corespunzător unui anumit tip de lecţie.
între tipologia şi structura lecţiilor se manifestă interdependenţa şi condiţionarea reciprocă, în acest
context avem fie tipuri cu o etapă predominantă, care urmăresc realizarea în principal a unui act didactic,
fie un tip de lecţie cu o structură complexă şi multiplă, care urmăreşte să realizeze toate actele şi etapele
didactice, însă în ponderi diferite - aşa-zise lecţii mixte.
Variabilele procesului de instruire determină, în interiorul fiecărei categorii sau al fiecărui tip de
lecţie, variante ale tipului de bază.
Tipul de lecţie poate fi privit ca o structură procesuală, reprezentativă pentru o întreagă categorie de
lecţii. Totuşi, acest lucru nu implică practica tradiţională prin care este impusă aplicarea strictă, mecanică
a structurilor rigide. Pornind de la aplicarea unor structuri de lecţii ce se prezintă ca scheme fixe (tipuri
standardizate) şi foarte constrângătoare, se poate ajunge, creativ, şi din dorinţa de eficientizare, la
scheme foarte puţin restrictive, gândite şi proiectate de profesori.
Fiecare profesor poate sesiza, la un moment dat, necesitatea propunerii anumitor structuri şi
tipologii de structuri de lecţii, lucru ce vine alteori în contradicţie cu unele situaţii de învăţare în care, nu
mai dispune de structuri gata stabilite. El trebuie să găsească alternativa optimă.
Pedagogia actuală susţine o tipologie a lecţiei simplă, flexibilă şi diversă cu o reconsiderare a poziţiei
valorice a diferitelor tipuri de lecţii, ca şi a ponderii lor în activitatea didactică.
Astfel, menţinerea unei tipologii a lecţiei este necesară, dar nu şi suficientă, putând să fie
reconsiderată în scopul rigurozităţii maxime.
loan Cerghit [22] consideră, în acest sens, că: „ Interpretarea conceptului tip de lecţie acesta
poate fi considerat drept un „model", care are sarcina de a reduce un şir de lecţii asemănătoare, prin
finalităţile lor, la structură mai simplă, dar fundamentală, reprezentativă întregii acestei categorii. Aceasta

110
Metodica predării tehnicilor de programare pentru grupele de performanţă

înseamnă că nu există o „lecţie-tip", o „lecţie-model", care să poată fi reprodusă mereu în acelaşi mod, ci
numai situaţii asemănătoare care sugerează o structură asemănătoare, tipică pentru o categorie dată."

Deosebirile apar din diverse motive:


 strategii diferite creează variaţii în cadrul uneia şi aceleiaşi structuri, în interiorul unuia şi
aceluiaşi tip de lecţie;
 structurile nu mai pun accentul pe etapizarea lecţiei şi cu atât mai mult nu impun o ordine
invariabilă a etapelor (verigilor, momentelor, etc.), ci pe tehnica de lucru.
În acest sens, structurile au menirea să indice, să definească doar evenimentele esenţiale şi posibile
de urmat, cuprinse într-o combinaţie care rămâne de competenţa cadrului didactic. Pentru lecţii
asemănătoare se pot aplica combinaţii de evenimente asemănătoare sugerate doar de un tip anume de
lecţii, dar nu impuse, atâta vreme cât situaţii asemănătoare pot fi realizate în moduri diferite se pot găsi
mai multe variante de lecţii.

TIPURI DE LECŢII SPECIFICE ORELOR DE INFORMATICĂ

Criteriile de clasificare pot fi diverse, lucru rezultat din necesitatea perfecţionării continue a tehnicilor
de elaborare a proiectării şi realizare a lecţiei, deziderat al noii reforme a învăţământului din ţara noastră
care. presupune noi orientări şi restructurări chiar la nivelul cel mai fin al pregătirii tinerilor în şcoală. I.
Cerghit ia drept criteriu de clasificare sarcina didactică de bază şi drept subcriteriu tipul de învăţare în
scopul clasificării categoriilor de lecţii după tipul lor. I. Nicola consideră că în cadrul fiecărei lecţii se
realizează multiple sarcini, dar există una dominantă sau care constituie obiectivul ei principal, orientând
şi concentrând în acelaşi sens activitatea profesorului şi a elevilor (aşa numita „sarcină didactică
fundamentală"). Sarcinile didactice fundamentale pot fi: comunicarea de cunoştinţe, formarea de
priceperi şi deprinderi, sistematizarea, verificarea, etc[23].
Fiecare sarcină didactică fundamentală presupune stabilirea riguroasă a obiectivelor operaţionale
care pot fi diverse în funcţie de multitudinea factorilor ce trebuie luaţi în considerare: obiectul de
învăţământ, particularităţile colectivului de elevi, de grup şi individuale, strategiile didactice propuse şi în
acelaşi timp viabile, stilul de predare şi creativitatea profesorului, etc.
Realizarea obiectivelor prin modalităţi diferite conduce la o infinitate de variante determinate de
factorii variabili ce intervin în fiecare lecţie.
I. Nicola a determinat următorii factori variabili ce intervin şi impun variante de lecţii: conţinutul
lecţiei, gama obiectivelor operaţionale ale lecţiei, pregătirea anterioară a elevilor, strategiile şi mijloacele
folosite, sursele de informaţii la care se apelează, locul pe care lecţia îl ocupă în sistemul de lecţii,
particularităţile procesului de învăţare, mărimea colectivului de elevi, formele muncii cu elevii (frontale, pe
grupe, individuale), locul unde se desfăşoară lecţia (clasă, atelier, laborator, etc.), nivelul dezvoltării
psihice a elevilor, stilul de predare al profesorului, etc.
Fiecare dintre variantele ce pot fi concepute are propria structură ce se constituie dintr-o serie de
evenimente, etape, secţiuni de lucru sau module, aşa numitele „evenimente ale instruirii".

111
Metodica predării tehnicilor de programare pentru grupele de performanţă

Proiectarea tipului, lecţiei presupune stabilirea ansamblului evenimentelor necesare, ordinea,


combinarea lor, precum şi ponderea unora dintre acestea faţă de celelalte ţinând cont, după cum am mai
spus de un minim de factori previzibili sau imprevizibili.
Având în vedere relaţia dintre tip şi varianta de lecţie, precum şi cea dintre tip şi structura lecţiei,
I.Nicola opinează că „activitatea creatoare a profesorului nu cunoaşte oprelişti şi îngrădiri", el va acţiona
diferenţiat, în funcţie de volumul şi conţinutul informaţional, de strategiile didactice necesare învăţării, de
relaţia profesor-elev, profesor-colectiv de elevi, etc., profesorul „trebuie să înveţe să-şi folosească
creativitatea, să-şi asume riscuri şi să acţioneze în condiţii de incertitudine"
Variantele de lecţii îşi păstrează caracterul flexibil chiar şi în cazul unei proiectări minuţioase a tipului
şi structurii lecţiei, ca sarcină didactică fundamentală a profesorilor.
în această perspectivă, I. Cerghit consideră că este posibil şi necesar să se păstreze vechiul criteriu
după care se face clasificarea tipurilor de lecţii - sarcina didactică de bază - (uşor convertibilă în
obiectivele principale de urmărit), dar la care să se asocieze un subcriteriu, şi anume tipul de învăţare
implicat în realizarea sarcinii urmărite (obiectivelor urmărite) pentru departajarea şi desemnarea
variantelor subordonate acestor tipuri. Propunând elevilor diverse experienţe de învăţare se pot atinge
obiectivele propuse prin adoptarea unor diverse tipuri sau variante de lecţii. De aici decurge putinţa
adoptării unor variante diferite de lecţii, concepute şi realizate după strategii de predare diferite, în acest
caz, s-ar putea ajunge la următoarea clasificare a tipurilor şi variantelor de lecţii, realizată după modelul
lui I.Cerghit:
 Lecţia de comunicare şi însuşire de noi cunoştinţe.
Variante: lecţii bazate pe învăţarea prin receptare a naraţiunii, descrierii, expunerii, explicaţiei,
explicaţiei-demonstraţiei, textului din manual, instructajului, conţinutului televizat, demonstraţiei filmice
etc.;
 Lecţia de elaborare a cunoştinţelor şi dezvoltare a strategiilor cognitive
Variante: lecţii bazate pe învăţare prin cercetare, prin descoperire, prin observare directă şi
independentă sau dirijată (intuitiv-investigativă), observarea nemijlocită de material prelucrat, explorarea
experimentală a realităţii, studiul (analiză) de caz, cercetarea documentelor istorice, studiu (analiză) de
text, problematizare, dezbatere euristică, dialog euristic etc.;
 Lecţia de formare a priceperilor şi deprinderilor
Variante: lecţii bazate pe învăţarea prin: exerciţii executorii, exerciţii creative, imitaţie de modele,
repetare, activităţi practice, exersare simulată etc.;
 Lecţia de consolidare şi sistematizare
Variante: lecţii bazate pe rezolvare de exerciţii şi probleme, exerciţii de vorbire şi scriere, discuţie de
sistematizare şi clasificare, discuţie de revizie sumară, aplicaţii practice, recapitulare, joc didactic,
expunere de sinteză (concluzii), discuţie finală etc.
 Lecţia de aplicaţii practice, de dezvoltare a funcţiilor de acţiune sau de
transfer
Variante: lecţii bazate pe generalizări (transferuri), studiu (analiză) de caz, rezolvări de exerciţii şi
probleme, lucrări practice, lucrări experimentale, aplicaţii tehnice, muncă de fabricaţie, exersare pe

112
Metodica predării tehnicilor de programare pentru grupele de performanţă

simulatoare, experienţă simulată prin jocuri de roluri (lecţii cu caracter de joc), de caracterizare a
personajelor literare etc.;
 Lecţia de creaţie, de dezvoltare a funcţiilor de expresie (a capacităţilor şi
aptitudinilor de creaţie)
Variante: lecţii bazate pe învăţare prin creaţie, adică pe exerciţii de creaţie, creaţie de modele
noi, compuneri libere, eseuri literare şi filozofice, creaţie tehnică, creaţie artistică, aplicaţii creatoare etc.;
 Lecţia de evaluare.
Variante: lecţii de verificare şi apreciere, de lucrări practice şi apreciere, de lucrări scrise, de analiză
şi corectare a lucrărilor, de dezbatere asupra alternativelor şi modurilor de acţiune aplicate, de evaluare a
exerciţiilor (fizice de exemplu) etc;
 Lecţia de atitudine (motivaţie).
Variante: lecţia de sensibilizare (de sesizare a semnificaţiilor), lecţia de introducere sau inaugurală
(de sesizare a cadrului ideaţional), lecţia-demonstraţie de sensibilizare etc.;
 Lecţia complexă sau mixtă (de dezvoltare multilaterală).
Se poate observa că polifuncţionalitatea unor variante creează unele dificultăţi de plasare a lor într-o
categorie sau alta, de aceea se pot regăsi ca variaţii la două sau chiar mai multe tipuri de lecţii.
Clasificarea tipurilor de lecţii după modelul lui I.Nicola ţine cont de caracteristicile fiecărui tip de
lecţie, de structura posibilă şi, în concordanţă cu clasificarea făcută de I.Cerghit, prezintă şi câteva
variante posibile (aceasta fiind de referinţă pentru mulţi specialişti pedagogi care şi-au propus clasificarea
tipurilor de lecţii):
 Tipul lecţiei mixte sau combinate
Caracteristici: urmăreşte realizarea aproximativ în aceeaşi măsură a mai multor sarcini didactice
(comunicare, sistematizare, fixare, verificare,etc.), fiecăreia fiindu-i rezervată o verigă a instruirii, sarcinile
profesorului şi elevilor se situează pe acelaşi plan, succesiunea evenimentelor este variabilă, volumul
cunoştinţelor predate este mai redus.
Structură:
 organizarea clasei pentru lecţie şi captarea atenţiei elevilor;
 actualizarea elementelor învăţate anterior; pregătirea elevilor pentru asimilarea noilor
cunoştinţe;
 comunicarea şi asimilarea noilor cunoştinţe
 fixarea cunoştinţelor predate (sistematizare, exerciţii aplicative, reluarea într-un alt context a
esenţialului, etc.);
 conexiunea inversă - pe tot parcursul lecţiei.
 Tipul lecţiei de comunicare
Caracteristici: concentrarea activităţii didactice în direcţia dobândirii de către elevi a unor cunoştinţe
şi dezvoltării, pe această bază a proceselor şi însuşirilor psihice, a capacităţilor instrumentale şi
operaţionale, comunicarea are ponderea cea mai mare în lecţie.
Structură (subsecvente):
 pregătirea elevilor în vederea asimilării noilor cunoştinţe;

113
Metodica predării tehnicilor de programare pentru grupele de performanţă

 anunţarea subiectului şi a obiectivelor;


 stabilirea de asociaţii cu cunoştinţele asimilate anterior;
 fixarea finală prin generalizări şi concluzionări.
Variante posibile:
 lecţii de descoperire pe cale inductivă;
 lecţii de descoperire pe cale deductivă;
 lecţii introductive (la începutul tratării unui capitol);
 lecţii prelegere, lecţii seminar;
 lecţii problematizate;
 lecţii dezbatere (specifice disciplinelor socio-umane);
 lecţii de asimilare prin activitatea pe grupe cu sarcini diferenţiate sau comune;
 lecţii de comunicare pe baza instruirii programate.

 Tipul lecţiei de formare a priceperilor şi deprinderilor sau tipul lecţiei de


muncă independentă
Caracteristici: activitatea independentă a elevilor consacrată rezolvării sarcinilor de învăţare în
vederea elaborării unor componente acţionale (priceperi, deprinderi, algoritmi, etc.) are ponderea cea
mai mare în lecţie, favorizează transferul specific prin utilizarea unor tehnici automatizate în rezolvarea
sarcinilor ulterioare cu un grad mai mare de complexitate.
Structură:
 anunţarea subiectului şi obiectivelor lecţiei;
 reactualizarea cunoştinţelor teoretice indispensabile exersării practice;
 demonstrarea modului de execuţie;
 activitatea independentă a elevilor;
 analiza rezultatelor.
Variante posibile:
 lecţii pe bază de exerciţii aplicative;
 lecţii de muncă independentă cu ajutorul textului programat;
 lecţii practice în atelierul şcoală, în laborator, pe teren;
 lecţii de muncă independentă cu ajutorul fişelor;
 lecţii de creaţie.

 Tipul lecţiei de recapitulare şi sistematizare (de fixare sau consolidare)


Caracteristici: se urmăreşte fixarea şi consolidarea cunoştinţelor prin stabilirea de noi corelaţii între
cunoştinţe prin elaborarea unor generalizări mai largi, prin relevarea unor structuri logice între cunoştinţe,
toate acestea stimulând mecanismul transferului cu cele două forme ale sale, specific şi nespecific, în
vederea rezolvării unor sarcini ulterioare, asigurând totodată aprofundarea şi reorganizarea cunoştinţelor
în jurul unei idei centrale, se impune cu necesitate şi introducerea „elementului de noutate".
Structură:

114
Metodica predării tehnicilor de programare pentru grupele de performanţă

 elaborarea unui plan de desfăşurare;


 recapitularea şi sistematizarea propriu-zisă.
Variante:
 lecţii de sinteză (încheiere de capitol, sfârşit de semestru sau de an şcolar):
 lecţii de sinteză pe bază de conversaţie;
 lecţii de sinteză cu ajutorul mijloacelor audio-vizuale;
 lecţii de sinteză prin exerciţii aplicative;
 lecţii de sinteză combinate cu activitatea de grup, etc.
 lecţii de recapitulare cu ajutorul textului programat;
 lecţii de recapitulare şi sistematizare cu ajutorul fişelor (eventual de tratare diferenţiată a
elevilor);
 lecţii de recapitulare şi sistematizare pe bază de referat. Exemplu: Anexa nr. 13.

 Tipul lecţiei de verificare şi apreciere (de control şi evaluare)


Caracteristici: se urmăreşte pe de o parte verificarea bagajului de informaţii asimilate concomitent
cu capacitatea de aprofundare, înţelegere şi operare, iar pe de altă parte, măsurarea şi evaluarea celor
constatate; se desfăşoară la intervale mai mari de timp; verificările se înscriu pe o traiectorie temporală,
prin prisma trecutului putându-se evalua rezultatele muncii profesorului, iar prin prisma viitorului se pot
lansa presupuneri şi diagnosticări, precum şi ameliorările necesare.
Structură:
 anunţarea tematicii supusă verificării, a formelor de verificare adoptate (oral, scris, lucrări
practice, teste, etc.);
 anunţarea modului de desfăşurare;
 anunţarea scopului şi obiectivelor verificării;
 verificarea şi evaluarea propriu-zisă (veriga centrală)
 observaţiile şi concluziile profesorului.
Variante:
 lecţii de verificare prin chestionare orală (individual, frontal);
 lecţii de verificare prin teme scrise (lucrări de control sau semestriale);
 lecţii destinate analizei lucrărilor scrise (prin relevarea lucrărilor tipice, reprezentative, şi
elucidarea cauzelor, greşelilor sau ale obţinerii succesului);
 lecţii de verificare şi evaluare prin lucrări practice;
 lecţii de verificare şi evaluare pe baza testelor docimologice şi al fişelor (care sunt identice,
concepute în funcţie de nivelul mediu al clasei şi sunt evaluate prin note).

115
Metodica predării tehnicilor de programare pentru grupele de performanţă

EVALUAREA

DEFINIREA CONCEPTULUI DE EVALUARE

Procesul educaţional presupune în acelaşi timp parcurgerea nivelurilor învăţării (acumulării, formării)
respectiv cunoaşterea, înţelegerea, aplicarea, analiza şi sinteza precum şi evaluarea, în consecinţă
necesită acţiuni de reglare şi autoreglare continuă.
Referitor la evaluarea educaţională ne propunem să răspundem la întrebări de genul: „Ce este
evaluarea?", „Ce evaluăm concret?", „Pe cine evaluăm?", „Când evaluăm?", „Care sunt metodele şi
mijloacele de evaluare pe care le putem folosi?", „ Cum interpretăm rezultatele evaluării?", „Cum ne
îmbunătăţim activitatea viitoare pe baza rezultatelor evaluării? " etc. [23]
Pentru a utiliza în cunoştinţă de cauză termenul de evaluare trebuie să cunoaştem principalele
concepte referitoare la aceasta, precum şi importanţa şi complexitatea evaluării învăţării. Astfel în
Dicţionarul de Pedagogie - definiţia evaluării este sinonimă cu cea de apreciere.
Aprecierea este un act psihopedagogie de determinare prin note, calificative, clasificări, puncte etc.
a rezultatelor instructiv-educative obţinute de un elev la un obiect de studiu (cunoştinţe, deprinderi,
capacităţi mintale, atitudini morale faţă de activitatea de învăţare şi traducere în practică a celor învăţate)
Etimologic:
 latină: Examen - cântărire, probă, control, verificare şi apreciere, examen, examinare;
 franceză: evaluation - control, verificare, estimare;
 engleză: examination, estimation, verification, control, apreciation şi valuation - examinare,
estimare, apreciere, evaluare;
 latină: concursus - confruntare, competiţie şi apreciere pe bază de competenţă.
În şcoala românească noţiunea de evaluare a evoluat, adaptându-se şi modernizându-se continuu,
în scopul perfecţionării actului în sine, precum şi a etapelor parcurse (conceperea, aplicarea, analiza şi
sinteza, ameliorarea). „Evaluarea şcolară este procesul prin care se delimitează, se obţin şi se furnizează
informaţii utile, permiţând luarea unor decizii ulterioare. Actul evaluării presupune două momente relativ
distincte: măsurarea şi aprecierea rezultatelor şcolare".
Desfăşurându-se în cea mai mare parte la nivel de nucleu (profesor -clasă - elev) actul didactic al
evaluării vizează procesul de învăţământ în ansamblul său.
„Evaluarea (examinarea) este actul didactic complex integrat întregului proces de învăţământ, care
asigură evidenţierea cantităţii cunoştinţelor dobândite şi valoarea, nivelul, performanţele şi eficienţa
acestora la un moment dat - în mod curent, periodic şi final, oferind soluţii de perfecţionare a actului de
predare-învăţare".
Integrată procesului didactic, evaluarea presupune o „[...] activitate prin care sunt colectate,
asamblate şi interpretate informaţii despre starea, funcţionarea şi/sau evoluţia viitoare probabilă a unui
sistem (elev, profesor, unitate, şcolară, condiţii, sistem de învăţământ) activitate a cărei specificitate este
conferită de următoarele caracteristici esenţiale:
116
Metodica predării tehnicilor de programare pentru grupele de performanţă

a) orientarea spre scop (fundamentarea deciziilor, priza de conştiinţă, influenţarea evoluţiei


sistemului evaluat);
b) atitudine metodologică;
c) existenţa unor criterii;
d) secvenţa de interpretare;
e) înregistrare şi comunicare;
f) efect retroactiv.
Termenul de evaluare este în strânsă legătură cu conceptul de „eficienţa învăţământului",
„randament şcolar", „măsurarea consecinţelor instruirii", „aprecierea şcolară", „examenul", „concursul",
„docimologia".
Evaluarea vizează eficienţa învăţământului prin prisma raportului dintre obiectivele proiectate şi
rezultatele obţinute de către elevi în activitatea de învăţare.
Operaţionalizarea obiectivelor permite realizarea unei evaluări obiective, asigurând fidelitatea,
alegerea instrumentelor de evaluare adecvate, feed-back-ul necesar reglării şi creşterii calităţii învăţării.
Privită ca un sistem unitar evaluarea asamblează trei etape majore de desfăşurare, datorate
existenţei a trei mari planuri de semnificaţie epistemică pentru verbul „a evalua" evidenţiaţi de Gerard
Scallon:
 a concepe o procedură de evaluare;
 a face practic o evaluare;
 a exprima o evaluare.
Scopul evaluării provenit dintr-o teorie a evaluării nouă, modernă, nu se reduce numai la echivalarea
cu notarea, ci se manifestă în consens cu o serie de exigenţe cum ar fi cea de integrare în procesul
didactic, ca element cantitativ al acestuia şi instrument de reglare a procesului, de perfecţionare a calităţii
şi eficienţei sale.
Modernizarea şi optimizarea evaluării şcolare trebuie să ţină cont de:
 extinderea acţiunii de evaluare, de la verificarea şi aprecierea rezultatelor - obiectivul
tradiţional - la evaluarea procesului, a strategiei care a condus la anumite rezultate;
evaluarea nu numai a elevilor, dar şi a conţinutului, a metodelor, a obiectivelor, a situaţiei
de învăţare, a evaluării;
 luarea în calcul şi a altor indicatori, alţii decât achiziţiile cognitive, precum conduita,
personalitatea elevilor, atitudinile, gradul de încorporare a unor valori etc.;
 diversificarea tehnicilor de evaluare şi creşterea gradului de adecvare a acestora la situaţii
didactice concrete (extinderea folosirii textului docimologic, a lucrărilor cu caracter de
sinteză, punerea la punct a unor metode de evaluare a achiziţiilor practice);
 deschiderea evaluării spre mai multe rezultate ale spaţiului şcolar (competenţe relaţionale,
comunicarea profesor-elev, disponibilităţi de integrare în social);
 necesitatea întăririi şi sancţionării cât mai operative a rezultatelor evaluării; scurtarea feed-
back-ului, a drumului de la diagnosticare la ameliorare, inclusiv prin integrarea eforturilor şi
a exploatării dispoziţiilor psihice ale elevilor;

117
Metodica predării tehnicilor de programare pentru grupele de performanţă

 centrarea evaluării asupra rezultatelor pozitive şi nesancţionarea în permanenţă a celor


negative;
 stabilirea unui raport optim între evaluarea prin note şi evaluarea prin calificative;
 transformarea elevului într-un partener autentic al profesorului în evaluare, prin
autoevaluare, interevaluare şi evaluare controlată.

FUNCŢIILE EVALUĂRII

Rolul evaluatorului în evaluarea curentă precum şi în testări şi examinări se distinge clar de cel al
simplului profesor, acesta trebuind să asigure îndeplinirea întregului proiect educaţional. Pornind de la
planificarea evaluării în funcţie de resursele proprii, interne (motivaţii, interese, timp, disponibilităţi) şi
cele externe, evaluatorul parcurge etape care necesită pregătire intensă, cunoaştere, ajungând până la
faza de „iluminare" în crearea sarcinilor de lucru şi la aplicarea conştientă şi responsabilă asupra
educabilului, în plus el interpretează rezultatele, le analizează, sintetizează, clasifică şi asigură în final,
ameliorările necesare. Astfel el îndeplineşte motivat, conştient, riguros, activ şi interactiv, reglativ funcţiile
evaluării.
Pornind de la ideea că „scopul evaluării nu este de a parveni la anumite date, ci de a perfecţiona
procesul educativ" se pot face diverse clasificări ale funcţiilor evaluării.

Clasificarea funcţiilor evaluării care vizează procesul de învăţământ în ansamblu:


a) funcţia educativă-motivaţională - urmăreşte stimularea obţinerii de performanţe superioare
în pregătirea elevilor, ca urmare a influenţelor psihomotivaţionale şi sociale ale rezultatelor învăţării,
necesitând cu precădere conştientizarea rezultatelor evaluării, conduce la stimularea cunoaşterii şi
autocunoaşterii, a puterii de apreciere şi autoapreciere, raportând la obiectivele stabilite şi la rezultatele
obţinute;
b) funcţia selectivă - presupune ierarhizarea şi selectarea elevilor sub raport valoric şi al
performanţelor în cadrul grupului studios, se obţine în urma testelor standardizate, sau nu, cu scop
normativ;
c) funcţia diagnostică - evidenţiază valoarea, nivelul şi performanţele pregătirii elevilor la un
moment dat (a punctelor tari şi a celor slabe în diferite zone de interes), se obţine prin teste diagnostice
(psihologice, docimologice, de cunoştinţe, etc);
d) funcţia prognostică - pe baza analizei rezultatelor în comparaţie cu obiectivele, prevede
probabilistic zonele, nivelul şi distribuţia performanţelor ce trebuie obţinute în viitor de către educabili, se
obţine prin teste de aptitudini, capacităţi şi abilităţi specifice, corelate cu teste şi/sau chestionare de
opinie, de atitudine, etc.;
e) funcţia de certificare - conduce la recunoaşterea oficială a unui statut dobândit de către
educabili, eventual în urma unui examen, prin acordarea de certificate, diplome, sau alte documente de
acest tip;

118
Metodica predării tehnicilor de programare pentru grupele de performanţă

f) funcţia cibernetică (sau de feed-back) - conduce la ideea de optimizare a procesului de


predare-învăţare prin aplicarea reglajelor şi autoreglajelor;
g) funcţia de consiliere - conduce la orientarea şcolară şi profesională a elevilor în cadrul
sesiunilor de consiliere ale elevilor sau ale familiei;
h) funcţia social-economică - în planul macro - socio - economic şi în plan individual referitor la
performanţele pregătirii fiecărui elev - se referă la eficienţa învăţământului.

Vizând în principal obiectivele operaţionale care sunt formulate şi raportate la actul evaluării se
disting, pe scurt funcţiile:
a) constatativă (în urma adunării şi stocării datelor ce vor fi interpretate);
b) de diagnosticare (analiza datelor);
c) predictivă, de prognosticare (interpretarea datelor).

Referitor la o secvenţă de învăţare, asemănător celor de mai sus se pot distinge funcţiile:
a) verificarea, sau identificarea achiziţiilor şcolare;
b) perfecţionarea şi regularizarea căilor de formare a indivizilor, identificarea celor mai facile şi
mai pertinente căi de instrucţie şi educaţie;
c) sancţionarea sau recunoaşterea socială a schimbărilor operate asupra elevilor.

Raportând la nivelul unei clase se impun trei funcţii:


a) orientarea deciziilor de natură pedagogică în vederea asigurării unui progres armonios şi
continuu în dezvoltarea elevului, prin stabilirea celor mai bune căi de încorporare a
cunoştinţelor şi deprinderilor;
b) informare elevilor şi părinţilor asupra stadiului formării şi a progreselor actuale sau posibile;
c) stabilirea unei ierarhii implicite sau explicite, prin atribuire, în funcţie de rezultat, a unui loc,
sau rang valoric.
Ponderea uneia sau alteia dintre funcţii poate fi diferită de la un act evaluativ la altul, dar conduc cu
precădere la deducerea a două operaţii complementare, măsurarea şi evaluarea ce au un efect deosebit
de complex de îndeplinire a obiectivelor evaluării.
Tranziţia de la precizie, dată de măsurare, la calitatea fundamentelor formării elevilor poate fi
constatată prin raportarea performanţelor la obiectivele propuse. Totuşi fenomenele pedagogice sunt de
natură calitativă şi nu pot fi supuse în totalitatea lor unei măsurări, dar impunerea unor instrumente,
criterii şi procedee adecvate pot fi evaluate.

MODURI DE EVALUARE ŞI IMPLICAŢIILE LOR

Forme de evaluare :
Evaluarea iniţială

119
Metodica predării tehnicilor de programare pentru grupele de performanţă

Evaluarea iniţială conduce la formarea unei imagini despre bagajul de cunoştinţe cu care elevul
porneşte la drum. Trebuie să ne asigurăm de ceea ce cunoaşte elevul înainte de a-l învăţa alte lucruri.
Această formă de verificare creează şi o imagine asupra posibilităţilor de progres ale elevului, asupra
capacităţii lui de învăţare, în funcţie de care se va stabili programul de instruire.
Evaluarea formativă (continuă)
Evaluarea formativă este forma de evaluare pe care profesorul o aplică pe întreaga durată a
programului de instruire în cadrul lecţiilor şi la încheierea unui capitol. Această formă de verificare oferă
permanent informaţii cu privire la eficienţa programului de instruire şi permite profesorului să ia cele mai
potrivite măsuri de prevenire a insuccesului şcolar, ajutând totodată la ameliorarea metodelor de predare-
învăţare. Verificarea ritmică oferă, pe baza mecanismului de feed-back continuu, semnalele necesare atât
elevului cât şi profesorului, fiind un veritabil metronom al activităţii didactice.
Examinarea prin probe practice este caracteristică disciplinelor cu pronunţat caracter aplicativ, iar
Informaticii cu atât mai mult. Ea se poate desfăşura în forme variate, de la realizarea de programe simple
sau editări de texte sau grafică pe durata unei ore, lucrându-se individual sau în grup, până la aplicaţii
complexe, realizate într-un interval mai lung de timp. Sunt verificate şi evaluate cunoştinţele teoretice
necesare realizării lucrării, cât şi deprinderile şi dexterităţile necesare executării ei.
Este necesară formarea la elevi a capacităţii de autoevaluare, prezentându-le criteriile de apreciere,
ceea ce va mari încrederea elevului în propriile sale forţe şi va înlătura orice urmă de suspiciune.
Examenele pot fi evaluări autentice, reale, extrem de utile. Se bazează pe programe de examen
stabilite anterior. Produc o evaluare cu caracter normativ, naţional (în cazul examenelor naţionale) şi
garantează protejarea oportunităţilor egale pentru toţi candidaţii, pe de o parte, precum şi asigurarea
calităţii (prin satisfacerea criteriilor de validitate şi fidelitate stabilite) pe de altă parte, având o miză
ridicată.
Evaluarea curentă
Poate acoperi o gamă mai largă de abilităţi şi competenţe şi o arie mai largă de conţinuturi decât
examenele, având în general şi o miză mai scăzută.
Evaluarea realizată prin metode complementare
Motivează elevii şi profesorii în integrarea creatoare a cunoştinţelor, demonstrează constructiv
înţelegerea şi capacitatea* de a dovedi abilităţi şi deprinderi achiziţionate în diverse perioade şcolare.

PROIECTAREA OBIECTIVELOR DE EVALUARE

Obiectivul de evaluare este un enunţ sintetic, vizând rezultatele concrete ale procesului de învăţare
(asimilare, formare) ce trebuie demonstrate de către persoana evaluată. Fiind formulat în termenii
comportamentului observabil urmărit face posibil ca mai mulţi evaluatori să ajungă la aceeaşi judecată de
valoare referitoare la îndeplinirea, sau nu, a obiectivului. Din formularea obiectivului trebuie să rezulte
clar nivelul de performanţă necesar a fi atins de către cel evaluat şi condiţiile necesare atingerii acestei
performanţe. Obiectivele de evaluare se formulează pe baza operaţionalizării obiectivelor curriculare.

120
Metodica predării tehnicilor de programare pentru grupele de performanţă

După R F Mager[22] modelul de operaţionalizare simplificat presupune formularea unui astfel de enunţ
prin specificarea a trei elemente:
 comportamentul necesar a fi demonstrat;
 condiţiile în care se produce comportamentul
 nivelul de performanţă dorit, sau criteriul de reuşită.

Precizarea comportamentului observabil se face în mod tradiţional folosind taxonomia lui B.S.
Bloom [23], care a asociat fiecărui nivel de complexitate a învăţării verbe de acţiune concrete:
Cunoaştere: să definească, să descrie, să identifice, să numească, să selecteze, să reproducă, să
enumere, etc.
Înţelegere: să transforme, să diferenţieze, să estimeze, să explice, să generalizeze, să exemplifice,
să parafrazeze, să rescrie, să rezume, să argumenteze, să extindă, etc.
Aplicare: să aplice, să calculeze, să înlocuiască, să schimbe, să descopere, să modifice, să prepare,
să producă, să indice, să rezolve, să utilizeze, să opereze, etc.
Analiză: să discrimineze, să descompună în componente, să diferenţieze, să identifice, să ilustreze,
să arate legăturile, să selecteze, să separe etc.
Sinteză: să clarifice, să combine, să compileze, să compună, să creeze, să elaboreze, să
organizeze, să planifice, să reconstruiască, să rezume, să combine etc.
Evaluare: să justifice, să argumenteze, să interpreteze, să aprecieze, să compare, să
concluzioneze, să critice, să descrie, să discrimineze, să explice, să rezume, etc.

Condiţiile de producere a comportamentului pot fi precizate prin formulări de tipul: oral, scris,
practic, dintr-o enumerare dată, pe baza textului din manual, dintr-un text la prima vedere, aplicând
regula (axioma, principiul, legea, etc.), cu ajutorul profesorului, folosind tabelul (harta, diagrama,
desenul) etc.
Criteriul de reuşită este precizat:
Cantitativ - prin precizarea limitei de timp, de dimensiune (lungime), numărului de exemple dorite,
procentul de realizare considerat satisfăcător (sau minim);
Calitativ - prin enunţuri de tipul: enumerând ideile principale, corect, sintetic, pe scurt, utilizând
limbajul ştiinţific adecvat, în ordine cronologică, în ordinea preferinţelor, pe baza unei anumite reguli, etc.

METODE ŞI TEHNICI DE EVALUARE

Strategiile de evaluare sunt diverse şi se împart în două mari categorii ale căror caracteristici sunt
evidenţiate pornind de la analiza comparativă a lui I.T.Radu în următorul tabel:
Cumulativă (sau sumativă) Continuă (sau formativă)
Se realizează prin verificări parţiale încheiate cu Se realizează prin verificări sistematice pe parcursul
aprecieri de bilanţ asupra rezultatelor programului pe secvenţe mici
Operează prin verificare prin sondaj în rândul Are loc prin verificarea tuturor elevilor şi asupra

121
Metodica predării tehnicilor de programare pentru grupele de performanţă

elevilor şi în materie întregii materii (nu toţi elevii învaţă un conţinut la


fel de bine)
Vizează în principal evaluarea rezultatelor şi cu Are drept scop ameliorarea procesului scurtând
efecte reduse pentru ameliorarea procesului intervalul dintre evaluarea rezultatelor şi
perfecţionarea activităţii
Aprecierea rezultatelor se face prin compararea Aprecierea rezultatelor plecând de la obiective
lor cu scopurile generale ale disciplinei operaţionale concrete

Se exercită în special funcţia de constatare a Funcţia prioritară este de clasificare ce poate fi şi


rezultatelor 'şi ierarhizarea elevilor îmbunătăţită ulterior '

Generează stress şi comportamente inadecvate Determină relaţii de cooperare profesor elev şi


la elevi cultivă capacitatea de evaluare şi autoevaluare

Utilizează o parte considerabilă din timpul Sporeşte timpul alocat instruirii prin diminuarea
alocat instruirii celui efectiv evaluării

Cele două strategii este avantajos să fie aplicate prin îmbinare şi complementaritate.
Criteriile care au condus prin îmbinare la această clasificare sunt:
1. Cantitatea de informaţie (sau experienţă) ce poate fi asimilată (dobândită) de către elevi
2. Perspectiva temporală

În funcţie de aceste criterii se deduc implicit clasificările:


Tipuri de
Criteriul Caracteristici Metode Tehnici
evaluare
- se verifică elemente cognitive - ascultare curentă
Parţială sau comportamentale - extemporale
Cantitatea de informaţii ce
secvenţiale - probe practice
poate fi asimilată de către
- se verifică o cantitate mare - examene
elevi
Globală de cunoştinţe şi deprinderi - concursuri
obţinute prin cumulare
- se face la începutul unei - teste predictive
Iniţială
etape de instruire - concursuri
- tehnici curente de
- se face în timpul secvenţei de
Perspectiva temporală Continuă ascultare
instruire
- teze
- se realizează la sfârşitul - lucrări scrise
Finală
perioadei de formare - examene

Cele mai utilizate metode şi tehnici de evaluare utilizate sunt:


 observarea şi aprecierea orală;

122
Metodica predării tehnicilor de programare pentru grupele de performanţă

 chestionarea orală şi scrisă;


 lucrările scrise (de tip compunere, eseu, rezolvare de exerciţii şi probleme);
 testele (de cunoştinţe nestandardizate, diagnostice, docimologice-standardizate, teste de
aptitudini, de tip grilă, etc.);
 lucrările practice;
 examenele;
 scările de apreciere;
 cu ajutorul maşinilor şi a altor mijloace auxiliare etc.

INSTUMENTE DE EVALUARE

Rezultatele şcolare ale fiecărui elev se concretizează în efectele (rezultatele) învăţării personale.
Deoarece aceste efecte nu se pot măsura direct pentru că sunt constituite din comportamente formate
în sfera psihică a individului, apare necesitatea ca ele să fie exteriorizate şi traduse în mărimi
măsurabile. Aceste mărimi măsurabile nu sunt altele decât rezultatele probate de elevi şi care pun în
evidenţa nivelul de formare a comportamentelor dorite şi exprimate prin obiective pedagogice.
Deci, pentru obţinerea unor informaţii de evaluare şcolară sunt necesare următoarele acţiuni:
 probarea de către elevi a nivelului la care au ajuns în realizarea obiectivelor pedagogice;
 măsurarea rezultatelor probate;
 evaluarea lor.

În ultimii ani se observă, mai ales în unele ţări dezvoltate, o schimbare de concepţie în cea ce
priveşte evaluarea curentă, în sensul dezvoltării a numeroase şi variate strategii evaluative, concretizate
în instrumente de evaluare care pot reprezenta alternative reale la testele standardizate sau forme
complementare, centrate pe obiectivele care nu pot fi evaluate prin testele clasice. Se constată chiar, în
unele sisteme de învăţământ, tendinţa de a se renunţa la notarea administrativa periodica în favoarea
unei aprecieri globale, care ia în consideraţie întregul complex de activităţi desfăşurate de elev în şcoală şi
în afara ei.
La nivelul profesorului evaluator schimbarea se manifestă mai ales în combinaţiile de metode de
evaluare, calitative şi cantitative, cu rol formativ mai accentuat, pe care acesta îşi întemeiază judecata de
valoare asupra activităţii şi achiziţiilor elevului. Evaluatorul „judecător” şi „sancţionator” se transformă din
ce în ce mai mult în „formator”.

METODE ALTERNATIVE DE EVALUARE

Principalele metode alternative de evaluare sunt:

 OBSERVAREA SISTEMATICĂ A ACTIVITĂŢII

123
Metodica predării tehnicilor de programare pentru grupele de performanţă

Profesorul care îşi propune să utilizeze această metodă pentru a obţine informaţii relevante asupra
activităţii elevilor săi, din perspectiva capacităţii lor de acţiune, relaţionare, a competenţelor şi abilităţilor
de care dispun, trebuie să utilizeze un instrumentar adecvat obiectului observării. Pentru a înregistra
aceste informaţii, profesorul are la dispoziţie în mod practic trei modalităţi:
 fişa de evaluare (calitativă);
 scara de clasificare;
 lista de control/verificare.
Aceste instrumente se utilizează atât pentru evaluarea procesului, cât şi a produselor realizate de
către elevi, cu ajutorul lor putând fi surprinse atât obiectivări comportamentale ale domeniului cognitiv,
cât şi ale domeniului afectiv şi psihomotor.
 Fişa de evaluare este completată de către profesor, în ea înregistrându-se date factuale despre
evenimentele cele mai importante pe care profesorul le identifică în comportamentul său în modul de
acţiune al elevilor săi (fapte remarcabile, probleme comportamentale, evidenţierea unor aptitudini
deosebite într-un domeniu sau altul etc.).
La acestea se adaugă interpretările profesorului asupra celor întâmplate, permiţându-i acestuia să
surprindă modelul comportamental al elevilor săi.
Un avantaj important al acestor fişe de evaluare este acela că nu depind de capacitatea de
comunicare a elevului cu profesorul, profesorul fiind cel care înregistrează şi interpretează
comportamentul tipic sau alte produse şi performanţe ale elevului.
Un dezavantaj îl constituie faptul că aceste observaţii nu au o cota ridicată de obiectivitate, ceea ce
are repercursiuni asupra fidelităţii acestor înregistrări. [23]
 Scara de clasificare însumează un set de caracteristici (comportamente) ce trebuie supuse
evaluării, însoţit de un anumit tip de scară, de obicei scara Likert.
Exemplu:
Particip cu plăcere la activităţile organizate pe grupuri de lucru.
 puternic dezacord  dezacord  neutru  acord  puternic acord
Secretul construirii unei astfel de scări îl constituie redactarea unui bun enunţ la care elevul să poată
răspunde.
 Lista de control/verificare constată prezenţa sau absenţa unei caracteristici, comportament
etc., fără a emite o judecată de valoare oricât de simplă.
Exemplu:
Elevul:
 a urmat instrucţiunile specifice activităţii;  Da  Nu
 a cerut ajutor atunci când a avut nevoie;  Da  Nu
 a colaborat cu ceilalţi colegi pentru a realiza produsul final;  Da  Nu
 a finalizat sarcina de lucru;  Da  Nu
 a făcut ordine pe masa de lucru;  Da  Nu

 INVESTIGAŢIA

124
Metodica predării tehnicilor de programare pentru grupele de performanţă

Oferă posibilitatea elevului de a aplica în mod creativ cunoştinţele însuşite, în situaţii noi şi variate,
pe parcursul unei ore sau a unei succesiuni de ore de curs. Această metodă:
 reprezintă o situaţie problemă care nu are o rezolvare simplă;
 deşi sarcina poate fi scurtă, timpul de rezolvare este relativ lung
 începe, se desfăşoară şi se termină în clasă;
 poate fi individuală sau de grup.
Obiectivele care se urmăresc:
 înţelegerea şi clarificarea sarcinii;
 găsirea procedeelor pentru obţinerea de informaţii;
 colectarea şi organizarea datelor sau informaţiilor necesare;
 formularea şi testarea ipotezelor de lucru;
 schimbarea planului de lucru sau colectarea altor date dacă este necesar;
 explicarea metodelor folosite în investigaţie;
 scrierea unui scurt raport privind rezultatele investigaţiei.
Caracteristici personale (ale elevilor) urmărite:
 creativitate şi iniţiativă;
 participarea în cadrul grupului;
 cooperarea şi preluarea conducerii/iniţiativei în cadrul grupului;
 persistenţă;
 flexibilitate în gândire şi deschidere către idei noi;
 dorinţa de generalizare.

 PROIECTUL
Necesită o activitate amplă care evaluează elevul pe nivele superioare urmărindu-se capacitatea
acestuia da a selecta, utiliza, bibliografia, experimenta, realiza, prezenta documentaţia care cuprinde
soluţia şi reprezentări grafice, organizarea conţinutului şi prezentării într-un referat, munca în echipă cu
distribuirea sarcinilor, calitatea prezentării scrise şi exprimate, calitatea materialului exprimat în limbaj
grafic convenţional, puterea de convingere în argumentarea soluţiei date etc.
Proiectul:
 începe în clasă prin definirea şi înţelegerea sarcinii - eventual şi prin începerea rezolvării
acestuia;
 se continuă acasă pe parcursul a mai multor zile sau săptămâni, timp în care elevul se
consultă permanent cu profesorul;
 se încheie tot în clasă, prin prezentarea în faţa colegilor a unui raport asupra rezultatelor
obţinute şi, dacă este cazul, a produsului realizat;
 poate fi realizat individual sau în grup.

 PORTOFOLIUL

125
Metodica predării tehnicilor de programare pentru grupele de performanţă

Reprezintă „cartea de vizită” a elevului, urmărindu-i progresul de la un semestru la altul, de la un


an şcolar la altul. Este un instrument de evaluare complex, integrator, reprezentând o alternativă viabilă
la testele standardizate. Îi oferă profesorului evaluator posibilitatea de a emite o judecată de valoare
bazată pe un ansamblu de rezultate, oglindind complexitatea evoluţiei elevului.
Portofoliul va fi proiectat de fiecare profesor, eventual în colaborare cu elevii, în funcţie de situaţia
particulară în care îl va folosi.
Componentele necesare pentru proiectarea unui portofoliu:
o Date provenite din aplicarea instrumentelor de evaluare formalizate: rezultatele la testele de
progres şi sumative, analizate comparativ cu rezultatele la testele iniţiale; dominanta acestor
rezultate.
o Observaţiile privind activitatea elevului în clasă :
 rezultate în activitatea independenta;
 atitudinea faţa de obiect, în special în cursul activităţilor de învăţare (cooperant,
indiferent, ostil, interesat);
 colaborarea cu profesorii şi colegii;
 capacitatea de lucru în echipă;
 calitatea notiţelor;
 capacitatea de a pune întrebări, de a participa la investigaţii;
 interesul pentru corelaţii interdisciplinare şi pentru aplicaţii practice;
 creativitatea;
o Informaţii privind activitatea elevului în afara clasei:
 temele pentru acasă - apreciere cantitativă şi calitativă;
 interesul pentru pregătirea suplimentară;
 referate;
 participare la activităţi de cerc;
 preocupare pentru aplicaţiile informaticii în domeniu;
 preocupări pe teme practice în domeniu;
 participare la concursuri;
 planuri de viitor.

 AUTOEVALUAREA
Participarea elevilor la atribuirea notelor le permite acestora să conştientizeze criteriile de apreciere
şi să ajungă la imaginea de sine, să fie conştienţi de progresele înregistrate, de eforturile care li se cer
pentru atingerea obiectivelor propuse.
Tehnicile folosite în scopul formării şi dezvoltării capacităţii de autoevaluare la elevii pot fi grupate
astfel:
 înţelegerea de către elevi a criteriilor de apreciere după care se conduce profesorul;
 autonotarea controlată, în care elevul îşi face propunerea de nota, aceasta fiind revăzută şi
definitivată de profesor;

126
Metodica predării tehnicilor de programare pentru grupele de performanţă

 notarea reciprocă sub îndrumarea profesorului;


 autoevaluarea şi interevaluarea independentă;
 construirea grilelor de autoevaluare.
Cerinţe necesare pentru formarea deprinderilor de autoevaluare la elevi:
 prezentarea obiectivelor curriculare şi a celor de evaluare pe care elevii trebuie să le realizeze;
 încurajarea elevilor în a-şi pune întrebările de mai jos şi de a da răspunsul în scris:
o Există şi un alt mod (metodă) de a rezolva această sarcină ?
o Am rezolvat sarcina suficient de bine ?
o Ce ar trebui să fac în pasul următor ?
o Ce produs care mă reprezintă, ar trebui să pun în portofoliu ?
 încurajarea evaluării în cadrul grupului;
 Completarea la sfârşitul unei sarcini importante a unor întrebări de genul:
Am învăţat ……..
Am fost surprins de faptul că….
Am descoperit că
Am folosit metoda deoarece 

 FIŞE DE LUCRU
Criterii de utilizare eficientă:
 Fişele sunt abordate ca mijloace de învăţământ, ca instrumente utile învăţării.
 Pot fi utilizate în toate etapele lecţiei, formele învăţării, nivele de operaţionalizare a obiectivelor.
 Răspunsul poate fi direct pe fişa sau în caietul de notiţe, în clasă sau acasă.
 Este necesar a se preciza, în scris sau oral, indicaţiile de lucru; după nivelul elevilor se pot însuma
şi ordona, pe module, teme, lecţii.
 Se pot grupa în fişiere tematice, cu accesul liber al elevilor, cu rezolvarea lor independenta, fără
sprijin.
 Pot fi utilizate ca fise de evaluare dacă elevul nu primeşte material sau indicaţii suplimentare.
 Se pot aplica individual sau în grup.
FIŞA DE LUCRU FIŞA DE EVALUARE
 nu se dă timpul de rezolvare decât orientativ;  se indică timpul total
 se abordează total interdisciplinar

 se abordează gradual cu parcurgerea  acoperă o arie mare de cunoaştere,


secvenţelor didactice; capacitate de aplicare a cunoştinţelor
 vizează primele nivele de instruire (definire,  creativitatea, analiza şi sinteza sub aspect
înţelegere cu aplicaţii fără grad mare de calitativ;
dificultate);

127
Metodica predării tehnicilor de programare pentru grupele de performanţă

 conţine elemente ajutătoare pentru  nu conţine elemente ajutătoare ci numai


rezolvarea sarcinii propuse şi vizează conţinutul sarcina de lucru care evaluează obiectivele
noii învăţări; propuse;
 urmăreşte implicarea activă a elevului în  se stabileşte punctaj pentru itemi;
procesul propriei instruiri, motivându-l superior.  se indică modalităţi de convertire a
punctajului în notă.
 se pot evalua anumite cerinţe specificate, cu
precizarea că ele vor fi elaborate adecvat.

TESTELE DE EVALUARE

Testul reprezintă un instrument de evaluare folosit în general în sensul de test şcolar şi cu orientări
specifice de genul: test de cunoştinţe, de aptitudini, de dezvoltare mintală, de comportament etc.
Prelucrând clasificarea tipurilor de teste de cunoştinţe relevate de P.Lisievici se poate face
clasificarea:
Criteriu Tipuri de teste Caracteristici
Utilizate în perioada preştiinţifică a evaluării vizează structuri
Integrative
integrate de cunoaştere, înţelegere, aplicare

Fiecare element de test măsoară un element cognitiv izolat,


Specificitate Punctuale
precis determinat

Introduc elemente de tip integrativ abordând obiective


„din generaţia a treia"
aparţinând nivelurilor cognitive superioare

[temi care pot fi cotaţi prin compararea răspunsului cu un


Obiective model complet a; răspunsului corect, cu coeficienţi de
Obiectivitate fidelitate ridicaţi
Subiective Cu fidelitate redusă
Semiobiective Cu itemi combinaţi
Diagnostice (de Formative, nu urmăresc ierarhizarea, prezintă nevoia unei
progres) validităţi satisfăcătoare
Sumative, au rol de ierarhizare, validitatea şi fidelitatea fiind
De succes educaţional
foarte importante

Utilitate De plasament Ierarhizează şi permit repartizarea pe grupe de nivel

Orientate către cerinţe esenţiale pentru activitatea ulterioară


De capacitate (de tip TOEFL), ierarhizează, presupun colaborarea unoi
(proficiency) grupuri de experţi şi existenţa organelor specializate de
evaluare

128
Metodica predării tehnicilor de programare pentru grupele de performanţă

Orale [ternii aleşi pot fi de multe ori subiectivi


Scrise Conţin itemi de toate tipurile
Forma de
prezentare a Cu manipularea de Presupun existenţa şi eficienţa aparaturii necesare, eventual

sarcinii aparate şi piese înregistrarea rezultatelor intermediare

Implică stabilirea unor grade de performanţă superioară,


De performanţă
permiţând selectarea, ierarhizarea

Cu timp de execuţie Necesită o stabilire riguroasă a timpului necesar de lucru


Modul de limitat pentru atingerea performanţelor dorite
executare Permit creaţia, pot fi evaluate de multe ori subiectiv, pierd din
Cu timp liber
validitate şi fidelitate
Construite pentru fiecare elev în parte pot fi standardizate
Individuale
sau nestandardizate
Modul de
Pe lângă performanţele dorite permit comunicarea,
aplicare
Colective (de grup) colaborarea, transmiterea, motivarea superioară la nivelul
grupului
Itemii pot fi divizaţi pentru a viza concret comportamentele
Analitice
Forma de urmărite
solicitare Cuprind itemi subiectivi, urmărind capacităţi cum ar fi cea de
Sintetice
sintetizare
Proiectarea unui test presupune legătura dintre relevanţa acestuia, fidelitatea şi practicabilitatea sa.
Raportarea permanentă la obiectivele stabilite conduce la obţinerea unei mai mari obiectivităţi a testului,
aceasta reprezentând şi calea eficientizării evaluării tradiţionale.

Caracteristici ale testelor:


După cum testele pot fi standardizate (docimologice), sau nestandardizate, există câteva elemente
definitorii care le caracterizează:
 asigurarea pe cât posibil a situaţiilor de experimentare şi măsurare asemănătoare pentru
toate persoanele testate;
 înregistrarea precisă şi obiectivă a comportamentului declanşat la subiect;
 comportamentul înregistrat poate fi evaluat statistic prin raportare la rezultatele aşteptate,
la cele anterioare, eventual la cele ale unui grup determinat de indivizi, etc.;
 clasificarea subiecţilor.
În plus există caracteristici generale ale testelor, de tipul:
 identifică tripletul: conţinut, condiţii de aplicare, criterii de apreciere;
 presupun respectarea stratificării materiei şi luarea în considerare a importanţei secvenţelor
de învăţare;
 conduc (în special cele docimologice) la standardizarea condiţiilor de examinare, a
modalităţilor de notare;

129
Metodica predării tehnicilor de programare pentru grupele de performanţă

 conţin probe (itemi) care permit determinarea cu uşurinţă a gradului de însuşire a


cunoştinţelor şi de dezvoltare a capacităţilor;
 permit aprecierea individuală sau la nivel de clasă (serie) a elevilor;
 valorifică informaţia acumulată;
 permit extragerea esenţialului şi sistematizarea cunoştinţelor;
 se desfăşoară într-un timp optim stabilit.

Calităţile unui test bine proiectat sunt:


 fidelitatea - este îndeplinită dacă şi numai dacă aplicat în situaţii analoage (sau identice),
eventual de către specialişti diferiţi, se obţin rezultate identice sau comparabile. Nu este
niciodată absolută fiind admise abateri de 2.5% până la 3%;
 puterea de discriminare - identificarea exactă a nivelului de performanţă atins, precum şi a
lacunelor fiecărui elev, asigurând o largă distribuţie a scorurilor pentru grade diferite de
pregătire a elevilor;
 aplicabilitatea - oferă date utile atât elevului cât şi profesorului;
 relevanţa (validitatea) - gradul în care probele alese (itemii) testează comportamentele
dorite(cunoştinţele, abilităţile vizate) şi nu altele, adică măsoară exact ce şi-a propus să
măsoare;
 echilibrul - modul în care se realizează o testare proporţională a fiecărei componente a
comportamentului, în conformitate cu intenţia celui care a proiectat testul;
 eficienţa - măsura în care este folosit timpul profesorului pentru proiectarea, administrarea,
corectarea şi interpretarea rezultatelor testului şi timpul elevilor pentru performarea testului
respectiv;
 specificitatea - măsura în care itemii folosiţi sunt suficient de specifici încât să se evite
situaţia în care un elev poate obţine scoruri satisfăcătoare fără să studieze materia
respectivă;
 dificultatea - măsura în care itemii aleşi corespund ca grad de dificultate nivelului subiecţilor
vizaţi;
 siguranţa - măsura în care testul oferă scoruri care se corelează cu cele obţinute prin alte
metode şi instrumente de evaluare, pentru acelaşi domeniu investigat;
 temporalitate - scorul obţinut reflectă nivelul real al elevului şi nu viteza sa de răspuns prin
stabilirea unui timp adecvat de rezolvare.

 Etapele realizării unui test

Proiectarea testului:
1. Precizarea obiectivelor;
2. Documentarea ştiinţifică necesară;
3. Avansarea unor ipoteze (conceperea şi/sau selecţionarea problemelor reprezentative);

130
Metodica predării tehnicilor de programare pentru grupele de performanţă

4. Stabilirea tipului de test adecvat;


5. Stabilirea tipurilor de itemi ce se vor folosi;
6. Stabilirea performanţelor minime acceptabile (barem)

Experimentarea testului
Aplicarea cu scopul de a-l perfecţiona;
a) Analiza rezultatelor şi ameliorarea testului
b) Aplicarea efectivă a testului

Părţile componente ale unui instrument de evaluare:


a) Testul elevului (proba elevului) care reuneşte un anumit număr de itemi dat elevilor
spre rezolvare
b) Etalonul de rezolvare care cuprinde:
− răspunsurile concrete ale fiecărui item;
− punctajul care poate fi acordat pentru realizarea integrala a fiecărei sarcini
prevăzute in itemii testului;
c) Etalonul de convertire a punctajelor în note şcolare
Tipurile reprezentative de itemi din domeniul cognitiv se pot clasifica astfel:
1. Itemi obiectivi
 cu alegere multiplă
− cu o singură variantă de răspuns corectă
− cu mai multe variante de răspuns corecte
 cu alegere duală (de tip adevărat - fals);
 de tip cauză - efect
 cu modificarea alternativei F (fals), T(adevărat)
 de asociere (pereche)
 de ordonare (ierarhizare)
 de tip selectare (grupare) după caracteristici
2. Itemi semiobiectivi
 cu răspuns scurt
 de completare a unei propoziţii lacunare
− cu ordine impusă de completare
− în orice ordine
 de tip întrebare structurată

3. Itemi subiectivi
 de tip rezolvare de problemă
 de tip redactare de text
 de tip analiză, rezumat, sinteză, schematizare etc.

131
Metodica predării tehnicilor de programare pentru grupele de performanţă

 de tip creaţie.

Un alt tip de clasificare ţine cont de criterii cum ar fi :natura sarcinii de lucru dată elevului, după
prezenţa materialelor auxiliare, după modul de transmitere-comunicare a sarcinilor, respectiv răspunsului
obţinut:

A) După natura sarcinii de lucru dată elevului


 itemi de precizare/identificare;
 itemi de ordonare;
 itemi de completare;
 itemi de calcul;
 itemi de asociere;
 itemi de corelare;
 itemi pentru executarea de operaţii;
 itemi pentru stabilirea de relaţii cauzale.

B) După tipul de item


 itemi cu răspuns construit (formulare/executare liberă);
 itemi cu răspuns la alegere (alegerea, opţiunea a mai multor răspunsuri corecte dintr-o listă
oferită);
C) După prezenţa materialelor auxiliare:
 itemi a căror rezolvare nu necesită materiale auxiliare;
 itemi a căror rezolvare necesită materiale auxiliare (tabele de date, scheme,...)

D) După modul de transmitere (comunicare) a itemului


 itemi comunicaţi oral;
 itemi comunicaţi în scris;
 itemi comunicaţi prin mijloace audiovizuale;
 itemi comunicaţi prin programe de evaluare (transmise elevului prin intermediul calculatoarelor)

E) După modul de comunicare a răspunsului


 itemi cu răspuns oral;
 itemi cu răspuns în scris;
 itemi cu răspuns dat prin instalaţii de evaluare;
 itemi cu răspuns dat prin activităţi practice;
Orice item din testul elevului prezintă concomitent câte o caracteristică din fiecare criteriu de
clasificare.
Exemplu:
o natura sarcinii: item de corelare

132
Metodica predării tehnicilor de programare pentru grupele de performanţă

o tipul de item: cu răspuns construit


o prezenta materialelor auxiliare: rezolvarea nu necesita materiale auxiliare
o modalitatea de transmitere a răspunsului: în scris.

Alegerea variantelor de itemi


La dispoziţia profesorului se găseşte un număr important de modalităţi prin care îşi poate formula
sarcinile de evaluare a rezultatelor obţinute de elevi.
Criteriul de bază este constituit de conţinutul obiectivului pedagogic a cărui realizare se evaluează.
De exemplu se urmăreşte a se evalua un obiectiv care prevede formarea deprinderii de a elabora
algoritmul, respectiv programul pentru determinarea sumei cifrelor unui număr introdus de la tastatură.
Sarcina de instruire include operaţii privind elaborarea algoritmului şi scrierea programului Pascal
corespunzător algoritmului.
Teoretic, pentru evaluarea nivelului de realizare a acestui obiectiv, profesorul ar putea folosi mai
multe tipuri de itemi şi anume:
 Care sunt etapele de elaborare ale algoritmilor? (item de precizare cu răspuns construit oral sau
scris )
 Identificaţi operaţiile cu ajutorul cărora se determină cifrele unui număr (item de identificare cu
răspuns construit în scris).
 Elaboraţi algoritmul şi scrieţi programul Pascal pentru problema propusă (item privind executarea
unor operaţii cu răspuns construit).
Este necesar să se evite orice neconcordanţă între modalitatea de oferire a răspunsului şi natura
comportamentului evaluat. Corelaţiile cele mai indicate sunt:
 prin răspunsuri orale să se evalueze: comportamente de exprimare, conversaţie, interogatoriu;
 prin răspunsuri în scris: comportamente de scriere, compunere, recunoaştere, ordonare,
identificare;
 prin răspunsuri concretizate în activităţi practice: comportamente de tehnică profesională,
deprinderi motorii şi intelectuale, executare de operaţii;
 prin răspunsuri date cu ajutorul calculatorului: comportamente de recunoaştere, identificare,
calcul;
Un alt criteriu este solicitarea maximă a gândirii elevului şi obţinerea prin răspunsul dat la fiecare
item a maximului de informaţii de evaluare care să angajeze cât mai complex resursele elevului.
Un alt criteriu de care urmează a se ţine seama este raportul dintre tipul de item şi procesele psihice
pe care le implică rezolvarea.

133
Metodica predării tehnicilor de programare pentru grupele de performanţă

CONCLUZII

Opţiunea pentru temă a fost determinată de obiectivul reformei învăţământului românesc de


racordare a conţinuturilor programelor şcolare şi manualelor la informaţiile actualizate din orice domeniu,
care echivalează cu o familie ocupaţională pentru care se organizează şcolarizarea.
Cercetările pedagogice arată că, deşi formaţia actuală a multor profesori a statuat puternic şi uneori
de neclintit, idei că : „profesorul predă şi elevul învaţă”, „profesorul trebuie să expună lecţia, iar
elevul să-şi noteze, să o revadă în manual şi să o reproducă fidel”, etc., este necesară o
restructurare a acestor concepţii şi demonstrează că tehnologiile didactice, proiectate riguros, conduc la
rezultate net superioare, fiind de multe ori cauza sporirii motivaţiei elevilor pentru învăţare şi de
perfecţionare pedagogică a cadrelor didactice.
Abordarea sistematică a procesului de învăţământ aduce cu sine avantajul reglării continue a
funcţionalităţii sale şi, pe această bază, optimizarea rezultatelor şcolare, apropiindu-le cât mai mult de
obţinerea unei competenţe profesionale cât mai ridicate.
Acesta este contextul în care lucrarea prezintă elementele specifice, de actualitate în legătură cu
cadrul general al reformei învăţământului românesc, cu implementarea programului de reformă şi
aspectele curriculare legate de acest proces.
Din perspectiva aplicării sistematice şi în conformitate cu particularităţile elevilor a cerinţelor
reformei, partea metodică a lucrării cuprinde o analiză psiho-pedagogică a comportamentului acestora
pentru evidenţierea aspectelor esenţiale, care constituie totodată şi direcţii de acţiune în vederea
resocializării minorilor şi tinerilor instituţionalizaţi.
De asemenea, este prezentat un profil de competenţă al profesorului ce îşi desfăşoară activitatea
într-o astfel de unitate şcolară, în concordanţă cu obiectivele educaţiei şi cu situaţiile pe care trebuie să le
rezolve, cu atât mai mult cu cât accentul nu cade, ca în celelalte şcoli, pe predare, dirijarea învăţării, ci pe
comunicare, influenţare, implicare, cooperare, stimulare, decizie, organizare etc.
Informatica a pătruns astăzi în cele mai variate domenii. Indiferent de profesia pe care o va alege
un tânăr, cu siguranţă va avea nevoie de cunoaşterea structurii şi modul de utilizare ale unui
instrumentar informatic. Volumul cunoştinţelor şi deprinderilor necesare va depinde desigur de
domeniu, de exigenţele şi cerinţele concrete. Este însă o nevoie stringentă de iniţiere a tinerilor din toate
şcolile în utilizarea calculatoarelor la un nivel profesional, pe care îl numim azi – doar - nivel de cultură
generală.
Educarea elevilor pentru realizarea unor produse utilizabile, dezvoltarea spiritului inventiv şi creator ,
apare ca un obiectiv impus de sistemul economic în care trăim şi vom trăi. Indiferent de conţinutul
aplicaţiei, ceea ce realizează elevul, trebuie să funcţioneze, trebuie să fie utilizabil. Altfel spus, trebuie să
aibă toate calităţile unui produs comercial.

134
Metodica predării tehnicilor de programare pentru grupele de performanţă

Datorită implicaţiei pe care Informatica o are azi în toate profesiile, rezultă caracterul ei
interdisciplinar. Informatica nu poate fi privită numai ca o disciplină independentă şi nu poate fi ţinută
între bariere create artificial.
Elevii trebuie să înţeleagă conexiunile dintre Informatică şi societate şi să fie capabili să se
adapteze dinamicii schimbărilor determinate de aceste conexiuni.
Alegerea temei are la bază interesul crescut al elevilor pentru pregătirea în cadrul grupelor de
performanţă.
Conţinutul lucrării se adresează elevilor care sunt doritori de cunoştinţe suplimentare programei
şcolare, elevilor care doresc să înveţe mai repede şi să atingă performanţă în informatică, cu precădere în
algoritmică şi programare.
Elevii cărora le place programarea pot participa la o serie de concursuri, simpozioane, tabere,
olimpiade şcolare unde pot învăţa şi pot arăta ceea ce ştiu. Prima condiţie pe care un elev trebuie s-o
îndeplinească pentru a avea succes la aceste concursuri este să fie în stare să gândească singur.
Lucrarea îşi propune să dezvolte gândirea algoritmică şi noi abilităţi de a implementa algoritmi prin
numeroasele aplicaţii rezolvate, cu explicaţii detaliate şi implementări.

135
Metodica predării tehnicilor de programare pentru grupele de performanţă

BIBLIOGRAFIE
[1] R. Bellman, Dynamic Programming, Princeton University Press, 1957
[2] C. Boehm, Corrado, G. Jacopini , Flow Diagrams, Turing Machines, and Languages
with only Two Formation Rules, Communications of the ACM 9, 1966.
[3] G. Brassard, P. Bratley, Algorithmics: Theory and Practice, Prentice-Hall, 1998
[4] Thomas H.Cormen, Charles E.Leiserson, Ronald R.Rives, Introducerea în algoritmi, ed.
Agora, Cluj 2001
[5] E. Cerchez, M. Şerban, Programarea în limbajul C++. Metode şi tehnici de
programare, ed. Polirom, 2006
[6] E. Cerchez, Informatică. Culegere de probleme pentru liceu, ed. Polirom, 2002
[7] M. Dragan, L. Cucu, T. Jebelean, V. Negru, Delaunay Triangulation Using Divide-and-
Conquer , Timişoara
[8] M. Dragan, T. Jebelean, Efficient parallelization of long integer arithmetic using
Karatsuba Method , ALGORITMY2000 (15th Conference on Scientific Computing) , 10-15
Sept. 2000, Podbanske, Slovakia
[9] E.W. Dijkstra, Note on Structured Programming, Technological University
Eindhoven, The Netherlands, 1969
[10] O. Dogaru, Gh.Bocşan,…, Informatică pentru definitivat şi grad , Editura de Vest,
Timişoara, 2000
[11] C. Frâncu, Psihologia concursurilor de informatică, ed. L&S Info-mat, 1997
[12] H. Georgescu, Tehnicii de Programare, Bucureşti, 1999
[13] Ginfo, Gazeta de Informatică, 1994-2006
[14] E. Horowitz, S. Sahni, Sanguthevar Rajasekaran, Computer Algorithms in C++, New
York, 1996
[15] C. Ionescu, A. Bălan, Informatică pentru grupele de excelenţă, ed. Dacia, 2005
[16] D. E.Knuth, Arta programării calculatoarelor vol. 1, 2, 3, ed. Teora 2000
[17] D. Lica, M. Paşoi, Informatică. Fundamentele Programării, ed. L&S Info-mat, 2005
[18] L. Livovschi, H. Georgescu, Sinteza şi analiza algoritmilor , ed. Ştiinţifică şi
Enciclopedică, Bucureşti, 1986
[19] D. Luncan, Bazele proiectării programelor şi algoritmilor, Iaşi, 1996
[20] M. Olteanu, Proiectarea şi Implementarea algoritmilor, ed. Agora, 2000
[21] T. Sorin, Tehnici de programare, ed. L&S Infomat, 1997
[22] M. Stoica, Sinteze de pedagogie şi psihologie, ed. Universitaria, Craiova, 1992

136
Metodica predării tehnicilor de programare pentru grupele de performanţă

[23] S.N.E.E., Ghid de evaluare, Informatică şi Tehnologia Informaţiei , ed. Aramis, 2001
[24] www.infoarena.devnet.ro
[25] www.liis.ro/campion

137

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