• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Stworzenie dynamicznego sposobu na mnożenie dwóch macierzy

VPS Starter Arubacloud
0 głosów
859 wizyt
pytanie zadane 11 stycznia 2018 w C i C++ przez must Bywalec (2,980 p.)

Cześć, potrzebuje znaleźć sposób na mnożnienie dwóch macierzy o tym samym wymiarze 3x3, 4x4 etc.

Napisałem coś takiego: 

for(i=0; i<rowlength; i++)
    {
        for(j=0; j<rowlength; j++)
        {
            tab2[i][j] = tab[i][0]*tab1[0][j]+tab[i][1]*tab1[1][j]+tab[i][2]*tab1[2][j];
        }


    }

Tutaj mam stworzony sposób na liczenie macierzy, ale tylko 3x3 gdyż jak widzicie tutaj 

tab[i][2]*tab1[2][j]

Maksymalna liczba to jest 2. 

Żeby troche rozjasnić, dla 4x4 będzie:

for(i=0; i<rowlength; i++)
    {
        for(j=0; j<rowlength; j++)
        {
            tab2[i][j] = tab[i][0]*tab1[0][j]+tab[i][1]*tab1[1][j]+tab[i][2]*tab1[2][j]+tab[i][3]*tab1[3][j];
        }


    }

Dla 5x5:

for(i=0; i<rowlength; i++)
    {
        for(j=0; j<rowlength; j++)
        {
            tab2[i][j] = tab[i][0]*tab1[0][j]+tab[i][1]*tab1[1][j]+tab[i][2]*tab1[2][j]+tab[i][3]*tab1[3][j]+tab[i][4]*tab1[4][j];
        }


    }

Pewnie potrzeubje jakos stworzyć nową zmienną, ale jak to zrobić zeby było okej?

2 odpowiedzi

+1 głos
odpowiedź 11 stycznia 2018 przez Tomasz90 Nałogowiec (25,140 p.)
wybrane 11 stycznia 2018 przez must
 
Najlepsza

Popatrz na rysunek:

Macierze A, B, C mają rozmiar n x n. Mnożysz wiersz macierzy A przez kolumnę macierzy B. W wyniku czego otrzymujesz element macierzy C. Algorytm więc przedstawia się następująco:

for(i = 0; i < n; ++i)
    for(j = 0; j < n; ++j)
        for(k = 0; k < n; ++k)
             C[i][j] += A[i][k] * B[k][j];
komentarz 11 stycznia 2018 przez must Bywalec (2,980 p.)

Hej, dzięki za odpowiedź, ale niestety to nie działa.

Input jest taki: 

2  4 9 2 
3  3 -3 2 
-5 2 -1 2 
2 2 2 2  

2 1 3 2 
3  1 2 2 
2 2 6 2 
2 2 2 2 

Output powinien być taki: 

Wynik to: 
38 28 72 34 
13 4 1 10 
-2 -1 -13 -4 
18 12 26 16 

A jest taki, gdy mamy macierz 4x4:


Wynik to: 
146 2686328 1980756593 7539338 
2686377 1980775333 4 1980775296 
-19678895 -1 1981360467 -4 
2686318 12 106 16 

Mój kod: 

for(i=0; i<rowlength; i++)
    {
        for(j=0; j<rowlength; j++)
        {
            for(k=0;k<rowlength;k++)
            {

                //tab2[i][j] = tab[i][0]*tab1[0][j]+tab[i][1]*tab1[1][j]+tab[i][2]*tab1[2][j]+tab[i][3]*tab1[3][j];
                    tab2[i][j] += tab[i][k] * tab1[k][j];
            }
        }
    }

 

I w sumie nie wiem czemu, bo wg mnie jest dobrze xD 

komentarz 11 stycznia 2018 przez must Bywalec (2,980 p.)

Ok, już wiem. Trzeba wyzerować tablicę najpirew czyli: 

