Pagina Modulului 5
Ora 27 - Modulul 5

Introducere în interdisciplinaritate

Recapitulare structuri de control, descoperim ce înseamnă interdisciplinar și calculăm media aritmetică

45min teorie + 15min probleme PbInfo + exerciții practice
Competențele 4.1, 5.1
Săptămâna 1
Sigla liceului
TEORIE - 45 minute

Ce vei învăța astăzi?

După această lecție, vei înțelege conceptul de interdisciplinaritate în informatică și vei putea aplica structurile de control învățate pentru a rezolva probleme din matematică, fizică, chimie și economie.

Ce înseamnă interdisciplinar?
Recapitularea structurilor de control
Exemple din matematică, fizică, chimie
Calculul mediei aritmetice (matematică)
De ce e importantă gândirea algoritmică?

Ce este interdisciplinaritatea?

Definiție: Interdisciplinaritatea în informatică înseamnă utilizarea algoritmilor și a programării pentru a rezolva probleme din alte domenii: matematică, fizică, chimie, biologie, economie, medicină, chiar și arte!

Pe scurt: Informatica devine unealta cu care rezolvăm probleme reale din alte materii. De exemplu, un program poate calcula viteza unui mobil în fizică, masa moleculară în chimie sau dobânda în economie.

De ce avem nevoie de interdisciplinaritate?

Pentru că în viața reală, problemele nu sunt împărțite pe materii. De exemplu, când construiești un joc video, ai nevoie de matematică (geometrie, fizică), de logică (informatică) și de creativitate (arte).

Matematică

Rezolvăm ecuații, calculăm arii, volume, distanțe, probabilități

Fizică

Mișcare rectilinie, viteză, timp, accelerație, întâlnirea mobilelor

Chimie

Masa moleculară, reacții chimice, concentrații, pH

Economic

Dobândă, profit, inflație, statistici, medii ponderate

Biologie

Creșterea populațiilor, genetica, simulări ecologice

Geografie

Coordonate, distanțe pe hartă, fusuri orare

Cit celebru: "Informatica nu este doar despre calculatoare, ci despre gândirea algoritmică aplicată în orice domeniu." - Edsger Dijkstra

Dicționar rapid: Matematică ↔ C++

Înainte de a rezolva probleme, să vedem cum se „traduce" fiecare concept:

Concept matematicCum se citeșteÎn C++
Media aritmetică„suma notelor împărțită la număr"(a+b+c) / 3.0
Citirea datelor„ia de la tastatură"cin >> a;
Afișarea„scrie pe ecran"cout << a;
Număr real„cu virgulă / zecimale"float sau double
Decizie„dacă ... atunci ... altfel"if (...) { } else { }
Repetare„pentru i de la 1 la n"for (int i=1; i<=n; i++)
Afișare cu 2 zecimale„arată exact 2 cifre după virgulă"fixed << setprecision(2)

Recapitulare: Structuri de control

Structura liniară (secvențială)

Instrucțiunile se execută una după alta, în ordinea în care sunt scrise. Este ca o rețetă de gătit: pașii sunt urmați exact în ordine.

#include <iostream>
using namespace std;

int main() {
    int a, b, suma;
    
    cout << "Introdu doua numere: ";
    cin >> a >> b;
    
    suma = a + b;
    
    cout << "Suma este: " << suma;
    
    return 0;
}

Exemplu interdisciplinar: Citirea a două numere și calculul mediei aritmetice (matematică).

Structura de decizie (if/else)

Alege una dintre mai multe căi de execuție în funcție de o condiție. Este ca un bifurcație în drum: dacă plouă, iei umbrela, altfel, nu.

#include <iostream>
using namespace std;

int main() {
    int numar;
    
    cout << "Introdu un numar: ";
    cin >> numar;
    
    if (numar % 2 == 0) {
        cout << "Numarul este par";
    } else {
        cout << "Numarul este impar";
    }
    
    return 0;
}

Exemplu interdisciplinar: Verificarea dacă un triunghi există (suma unghiurilor = 180°).

Structura repetitivă (for/while)

