Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "myHead1.h"
- void myMenu1(int *polecenie, int* zad)
- {
- puts("**Menu kalkulatora macierzy**\n");
- puts("1.Dodawanie\n2.Odejmowanie\n3.Mnozenie przez skalar\n4.Mnozenie macierzy\n5.Transponowanie\n6.Koniec programu");
- scanf("%d",polecenie);
- *zad = 1;
- }
- void matrixDim(int *wier, int *kol) //Pobranie wymiarów
- {
- puts("Wiersze:");
- scanf("%d",wier);
- puts("Kolumny:");
- scanf("%d",kol);
- }
- double** alokacjaPam(int wier, int kol) //Alokacja pamieci
- {
- double **mat;
- int i;
- mat =(double**)malloc(wier*sizeof(double*));
- if(mat==NULL)
- {
- puts("Błąd alokacji");
- return -1;
- }
- for(i = 0; i < wier; i++)
- {
- mat[i]=(double*)malloc(kol*sizeof(double));
- if(mat[i]==NULL)
- {
- puts("Błąd alokacji");
- return -1;
- }
- }
- return mat;
- }
- void zwolnieniePam(double** mat, int wier) //Zwolnienie pamieci
- {
- int i;
- for(i = 0; i < wier; i++)
- {
- free(mat[i]);
- }
- free(mat);
- }
- void getMatrix(double** mat, int wier, int kol) //Pobieranie danych uzytkownika
- {
- int i;
- int k;
- for(i = 0; i < wier; i++)
- {
- for(k = 0; k < kol; k++)
- {
- printf("Element[%d][%d]", i+1, k+1);
- scanf("%lf",&mat[i][k]);
- }
- }
- }
- void printMatrix(double** mat, int wier, int kol) //Przedstawienie danych
- {
- int i;
- int k;
- for(i = 0; i < wier; i++)
- {
- for(k = 0; k < kol; k++)
- {
- printf("%.2lf ", mat[i][k]);
- }
- printf("\n\n");
- }
- }
- int addMatrix(double** mA, double** mB, double** wyn)
- {
- FILE *txt;
- int wierA, kolA;
- int wierB, kolB;
- int i, k;
- puts("Podaj wymiary macierzy A:");
- matrixDim(&wierA, &kolA);
- puts("Podaj wymiary macierzy B:");
- matrixDim(&wierB, &kolB);
- if(wierA != wierB || kolA != kolB) //Sprawdzenie czy wymiary sa rowne
- {
- return 1;
- }
- mA = alokacjaPam(wierA, kolA);
- mB = alokacjaPam(wierB, kolB);
- wyn = alokacjaPam(wierA, kolA);
- puts("Macierz A:");
- getMatrix(mA, wierA, kolA);
- puts("Macierz B:");
- getMatrix(mB, wierB, kolB);
- for (i = 0; i < wierA; i++) //dodawanie macierzy
- {
- for(k = 0; k < kolA; k++)
- {
- wyn[i][k]=mA[i][k]+mB[i][k];
- }
- }
- puts("Macierz A:");
- printMatrix(mA, wierA, kolA);
- puts("Macierz B:");
- printMatrix(mB, wierB, kolB);
- puts("Suma macierzy A i B:");
- printMatrix(wyn, wierA, kolA);
- if ((txt=fopen("suma.txt", "w"))==NULL)
- {
- printf ("Nie mogę otworzyć pliku do zapisu\n"); //Blad
- exit(1);
- }
- for(i = 0; i < wierA; i++) //Zapis do pliku suma.txt
- {
- for(k = 0; k < kolA; k++)
- {
- fprintf (txt, "%.2lf ", wyn[i][k]);
- }
- fprintf(txt, "\n");
- }
- fclose (txt);
- zwolnieniePam(mB, wierB); //Zwolnienie pamieci
- zwolnieniePam(mA, wierA);
- zwolnieniePam(wyn, wierA);
- return 0;
- }
- int subMatrix(double** mA, double** mB, double** wyn)
- {
- FILE *txt;
- int wierA, kolA;
- int wierB, kolB;
- int i, k;
- int pytanie, warunek = 1;
- puts("Podaj wymiary macierzy A:");
- matrixDim(&wierA, &kolA);
- puts("Podaj wymiary macierzy B:");
- matrixDim(&wierB, &kolB);
- if(wierA != wierB || kolA != kolB) //Sprawdzenie czy wymiary sa rowne
- {
- return 1;
- }
- mA = alokacjaPam(wierA, kolA);
- mB = alokacjaPam(wierB, kolB);
- wyn = alokacjaPam(wierA, kolA);
- puts("Macierz A:");
- getMatrix(mA, wierA, kolA);
- puts("Macierz B:");
- getMatrix(mB, wierB, kolB);
- while(warunek)
- {
- puts("1. A-B\n2. B-A");
- scanf("%d", &pytanie);
- if(pytanie == 1)
- {
- for (i = 0; i < wierA; i++) //A-B
- {
- for(k = 0; k < kolA; k++)
- {
- wyn[i][k]=mA[i][k]-mB[i][k];
- }
- }
- warunek = 0;
- }
- else if(pytanie == 2)
- {
- for (i = 0; i < wierA; i++) //B-A
- {
- for(k = 0; k < kolA; k++)
- {
- wyn[i][k]=mB[i][k]-mA[i][k];
- }
- }
- warunek = 0;
- }
- else
- {
- puts("wpisz 1 lub 2");
- }
- }
- puts("Macierz A:");
- printMatrix(mA, wierA, kolA);
- puts("Macierz B:");
- printMatrix(mB, wierB, kolB);
- puts("Roznica macierzy A i B:");
- printMatrix(wyn, wierA, kolA);
- if ((txt=fopen("roznica.txt", "w"))==NULL) //Blad
- {
- printf ("Nie mogę otworzyć pliku do zapisu\n");
- exit(1);
- }
- if(pytanie == 1)
- {
- fprintf(txt, "*A-B*\n");
- }
- else
- {
- fprintf(txt, "*B-A*\n");
- }
- for(i = 0; i < wierA; i++) //Zapis do pliku roznica.txt
- {
- for(k = 0; k < kolA; k++)
- {
- fprintf (txt, "%.2lf ", wyn[i][k]);
- }
- fprintf(txt, "\n");
- }
- fclose (txt);
- zwolnieniePam(mB, wierB); //Zwolnienie pamieci
- zwolnieniePam(mA, wierA);
- zwolnieniePam(wyn, wierA);
- return 0;
- }
- void scalMatrix(double** mA, double** wyn)
- {
- FILE *txt;
- int wierA, kolA;
- int i, k;
- double skalar;
- puts("Podaj wymiary macierzy A:");
- matrixDim(&wierA, &kolA);
- puts("Podaj skalar");
- scanf("%lf", &skalar);
- mA = alokacjaPam(wierA, kolA);
- wyn = alokacjaPam(wierA, kolA);
- puts("Macierz A:");
- getMatrix(mA, wierA, kolA);
- for (i = 0; i < wierA; i++) //A*skalar
- {
- for(k = 0; k < kolA; k++)
- {
- wyn[i][k]=mA[i][k]*skalar;
- }
- }
- puts("Macierz A:");
- printMatrix(mA, wierA, kolA);
- printf("Skalar: %.2lf\nA*%.2lf:\n", skalar, skalar);
- printMatrix(wyn, wierA, kolA);
- if ((txt=fopen("A_x_skalar.txt", "w"))==NULL)
- {
- printf ("Nie mogę otworzyć pliku do zapisu\n"); //Blad
- exit(1);
- }
- fprintf(txt, "%.2lf", skalar);
- for(i = 0; i < wierA; i++) //Zapis do pliku A_x_skalar.txt
- {
- for(k = 0; k < kolA; k++)
- {
- fprintf (txt, "%.2lf ", wyn[i][k]);
- }
- fprintf(txt, "\n");
- }
- fclose (txt);
- //Zwolnienie pamieci
- zwolnieniePam(mA, wierA);
- zwolnieniePam(wyn, wierA);
- }
- int multiMatrix(double** mA, double** mB, double** wyn)
- {
- FILE *txt;
- int wierA, kolA;
- int wierB, kolB;
- int i, j, k;
- int sum;
- puts("Podaj wymiary macierzy A:");
- matrixDim(&wierA, &kolA);
- puts("Podaj wymiary macierzy B:");
- matrixDim(&wierB, &kolB);
- if(kolA != wierB) //Sprawdzenie warunku mnozenia
- {
- return 1;
- }
- mA = alokacjaPam(wierA, kolA); //Alokacja pamieci
- mB = alokacjaPam(wierB, kolB);
- wyn = alokacjaPam(wierA, kolB);
- puts("Macierz pierwsza:");
- getMatrix(mA, wierA, kolA);
- puts("Macierz druga:");
- getMatrix(mB, wierB, kolB);
- for(i = 0; i < wierA; i++) //Mnozenie AxB
- for(j = 0; j < kolB; j++)
- {
- sum = 0;
- for(k = 0; k < kolA; k++) sum += mA[i][k] * mB[k][j];
- wyn[i][j] = sum;
- }
- puts("Macierz A:");
- printMatrix(mA, wierA, kolA);
- puts("Macierz B:");
- printMatrix(mB, wierB, kolB);
- puts("Iloczyn macierzy A i B");
- printMatrix(wyn, wierA, kolB);
- if ((txt=fopen("iloczyn.txt", "w"))==NULL)
- {
- printf ("Nie mogę otworzyć pliku do zapisu\n"); //Blad
- exit(1);
- }
- for(i = 0; i < wierA; i++) //Zapis do pliku iloczyn.txt
- {
- for(j = 0; j < kolB; j++)
- {
- fprintf (txt, "%.2lf ", wyn[i][j]);
- }
- fprintf(txt, "\n");
- }
- fclose (txt);
- zwolnieniePam(mA, wierA); //Zwolnienie pamieci
- zwolnieniePam(mB, wierB);
- zwolnieniePam(wyn, wierA);
- return 0;
- }
- void transMatrix(double** mA, double** wyn)
- {
- FILE *txt;
- int wierA, kolA;
- int i, k;
- puts("Podaj wymiary macierzy A:");
- matrixDim(&wierA, &kolA);
- mA = alokacjaPam(wierA, kolA); //Alokacja pamieci
- wyn = alokacjaPam(kolA, wierA);
- puts("Macierz pierwsza:");
- getMatrix(mA, wierA, kolA);
- for (i = 0; i < kolA; i++) //Transponowanie
- {
- for(k = 0; k < wierA; k++)
- {
- wyn[i][k]=mA[k][i];
- }
- }
- puts("Macierz A:");
- printMatrix(mA, wierA, kolA);
- puts("Macierz A transponowana:");
- printMatrix(wyn, kolA, wierA);
- if ((txt=fopen("transp.txt", "w"))==NULL)
- {
- printf ("Nie mogę otworzyć pliku do zapisu\n"); //Blad
- exit(1);
- }
- for (i = 0; i < kolA; i++) //Zapis do pliku transp.txt
- {
- for(k = 0; k < wierA; k++)
- {
- fprintf (txt, "%.2lf ", wyn[i][k]);
- }
- fprintf(txt, "\n");
- }
- fclose (txt);
- zwolnieniePam(mA, wierA); //Zwolnienie pamieci
- zwolnieniePam(wyn, kolA);
- }
Advertisement
Add Comment
Please, Sign In to add comment