for(i=0; i<rowlength; i++)
    {
        for(j=0; j<rowlength; j++)
        {
            tab2[i][j] = 0;
            for(k=0;k<rowlength;k++)
            {

                //tab2[i][j] = tab[i][0]*tab1[0][j]+tab[i][1]*tab1[1][j]+tab[i][2]*tab1[2][j]+tab[i][3]*tab1[3][j];
                    tab2[i][j] += tab[i][k] * tab1[k][j];
            }
        }
    }

 

1
komentarz 11 stycznia 2018 przez Tomasz90 Nałogowiec (25,140 p.)
no tak w c/c++ nie ma domyślnych wartości zmiennych. Ja zazwyczaj tablice funkcją memset zerowałem
komentarz 11 stycznia 2018 przez must Bywalec (2,980 p.)
Wiesz w sumie jak zrobić mnożenie macierzy niestandardowych np 3x3 z 3x1?
1
komentarz 11 stycznia 2018 przez Tomasz90 Nałogowiec (25,140 p.)
Tak samo tylko nie może być wymiaru n w każdej pętli bo masz różne wymiary macierzy. Wszystko można wywnioskować z tego rysunku.
komentarz 11 stycznia 2018 przez must Bywalec (2,980 p.)
edycja 11 stycznia 2018 przez must

Pozmieniałem wielkości obydwu macierzy. 

Niestety wyniki mnożenia macierzy nawet tych samych są złe.:

Input jest taki: 

2  4 9 
3  3 -3  
-5 2 -1  
 

2  2 2
3  1 4 
2 5 2



Output taki:



The result: 
34 53 38 
9 -6 12 
-6 -13 -4 

Mój kod to: 



#include <stdio.h>
#include <stdlib.h>

int main()
{
    int rowlength,collength,row2length,col2length;
    int row=0,col=0;

    FILE* file;
    file = fopen("macierz.txt", "r");

    printf("Input number of rows for the first array!");
    scanf("%d",&rowlength);
    printf("Input number of columns for the first array!");
    scanf("%d",&collength);
    printf("Input number of rows for the second array!");
    scanf("%d",&row2length);
    printf("Input number of columns for the second array!");
    scanf("%d",&col2length);


    int tab[rowlength][collength],tab1[row2length][col2length];

    printf("Elements in the text file:\n\n");

    while( fscanf( file, "%d,", &tab[row][col] ) != EOF )  //WCZYTYWANIE WARTOŚCI Z PLIKU TXT DO 2 TABLIC
    {

        printf("%d ", tab[row][col]);

        col++;

        if(col==collength && row==rowlength-1)
        {
            printf("\n\n");
            row=0;
            col=0;

            while( fscanf( file, "%d,", &tab1[row][col] ) != EOF )
            {

                printf("%d ", tab1[row][col]);
                col++;

                if(col==col2length)

                {

                    printf("\n");
                    col=0;
                    row++;

                }
            }
        }
        if(col==collength)
        {

            printf("\n");
            col=0;
            row++;

        }
    }
    printf("\n");

    fclose(file);

    Multiplication(rowlength,collength,row2length,col2length,tab, tab1);

    return 0;
}

