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:

  1. Inițializare:
    • Alege prima valoare din set ca fiind minimul/maximul curent.
  2. Parcurgerea setului:
    • Compară fiecare element cu minimul/maximul curent.
    • Actualizează minimul/maximul dacă este necesar.
  3. 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:

  1. Scrieți un program care determină maximul și minimul temperaturilor înregistrate într-o săptămână.
  2. Realizați un program care citește notele a 10 elevi și afișează cea mai mare și cea mai mică notă.
  3. 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:

  1. Schema pentru determinarea minimului:
    • Start -> Inițializează minim -> Citește valori -> Compară cu minim -> Actualizează minim (dacă este cazul) -> Repetă -> Stop.
  2. 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:

  1. Scrieți un program care interschimbă valorile a două variabile fără a folosi o variabilă auxiliară.
  2. Realizați un program care interschimbă elementele unui tablou în oglindă (primul cu ultimul, al doilea cu penultimul, etc.).
  3. Scrieți un program care ordonează trei numere în ordine crescătoare folosind interschimbarea.

6. Scheme logice:

  1. Interschimbare cu variabilă auxiliară:
    • Start -> Citește a, b -> temp = a -> a = b -> b = temp -> Stop.
  2. 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:

  1. C.M.M.D.C. pentru două numere pozitive:
    • Intrare: 48 și 18.
    • Algoritmul lui Euclid: 6.
  2. 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:

  1. Scrieți un program care citește un șir de numere și determină C.M.M.D.C. pentru toate.
  2. Realizați un program care folosește algoritmul lui Euclid pentru a calcula C.M.M.D.C. între trei numere.
  3. 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:

  1. Algoritmul lui Euclid (împărțiri succesive):
    • Start -> Cât timp b ≠ 0 -> r = a % b -> a = b -> b = r -> Stop.
  2. 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ă:

  1. Obține ultima cifră a numărului folosind operația modulo:

cifra = numar % 10.

  1. Elimină ultima cifră prin împărțirea numărului la 10:

numar = numar / 10.

  1. 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:

  1. Scrieți un program care determină produsul cifrelor unui număr.
  2. Realizați un program care verifică dacă suma cifrelor unui număr este pară sau impară.
  3. 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ă:

  1. Dacă numărul este mai mic decât 2, acesta nu este prim.
  2. Verifică dacă numărul este divizibil cu vreun alt număr, de la 2 până la √n.
  3. 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:

  1. Scrieți un program care determină dacă un număr este prim folosind doar bucla while.
  2. Realizați un program care determină suma tuturor numerelor prime mai mici decât un număr dat.
  3. Scrieți un program care afișează toate numerele prime dintre două valori introduse de utilizator.

6. Scheme logice:

  1. 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.
  2. 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​=gn1*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:

  1. Scrieți un program care generează primii n termeni ai unui șir definit astfel:
  1. Realizați un program care calculează suma primilor n termeni ai unui șir geometric.
  2. Scrieți un program care verifică dacă un termen specificat aparține unui șir Fibonacci.

5. Scheme logice:

  1. Ș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:

  1. Ș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.

Similar Posts

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *