Sunteți pe pagina 1din 12

Colegiul Tehnologic de Industrie Alimentară Arad

PROIECT DIDACTIC

LECŢIE PENTRU DOBÂNDIREA DE NOI CUNOŞTINŢE


PRIN APLICAȚII

Disciplina: INFORMATICĂ
Clasa: a XI-a, specializarea Matematică – Informatică
Profesor: .Fodor Emese
Unitatea de învăţare: Metode de programare
Timpul alocat: 100 minute
Tema: Aplicații la metoda de programare Divide et Impera
Tipul lecţiei: însuşire de noi cunoştinţe
Locul desfăşurării: Laboratorul de informatică

Nivelul iniţial al clasei:


- elevii şi-au însuşit noţiunile teoretice legate de recursivitate;
- elevii utilizează şi operează corect cu funcţiile şi structurile de date alocate static;

Competenţe generale:
1. Identificarea datelor care intervin într-o problemă şi aplicarea algoritmilor fundamentali de
prelucrare a acestora
2. Elaborarea algoritmilor de rezolvare a problemelor
3. Aplicarea algoritmilor fundamentali în prelucrarea datelor
4. Implementarea algoritmilor într-un limbaj de programare
Competenţe specifice:
C1. Analiza problemei în scopul identificării metodei de programare adecvate pentru
rezolvarea problemei
C2. Aplicarea creativă a metodelor de programare pentru rezolvarea unor probleme
intradisciplinare sau interdisciplinare, sau a unor probleme cu aplicabilitate practică
C3. Analizarea comparativă a eficienţei diferitelor metode de rezolvare a
aceleiaşi probleme şi alegerea celui mai eficient algoritm de rezolvare a unei probleme

Obiectivul general al lecţiei: Aplicarea tehnicilor recursive în rezolvarea de probleme


Obiective operaţionale:
La sfârşitul lecţiei elevii vor fi capabili:

1
Colegiul Tehnologic de Industrie Alimentară Arad

O1: să utilizeze corect funcţii implementate recursiv;


O2: să aplice cunoştinţele acumulate în rezolvarea de aplicaţii practice;
O3: să aleagă modlaități diferite de implementare ale rezolvării unei aceleiaşi probleme

O4: să aplice metoda Divide et Impera în rezolvarea de probleme.

Obiective educaţionale:
Obiective cognitive:
să utilizeze corect noţiunile teoretice însuşite pentru a rezolvarea aplicaţii;
să compare între ele diferite metode rezolvare
Obiective afective:
să argumenteze anumite situaţii create în etapele de dezvoltare a unei aplicaţii;
să manifeste interes faţă de problemele propuse şi dorinţa de învăţare prin
descoperirea proprie a adevărului ştiinţific;
să aprecieze corect soluţiile oferite de ceilalţi colegi.
Obiective psihomotorii:
să-şi dezvolte gândirea logică, flexibilă, creatoare;
să-şi dezvolte atenţia concentrată şi spiritul de observaţie;
să utilizeze corect noţiunile teoretice însuşite.

Strategii didactice:
Principii didactice:
- principiul participării active
- principiul asigurării progresului gradat al performanţei
- principiul conexiunii inverse.

Metode de învăţământ:
- metode de comunicare orală: expunere, conversaţie, problematizare, algoritmizare,
modelare
- metode de acţiune: exerciţiul, învăţare prin descoperire, prin rezolvare de probleme
- problematizarea prin crearea situaţiilor problemă
- conversaţia de consolidare în toate etapele lecţiei

Forme de organizare: frontală şi individuală


Forme de dirijare a învăţării: dirijată de profesor sau independentă
Resurse materiale:
- material bibliografic:
2
Colegiul Tehnologic de Industrie Alimentară Arad

o Tudor Sorin – Informatică. Manual pentru clasa a X-a. Varianta C++ -


Editura L&S Soft, Bucureşti, 2006
- fişă de probleme