Execută un bloc de instrucțiuni de mai multe ori. Este ca și cum ai spăla vasele pentru fiecare farfurie: repeți operația până termini toate farfuriile.

#include <iostream>
using namespace std;

int main() {
    int n;
    cout << "Cate numere? ";
    cin >> n;
    
    for (int i = 1; i <= n; i++) {
        cout << "Numarul " << i << " la patrat este " << i*i << endl;
    }
    
    return 0;
}

Exemplu interdisciplinar: Generarea primilor n termeni din șirul lui Fibonacci (matematică).

Structura Cuvinte cheie Când o folosim Exemplu interdisciplinar
Liniară instrucțiuni în ordine Pași simpli, unul după altul, fără ramificații Calculul mediei aritmetice a 3 numere
Decizie if, else, switch Luăm decizii, verificăm condiții, alegem între variante Determinarea tipului de ecuație (grad I sau II)
Repetitivă for, while, do-while Procesăm multe date, repetăm operații, generăm șiruri Calculul sumei primelor n numere naturale

Exemplul 1: Media aritmetică a notelor

Problemă: Avem 3 note la matematică. Să se calculeze media aritmetică a acestora.

Formula matematică: media = (nota1 + nota2 + nota3) / 3

Matematică: media = (nota₁ + nota₂ + nota₃) / 3
C++: float media = (nota1 + nota2 + nota3) / 3.0f;
„media egal suma celor trei note împărțită la 3, cu zecimale"
// Pseudocod: Media aritmetică a 3 note CITEȘTE nota1, nota2, nota3 media (nota1 + nota2 + nota3) / 3 SCRIE media
Soluție în C++ (structură liniară)
#include <iostream>
using namespace std;

int main() {
    float nota1, nota2, nota3, media;
    
    cout << "Introdu cele 3 note: ";
    cin >> nota1 >> nota2 >> nota3;
    
    media = (nota1 + nota2 + nota3) / 3;
    
    cout << "Media aritmetica este: " << media;
    
    return 0;
}
Exemplu de execuție:

Date de intrare: 8 9 10

Calcul: (8 + 9 + 10) / 3 = 27 / 3 = 9

Afișare: Media aritmetica este: 9

Dacă notele sunt 7, 8, 6: (7+8+6)/3 = 21/3 = 7

Traseu de execuție: note = 8, 9, 10
PasInstrucțiunenota1nota2nota3media
1cin >> nota1 >> nota2 >> nota38910
2media = (8+9+10) / 3.089109.00
3cout << media89109.00

Observație: Am folosit float pentru a păstra partea zecimală. Dacă am fi folosit int, media s-ar fi trunchiat (ex: 8.66 → 8).

Mai multe exemple interdisciplinare

Matematică - Ecuația de gradul I

Rezolvarea ecuației ax + b = 0. Dacă a ≠ 0, x = -b/a. Dacă a = 0 și b = 0, orice x; dacă a = 0 și b ≠ 0, nu există soluție.

if (a != 0) {
    x = -b / a;
    cout << "Solutia: " << x;
} else if (b == 0) {
    cout << "Infinitate de solutii";
} else {
    cout << "Nu exista solutie";
}

Fizică - Viteza medie

Fizică: v = d / t (viteza = distanța / timp)
C++: float v = d / t;
„viteza egal distanța împărțită la timp"

Un mobil parcurge distanța d în timpul t. Viteza medie v = d / t.

float d, t, v;
cout << "Distanta si timpul: ";
cin >> d >> t;
if (t > 0) {
    v = d / t;
    cout << "Viteza medie: " << v;
} else {
    cout << "Timpul trebuie sa fie pozitiv!";
}

Chimie - Masa moleculară

Chimie: M(H₂O) = 2·M(H) + 1·M(O) = 2·1 + 16 = 18
C++: int masa = H * masaH + O * masaO;
„masa moleculară = suma (nr atomi × masa atomică)"

Masa moleculară a apei H2O = 2*1 + 16 = 18 u.m.

