Macierz rzadka

Odpowiedz Nowy wątek
2010-12-06 13:26
bonifacy
0

Witam szanownych użytkowników, mam takie pytanie czy może ktoś z was pisał program wyświetlający macierze rzadkie ?
Osobiście pojęcia jak to zrobić zacząłem pisać ale utknąłem na tym że przydały by się tu wyznaczniki których nie znam zresztą i tak nie mogę ich użyć.
Zdaję sobie sprawę że wybrałem najłatwiejszy sposób prosząc was zamiast samemu to rozgryźć, ale po tygodniu zmagań przestało mnie to bawić.
Z góry dziękuję za wszelką pomoc.

Pozostało 580 znaków

2010-12-06 13:48
bo
2010-12-06 13:48
0

eee... np tak ?
M[2,3]=4
M[4,4]=8
M[100,100]=1

Pozostało 580 znaków

2010-12-06 14:16
bo
1

@up, i jak masz macierz M 1000x1000, która ma jeden element niezerowy M[235,745]=45, to musisz pamiętać milion liczb. Lekko bez sensu. Lepiej pamiętać jako trójkę (235,475,45).

Pozostało 580 znaków

2010-12-06 14:30
bonifacy
0

Ok ale jak juz bede to pamietal jako trojki to potem jak wyswietle to jako macierz

Jeśli piszesz w C++, to MacierzRzadka powinna być osobnym typem, prawdopodobnie dziedziczącym po Macierzy. Jest to czarna skrzynka, więc powinna zachowywać się jak zwykła Macierz, pomimo, że implementacja wewnętrzna się różni. Czy tak trudno metodę "show()", "print()", "toString()" czy tam operator<< zaimplementować w taki sposób, żeby przeleciała pętlą i wypluwała zera prawie wszędzie? ;) - Xupicor 2010-12-26 02:44

Pozostało 580 znaków

2010-12-06 16:15
bo
1

Nie znam kolekcji w C++. w Javie wyglądało by to tak (korzystam ze standardowej klasy Point):

int rows=...; //ilość wierszy
int cols=...; //ilość kolumn
HashMap<Point,Double> macierz=new HashMap<Point,Double>();
macierz.add(new Point(77,123),23.6);
...
macierz.add(new Point(57,102),12.879);
for(int w=0;w<rows;w++)
   for(int k=0;k,cols;k++)
      if(macierz.get(new Point(w,k)==null)
         //wypisz zero
      else
         //wypisz wyraz

Pozostało 580 znaków

2010-12-08 12:26
bonifacy
0

dziękuję bardzo za pomoc już chyba wszystko kminie, ale żeby nie było zbyt kolorowo coś mi sie znowu sypneło a mianowciie ten moment

using namespace std;
int m, n, lw;

int main(int argc, char *argv[])
{
    cout << "Podaj rozmiar macierzy rzadkiej m x n" << endl << "m= ";
    cin >> m;
    cout << "n= ";
    cin >> n;
    cout << "Ile wartosci niezerowych bedzie zawierac ta macierz ?"<<endl;
    cin >> lw;

    int matrix[m][n];

    for(int j=0; j==n; j++)
    {
for(int i=0; i==m; i++)
{
        matrix[i][j] = 0;      
};
        }; 

Chce tablice wypełnić zerami ale potam jak sobie wyswietam np [5][5] to nie ma tam zera nie moge rozkminic co jest zle

Pozostało 580 znaków

2010-12-08 12:28
bo
0
    for(int j=0; j<n; j++)
    {
        for(int i=0; i<m; i++)

Pozostało 580 znaków

2010-12-13 20:55
bonifacy
0

wszystko już napisane i ładnie działa prócz wyświetlania
jak teraz zrobić żeby wyświetlało np 20x20 a potem szlo w dol az sie skonczy i potem np w lewo
mowiac prosiej podzielilo calosc na ladne rowne kawalki

Pozostało 580 znaków

2010-12-13 22:17
bonifacy
0

http://wklej.org/id/437557/

Chce zeby macierz byla wyswietlana kwadratami 20x20 idacymi w prawo ale cos nie działa

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0