Macierz 4x4 – metoda iteracyjna

Odpowiedz Nowy wątek
2018-06-13 17:38
0

Witam. Prosiłbym o wytłumaczenie działania programu.

#include <iostream>
#include <cstdlib>
#include <fstream>
#define N 4
 
using namespace std;
 
int zapisz(int mat1[4][4])
{
    fstream plik;
    plik.open("plik.txt", ios::out | ios::app);
    int i,j,k;
    if(!plik.good())
    {
        cout << "Blad wczytywania pliku" << endl;
        return 0;
    }
    for(i=0;i<4;i++)
    {
        for(j=0;j<4;j++)
        {
            plik << mat1[i][j] << " ";
        }
        plik << endl;
    }
    plik << endl;
    plik.close();
    return 0;
}
 
void dop(int mat2[N][N], int temp1[N][N], int p, int q, int n)
{
    int i=0,j=0,w,k;
    for (w=0;w<n;w++)
    {
        for (k=0;k<n;k++)
        {
            if (w!=p && k!=q)
            {
                temp1[i][j++]=mat2[w][k];
                if (j==n-1)
                {
                    j=0;
                    i++;
                }
            }
        }
    }
}
 
int det(int mat1[N][N], int n)
{
    if(n==1)
    {
        return mat1[0][0];
    }
    int temp[N][N];
    int znak=1,d=0;
    for(int f=0;f<n;f++)
    {
        dop(mat1,temp,0,f,n);
        d+=znak*mat1[0][f]*det(temp,n-1);
        znak=-znak;
    }
 
    return d;
}
 
int main()
{
    int i,j,k,tab[16];
    int mat[N][N];
    for(tab[0]=1;tab[0]<=100;tab[0]++)
    {
        for(tab[1]=1;tab[1]<=100;tab[1]++)
        {
            for(tab[2]=1;tab[2]<=100;tab[2]++)
            {
                for(tab[3]=1;tab[3]<=100;tab[3]++)
                {
                    for(tab[4]=1;tab[4]<=100;tab[4]++)
                    {
                        for(tab[5]=1;tab[5]<=100;tab[5]++)
                        {
                            for(tab[6]=1;tab[6]<=100;tab[6]++)
                            {
                                for(tab[7]=1;tab[7]<=100;tab[7]++)
                                {
                                    for(tab[8]=1;tab[8]<=100;tab[8]++)
                                    {
                                        for(tab[9]=1;tab[9]<=100;tab[9]++)
                                        {
                                            for(tab[10]=1;tab[10]<=100;tab[10]++)
                                            {
                                                for(tab[11]=1;tab[11]<=100;tab[11]++)
                                                {
                                                    for(tab[12]=1;tab[12]<=100;tab[12]++)
                                                    {
                                                        for(tab[13]=1;tab[13]<=100;tab[13]++)
                                                        {
                                                            for(tab[14]=1;tab[14]<=100;tab[14]++)
                                                            {
                                                                for(tab[15]=1;tab[15]<=100;tab[15]++)
                                                                {
                                                                    mat[0][0]=tab[0];
                                                                    mat[0][1]=tab[1];
                                                                    mat[0][2]=tab[2];
                                                                    mat[0][3]=tab[3];
                                                                    mat[1][0]=tab[4];
                                                                    mat[1][1]=tab[5];
                                                                    mat[1][2]=tab[6];
                                                                    mat[1][3]=tab[7];
                                                                    mat[2][0]=tab[8];
                                                                    mat[2][1]=tab[9];
                                                                    mat[2][2]=tab[10];
                                                                    mat[2][3]=tab[11];
                                                                    mat[3][0]=tab[12];
                                                                    mat[3][1]=tab[13];
                                                                    mat[3][2]=tab[14];
                                                                    mat[3][3]=tab[15];
                                                                    if(det(mat,N)==1)
                                                                    {
                                                                        zapisz(mat);
                                                                    }
                                                                }
                                                            }
                                                        }
                                                    }
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
    return 0;
}
edytowany 3x, ostatnio: furious programming, 2018-06-13 18:01
To jest C++, a nie C – zmieniam tagi i kolorowanie. - furious programming 2018-06-13 18:01

Pozostało 580 znaków

2018-06-13 18:00
2

Której części?

Szczerze mówiąc, to wolałbym poznać wytłumaczenie autora, dlaczego wyprodukował takiego drabiniastego crapa. ;)


edytowany 1x, ostatnio: furious programming, 2018-06-13 18:00

Pozostało 580 znaków

2018-06-13 18:11
0

z tego co rozumiem to program ma obliczyc wyznacznik macierza 4x4 a nastepnie zapisac do pliku. Problem w tym, ze program jest ok a nic sie nie dzieje.

Pozostało 580 znaków

2018-06-13 18:24
0
Wiktor Śmiech napisał(a):

Problem w tym, ze program jest ok a nic sie nie dzieje.

Opisz problem sensownie – ten program działa prawidłowo, czy nie działa? Wypisuje prawidłowe wyniki, czy błędne?


Pozostało 580 znaków

2018-06-13 18:26
0

Program ma obliczyc i zapisac macierz w pliku. Problem w tym, ze nic nie zapisuje. Nie wyskakuja zadne bledy w kompliatorze. Nic sie nie dzieje.

Pozostało 580 znaków

2018-06-13 18:28
0

Funkcja zapisz jest w ogóle wywoływana? Sprawdź pod debuggerem – postaw na niej breakpoint.


edytowany 2x, ostatnio: furious programming, 2018-06-13 18:28

Pozostało 580 znaków

2018-06-13 18:57
0

Jest wywolywana.

Pozostało 580 znaków

2018-06-13 19:02
0

Wytłumaczenie jest takie, że ktoś (autor programu) robi sobie z Ciebie jaja.

Pozostało 580 znaków

2018-06-13 19:07
1

Czy Ty wgle wiesz o co tu chodzi i co to za zadanie? Przecież to wchodzi w pętle nieskończoną albo masakrycznie długo będziesz czekać na wynik. Jakie wartości przyjmuje ta macierz czy jakie ma przyjmować? Też chciałbym poznać tego kogoś.

edytowany 2x, ostatnio: Defcer, 2018-06-13 19:10
Plus za cierpliwość - vpiotr 2018-06-13 19:28

Pozostało 580 znaków

2018-06-13 19:23
0

Zadanie polega na wyznaczeniu macierzy 4x4 o zadanym zakresie elementów całkowitych (przyjete od 1 do 100) tak, aby wyznacznik był równy 1 – metodą iteracyjną.

Pozostało 580 znaków

2018-06-13 19:33
0

Pewnie da się to zrobić taką pętlą. Tylko pomyśl nad warunkami:

for(int i=0;i<4;i++)
{
    for(int j=0;j<4;j++)
    {
    if(...)
    tab[i][j]=...
    }
}

A to sobie poczekasz po prostu. Chyba że znasz jakieś triki z algebry.
Poza tym magii tu nie ma po prostu zwiększa się liczba w danym polu macierzy i za każdym razem liczy wyznacznik i sprawdza czy jest równe jeden. Można na 100% napisać to prościej plus na wynik pewnie poczekasz. A nie zapisuje nic bo nie ma czego zapisać. Dopiero jak dostaniesz wynik to zapisze. Wpisz sobie napis w każdej linijce np.

cout << "Wyswietlam linijke" << i << j << tab[i][j] << endl; 

i moze wtedy zrozumiesz jak to działa. Totalne podstawy.

edytowany 4x, ostatnio: Defcer, 2018-06-13 19:49

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0