int Multiplication(int rowlength, int collength, int row2length, int col2length, int tab[rowlength][collength],int tab1[row2length][col2length]) // MNOŻENIE MACIERZY
{
    int i,j,k;
    int tab2[row2length][col2length];
    printf("Result of multiplication:\n\n");

    for(i=0; i<row2length; i++)
    {
        for(j=0; j<row2length; j++)
        {
            tab2[i][j] = 0;
            for(k=0;k<row2length;k++)
            {

                    tab2[i][j] += tab[i][k] * tab1[k][j];
            }
        }
    }

    for(i=0; i<row2length; i++)
    {
        for(j=0; j<row2length; j++)
        {

            printf("%d ", tab2[i][j]);

        }
        printf("\n");
    }
    Save(row2length, col2length, tab2);
}
void Save(int row2length, int col2length, int tab2[row2length][col2length]) // ZAPISYWANIE MACIERZY WYNIKOWEJ DO PLIKU
{
    int i,j;
    FILE* file2;
    file2 = fopen("wynik.txt", "w");
    if(file2==NULL) printf("Can't open the file!");

    else
    {
        fprintf(file2,"The result: \n");

        for(i=0; i<row2length; i++)
        {
            for(j=0; j<col2length; j++)
            {

                fprintf(file2,"%d ", tab2[i][j]);

            }

            fprintf(file2,"\n");
        }

        fclose(file2);

    }
}
komentarz 11 stycznia 2018 przez must Bywalec (2,980 p.)
Nie jest to na pewno problem wpisywania do tablicy, bo sprawdzilem debuggerem i wszystko poprawnie sie wpisuje, poza tym wypisuje dobrze w konsoli.
1
komentarz 11 stycznia 2018 przez Tomasz90 Nałogowiec (25,140 p.)
edycja 11 stycznia 2018 przez Tomasz90
Przecież dla tych dwóch macierzy kwadratowych to poprawny wynik jest.
komentarz 11 stycznia 2018 przez must Bywalec (2,980 p.)
edycja 11 stycznia 2018 przez must

1. Oszczedza czas na zlicczanie ilosc elementow w wierszu i kolumnie. Tak to mam od razu podane jaka jest tego dlugosc.

 

2. Probowalem zrobic to wskaznikami, nie potrafie. Wole łopatologicznie i rozumieć, niż wkleić coś bez rozumowania. Mam za dużo spraw na uczelni w przyszłym tygodniu i nie mam czasu nad tym dłużej spędzić, lecz z chęcią bym się dowiedział. :)

3. Macierz wyjściowa ma takie same wymiary jak macierz B. Jeżeli mnożę macierz 3x1 z 1x3, to wyjsciowa będzie miała 1x3 też. 

Zmieniłem te warunki. Mam teraz tak, mimo to dalej wychodzą te same wyniki:

UP tak, zle wpisalem do kalkulatora. Dla kwadratowej jest dobrze. Ale dla niestandardowej, dalej źle.

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int rowlength,collength,row2length,col2length;
    int row=0,col=0;

    FILE* file;
    file = fopen("macierz.txt", "r");

    printf("Input number of rows for the first array!");
    scanf("%d",&rowlength);
    printf("Input number of columns for the first array!");
    scanf("%d",&collength);
    printf("Input number of rows for the second array!");
    scanf("%d",&row2length);
    printf("Input number of columns for the second array!");
    scanf("%d",&col2length);


    int tab[rowlength][collength],tab1[row2length][col2length];

    printf("Elements in the text file:\n\n");

    while( fscanf( file, "%d,", &tab[row][col] ) != EOF )  //WCZYTYWANIE WARTOŚCI Z PLIKU TXT DO 2 TABLIC
    {

        printf("%d ", tab[row][col]);

        col++;

        if(col==collength && row==rowlength-1)
        {
            printf("\n\n");
            row=0;
            col=0;

            while( fscanf( file, "%d,", &tab1[row][col] ) != EOF )
            {

                printf("%d ", tab1[row][col]);
                col++;

                if(col==col2length)

                {

                    printf("\n");
                    col=0;
                    row++;

                }
            }
        }
        if(col==collength)
        {

            printf("\n");
            col=0;
            row++;

        }
    }
    printf("\n");

    fclose(file);

    Multiplication(rowlength,collength,row2length,col2length,tab, tab1);

    return 0;
}

