//Program otwiera 2 pliki z wygenerowanymi macierzami,
//alokuje pamiec dla 3 tablic, z czego ostatnia jest
//wynikiem mnozenia macierzy przez macierz.
//alokuje pamiec dla 3 tablic, z czego ostatnia jest
//wynikiem mnozenia macierzy przez macierz.
Pierwsza macierz
28 96
49 45
49 45
75 54
04 50
04 50
4045067 0
4027520 0
4027520 0
//Program otwiera 2 pliki z wygenerowanymi macierzami,
//alokuje pamiec dla 3 tablic, z czego ostatnia jest
//wynikiem mnozenia macierzy przez macierz.
#include <cstdlib>
#include <stdio.h>
#include <stdlib.h>
int main()
{
//Zmienne i pliki
int i,j,x,y,z;
int wiersz1, wiersz2, wiersz3, kolumna1, kolumna2, kolumna3;
int **tablica1, **tablica2, **tablica3;
FILE * macierz1;
macierz1 = fopen("pliki/macierz1.txt","r");
fscanf(macierz1,"%d,%d",&wiersz1,&kolumna1);
FILE * macierz2;
macierz2 = fopen("pliki/macierz2.txt","r");
fscanf(macierz2,"%d,%d",&wiersz2,&kolumna2);
FILE * wynik ;
wynik = fopen("pliki/wynik.txt","w+");
//Sprawdzenie czy pliki istnieja
if(!macierz1 && !macierz2)
{
printf("Brak plikow do wczytania!\n");
system("PAUSE");
return EXIT_SUCCESS;
}
//Czy mozliwe jest pomnozenie macierzy
if(wiersz1 != kolumna2)
{
printf("Nie mozna pomnozyc podanych macierzy!\n");
system("PAUSE");
return EXIT_SUCCESS;
}
//Alokowanie pamieci dla pierwszej tablicy
printf("Wykonuje alokacje pamieci dla pierwszej tablicy...\t");
tablica1 = (int**) malloc(sizeof(int*) * wiersz1);
for(i=0; i<wiersz1; i++)
{
tablica1[i] = (int *) malloc(sizeof(int) * kolumna1);
}
printf("Wykonano!\n") ;
//Ladowanie pierwszej macierzy
fscanf(macierz1, "\n");
for(j=0; j<wiersz1; j++)
{
for(i=0; i<kolumna1; i++)
{
fscanf(macierz1," %d",&tablica1[j][i]);
}
fscanf(macierz1,"\n");
}
printf("Wczytywanie pierwszej macierzy zakonczone!\n");
printf("\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~\n");
//Alokowanie pamieci dla drugiej tablicy
printf("Wykonuje alokacje pamieci dla drugiej tablicy...\t");
tablica2 = (int**) malloc(sizeof(int*) * wiersz2);
for(i=0; i<wiersz2; i++)
{
tablica2[i] = (int *) malloc(sizeof(int) * kolumna2);
}
printf("Wykonano!\n");
//Ladowanie drugiej macierzy
fscanf(macierz2, "\n");
for(j=0; j<wiersz2; j++)
{
for(i=0; i<kolumna2; i++)
{
fscanf(macierz2," %d",&tablica2[j][i]);
}
fscanf(macierz2,"\n");
}
printf("Wczytywanie drugiej macierzy zakonczone!\n");
printf("\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~\n");
//Alokowanie pamieci dla tablicy wynikowej
printf("Wykonuje alokacje pamieci dla tablicy wynikowej...\t");
tablica3 = (int**) malloc(sizeof(int*) * wiersz1);
for(i=0; i<wiersz1; i++)
{
tablica3[i] = (int *) malloc(sizeof(int) * kolumna2);
}
printf("Wykonano!\n");
//Mnozenie macierzy
printf("Wykonuje mnozenie macierzy...\n");
i = 0; j = 0;
for(z=0; z<kolumna1; z++)
{
for(y=0; y<wiersz2; y++)
{
for(x=0; x<wiersz1; x++)
{
tablica3[j][i] = tablica1[z][x] * tablica2[x][y];
}
}
}
printf("\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~\n");
printf("Wynik macierzy zostal zapisany do pliku 'wynik.txt'");
for(j=0; j<wiersz1; j++)
{
fprintf (wynik, "\n");
for(i=0; i<kolumna2; i++)
{
fprintf (wynik, "\t%d",tablica3[j][i]);
}
}
for(i=0; i<wiersz1; i++)
{
free(tablica1[i]);
}
free(tablica1);
for(i=0; i<wiersz2; i++)
{
free(tablica2[i]);
}
free(tablica2);
for(i=0; i<kolumna1; i++)
{
free(tablica3[i]);
}
free(tablica3);
fclose (macierz1);
fclose (macierz2);
fclose (wynik);
getchar();
return 0;
}
//alokuje pamiec dla 3 tablic, z czego ostatnia jest
//wynikiem mnozenia macierzy przez macierz.
#include <cstdlib>
#include <stdio.h>
#include <stdlib.h>
int main()
{
//Zmienne i pliki
int i,j,x,y,z;
int wiersz1, wiersz2, wiersz3, kolumna1, kolumna2, kolumna3;
int **tablica1, **tablica2, **tablica3;
FILE * macierz1;
macierz1 = fopen("pliki/macierz1.txt","r");
fscanf(macierz1,"%d,%d",&wiersz1,&kolumna1);
FILE * macierz2;
macierz2 = fopen("pliki/macierz2.txt","r");
fscanf(macierz2,"%d,%d",&wiersz2,&kolumna2);
FILE * wynik ;
wynik = fopen("pliki/wynik.txt","w+");
//Sprawdzenie czy pliki istnieja
if(!macierz1 && !macierz2)
{
printf("Brak plikow do wczytania!\n");
system("PAUSE");
return EXIT_SUCCESS;
}
//Czy mozliwe jest pomnozenie macierzy
if(wiersz1 != kolumna2)
{
printf("Nie mozna pomnozyc podanych macierzy!\n");
system("PAUSE");
return EXIT_SUCCESS;
}
//Alokowanie pamieci dla pierwszej tablicy
printf("Wykonuje alokacje pamieci dla pierwszej tablicy...\t");
tablica1 = (int**) malloc(sizeof(int*) * wiersz1);
for(i=0; i<wiersz1; i++)
{
tablica1[i] = (int *) malloc(sizeof(int) * kolumna1);
}
printf("Wykonano!\n") ;
//Ladowanie pierwszej macierzy
fscanf(macierz1, "\n");
for(j=0; j<wiersz1; j++)
{
for(i=0; i<kolumna1; i++)
{
fscanf(macierz1," %d",&tablica1[j][i]);
}
fscanf(macierz1,"\n");
}
printf("Wczytywanie pierwszej macierzy zakonczone!\n");
printf("\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~\n");
//Alokowanie pamieci dla drugiej tablicy
printf("Wykonuje alokacje pamieci dla drugiej tablicy...\t");
tablica2 = (int**) malloc(sizeof(int*) * wiersz2);
for(i=0; i<wiersz2; i++)
{
tablica2[i] = (int *) malloc(sizeof(int) * kolumna2);
}
printf("Wykonano!\n");
//Ladowanie drugiej macierzy
fscanf(macierz2, "\n");
for(j=0; j<wiersz2; j++)
{
for(i=0; i<kolumna2; i++)
{
fscanf(macierz2," %d",&tablica2[j][i]);
}
fscanf(macierz2,"\n");
}
printf("Wczytywanie drugiej macierzy zakonczone!\n");
printf("\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~\n");
//Alokowanie pamieci dla tablicy wynikowej
printf("Wykonuje alokacje pamieci dla tablicy wynikowej...\t");
tablica3 = (int**) malloc(sizeof(int*) * wiersz1);
for(i=0; i<wiersz1; i++)
{
tablica3[i] = (int *) malloc(sizeof(int) * kolumna2);
}
printf("Wykonano!\n");
//Mnozenie macierzy
printf("Wykonuje mnozenie macierzy...\n");
i = 0; j = 0;
for(z=0; z<kolumna1; z++)
{
for(y=0; y<wiersz2; y++)
{
for(x=0; x<wiersz1; x++)
{
tablica3[j][i] = tablica1[z][x] * tablica2[x][y];
}
}
}
printf("\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~\n");
printf("Wynik macierzy zostal zapisany do pliku 'wynik.txt'");
for(j=0; j<wiersz1; j++)
{
fprintf (wynik, "\n");
for(i=0; i<kolumna2; i++)
{
fprintf (wynik, "\t%d",tablica3[j][i]);
}
}
for(i=0; i<wiersz1; i++)
{
free(tablica1[i]);
}
free(tablica1);
for(i=0; i<wiersz2; i++)
{
free(tablica2[i]);
}
free(tablica2);
for(i=0; i<kolumna1; i++)
{
free(tablica3[i]);
}
free(tablica3);
fclose (macierz1);
fclose (macierz2);
fclose (wynik);
getchar();
return 0;
}
Zakładki