Metode de evaluare:
- evaluare iniţială: întrebări adresate frontal clasei, aplicaţii practice
- set de aplicaţii

Momentele lecţiei:
Moment organizatoric:
o Pregătirea lecţiei:
întocmirea proiectului didactic
pregătirea setului de întrebări
pregătirea setului de aplicaţii
pregătirea temei
o Organizarea şi pregătirea clasei: verificarea frecvenţei
o Captarea atenţiei clasei:
anunţarea subiectului lecției;
anunţarea obiectivelor urmărite;
anunţarea modului de desfăşurare al activităţii

Reactualizarea cunoştinţelor
Se desfăşoară o scurtă conversaţie introductivă, reactualizarea cunoştinţelor făcându-
se apoi treptat, pe măsură ce vor fi întâlnite diverse situaţii.
Evaluarea în etapa de reactualizare se realizează frontal.

Transmiterea noilor cunoştinţe

Metoda Divide et Impera este o tehnică de programare care se poate aplica


problemelor care se pot descompune în alte subprobleme ce pot fi tratate independent, sunt
similare cu problema iniţială, sunt de dimensiuni mai mici şi a căror rezolvare este mai
uşoară.

Pot fi identificate trei etape în rezolvarea unei probleme folosind Divide et Impera:
1. Divide, descompunera problemei în două (sau mai multe) subprobleme
3
Colegiul Tehnologic de Industrie Alimentară Arad

2. Impera, rezolvarea subproblemelor


3. Combină rezultatele parţiale
Divide et impera este o tehnică ce admite atât implementare iterativă cât şi recursivă.
Vom utiliza implementarea recursivă a algoritmilor. Astfel, identificăm următoarele
situații:
- Am ajuns la o problemă cu o dimensiune ce ne permite rezolvarea problemei;
- Impărțim problema în subprobleme cu scopul de a fi rezolvate ulterior.

1. Maximul dintr-un vector

Se citeşte un vector cu n componente, numere naturale. Se cere să se tipărească


componenta cu valoarea maximă.

#include <iostream>
using namespace std;
int v[10],n;

int max(int i, int j)


{
int a, b, m;
if (i==j) return v[i];
else
{
m = (i+j)/2;
a = max(i, m);
b = max(m+1, j);
if (a>b) return a;
else return b;
}
}

int main( )

4
Colegiul Tehnologic de Industrie Alimentară Arad

{
cin>>n;
for (int i=1; i<=n; i++)
{
cin>>v[i];
}
cout<<max(1,n);
return 0;
}

2. Căutare binară

Se consideră un vector v avănd n componente, numere întregi, ordonate crescător şi


o valoare întreagă x. Dacă valoarea x se găseşte printre componentele vectorului v să se
afişeze indicele corespunzător, în cazcontrar să se afişeze mesajul „nu se gaseste”.
Numărul de componente n, cele n componente ale vectorului v şi valoarea lui x se citesc de
la tastatură.

O parcurgere secvenţială în care x se compară pe rând cu toate cele n componente


ale vectorului reperzintă o abordare simplistă şi ineficientă (nu ţine seama de faptul că
vectorul este ordonat crescător), având complexitatea O(n).

O abordare folosind Divide et Impera:

dacă x are valoarea componentei aflată pe poziţia de indice m=(s+d)/2, se afisează


indicele şi se revine din apel (problema a fost rezolvată).
în caz contrar, dacă nu au fost verificate toate componentele vectorului, atunci
problema se descompune astfel:

dacă valoarea x este mai mică decât valoarea componentei testate (cea de pe
poziţia din mijloc), înseamnă că x se poate afla numai pe una din poziţiile
din partea stângă, cu indice între s şi m - 1, se reapelează funcţia cu aceşti
parametri;
dacă valoarea x este mai mare decât valoarea componentei testate (cea de pe
poziţia din mijloc), înseamnă că x se poate afla numai pe una din poziţiile

