Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
28tomino
Člen
Avatar
28tomino:20.11.2012 21:32

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
Tvůrce
Avatar
Odpovídá na 28tomino
matesax:20.11.2012 21:48

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
20.11.2012 21:48
Avatar
28tomino
Člen
Avatar
28tomino:20.11.2012 22:14

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
Tvůrce
Avatar
Odpovídá na 28tomino
matesax:21.11.2012 7:01

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
21.11.2012 7:01
Avatar
28tomino
Člen
Avatar
28tomino:21.11.2012 20:23

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
Tvůrce
Avatar
Odpovídá na 28tomino
Kit:21.11.2012 20:33

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
Tvůrce
Avatar
Odpovídá na 28tomino
matesax:21.11.2012 20:43

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
Tvůrce
Avatar
Odpovídá na matesax
Kit:21.11.2012 20:46

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:21.11.2012 20:47

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 Hartinger
Vlastník
Avatar
Odpovídá na 28tomino
David Hartinger:22.11.2012 12:28

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

Nahoru Odpovědět
22.11.2012 12:28
New kid back on the block with a R.I.P
Avatar
28tomino
Člen
Avatar
28tomino:2.12.2012 12:28

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
Зайчик:2.12.2012 12:29

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:13.12.2012 13:44

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
Tvůrce
Avatar
Odpovídá na 28tomino
Kit:13.12.2012 13:56

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:13.12.2012 13:58

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

 
Nahoru Odpovědět
13.12.2012 13:58
Avatar
Kit
Tvůrce
Avatar
Odpovídá na 28tomino
Kit:13.12.2012 14:02

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
13.12.2012 14:02
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Lukáš Hruda
Tvůrce
Avatar
Odpovídá na Kit
Lukáš Hruda:13.12.2012 14:21

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
Tvůrce
Avatar
Odpovídá na Lukáš Hruda
Kit:13.12.2012 14:33

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:13.12.2012 15:31

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
Зайчик:13.12.2012 15:32

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
Tvůrce
Avatar
Odpovídá na Lukáš Hruda
Kit:13.12.2012 19:17

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
Lukáš Hruda
Tvůrce
Avatar
Odpovídá na Kit
Lukáš Hruda:13.12.2012 20:25

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.