Diskuze: PHP-pozice určitého čísla
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.

Člen

Zobrazeno 8 zpráv z 8.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.
Ahoj, nejsem si z tvého zadání vším jistý, ale tady máš dvě řešení:
Pokud výstupem nemají být unikátní čísla
$min = 0;
$max = 15;
$total = 20; // $total = $_POST["a"];
$numbers = [];
for ($i = 1; $i <= $total; $i++) {
array_push($numbers, mt_rand($min, $max));
}
echo 'čísla jsou: ' . join(', ', $numbers) . '<br/>';
echo 'nejvyšší hodnota je: ' . max($numbers) . '<br/>';
echo 'pozice nejvyšší hodnoty je/jsou: '. join(', ', array_map(function ($i) { return $i + 1; }, array_keys($numbers, max($numbers))));
Pokud výstupem mají být pouze unikátní čísla
$min = 0;
$max = 15;
$total = 20; // $total = $_POST["a"];
$total = count(range($min, $max)) < $total ? count(range($min, $max)) : $total;
$numbers = [];
while(($i = count($numbers)) < $total) {
array_push($numbers, mt_rand($min, $max));
$numbers = array_unique($numbers);
}
echo 'čísla jsou: ' . join(', ', $numbers) . '<br/>';
echo 'nejvyšší hodnota je: ' . max($numbers) . '<br/>';
echo 'pozice nejvyšší hodnoty je: ' . (array_keys($numbers, max($numbers))[0] + 1);
//{$max=$random;}
{$max=$random; $pozice=$i;}
Jinak, v tom kodu mas spousty nesmyslu. Ono to nejspis funguje, ale nespolehal bych na to. Treba mi neni jasne, proc random definujes nejdriv jako array, a pak to zmenis na value (float/string)
$random= array(null); // ???
$max = $random[0];
$random = mt_rand(0,50); //???
// s array se preci pracuje takto
$pole[] = cislo;
$pole[$i] = cislo;
...
To není pravda, protože $i ve for cyklu počítá od nuly, takže pozice by byla reálně o jednu vyšší než by mu ukázala tvá úprava.
Ušlo by to v nouzi jako pozice v poli, jenže pole si hned při prvním průchodu přepíše na int. Nemluvě o dalších problémech v kódu a o tom, že takto postvený random generátor může s určitou pravděpodobností vygenerovat stejné nejvyšší číslo opakovaně a ty bys mu řekl jen první výskyt.
Zadne pole neuklada, na nulte pozici je null a tu pozici prepisuje.
Jeste bych mozna zminil
for($i1=1;$max=$random;$i++)
// $i1 a $i++ ??? urcite vis, co delas?
// $max=$random ??? porovnani je >= <= a ==, rovnitko je prirazeni
(bool) $max=$random // true, takze cyklus ihned skonci, ne?
Kdybych v té větě přímo nedodával, že si pole při prvním průchodu přepíše na int. Navíc nepřepisuje žádnou nultou pozici. On přepíše celý typ proměnné $random.
Ale o pole nejde. Jde o to, že ve for cyklu počítaném od nuly je rada $pozice=$i bez dalších úprav špatně, protože $i je v tom kódu o jednu menší než reálně vypsaná pozice největšího čísla.
Když to podle tvé první rady rozchodí, dostane na výstupu tohle
45, 41, 49, 36, 13, 4, 37, 16, 48, 32, 20, 38, 38, 20, 27
největší číslo je: 49
pozice čísla je: 2
A tento problem uz si dokaze vyresit sam... Mne to totiz prijde jako ukol do skoly a nehodlam to cele resit za nej.
Zobrazeno 8 zpráv z 8.