Autor | Zpráva | ||
---|---|---|---|
Laman Profil |
#1 · Zasláno: 29. 6. 2010, 07:43:12
píšu v javascriptu kalkulačku (pomiňme, nakolik smysluplná má činnost je) a zasekl jsem se na tom, že z jedné funkce (dělení) zavolám jinou (odčítání) a ta mi v té původní změní hodnotu proměnné, kterou by neměla
function odecist(men1,men2){ if(men1==men2){return new Array(0)} znamenko="" if(!vetsi(men1,men2)){ temp=men1 men1=men2 men2=temp znamenko="-" } for(i=0;i<men2.length;i++){men2[i]=9-men2[i]} // tento řádek pracuje správně pro odčítání, ale z nějakého důvodu mi změní i dělitele při dělení for(i=0;i<men1.length-men2.length;i++){men2.push(9)} carry=0 for(i=0;i<men2.length;i++){ temp=1*men1[i]+1*men2[i]+carry carry=Math.floor(temp/10) men1[i]=temp%10 } i=0 while(men1[i]==9){men1[i]=0;i++} if(men1[i]!=undefined){men1[i]++} else{men1[i]=0} if(znamenko!=""){men1.push(znamenko)} return men1 } function vydelit(del1,del2){ zb=del1.splice(del1.length-del2.length,del2.length) res=new Array() for(k=0;k<del1.length;k++){ j=0 while(zb==del2||vetsi(zb,del2)){ // del2 má správnou hodnotu, např. 12 zb=odecist(zb,del2) j++ // del 2 už má špatnou hodnotu, např. 87 } res.unshift(j) zb.pop() zb.unshift(del1[k]) } return res } nejdřív jsem myslel, že jsem jenom proměnné pojmenoval stejně, ale ani přejmenování problém nevyřešilo, takže vážně nevím. podstatné jsou (měly by být) především okomentované řádky. díky za každou radu |
||
Nox Profil |
#2 · Zasláno: 29. 6. 2010, 09:39:46
Myslel jsem, že se v JS musí psát středníky...
Nepoužívej globální proměnné...vše co není parametr tam vytvoř nově pomocí var, tzn. var promenna = neco; Není mi jasné na co tak složité funkce pro tak triviální věci (parametr pro číselnou soustavu tam stejně nevidim)...proč nestačí +-*/ ? |
||
Laman Profil |
#3 · Zasláno: 29. 6. 2010, 10:57:34
hmm, tak to bylo asi tím, že jsem jako parametr předával pole a ono to pořád pracovalo s tím původním... nejsem si moc jistý. všude jsem dal var a nic se nezměnilo. ale když jsem zkusmo přidal jinak úplně jalový řádek par=del2.join("").split(""), tak to zlobit přestalo. ještě uvidím, co s tím udělám dál
while(zb==del2||vetsi(zb,del2)){ par=del2.join("").split("") zb=odecist(zb,par) j++ } Nox: středníky se psát mají, ale nemusí s +-*/ by to bylo o ničem :). jde o to, že chci kalkulačku na extrémní výpočty, to znamená aby pracovala s čísly za hranicemi běžných číselných datových typů. proto mám čísla v polích, ale cenou za to je nutnost přepsat všechny matematické operace a funkce každopádně díky za pomoc |
||
Nox Profil |
#4 · Zasláno: 29. 6. 2010, 11:15:29
aha, jo, objekty se předávají referencí, zkus
tvojepole.slice(0) (možná je hezčí způsob, nevim) |
||
Časová prodleva: 14 let
|
0