Advertisement
patryk

Program C++

Apr 19th, 2011
230
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.92 KB | None | 0 0
  1.  
  2. #include <condefs.h>
  3. #include <iostream.h>
  4. #include <conio.h>
  5. #include <stdio.h>
  6. #include <stdlib.h>
  7. #include <string.h>
  8. #include <exception>
  9. #include <ctype.h>
  10.  
  11.  
  12. int x1,x2,y1,y2;
  13. //int qcol(); //funkcja wejscia kolumn
  14. //int qrow(); //funkcja wejscia kolumn
  15. double **create(int, int); // funkcja tworzaca puste matryce
  16. void fill(double **, int, int); //funkcja wypelniajaca matryce
  17. void show(double **, int, int);  //funkcja wyswietlania macierzy
  18. double **adding(double **, double **, int, int); // funkcja dodajaca
  19. void add(); //procedura rozpoczynajaca dodawanie
  20. void erase(double **, int, int); //funkcja zwalniania pamieci
  21. double **adding(double **, double **, int, int); // funkcja dodajaca
  22. void erase(long double **, int, int); //funkcja zwalniania pamieci
  23. double **subtraction(double **,double **, int, int); //funkcja odejmujaca jedna matryce od drugiej
  24. void sub(); //procedura rozpoczynajaca odejmowanie
  25. double **multum(double **, int, int, double); //funkcja mnozaca przez liczbe
  26. double **multiplication(double **, double **, int, int, int, int); //funkcja mnozaca
  27. void multi(); //procedura rozpoczynajaca mnozenie
  28.  
  29.  
  30.  
  31.  
  32. double **create(int m, int n)
  33. {
  34.   double **matrix;
  35.   matrix = new double *[m];
  36.   for(int j = 0; j<m; j++) matrix[j] = new double[n];
  37.   return matrix;
  38. }
  39.  
  40. void fill(double **matrix, int m, int n)
  41. {
  42.   for (int i = 0; i < m; i++)
  43.     for (int j = 0; j < n; j++)
  44.     {
  45.  
  46.  
  47.         cout<< "Podaj wspolrzedna matrix["<<i<<"]["<<j<<"]= ";
  48.         cin >> matrix[i][j];
  49.  
  50.     }
  51. }
  52.  
  53.  
  54. void show(double **matrix, int m, int n)
  55. {
  56.    cout<<endl;
  57.    cout<<endl;
  58.    for (int i = 0; i < m; i++)
  59.    {
  60.      for (int j = 0; j < n; j++)
  61.      cout << matrix[i][j] << " ";
  62.      cout << "\n" << endl;
  63.    }
  64. }
  65.  
  66. void erase(double **matrix, int m, int n)
  67. {
  68.   for (int i = 0; i < m;  i++)
  69.   delete[] matrix[i];
  70.   delete[] matrix;
  71. }
  72.  
  73.  
  74. double **adding(double **matrix1, double **matrix2,int m, int n)
  75. {
  76.   double **matrix3=create(m,n);
  77.   for (int i=0; i<m; i++)
  78.     for (int j=0; j<n; j++)
  79.       matrix3[i][j]=matrix1[i][j] + matrix2[i][j];
  80.   return matrix3;
  81. }
  82.  
  83. void add(void)
  84. {
  85.   cout << "Dodawanie macierzy" << endl;
  86.   printf("Podaj x1: ");
  87.   scanf("%d", &x1);
  88.   printf("Podaj y1: ");
  89.   scanf("%d", &y1);
  90.   double **A=create(x1,y1);
  91.   double **B=create(x1,y1);
  92.   cout << "Podaj dane matrycy A:" << endl;
  93.   fill(A,x1,y1);
  94.   cout << "Podaj dane matrycy B:" << endl;
  95.   fill(B,x1,y1);
  96.   double **C=adding(A,B,x1,y1);
  97.   show(A,x1,y1);
  98.   cout << "   +   "<< endl;
  99.   show(B,x1,y1);
  100.   cout << "   =   "<< endl;
  101.   show(C,x1,y1);
  102.   erase(A,x1,y1);
  103.   erase(B,x1,y1);
  104.   erase(C,x1,y1);
  105.   getch();
  106. }
  107.  
  108. double **multum(double **a, int m, int n, double liczba)
  109. {
  110.   double **b=create(m,n);
  111.   for (int i=0; i<m; i++)
  112.   {
  113.     for (int j=0; j<n; j++)
  114.     {
  115.       b[i][j]=a[i][j]*liczba;
  116.     }
  117.   }
  118.   return b;
  119. }
  120.  
  121.  
  122. double **subtraction(double **matrix1, double **matrix2, int m, int n)
  123. {
  124.   double **matrix3=create(m,n);
  125.   matrix3=adding(matrix1, multum(matrix2, m, n, -1), m, n);
  126.   return matrix3;
  127. }
  128. void sub()
  129. {
  130.   cout << "Odejmowanie macierzy" << endl;
  131.   printf("Podaj x1: ");
  132.   scanf("%d", &x1);
  133.   printf("Podaj y1: ");
  134.   scanf("%d", &y1);
  135.   double **A=create(x1,y1);
  136.   double **B=create(x1,y1);
  137.   cout << "Podaj dane matrycy A:" << endl;
  138.   fill(A,x1,y1);
  139.   cout << "Podaj dane matrycy B:" << endl;
  140.   fill(B,x1,y1);
  141.   double **C=subtraction(A,B,x1,y1);
  142.   show(A,x1,y1);
  143.   cout << "   -   "<< endl;
  144.   show(B,x1,y1);
  145.   cout << "   =   "<< endl;
  146.   show(C,x1,y1);
  147.   erase(A,x1,y1);
  148.   erase(B,x1,y1);
  149.   erase(C,x1,y1);
  150.   getch();
  151. }
  152.  
  153.  
  154. double **multiplication(double **a, double **b, int m1, int n1, int m2, int n2) //funkcja mnozaca
  155. {
  156.   int m,n,p;
  157.   double **c;
  158.   double **A;
  159.   double **B;
  160.   if (n1==m2)
  161.   {
  162.     m=m1;
  163.     n=n2;
  164.     p=n1;
  165.     A=create(m1,n1);
  166.     B=create(m2,n2);
  167.     A=a;
  168.     B=b;
  169.   }
  170.   else
  171.   {
  172.     p=n2;
  173.     m=m2;
  174.     n=n1;
  175.     A=create(m2,n2);
  176.     B=create(m1,n1);
  177.     A=b;
  178.     B=a;
  179.  
  180.   }
  181.   c=create(m,n);
  182.   for (int i=0; i<m; i++)
  183.     for (int k=0; k<n; k++)
  184.     {
  185.       long double temp=0;
  186.       for (int j=0; j<p; j++)
  187.       {
  188.         temp=temp+(A[i][j]*B[j][k]);
  189.       }
  190.       c[i][k]=temp;
  191.     }
  192.   return c;
  193. }
  194.  
  195. void multi() //procedura rozpoczynajaca mnozenie
  196. {
  197.   cout << "Dodawanie macierzy" << endl;
  198.   cout << "Dane 1. macierzy" << endl;
  199.  printf("Podaj x1: ");
  200.   scanf("%d", &x1);
  201.   printf("Podaj y1: ");
  202.   scanf("%d", &y1);
  203.   double **A=create(x1,y1);
  204.   cout << "Dane 2. macierzy" <<endl;
  205.   cout << "Ilosc wierszy macierzy 2 musi byc rowna ilosci kolumn macierzy 1! " << endl;
  206.   printf("Podaj x2: ");
  207.   scanf("%d", &x2);
  208.  
  209.   if (x2==y1)
  210.   {
  211.  
  212.   printf("Podaj y2: ");
  213.   scanf("%d", &y2);
  214.   }
  215.   else
  216.   {
  217.     y2=0;
  218.     while (y2!=x1){ printf("Podaj y2: "); scanf("%d", &y2); }
  219.   }
  220.   double **B=create(x2,y2);
  221.   cout << "Podaj dane matrycy A:" << endl;
  222.   fill(A,x1,y1);
  223.   cout << "Podaj dane matrycy B:" << endl;
  224.   fill(B,x2,y2);
  225.   double **C=multiplication(A,B,x1,x2,y1,y2);
  226.   show(A,x1,y1);
  227.   cout << "   x   "<< endl;
  228.   show(B,x2,y2);
  229.   cout << "   =   "<< endl;
  230.   show(C,x1,y2);
  231.   erase(A,x1,y1);
  232.   erase(B,x2,y2);
  233.   erase(C,x1,y2);
  234.   getch();
  235. }
  236.  
  237.  
  238.  
  239. /*float odejmowanie()
  240. {
  241. printf("Odejmowanie");
  242. }
  243. float wyswietlanie()
  244. {
  245. printf("Wyswietlanie");
  246. }     */
  247.  
  248. int main()
  249. {
  250. char wybor;
  251. char znak;
  252. do{
  253. cout<<"Co chcesz robic:\nD - dodaj macierze\nO - odejmij macierze\nM - pomnoz macierz\nW - wyswietl macierz \nK - koniec \n:";
  254. cin>>wybor;
  255. switch(wybor)
  256. {
  257.   case 'd':
  258.   case 'D':
  259.     add();
  260.     break;
  261.   case 'o':
  262.   case 'O':
  263.     sub();
  264.     break;
  265.   case 'm':
  266.   case 'M':
  267.     multi();
  268.     break;
  269.   case 'w':
  270.   case 'W':
  271.  
  272.   case 'k':
  273.   case 'K':
  274.      break;
  275.   default:
  276.      printf("Zly wybor");
  277. }
  278. cout<<"Czy chcesz zakonczyc program? - Wcisnij q: ";
  279. cin>>znak;
  280. }
  281. while(znak!='q' && znak!='Q');
  282. getch();
  283.  
  284. }
  285. //---------------------------------------------------------------------------
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement