NOVINKA - Online rekvalifikační kurz Python programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
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í.

Diskuze – Lekce 1 - Hledání extrému (minima a maxima) v poli

Zpět

Upozorňujeme, že diskuze pod našimi online kurzy jsou nemoderované a primárně slouží k získávání zpětné vazby pro budoucí vylepšení kurzů. Pro studenty našich rekvalifikačních kurzů nabízíme možnost přímého kontaktu s lektory a studijním referentem pro osobní konzultace a podporu v rámci jejich studia. Toto je exkluzivní služba, která zajišťuje kvalitní a cílenou pomoc v případě jakýchkoli dotazů nebo projektů.

Komentáře
Avatar
Зайчик
Člen
Avatar
Odpovídá na Neaktivní uživatel
Зайчик:13.3.2013 19:40

To je fakt, já si teď potřeboval vytáhnout max,min a moje verze mi přišla lepší. Nepotřeboval jsem index ale přímo hodnotu. Na to je to podle mě lepší. ( můj názor ) :)

Editováno 13.3.2013 19:40
Odpovědět
13.3.2013 19:40
Коммунизм для нашего будущего!
Avatar
Odpovídá na
Jakub Hroník:25.5.2019 22:07

Asi bych to udělal přes hashovací tabulku, kam si budeš poznamenávat četnosti jednotlivých prvků. V AWK by to mohlo vypadat asi nějak takhle:

function najdiNejcetnej­siPrvek(pole, len){
for (t=1;t<=len;t++){
cetnosti[t]++; #případný nový prvek se automaticky inicializuje na 0
if (cetnosti[t] > cetnosti[max]) max = t;
}
return max;
}

 
Odpovědět
25.5.2019 22:07
Avatar
DarkCoder
Člen
Avatar
DarkCoder:7.1.2020 18:59

Pokud se počet prvků pole, jehož minimum nebo maximum chceme získat, bude rovnat nule, nebude algoritmus pracovat správně (nelze vracet nulovou hodnotu, tedy pozici prvního prvku).

Odpovědět
7.1.2020 18:59
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
Petra Petty Kunzová:8.2.2022 22:38

Zdravím,
jak prosím získám minimum a maximum z vícerozměrného pole naplněného náhodnými čísly od -100 po 100? Cyklus už mám vypsaný pro tvorbu matice, takže ho nechci psát znovu. A potřebuji vypsat přímo číslo a ne pozici. Už se s tím piplám dlouho a vyzkoušela jsem spoustu možností, ale stále to nevypíše správně. Děkuji za radu :)

Odpovědět
8.2.2022 22:38
Kam míří naše pozornost, tam energie a tam se i objeví naše výsledky .
Avatar
DarkCoder
Člen
Avatar
Odpovídá na Petra Petty Kunzová
DarkCoder:9.2.2022 0:12
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define MIN -100
#define MAX 100
#define ROW 10
#define COL 10

int main(void) {
        int nums[ROW][COL];
        int min = MAX, max = MIN;

        srand((unsigned)time(NULL));

        for (int i = 0; i < ROW; i++) {
                for (int j = 0; j < COL; j++) {
                        nums[i][j] = (rand() % (MAX - MIN + 1)) + MIN;
                        printf("%d ", nums[i][j]);
                        if (nums[i][j] < min) min = nums[i][j];
                        if (nums[i][j] > max) max = nums[i][j];
                }
        }

        printf("\nMin: %d, Max: %d\n", min, max);

        return 0;
}
Odpovědět
9.2.2022 0:12
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
Odpovídá na DarkCoder
Petra Petty Kunzová:9.2.2022 14:06

Mockrát děkuji DarkCoder. Přehodila jsem si to do php a maximum jde perfektně. Jen ten minimální prvek jde stále poněkud mimo. Vypíše prvek z pole, ale ne ten nejmenší. Asi mám špatně nadefinovanou proměnnou minima, ale vyzkoušela jsem ji nastavit na 0, null, pole, PHP_INT_MAX, a pořád ne ten nejmenší aktuální prvek v poli. U nastavení na -100 mi to vypíše jen těch -100. Ale i tak jsi mi hodně pomohl. Ještě jednou díky :)

Odpovědět
9.2.2022 14:06
Kam míří naše pozornost, tam energie a tam se i objeví naše výsledky .
Avatar
DarkCoder
Člen
Avatar
Odpovídá na Petra Petty Kunzová
DarkCoder:9.2.2022 14:15

Není zač, pokud se špatně zobrazuje minimum, přilož kód programu.

Zaměř se na tyto body:

  • inicializace (je třeba nastavit na max)
  • náhodné číslo v rozsahu (ujistit se, že se vypisují všechna čísla v rozsahu <-100, 100>
  • aktualizace minima

konkrétně:

int min = MAX;

nums[i][j] = (rand() % (MAX - MIN + 1)) + MIN;

if (nums[i][j] < min) min = nums[i][j];
Odpovědět
9.2.2022 14:15
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
DarkCoder
Člen
Avatar
Odpovídá na Petra Petty Kunzová
DarkCoder:9.2.2022 15:05

Ještě jedna věc, hledání minima a maxima ve vícerozměrném poli se nijak neliší od hledání v jednorozměrném poli. Lze použít úplně stejný algoritmus. Jde o to, že 2D pole je uloženo v paměti po řádcích. To znamená, že adresy prvků by byly stejné.

Takže adresa 11. prvku by byla:

&nums[1][0]
nums + 10

A hodnota 11. prvku by byla:

nums[1][0]
*(nums + 10)

Mohu tedy pro hledání minima a maxima použít jen jeden cyklus for.

Např. nulování všech prvků 2D pole o velikosti [ROW][COL] nebo 1D pole o velikosti [ROW * COL] lze napsat takto:

for(int i = 0; i < (ROW * COL); i++){
    *(nums + i) = 0;
}
Odpovědět
9.2.2022 15:05
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
Petra Petty Kunzová:9.2.2022 19:45

Ta ještě jedna věc vypadá zajímavě, ale to vyzkouším jindy ;) K tomu co mám napsané teď tak v php to mám takto:
Inicializace :

$maxElement = PHP_INT_MIN;
$minElement = PHP_INT_MAX;

Náhodné číslo : Všechna čísla v tom rozsahu se opravdu vypisují

echo('<td>' . $matice[$i][$j] = rand(-100, 100) . '</td>');

Aktualizace minima : je také přidána .

if ($matice[$i][$j] < $minElement) {
                    /** @var type $minElement */
                    $minElement = $matice[$i][$j];
                }

A přikládám jeden z výstupů : 37, -18, 35, -95
-59, 31, 23, -75
6, 7, -31, 51
91, -65, -34, -71
Maximus v poli je 91 a minimus je -18 .

Odpovědět
9.2.2022 19:45
Kam míří naše pozornost, tam energie a tam se i objeví naše výsledky .
Avatar
Odpovídá na DarkCoder
Petra Petty Kunzová:9.2.2022 19:51

Jsem to zapomněla odeslat jako odpověď. Jen ještě, velikost matice je taky proměnlivá jako čísla v ní. Je tvořená přes formulář. Počet řádků i sloupců zadá uživatel.

Odpovědět
9.2.2022 19:51
Kam míří naše pozornost, tam energie a tam se i objeví naše výsledky .
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 10 zpráv z 34.