Structurile Fundamentale ale Algoritmului
1. Obiectivele lecției:
- Să înțeleagă ce reprezintă structurile fundamentale ale unui algoritm.
- Să identifice și să utilizeze secvența, decizia și iterația în scrierea algoritmilor.
- Să implementeze algoritmi simpli utilizând fiecare structură în limbajul C++.
2. Conținutul lecției:
Ce sunt structurile fundamentale ale algoritmului?
- Definiție: Structurile fundamentale reprezintă construcțiile de bază care stau la baza oricărui algoritm și permit implementarea logicii necesare pentru a rezolva o problemă.
- Cele trei structuri fundamentale:
- Secvența – executarea instrucțiunilor una după alta.
- Decizia (Selecția) – alegerea între mai multe opțiuni în funcție de o condiție.
- Repetiția (Iterația) – executarea repetată a unei serii de instrucțiuni.
3. Structurile fundamentale explicate:
1. Secvența
- Descriere: O serie de pași care se execută unul după altul, în ordinea în care sunt scriși.
- Exemplu în viața reală: Prepararea unui sandwich.
- Exemplu în C++:
#include <iostream>
using namespace std;
int main() {
int a = 5, b = 10, suma;
// Secvența
suma = a + b;
cout << „Suma este: ” << suma << endl;
return 0;
}
2. Decizia (Selecția)
- Descriere: Permite programului să aleagă între două sau mai multe căi, pe baza unei condiții.
- Exemplu în viața reală: Dacă plouă, ia umbrelă; altfel, ieși fără umbrelă.
- Exemplu în C++:
#include <iostream>
using namespace std;
int main() {
int numar;
cout << „Introdu un numar: „;
cin >> numar;
if (numar % 2 == 0) {
cout << „Numarul este par.” << endl;
} else {
cout << „Numarul este impar.” << endl;
}
return 0;
}
3. Repetiția (Iterația)
- Descriere: Permite executarea repetată a unui set de instrucțiuni cât timp o anumită condiție este adevărată.
- Tipuri de repetare:
- While: Execută un bloc de cod cât timp condiția este adevărată.
- Do-While: Execută cel puțin o dată și verifică condiția la sfârșit.
- For: Este folosită pentru iterații cunoscute.
- Exemplu în viața reală: Numărătoare inversă la un semafor.
- Exemplu în C++ (folosind for):
#include <iostream>
using namespace std;
int main() {
for (int i = 1; i <= 5; i++) {
cout << „Numarul este: ” << i << endl;
}
return 0;
}
4. Exemple practice pentru elevi:
Exemplu 1: Combinația structurilor fundamentale
Problema: Afișează primele 10 numere naturale și spune dacă fiecare este par sau impar.
Cod în C++:
#include <iostream>
using namespace std;
int main() {
for (int i = 1; i <= 10; i++) {
cout << „Numarul ” << i;
if (i % 2 == 0) {
cout << ” este par.” << endl;
} else {
cout << ” este impar.” << endl;
}
}
return 0;
}
Exemplu 2: Utilizarea while
Problema: Afișează suma numerelor de la 1 la 100.
Cod în C++:
#include <iostream>
using namespace std;
int main() {
int suma = 0, i = 1;
while (i <= 100) {
suma += i;
i++;
}
cout << „Suma numerelor de la 1 la 100 este: ” << suma << endl;
return 0;
}
5. Activități pentru elevi:
- Scrieți un algoritm care calculează factorialul unui număr dat, folosind o buclă for.
- Scrieți un algoritm care verifică dacă un număr introdus de utilizator este pozitiv, negativ sau zero, folosind structura decizională if-else.
- Realizați un algoritm care afișează toate numerele pare de la 1 la 50, folosind o buclă while.
6. Scheme logice pentru fiecare structură:
- Secvența: Un flux continuu de pași (Start -> Pas 1 -> Pas 2 -> Stop).
- Decizia: Un romb cu două ieșiri (DA și NU) pentru fiecare condiție.
- Repetiția: Un romb (Condiție) care determină reîntoarcerea la instrucțiuni sau terminarea ciclului.
7. Concluzie:
- Structurile fundamentale sunt esențiale pentru a scrie algoritmi eficienți.
- Toate problemele pot fi rezolvate utilizând aceste trei structuri.
- Înțelegerea și utilizarea acestor concepte vor ajuta elevii să devină programatori mai buni.
Structura Liniară
1. Obiectivele lecției:
- Să înțeleagă ce reprezintă structura liniară a unui algoritm.
- Să recunoască și să aplice structura liniară în probleme simple.
- Să implementeze algoritmi liniari în C++.
2. Conținutul lecției:
Ce este structura liniară?
- Definiție: Structura liniară reprezintă o succesiune de pași care se execută unul după altul, în ordinea în care sunt scriși, fără ramificații sau bucle.
- Caracteristică principală: Fiecare instrucțiune este executată o singură dată, în mod secvențial.
- Exemplu în viața reală: Pregătirea unui sandwich: iei pâinea, pui untul, adaugi brânza, apoi pui pâinea deasupra.
Importanța structurii liniare:
- Este baza algoritmilor complecși.
- Asigură o execuție predictibilă și clară a pașilor algoritmului.
- Se folosește în rezolvarea problemelor care nu necesită decizii sau repetări.
3. Exemple practice:
Exemplu 1: Calcularea perimetrului unui dreptunghi
Problema: Calculează perimetrul unui dreptunghi având lungimea și lățimea date.
Algoritm:
- Citește lungimea și lățimea dreptunghiului.
- Calculează perimetrul: P = 2 * (lungime + latime).
- Afișează rezultatul.
Cod în C++:
#include <iostream>
using namespace std;
int main() {
double lungime, latime, perimetru;
cout << „Introdu lungimea dreptunghiului: „;
cin >> lungime;
cout << „Introdu latimea dreptunghiului: „;
cin >> latime;
// Calculul perimetrului
perimetru = 2 * (lungime + latime);
// Afișarea rezultatului
cout << „Perimetrul dreptunghiului este: ” << perimetru << endl;
return 0;
}
Exemplu 2: Conversia temperaturii din Celsius în Fahrenheit
Problema: Transformă o temperatură dată în grade Celsius în Fahrenheit folosind formula:
F = (C * 9/5) + 32.
Algoritm:
- Citește temperatura în Celsius.
- Aplică formula de conversie.
- Afișează temperatura în Fahrenheit.
Cod în C++:
#include <iostream>
using namespace std;
int main() {
double celsius, fahrenheit;
cout << „Introdu temperatura în grade Celsius: „;
cin >> celsius;
// Conversia în Fahrenheit
fahrenheit = (celsius * 9 / 5) + 32;
// Afișarea rezultatului
cout << „Temperatura în Fahrenheit este: ” << fahrenheit << endl;
return 0;
}
Exemplu 3: Calcularea ariei unui cerc
Problema: Calculează aria unui cerc având raza dată.
Algoritm:
- Citește raza cercului.
- Calculează aria folosind formula: A = π * r^2.
- Afișează aria cercului.
Cod în C++:
#include <iostream>
using namespace std;
int main() {
const double PI = 3.14159;
double raza, aria;
cout << „Introdu raza cercului: „;
cin >> raza;
// Calculul ariei
aria = PI * raza * raza;
// Afișarea rezultatului
cout << „Aria cercului este: ” << aria << endl;
return 0;
}
4. Activități practice pentru elevi:
- Scrieți un program care să calculeze suma și produsul a două numere introduse de utilizator.
- Realizați un program care să convertească kilometri în mile (1 km = 0.621371 mile).
- Scrieți un program care să calculeze media aritmetică a trei numere introduse de utilizator.
5. Scheme logice:
- Schema pentru calculul perimetrului unui dreptunghi:
- Start -> Citește lungimea -> Citește lățimea -> Calculează perimetrul -> Afișează perimetrul -> Stop.
- Schema pentru conversia temperaturii:
- Start -> Citește temperatura în Celsius -> Aplică formula -> Afișează rezultatul -> Stop.
6. Concluzie:
- Structura liniară este cea mai simplă formă de algoritm și se aplică atunci când nu sunt necesare condiții sau repetări.
- Este importantă pentru înțelegerea și implementarea algoritmilor mai complecși.
- Prin practică, elevii vor învăța să creeze programe clare și eficiente.
Structura Alternativă
1. Obiectivele lecției:
- Să înțeleagă conceptul de structură alternativă într-un algoritm.
- Să recunoască diferitele tipuri de structuri alternative.
- Să implementeze structuri alternative în C++ utilizând if, if-else și switch.
- Să rezolve probleme care implică rea deciziilor.
2. Conținutul lecției:
Ce este structura alternativă?
- Definiție: Structura alternativă permite executarea diferitelor ramuri ale unui algoritm, în funcție de o condiție logică. Este folosită pentru a decizii în funcție de datele de intrare sau de o situație.
- Exemple din viața reală:
- Dacă plouă, ia umbrelă; altfel, mergi fără umbrelă.
- Dacă ai 18 ani sau mai mult, poți conduce; altfel, nu poți.
Tipuri de structuri alternative:
- Structura simplă (if):
- Execută o singură ramură dacă o condiție este adevărată.
- Exemplu:
if (condiție) {
// Cod de executat dacă condiția este adevărată
}
- Structura dublă (if-else):
- Execută o ramură dacă condiția este adevărată și alta dacă este falsă.
- Exemplu:
if (condiție) {
// Cod de executat dacă condiția este adevărată
} else {
// Cod de executat dacă condiția este falsă
}
- Structura multiplă (switch):
- Folosită pentru a alege între mai multe opțiuni.
- Exemplu:
switch (variabilă) {
case valoare1:
// Cod pentru valoare1
break;
case valoare2:
// Cod pentru valoare2
break;
default:
// Cod pentru alte cazuri
}
3. Exemple practice:
Exemplu 1: Verificarea unui număr par sau impar
Problema: Determină dacă un număr introdus de utilizator este par sau impar.
Cod în C++:
#include <iostream>
using namespace std;
int main() {
int numar;
cout << „Introdu un numar: „;
cin >> numar;
if (numar % 2 == 0) {
cout << „Numarul este par.” << endl;
} else {
cout << „Numarul este impar.” << endl;
}
return 0;
}
Exemplu 2: Determinarea maximului dintre două numere
Problema: Compară două numere și afișează pe cel mai mare.
Cod în C++:
#include <iostream>
using namespace std;
int main() {
int numar1, numar2;
cout << „Introdu primul numar: „;
cin >> numar1;
cout << „Introdu al doilea numar: „;
cin >> numar2;
if (numar1 > numar2) {
cout << „Numarul mai mare este: ” << numar1 << endl;
} else if (numar1 < numar2) {
cout << „Numarul mai mare este: ” << numar2 << endl;
} else {
cout << „Numerele sunt egale.” << endl;
}
return 0;
}
Exemplu 3: Afișarea unei zile a săptămânii
Problema: Citește un număr între 1 și 7 și afișează ziua corespunzătoare.
Cod în C++:
#include <iostream>
using namespace std;
int main() {
int zi;
cout << „Introdu un numar de la 1 la 7: „;
cin >> zi;
switch (zi) {
case 1:
cout << „Luni” << endl;
break;
case 2:
cout << „Marți” << endl;
break;
case 3:
cout << „Miercuri” << endl;
break;
case 4:
cout << „Joi” << endl;
break;
case 5:
cout << „Vineri” << endl;
break;
case 6:
cout << „Sâmbătă” << endl;
break;
case 7:
cout << „Duminică” << endl;
break;
default:
cout << „Număr invalid.” << endl;
}
return 0;
}
4. Activități practice pentru elevi:
- Scrieți un program care determină dacă un elev a trecut sau nu un examen. Nota minimă de trecere este 5.
- Realizați un program care citește un număr între 1 și 12 și afișează luna corespunzătoare.
- Scrieți un program care compară trei numere și afișează cel mai mare dintre ele.
5. Scheme logice:
- Structura simplă (if):
- Start -> Condiție? -> (DA -> Execută cod) -> Stop.
- Structura dublă (if-else):
- Start -> Condiție? -> (DA -> Execută cod 1) / (NU -> Execută cod 2) -> Stop.
- Structura multiplă (switch):
- Start -> Valoare corespunzătoare? -> Execută ramura corespunzătoare -> Stop.
6. Concluzie:
- Structura alternativă este esențială pentru a permite programelor să ia decizii.
- Tipurile de structură alternativă (if, if-else, switch) sunt utile în funcție de complexitatea condițiilor.
- Prin aplicarea acestor structuri, elevii pot crea programe care se adaptează la diferite situații.
Structura Repetitivă
1. Obiectivele lecției:
- Să înțeleagă conceptul de structură repetitivă.
- Să identifice și să utilizeze tipurile de bucle: while, do-while și for.
- Să implementeze algoritmi care folosesc structuri repetitive în C++.
- Să rezolve probleme care implică repetarea unor instrucțiuni.
2. Conținutul lecției:
Ce este structura repetitivă?
- Definiție: Structura repetitivă permite executarea unui bloc de cod de mai multe ori, cât timp o anumită condiție este adevărată.
- Scop: Automatează repetarea unor operații, economisind timp și resurse.
Tipuri de structuri repetitive:
- Buclele cu testare înainte (while):
- Condiția este verificată înainte de a executa blocul de cod.
- Exemplu:
while (condiție) {
// Cod executat cât timp condiția este adevărată
}
- Buclele cu testare după (do-while):
- Codul este executat cel puțin o dată, apoi condiția este verificată.
- Exemplu:
do {
// Cod executat cel puțin o dată
} while (condiție);
- Buclele determinate (for):
- Se folosește când numărul de repetări este cunoscut.
- Exemplu:
for (inițializare; condiție; actualizare) {
// Cod executat
}
3. Exemple practice:
Exemplu 1: Afișarea primelor 10 numere naturale (buclele for, while, do-while)
Cu for:
#include <iostream>
using namespace std;
int main() {
for (int i = 1; i <= 10; i++) {
cout << i << ” „;
}
cout << endl;
return 0;
}
Cu while:
#include <iostream>
using namespace std;
int main() {
int i = 1;
while (i <= 10) {
cout << i << ” „;
i++;
}
cout << endl;
return 0;
}
Cu do-while:
#include <iostream>
using namespace std;
int main() {
int i = 1;
do {
cout << i << ” „;
i++;
} while (i <= 10);
cout << endl;
return 0;
}
Exemplu 2: Calcularea sumei primelor n numere naturale
Problema: Citește un număr n de la utilizator și calculează suma numerelor de la 1 la n.
Cod în C++:
#include <iostream>
using namespace std;
int main() {
int n, suma = 0;
cout << „Introdu un numar: „;
cin >> n;
for (int i = 1; i <= n; i++) {
suma += i;
}
cout << „Suma primelor ” << n << ” numere naturale este: ” << suma << endl;
return 0;
}
Exemplu 3: Determinarea produsului numerelor impare de la 1 la n
Problema: Citește un număr n și calculează produsul numerelor impare de la 1 la n.
Cod în C++:
#include <iostream>
using namespace std;
int main() {
int n, produs = 1;
cout << „Introdu un numar: „;
cin >> n;
for (int i = 1; i <= n; i += 2) {
produs *= i;
}
cout << „Produsul numerelor impare de la 1 la ” << n << ” este: ” << produs << endl;
return 0;
}
Exemplu 4: Generarea unei serii Fibonacci
Problema: Afișează primele n numere Fibonacci.
Cod în C++:
#include <iostream>
using namespace std;
int main() {
int n, t1 = 0, t2 = 1, urmator;
cout << „Introdu numarul de termeni Fibonacci: „;
cin >> n;
cout << „Seria Fibonacci: ” << t1 << ” ” << t2 << ” „;
for (int i = 3; i <= n; i++) {
urmator = t1 + t2;
cout << urmator << ” „;
t1 = t2;
t2 = urmator;
}
cout << endl;
return 0;
}
4. Activități practice pentru elevi:
- Scrieți un program care calculează factorialul unui număr.
- Realizați un program care citește un număr și verifică dacă este prim.
- Scrieți un program care afișează toate numerele divizibile cu 3 de la 1 la 100.
5. Scheme logice:
- Buclele while:
- Start -> Condiție? -> (DA -> Execută cod -> Reia) / (NU -> Stop).
- Buclele do-while:
- Start -> Execută cod -> Condiție? -> (DA -> Reia) / (NU -> Stop).
- Buclele for:
- Start -> Inițializare -> Condiție? -> (DA -> Execută cod -> Actualizare -> Reia) / (NU -> Stop).
6. Concluzie:
- Structurile repetitive permit automatizarea și eficientizarea proceselor care necesită repetarea unor operații.
- Alegerea tipului de buclă depinde de situație:
- while pentru bucle cu condiție pre-verificată.
- do-while pentru bucle cu cel puțin o iterație garantată.
- for pentru bucle determinate.