Autor Zpráva
verde
Profil *
Dobré dopoledne vsem,

mám problém s podmínkou, mám čísla -10 -9 ... 0 ... 9 10

mám funkci

function porad($cX, $maxX) {
    if($cX >= -($maxX)) {return $cX;}
    else {return porad(((2*$maxX)+$cX), $maxX)+1;}
}


$cX je jakékoliv číslo, $maxX je tedy číslo 10, protože největší číslo je 10.
když zadám číslo -11, porad(-11, 10); tak se má vrátit číslo největší a to 10, když se zadá číslo -12, tak to vrátí číslo 9, tedy nekonečný kruh čísel -10 až 10.
tahle funkce funguje pro záporná čísla, ale ne pro kladná.

pro kladná čísla mám funkci

function poradX($cX, $maxX) {
    if($cX <= $maxX) {return $cX;}
    else {return poradX(($cX-(2*$maxX)), $maxX)-1;}
}


ale nedokážu to zakomponovat do jedný funkce:( asi na to koukám už moc dlouho, byl bych rád za radu, jak sloučit funkce tak, aby to fungovalo pro kladné i záporná čísla, děkuju
nightfish
Profil
nehledáš něco jako abs
pokud ne, tak napiš, co že ta funkce vlastně má dělat - ze současného popisu se mi to nějak nepodařilo pochopit a přemýšlet nad rekurzivním kódem se mi opravdu nechce
verde
Profil *
tu rekurzi není třeba vnímat, klidně se může vynechat

function poradX($cX, $maxX) {
    if($cX <= $maxX) {return $cX;}
    else {return ($cX-(2*$maxX))-1;}
}



ve zkratce jde o to

když zadám číslo -11 chci dostat číslo 10 závislosti tedy na $maxX číslu
když zadám číslo 11 chci dostat číslo -10 zase závisle na proměnná $maxX
nightfish
Profil
když zadám číslo -11 chci dostat číslo 10 závislosti tedy na $maxX číslu
když zadám číslo 11 chci dostat číslo -10 zase závisle na proměnná $maxX

popis nahouby, zkus to ještě jednou - kam zadáš číslo? v jaké závislosti na $maxX?
verde
Profil *
zkusím to znovu:-)

máš čísla od -10 do 10, tedy proměnná $maxX obsahuje číslo 10, pokud máš čísla od -20 do 20, tak $maxX je 20.
takže předpokládejme, že mám čísla -10 až 10 (-10, -9, -8, ... 8, 9, 10), tedy $maxX obsahuje číslo 10, a já nevím jak sloučit ty funkce tak, aby když dosadí do funkce největší číslo o +1 větší a nejmenší číslo o -1 menší, tedy takto:

poradX(11, 10); //výstup by měl být -10
poradX(-11, 10) //výstup by měl být 10


představ si, že čísla jsou do kruhu ...9, 10, -10, -9, .., 0, ..., 9, 10, -10, -9, ...

funkce napsané nahoře to řeší, ale jedna se stará o to, že pokud tam je -11, tak tam dá 10 a druhá naopak a já nevím jak to sloučit, aby jedna funkce řešila i záporný i kladný čísla

(pozn. rekurze, která nemusí být brána v potaz řeší, pokud se za $cX dá třeba číslo 80)
BetaCam
Profil
verde
Nestačilo by jednoduše napsat toto :
function poradNew($cX, $maxX) {
	if ($cX > 0) {
    	if($cX <= $maxX) {return $cX;}
    	else {return poradNew(($cX-(2*$maxX)), $maxX)-1;}
	}else{
		if($cX >= -($maxX)) {return $cX;}
    	else {return poradNew(((2*$maxX)+$cX), $maxX)+1;}
    }
}


Jinak je pravda, že ten tvůj popis není zrovna výstižný.
verde
Profil *
funguje krásně, díky

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