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
DarkCoder
Člen
Avatar
Odpovedá na Petra Petty Kunzová
DarkCoder:9.2.2022 20:57

Zápisy vypadají v pořádku. Pošli více z kódu, definice proměnných i celý for cyklus. Vypiš si hodnoty PHP_INT_MIN a PHP_INT_MAX. Vypiš ještě v každé iteraci po generování náhodného čísla hodnotu minima, maxima a hodnoty na daném indexu.

Rozměry matice nech na 4x4.

Editované
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 22:12

Už je to asi pozdním časem, že nechápu co myslíš výpisem hodnot PHP_INT_MIN a PHP_INT_MAX :D a taky kolikrát mám iterovat a vypisovat? Třeba se to mé chápání zase ráno zlepší ;) :D

A tady kód :

<?php
        $s = $_POST['sloupec']; //@param int $s sloupec
        $r = $_POST['radek']; //@param int $r řádek
        $matice = [[]]; //@param pole
        $maxElement = PHP_INT_MIN;
        $minElement = PHP_INT_MAX;

        echo('<table border="1">'); //tabulka
        //cyklus pro vytvoření pole
        for ($i = 0; $i < $s; $i++) {
            echo('<tr>');
            for ($j = 0; $j < $r; $j++) {
                echo('<td>' . $matice[$i][$j] = rand(-100, 100) . '</td>');
                if ($matice[$i][$j] < $minElement) {
                    /** @var typ $minElement */
                    $minElement = $matice[$i][$j];
                }
                if ($matice[$i][$j] > $maxElement) {
                    /** @var typ $maxElement */
                    $maxElement = $matice[$i][$j];
                }
            }
            echo('</tr>');
        }
        echo('</table>');

        echo("Maximus v poli je " . $maxElement . " a minimus je " . $minElement . " .<br />")
        ?>
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:10.2.2022 5:09

Chyba se nachází v echo příkazu vnitřního cyklu for.

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

Je třeba oddělit přiřazení náhodného čísla na daný index pole a výpis hodnoty na tomto indexu. Tedy zapsat to takto:

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

U deklarace 2D pole představuje první index počet řádků a druhý index počet sloupců. Při výpisu pole pomocí dvou cyklů for se používá iterační proměnná vnějšího cyklu for pro řádky a vnitřní proměnná pro sloupce.

for ($i = 0; $i < $r; $i++) {
        for ($j = 0; $j < $s; $j++) {
                // příkazy nad daným prvkem pole
        }
}

kde: r - počet řádků pole, s - počet sloupců pole

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á:10.2.2022 19:37

Wooow, mockrát děkuji :) Funguje to! Vyzkoušeno asi 10x. ;) Pro někoho asi prkotina, ale pro mne jako začátečníka docela výzva ;)

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:10.2.2022 20:29

Prkotina, no nevím zda bych to tak nazval. Pořád lepší začátečník než někdo kdo v PHP nenapsal jedinou řádku kódu. 😀 Pouze zkušenosti. Někdy nastanou při provádění vícero úkonů najednou vedlejší efekty, kde to nedělá to co bychom chtěli. Pak je dobré si to celé rozdělit na dílčí části, které se snáze ladí.

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á:10.2.2022 21:13

Tak děkuji, že jsi se podělil o svou zkušenost :D Koukala jsem a ptala se různě po netu, ale všude bylo pole definované . Jen jeden kamarád mi udělal aspoň osnovu, ovšem v basic :D . Od toho vyplynulo přiřazení náhodného čísla v echu ;) Polovina se mi povedla samotné, ale to max a min s náhodnými čísly už mi nešlo do hlavy . Takže opravdu moc díky. Posouvá mne to o kousek dál v odhodlání ;)

Editované
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:10.2.2022 21:41

Je důležité k tomu takto přistupovat a pokusit se vyřešit úlohu vlastními silami a překonat překážku. Jen tak se člověk posune dál. Pokud si z toho všeho lze něco vzít a využít toho v další práci, pak debata měla smysl. 😊

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á:17.2.2022 14:54

To máš pravdu. :) A mám ještě dotaz. Chtěla bych taky vyřešit, jak barevně označit pole, kde se vyskytuje minimální prvek nebo maximální (to je jedno). Nechci řešení tady v diskuzi, ale aspoň tip kde se můžu podívat . Zatím bez souboru stylů. Potřebuji jen vědět kam to přiřadit. Zatím se mi pole barvilo mimo nebo na více místech. Jsem vděčná za jakoukoliv radu ;) Děkuji.

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:17.2.2022 15:25

Pro barevné zvýraznění minima a maxima je třeba pozměnit stávající kód. Je to z důvodu toho, že minimum a maximum lze určit až po projetí všech prvků a vyžaduje to zpětný zásah do vygenerovaného kódu. V tomto případě je třeba nejprve najít minimum a maximum bez HTML formátování, tedy čistě programátorsky. Nestačí pouze hodnota, ale je třeba si uchovat i indexy. Po získání indexů již lze vygenerovat tabulku. Uvnitř obou for cyklů se bude testovat na indexy minima a maxima. Pokud iterační proměnné budou odpovídat pozici minima, nastaví se styl pro barevný text. Vypíše se hodnota a ukončí vypisování daným barevným stylem. Ještě je třeba testovat zda minimum a maximum jsou si rovny. To proto, že bude barva textu odlišná. Pro minimum např. červená, maximum modrá, pokud minimum bude rovno maximu tak fialová.

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:19.2.2022 22:37

Jinými slovy, zkus následující kód:

<?php
$r = $_POST['radek'];
$s = $_POST['sloupec'];
$matice = [[]];
$minElement = PHP_INT_MAX;
$maxElement = PHP_INT_MIN;
$imin = $imax = -1;
$jmin = $jmax = -1;

for ($i = 0; $i < $r; $i++){
    for ($j = 0; $j < $s; $j++) {
        $matice[$i][$j] = rand(-100, 100);
        if ($matice[$i][$j] < $minElement) {
            $minElement = $matice[$i][$j];
            $imin = $i;
            $jmin = $j;
        }
        if ($matice[$i][$j] > $maxElement) {
            $maxElement = $matice[$i][$j];
            $imax = $i;
            $jmax = $j;
        }
    }
}

echo('<table border="1">');
for ($i = 0; $i < $r; $i++){
    echo('<tr>');
    for ($j = 0; $j < $s; $j++) {
        if(($i == $imin)&&($j == $jmin)){
            if(($imin == $imax)&&($jmin == $jmax)){
                echo('<td style="color:#ff00ff">' . $matice[$i][$j] . '</td>');
            }
            else echo('<td style="color:#ff0000">' . $matice[$i][$j] . '</td>');
        }
        elseif(($i == $imax)&&($j == $jmax)){
            echo('<td style="color:#0000ff">' . $matice[$i][$j] . '</td>');
        }
        else echo('<td>' . $matice[$i][$j] . '</td>');
    }
    echo('</tr>');
}
echo('</table>');

echo("Maximus v poli je " . $maxElement . " a minimus je " . $minElement . " .<br />")
?>
Odpovedať
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
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.