// Presupunem formula H2O
int H = 2, O = 1;
int masaH = 1, masaO = 16;
int masaTotala = H * masaH + O * masaO;
cout << "Masa moleculara H2O: " << masaTotala;

Economic - Dobânda simplă

Economie: Dobânda = (S × R × T) / 100
C++: float dobanda = (suma * rata * timp) / 100;
„dobânda egal suma ori rata ori timpul, totul împărțit la 100"

Dobânda = (suma * rata * timp) / 100

float suma, rata, timp, dobanda;
cout << "Suma, rata (%), timp (ani): ";
cin >> suma >> rata >> timp;
dobanda = (suma * rata * timp) / 100;
cout << "Dobanda: " << dobanda;

Exemplu complet: Media aritmetică a 5 numere

Programul complet - Media aritmetică
#include <iostream>
using namespace std;

int main() {
    // Declarăm 5 numere și media
    float a, b, c, d, e, media;

    // Citim numerele
    cout << "Introdu 5 numere: ";
    cin >> a >> b >> c >> d >> e;

    // Calculăm media
    media = (a + b + c + d + e) / 5;

    // Afișăm rezultatul
    cout << "Media este: " << media;

    return 0;
}

Greșeală frecventă: Dacă declarați variabilele ca int în loc de float, împărțirea / 5 va fi întreagă și media nu va avea zecimale. De exemplu, media numerelor 1, 2, 3, 4, 5 ar da 3 în loc de 3.0.

Verificare: Ce structură folosim?

Cum alegi structura potrivită:
  1. Citește problema: trebuie să iei o decizie? → if/else
  2. Trebuie să repeți ceva de mai multe ori? → for/while
  3. Este un calcul simplu, pas cu pas? → structură liniară
Test rapid:

1. Ce structură de control folosim pentru a verifica dacă un număr este pozitiv, negativ sau zero?

2. Ce structură folosim pentru a calcula suma primelor 100 de numere naturale?

3. Ce structură folosim pentru a citi două numere și a afișa suma lor?

Întrebări frecvente (FAQ)

De ce este important să știu structurile de control?
Pentru că orice program, oricât de complex, este construit din combinații ale acestor trei structuri. Înveți să gândești algoritmic, să descompui probleme mari în pași mici.
Ce se întâmplă dacă greșesc indexarea la for?
Poți să nu procesezi toate datele (dacă începi de la 1 în loc de 0) sau să accesezi zone din memorie care nu aparțin vectorului (dacă mergi până la n în loc de n-1). Programul poate da erori sau rezultate greșite.
Cum aleg între float și double?
Pentru majoritatea problemelor simple, float este suficient. double oferă mai multă precizie, dar ocupă mai multă memorie. În problemele de la PbInfo, de obicei se cere float sau double.
Pot rezolva orice problemă din matematică cu un program?
În principiu, da, atâta timp cât problema poate fi redusă la pași algoritmici. Există însă și probleme care necesită demonstrații matematice complexe, dar chiar și acelea pot fi verificate numeric prin program.

De ce să învățăm algoritmi? (Gândirea algoritmică în viața reală)

Gândirea algoritmică nu este utilă doar în informatică, ci în aproape orice domeniu. Iată câteva exemple:

  • În bucătărie: O rețetă este un algoritm. Dacă urmezi pașii corect, obții mâncarea dorită.
  • La cumpărături: Cauți cel mai scurt drum prin magazin - e un algoritm de optimizare.
  • În sport: Antrenorul concepe exerciții repetitive (bucle) pentru a îmbunătăți performanța.
  • În muzică: O partitură este un algoritm: notele sunt instrucțiuni, iar repetițiile sunt bucle.
  • În jocuri: Strategiile sunt algoritmi: "dacă inamicul e aproape, atacă; altfel, apropie-te".

Exercițiu practic: Gândește-te la o activitate pe care o faci zilnic și descrie-o ca pe un algoritm (pași, decizii, repetiții). De exemplu, cum te pregătești dimineața pentru școală? Scrie ideile în caiet.

Exercițiu: Asociază structura cu problema

Pentru fiecare problemă, alege structura de control potrivită:

