Sedim tady dva dny nad kódem z kalkulačky. Setrojil jsem stroj, co si pamatuje, umí vkládat číslice, vypínat se, zapínat se, ale neumí počítat. Když se nad tím tak zamyslím, kalkulačka co nepočítá je na 2 věci, ale ty tu nebudu vyjmenovávat. Potíž je v tom, že se mi nějak zalíbila a nechci od ní upustit. Tak vám trošku prozradím, jak vlastně funguje. Její display je vlastně textové pole. Rovnáse je submit a ten jenom zaktualizuje stránku, s tím, že pošlě přes post obsah displaye. PHP na zaktualizované stránce by mělo příklad vypočítat, jenže to se nestane. místo výsledku příkladu se totiž ukáže jen příklad samotný. Už jsem zkoušel i eval, ale ten nevypíše už vůbec nic. Tak se ptám, jestli mám kalkulačku se špatným svědomím hodit na skládku php kódu a nebo jestli je šance, že budu mít klid na duši. Díky moc.
Jej, no tak už mne utrpení zbavil timbulko =).
Ten kód je: return eval("\$x=".$calc.";return \$x;"); a díky moc!
Nebo si to můžeš rozkrájet funkcí split() http://php.ftp.cvut.cz/manual/cs/function.split.php
dle jednotlivých operací a závorek..
No, tak sem zase na začátku. Kalkulačka fungovala, to jo.. ale když jsem přidal vypočítání odmocniny, tak přestala fungovat úplně. Tentokrát se nezobrazuje ani příklad a už nikdo mi nedokáže poradit... Tak prosím o radu Vás. Tady je script, tedy.. spíš funkce:
function vypocet($calc) { $zakazaneznaky = array('[a-zA-Z]' => '');
$calc1 = strtr($calc,$zakazaneznaky);
$string = eregi_replace('\&\#8730;([0-9]+)', 'sqrt(\\1);', $calc1);
$string1 = $string.'konec';
$konce = array(';konec' => '','konec' => '');
$string2 = strtr($string1,$konce);
if(eregi_replace('([0-9]+)', '', $string2)==NULL) { return $string2;}
else { return eval($string2.';');');};}
Proměnná $calc odkazuje na textové políčko z postu. Děkuji za rady
mozna spis zkus jak za starejch casu zapojit do ty kalkulacky registry a delat to tak, jak to delaj vsechny kalkulacky...
co? :D Registry?
To myslíš vážně? heh :D
No tak to je teda fakt good.... :'(
takže kalkulačka mi asik nepude.. co? :'(
tak to zkus ukladat do session..
No jo, ale stejně mi nefunguje to počítání, takže by to áni tak nešlo :(
Predpokladam, ze posles pres formular nejakej retezec. Tedy jeden retezec. Ten potom musis rozsekat (nejspis podle prechodu z NECISLO na CISLO). vytvoris dve pole: pole operandu (A) a pole operatoru (B). Ke kazdemu klici z pole A odpovida jeden klic z pole B, tedy kazdy operand ma svuj operator (dalo by se to vylozit jako ze je to jedno pole, kde kazdy klic muze nabyvat dvou hodnot: A a B). Jako operand muze byt cislo nebo jine pole (zavorka nebo vnitrek funkce-tedy vlastne take zavorka). Jako operator muzou byt jak klasicke operatory (+-*/), tak funkce (sqrt, sin atd.). Podle me predstavy potom budes nejak prochazet tim polem, od tech nejvnorenejsich, ktere budes postupne pocitat a tim se tech vnorenych poli budes zbavovat (jejich vysledna hodnota bude na miste, kde bylo to vnorene pole), az se tim dostanes na to zakladni pole a stejnym zpusobem na jednu vyslednou hodnotu. Pri pocitani tech poli nesmis zapomenout na prioritu operatoru a tak dal.
Teda, to jsem zvedavej, jestli by to takhle fungovalo :D
donny: a já bych byl změdav, jestli to někdo pochopil a je schopen to přeložit :D v tomhle mám vážně zmatek...
kdybych tohle měl převést do fce výpočet, tak vážně vůbec netuším, jak by to mělo vypadat.... :'(
to ja sem taky zvedav...no asi nechame muj nocni proud myslenek stranou,co? :D
donny: no asik jo, ale co teda s tou zasranou kalkulačkou? :'(
no ja nevim, ja sem ti rekl, jak si predstavuju, ze pocita jednoducha kalkulacka. Nevim, co potrebujes presne ty...
No jako chci, aby to vyhodilo výsledek a ne jenon prázdnotu.
V té fci, co jsem napsal výš je něco špatně.... jenže já nevim co :'(
ja si teda nejsem uplne jistej zapisem
$zakazaneznaky = array('[a-zA-Z]' => '');
$calc1 = strtr($calc,$zakazaneznaky);
Odkdy se ve strtr() muzou pouzivat regexy?
donny: no tak abych se přiznal, nevim co jsou regexy, ale ani když to odstranim, tak to nejde.. takže sem asik vážně v koncích