int Multiplication(int rowlength, int collength, int row2length, int col2length, int tab[rowlength][collength],int tab1[row2length][col2length]) // MNOŻENIE MACIERZY
{
    int i,j,k;
    int tab2[rowlength][col2length];
    printf("Result of multiplication:\n\n");

    for(i=0; i<row2length; i++)
    {
        for(j=0; j<col2length; j++)
        {
            tab2[i][j] = 0;
            for(k=0;k<col2length;k++)
            {

                    tab2[i][j] += tab[i][k] * tab1[k][j];

            }
        }
    }

    for(i=0; i<row2length; i++)
    {
        for(j=0; j<col2length; j++)
        {

            printf("%d ", tab2[i][j]);

        }
        printf("\n");
    }
    Save(row2length, col2length, tab2);
}
void Save(int row2length, int col2length, int tab2[row2length][col2length]) // ZAPISYWANIE MACIERZY WYNIKOWEJ DO PLIKU
{
    int i,j;
    FILE* file2;
    file2 = fopen("wynik.txt", "w");
    if(file2==NULL) printf("Can't open the file!");

    else
    {
        fprintf(file2,"The result: \n");

        for(i=0; i<row2length; i++)
        {
            for(j=0; j<col2length; j++)
            {

                fprintf(file2,"%d ", tab2[i][j]);

            }

            fprintf(file2,"\n");
        }

        fclose(file2);

    }
}

 

komentarz 11 stycznia 2018 przez must Bywalec (2,980 p.)
Pomyłka tam u góy. Jak mnożę macierz 4x3 z macierzą 2x3 to wyjściowa będzie miała tyle samo wierszy co A i tyle samo kolumn co B.
1
komentarz 11 stycznia 2018 przez Tomasz90 Nałogowiec (25,140 p.)
No ja wiem po co są wymiary macierzy podawane tylko stwierdzam, że to powinno być zdefiniowane w pliku a nie podawane z klawiatury. Przecież możesz się pomylić i potem złe wyniki otrzymasz.

Ten przykład co podałeś to było mnożenie wektorów. Tak samo jak macierz pomnożysz z wektorem to też wyjdzie wektor.
komentarz 11 stycznia 2018 przez must Bywalec (2,980 p.)
Mimo to dalej wychodzą źle wyniki :/. Widzisz gdzieś jeszcze błąd? Bo teraz warunki się odnoszą i do wierszy i do kolumn, a nie tylko do wierszy.
komentarz 11 stycznia 2018 przez must Bywalec (2,980 p.)
Dobra, już widzę błąd. Ale dzięki za pomoc :)!
1
komentarz 11 stycznia 2018 przez Tomasz90 Nałogowiec (25,140 p.)
ta pętla co ma licznik k ma zły warunek ta druga macierz nie musi być przecież kwadratowa więc col2length nie może tam być tylko to colLength albo row2Length bo one oznaczają u Ciebie ten sam wymiar
komentarz 11 stycznia 2018 przez must Bywalec (2,980 p.)

Tak dokładnie, musiałem tam użyć 

row2length

 

0 głosów
odpowiedź 13 stycznia 2018 przez must Bywalec (2,980 p.)

Wie ktoś może jeszcze tę rzecz. Mam osobno funkcje 

Save

Teraz za pomocą funkcji parametru main, chce podawać przy włączaniu programu w konsoli nazwe pliku wejsciowego i wyjsciowego tzn.: 

./program1 macierz.txt wynik.txt

Jednakże jak przesłać teraz 

 char* argv[]

