mateip

Matrice

Dec 2nd, 2021
676
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <iostream>
  2. #include <cstring>
  3. #include <math.h>
  4. #include <stdio.h>
  5. using namespace std;
  6.  
  7. //variabile matrice
  8. bool rPutere = false;
  9. bool douaMatrice = false;
  10. bool fisier = false;
  11. char operatie[21];
  12. char numeFisier[101];
  13. char s[10];
  14. int mat1[11][11], linii1, coloane1, mat2[11][11], linii2, coloane2;
  15. int rez[22][22], linii3, coloane3;
  16.  
  17.  
  18.  
  19. void intro(); //operatie cu vectori sau operatii cu matrice?
  20.  
  21. //operatii cu matrice
  22. void introM();
  23. void afisareRezultat();
  24. void determinant();
  25. void scadere();
  26. void adunare();
  27. void inmultireM(int a[11][11], int b[11][11]);
  28. void putere();
  29. void fileOrKey();
  30. void citireMatrice(int a[11][11], int b[11][11]);
  31. void afisareMat(int a[11][11], int b[11][11]);
  32. void transpusa();
  33.  
  34. char VsauM[11];
  35.  
  36. //operatii cu vectori
  37. void introV();
  38.  
  39. int main()
  40. {
  41.  
  42.     intro();
  43.     return 0;
  44. }
  45.  
  46. void intro()
  47. {
  48.     cout<<"Doriti sa efectuati o operatie cu vectori sau cu matrice? ";
  49.     cin.getline(VsauM, 10);
  50.     //if(strcmp(VsauM, "vectori") == 0 || strcmp(VsauM, "v") == 0)
  51.         //introV();
  52.     if(strcmp(VsauM, "matrice") == 0 || strcmp(VsauM, "m") == 0)
  53.         introM();
  54. }
  55.  
  56.  
  57.  
  58. ///functii pentru matrice
  59. void determinant() /// deocamdata doar pt matrici de rang 2 sau 3
  60. {
  61.     int det = -9999;
  62.     citireMatrice(mat1, mat2);
  63.     if(linii1 != coloane1)
  64.     {
  65.         cout<<"Numarul de linii nu este egal cu cel de coloane!";
  66.         exit(1);
  67.     }
  68.     if(linii1 > 3 || coloane1 > 3)
  69.     {
  70.         cout<<"Matricea are rang mai mare decat 3";
  71.         exit(1);
  72.     }
  73.  
  74.     switch (linii1) {
  75.         case 2:
  76.             det = (mat1[1][1] * mat1[2][2]) - (mat1[1][2] * mat1[2][1]);
  77.             break;
  78.         case 3:
  79.             det = (mat1[1][1] * mat1[2][2] * mat1[3][3]) + (mat1[1][3] * mat1[2][1] * mat1[3][2]) + (mat1[1][2] * mat1[2][3] * mat1[3][1]) - (mat1[1][3] * mat1[2][2] * mat1[3][1]) - (mat1[2][1] * mat1[1][2] * mat1[3][3]) - (mat1[3][2] * mat1[2][3] * mat1[1][1]);
  80.             break;
  81.         default:
  82.             cout<<"Matricea nu are nici rang 2, nici 3";
  83.     }
  84.     cout<<det;
  85.  
  86. }
  87.  
  88. void scadere()
  89. {
  90.     douaMatrice = true;
  91.     citireMatrice(mat1, mat2);
  92.     if(linii1 != linii2 || coloane1 != coloane2)
  93.     {
  94.         cout<<"Matricele nu au acelasi numar de linii / coloane!";
  95.         exit(1);
  96.     }
  97.     linii3 = linii1;
  98.     coloane3 = coloane1;
  99.     for(int i = 1; i <= linii1; i++)
  100.         for(int j = 1; j <= coloane1; j++)
  101.             rez[i][j] = mat1[i][j] - mat2[i][j];
  102.     afisareRezultat();
  103. }
  104.  
  105. void adunare()
  106. {
  107.     douaMatrice = true;
  108.     citireMatrice(mat1, mat2);
  109.     if(linii1 != linii2 || coloane1 != coloane2)
  110.     {
  111.         cout<<"Matricele nu au acelasi numar de linii / coloane!";
  112.         exit(1);
  113.     }
  114.     linii3 = linii1;
  115.     coloane3 = coloane1;
  116.     for(int i = 1; i <= linii1; i++)
  117.         for(int j = 1; j <= coloane1; j++)
  118.             rez[i][j] = mat1[i][j] + mat2[i][j];
  119.     afisareRezultat();
  120. }
  121.  
  122. void inmultireM(int a[11][11], int b[11][11])
  123. {
  124.  
  125.     if(!rPutere) {
  126.         douaMatrice = true;
  127.         citireMatrice(a, b);
  128.     }
  129.  
  130.  
  131.     for(int i = 1; i <= linii1; i++)
  132.         for(int j = 1; j <= coloane2; j++)
  133.             for(int k = 1; k <= coloane1; k++)
  134.                 rez[i][j] += a[i][k] * b[k][j];
  135.  
  136.  
  137.     if(!rPutere)
  138.     {
  139.         for(int i = 1; i <= linii1; i++)
  140.         {
  141.             for(int j = 1; j <= coloane2; j++)
  142.                 cout<<rez[i][j]<<" ";
  143.             cout<<endl;
  144.         }
  145.     }
  146.  
  147.  
  148.  
  149. }
  150.  
  151. void putere()   /// deocamdata se poate ridica doar la puterea a 2a
  152. {
  153.     int p = 0;
  154.     rPutere = true;
  155.     citireMatrice(mat1, mat2);
  156.     cout<<"Introduceti puterea la care trebuie ridicata matricea: ";
  157.     cin>>p;
  158.  
  159.  
  160.     linii2 = linii1, coloane2 = coloane1;
  161.  
  162.  
  163.     for(int i = 1; i < p; i++)
  164.         inmultireM(mat1, mat1);
  165.  
  166.     for(int i = 1; i <= linii1; i++)
  167.     {
  168.         for(int j = 1; j <= coloane2; j++)
  169.             cout<<rez[i][j]<<" ";
  170.         cout<<endl;
  171.     }
  172. }
  173.  
  174. void fileOrKey()    /// verificare daca sa citeasca dintr-un fisier sau de la tastatura
  175. {
  176.     cout<<"Citire din fisier sau tastatura?"<<endl;
  177.     cin.getline(s, 10);
  178.     if(strcmp(s, "fisier") == 0 || strcmp(s, "f") == 0)
  179.     {
  180.  
  181.         cout<<"Introduceti numele fisierului aici:"<<endl;
  182.         cin.getline(numeFisier, 100);
  183.         fisier = true;
  184.     }
  185. }
  186.  
  187. void citireMatrice(int a[11][11], int b[11][11])
  188. {
  189.     fileOrKey();
  190.  
  191.     if(!douaMatrice) {
  192.         cout<<"Introduceti numarul de linii: ";
  193.         cin>>linii1;
  194.         cout<<"Introduceti numarul de coloane: ";
  195.         cin>>coloane1;
  196.     }
  197.     else {
  198.         cout<<"Introduceti numarul de linii pentru prima matrice: ";
  199.         cin>>linii1;
  200.         cout<<"Introduceti numarul de coloane pentru prima matrice: ";
  201.         cin>>coloane1;
  202.         cout<<"Introduceti numarul de linii pentru a doua matrice: ";
  203.         cin>>linii2;
  204.         cout<<"Introduceti numarul de coloane pentru a doua matrice: ";
  205.         cin>>coloane2;
  206.     }
  207.  
  208.  
  209.     if(fisier) {
  210.         FILE *f = fopen(numeFisier, "r");
  211.         if(f == NULL) {
  212.             cout<<"Fisierul nu a fost gasit!"<<endl;
  213.             exit(1);
  214.         }
  215.         if(!douaMatrice) {
  216.             for(int i = 1; i <= linii1; i++)
  217.                 for(int j = 1; j <= coloane1; j++)
  218.                     fscanf(f, "%d", &a[i][j]);
  219.         }
  220.         else {
  221.             for(int i = 1; i <= linii1; i++)
  222.                 for(int j = 1; j <= coloane1; j++)
  223.                     fscanf(f, "%d", &a[i][j]);
  224.             for(int i = 1; i <= linii2; i++)
  225.                 for(int j = 1; j <= coloane2; j++)
  226.                     fscanf(f, "%d", &b[i][j]);
  227.         }
  228.  
  229.  
  230.         fclose(f);
  231.     }
  232.     else {
  233.         for(int i = 1; i <= linii1; i++)
  234.             for(int j = 1; j <= coloane1; j++)
  235.                 cin>>a[i][j];
  236.         for(int i = 1; i <= linii2; i++)
  237.             for(int j = 1; j <= coloane2; j++)
  238.                 cin>>b[i][j];
  239.     }
  240. }
  241.  
  242. void introM()
  243. {
  244.     cout<<"Introduceti operatia dorita: ";
  245.     cin.getline(operatie, 20);
  246.     if(strcmp(operatie, "+") == 0 || strcmp(operatie, "plus") == 0 || strcmp(operatie, "adunare") == 0)
  247.         adunare();
  248.     else if(strcmp(operatie, "-") == 0 || strcmp(operatie, "minus") == 0 || strcmp(operatie, "scadere") == 0)
  249.         scadere();
  250.     else if(strcmp(operatie, "det") == 0 || strcmp(operatie, "||") == 0 || strcmp(operatie, "determinant") == 0)
  251.         determinant();
  252.     else if(strcmp(operatie, "*") == 0 || strcmp(operatie, "ori") == 0 || strcmp(operatie, "inmultire") == 0)
  253.         inmultireM(mat1, mat2);
  254.     else if(strcmp(operatie, "^") == 0 || strcmp(operatie, "putere") == 0 || strcmp(operatie, "ridicare la putere") == 0)
  255.         putere();
  256.     else if(strcmp(operatie, "citire1") == 0 || strcmp(operatie, "c1") == 0) /// pt citirea si afisarea unei singure matrice
  257.     {
  258.         citireMatrice(mat1, mat2);
  259.         afisareMat(mat1, mat2);
  260.     }
  261.     else if(strcmp(operatie, "citire2") == 0 || strcmp(operatie, "c2") == 0) /// pt citirea si afisarea a doua matrice
  262.     {
  263.         douaMatrice = true;
  264.         citireMatrice(mat1, mat2);
  265.         afisareMat(mat1, mat2);
  266.     }
  267.     else if(strcmp(operatie, "transpusa") == 0 || strcmp(operatie, "t") == 0)
  268.     {
  269.         transpusa();
  270.     }
  271. }
  272.  
  273. void afisareMat(int a[11][11], int b[11][11]) /// afiseaza matricele introduse
  274. {
  275.     if(!douaMatrice)
  276.     {
  277.         cout<<"Matricea este: "<<endl;
  278.         for(int i = 1; i <= linii1; i++)
  279.         {
  280.             for(int j = 1; j <= coloane1; j++)
  281.                 cout<<a[i][j]<<" ";
  282.             cout<<endl;
  283.         }
  284.     }
  285.     else {
  286.         cout<<"Prima matrice este: "<<endl;
  287.         for(int i = 1; i <= linii1; i++)
  288.         {
  289.             for(int j = 1; j <= coloane1; j++)
  290.                 cout<<a[i][j]<<" ";
  291.             cout<<endl;
  292.         }
  293.         cout<<"A doua matrice este: "<<endl;
  294.         for(int i = 1; i <= linii2; i++)
  295.         {
  296.             for(int j = 1; j <= coloane2; j++)
  297.                 cout<<b[i][j]<<" ";
  298.             cout<<endl;
  299.         }
  300.     }
  301. }
  302.  
  303. void afisareRezultat()
  304. {
  305.     for(int i = 1; i <= linii3; i++)
  306.     {
  307.         for(int j = 1; j <= coloane3; j++)
  308.             cout<<rez[i][j]<<" ";
  309.         cout<<endl;
  310.     }
  311. }
  312.  
  313. void transpusa()
  314. {
  315.     citireMatrice(mat1, mat2);
  316.     linii3 = linii1;
  317.     coloane3 = coloane1;
  318.     for(int i=1; i<=linii1 ; i++)
  319.     {
  320.         for(int j=1; j<=coloane1 ;j++)
  321.         {
  322.           rez[j][i] = mat1[i][j];
  323.         }
  324.     }
  325.     afisareRezultat();
  326. }
  327.  
  328. /*
  329. /// functii pt vectori
  330. void introV()
  331. {
  332.     cout<<"Introduceti operatia dorita: ";
  333.     cin.getline(operatie, 30);
  334.     if(strcmp(operatie, "+") == 0 || strcmp(operatie, "plus") == 0 || strcmp(operatie, "adunare") == 0)
  335.     adunareElV();
  336.     else if(strcmp(operatie, "*") == 0 || strcmp(operatie, "ori") == 0 || strcmp(operatie, "inmultire") == 0)
  337.     inmultireElV();
  338.     else if(strcmp(operatie, "shift") == 0 || strcmp(operatie, "shiftare") == 0)
  339.     {
  340.         cout<<"La stanga sau la dreapta? ";
  341.         cin.getline(stgSauDr, 10);
  342.         if(strcmp(stgSauDr, "stanga") == 0 || strcmp(stgSauDr, "stg") == 0 || strcmp(stgSauDr, "s") == 0)
  343.             shiftareStgV();
  344.         else if(strcmp(stgSauDr, "dreapta") == 0 || strcmp(stgSauDr, "dr") == 0 || strcmp(stgSauDr, "d") == 0)
  345.             shiftareDrV();
  346.     }
  347.     else if(strcmp(operatie, "sortare") == 0)
  348.     {
  349.         cout<<"Crescator sau descrescator? ";
  350.         cin.getline(crescSauDescresc, 10);
  351.         if(strcmp(crescSauDescresc, "crescator") == 0 || strcmp(crescSauDescresc, "cresc") == 0 || strcmp(crescSauDescresc, "c") == 0)
  352.             sortareCrescV();
  353.         else if(strcmp(crescSauDescresc, "descrescator") == 0 || strcmp(crescSauDescresc, "descresc") == 0 || strcmp(crescSauDescresc, "d") == 0)
  354.             sortareDescrescV();
  355.     }
  356.     else if(strcmp(operatie, "citire") == 0)
  357.     {
  358.         citireVector(vec);
  359.         afisareVector(vec);
  360.     }
  361.     else if(strcmp(operatie, "inmultire scalar") == 0 || strcmp(operatie, "* scalar") == 0)
  362.         inmultirescalarV();
  363. }
  364. */
  365.  
RAW Paste Data