ProdusCartezian problema #350 de pe pbinfo

Cerinţa

Se dau două numere naturale nenule n și m. Pentru mulțimile A={1,2,..,n} și B={1,2,...,m}, să se afișeze mulțimea A×B={(a,b) | a∈A, b∈B} – produsul cartezian al mulțimilor A și B.

Date de intrare

Programul citește de la tastatură numerele n și m.

Date de ieşire

Programul afișează pe ecran mulțimea cerută astfel:

  • elementele mulțimii vor fi scrise între acolade și separate prin virgule
  • fiecare element este o pereche de numere, care va fi scrisă între paranteze rotunde, numerele din pereche fiind separate prin virgulă
  • mai întâi se vor scrie perechile (a,b) pentru care a=1, cu b în ordine crescătoare, apoi perechile pentru care a=2 cu b în ordine crescătoare, etc, ca în exemplu.

Restricţii şi precizări

  • 1 ≤ n,m ≤ 10

Produsul cartezian este format din perechi ordonate de valori. Perechile sunt formate din elemente ale celor doua multimi intre care se calculeaza produsul cartezian.

Ordinea elementelor contează. Primul element din pereche este din prima multime, al doilea element din pereche este din a doua multime.

Deci, daca avem doua multimi de elemente M cu m elemente si N cu n elemente, multimea formata din toate perechile ordonate de elemente de forma (i,j) unde i merge de la 1 la m si este element din M si j merge de la 1 la n si este element din N formeaza produsul cartezian al celor doua multimi M si N.

produs cartezian

Indicatiile de rezolvare date de autorii site-ului sunt:

Se aplică un algoritm “fiecare cu fiecare”, care “împerechează” fiecare număr de la 1 la n cu fiecare număr de la 1 la m. Fiecare pereche va fi afișată. Atenție la faptul că virgula separă perechile! După ultima pereche și înainte de prima pereche nu se scrie virgulă!

Daca incercati sa va ganditi la un algoritm simplu de rezolvare si nu va descurcati, incercati ideea noastra. Simplu si curat, am realizat un algoritm prin care formam fiecare pereche de elemente si o tiparim pe ecran.

#include <iostream>

using namespace std;

int n,m,i,j;

void produsCartezian(int n, int m){
   cout << '{';
   for (i=1; i<=n; i++) {
      for (j=1; j<=m; j++) {
         cout << '(' << i << ',' << j << ')';
         if (i*j!=m*n) cout << ',';
      }
    }
    cout << '}';
}

int main() {
   cin >> n >> m;
   produsCartezian(n,m);
return 0;
}

Incercati sa implementati algoritmul si in alte limbaje de programare pentru a va convinge ca il stapaniti.

Este un algoritm util in viata de programator profesionist, interviuri de angajate etc.

Lasă un răspuns