1. Calculul mediei a 3 numere:
Liniară
Decizie
Repetitivă
2. Verificarea dacă un număr este prim:
Liniară
Decizie
Repetitivă
3. Determinarea tipului de ecuație (grad I sau II):
Liniară
Decizie
Repetitivă
PROBLEME PBINFO - 15 minute

PbInfo - Numara elementele pare

Numarare cu for si if

Enunț:

Cerință: Se citeste n si apoi n numere naturale. Afiseaza cate sunt pare.

Date de intrare:

n, apoi n numere naturale.

Date de ieșire:

Un numar: cate elemente pare exista.

Exemplu:

Intrare:

6
1 2 4 7 10 11

Ieșire:

3

Explicație: Pare sunt 2, 4, 10.

Cum gândim soluția:
  1. Initializam cnt = 0.
  2. Parcurgem cele n numere.
  3. Daca x % 2 == 0, atunci cnt++.
  4. Afisam cnt.

Tip: Poti rezolva fara sa stochezi vectorul.

Scrie soluția în C++:
Soluție corectă:
#include <iostream>
using namespace std;

int main() {
    int n, x, cnt = 0;
    cin >> n;
    for (int i = 1; i <= n; i++) {
        cin >> x;
        if (x % 2 == 0) cnt++;
    }
    cout << cnt;
    return 0;
}

PbInfo - Media notelor

Aplicatie interdisciplinara matematica

Enunț:

Cerință: Se citeste n si apoi n note reale. Afiseaza media aritmetica.

Date de intrare:

n, apoi n note.

Date de ieșire:

Media notelor cu doua zecimale.

Exemplu:

Intrare:

4
8 9 10 7

Ieșire:

8.50

Explicație: Suma este 34, iar 34 / 4 = 8.50.

Cum gândim soluția:
  1. Initializam suma = 0.
  2. Adunam fiecare nota.
  3. Media este suma / n.
  4. Afisam cu doua zecimale.

Tip: Foloseste double pentru note si medie.

Scrie soluția în C++:
Soluție corectă:
#include <iostream>
#include <iomanip>
using namespace std;

int main() {
    int n;
    double nota, suma = 0;
    cin >> n;
    for (int i = 1; i <= n; i++) {
        cin >> nota;
        suma + = nota;
    }
    cout << fixed << setprecision(2) << suma / n;
    return 0;
}

PbInfo - Suma numerelor pozitive

Recapitulare if si for

Enunț:

Cerință: Se citeste n si apoi n numere intregi. Afiseaza suma numerelor pozitive.

Date de intrare:

n, apoi n numere intregi.

Date de ieșire:

Suma numerelor pozitive.

Exemplu:

Intrare:

5
-2 4 0 7 -1

Ieșire:

11

Explicație: Pozitive sunt 4 si 7.

Cum gândim soluția:
  1. Initializam suma = 0.
  2. Citim fiecare x.
  3. Daca x > 0, il adaugam la suma.
  4. Afisam suma.

Tip: Zero nu este numar pozitiv.

Scrie soluția în C++:
Soluție corectă:
#include <iostream>
using namespace std;

int main() {
    int n, x, suma = 0;
    cin >> n;
    for (int i = 1; i <= n; i++) {
        cin >> x;
        if (x > 0) suma + = x;
    }
    cout << suma;
    return 0;
}
EXERCIȚII PRACTICE - 20 minute

Exercițiul Practic: Note și medii

Aplică structurile de control învățate pentru a rezolva probleme cu note și medii

Sarcina 1: Analiză și corectare cod

Analizează următorul cod și găsește greșelile:

#include <iostream>
using namespace std;

int main() {
    int nota1, nota2, nota3;
    int media;
    
    cout << "Introdu notele: ";
    cin << nota1 << nota2 << nota3;
    
    media = nota1 + nota2 + nota3 / 3;
    
    cout << "Media este: " << media;
    
    return 0;
}

Matematică: Media = (a + b + c) / 3 — parantezele sunt obligatorii!

C++: media = (nota1 + nota2 + nota3) / 3.0f;3.0f forțează împărțire reală

