lucacavallaro

Esercizio Matrici (1)

Nov 28th, 2014
284
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.65 KB | None | 0 0
  1. /*
  2.  * Creare due array di interi, A e B, con elementi e lunghezza casuale, se tutti gli elementi
  3.  * di A sono distinti calcolare una matrice mxn contenente il prodotto AxB altrimenti restituire
  4.  * la matrice identità.
  5.  *
  6.  */
  7.  
  8.  #include <iostream>
  9.  #include <ctime>
  10.  #include <cstdlib>
  11.  
  12.  using namespace std;
  13.  
  14.  // core
  15.  int get_random_int(int min, int max);
  16.  int *random_int_array(int size, int min, int max);
  17.  bool check_duplicates(int *array, int size);
  18.  int **identity_matrix(int size);
  19.  int **matrix_multiplication(int *matrix_1, int *matrix_2, int h, int w);
  20.  
  21.  // extra
  22.  void print_array(int *array, int size);
  23.  void print_matrix(int **matrix, int h, int w = 0);
  24.  
  25.  int main()
  26.  {
  27.     srand(time(NULL));
  28.      
  29.     int n = get_random_int(1, 3), *A,
  30.         m = get_random_int(1, 3), *B;
  31.        
  32.     A = random_int_array(n, 1, 3);
  33.     cout << "A: "; print_array(A, m); cout << endl;
  34.    
  35.     B = random_int_array(m, 1, 3);
  36.     cout << "B: "; print_array(B, n); cout << endl;
  37.    
  38.     if(check_duplicates(A, m)) {
  39.         cout << "La matrice A ha duplicati, stampo la matrice identita'" << endl;
  40.         print_matrix(identity_matrix(m * n), m * n);
  41.     } else {
  42.         cout << "Moltiplicazione AxB" << endl;
  43.         print_matrix(matrix_multiplication(A, B, m, n), m, n);
  44.     }
  45.      
  46.     return 0;
  47.  }
  48.  
  49.  int get_random_int(int min, int max)
  50.  {
  51.     max -= min - 1;
  52.     return int(rand() % max + min);
  53.  }
  54.  
  55.  int *random_int_array(int size, int min, int max)
  56.  {
  57.     int *new_array = new int[size];
  58.     for(int i = 0; i < size; i++) {
  59.         new_array[i] = get_random_int(min, max);
  60.     }
  61.     return new_array;
  62.  }
  63.  
  64.  bool check_duplicates(int *array, int size)
  65.  {
  66.     for(int i = 0; i < size; i++) {
  67.         for(int j = 0; j < size; j++) {
  68.             if(i == j) continue;
  69.             if(*(array + i) == *(array + j)) return true;
  70.         }
  71.     }
  72.     return false;
  73.  }
  74.  
  75.  int **identity_matrix(int size)
  76.  {
  77.     int **matrix = new int*[size];
  78.      
  79.     for(int i = 0; i < size; i++) {
  80.         matrix[i] = new int[size];
  81.         for(int j = 0; j < size; j++)
  82.             matrix[i][j] = i == j ? 1 : 0;
  83.     }
  84.    
  85.     return matrix;
  86.  }
  87.  
  88.  int **matrix_multiplication(int *matrix_1, int *matrix_2, int h, int w)
  89.  {
  90.     int **matrix = new int*[h];
  91.    
  92.     for(int i = 0; i < h; i++) {
  93.         matrix[i] = new int[w];
  94.         for(int j = 0; j < w; j++) {
  95.             matrix[i][j] = matrix_1[i] * matrix_2[j];
  96.         }
  97.     }
  98.    
  99.     return matrix;
  100.  }
  101.  
  102.  void print_array(int *array, int size)
  103.  {
  104.     for(int i = 0; i < size; i++) {
  105.         if(!i) cout << '[';
  106.         cout << *(array + i) << (i == size-1 ? ']' : '\t');
  107.     }
  108.     return;
  109.  }
  110.  
  111.  void print_matrix(int **matrix, int h, int w)
  112.  {
  113.      if(!w) w = h;
  114.      for(int i = 0; i < h; i++) {
  115.         for(int j = 0; j < w; j++) {
  116.             cout << matrix[i][j] << '\t';
  117.         }
  118.         cout << endl;
  119.      }
  120.      return;
  121.  }
Add Comment
Please, Sign In to add comment