Algoritmi Elementari – Determinarea Minimului/Maximului
1. Obiectivele lecției:
- Să înțeleagă principiul de determinare a valorii minime și maxime dintr-un set de date.
- Să construiască algoritmi pentru determinarea minimului/maximului.
- Să implementeze acești algoritmi în limbajul C++.
- Să rezolve probleme practice utilizând acești algoritmi.
2. Conținutul lecției:
Ce reprezintă determinarea minimului și maximului?
- Definiție: Determinarea minimului sau maximului implică găsirea celei mai mici (minim) sau celei mai mari (maxim) valori dintr-un set de date.
- Aplicații practice: Calcularea celei mai mari note, determinarea temperaturii maxime/minime dintr-o săptămână, găsirea celui mai mare salariu într-o listă etc.
3. Algoritmul general:
- Inițializare:
- Alege prima valoare din set ca fiind minimul/maximul curent.
- Parcurgerea setului:
- Compară fiecare element cu minimul/maximul curent.
- Actualizează minimul/maximul dacă este necesar.
- Afișare rezultat:
- După parcurgerea întregului set, minimul/maximul va fi determinat.
Pseudocod pentru minim:
Intrare: Lista de n numere
Inițializează minim = primul element al listei
Pentru fiecare element din listă:
Dacă elementul curent < minim:
minim = elementul curent
Ieșire: Afișează minim
Pseudocod pentru maxim:
Intrare: Lista de n numere
Inițializează maxim = primul element al listei
Pentru fiecare element din listă:
Dacă elementul curent > maxim:
maxim = elementul curent
Ieșire: Afișează maxim
4. Exemple practice:
Exemplu 1: Determinarea maximului dintr-o listă de 5 numere
Cod în C++:
#include <iostream>
using namespace std;
int main() {
int numere[5], maxim;
cout << „Introdu 5 numere: „;
for (int i = 0; i < 5; i++) {
cin >> numere[i];
}
// Inițializare maxim
maxim = numere[0];
// Parcurgerea listei
for (int i = 1; i < 5; i++) {
if (numere[i] > maxim) {
maxim = numere[i];
}
}
cout << „Numarul maxim este: ” << maxim << endl;
return 0;
}
Exemplu 2: Determinarea minimului dintr-o listă introdusă de utilizator
Cod în C++:
#include <iostream>
using namespace std;
int main() {
int n;
cout << „Cate numere doresti sa introduci? „;
cin >> n;
int numere[n];
cout << „Introdu ” << n << ” numere: „;
for (int i = 0; i < n; i++) {
cin >> numere[i];
}
// Inițializare minim
int minim = numere[0];
// Parcurgerea listei
for (int i = 1; i < n; i++) {
if (numere[i] < minim) {
minim = numere[i];
}
}
cout << „Numarul minim este: ” << minim << endl;
return 0;
}
Exemplu 3: Determinarea minimului și maximului dintr-un set de date
Cod în C++:
#include <iostream>
using namespace std;
int main() {
int n;
cout << „Cate numere doresti sa introduci? „;
cin >> n;
int numere[n];
cout << „Introdu ” << n << ” numere: „;
for (int i = 0; i < n; i++) {
cin >> numere[i];
}
// Inițializare minim și maxim
int minim = numere[0];
int maxim = numere[0];
// Parcurgerea listei
for (int i = 1; i < n; i++) {
if (numere[i] < minim) {
minim = numere[i];
}
if (numere[i] > maxim) {
maxim = numere[i];
}
}
cout << „Numarul minim este: ” << minim << endl;
cout << „Numarul maxim este: ” << maxim << endl;
return 0;
}
5. Activități practice pentru elevi:
- Scrieți un program care determină maximul și minimul temperaturilor înregistrate într-o săptămână.
- Realizați un program care citește notele a 10 elevi și afișează cea mai mare și cea mai mică notă.
- Scrieți un program care determină maximul și minimul dintr-o serie de numere introduse până când utilizatorul introduce 0.
6. Scheme logice:
- Schema pentru determinarea minimului:
- Start -> Inițializează minim -> Citește valori -> Compară cu minim -> Actualizează minim (dacă este cazul) -> Repetă -> Stop.
- Schema pentru determinarea maximului:
- Start -> Inițializează maxim -> Citește valori -> Compară cu maxim -> Actualizează maxim (dacă este cazul) -> Repetă -> Stop.
7. Concluzie:
- Determinarea minimului și maximului este un algoritm elementar, dar foarte util în multe aplicații practice.
- Este important să înțelegem procesul de parcurgere a datelor și comparare a valorilor.
- Prin implementare și practică, elevii vor învăța să scrie algoritmi mai complecși pe baza acestora.
Algoritmi Elementari – Algoritmi pentru Interschimbare
1. Obiectivele lecției:
- Să înțeleagă ce reprezintă interschimbarea a două valori.
- Să învețe diferite metode de interschimbare (cu și fără variabilă auxiliară).
- Să implementeze algoritmi pentru interschimbare în C++.
- Să aplice algoritmi de interschimbare în contexte practice, cum ar fi sortarea.
2. Conținutul lecției:
Ce reprezintă interschimbarea?
- Definiție: Interschimbarea este procesul prin care valorile a două variabile sunt schimbate între ele.
- Aplicații practice: Interschimbarea este utilizată în algoritmi de sortare, aranjamente și alte aplicații care necesită reorganizarea datelor.
3. Metode de interschimbare:
Metoda 1: Cu variabilă auxiliară
- Principiu: Se utilizează o variabilă temporară pentru a stoca una dintre valorile care urmează să fie schimbate.
- Pseudocod:
temp = a
a = b
b = temp
- Cod în C++:
#include <iostream>
using namespace std;
int main() {
int a, b, temp;
cout << „Introdu valoarea lui a: „;
cin >> a;
cout << „Introdu valoarea lui b: „;
cin >> b;
// Interschimbare
temp = a;
a = b;
b = temp;
cout << „Dupa interschimbare: a = ” << a << „, b = ” << b << endl;
return 0;
}
Metoda 2: Fără variabilă auxiliară (folosind adunare și scădere)
- Principiu: Valorile sunt combinate și separate folosind operații aritmetice.
- Pseudocod:
a = a + b
b = a – b
a = a – b
- Cod în C++:
#include <iostream>
using namespace std;
int main() {
int a, b;
cout << „Introdu valoarea lui a: „;
cin >> a;
cout << „Introdu valoarea lui b: „;
cin >> b;
// Interschimbare
a = a + b;
b = a – b;
a = a – b;
cout << „Dupa interschimbare: a = ” << a << „, b = ” << b << endl;
return 0;
}
Metoda 3: Fără variabilă auxiliară (folosind XOR)
- Principiu: Operația XOR este utilizată pentru a interschimba valorile fără a utiliza memorie suplimentară.
- Pseudocod:
a = a XOR b
b = a XOR b
a = a XOR b
- Cod în C++:
#include <iostream>
using namespace std;
int main() {
int a, b;
cout << „Introdu valoarea lui a: „;
cin >> a;
cout << „Introdu valoarea lui b: „;
cin >> b;
// Interschimbare
a = a ^ b;
b = a ^ b;
a = a ^ b;
cout << „Dupa interschimbare: a = ” << a << „, b = ” << b << endl;
return 0;
}
4. Aplicarea interschimbării:
Exemplu: Sortarea a două valori
- Folosind interschimbarea, se pot ordona două valori în ordine crescătoare.
Cod în C++:
#include <iostream>
using namespace std;
int main() {
int a, b;
cout << „Introdu doua valori: „;
cin >> a >> b;
if (a > b) {
// Interschimbare pentru a ordona valorile
int temp = a;
a = b;
b = temp;
}
cout << „Valorile in ordine crescatoare sunt: ” << a << „, ” << b << endl;
return 0;
}
Exemplu: Interschimbarea elementelor dintr-un tablou
Problema: Interschimbați primul și ultimul element al unui tablou.
Cod în C++:
#include <iostream>
using namespace std;
int main() {
int n;
cout << „Introdu dimensiunea tabloului: „;
cin >> n;
int arr[n];
cout << „Introdu elementele tabloului: „;
for (int i = 0; i < n; i++) {
cin >> arr[i];
}
// Interschimbarea primului și ultimului element
int temp = arr[0];
arr[0] = arr[n – 1];
arr[n – 1] = temp;
cout << „Tabloul dupa interschimbare: „;
for (int i = 0; i < n; i++) {
cout << arr[i] << ” „;
}
cout << endl;
return 0;
}
5. Activități practice pentru elevi:
- Scrieți un program care interschimbă valorile a două variabile fără a folosi o variabilă auxiliară.
- Realizați un program care interschimbă elementele unui tablou în oglindă (primul cu ultimul, al doilea cu penultimul, etc.).
- Scrieți un program care ordonează trei numere în ordine crescătoare folosind interschimbarea.
6. Scheme logice:
- Interschimbare cu variabilă auxiliară:
- Start -> Citește a, b -> temp = a -> a = b -> b = temp -> Stop.
- Interschimbare fără variabilă auxiliară (aritmetică):
- Start -> Citește a, b -> a = a + b -> b = a – b -> a = a – b -> Stop.
7. Concluzie:
- Interschimbarea este un algoritm fundamental cu numeroase aplicații practice.
- Metodele diferite (cu sau fără variabilă auxiliară) permit flexibilitate în implementare.
- Înțelegerea acestui algoritm este esențială pentru conceperea și implementarea altor algoritmi, cum ar fi sortarea.
Algoritmi Elementari – Calcularea C.M.M.D.C. (Cel Mai Mare Divizor Comun)
1. Obiectivele lecției:
- Să înțeleagă conceptul de Cel Mai Mare Divizor Comun (C.M.M.D.C.).
- Să cunoască și să implementeze algoritmi pentru calcularea C.M.M.D.C.
- Să aplice metode diferite de calculare, inclusiv metoda scăderilor repetate și algoritmul lui Euclid.
- Să rezolve probleme practice utilizând C.M.M.D.C.
2. Conținutul lecției:
Ce este C.M.M.D.C.?
- Definiție: Cel mai mare divizor comun (C.M.M.D.C.) al două numere este cel mai mare număr care divide exact ambele numere, fără rest.
- Exemple:
- C.M.M.D.C. pentru 12 și 18 este 6 (deoarece 6 este cel mai mare număr care divide atât 12, cât și 18).
- C.M.M.D.C. pentru 8 și 14 este 2.
3. Metode de calculare a C.M.M.D.C.:
Metoda 1: Scăderile repetate
- Principiu: Dacă scădem numărul mai mic din numărul mai mare și repetăm acest proces până când cele două numere devin egale, valoarea comună este C.M.M.D.C.
- Pseudocod:
Intrare: a, b
Cât timp a ≠ b:
Dacă a > b:
a = a – b
Altfel:
b = b – a
Ieșire: a (sau b)
- Cod în C++:
#include <iostream>
using namespace std;
int main() {
int a, b;
cout << „Introdu doua numere: „;
cin >> a >> b;
while (a != b) {
if (a > b) {
a = a – b;
} else {
b = b – a;
}
}
cout << „C.M.M.D.C. este: ” << a << endl;
return 0;
}
Metoda 2: Algoritmul lui Euclid (împărțiri succesive)
- Principiu: Înlocuiește numărul mai mare cu restul împărțirii dintre cele două numere. Repetă până când restul devine 0. Ultimul divizor nenul este C.M.M.D.C.
- Pseudocod:
Intrare: a, b
Cât timp b ≠ 0:
r = a % b
a = b
b = r
Ieșire: a
- Cod în C++:
#include <iostream>
using namespace std;
int main() {
int a, b;
cout << „Introdu doua numere: „;
cin >> a >> b;
while (b != 0) {
int r = a % b;
a = b;
b = r;
}
cout << „C.M.M.D.C. este: ” << a << endl;
return 0;
}
Metoda 3: Versiunea recursivă a algoritmului lui Euclid
- Principiu: Utilizează recursivitatea pentru a calcula C.M.M.D.C.
- Pseudocod:
Funcție Euclid(a, b):
Dacă b = 0:
returnează a
Altfel:
returnează Euclid(b, a % b)
- Cod în C++:
#include <iostream>
using namespace std;
int cmmmdc(int a, int b) {
if (b == 0) {
return a;
} else {
return cmmmdc(b, a % b);
}
}
int main() {
int a, b;
cout << „Introdu doua numere: „;
cin >> a >> b;
cout << „C.M.M.D.C. este: ” << cmmmdc(a, b) << endl;
return 0;
}
4. Exemple practice:
- C.M.M.D.C. pentru două numere pozitive:
- Intrare: 48 și 18.
- Algoritmul lui Euclid: 6.
- C.M.M.D.C. pentru un număr și 0:
- C.M.M.D.C. pentru orice număr și 0 este numărul însuși.
5. Activități practice pentru elevi:
- Scrieți un program care citește un șir de numere și determină C.M.M.D.C. pentru toate.
- Realizați un program care folosește algoritmul lui Euclid pentru a calcula C.M.M.D.C. între trei numere.
- Implementați versiunea recursivă a algoritmului pentru a calcula C.M.M.D.C. pentru mai multe perechi de numere introduse de utilizator.
6. Scheme logice:
- Algoritmul lui Euclid (împărțiri succesive):
- Start -> Cât timp b ≠ 0 -> r = a % b -> a = b -> b = r -> Stop.
- Metoda scăderilor repetate:
- Start -> Cât timp a ≠ b -> Dacă a > b, atunci a = a – b -> Altfel b = b – a -> Stop.
7. Concluzie:
- Calcularea C.M.M.D.C. este un algoritm fundamental cu aplicații multiple în matematică și informatică.
- Algoritmul lui Euclid este cel mai eficient și este utilizat pe scară largă datorită simplității și rapidității.
- Elevii vor înțelege mai bine conceptul de divizibilitate și aplicarea logicii algoritmice.
Algoritmi Elementari – Extragerea Cifrelor unui Număr
1. Obiectivele lecției:
- Să înțeleagă conceptul de extragere a cifrelor unui număr.
- Să învețe cum să separe și să proceseze cifrele unui număr întreg.
- Să implementeze algoritmi pentru extragerea cifrelor într-un limbaj de programare (C++).
- Să aplice algoritmi în probleme practice, cum ar fi verificarea palindroamelor sau calcularea sumei cifrelor.
2. Conținutul lecției:
Ce reprezintă extragerea cifrelor unui număr?
- Definiție: Extragerea cifrelor unui număr presupune obținerea fiecărei cifre din componența numărului, pentru a le putea procesa individual.
- Exemplu:
- Număr: 12345.
- Cifre: 1, 2, 3, 4, 5.
3. Metoda generală:
Principiul de bază:
- Obține ultima cifră a numărului folosind operația modulo:
cifra = numar % 10.
- Elimină ultima cifră prin împărțirea numărului la 10:
numar = numar / 10.
- Repetă pașii 1 și 2 până când numărul devine 0.
Pseudocod:
Intrare: numar
Cât timp numar ≠ 0:
cifra = numar % 10
numar = numar / 10
Afișează cifra
4. Exemple practice:
Exemplu 1: Afișarea cifrelor unui număr în ordine inversă
Cod în C++:
#include <iostream>
using namespace std;
int main() {
int numar;
cout << „Introdu un numar: „;
cin >> numar;
cout << „Cifrele numarului sunt: „;
while (numar != 0) {
int cifra = numar % 10; // Ultima cifră
cout << cifra << ” „;
numar = numar / 10; // Eliminăm ultima cifră
}
cout << endl;
return 0;
}
Exemplu 2: Calcularea sumei cifrelor unui număr
Cod în C++:
#include <iostream>
using namespace std;
int main() {
int numar, suma = 0;
cout << „Introdu un numar: „;
cin >> numar;
while (numar != 0) {
int cifra = numar % 10; // Ultima cifră
suma += cifra; // Adăugăm cifra la sumă
numar = numar / 10; // Eliminăm ultima cifră
}
cout << „Suma cifrelor este: ” << suma << endl;
return 0;
}
Exemplu 3: Determinarea cifrei maxime a unui număr
Cod în C++:
#include <iostream>
using namespace std;
int main() {
int numar, maxCifra = 0;
cout << „Introdu un numar: „;
cin >> numar;
while (numar != 0) {
int cifra = numar % 10; // Ultima cifră
if (cifra > maxCifra) { // Actualizăm cifra maximă
maxCifra = cifra;
}
numar = numar / 10; // Eliminăm ultima cifră
}
cout << „Cifra maxima este: ” << maxCifra << endl;
return 0;
}
Exemplu 4: Verificarea dacă un număr este palindrom
Cod în C++:
#include <iostream>
using namespace std;
int main() {
int numar, numarOriginal, invers = 0;
cout << „Introdu un numar: „;
cin >> numar;
numarOriginal = numar; // Salvăm numărul original
while (numar != 0) {
int cifra = numar % 10; // Ultima cifră
invers = invers * 10 + cifra; // Construim inversul numărului
numar = numar / 10; // Eliminăm ultima cifră
}
if (numarOriginal == invers) {
cout << „Numarul este palindrom.” << endl;
} else {
cout << „Numarul nu este palindrom.” << endl;
}
return 0;
}
Exemplu 5: Reordonarea cifrelor în ordine crescătoare
Cod în C++:
#include <iostream>
using namespace std;
int main() {
int numar, cifre[10] = {0};
cout << „Introdu un numar: „;
cin >> numar;
// Contorizăm frecvența fiecărei cifre (0-9)
while (numar != 0) {
int cifra = numar % 10;
cifre[cifra]++;
numar = numar / 10;
}
cout << „Cifrele in ordine crescatoare sunt: „;
// Parcurgem cifrele de la 0 la 9 și afișăm fiecare cifră de câte ori apare
for (int i = 0; i < 10; i++) {
while (cifre[i] > 0) {
cout << i;
cifre[i]–;
}
}
cout << endl;
return 0;
}
5. Activități practice pentru elevi:
- Scrieți un program care determină produsul cifrelor unui număr.
- Realizați un program care verifică dacă suma cifrelor unui număr este pară sau impară.
- Scrieți un program care afișează cifrele unui număr în ordine descrescătoare.
6. Scheme logice:
Start
Citește număr
Inițializează array cifre[10] = {0} (toate elementele cu valoarea 0)
Cât timp număr ≠ 0:
Extrage cifra: cifra = număr % 10
Incrementare contor: cifre[cifra] = cifre[cifra] + 1
Împarte numărul: număr = număr / 10
Pentru i de la 0 la 9:
Cât timp cifre[i] > 0:
Afișează i
Decrementează contorul: cifre[i] = cifre[i] – 1
Stop
7. Concluzie:
- Extragerea cifrelor unui număr este o tehnică de bază utilizată în multe aplicații, de la verificarea proprietăților numerelor până la generarea și manipularea datelor.
- Acești algoritmi sunt esențiali pentru dezvoltarea gândirii algoritmice și pentru înțelegerea procesării datelor.
Algoritmi Elementari – Testarea unui Număr Prim
1. Obiectivele lecției:
- Să înțeleagă conceptul de număr prim.
- Să învețe algoritmi pentru testarea dacă un număr este prim.
- Să implementeze acești algoritmi în limbajul C++.
- Să aplice algoritmi în probleme practice, cum ar fi generarea numerelor prime.
2. Conținutul lecției:
Ce este un număr prim?
- Definiție: Un număr prim este un număr natural mai mare decât 1, care are exact doi divizori: 1 și el însuși.
- Exemple: 2, 3, 5, 7, 11 sunt numere prime.
- Contraexemple: 4, 6, 8, 9 nu sunt numere prime (au mai mult de doi divizori).
3. Algoritmul general:
Principiul de bază:
- Dacă numărul este mai mic decât 2, acesta nu este prim.
- Verifică dacă numărul este divizibil cu vreun alt număr, de la 2 până la √n.
- Dacă este divizibil, numărul nu este prim. Altfel, este prim.
Pseudocod pentru testarea unui număr prim:
Intrare: n
Dacă n < 2, atunci
Nu este prim
Pentru i de la 2 la √n:
Dacă n % i == 0, atunci
Nu este prim
Este prim
4. Exemple practice:
Exemplu 1: Testarea unui singur număr
Cod în C++:
#include <iostream>
#include <cmath>
using namespace std;
int main() {
int n;
cout << „Introdu un numar: „;
cin >> n;
if (n < 2) {
cout << n << ” nu este prim.” << endl;
return 0;
}
bool estePrim = true;
for (int i = 2; i <= sqrt(n); i++) {
if (n % i == 0) {
estePrim = false;
break;
}
}
if (estePrim) {
cout << n << ” este prim.” << endl;
} else {
cout << n << ” nu este prim.” << endl;
}
return 0;
}
Exemplu 2: Afișarea numerelor prime până la un număr dat
Cod în C++:
#include <iostream>
#include <cmath>
using namespace std;
bool estePrim(int n) {
if (n < 2) {
return false;
}
for (int i = 2; i <= sqrt(n); i++) {
if (n % i == 0) {
return false;
}
}
return true;
}
int main() {
int limita;
cout << „Introdu limita superioara: „;
cin >> limita;
cout << „Numerele prime pana la ” << limita << ” sunt: „;
for (int i = 2; i <= limita; i++) {
if (estePrim(i)) {
cout << i << ” „;
}
}
cout << endl;
return 0;
}
Exemplu 3: Generarea primelor n numere prime
Cod în C++:
#include <iostream>
#include <cmath>
using namespace std;
bool estePrim(int n) {
if (n < 2) {
return false;
}
for (int i = 2; i <= sqrt(n); i++) {
if (n % i == 0) {
return false;
}
}
return true;
}
int main() {
int n, count = 0, numar = 2;
cout << „Cate numere prime doresti? „;
cin >> n;
cout << „Primele ” << n << ” numere prime sunt: „;
while (count < n) {
if (estePrim(numar)) {
cout << numar << ” „;
count++;
}
numar++;
}
cout << endl;
return 0;
}
5. Activități practice pentru elevi:
- Scrieți un program care determină dacă un număr este prim folosind doar bucla while.
- Realizați un program care determină suma tuturor numerelor prime mai mici decât un număr dat.
- Scrieți un program care afișează toate numerele prime dintre două valori introduse de utilizator.
6. Scheme logice:
- Testarea unui număr prim:
- Start -> Verifică n < 2 -> (NU: trece la buclă) -> Verifică divizorii -> (DA: n % i == 0 -> Nu este prim) / (NU: Este prim) -> Stop.
- Afișarea numerelor prime până la o limită:
- Start -> Pentru fiecare număr între 2 și limită -> Aplică testul de primalitate -> Afișează dacă este prim -> Stop.
7. Concluzie:
- Testarea primalității este un algoritm fundamental în matematică și informatică.
- Algoritmul de testare prin verificarea divizibilității până la √n este eficient pentru numere mari.
- Prin implementarea acestor algoritmi, elevii vor înțelege mai bine conceptul de divizibilitate și optimizarea codului.
Algoritmi Elementari – Generarea Șirurilor Recurente
1. Obiectivele lecției:
- Să înțeleagă conceptul de șir recurent.
- Să cunoască metodele de generare a șirurilor recurente.
- Să implementeze algoritmi pentru generarea șirurilor recurente în C++.
- Să aplice conceptele pentru a genera șiruri matematice precum Fibonacci sau alte șiruri personalizate.
2. Conținutul lecției:
Ce este un șir recurent?
- Definiție: Un șir recurent este o succesiune de termeni unde fiecare termen se bazează pe unul sau mai mulți termeni anteriori conform unei formule de recurență.
- Exemple comune:
- Șirul Fibonacci: Fn=Fn−1+Fn−2,F0=0,F1=1F_n = F_{n-1} + F_{n-2}, F_0 = 0, F_1 = 1Fn=Fn−1+Fn−2,F0=0,F1=1
- Șirul aritmetic: an=an−1+da_n = a_{n-1} + dan=an−1+d
- Șirul geometric: gn=gn−1⋅rg_n = g_{n-1} \cdot rgn=gn−1⋅r
3. Exemple de șiruri recurente și algoritmi:
Exemplu 1: Generarea șirului Fibonacci
- Formula de recurență: Fn=Fn−1+Fn−2F_n = F_{n-1} + F_{n-2}Fn=Fn−1+Fn−2
- Cod în C++ (iterativ):
#include <iostream>
using namespace std;
int main() {
int n;
cout << „Introdu numarul de termeni din sirul Fibonacci: „;
cin >> n;
int f0 = 0, f1 = 1, fn;
cout << „Sirul Fibonacci: „;
cout << f0 << ” ” << f1 << ” „;
for (int i = 2; i < n; i++) {
fn = f0 + f1;
cout << fn << ” „;
f0 = f1;
f1 = fn;
}
cout << endl;
return 0;
}
- Cod în C++ (recursiv):
#include <iostream>
using namespace std;
int fibonacci(int n) {
if (n == 0) return 0;
if (n == 1) return 1;
return fibonacci(n – 1) + fibonacci(n – 2);
}
int main() {
int n;
cout << „Introdu numarul de termeni din sirul Fibonacci: „;
cin >> n;
cout << „Sirul Fibonacci: „;
for (int i = 0; i < n; i++) {
cout << fibonacci(i) << ” „;
}
cout << endl;
return 0;
}
Exemplu 2: Generarea unui șir aritmetic
- Formula de recurență: an=an−1+da_n = a_{n-1} + dan=an−1+d
- Cod în C++:
#include <iostream>
using namespace std;
int main() {
int a0, d, n;
cout << „Introdu primul termen (a0): „;
cin >> a0;
cout << „Introdu diferenta (d): „;
cin >> d;
cout << „Introdu numarul de termeni: „;
cin >> n;
cout << „Sirul aritmetic: „;
for (int i = 0; i < n; i++) {
cout << a0 + i * d << ” „;
}
cout << endl;
return 0;
}
Exemplu 3: Generarea unui șir geometric
- Formula de recurență:
gn=gn−1*r
- Cod în C++:
#include <iostream>
#include <math.h>
using namespace std;
int main() {
int g0, r, n;
cout << „Introdu primul termen (g0): „;
cin >> g0;
cout << „Introdu rata (r): „;
cin >> r;
cout << „Introdu numarul de termeni: „;
cin >> n;
cout << „Sirul geometric: „;
for (int i = 0; i < n; i++) {
cout << g0 * pow(r, i) << ” „;
}
cout << endl;
return 0;
}
Exemplu 4: Șir definit personalizat
- Formula:
Tn=Tn−1+2⋅Tn−2
- Cod în C++:
#include <iostream>
using namespace std;
int main() {
int t0 = 1, t1 = 2, tn, n;
cout << „Introdu numarul de termeni: „;
cin >> n;
cout << „Sirul personalizat: „;
cout << t0 << ” ” << t1 << ” „;
for (int i = 2; i < n; i++) {
tn = t1 + 2 * t0;
cout << tn << ” „;
t0 = t1;
t1 = tn;
}
cout << endl;
return 0;
}
4. Activități practice pentru elevi:
- Scrieți un program care generează primii n termeni ai unui șir definit astfel:
- Realizați un program care calculează suma primilor n termeni ai unui șir geometric.
- Scrieți un program care verifică dacă un termen specificat aparține unui șir Fibonacci.
5. Scheme logice:
- Șir Fibonacci (iterativ):
Start:
Începe execuția algoritmului.
Inițializează F0,F1:
Setează valorile de început ale șirului: F0=0și F1=1.
Pentru i=2 la n:
Iterează de la i=2 până la i=n, unde n este indicele termenului final al șirului Fibonacci.
Calculează Fi=Fi−1+Fi−2:
Fiecare termen Fi este suma termenilor anteriori Fi−1 și Fi−2.
Actualizează valorile Fi−1 și Fi−2:
După calcularea lui Fi, mută valorile astfel:
Fi−2←Fi−1,
Fi−1←Fi.
Acest pas pregătește termenii pentru calculul următorului Fi.
Stop:
- Șir aritmetic:
Start:
Începem execuția algoritmului.
Inițializează a0 și d:
Alegem valoarea primului termen al progresiei (a0) și rația (d).
Pentru i=0 la n:
Iterăm prin termenii progresiei, de la indicele i=0(primul termen) până la indicele i=n (al n-lea termen).
Nota: n este numărul total de termeni pe care vrem să-i calculăm (sau indicele ultimului termen).
Calculează ai=a0+i⋅d:
Fiecare termen al progresiei se calculează prin adăugarea la a0 a produsului dintre i și rația d.
Stop:
6. Concluzie:
- Șirurile recurente sunt esențiale pentru înțelegerea matematicii și programării algoritmice.
- Implementarea acestor șiruri ajută la înțelegerea conceptelor de recurență și dependență între termeni.
- Prin practică, elevii pot învăța să modeleze probleme complexe utilizând șiruri recurente.