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ść
SeweXIN
Temat założony przez niniejszego użytkownika
» 2016-05-31 18:10:07
Użyłem to w kodzie lecz nadal to samo, popatrz wyżej gdzie wstawiłem kod, oczywiście zamiast warnings było co innego lecz to samo ciągle
P-148775
mateczek
» 2016-05-31 18:21:03
C/C++
//W dwóch pętlach nie przemnożysz macierzy. tak na marginesie. Chyba, że chcesz zrobić iloczyn jej elementów a nie właściwe mnożenie
// w odniesieniu do rysunku poniżej
for( int i = 0; i < aa; i++ ) // ta pętla leci po wierszac
for( int j = 0; j < bb; j++ ) // ta pętla leci po kolumnach
     for( int k = 0; k < cc; k++ ) { // ta pętla robi robotę zawartą w nawiasach. 
    // cc powinno wynosić tyle, ile kolumn ma tab2.  Lub tyle, ile wierszy ma tab3
    tab[ i ][ j ] = tab[ i ][ j ] + tab2[ i ][ k ] * tab3[ k ][ j ];
}

https://upload.wikimedia.org​/math/9/9/a​/99a961e614b5f7b75aba5d1f56f434fa.png
P-148776
mateczek
» 2016-05-31 19:11:29
Jeśli o mnie chodzi to z czystego c mam spore braki odnośnie funkcji bibliotecznych ale sprawdziłem kod, Pominąwszy brak zabezpieczeń przed błędami w pliku, oraz przed brakiem pliku.  To kod się kompiluje i działa

C/C++
#include <stdlib.h>
#include <stdio.h>
#include<iostream>
using namespace std;
#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 );
}
int main()
{
    int a, b;
    int ** mac = odczytywanie( "macierz.txt", & a, & b );
    for( int w = 0; w < a; w++ ) { //w - wiersze
        for( int k = 0; k < b; k++ ) { //k - kolumny
            cout << mac[ w ][ k ] << " ";
        }
        cout << endl;
    }
    zapisywanie( a, b, mac );
   
}

czytałem że to może być że plik nie istnieje,lecz mam go na pulpicie
Mówisz, że jest na pulpicie :P?? Ty to wiesz, ja już też to wiem.  Ale chyba jeszcze pytanie czy twój program to wie??

Reasumując: Skoro u mnie kod działa, a u ciebie nie to albo nie podałeś pełnej ścieżki do pliku, że jest na pulpicie?? Albo masz literówkę w ścieżce.  Lub jakieś polskie znaki, spacje w ścieżce psują zabawę
P-148778
carlosmay
» 2016-06-02 05:42:15
czytałem że to może być że plik nie istnieje,lecz mam go na pulpicie
Dlaczego nie sprawdzasz, czy plik jest otwarty?
To podstawa przy pracy z plikami.
P-148793
SeweXIN
Temat założony przez niniejszego użytkownika
» 2016-06-03 16:11:30
Spokojnie już zrobione, działające już dawno pokazane i zaliczone. Dzięki za pomoc. Ale nie obiecuje że będe sie pytał o coś jeszcze.
P-148840
1 2 « 3 »
Poprzednia strona Strona 3 z 3