Advertisement
Spa_m

Macierz CRS

May 31st, 2016
487
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.85 KB | None | 0 0
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3. #include <time.h>
  4. #include <memory.h>
  5. #include <string.h>
  6.  
  7. /* globalny typ macierzy i danych z nia zwiazanych */
  8. #define ownedTyp float
  9. int n=10, m=9, k=3;
  10. bool zapisac=true;        //zapisac wyniki do pliku?
  11.  
  12. /* zmienne */
  13. ownedTyp** macierz;
  14. ownedTyp* wektor;
  15. ownedTyp* y;
  16. ownedTyp* z;
  17. int wskaznikWart=0;
  18. int wskaznikKol=0;
  19. ownedTyp* valu;
  20. int* col_ind;
  21. int* row_ptr;
  22.  
  23. /* uzywane funkcje */
  24. ownedTyp losujNormalne();
  25. void macierzA(int n, int m, int k);
  26. void generujCRS();
  27. void zapiszCRS(char* _nazwa);
  28. void zapiszMacierz(char * _nazwa);
  29.  
  30.  
  31. /* losowanie wartosci */
  32. ownedTyp losujNormalne() {
  33.     return ( rand()%(int)((1./2.)*(10000.)) )/(10000.);
  34. }
  35.  
  36. /* generowanie macierzy w postaci zapisu CRS */
  37. void generujCRS() {
  38.     int i,j;
  39.     valu = new ownedTyp [m*n];
  40.     col_ind = new int [m*n];
  41.     row_ptr = new int [m+1];
  42.  
  43.     for (i=0;i<n;i++) {
  44.         row_ptr[wskaznikKol++]=wskaznikWart+1;
  45.         for(j=0;j<m;j++) {
  46.             if ( macierz[i][j]!=0 ) {
  47.                 valu[wskaznikWart]=macierz[i][j];
  48.                 col_ind[wskaznikWart++]=j+1;        //zarazona linijka
  49.             }
  50.         }
  51.     }
  52.     row_ptr[wskaznikKol++]=wskaznikWart;
  53. }
  54.  
  55. /* zapis macierzy CRS do pliku */
  56. void zapiszCRS(char* _nazwa) {
  57.     int i;
  58.  
  59.     FILE* fw;
  60.     fw=fopen(_nazwa,"w");
  61.     fprintf(fw,"val: ");
  62.     for (i=0; i<wskaznikWart; i++) {
  63.         fprintf(fw,"%3.5lf\t", valu[i]);  
  64.     }
  65.     fprintf(fw,"\ncol_ind: ");
  66.     for (i=0; i<wskaznikWart; i++) {
  67.         fprintf(fw,"%d\t", col_ind[i]);  
  68.     }
  69.     fprintf(fw,"\nrow_ptr: ");
  70.     for (i=0; i<wskaznikKol; i++) {
  71.         fprintf(fw,"%d\t", row_ptr[i]);  
  72.     }
  73.  
  74.     fclose(fw);
  75. }
  76.  
  77. /* zapis macierzy normalnej do pliku */
  78. void zapiszMacierz(char * _nazwa) {
  79.     FILE* f;
  80.     f=fopen(_nazwa,"w");
  81.  
  82.     for(int i=0;i<n;i++) {
  83.         for(int j=0; j<m; j++) {
  84.             fprintf(f,"%3.5f\t",macierz[i][j]);
  85.         }
  86.         fprintf(f,"\n");
  87.     }
  88.  
  89.     fclose(f);
  90. }
  91.  
  92. /* generowanie macierzy rzadkiej NxM elementowej */
  93. void macierzA() {
  94.  
  95.     int i,j;
  96.     int wybrano;
  97.     int miejsce;
  98.     macierz = new ownedTyp* [n];
  99.  
  100.     for(i=0;i<n;i++) {
  101.        macierz[i] = new ownedTyp [m];
  102.        memset(macierz[i],0,m*sizeof(ownedTyp));
  103.     }
  104.  
  105.     for(i=0;i<n;i++) {
  106.         wybrano=0;
  107.         while ( wybrano!=k )  {
  108.             do {
  109.                 miejsce = rand()%(m-1);
  110.             } while(macierz[i][miejsce]!=0);
  111.             macierz[i][miejsce] = losujNormalne();
  112.             wybrano++;
  113.         }
  114.     }
  115.  
  116.     generujCRS();
  117.     if (zapisac==true) {
  118.         char file[] = "macierz-CRS.txt";
  119.         zapiszCRS(file);
  120.         char file2[] = "macierz.txt";
  121.         zapiszMacierz(file2);
  122.     }
  123. }
  124.  
  125.  
  126. /* podzial wierszowy cykliczny - CRS */
  127. int main() {
  128.  
  129.   macierzA();
  130.  
  131.   return 0;
  132. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement