Diskuze: Extremy v Matici

C++ C a C++ Extremy v Matici

Avatar
28tomino
Člen
Avatar
28tomino:

kedzde je predchadzajuca tema Maximum zamknuta tak som vytvoril novu, môj problem je že keď si vytvorim maticu (pocet riadkova a stlpcov zada uzivatel) tak v tejto matici mi nie za kazdym najde maximum a minimum, niekedy vypise maximum aj cislo ktore sa v tej matici nenechadza, cast zdrojoveho kodu vyzera takto, samozrjeme deklarovane int max=0, min=0; a nasledne vypisane printf("%d",max);

max = matica[0][0];
min = matica[0][0];
for(i = 0; i < matica[i][j]; i++)
{
for(j = 0; j < matica[i][j]; j++)
{
if(matica[i][j] > max)
{
max = matica[i][j];
}
if(matica[i][j] < min)
{
min = matica[i][j];
}
}
}

 
Odpovědět 20.11.2012 21:32
Avatar
matesax
Redaktor
Avatar
Odpovídá na 28tomino
matesax:

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];
 
Nahoru Odpovědět  +2 20.11.2012 21:48
Avatar
28tomino
Člen
Avatar
28tomino:

vdaka, mal som to zle, dal by sa ten program upravit aby mi vypocital napr determinat, ci to by bolo na dlhe lakte ?

 
Nahoru Odpovědět 20.11.2012 22:14
Avatar
matesax
Redaktor
Avatar
Odpovídá na 28tomino
matesax:

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... :)

 
Nahoru Odpovědět  +1 21.11.2012 7:01
Avatar
28tomino
Člen
Avatar
28tomino:

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

 
Nahoru Odpovědět 21.11.2012 20:23
Avatar
Kit
Redaktor
Avatar
Odpovídá na 28tomino
Kit:

Asi v tom programu budeš mít chybu.

Nahoru Odpovědět 21.11.2012 20:33
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
matesax
Redaktor
Avatar
Odpovídá na 28tomino
matesax:

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...

 
Nahoru Odpovědět 21.11.2012 20:43
Avatar
Kit
Redaktor
Avatar
Odpovídá na matesax
Kit:

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.

Nahoru Odpovědět 21.11.2012 20:46
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
28tomino
Člen
Avatar
28tomino:

letny semester budem mat c++, je tu nieco ako PM, nakolko sa mi tu nechce moc davat cely moj zdrojak ?

 
Nahoru Odpovědět 21.11.2012 20:47
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na 28tomino
David Čápka:

PM tu je, ikona zprávy vpravo nahoře.

Nahoru Odpovědět 22.11.2012 12:28
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
28tomino
Člen
Avatar
28tomino:

je tu niekto kto sa vie dobre 'C', mam mensi problem ktori sa mi nedari vyriesit(do while a switch), poslem zdrojak v PM !

Editováno 2.12.2012 12:29
 
Nahoru Odpovědět 2.12.2012 12:28
Avatar
Зайчик
Člen
Avatar
Odpovídá na 28tomino
Зайчик:

tak mi ho pošli nebo ho hoď přímo sem :) něco s tím provedeme

Nahoru Odpovědět 2.12.2012 12:29
Коммунизм для нашего будущего!
Avatar
28tomino
Člen
Avatar
28tomino:

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",&ma­ticaA[i][j]);
}
}
}

 
Nahoru Odpovědět 13.12.2012 13:44
Avatar
Kit
Redaktor
Avatar
Odpovídá na 28tomino
Kit:

Protože ukončením funkce pole maticaA zanikne.

Nahoru Odpovědět 13.12.2012 13:56
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
28tomino
Člen
Avatar
28tomino:

a ako to osterim aby pole nezaniklo? vobec ma nic nenapada

 
Nahoru Odpovědět 13.12.2012 13:58
Avatar
Kit
Redaktor
Avatar
Odpovídá na 28tomino
Kit:

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í.

Nahoru Odpovědět  +1 13.12.2012 14:02
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Odpovídá na Kit
Lukáš Hruda (Luckin):

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í.

 
Nahoru Odpovědět 13.12.2012 14:21
Avatar
Kit
Redaktor
Avatar
Odpovídá na Lukáš Hruda (Luckin)
Kit:

V Pythonu, PHP a Javě to dělám běžně. Souhlasím, že v C++ to není zrovna nejvhodnější řešení.

Nahoru Odpovědět 13.12.2012 14:33
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
28tomino
Člen
Avatar
28tomino:

robim to v jazyku C, a asi bude najlepsie to "pole předat pointerem" vdaka

 
Nahoru Odpovědět 13.12.2012 15:31
Avatar
Зайчик
Člen
Avatar
Odpovídá na 28tomino
Зайчик:

však jsem ti to psal ať použiješ funkce a pointery :P držím palce

Nahoru Odpovědět 13.12.2012 15:32
Коммунизм для нашего будущего!
Avatar
Kit
Redaktor
Avatar
Odpovídá na Lukáš Hruda (Luckin)
Kit:

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.

Nahoru Odpovědět 13.12.2012 19:17
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Odpovídá na Kit
Lukáš Hruda (Luckin):

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.

 
Nahoru Odpovědět 13.12.2012 20:25
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 22 zpráv z 22.