Advertisement
Hyluss

CRS COO macierz rzadka

Jun 7th, 2016
276
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 6.09 KB | None | 0 0
  1. // MojeMACIERZ.cpp : Defines the entry point for the console application.
  2. //
  3.  
  4. #include "stdafx.h"
  5. #include <conio.h>
  6. #include <malloc.h>
  7.  
  8. struct MacierzCOO
  9. {
  10.         int Wiersz;
  11.         int Kolumna;
  12.         float Wartosc;
  13. };
  14.  
  15. struct MacierzRzadka
  16. {
  17.     int licznik;
  18.     struct MacierzCOO *MC;
  19. };
  20.  
  21.  
  22. struct MacierzNormalna
  23. {
  24.         float **tab;
  25.         int Wiersze;
  26.         int Kolumny;
  27. };
  28.  
  29. void Sumuj (MacierzRzadka *MacierzPrzekazana, int w)
  30. {
  31.     float suma=0;
  32.     for (int i=0;i<MacierzPrzekazana->licznik; i++)
  33.     {
  34.         if (MacierzPrzekazana->MC[i].Wiersz == w)
  35.         {
  36.             suma = MacierzPrzekazana->MC[i].Wartosc + suma;
  37.         }
  38.     }
  39.     printf ("Wyswietl sume w %d wierszu - %f\n",w,suma);
  40. }
  41.  
  42. void WyswietlMacierzCOO(MacierzRzadka *MacierzPrzekazana)
  43. {
  44.     printf ("[Wartosc]  Wiersze Kolumny\n");
  45.     for (int i=0; i<MacierzPrzekazana->licznik;i++)
  46.     {
  47.         printf ("%d - %.3f  %d  %d\n",i+1,MacierzPrzekazana->MC[i].Wartosc,MacierzPrzekazana->MC[i].Wiersz,MacierzPrzekazana->MC[i].Kolumna);
  48.     }
  49. }
  50.  
  51. void StworzCOO (MacierzNormalna *MacierzPrzekazana, MacierzRzadka *MacierzR)
  52. {
  53.  
  54.     int licznik=0;
  55.     for (int w=0; w < MacierzPrzekazana->Wiersze ; w++)
  56.     {
  57.         for (int k=0; k < MacierzPrzekazana->Kolumny ; k++)
  58.         {
  59.                 if (MacierzPrzekazana->tab[w][k])
  60.                 {
  61.                     licznik++;
  62.                     if (licznik==1)
  63.                     {
  64.                         MacierzR->MC = (MacierzCOO*) malloc(sizeof(MacierzCOO));
  65.                     }
  66.                     else
  67.                     {
  68.                         MacierzR->MC = (MacierzCOO*) realloc(MacierzR->MC,sizeof (MacierzCOO)*licznik);
  69.                     }
  70.                     MacierzR->MC[licznik-1].Wiersz = w;
  71.                     MacierzR->MC[licznik-1].Kolumna = k;
  72.                     MacierzR->MC[licznik-1].Wartosc = MacierzPrzekazana->tab[w][k];
  73.                     printf ("%f \n",MacierzR->MC[licznik-1].Wartosc);   //
  74.                 }
  75.         }
  76.     }
  77.     MacierzR->licznik = licznik;
  78. }
  79.  
  80. bool WczytajMacierz (MacierzNormalna *MacierzPrzekazana)
  81. {
  82.     int licznik=0;
  83.     FILE *plik = fopen ("Macierz.txt","r");
  84.     if (plik !=NULL)
  85.     {
  86.         fscanf (plik,"%d %d", &MacierzPrzekazana->Wiersze, &MacierzPrzekazana->Kolumny);
  87. //tab dyn
  88.         MacierzPrzekazana->tab = (float**) malloc (sizeof (float)*(MacierzPrzekazana->Wiersze));
  89.         for (int w=0; w < MacierzPrzekazana->Wiersze ;w++)
  90.         {
  91.             MacierzPrzekazana->tab[w]=(float*) malloc (sizeof (float)*MacierzPrzekazana->Kolumny);
  92.         }
  93. //wypelnienie
  94.         for (int w=0; w < MacierzPrzekazana->Wiersze ; w++)
  95.         {
  96.             for (int k=0; k < MacierzPrzekazana->Kolumny ; k++)
  97.             {
  98.                 fscanf (plik,"%f",&MacierzPrzekazana->tab[w][k]);
  99.             }
  100.         }
  101.         fclose(plik); return true;
  102.     }else fclose(plik); return false;
  103. }
  104.    
  105.  
  106.  
  107.  
  108. struct MacierzKolumn
  109. {
  110.     float wartosc;
  111.     int nrkolumny;
  112. };
  113.  
  114. struct MacierzWiersz
  115. {
  116.     int nrwiersza, polozenie;
  117. };
  118.  
  119. struct MacierzCRS
  120. {
  121.     struct  MacierzKolumn *MK;
  122.     struct  MacierzWiersz *MW;
  123.     int iloswiersz;
  124.     int ilosckolumna;
  125. };
  126.  
  127.  
  128. void StworzC (MacierzNormalna *MacierzPrzekazana, MacierzCRS *MacierzC)
  129. {
  130.     int licznik=0, element=0,licznik2=0;
  131.  
  132.     for (int w=0; w < MacierzPrzekazana->Wiersze ; w++)
  133.     {
  134.         element=0;
  135.         for (int k=0; k < MacierzPrzekazana->Kolumny ; k++)
  136.         {
  137.                 if (MacierzPrzekazana->tab[w][k])
  138.                 {
  139.                     licznik++;
  140.                     if (licznik==1)
  141.                     {
  142.                     //  MacierzPrzekazana->Elementy_struktura->eletab = (float*) malloc ((licznik)*sizeof (float));         //tworzenie drugiej MACIERZY
  143.                         MacierzC->MK = (MacierzKolumn*) malloc(sizeof(MacierzKolumn));
  144.                     }
  145.                     else
  146.                     {
  147.                         MacierzC->MK = (MacierzKolumn*) realloc(MacierzC->MK,sizeof (MacierzKolumn)*licznik);
  148.                     }
  149.                     MacierzC->MK[licznik-1].nrkolumny = k;
  150.                     MacierzC->MK[licznik-1].wartosc = MacierzPrzekazana->tab[w][k];
  151.  
  152.                     if (!element)
  153.                     {
  154.                         licznik2++;
  155.                         if (licznik2==1)
  156.                         {
  157.                             MacierzC->MW = (MacierzWiersz*) malloc(sizeof(MacierzWiersz));
  158.                         }
  159.                         else
  160.                         {
  161.                             MacierzC->MW = (MacierzWiersz*) realloc(MacierzC->MW,sizeof (MacierzWiersz)*licznik);
  162.                         }
  163.                         MacierzC->MW[licznik2-1].nrwiersza = w;
  164.                         MacierzC->MW[licznik2-1].polozenie = licznik;
  165.                         element++;
  166.                     }
  167.                 }
  168.         }
  169.     }
  170.     MacierzC->ilosckolumna = licznik;
  171.     MacierzC->iloswiersz = licznik2;
  172. }
  173.  
  174. void WyswietlMacierzCRS (MacierzCRS *MacierzPrzekazana)
  175. {
  176. //      for (int w=0; w < MacierzPrzekazana->Wiersze ; w++)
  177.  
  178.     for (int k=0; k < MacierzPrzekazana->ilosckolumna ; k++)
  179.     {
  180.     //  MacierzPrzekazana->MK[k].
  181.         for (int w=MacierzPrzekazana->iloswiersz-1 ; w>=0 ;  w--)
  182.         {
  183.             if (MacierzPrzekazana->MW[w].polozenie <= k+1)
  184.             {
  185.                 printf ("%d %d %f\n",MacierzPrzekazana->MW[w].nrwiersza, MacierzPrzekazana->MK[k].nrkolumny, MacierzPrzekazana->MK[k].wartosc);
  186.                 break;
  187.             }
  188.         }
  189.     }          
  190. }
  191.  
  192. float SumaMacierzCRS (MacierzCRS *MacierzPrzekazana, int nrw)
  193. {
  194.     float suma=0;
  195.  
  196.     for (int k=0; k < MacierzPrzekazana->ilosckolumna ; k++)
  197.     {
  198.         for (int w=MacierzPrzekazana->iloswiersz-1 ; w>=0 ;  w--)
  199.         {
  200.             if (MacierzPrzekazana->MW[w].polozenie <= k+1)
  201.             {
  202.                 if (MacierzPrzekazana->MW[w].nrwiersza == nrw)
  203.                 {
  204.                     suma = MacierzPrzekazana->MK[k].wartosc +suma;
  205.                 }
  206.                 break;                 
  207.             }
  208.         }
  209.     }  
  210.     return suma;
  211. }
  212.  
  213. int _tmain(int argc, _TCHAR* argv[])
  214. {
  215.     //MacierzCOO * MCOO;
  216.     MacierzRzadka MacierzR;
  217.     MacierzNormalna MacierzN;
  218.                 if(WczytajMacierz((MacierzNormalna*)&MacierzN)) //Udalo sie wczytac macierz wiec dzialamy
  219.                 {
  220.                     StworzCOO ((MacierzNormalna*)&MacierzN, (MacierzRzadka*)&MacierzR);
  221.                     WyswietlMacierzCOO((MacierzRzadka*)&MacierzR);
  222.                     Sumuj ((MacierzRzadka*)&MacierzR, 2);
  223.                     Sumuj ((MacierzRzadka*)&MacierzR, 3);
  224.                     Sumuj ((MacierzRzadka*)&MacierzR, 4);
  225.                     //    ZwolnijMacierzCOO(MacierzCOO);
  226.                 }
  227.                 else
  228.                 {
  229.                         free((MacierzNormalna*)&MacierzN); //Pamietac o zwolnieniu pamieci
  230.                 }
  231.        
  232.  
  233.     MacierzCRS MacierzC;
  234.     StworzC ((MacierzNormalna*)&MacierzN, (MacierzCRS*)&MacierzC);
  235.     WyswietlMacierzCRS ((MacierzCRS*)&MacierzC);
  236.     for (int i=0; i<10;i++)
  237.     {
  238.         printf ("%.3f\n",SumaMacierzCRS ((MacierzCRS*)&MacierzC,i));
  239.     }
  240.     _getch();
  241.     return 0;
  242. }
  243.  
  244. /* Macierz.txt
  245. 10 3
  246. 0.75 0.00 0.00
  247. 0.25 0.00 0.00
  248. 0.00 0.00 0.00
  249. 0.00 0.00 0.00
  250. 0.00 1.50 0.25
  251. 0.50 0.00 0.00
  252. 0.00 0.00 0.00
  253. 1.75 0.00 0.00
  254. 0.05 0.50 0.00
  255. 55.00 0.00 1.25
  256. */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement