#include <iostream.h>
#include <conio.h>
#pragma hdrstop

void wynik(long double **, long double*, long double *);
void zwolnij_pamiec(long double **, long double* ,
                    long double *);

int m = 3;
// liczna wierszy (w przypadku przeindeksowania zawsze +1)
int n = 3;
// liczba kolumn  (w przypadku przeindeksowania zawsze +1)

int main()
{
  long double **A; // macierz kwadratowa A
  long double *B;  // wektor B
  long double *C; // wektor wynikowy C

//- inicjowanie pamieci przydzielanej dynamicznie-wektorom-
  C = new long double[n];
  B = new long double[n];
//inicjowanie pamieci przydzielanej dynamicznie tablicy 2D-
  A = new long double*[m];
  for (int j = 1; j < m; j++)
     A[j] = new long double[n];
//---------------------------------------------------------

  for (int i = 1; i < m; i++)
    for (int j = 1; j < n; j++)
        A[i][j] = i+j-1;  //elementy macierzy kwadratowej (2x2)

  cout << "macierz A\n";
  for (int i = 1; i < m; i++)
    {
      for (int j = 1; j < n; j++)
        cout << A[i][j] << " ";
        cout << "\n" << endl;
    }

  cout << "wektor B\n";
  for (int j = 1; j < n; j++)
    {
     B[j]=j;  // dwuelementowy wektor
     cout << B[j] << " ";
     cout << "\n" << endl;
    }
  wynik(A, B, C);
  zwolnij_pamiec(A, B, C);
  getch();
  return 0;

}
//------Obliczanie wyniku A*B=C-------------------------
void wynik(long double **A, long double *B, long double *C)
{
 int sum;
 cout << "wektor C\n";
 for (int i = 1; i < m; i++)
   {
     sum=0;
     for (int j = 1; j < n; j++)
       {
         sum += A[i][j]*B[j];
         C[i]=sum; // dwuelementowy wektor wynikowy
       }
     cout << C[i] << " \n\n";
   }
  return;
}
//--------- Zwolnienie przydzielonej pamieci---------------
void zwolnij_pamiec(long double **A, long double *B,
                    long double *C)
{
  for (int j = 1; j < m;  j++)
     delete[] A[j];

  delete[] A;
  delete[] B;
  delete[] C;
  return;
}

