Autor Zpráva
Laman
Profil
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
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
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
aha, jo, objekty se předávají referencí, zkus

tvojepole.slice(0)


(možná je hezčí způsob, nevim)

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

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

0