Mnozenie macierzy z zapisem do pliku
Kod był wyświetlany 1775 razy.
     /*
  Name: Mnozenie macierzy z zapisem do pliku
  Copyright: GPL GNU
  Date: 25-02-11 10:07
  Description: 
*/

  #include <stdio.h>
  #include <stdlib.h>
  #include<conio.h>
  
   
  typedef struct
 {
     int n; // Wymiar macierzy
    long **m; // Tablica tablic (wierszy)
   } matrix; // Definicja nowego typu matrix (struktury)
   // Funkcja odczytujaca dwie macierze kwadratowe a i b.
  // Wczesniej odczytywana jest informacja o wymiarze macierzy
 // i alokowana jest stosowna pamiec.
  
  void readmatrix (matrix * a, matrix * b)
  {
    int i, j;
     printf("\n\n\tPodaj rozmiar macierzy n x n liczbe wierszy i kolumn:  ");  
             scanf ("%d", &(a->n));
             b->n = a->n;
   // Alokacja pamieci na a;
   a->m = (long **) malloc ((a->n) * sizeof (long *));
  
   for (i = 0; i < a->n; i++)
       {
      a->m[i] = (long *) malloc ((a->n) * sizeof (long *));
           }
    // Alokacja pamieci na b;
     b->m = (long **) malloc ((b->n) * sizeof (long *));
     
     printf("\n\n\tPodaj dane dla macierzy A i B\n\n"); 
     
    for (i = 0; i < b->n; i++)
       {
       b->m[i] = (long *) malloc ((b->n) * sizeof (long *));
       }
        for (i = 0; i < a->n; i++)
        for (j = 0; j < a->n; j++)
            scanf ("%ld", &(a->m[i][j])); // Odczytywanie wspolrzednych a
        for (i = 0; i < b->n; i++) 
        for (j = 0; j < b->n; j++)      // Odczytywanie wspolrzednych b
             scanf ("%ld", &(b->m[i][j]));
        }
   
   // Funckja mnozaca macierze a i b
  // zwracana jest macierz bedaca iloczynem
   matrix mulmatrix (const matrix * a, const matrix * b)
   {
     matrix w;
    int x, y, i;
    long z;
        w.n = a->n;
        w.m = (long **) malloc ((w.n) * sizeof (long *));
     for (i = 0; i < w.n; i++)
      {
       w.m[i] = (long *) malloc ((w.n) * sizeof (long *));
      }
   
     for (x = 0; x < w.n; x++)
       for (y = 0; y < w.n; y++)
         {
           z = 0;
          for (i = 0; i < w.n; i++)
             z = z + a->m[x][i] * b->m[i][y];
       w.m[x][y] = z;
        }
   return w;
   }
 
  // Prosta funckja wyswietlajaca macierz na ekranie 
   void wyswietl (matrix * m)
   {
    int i, j;
    for (i = 0; i < m->n; i++)
      {
       for (j = 0; j < m->n; j++)
          printf ("%8ld", m->m[i][j]);
        printf ("\n");
      }
    printf ("\n\n");
        }

   void writematrix (matrix *m, char* nazwapliku)
           {
             FILE *p;
             if(!p)
             {
                   printf("Blad zapisu do pliku.");
                   exit(-1);
                   }
             p=fopen(nazwapliku,"w");
             fprintf(p,"%d\n",m->n);
             for(int i=0;i<m->n;i++)
             {
               for(int j=0;j<m->n;j++)
               fprintf(p,"%ld ",m->m[i][j]);
               fputc('\n',p);
               }
               fclose(p);
               }   
               
     matrix a, b, w;
  
    // Macierze zczytywane sa ze standartowego wejscia
      int main ()
   { 
             readmatrix (&a, &b);
             printf ("Macierz A:\n\n");
             wyswietl (&a);
             printf ("Macierz B:\n\n");
             wyswietl (&b);
             w = mulmatrix (&a, &b);
             printf ("Macierz A*B:\n\n");
             wyswietl (&w);
             writematrix(&w,"wyniki.txt");
             getch();
       return 0;
   }	 
    
Pobierz plik tekstowy
Administrator WJL
PHP&SQL coded by NOVA-IT