do funkcji save by działało wszystko poprawnie? bo jak dałem jako argument to nie działało.

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char* argv[])
{   
    if(argc < 3)
    {
        printf("Za malo argumentow");
        return 0;
    }
    int rowlength,collength,row2length,col2length;
    int row=0,col=0;

    FILE* file;
    file = fopen(argv[1], "r");

    printf("Input number of rows for the first array!");
    scanf("%d",&rowlength);
    printf("Input number of columns for the first array!");
    scanf("%d",&collength);
    printf("Input number of rows for the second array!");
    scanf("%d",&row2length);
    printf("Input number of columns for the second array!");
    scanf("%d",&col2length);



    int tab[rowlength][collength],tab1[row2length][col2length];

    printf("Elements in the text file:\n\n");

    while( fscanf( file, "%d,", &tab[row][col] ) != EOF )  //WCZYTYWANIE WARTOŚCI Z PLIKU TXT DO 2 TABLIC
    {

        printf("%d ", tab[row][col]);

        col++;

        if(col==collength && row==rowlength-1)
        {
            printf("\n\n");
            row=0;
            col=0;

            while( fscanf( file, "%d,", &tab1[row][col] ) != EOF )
            {

                printf("%d ", tab1[row][col]);
                col++;

                if(col==col2length)

                {

                    printf("\n");
                    col=0;
                    row++;

                }
            }
        }
        if(col==collength)
        {

            printf("\n");
            col=0;
            row++;

        }
    }
    printf("\n");

    fclose(file);

    Multiplication(rowlength,collength,row2length,col2length,tab, tab1);

    return 0;
}

int Multiplication(int rowlength, int collength, int row2length, int col2length, int tab[rowlength][collength],int tab1[row2length][col2length]) // MNOŻENIE MACIERZY
{
    int i,j,k;
    int tab2[rowlength][col2length];
    printf("Result of multiplication:\n\n");

    for(i=0; i<rowlength; i++)
    {
        for(j=0; j<col2length; j++)
        {
            tab2[i][j] = 0;
            for(k=0; k<row2length; k++)
            {

                tab2[i][j] += tab[i][k] * tab1[k][j];

            }
        }
    }

    for(i=0; i<row2length; i++)
    {
        for(j=0; j<col2length; j++)
        {

            printf("%d ", tab2[i][j]);

        }
        printf("\n");
    }
    Save(row2length, col2length, tab2);
}
void Save(int row2length, int col2length, int tab2[row2length][col2length]) // ZAPISYWANIE MACIERZY WYNIKOWEJ DO PLIKU
{
    int i,j;
    FILE* file2;
    file2 = fopen(argv[2], "w");
    if(file2==NULL) printf("Can't open the file!");

    else
    {
        fprintf(file2,"The result: n");

        for(i=0; i<row2length; i++)
        {
            for(j=0; j<col2length; j++)
            {

                fprintf(file2,"%d ", tab2[i][j]);

            }

            fprintf(file2,"\n");
        }

        fclose(file2);

    }
}

 

komentarz 13 stycznia 2018 przez Tomasz90 Nałogowiec (25,140 p.)
jako argument funkcji powinno być tak jak w main czyli char* argv[] lub char** argv

Do funkcji przesylasz jako save(argv)
komentarz 13 stycznia 2018 przez must Bywalec (2,980 p.)

A co z wywołaniem funkcji? 

Save(row2length, col2length, tab2, ....?..);

bo wpisuje tam to argv i nie dziala

1
komentarz 13 stycznia 2018 przez Tomasz90 Nałogowiec (25,140 p.)
#include <stdio.h>

void foo(char** arg) {
    printf("%s", arg[1]);
}

int main(int argc, char*argv[]) {
    char* arr[] = { "myprog", "hello", "world", NULL };
    argv = arr;
    foo(argv);
}

coś takiego i działa

komentarz 13 stycznia 2018 przez must Bywalec (2,980 p.)

Oki działa. 

