kaburen

Untitled

Jan 31st, 2019
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 10.12 KB | None | 0 0
  1. #include "myHead1.h"
  2.  
  3. void myMenu1(int *polecenie, int* zad)
  4. {
  5.     puts("**Menu kalkulatora macierzy**\n");
  6.     puts("1.Dodawanie\n2.Odejmowanie\n3.Mnozenie przez skalar\n4.Mnozenie macierzy\n5.Transponowanie\n6.Koniec programu");
  7.     scanf("%d",polecenie);
  8.     *zad = 1;
  9. }
  10.  
  11.  
  12. void matrixDim(int *wier, int *kol)                        //Pobranie wymiarów
  13. {
  14.     puts("Wiersze:");
  15.     scanf("%d",wier);
  16.     puts("Kolumny:");
  17.     scanf("%d",kol);
  18. }
  19.  
  20.  
  21. double** alokacjaPam(int wier, int kol)                     //Alokacja pamieci
  22. {
  23.     double **mat;
  24.     int i;
  25.     mat =(double**)malloc(wier*sizeof(double*));
  26.     if(mat==NULL)
  27.     {
  28.         puts("Błąd alokacji");
  29.         return -1;
  30.     }
  31.  
  32.     for(i = 0; i < wier; i++)
  33.     {
  34.         mat[i]=(double*)malloc(kol*sizeof(double));
  35.         if(mat[i]==NULL)
  36.         {
  37.             puts("Błąd alokacji");
  38.             return -1;
  39.         }
  40.     }
  41.     return mat;
  42. }
  43.  
  44.  
  45. void zwolnieniePam(double** mat, int wier)                      //Zwolnienie pamieci
  46. {
  47.     int i;
  48.     for(i = 0; i < wier; i++)
  49.     {
  50.         free(mat[i]);
  51.     }
  52.  
  53.     free(mat);
  54. }
  55.  
  56.  
  57. void getMatrix(double** mat, int wier, int kol)             //Pobieranie danych uzytkownika
  58. {
  59.     int i;
  60.     int k;
  61.  
  62.     for(i = 0; i < wier; i++)
  63.     {
  64.         for(k = 0; k < kol; k++)
  65.         {
  66.             printf("Element[%d][%d]", i+1, k+1);
  67.             scanf("%lf",&mat[i][k]);
  68.         }
  69.     }
  70. }
  71.  
  72.  
  73. void printMatrix(double** mat, int wier, int kol)           //Przedstawienie danych
  74. {
  75.  
  76.     int i;
  77.     int k;
  78.  
  79.     for(i = 0; i < wier; i++)
  80.     {
  81.         for(k = 0; k < kol; k++)
  82.         {
  83.             printf("%.2lf ", mat[i][k]);
  84.         }
  85.         printf("\n\n");
  86.     }
  87. }
  88.  
  89.  
  90. int addMatrix(double** mA, double** mB, double** wyn)
  91. {
  92.     FILE *txt;
  93.     int wierA, kolA;
  94.     int wierB, kolB;
  95.     int i, k;
  96.  
  97.     puts("Podaj wymiary macierzy A:");
  98.     matrixDim(&wierA, &kolA);
  99.     puts("Podaj wymiary macierzy B:");
  100.     matrixDim(&wierB, &kolB);
  101.  
  102.     if(wierA != wierB || kolA != kolB)                                          //Sprawdzenie czy wymiary sa rowne
  103.     {
  104.         return 1;
  105.     }
  106.  
  107.     mA = alokacjaPam(wierA, kolA);
  108.     mB = alokacjaPam(wierB, kolB);
  109.     wyn = alokacjaPam(wierA, kolA);
  110.  
  111.     puts("Macierz A:");
  112.     getMatrix(mA, wierA, kolA);
  113.     puts("Macierz B:");
  114.     getMatrix(mB, wierB, kolB);
  115.  
  116.     for (i = 0; i < wierA; i++)                                             //dodawanie macierzy
  117.     {
  118.         for(k = 0; k < kolA; k++)
  119.         {
  120.             wyn[i][k]=mA[i][k]+mB[i][k];
  121.         }
  122.     }
  123.  
  124.     puts("Macierz A:");
  125.     printMatrix(mA, wierA, kolA);
  126.     puts("Macierz B:");
  127.     printMatrix(mB, wierB, kolB);
  128.     puts("Suma macierzy A i B:");
  129.     printMatrix(wyn, wierA, kolA);
  130.  
  131.     if ((txt=fopen("suma.txt", "w"))==NULL)
  132.     {
  133.         printf ("Nie mogę otworzyć pliku do zapisu\n");                      //Blad
  134.         exit(1);
  135.     }
  136.     for(i = 0; i < wierA; i++)                                              //Zapis do pliku suma.txt
  137.     {
  138.         for(k = 0; k < kolA; k++)
  139.         {
  140.             fprintf (txt, "%.2lf ", wyn[i][k]);
  141.         }
  142.         fprintf(txt, "\n");
  143.     }
  144.     fclose (txt);
  145.  
  146.     zwolnieniePam(mB, wierB);                                              //Zwolnienie pamieci
  147.     zwolnieniePam(mA, wierA);
  148.     zwolnieniePam(wyn, wierA);
  149.  
  150.     return 0;
  151. }
  152.  
  153.  
  154. int subMatrix(double** mA, double** mB, double** wyn)
  155. {
  156.     FILE *txt;
  157.     int wierA, kolA;
  158.     int wierB, kolB;
  159.     int i, k;
  160.     int pytanie, warunek = 1;
  161.  
  162.     puts("Podaj wymiary macierzy A:");
  163.     matrixDim(&wierA, &kolA);
  164.     puts("Podaj wymiary macierzy B:");
  165.     matrixDim(&wierB, &kolB);
  166.  
  167.     if(wierA != wierB || kolA != kolB)                                          //Sprawdzenie czy wymiary sa rowne
  168.     {
  169.         return 1;
  170.     }
  171.  
  172.     mA = alokacjaPam(wierA, kolA);
  173.     mB = alokacjaPam(wierB, kolB);
  174.     wyn = alokacjaPam(wierA, kolA);
  175.  
  176.     puts("Macierz A:");
  177.     getMatrix(mA, wierA, kolA);
  178.     puts("Macierz B:");
  179.     getMatrix(mB, wierB, kolB);
  180.  
  181.     while(warunek)
  182.     {
  183.         puts("1. A-B\n2. B-A");
  184.         scanf("%d", &pytanie);
  185.         if(pytanie == 1)
  186.         {
  187.             for (i = 0; i < wierA; i++)                                             //A-B
  188.             {
  189.                 for(k = 0; k < kolA; k++)
  190.                 {
  191.                     wyn[i][k]=mA[i][k]-mB[i][k];
  192.                 }
  193.             }
  194.             warunek = 0;
  195.         }
  196.         else if(pytanie == 2)
  197.         {
  198.             for (i = 0; i < wierA; i++)                                             //B-A
  199.             {
  200.                 for(k = 0; k < kolA; k++)
  201.                 {
  202.                     wyn[i][k]=mB[i][k]-mA[i][k];
  203.                 }
  204.             }
  205.             warunek = 0;
  206.         }
  207.         else
  208.         {
  209.             puts("wpisz 1 lub 2");
  210.         }
  211.     }
  212.     puts("Macierz A:");
  213.     printMatrix(mA, wierA, kolA);
  214.     puts("Macierz B:");
  215.     printMatrix(mB, wierB, kolB);
  216.     puts("Roznica macierzy A i B:");
  217.     printMatrix(wyn, wierA, kolA);
  218.  
  219.     if ((txt=fopen("roznica.txt", "w"))==NULL)                                    //Blad
  220.     {
  221.         printf ("Nie mogę otworzyć pliku do zapisu\n");
  222.         exit(1);
  223.     }
  224.     if(pytanie == 1)
  225.     {
  226.         fprintf(txt, "*A-B*\n");
  227.     }
  228.     else
  229.     {
  230.         fprintf(txt, "*B-A*\n");
  231.     }
  232.  
  233.     for(i = 0; i < wierA; i++)                                              //Zapis do pliku roznica.txt
  234.     {
  235.         for(k = 0; k < kolA; k++)
  236.         {
  237.             fprintf (txt, "%.2lf ", wyn[i][k]);
  238.         }
  239.         fprintf(txt, "\n");
  240.     }
  241.     fclose (txt);
  242.  
  243.     zwolnieniePam(mB, wierB);                                              //Zwolnienie pamieci
  244.     zwolnieniePam(mA, wierA);
  245.     zwolnieniePam(wyn, wierA);
  246.  
  247.     return 0;
  248. }
  249.  
  250.  
  251. void scalMatrix(double** mA, double** wyn)
  252. {
  253.     FILE *txt;
  254.     int wierA, kolA;
  255.     int i, k;
  256.     double skalar;
  257.  
  258.     puts("Podaj wymiary macierzy A:");
  259.     matrixDim(&wierA, &kolA);
  260.     puts("Podaj skalar");
  261.     scanf("%lf", &skalar);
  262.  
  263.     mA = alokacjaPam(wierA, kolA);
  264.     wyn = alokacjaPam(wierA, kolA);
  265.  
  266.     puts("Macierz A:");
  267.     getMatrix(mA, wierA, kolA);
  268.  
  269.     for (i = 0; i < wierA; i++)                                             //A*skalar
  270.     {
  271.         for(k = 0; k < kolA; k++)
  272.         {
  273.             wyn[i][k]=mA[i][k]*skalar;
  274.         }
  275.     }
  276.  
  277.     puts("Macierz A:");
  278.     printMatrix(mA, wierA, kolA);
  279.     printf("Skalar: %.2lf\nA*%.2lf:\n", skalar, skalar);
  280.     printMatrix(wyn, wierA, kolA);
  281.  
  282.     if ((txt=fopen("A_x_skalar.txt", "w"))==NULL)
  283.     {
  284.         printf ("Nie mogę otworzyć pliku do zapisu\n");                      //Blad
  285.         exit(1);
  286.     }
  287.  
  288.     fprintf(txt, "%.2lf", skalar);
  289.  
  290.     for(i = 0; i < wierA; i++)                                              //Zapis do pliku A_x_skalar.txt
  291.     {
  292.         for(k = 0; k < kolA; k++)
  293.         {
  294.             fprintf (txt, "%.2lf ", wyn[i][k]);
  295.         }
  296.         fprintf(txt, "\n");
  297.     }
  298.     fclose (txt);
  299.     //Zwolnienie pamieci
  300.     zwolnieniePam(mA, wierA);
  301.     zwolnieniePam(wyn, wierA);
  302. }
  303.  
  304.  
  305. int multiMatrix(double** mA, double** mB, double** wyn)
  306. {
  307.     FILE *txt;
  308.     int wierA, kolA;
  309.     int wierB, kolB;
  310.     int i, j, k;
  311.     int sum;
  312.  
  313.     puts("Podaj wymiary macierzy A:");
  314.     matrixDim(&wierA, &kolA);
  315.     puts("Podaj wymiary macierzy B:");
  316.     matrixDim(&wierB, &kolB);
  317.  
  318.     if(kolA != wierB)                                                       //Sprawdzenie warunku mnozenia
  319.     {
  320.         return 1;
  321.     }
  322.  
  323.     mA = alokacjaPam(wierA, kolA);                                         //Alokacja pamieci
  324.     mB = alokacjaPam(wierB, kolB);
  325.     wyn = alokacjaPam(wierA, kolB);
  326.  
  327.     puts("Macierz pierwsza:");
  328.     getMatrix(mA, wierA, kolA);
  329.     puts("Macierz druga:");
  330.     getMatrix(mB, wierB, kolB);
  331.  
  332.     for(i = 0; i < wierA; i++)                                             //Mnozenie AxB
  333.         for(j = 0; j < kolB; j++)
  334.         {
  335.             sum = 0;
  336.             for(k = 0; k < kolA; k++) sum += mA[i][k] * mB[k][j];
  337.             wyn[i][j] = sum;
  338.         }
  339.  
  340.     puts("Macierz A:");
  341.     printMatrix(mA, wierA, kolA);
  342.     puts("Macierz B:");
  343.     printMatrix(mB, wierB, kolB);
  344.     puts("Iloczyn macierzy A i B");
  345.     printMatrix(wyn, wierA, kolB);
  346.  
  347.     if ((txt=fopen("iloczyn.txt", "w"))==NULL)
  348.     {
  349.         printf ("Nie mogę otworzyć pliku do zapisu\n");                      //Blad
  350.         exit(1);
  351.     }
  352.  
  353.     for(i = 0; i < wierA; i++)                                              //Zapis do pliku iloczyn.txt
  354.     {
  355.         for(j = 0; j < kolB; j++)
  356.         {
  357.             fprintf (txt, "%.2lf ", wyn[i][j]);
  358.         }
  359.         fprintf(txt, "\n");
  360.     }
  361.     fclose (txt);
  362.  
  363.     zwolnieniePam(mA, wierA);                                           //Zwolnienie pamieci
  364.     zwolnieniePam(mB, wierB);
  365.     zwolnieniePam(wyn, wierA);
  366.  
  367.     return 0;
  368. }
  369.  
  370. void transMatrix(double** mA, double** wyn)
  371. {
  372.     FILE *txt;
  373.     int wierA, kolA;
  374.     int i, k;
  375.  
  376.     puts("Podaj wymiary macierzy A:");
  377.     matrixDim(&wierA, &kolA);
  378.  
  379.     mA = alokacjaPam(wierA, kolA);                                         //Alokacja pamieci
  380.     wyn = alokacjaPam(kolA, wierA);
  381.  
  382.     puts("Macierz pierwsza:");
  383.     getMatrix(mA, wierA, kolA);
  384.  
  385.     for (i = 0; i < kolA; i++)                                             //Transponowanie
  386.     {
  387.         for(k = 0; k < wierA; k++)
  388.         {
  389.             wyn[i][k]=mA[k][i];
  390.         }
  391.     }
  392.  
  393.     puts("Macierz A:");
  394.     printMatrix(mA, wierA, kolA);
  395.     puts("Macierz A transponowana:");
  396.     printMatrix(wyn, kolA, wierA);
  397.  
  398.     if ((txt=fopen("transp.txt", "w"))==NULL)
  399.     {
  400.         printf ("Nie mogę otworzyć pliku do zapisu\n");                      //Blad
  401.         exit(1);
  402.     }
  403.  
  404.     for (i = 0; i < kolA; i++)                                             //Zapis do pliku transp.txt
  405.     {
  406.         for(k = 0; k < wierA; k++)
  407.         {
  408.             fprintf (txt, "%.2lf ", wyn[i][k]);
  409.         }
  410.         fprintf(txt, "\n");
  411.     }
  412.     fclose (txt);
  413.  
  414.     zwolnieniePam(mA, wierA);                                           //Zwolnienie pamieci
  415.     zwolnieniePam(wyn, kolA);
  416.  
  417. }
Advertisement
Add Comment
Please, Sign In to add comment