Greșeli frecvente: cin << în loc de cin >>, lipsă paranteze, tip int pentru medie

// Pseudocod: Verificare greșeli cod medie // Greșeala 1: cin folosește >>, NU << CITEȘTE nota1, nota2, nota3 // cin >> // Greșeala 2: paranteze la sumă media (nota1 + nota2 + nota3) / 3.0 // Greșeala 3: media trebuie float, nu int SCRIE media
Soluție pentru Sarcina 1:

De ce funcționează? Codul original avea 3 greșeli tipice de începător: operatorul de citire inversat (<< vs >>), lipsa parantezelor care schimbă ordinea operațiilor, și tipul int care pierde zecimalele. Corectându-le, media devine exactă.

Greșeli identificate și corecții:

  • 1. Tip de date greșit: int media - media trebuie să fie float pentru a păstra zecimalele.
  • 2. Operator greșit la cin: cin << nota1 - corect este cin >> nota1.
  • 3. Prioritatea operațiilor: nota1 + nota2 + nota3 / 3 - împărțirea se face înaintea adunării. Corect: (nota1 + nota2 + nota3) / 3.
  • 4. Conversie implicită: suma a 3 int împărțită la 3 dă tot int (trunchiat). Trebuie să folosim float.

Cod corectat:

#include <iostream>
using namespace std;

int main() {
    int nota1, nota2, nota3;
    float media;
    
    cout << "Introdu notele: ";
    cin >> nota1 >> nota2 >> nota3;
    
    media = (nota1 + nota2 + nota3) / 3.0f;
    
    cout << "Media este: " << media;
    
    return 0;
}
Sarcina 2: Implementare completă

Cerință: Scrie un program care citește 4 note (numere întregi) și calculează:

  • Media aritmetică simplă (cu 2 zecimale)
  • Media aritmetică a primelor două note
  • Media aritmetică a ultimelor două note

Matematică: Mtotal = (n1+n2+n3+n4)/4; M12 = (n1+n2)/2; M34 = (n3+n4)/2

C++: float media = (n1+n2+n3+n4) / 4.0f; — sufixul .0f e esențial!

Citire: Parantezele grupează corect sumele, iar împărțirea la float păstrează zecimalele

// Pseudocod: 4 note → 3 medii CITEȘTE n1, n2, n3, n4 media_totală (n1 + n2 + n3 + n4) / 4 media_12 (n1 + n2) / 2 media_34 (n3 + n4) / 2 SCRIE media_totală, media_12, media_34
Soluție pentru Sarcina 2:

De ce funcționează? Calculăm 3 medii independente: media tuturor (4 note), media primelor două și media ultimelor două. Împărțim la 4.0f / 2.0f (nu la 4 / 2!) ca rezultatul să fie real, nu trunchiat la întreg.

#include <iostream>       // cin, cout, endl
#include <iomanip>        // fixed, setprecision
using namespace std;

int main() {
    int n1, n2, n3, n4;    // 4 note ca numere întregi
    
    // Pas 1: Citire date
    cout << "Introdu 4 note: ";
    cin >> n1 >> n2 >> n3 >> n4;
    
    // Pas 2: Calcul cele 3 medii (cu .0f → împărțire reală)
    float media_totala = (n1 + n2 + n3 + n4) / 4.0f;      // media tuturor
    float media_primele_doua = (n1 + n2) / 2.0f;           // media 1+2
    float media_ultimele_doua = (n3 + n4) / 2.0f;          // media 3+4
    
    // Pas 3: Afișare cu exact 2 zecimale
    cout << fixed << setprecision(2);
    cout << "Media totala: " << media_totala << endl;
    cout << "Media primelor doua: " << media_primele_doua << endl;
    cout << "Media ultimelor doua: " << media_ultimele_doua << endl;
    
    return 0;
}

Explicații:

  • Folosim 4.0f și 2.0f pentru a forța împărțirea reală (zecimală)
  • setprecision(2) împreună cu fixed asigură exact 2 zecimale
  • Programul folosește doar structură liniară (fără decizii sau bucle)

Descarcă toate exercițiile și soluțiile