Diskuze: Extremy v Matici
V předchozím kvízu, Online test znalostí C++, jsme si ověřili nabyté zkušenosti z kurzu.

Člen

Zobrazeno 22 zpráv z 22.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí C++, jsme si ověřili nabyté zkušenosti z kurzu.
Kód nechápu a nechápu, proč jej nemáš mezi tagy code...
for (int x = 0; x < delkaRadku; x++)
for (int y = 0; y < pocetRadku; y++)
if (matica[x][y] > max)
max = matica[x][y];
else if (matica[x][y] < min)
min = matica[x][y];
http://mathworld.wolfram.com/…yMinors.html
private float CalculateDeterminant(float[,] a, int n)
{
float det = 0;
for (int i = 0; i < n - 1; i++)
for (int j = i + 1; j < n; j++)
{
det = a[j, i] / a[i, i];
for (int k = i; k < n; k++)
a[j, k] = a[j, k] - det * a[i, k];
}
det = 1;
for (int i = 0; i < n; i++)
det = det * a[i, i];
return det;
}
Console.WriteLine("Zadej délku dvourozměrné matice.");
int n = 1;
int.TryParse(Console.ReadLine(), out n);
float[,] matice = new float[n,n];
for (int i = 0; i < n; i++)
for (int j = 0; j < n; j++)
matice[i,j] = j + 1;
MessageBox.Show(CalculateDeterminant(matice, n - 1) + "");
Není to úplně správně, ale alespoň to nemáš tak zadarmo...
mam taku otazocku, vyskytol sa mi pri semestralnej praci taky mensi problem, mam nakodovanych cca 100 riadkov ale program sa spusti iba asi do 70 riadku a potom uplne ignoruje dalsie veci, a este mi tam treba dalsich 80-100 riadkov odhadujem
Kdyby jsi dělal ve vyšším jazyku jako třeba C#, měl by jsi o dost jednodušší život. Viz. analýza kódu při stavění programu...
Kdyby to dělal ve vyšším jazyku, například v Octave, měl by to na jeden krátký řádek. Takhle se musí patlat s cykly.
tak mi ho pošli nebo ho hoď přímo sem něco s tím provedeme
zdravim opat ja mam taky
mensi problem, ked spravim dve funkcie (dvoj rozmerne polia - matica) tak mi ich
nechce v hlavnom programe spocitat, odcitat a pod. neviete co za tym moze byt
??
int matA()
{
int i,j,m=3,n=3, maticaA[m][n];
for(i = 0; i < 3 ; i++)
{
for(j = 0; j < 3; j++)
{
printf("A[%d,%d] ",(i+1),(j+1));
scanf("%d",&maticaA[i][j]);
}
}
}
Založíš to pole v hlavním programu a funkci ho předáš odkazem.
Také ho můžeš vytvořit ve funkci jako objekt a předat volající funkci (hlavnímu programu) returnem. Tohle považuji za čistější řešení.
Když ho ale vytvoří uvnitř funkce a předá returnem tak ho potom někde musí taky smazat, což neni moc chytrý, protože co ve funkci vznikne by v ní mělo taky zaniknout. Jinak na to můžeš někdy zapomenout, obzvlášť když tu funkci budeš používat častěji nebo potom ty výsledný data předávat někam dál. Takhle by se to řešilo určitě v managed jazyce, ale v C++ bych to nedělal, vhodnější je pole předat pointerem, popřípadě referencí. Ještě by mohl udělat třídu a definovat konverzní konstruktory který to pole překopírujou, to je ale jednak na muj vkus poměrně nepřehledný, a hlavně dost neefektivní.
V Pythonu, PHP a Javě to dělám běžně. Souhlasím, že v C++ to není zrovna nejvhodnější řešení.
však jsem ti to psal ať použiješ funkce a pointery držím palce
Když už ses zmínil o třídě: Proč bys měl dělat konverzní konstruktory? V konstruktoru definuješ pole, se kterým budou ostatní metody manipulovat dle potřeby.
Takhle by ta třída musela mít členskou funkci která by obsahovala vstup a výstup, což by členská funkce třídy v podobných případech neměla. Nebo alespoň já zásadně nenechávam třídu řešit vstupy/výstupy, pokud to vyloženě nemá v popisu práce. Měla by jenom poskytnout hodnoty a ty by měla zpracovat nějaká samostatná funkce. Ta jeho funkce má načítat hodnoty od uživatele a něco vypisovat, to by třída pro práci s maticí dělat neměla.
Zobrazeno 22 zpráv z 22.