[C++] Program mnożenia macierzy. Problem z alokacją tablicy dwuwymiarowej
Ostatnio zmodyfikowano 2016-06-16 18:04
K1tsun Temat założony przez niniejszego użytkownika |
[C++] Program mnożenia macierzy. Problem z alokacją tablicy dwuwymiarowej » 2016-06-16 12:59:17 Witam. Jestem studentem informatyki i piszę pracę na zaliczenie przedmiotu. Program ma mnożyć dwie macierze ściągnięte z pliku. Napotkałem problem kiedy alokuję nową tablice dwuwymiarową. Próbowałem różnych sposobów, jednakże kończy sie na tym, że do funkcji loadMatrix przekazywana jest tablica jednoelementowa (wskaźnik?), a dalej nie mogę przypisywać. Oto kod jaki do tej pory napisałem i prosiłbym o pomoc #include<iostream> #include<string> #include<cstdlib> #include<fstream> using namespace std; struct dimm { int wiersze, kolumny; }; dimm loadDimensions( string nazwa ); int ** allocMatrix2D( int dim1, int dim2 ); void deleteMatrix2D( int **& ); void loadMatrix( string nazwa, int **& macierz, dimm rozmiar ); bool check( int kolumny2, int wiersze1 ); int ** multMatrix( dimm dimm1, dimm dimm2, int **& macierz1, int **& macierz2, int **& macierz3 ); void saveMatrix( int **& matrix ); int main() { dimm rozmiar1; dimm rozmiar2; int ** macierz1, macierz2, macierz3; rozmiar1 = loadDimensions( "macierz1.txt" ); rozmiar2 = loadDimensions( "macierz2.txt" ); if( check( rozmiar1.kolumny, rozmiar2.wiersze ) ) { macierz1 = allocMatrix2D( rozmiar1.wiersze, rozmiar1.kolumny ); loadMatrix( "macierz1.txt", macierz1, rozmiar1 ); } else { cout << "Macierzy nie da sie pomnozyc"; system( "PAUSE" ); return 0; } return 0; } int ** allocMatrix2D( int dim1, int dim2 ) { int ** macierz2d = new int *[ dim1 ]; int * dumm = new int[ dim1 * dim2 ]; for( int i = 0; i < dim1; i++ ) macierz2d[ i ] = dumm + i * dim2; return macierz2d; }
void deleteMatrix2D( int **& macierz2d ) { delete[] macierz2d[ 0 ]; delete[] macierz2d; macierz2d = 0; }
dimm loadDimensions( string nazwa ) { int i = 1; dimm rozmiar; string bufor; ifstream plik; plik.open( nazwa.c_str(), ios::binary ); if( plik.good() ) { while( true ) { if( i == 1 ) { plik >> bufor; rozmiar.wiersze = atoi( bufor.c_str() ); } else if( i == 2 ) { plik >> bufor; rozmiar.kolumny = atoi( bufor.c_str() ); } else break; i++; } return rozmiar; plik.close(); } else { plik.close(); cout << "Nie można otworzyć pliku!!!"; rozmiar.wiersze = 0; rozmiar.kolumny = 0; return rozmiar; } }
bool check( int kolumny1, int wiersze2 ) { if( kolumny1 == wiersze2 ) { cout << "Lights are green, here-a-we-go"; return 1; } else { cout << "Macierze nie spełniają warunków"; return 0; } }
void loadMatrix( string nazwa, int **& macierz, dimm rozmiar ) { int i = 0; string bufor; ifstream plik; plik.open( nazwa.c_str(), ios::binary ); if( plik.good() ) { while( i < 2 ) { plik >> bufor; i++; } for( i = 0; i < rozmiar.wiersze + 2; i++ ) { for( int j = 0; j < rozmiar.kolumny; j++ ) { plik >> bufor; macierz[ i ][ j ] = atoi( bufor.c_str() ); } } plik.close(); } else { plik.close(); cout << "Nie wiem jak to zrobiles, ale nie mozna otworzyc pliku"; } } |
|
mateczek |
» 2016-06-16 18:04:12 kilka rzeczy jest co-najmniej dziwnych w tym kodzie !!! void loadMatrix( string nazwa, int **& macierz, dimm rozmiar ) { int i = 0; ifstream plik( nazwa ); if( plik.good() ) { while( i < 2 ) { plik >> bufor; i++; } for( i = 0; i < rozmiar.wiersze + 2; i++ ) { for( int j = 0; j < rozmiar.kolumny; j++ ) { plik >> macierz[ i ][ j ] } } plik.close(); } else { plik.close(); cout << "Nie wiem jak to zrobiles, ale nie mozna otworzyc pliku"; } } PS. Funkcja alokująca przyznaje oryginalna. Ja to zrobiłem inaczej. http://cpp0x.pl/forum/temat/?id=23012. kod w trzecim poście |
|
« 1 » |