Anonymní profil Jirka – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Anonymní profil Jirka – Programujte.comAnonymní profil Jirka – Programujte.com

 

Příspěvky odeslané z IP adresy 88.102.116.–

Jirka
C / C++ › Rekurzivní algoritmus pro de…
24. 8. 2011   #146692

Zdravím, tak sem trochu pokročil a podařilo se mi to posunout zase o trošku dál, bohužel sem se zasekl na dalším erroru a konkrétně na erroru "Unhandled exception at 0x011f152e in matice.exe: 0xC0000005: Access violation writing location 0x335c2b08."

 

#include "stdafx.h"
#include "stdlib.h"
#include "stdio.h"
#include "time.h"
#include <math.h>

int DET(int MAT_A[5][5])
{
	int w, x, y, z, d = 0;
	int det = 0;
	int RAD_A = 5;
	int SUB[5][5] = {0};	
for (int w = 0; w < RAD_A; w++)										// Rozklad podle prvního řádku
		{
for (int x = 0; x < RAD_A - 1; x++)									// Vytvoření submatice
	for (int y = 0; x < RAD_A - 1; y++)
		SUB[x-1][z] = MAT_A[x][y];
		z++;

	det += pow(-1.0, w) * MAT_A[0][w] * DET(SUB); 
		}
	return d;
}

int main()
{
	int MAT_A[5][5];
	int i, j, k, l;
	char c;
	srand(time(NULL));						
	for (int i = 0; i < 5; i++)		 			// Matice A
	{
		for (int j = 0; j < 5; j++)
		{
			MAT_A[i][j] = 10*rand()/RAND_MAX;	
			printf("%d  ", MAT_A[i][j]);
		}
		printf("\n");
		printf("\n%d", DET(MAT_A));
	}
}

Taky mi to píše, že proměnná z nebyla inicializována moc nevím, co si před tím představit, pokud někdo pomůžete budu moc vděčný

Jirka
C / C++ › Rekurzivní algoritmus pro de…
17. 8. 2011   #146466

#15 KIIV
Ještě to není dodělaný, na konci pak chci hodit výstup abych zkontroloval jestli to vůbec funguje.. Ten tvůj způsob moc nechápu, ale to je spíš tím, že Cko chápu jen okrajově.. Ale budu tam používat i komplexní čísla, takže jestli to přes pow nepůjde tak mi asi ani nic nezbyde.. No, jednodušší, nevím, půjde o matic 2x2 - 5x5 a pro 5x5 by ten kód asi moc jednoduchej nebyl ne? Jo ještě jeden dotaz, dá se z programu .exe vytáhnout zdroják?

Jirka
C / C++ › Rekurzivní algoritmus pro de…
17. 8. 2011   #146464

   

int **DET(int MAT_A[5][5]);
{
	int w, x, y, z;
	int det;
	int RAD_A = 5;
	int SUB[5][5] = {0};	
for (int w = 0; w < RAD_A; w++)										// Rozklad podle prvního řádku
		{
for (int x = 0; x < RAD_A - 1; x++)									// Vytvoření submatice
	for (int y = 0; x < RAD_A - 1; y++)
		SUB[x-1][z] = MAT_A[x][y];
		z++;

	det += pow(-1.0, w) * MAT_A[0][w] * DET(SUB); 
		}
}

Tohle je celý kód funkce.. Má to počítat determinant matice rekurzivně, funkce vytvoří submatici a zní rekurzivně počítá ten determinant a ten řádek co sem postoval slouží k uložení výsledku.. pow(-1.0, w) slouží pro určení znaménka, druhej činitel je ten prvek podle kterýho je submatice vytvořená a třetí je ten determinant submatice..

Jirka
C / C++ › Rekurzivní algoritmus pro de…
17. 8. 2011   #146461

No dobře, zkusím to.. Tak pro začátek, zkouším jestli ta funkce vůbec funguje, takže si nechám vytvořit náhodnou matici 5x5 a pak zavolat tu funkci, problém je, že to hází ten stejnej fatal error (fatal error LNK1120: 1 unresolved externals) a to konkrétně u části  

det += pow(-1.0, w) * MAT_A[0][w] * DET(SUB); 

mám podtržený to DET.. a DET je ta funkce kterou mám definovanou takhle  

int **DET(int MAT_A[5][5]);
Jirka
C / C++ › Rekurzivní algoritmus pro de…
17. 8. 2011   #146458

#8 KIIV
Jo, tohle sem studoval jen okrajově, navíc už nemám moc času, mám tak maximálně měsíc abych vytvořil program, takže se maximálně modlím, abych to stihnul a zkouším to nějak stvořit i bez větších znalostí.. Náhodou nevíš, jestli by se tady našel někdo, kdo by byl ochotnej s tím třeba pomoct, nechci aby to za mě někdo napsal, ale spíš jen poukazovat na chyby a proč tam jsou a jak to eventuelně opravit.. Neříkám, že bych chtěl pomoc zadarmo..

Jirka
C / C++ › Rekurzivní algoritmus pro de…
17. 8. 2011   #146456

Jak sem řekl, v C++ se téměř neorientuju, ale musím v tom stvořit ten program, takže se asi budu v hodně věcech plést.. Já si pod headerem představuju soubor .h ve kterým budou uložený všechny funkce. A pak ji pomocí #include zahrnu do programu a budu už jen volat funkce.. Aha.. Takže bych měl zkusit nějak spatlat dohromady program, kde bych zahrnul všechny proměnný a ten error by mi to nemělo hodit? Fakt se omlouvám za neznalost..

Jirka
C / C++ › Rekurzivní algoritmus pro de…
17. 8. 2011   #146454

Tenhle kód bude jen header programu, definovaný to bude asi v samotným programu kde se bude zadávat jakej řád ta matice bude mít

Jirka
C / C++ › Rekurzivní algoritmus pro de…
17. 8. 2011   #146452

n je počet sloupců a řádků, de facto řád matice

Jirka
C / C++ › Rekurzivní algoritmus pro de…
17. 8. 2011   #146450

Zdravím, mám za úkol udělat funkci na výpočet determinant, funkce se pak použije v programu, sem s programováním ale totální začátečník a proto bych byl vděčný za každou pomoc, kdyby někdo mohl říct co je špatně.. Háže to chybu: fatal error LNK1120: 1 unresolved externals.

 

float **determinant(float **MAT_A)
{
int i, k, l, h;
	int det;
	int SUB[n][n] = {0};
if (RAD_A< 1) return 0;				// Není matice
if (RAD_A == 1) return MAT_A[0][0];		// Matice 1x1
if (RAD_A == 2)					// Matice 2x2
	det = MAT_A[0][0] * MAT_A[1][1] - MAT_A[1][0] * MAT_A[0][1];	
for (int i = 0; i < RAD_A; i++)			// Rozklad podle prvního řádku
		{
for (int k = 0; k < RAD_A - 1; k++)		// Vytvoření submatice
	for (int l = 0; k < RAD_A - 1; l++)
		SUB[k-1][h] = MAT_A[k][l];
		h++;

	det += pow(-1.0, i) * MAT_A[0][i] * determinant(SUB, RAD_A-1);
        return d;
}

Díky za každou pomoc

 

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý