Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdlib.h>
- #include <stdio.h>
- #include <time.h>
- #include <memory.h>
- #include <string.h>
- /* globalny typ macierzy i danych z nia zwiazanych */
- #define ownedTyp float
- int n=10, m=9, k=3;
- bool zapisac=true; //zapisac wyniki do pliku?
- /* zmienne */
- ownedTyp** macierz;
- ownedTyp* wektor;
- ownedTyp* y;
- ownedTyp* z;
- int wskaznikWart=0;
- int wskaznikKol=0;
- ownedTyp* valu;
- int* col_ind;
- int* row_ptr;
- /* uzywane funkcje */
- ownedTyp losujNormalne();
- void macierzA(int n, int m, int k);
- void generujCRS();
- void zapiszCRS(char* _nazwa);
- void zapiszMacierz(char * _nazwa);
- /* losowanie wartosci */
- ownedTyp losujNormalne() {
- return ( rand()%(int)((1./2.)*(10000.)) )/(10000.);
- }
- /* generowanie macierzy w postaci zapisu CRS */
- void generujCRS() {
- int i,j;
- valu = new ownedTyp [m*n];
- col_ind = new int [m*n];
- row_ptr = new int [m+1];
- for (i=0;i<n;i++) {
- row_ptr[wskaznikKol++]=wskaznikWart+1;
- for(j=0;j<m;j++) {
- if ( macierz[i][j]!=0 ) {
- valu[wskaznikWart]=macierz[i][j];
- col_ind[wskaznikWart++]=j+1; //zarazona linijka
- }
- }
- }
- row_ptr[wskaznikKol++]=wskaznikWart;
- }
- /* zapis macierzy CRS do pliku */
- void zapiszCRS(char* _nazwa) {
- int i;
- FILE* fw;
- fw=fopen(_nazwa,"w");
- fprintf(fw,"val: ");
- for (i=0; i<wskaznikWart; i++) {
- fprintf(fw,"%3.5lf\t", valu[i]);
- }
- fprintf(fw,"\ncol_ind: ");
- for (i=0; i<wskaznikWart; i++) {
- fprintf(fw,"%d\t", col_ind[i]);
- }
- fprintf(fw,"\nrow_ptr: ");
- for (i=0; i<wskaznikKol; i++) {
- fprintf(fw,"%d\t", row_ptr[i]);
- }
- fclose(fw);
- }
- /* zapis macierzy normalnej do pliku */
- void zapiszMacierz(char * _nazwa) {
- FILE* f;
- f=fopen(_nazwa,"w");
- for(int i=0;i<n;i++) {
- for(int j=0; j<m; j++) {
- fprintf(f,"%3.5f\t",macierz[i][j]);
- }
- fprintf(f,"\n");
- }
- fclose(f);
- }
- /* generowanie macierzy rzadkiej NxM elementowej */
- void macierzA() {
- int i,j;
- int wybrano;
- int miejsce;
- macierz = new ownedTyp* [n];
- for(i=0;i<n;i++) {
- macierz[i] = new ownedTyp [m];
- memset(macierz[i],0,m*sizeof(ownedTyp));
- }
- for(i=0;i<n;i++) {
- wybrano=0;
- while ( wybrano!=k ) {
- do {
- miejsce = rand()%(m-1);
- } while(macierz[i][miejsce]!=0);
- macierz[i][miejsce] = losujNormalne();
- wybrano++;
- }
- }
- generujCRS();
- if (zapisac==true) {
- char file[] = "macierz-CRS.txt";
- zapiszCRS(file);
- char file2[] = "macierz.txt";
- zapiszMacierz(file2);
- }
- }
- /* podzial wierszowy cykliczny - CRS */
- int main() {
- macierzA();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement