Ce vei învăța astăzi?
După această lecție vei învăța ce sunt intersecția și diferența a două mulțimi și cum le calculăm în C++, folosind vectori de prezență.
Intersecția A ∩ B
Definiție: Intersecția mulțimilor A și B, notată A ∩ B, este mulțimea elementelor care aparțin simultan lui A și lui B.
Exemplu
Dacă A = {1, 2, 3, 4} și B = {3, 4, 5}, atunci A ∩ B = {3, 4}.
Diferența A - B
Definiție: Diferența mulțimilor A și B, notată A - B, este mulțimea elementelor care aparțin lui A, dar nu aparțin lui B.
Exemplu
Dacă A = {1, 2, 3, 4} și B = {3, 4, 5}, atunci A - B = {1, 2}.
Elementele comune celor două mulțimi
Elementele din A care nu sunt în B
Intersecția și diferența în C++
Pentru intersecție folosim operatorul logic && (și): frecA[i] == 1 && frecB[i] == 1. Pentru diferență verificăm frecA[i] == 1 && frecB[i] == 0.
#include <iostream>
using namespace std;
int main() {
int n, m, x, i, frecA[101] = {0}, frecB[101] = {0};
cin >> n;
for (i = 1; i <= n; i++) {
cin >> x;
frecA[x] = 1;
}
cin >> m;
for (i = 1; i <= m; i++) {
cin >> x;
frecB[x] = 1;
}
cout << "Intersectia: ";
for (i = 1; i <= 100; i++)
if (frecA[i] == 1 && frecB[i] == 1)
cout << i << " ";
cout << endl;
cout << "Diferenta A - B: ";
for (i = 1; i <= 100; i++)
if (frecA[i] == 1 && frecB[i] == 0)
cout << i << " ";
cout << endl;
return 0;
}
Observă: intersecția reține elementele comune (&&), iar diferența reține elementele din A care nu sunt în B (frecB[i] == 0).
Exercițiu de completare
Completează enunțul despre intersecție:
Intersecția mulțimilor A și B, notată A ______ B, este mulțimea elementelor care aparțin ______ lui A și lui B. În C++ o testăm cu operatorul ______.
Bancă de cuvinte:
Exercițiu de completare
Completează enunțul despre diferență:
Diferența A - B este mulțimea elementelor care aparțin lui ______, dar nu aparțin lui ______. În C++, verificăm frecA[i] == 1 și frecB[i] == ______.
Bancă de cuvinte:
Test de înțelegere
Test rapid - intersecția și diferența:
1. Dacă A = {1, 2, 3, 4} și B = {3, 4, 5}, atunci A ∩ B este:
2. Pentru aceleași mulțimi, A - B este:
3. Condiția C++ pentru intersecție este:
frecB[i] == 0, nu frecB[i] == 1; și reține că diferența nu este comutativă: A - B diferă, în general, de B - A.Aprofundare
Proprietățile operațiilor: intersecția este comutativă (A ∩ B = B ∩ A), dar diferența nu este: A - B diferă, în general, de B - A.
- Diferența simetrică: (A - B) ∪ (B - A) reprezintă elementele care aparțin exact uneia dintre mulțimi; în C++ se obține combinând
frecA[i] == 1 && frecB[i] == 0cufrecB[i] == 1 && frecA[i] == 0. - Mulțimi disjuncte (fără elemente comune): dacă A ∩ B = ∅, atunci intersecția este vidă, iar A - B = A.
- Complementul: pentru un univers U cunoscut, complementul lui A este U - A, adică
frecA[i] == 0. - Relația cu reuniunea: A ∩ B ⊆ A ∪ B și A - B ⊆ A ∪ B; operațiile se pot combina într-un singur program.
- Pentru BAC: problemele cer frecvent intersecția și diferența simultan; scrie ambele condiții în bucle separate, apoi afișează etichetele pentru claritate.
PbInfo - Intersecția a două mulțimi
Enunț:
Cerință: Se citesc două mulțimi de numere naturale. Să se afișeze intersecția lor, sortată crescător.
Date de intrare:
Programul citește n, apoi n elemente ale primei mulțimi, apoi m, apoi m elemente ale celei de-a doua mulțimi.
Date de ieșire:
Programul va afișa elementele intersecției, în ordine crescătoare, separate prin spații.
Restricții și precizări:
1 ≤ n, m ≤ 100; elementele sunt numere naturale între 1 și 100.
Exemplu:
Intrare:
4 1 2 3 4 3 3 4 5
Ieșire:
3 4
Cum gândim soluția:
- Marcăm prezența elementelor din A și din B
- Afișăm valorile cu frecA == 1 și frecB == 1
Scrie soluția în C++:
Soluție corectă:
#include <iostream>
using namespace std;
int main() {
int n, m, x, i, frecA[101] = {0}, frecB[101] = {0};
cin >> n;
for (i = 1; i <= n; i++) {
cin >> x;
frecA[x] = 1;
}
cin >> m;
for (i = 1; i <= m; i++) {
cin >> x;
frecB[x] = 1;
}
for (i = 1; i <= 100; i++)
if (frecA[i] == 1 && frecB[i] == 1)
cout << i << " ";
return 0;
}
Ce învățăm: intersecția reține doar elementele comune ambelor mulțimi, folosind operatorul &&.
PbInfo - Diferența a două mulțimi
Enunț:
Cerință: Se citesc două mulțimi de numere naturale. Să se afișeze diferența A - B, sortată crescător.
Date de intrare:
Programul citește n, apoi n elemente ale primei mulțimi, apoi m, apoi m elemente ale celei de-a doua mulțimi.
Date de ieșire:
Programul va afișa elementele lui A care nu sunt în B, în ordine crescătoare.
Restricții și precizări:
1 ≤ n, m ≤ 100; elementele sunt numere naturale între 1 și 100.
Exemplu:
Intrare:
4 1 2 3 4 3 3 4 5
Ieșire:
1 2
Cum gândim soluția:
- Marcăm prezența elementelor din A și din B
- Afișăm valorile cu frecA == 1 și frecB == 0
Scrie soluția în C++:
Soluție corectă:
#include <iostream>
using namespace std;
int main() {
int n, m, x, i, frecA[101] = {0}, frecB[101] = {0};
cin >> n;
for (i = 1; i <= n; i++) {
cin >> x;
frecA[x] = 1;
}
cin >> m;
for (i = 1; i <= m; i++) {
cin >> x;
frecB[x] = 1;
}
for (i = 1; i <= 100; i++)
if (frecA[i] == 1 && frecB[i] == 0)
cout << i << " ";
return 0;
}
Ce învățăm: diferența A - B reține elementele din A care nu se găsesc în B, adică frecA[i] == 1 și frecB[i] == 0.
Exercițiul Practic: Intersecție și diferență
Sarcini de lucru
Completează următoarele sarcini pentru a aplica intersecția și diferența
Sarcina 1: Calculează operațiile
Cerință: Pentru A = {2, 3, 5, 7} și B = {3, 5, 6, 9}, scrie A ∩ B și A - B.
Soluție pentru Sarcina 1:
A ∩ B = {3, 5}
A - B = {2, 7}
Sarcina 2: Scrie programul
Cerință: Scrie un program C++ care citește două mulțimi și afișează pe rândurile separate intersecția și diferența A - B.
Soluție pentru Sarcina 2:
#include <iostream>
using namespace std;
int main() {
int n, m, x, i, frecA[101] = {0}, frecB[101] = {0};
cin >> n;
for (i = 1; i <= n; i++) {
cin >> x;
frecA[x] = 1;
}
cin >> m;
for (i = 1; i <= m; i++) {
cin >> x;
frecB[x] = 1;
}
cout << "Intersectia: ";
for (i = 1; i <= 100; i++)
if (frecA[i] == 1 && frecB[i] == 1)
cout << i << " ";
cout << endl;
cout << "Diferenta A - B: ";
for (i = 1; i <= 100; i++)
if (frecA[i] == 1 && frecB[i] == 0)
cout << i << " ";
cout << endl;
return 0;
}