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
DarkCoder
Člen
Avatar
Odpovídá 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.

Editováno 9.2.2022 20:58
Odpovědět
9.2.2022 20:57
"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 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 />")
        ?>
Odpovědět
9.2.2022 22:12
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: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

Odpovědět
10.2.2022 5:09
"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á: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 ;)

Odpovědět
10.2.2022 19:37
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: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í.

Odpovědět
10.2.2022 20:29
"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á: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í ;)

Editováno 10.2.2022 21:14
Odpovědět
10.2.2022 21:13
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: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. 😊

Odpovědět
10.2.2022 21:41
"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á: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.

Odpovědět
17.2.2022 14:54
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: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á.

Odpovědět
17.2.2022 15:25
"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: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 />")
?>
Odpovědět
19.2.2022 22:37
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
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.