5
Colegiul Tehnologic de Industrie Alimentară Arad

din partea dreaptă, cu indice între m+1 şi d, se reapelează funcţia cu aceşti


parametri;

dacă nu mai sunt alte componente de testat, înseamnă că x nu se găseşte printre


componentele vectorului.

Întrucât vectorul este sortat, căutarea se va face în continuarea pasului curent, într-o
problemă de dimensiune egală cu jumătatea celei curente. În consecință, complexitatea
acestui algoritm va fi mult mai mică decât cea a unei căutări secvențiale, și anume
O(log2n). Ex: pentru un n=210, căutarea se va finaliza după maxim 10 operații și nu 1024
ca în cazul celălalt!

#include <iostream>
using namespace std;
int v[100], n,x;

void cauta(int s, int d)


{
int m = (s+d)/2;
if (s<=d)
{
if (x==v[m])
cout<<x<<" se gaseste pe pozitia : "<<m;
else
if (x<v[m])
cauta(s,m-1);
else
cauta(m+1,d);
}
else cout<<"nu se gaseste";
}
int main( )
{

6
Colegiul Tehnologic de Industrie Alimentară Arad

cin>>n;
for (int i=1; i<=n; i++)
{
cin>>v[i];
}
cin>>x;
cauta (1,n);
return 0;
}

2. Căutare binară, #508 – sursa pbinfo.ro

Se dă un vector x cu n elemente numere naturale, ordonate crescător, și un


vector y cu m elemente, de asemenea numere naturale. Verificați pentru fiecare element al
vectorului y dacă apare în x.

#include <iostream>
using namespace std;

int caut(int x[25001],int s,int d,int a)


{
int mij;
if(s<=d)
{
mij=(s+d)/2;
if(x[mij]==a)
return 1;
if(a<x[mij])
return caut(x,s,mij-1,a);
else
return caut(x,mij+1,d,a);
}
else

7
Colegiul Tehnologic de Industrie Alimentară Arad

return 0;
}
int main()
{
int x[25001],n,m,i,a;
cin>>n;
for(i=1;i<=n;i++)
cin>>x[i];
cin>>m;
for(i=1;i<=m;i++)
{
cin>>a;
if(caut(x,1,n,a))
cout<<1<<" ";
else
cout<<0<<" ";
}
return 0;
}

Activitatea profesorului
Profesorul va propune elevilor recapitularea cunoştinţelor cu ajutorul întrebărilor.
Etapa de comunicare a noilor cunoştinţe va consta într-o combinaţie de aplicaţii
practice şi scurte definiţii.
Pentru fixarea cunoştinţelor, profesorul va propune elevilor un set de probleme ce vor
fi rezolvate cu Divide et Impera.

Activitatea elevilor
Elevii ar trebui să răspundă corect întrebărilor adresate lor de către profesor (oral sau la
tablă, ori pe calculator). Ei vor îndeplini sarcinile de lucru. Vor lua notiţe.

Intensificarea reţinerii şi asigurarea transferului de informaţii.


Se realizează cu aplicaţii pentru verificarea utilizării corecte a noţiunilor învăţate.

8
Colegiul Tehnologic de Industrie Alimentară Arad

Dirijarea învăţării pentru obţinerea performanţei (tema de lucru –


conţinutul unei fişe de probleme)

Tema pentru acasă


Tema pentru acasă va fi constituită din problemele care rămân nerezolvate din fişa de
lucru.

Fișa A – Verificare cunoștiințelor dobândite anterior


1. Principiul metodei:

Metoda Divide et Impera ("dezbină și cucerește") constă în împărţirea repetată a unei probleme de dimensiuni
mari în mai multe subprobleme de acelaşi tip, urmată de rezolvarea acestora şi combinarea rezultatelor obţinute pentru a
determina rezultatul corespunzător problemei iniţiale. Pentru fiecare subproblemă procedăm în acelaşi mod, cu excepţia
cazului în care dimensiunea ei este suficient de mică pentru a fi rezolvată direct.
Este evident caracterul recursiv al acestei metode.

