Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // MojeMACIERZ.cpp : Defines the entry point for the console application.
- //
- #include "stdafx.h"
- #include <conio.h>
- #include <malloc.h>
- struct MacierzCOO
- {
- int Wiersz;
- int Kolumna;
- float Wartosc;
- };
- struct MacierzRzadka
- {
- int licznik;
- struct MacierzCOO *MC;
- };
- struct MacierzNormalna
- {
- float **tab;
- int Wiersze;
- int Kolumny;
- };
- void Sumuj (MacierzRzadka *MacierzPrzekazana, int w)
- {
- float suma=0;
- for (int i=0;i<MacierzPrzekazana->licznik; i++)
- {
- if (MacierzPrzekazana->MC[i].Wiersz == w)
- {
- suma = MacierzPrzekazana->MC[i].Wartosc + suma;
- }
- }
- printf ("Wyswietl sume w %d wierszu - %f\n",w,suma);
- }
- void WyswietlMacierzCOO(MacierzRzadka *MacierzPrzekazana)
- {
- printf ("[Wartosc] Wiersze Kolumny\n");
- for (int i=0; i<MacierzPrzekazana->licznik;i++)
- {
- printf ("%d - %.3f %d %d\n",i+1,MacierzPrzekazana->MC[i].Wartosc,MacierzPrzekazana->MC[i].Wiersz,MacierzPrzekazana->MC[i].Kolumna);
- }
- }
- void StworzCOO (MacierzNormalna *MacierzPrzekazana, MacierzRzadka *MacierzR)
- {
- int licznik=0;
- for (int w=0; w < MacierzPrzekazana->Wiersze ; w++)
- {
- for (int k=0; k < MacierzPrzekazana->Kolumny ; k++)
- {
- if (MacierzPrzekazana->tab[w][k])
- {
- licznik++;
- if (licznik==1)
- {
- MacierzR->MC = (MacierzCOO*) malloc(sizeof(MacierzCOO));
- }
- else
- {
- MacierzR->MC = (MacierzCOO*) realloc(MacierzR->MC,sizeof (MacierzCOO)*licznik);
- }
- MacierzR->MC[licznik-1].Wiersz = w;
- MacierzR->MC[licznik-1].Kolumna = k;
- MacierzR->MC[licznik-1].Wartosc = MacierzPrzekazana->tab[w][k];
- printf ("%f \n",MacierzR->MC[licznik-1].Wartosc); //
- }
- }
- }
- MacierzR->licznik = licznik;
- }
- bool WczytajMacierz (MacierzNormalna *MacierzPrzekazana)
- {
- int licznik=0;
- FILE *plik = fopen ("Macierz.txt","r");
- if (plik !=NULL)
- {
- fscanf (plik,"%d %d", &MacierzPrzekazana->Wiersze, &MacierzPrzekazana->Kolumny);
- //tab dyn
- MacierzPrzekazana->tab = (float**) malloc (sizeof (float)*(MacierzPrzekazana->Wiersze));
- for (int w=0; w < MacierzPrzekazana->Wiersze ;w++)
- {
- MacierzPrzekazana->tab[w]=(float*) malloc (sizeof (float)*MacierzPrzekazana->Kolumny);
- }
- //wypelnienie
- for (int w=0; w < MacierzPrzekazana->Wiersze ; w++)
- {
- for (int k=0; k < MacierzPrzekazana->Kolumny ; k++)
- {
- fscanf (plik,"%f",&MacierzPrzekazana->tab[w][k]);
- }
- }
- fclose(plik); return true;
- }else fclose(plik); return false;
- }
- struct MacierzKolumn
- {
- float wartosc;
- int nrkolumny;
- };
- struct MacierzWiersz
- {
- int nrwiersza, polozenie;
- };
- struct MacierzCRS
- {
- struct MacierzKolumn *MK;
- struct MacierzWiersz *MW;
- int iloswiersz;
- int ilosckolumna;
- };
- void StworzC (MacierzNormalna *MacierzPrzekazana, MacierzCRS *MacierzC)
- {
- int licznik=0, element=0,licznik2=0;
- for (int w=0; w < MacierzPrzekazana->Wiersze ; w++)
- {
- element=0;
- for (int k=0; k < MacierzPrzekazana->Kolumny ; k++)
- {
- if (MacierzPrzekazana->tab[w][k])
- {
- licznik++;
- if (licznik==1)
- {
- // MacierzPrzekazana->Elementy_struktura->eletab = (float*) malloc ((licznik)*sizeof (float)); //tworzenie drugiej MACIERZY
- MacierzC->MK = (MacierzKolumn*) malloc(sizeof(MacierzKolumn));
- }
- else
- {
- MacierzC->MK = (MacierzKolumn*) realloc(MacierzC->MK,sizeof (MacierzKolumn)*licznik);
- }
- MacierzC->MK[licznik-1].nrkolumny = k;
- MacierzC->MK[licznik-1].wartosc = MacierzPrzekazana->tab[w][k];
- if (!element)
- {
- licznik2++;
- if (licznik2==1)
- {
- MacierzC->MW = (MacierzWiersz*) malloc(sizeof(MacierzWiersz));
- }
- else
- {
- MacierzC->MW = (MacierzWiersz*) realloc(MacierzC->MW,sizeof (MacierzWiersz)*licznik);
- }
- MacierzC->MW[licznik2-1].nrwiersza = w;
- MacierzC->MW[licznik2-1].polozenie = licznik;
- element++;
- }
- }
- }
- }
- MacierzC->ilosckolumna = licznik;
- MacierzC->iloswiersz = licznik2;
- }
- void WyswietlMacierzCRS (MacierzCRS *MacierzPrzekazana)
- {
- // for (int w=0; w < MacierzPrzekazana->Wiersze ; w++)
- for (int k=0; k < MacierzPrzekazana->ilosckolumna ; k++)
- {
- // MacierzPrzekazana->MK[k].
- for (int w=MacierzPrzekazana->iloswiersz-1 ; w>=0 ; w--)
- {
- if (MacierzPrzekazana->MW[w].polozenie <= k+1)
- {
- printf ("%d %d %f\n",MacierzPrzekazana->MW[w].nrwiersza, MacierzPrzekazana->MK[k].nrkolumny, MacierzPrzekazana->MK[k].wartosc);
- break;
- }
- }
- }
- }
- float SumaMacierzCRS (MacierzCRS *MacierzPrzekazana, int nrw)
- {
- float suma=0;
- for (int k=0; k < MacierzPrzekazana->ilosckolumna ; k++)
- {
- for (int w=MacierzPrzekazana->iloswiersz-1 ; w>=0 ; w--)
- {
- if (MacierzPrzekazana->MW[w].polozenie <= k+1)
- {
- if (MacierzPrzekazana->MW[w].nrwiersza == nrw)
- {
- suma = MacierzPrzekazana->MK[k].wartosc +suma;
- }
- break;
- }
- }
- }
- return suma;
- }
- int _tmain(int argc, _TCHAR* argv[])
- {
- //MacierzCOO * MCOO;
- MacierzRzadka MacierzR;
- MacierzNormalna MacierzN;
- if(WczytajMacierz((MacierzNormalna*)&MacierzN)) //Udalo sie wczytac macierz wiec dzialamy
- {
- StworzCOO ((MacierzNormalna*)&MacierzN, (MacierzRzadka*)&MacierzR);
- WyswietlMacierzCOO((MacierzRzadka*)&MacierzR);
- Sumuj ((MacierzRzadka*)&MacierzR, 2);
- Sumuj ((MacierzRzadka*)&MacierzR, 3);
- Sumuj ((MacierzRzadka*)&MacierzR, 4);
- // ZwolnijMacierzCOO(MacierzCOO);
- }
- else
- {
- free((MacierzNormalna*)&MacierzN); //Pamietac o zwolnieniu pamieci
- }
- MacierzCRS MacierzC;
- StworzC ((MacierzNormalna*)&MacierzN, (MacierzCRS*)&MacierzC);
- WyswietlMacierzCRS ((MacierzCRS*)&MacierzC);
- for (int i=0; i<10;i++)
- {
- printf ("%.3f\n",SumaMacierzCRS ((MacierzCRS*)&MacierzC,i));
- }
- _getch();
- return 0;
- }
- /* Macierz.txt
- 10 3
- 0.75 0.00 0.00
- 0.25 0.00 0.00
- 0.00 0.00 0.00
- 0.00 0.00 0.00
- 0.00 1.50 0.25
- 0.50 0.00 0.00
- 0.00 0.00 0.00
- 1.75 0.00 0.00
- 0.05 0.50 0.00
- 55.00 0.00 1.25
- */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement