Mikuláš je tu! Získaj 90 % extra kreditov ZADARMO s promo kódom CERTIK90 pri nákupe od 1 199 kreditov. Len do nedele 7. 12. 2025! Zisti viac:
NOVINKA: Najžiadanejšie rekvalifikačné kurzy teraz s 50% zľavou + kurz AI ZADARMO. Nečakaj, táto ponuka dlho nevydrží! Zisti viac:

Diskusia – Hľadanie extrému (minima a maxima) v poli

Späť

Upozorňujeme, že diskusie pod našimi online kurzami sú nemoderované a primárne slúžia na získavanie spätnej väzby pre budúce vylepšenie kurzov. Pre študentov našich rekvalifikačných kurzov ponúkame možnosť priameho kontaktu s lektormi a študijným referentom pre osobné konzultácie a podporu v rámci ich štúdia. Toto je exkluzívna služba, ktorá zaisťuje kvalitnú a cielenú pomoc v prípade akýchkoľvek otázok alebo projektov.

Komentáre
Posledné komentáre sú na spodnej časti poslednej stránky.
Avatar
Зайчик
Člen
Avatar
Odpovedá 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 ) :)

Editované
Odpovedať
Коммунизм для нашего будущего!
Avatar
Odpovedá 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;
}

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

Odpovedať
"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 :)

Odpovedať
Kam míří naše pozornost, tam energie a tam se i objeví naše výsledky .
Avatar
DarkCoder
Člen
Avatar
Odpovedá 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;
}
Odpovedať
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
Odpovedá 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 :)

Odpovedať
Kam míří naše pozornost, tam energie a tam se i objeví naše výsledky .
Avatar
DarkCoder
Člen
Avatar
Odpovedá 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];
Odpovedať
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
DarkCoder
Člen
Avatar
Odpovedá 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;
}
Odpovedať
"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 .

Odpovedať
Kam míří naše pozornost, tam energie a tam se i objeví naše výsledky .
Avatar
Odpovedá 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.

Odpovedať
Kam míří naše pozornost, tam energie a tam se i objeví naše výsledky .
Posledné komentáre sú na spodnej časti poslednej stránky.
Robíme čo je v našich silách, aby bola tunajšia diskusia čo najkvalitnejšia. Preto do nej tiež môžu prispievať len registrovaní členovia. Pre zapojenie sa do diskusie sa zaloguj. Ak ešte nemáš účet, zaregistruj sa, je to zadarmo.

Zobrazené 10 správy z 34.