Mógłbyś mi powiedzieć co byś poprawił, procz tego zliczania? Nie mam czasu na zrobienie tego i ogarnianie wskaznikow, za duzo kolokwiow w przyszlym tygodniu jest :P

 

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char* argv[])
{

    if(argc < 3)
    {
        printf("Za malo argumentow");
        return 0;
    }
    int rowlength,collength,row2length,col2length;
    int row=0,col=0;

    FILE* file;
    file = fopen(argv[1], "r");

    printf("Input number of rows for the first array!");
    scanf("%d",&rowlength);
    printf("Input number of columns for the first array!");
    scanf("%d",&collength);
    printf("Input number of rows for the second array!");
    scanf("%d",&row2length);
    printf("Input number of columns for the second array!");
    scanf("%d",&col2length);



    int tab[rowlength][collength],tab1[row2length][col2length];

    printf("Elements in the text file:\n\n");

    while( fscanf( file, "%d,", &tab[row][col] ) != EOF )  //WCZYTYWANIE WARTOŚCI Z PLIKU TXT DO 2 TABLIC
    {

        printf("%d ", tab[row][col]);

        col++;

        if(col==collength && row==rowlength-1)
        {
            printf("\n\n");
            row=0;
            col=0;

            while( fscanf( file, "%d,", &tab1[row][col] ) != EOF )
            {

                printf("%d ", tab1[row][col]);
                col++;

                if(col==col2length)

                {

                    printf("\n");
                    col=0;
                    row++;

                }
            }
        }
        if(col==collength)
        {

            printf("\n");
            col=0;
            row++;

        }
    }
    printf("\n");

    fclose(file);

    Multiplication(rowlength,collength,row2length,col2length,tab, tab1,argv);

    return 0;
}

int Multiplication(int rowlength, int collength, int row2length, int col2length, int tab[rowlength][collength],int tab1[row2length][col2length],char* argv[]) // MNOŻENIE MACIERZY
{
    int i,j,k;
    int tab2[rowlength][col2length];
    printf("Result of multiplication:\n\n");

    for(i=0; i<rowlength; i++)
    {
        for(j=0; j<col2length; j++)
        {
            tab2[i][j] = 0;
            for(k=0; k<row2length; k++)
            {

                tab2[i][j] += tab[i][k] * tab1[k][j];

            }
        }
    }

    for(i=0; i<row2length; i++)
    {
        for(j=0; j<col2length; j++)
        {

            printf("%d ", tab2[i][j]);

        }
        printf("\n");
    }
    Save(row2length, col2length, tab2, argv);
}
void Save(int row2length, int col2length, int tab2[row2length][col2length], char* argv[]) // ZAPISYWANIE MACIERZY WYNIKOWEJ DO PLIKU
{
    int i,j;
    FILE* file2;
    file2 = fopen(argv[2], "w");
    if(file2==NULL) printf("Can't open the file!");

    else
    {
        fprintf(file2,"The result: \n");

        for(i=0; i<row2length; i++)
        {
            for(j=0; j<col2length; j++)
            {

                fprintf(file2,"%d ", tab2[i][j]);

            }

            fprintf(file2,"\n");
        }

        fclose(file2);

    }
}

 

1
komentarz 13 stycznia 2018 przez Tomasz90 Nałogowiec (25,140 p.)
Wypisywanie z funkcji mnożącej macierze bym wrzucił do osobnej funkcji. Tak samo wczytywanie i dodatkowo je uprościł bo na moje oko jest przekombinowane troche. Niektóre nazwy zmiennych bym zmienił ale pewnie na studiach i tak na to nie patrzą.
komentarz 13 stycznia 2018 przez must Bywalec (2,980 p.)
Okej, poprawię.

Tak mój prowadzący nawet, który jest świeżo po magistrze daje nazwy typu "n,k" etc. i mam mu ochotę.... :)
komentarz 14 stycznia 2018 przez must Bywalec (2,980 p.)

Wywaliłem czytanie wartości do funkcji. Tylko mam teraz taki problem, że funkcja Multiplication czyta 2 tablice, które znajdują się w funkcji ReaderValues. Jak je przesłać do tej funkcji?

