Przesyłanie tablicy wielowymiarowej do funkcji

0

Witam. Mam taki kod w c++, mógłby mi ktoś powiedzieć, co zrobić żebym w pierwszym argumencie funkcji nie musiał podawać drugiego rozmiaru? Chodzi mi o tab[][1000]. Próbowałem różne opcje ze wskaźnikami (int *tab, również int **tab), ale żadna nie działa... I czy ma znaczenie, czy przesyłam zwykłą tablicę czy dynamiczną?

void matvecmult2(int tab[][1000], int *vect, int *wynik, int rozmiar){

	clock_t start, koniec;

	start = clock();

	for(int i=0; i<rozmiar;i++){

		for(int j=0; j<rozmiar;j++){

			wynik[j] += (tab[j][i])*(vect[i]); 

	}

	}

	koniec = clock();

	long delta=(long)(koniec - start);

 cout << "Czas działania funkcji matvecmult2: "<< delta<<endl;

}
0

void wypisz(char* wskaznik, int kolumny, int wiersze)

Masz wtedy wskaznik na pierwszy element i dzieki niemu odczytasz kazda wartosc ze swojej tablicy np. zeby odczytac drugi wiersz z trzeciej kolumny:

cout<<&wskaznik[3*wiersze+2]

Zrobiłem tym sposobem:

 void matvecmult2(int *tab, int *vect, int *wynik, int rozmiar){
 
        clock_t start, koniec;
 
        start = clock();
 
        for(int i=0; i<rozmiar;i++){
 
                for(int j=0; j<rozmiar;j++){
 
                        wynik[j] += (tab[j*rozmiar+i])*(vect[i]); 
 
        }
 
        }
 
        koniec = clock();
 
        long delta=(long)(koniec - start);
 
 cout << "Czas działania funkcji matvecmult2: "<< delta<<endl;
 
}

I przy wywolywaniu matvecmult2(&tab[0][0], wektor, wynik, rozmiar); i co prawda skompilowało się, ale wyniki się popsuły, tzn. są błędy w obliczeniach. Widzi ktoś, co zrobiłem źle? Czy też w ten sposób nie można rozwiązać mojego problemu?

0

Pierwsza wersja działa, stawiam tylko że nie czyścisz pamięci dla wyniku, w efekcie czego dodajesz swój wynik do śmieci w pamięci. Dodaj tam na początku memset(wynik,0,sizeof(int)*rozmiar);

a tak btw jak masz macierze 1000x1000 to nie wiem czy dobrym pomysłem jest robienie na stosie 4mb tablicy.

0

Nie, to nie o to chodzi. O czyszczeniu tablicy ze starych wyników pamiętam. Już olałem te sprawę, szkoda czasu. Zrobiłem #define ROZMIAR i wszędzie na twardo powstawiałem. Trudno.

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