2. Aplicații învățate anterior:

Căutare 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.

Ţinând cont de faptul că a este ordonat crescător, îl vom compara pe x cu elementul din "mijlocul" vectorului.
Dacă avem egalitate, algoritmul se încheie; în caz contrar vom lucra fie pe "jumătatea" din stânga, fie pe cea din dreapta în
funcție de valoarea lui x față de mijloc: dacă x este mai mic atunci se va regăsi în partea dreaptă, dacă este mai mare se va
regăsi în partea stângă.

De exemplu: pentru valorile

și x= 1 1 1 1 1 1
0 2 3 5 7 8 9 0 2 3 5 7
șirul de valori comparate cu x va fi:
9 1 1
3 0

Ridicarea la putere : Să se calculeze ab efectuând cât mai puține înmulțiri.

Vom folosi regula înmulțirii puterilor cu aceiași bază: ab/2 * ab/2 = ab/2+b/2 = ab

De exemplu 2 6 = 23 * 23

26

23 23 =64

2 22 =8

2 2 =4

9
Colegiul Tehnologic de Industrie Alimentară Arad

Fișa B – Problema pavării

1. Cerința problemei

Gigel vrea să își cumpere o casă în noul cartier construit la marginea orașului. Grădinile puse la dispoziție de
dezvoltator sunt sub forma unui pătrat de latură 2 n (probabil dezvoltatorul este pasionat de informatică). Ca să paveze
gradina el are la dispoziție dale sub forma:

Pe o suprafață pătratică de 1 m2 dezvoltatorul va planta un pom. Gigel se gândește și știe deja unde o să fie poziționat
pomul în grădină.
Noi trebuie să îl ajutăm pe Gigel să aibă grădina mult visată.

Date de intare: Se citesc din fișierul date.in 3 numere: n, i, j reprezentând


n- exponentul lui 2 pentru determinarea laturii suprafeței pătratice a grădinii (0<n<100)
i- coordonata liniei locului unde este poziționat copacul
j- coordonata coloanei locului unde este poziționat copacul

Date de ieșire: În fișierul date.out se vor afișa 2n linii ce conțin, fiecare, 2n numere ce reprezintă numerotarea dalelor
folosite. Locul unde este copacul se va marca cu 0.

2. Exemple

Date de intrare Date de ieșire Explicații


n=1, deci latura va fi de 21 , i=1, j=1, deci copacul va fi
pe poziția 1 1

1
111 0 1
1 1 1 1
n=2, deci latura va fi de 22 , i=2, j=3, deci copacul va fi
pe poziția 2 3

2 2 3 3
2 2 3 3

223
2 1 0 3 2 1 3
4 1 1 5
4 1 1 5
4 4 5 5

4 4 5 5

3. Exercițiul 1

După modelul exemplului dat găsiți datele de ieșire pentru date de intrare 2 3 4

4. Să se realizeze, folosind aplicația CodeBlocks, implementarea în C++ a algoritmului de rezolvare


10
Colegiul Tehnologic de Industrie Alimentară Arad

Fișa C
1. În care din următoarele povești se folosește metoda Divide et Impera?