Cały czas mi się myli to z Java, bo tam tworzyłem sobie obiekty na których mogłem operować, a tutaj jakieś fiubździu :D

 

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char* argv[])
{

    if(argc < 3)
    {
        printf("Za malo argumentow");
        return 0;
    }

    int rowlength,collength,row2length,col2length;
    int row=0,col=0;


    printf("Input number of rows for the first array!");
    scanf("%d",&rowlength);
    printf("Input number of columns for the first array!");
    scanf("%d",&collength);
    printf("Input number of rows for the second array!");
    scanf("%d",&row2length);
    printf("Input number of columns for the second array!");
    scanf("%d",&col2length);

    printf("Elements in the text file:\n\n");

    FILE* file = fopen(argv[1], "r");

    ReaderValues(file,rowlength,collength,row2length,col2length);

    fclose(file);

    Multiplication(rowlength,collength,row2length,col2length, tab, tab1,argv);

    return 0;
}


void ReaderValues(FILE* file, int rowlength, int collength, int row2length, int col2length)
{
    int tab[rowlength][collength],tab1[row2length][col2length];
    int row=0,col=0;
    while( fscanf( file, "%d,", &tab[row][col] ) != EOF )  //WCZYTYWANIE WARTOŚCI Z PLIKU TXT DO 2 TABLIC
    {

        printf("%d ", tab[row][col]);

        col++;

        if(col==collength && row==rowlength-1)
        {
            printf("\n\n");
            row=0;
            col=0;

            while( fscanf( file, "%d,", &tab1[row][col] ) != EOF )
            {

                printf("%d ", tab1[row][col]);
                col++;

                if(col==col2length)

                {
                    printf("\n");
                    col=0;
                    row++;
                }
            }
        }
        if(col==collength)
        {
            printf("\n");
            col=0;
            row++;
        }
    }
    printf("\n");
}

int Multiplication(int rowlength, int collength, int row2length, int col2length, int tab[rowlength][collength],int tab1[row2length][col2length],char* argv[]) // MNOŻENIE MACIERZY
{
    int i,j,k;
    int tab2[rowlength][col2length];
    printf("Result of multiplication:\n\n");

    for(i=0; i<rowlength; i++)
    {
        for(j=0; j<col2length; j++)
        {
            tab2[i][j] = 0;
            for(k=0; k<row2length; k++)
            {
                tab2[i][j] += tab[i][k] * tab1[k][j];
            }
        }
    }

    for(i=0; i<row2length; i++)
    {
        for(j=0; j<col2length; j++)
        {
            printf("%d ", tab2[i][j]);
        }
        printf("\n");
    }
    Save(row2length, col2length, tab2, argv);
}
void Save(int row2length, int col2length, int tab2[row2length][col2length], char* argv[]) // ZAPISYWANIE MACIERZY WYNIKOWEJ DO PLIKU
{
    int i,j;
    FILE* file2;
    file2 = fopen(argv[2], "w");
    if(file2==NULL) printf("Can't open the file!");

    else
    {
        fprintf(file2,"The result: \n");

        for(i=0; i<row2length; i++)
        {
            for(j=0; j<col2length; j++)
            {
                fprintf(file2,"%d ", tab2[i][j]);
            }

            fprintf(file2,"\n");
        }

        fclose(file2);

    }
}

 

komentarz 14 stycznia 2018 przez must Bywalec (2,980 p.)
jak cos to stworzylem juz nowe pytanie, bo tutaj sie polapac troche ciezko.

Podobne pytania

0 głosów
0 odpowiedzi 163 wizyt
pytanie zadane 27 maja 2023 w C i C++ przez natalia2002. Początkujący (370 p.)
0 głosów
1 odpowiedź 370 wizyt
pytanie zadane 7 czerwca 2018 w C i C++ przez Alan Kruszyński Obywatel (1,410 p.)
0 głosów
2 odpowiedzi 5,417 wizyt
pytanie zadane 19 marca 2018 w C i C++ przez Groshq Użytkownik (590 p.)

92,452 zapytań

141,262 odpowiedzi

319,085 komentarzy

61,854 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...