Mnożenie macierzy z plików wcześniej utworzonych.
Witam.
Borykam się z tym problemem od tygodnia i w końcu postanowiłem poszukać pomocy na forum po przejrzeniu dużej ilości stron w sieci. Żeby wszystko było klarowne: programik działał, z tym, że na komputerze na którym go robiłem (wyposażony w VS2017). Po skopiowaniu programu na pulpit zdalny na zaliczenie ni stąd ni zowąd wywaliło mi błąd wskaźnika. Dostępu do tego komputera na którym robiłem program niestety nie mam (był to laptopik, który wróci dopiero za 2 tygodnie, a wtedy to będzie po ptakach). Na VS2012 szkolnym program wywala błąd, jak i na mojej stacjonarce z VS2015. Próbowałem odpalić go także u kolegi z VS2017, ale niestety to samo.
Dobra, po opisaniu mniej więcej treści problemu przejdę do treści zadania, a na samym końcu posta zamieszczę kodzik.
Treść zadania:
"Stwórz program, który przyjmuje dwa argumenty (są to nazwy plików tekstowych). W tych plikach zapisane są wcześniej stworzone macierze (w sensie losowe cyferki wpisane przed kompilacją). Program czyta macierz z pliku A.txt i B.txt, mnoży je i zapisuje do pliku C.txt (którego ma wcześniej stworzyć).
Format zapisu txt:
2 3 -> ilość wierszy, kolumn
1 7 5
8 2 3
Pierwsza sekcja programu: przygotowanie tablic do mnożenia
Druga sekcja programu: mnożenie a*b=c
Trzecia sekcja programu: umieszczenie macierzy c do pliku C.txt"
Dodam jeszcze, że operuje na języku C w Visual Studio, więc programik jest stworzony w języku C, a nie C++. Kod zamieszczam poniżej. Pozdrawiam i dziękuje za przeczytanie :)
PS. Zapomniałem opisać dokładny problem, żeby zachować merytoryke. Kod problemu: "DEBUG ASSERTION FAILED! [ścieżka programu/linia kodu(nieistotna)] Expression: file_name != nullptr"
#include "stdafx.h"
#include <stdlib.h>
int ** Create( int a, int b )
{
int ** tab;
int i, j;
tab =( int ** ) malloc( sizeof( int * ) * a );
for( i = 0; i < a; i++ )
{
tab[ i ] =( int * ) malloc( sizeof( int ) * b );
}
return tab;
}
void Relase( int ** A, int a )
{
for( int i = 0; i < a; i++ )
{
free( A[ i ] );
}
free( A );
}
int main( int argc, char * argv[] )
{
int ** A, ** B, ** C, a, b, c, d;
FILE * x;
x = fopen( argv[ 1 ], "r" );
fscanf( x, "%d%d", & a, & b );
A = Create( a, b );
for( int i = 0; i < a; i++ )
{
for( int j = 0; j < b; j++ )
{
fscanf( x, "%d", & A[ i ][ j ] );
}
}
FILE * y;
y = fopen( argv[ 2 ], "r" );
fscanf( y, "%d%d", & c, & d );
B = Create( c, d );
for( int i = 0; i < c; i++ )
{
for( int j = 0; j < d; j++ )
{
fscanf( y, "%d", & B[ i ][ j ] );
}
}
C = Create( a, d );
for( int i = 0; i < a; i++ )
{
for( int j = 0; j < d; j++ )
{
int s = 0;
for( int k = 0; k < b; k++ )
{
s = s + A[ i ][ k ] * B[ k ][ j ];
}
C[ i ][ j ] = s;
}
}
FILE * z;
z = fopen( "C.txt", "w" );
for( int i = 0; i < a; i++ )
{
for( int j = 0; j < d; j++ )
fprintf( z, "%d", C[ i ][ j ] );
fprintf( z, "\n" );
}
fclose( x );
fclose( y );
fclose( z );
Relase( A, a );
Relase( B, c );
Relase( C, a );
system( "PAUSE" );
return 0;
}[ / i ]