a. Făt Frumos vrea să culeagă un măr de aur din grădina a tatalui său. Se duce la acesta să ia cheia de la poarta
grădinii. Tatăl său ii spune că nu sunt cheile la el ți îl trimite la împărăteasă. Împărăteasa îi spune că îi dă cheile
dacă îi aduce, din camera ei ghergheful. Cheile de la cameră sunt la jupâneasă. Făt Frumos se duce la jupâneasă, ia
cheile de la cameră, se întoarce și duce ghergheful împărătesei, ia cheile de la gradină, se întoarce la porțile
grădinei și obține, mulțumit, mărul.
b. Cei șapte pitici prieteni cu Alba ca Zăpada au nevoie de cât mai mult aur ca să îi confecționeze prietenei lor un
colier. Ca să îl obțină trebuie să sape pe o suprafață cât mai mare în mină. Așa că pornesc dintr-un tunel pe care îl
împart în 2, apoi primul tunel îl împart din nou în alte 2 tuneluri, pe care le împart din nou, pe fiecare, în 2 tuneluri
noi. Al doilea tunel, care este format din tunelul inițial, îl împart și pe acesta în 2 și ultimul tunel este din nou
împărțit (acum fiecare pitic sapă în tunelul său). La sfârșitul zilei au ieșit din mină cu destul aur și s-au bucurat
tare.
c. Cenușăreasa are de făcut curat în toata casa. Ea începe de la etaj și face curățenie în prima cameră, apoi a doua
cameră etc până când termină toate camerele de la etaj. După care coboară la parter și face curățenie în prima
cameră, apoi a doua cameră etc până când termină toate camerele de la parter.

2. Care din următoarele afirmații despre metoda Divide et Impera sunt adevărate și care sunt false?
a. Pentru a calcula suma elementelor pare dintr-un vector nu se poate folosi această metodă
b. Se bazează pe tehnica recursivității
c. Pentru a calcula maximul elementelor unui vector folosind această metodă se ia fiecare element în parte, de la
primul la ultimul și se verifică dacă este cel mai mare

3. Andreea are un șir de mărgele pe care sunt puse: o mărgea în formă de romb, o mărgea în formă de pătrat,
o mărgea în formă de triunghi, o mărgea în formă de romb, o mărgea în formă de pătrat, o mărgea în
formă de triunghi etc. Ea taie șirul în două, ia margeaua din mijloc și dă deoparte prima jumătate din șir,
apoi repetă operația de încă 2 ori, rămânând o singură mărgică pe care, bineînțeles, o ia. Știind că de
fiecare dată obține un nou șir cu număr impar de mărgele, care sunt mărgelele luate și în ce ordine?

a)

b)

c)
Barem
1. b
2. fals; adevărat; fals
3. a

FIŞĂ DE LUCRU
DIVIDE ET IMPERA

Utilizând metoda Divide et Impera rezolvaţi următoarele probleme:

1. Produsul a n numere

Din fişierul de intrare şir.in, se citesc:

11
Colegiul Tehnologic de Industrie Alimentară Arad

de pe prima linie un număr natural n, reprezentând numărul de componente ale


unui şir a;
de pe a doua line, separate prin spaţiu, cele n componente ale şirului a.
Cerinţă:
Să se afişeze produsul componentelor şirului citit.

2. Verificarea ordinii componentelor unui vector

Din fişierul de intrare vector.in, se citesc:


de pe prima linie un număr natural n, reprezentând numărul de elemente ale
vectorului a;
de pe a doua line, separate prin spaţiu, cele n elemente ale vectorului a.
Cerinţă:
Dacă elementele vectorului a sunt ordonate crescător afişaţi mesajul „ok”, în caz
contrar afişaţi mesajul „Vectorul nu este ordonat”.

3. Determinarea celui mai mare divizor comun al elementelor unui şir


Din fişierul de intrare cmmdc.in, se citesc:
de pe prima linie un număr natural n, reprezentând numărul de componente ale
unui şir a;
de pe a doua line, separate prin spaţiu, cele n componente ale şirului a, numere
naturale.
Cerinţă:
Să se afişeze cel mai mare divizor comul ale componentelor şirului citit.
4. Verificarea primalităţii unui număr

Se consideră un număr natural n. Afişaţi un mesaj dacă acesta este prim.

5. Suma divizorilor proprii ai unui număr natural


Se dă un număr natural n. Afişaţi suma divizorilor proprii ai acestuia utilizând metoda
Divide et Impera.

6. Numere pozitive

Se dă un şir de numere întregi. Verificaţi dacă toate elementele sunt pozitive.

12

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