Autor Zpráva
MaxDJs
Profil *
Zdravím,

mám tento skript na výpočet mocniny zadaného čísla po stránce PHP správně?

Děkuji za odpověď


function mocnina($mocnenec,$mocnitel) {
if ($mocnenec < 0){
	$mocnenec = abs($mocnenec);
	$vysledek = 1;
	for ($i = 1; $i<=$mocnitel; $i++){
    $vysledek = $vysledek * $mocnenec;
    }
	return $vysledek;
}
elseif ($mocnenec == 0) {
$vysledek = 0;	
return $vysledek;
}
else {
$vysledek = 1;
for ($i = 1; $i<=$mocnitel; $i++){
$vysledek = $vysledek * $mocnenec;
}
return $vysledek;
}
}


$mocnenec = $_POST["mocnenec"];
$mocnitel = $_POST["mocnitel"];

if(preg_match('~^\\d+$~',$mocnenec)){
echo "Mocněnec = ".$mocnenec;
echo "<br />";
echo "Mocnitel = ".$mocnitel;
echo "<br />";
echo "<h2>Výsledek:</h2>";
echo $mocnenec."^".$mocnitel." = ".mocnina($mocnenec,$mocnitel);	
}
else{
echo "Nezadali jste číslo nebo řetězec čísel!";	
}
DJ Miky
Profil
Pokud nemáš důvod použít vlastní funkci, pak bude lepší použít tu vestavěnou, mimo jiné v ní fungují i necelá čísla.
MaxDJs
Profil *
tohle je regulární výraz pro desetinné místo?

Děkuji za odpověď

preg_match('~^[0-9]+([.,]{1}[0-9]*[1-9]+[0-9]*)?$~',$mocnenec)
petr 6
Profil
MaxDJs:
mám tento skript na výpočet mocniny zadaného čísla po stránce PHP správně?
Po stránce php ano. Po stránce logické ne. Pokud ti nevyhovuje funkce pow, a chceš vytvořit svou vlastní funkci, tak:
1. Nikde neošetřuješ, aby byl $mocnitel číslo větší nebo rovno 1. (Jinak se ti skript zacyklí na řádku 5 nebo 16.)
2. Jak již psal DJ Miky, nezohledňuješ ani možnou neceločíselnost proměnné $mocnitel (2^3 ti vrátí to samé jako 2^3.9).
3. Řádky 4 až 8 a 15 až 19 jsou stejné. Funkce abs funguje i na nezáporná čísla, takže kladná čísla můžeš zahrnout i do té první podmínky (a vypustit else).
4. $mocnenec rovný nule můžeš také zahrnout do té první podmínky, akorát budeš zbytečně procházet cyklem, takže bych před tím cyklem ověřoval, zda je $mocnenec nenulový.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0