Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Wczytanie z pliku tekstowego macierzy, następnie mnożenie ich i zapisanie wyniku do innego pliku tekstowego.

Ostatnio zmodyfikowano 2016-06-03 16:11
Autor Wiadomość
carlosmay
» 2016-05-27 17:48:24
mateczek masz racje, jest to surowe C
W C nie używa się strumieni
>>
,
<<
.
C/C++
#include <iostream>
#include <fstream>
 to C++.
P-148620
mateczek
» 2016-05-27 18:49:08
@Carlosmay faktycznie nie zwróciłem uwagi, że Autor wątku przy zapisie do pliku posługuje się strumieniami. A co za tym idzie musiał użyć kompilatora c++

Ale prosty przykład mnożenia w C dwóch statycznych macierzy kwadratowych dorzucę
C/C++
#include <stdio.h>

int main()
{
    const int size = 5;
    int matrixA[ size ][ size ];
    int matrixB[ size ][ size ];
    int matrixC[ size ][ size ];
    for( int w = 0; w < size; w++ ) { //w - wiersz; k - kolumna;
        for( int k = 0; k < size; k++ ) {
            matrixA[ w ][ k ] = 1; //macierz A wypełniam 1
            matrixB[ w ][ k ] = 3; //macierz B wypełniam 3
        }
    }
    // macierz C wypełniam mnożąc dwie poprzednie
    for( int w = 0; w < size; w++ ) { //w - wiersz; k - kolumna;
        for( int k = 0; k < size; k++ ) {
            int element = 0;
            for( int i = 0; i < size; i++ )
                 element += matrixA[ w ][ i ] * matrixB[ i ][ k ]; //liczenie elementu macierzy C
           
            matrixC[ w ][ k ] = element; //macierz c wypełniam wynikiem mnożenia
            printf( "%d ", matrixC[ w ][ k ] ); //wyświetlam obliczony element macierzy C
        }
        printf( "\n" ); //koniec linii drugi rząd macierzy będzie liczony
    }
}
P-148623
SeweXIN
Temat założony przez niniejszego użytkownika
» 2016-05-31 17:26:36
Witam ponownie, napisałem całkowicie od nowa program lecz wyskakuje mi błąd: pomoże ktoś i wyjaśni o co chodzi?

C/C++
#include "stdafx.h"
#include <stdlib.h>
#include <stdio.h>
#define _CRT_SECURE_NO_DEPRECATE

int ** alokacja( int a, int b )
{
    int ** tab =( int ** ) malloc( sizeof( int * ) * a );
    for( int i = 0; i < a; i++ )
         tab[ i ] =( int * ) malloc( sizeof( int ) * b );
   
    return( tab );
}

int ** odczytywanie( char * name, int * wa, int * wb )
{
    int a, b;
    FILE * macierze = fopen( name, "r" );
    fscanf( macierze, "%d", & a );
    fscanf( macierze, "%d", & b );
    int ** tab = alokacja( a, b );
    for( int i = 0; i < a; i++ )
    for( int j = 0; j < b; j++ )
         fscanf( macierze, "%d", & tab[ i ][ j ] );
   
    fclose( macierze );
    * wa = a;
    * wb = b;
    return( tab );
}

int ** mnozenie( int aa, int bb, int ** tab2, int ** tab3 )
{
    int ** tab = alokacja( aa, bb );
    for( int i = 0; i < aa; i++ )
    for( int j = 0; j < bb; j++ )
         tab[ i ][ j ] = 0;
   
    for( int i = 0; i < aa; i++ )
    for( int j = 0; j < bb; j++ )
         tab[ i ][ j ] = tab[ i ][ j ] + tab2[ i ][ j ] * tab3[ j ][ i ];
   
    return( tab );
}

void zapisywanie( int aa, int bb, int ** tab )
{
    FILE * macierze = fopen( "Wynik.txt", "w" );
    fprintf( macierze, "%d %d \n", aa, bb );
    for( int i = 0; i < aa; i++ )
    {
        for( int j = 0; j < bb; j++ )
        {
            fprintf( macierze, "%d ", tab[ i ][ j ] );
        }
        fprintf( macierze, "\n" );
    }
    fclose( macierze );
}

void unalokacja( int ** tab, int a )
{
    for( int i = 0; i < a; i++ )
         free( tab[ i ] );
   
    free( tab );
}
 
a błąd brzmi: Error 1 error C4996: 'fopen': This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
P-148768
jankowalski25
» 2016-05-31 17:42:32
Consider using fopen_s instead.
[MSDN] fopen_s
P-148769
SeweXIN
Temat założony przez niniejszego użytkownika
» 2016-05-31 17:47:43
czytałem że to może być że plik nie istnieje,lecz mam go na pulpicie
P-148770
jankowalski25
» 2016-05-31 17:51:53
Użyj
fopen_s
 zamiast
fopen
.
P-148771
SeweXIN
Temat założony przez niniejszego użytkownika
» 2016-05-31 17:57:42
Error 1 error C2660: 'fopen_s' : function does not take 2 arguments

2 IntelliSense: a value of type "errno_t" cannot be used to initialize an entity of type "FILE *"
3 IntelliSense: argument of type "const char *" is incompatible with parameter of type "FILE **"
4 IntelliSense: too few arguments in function call
P-148773
carlosmay
» 2016-05-31 18:05:24
Można użyć fopen ale trzeba dodać
C/C++
#define _CRT_SECURE_NO_WARNINGS
 na początku programu.

Czytamy błędy i szukamy rozwiązania:
To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.

P-148774
1 « 2 » 3
Poprzednia strona Strona 2 z 3 Następna strona