Kirjautuminen

Haku

Tehtävät

Keskustelu: Koodit: JavaScript: Onko x. potenssi

JRokka [29.11.2019 20:54:12]

#

Koodasin tämmöisen mobiililaitteella DroidScript-ohjelmalla. Ohjelma laskee, onko luku x:n potenssi. Onko tässä, jotakin parannettavaa.

function OnStart()
{
	//Luodaan asettelu
	lay = app.CreateLayout( "linear", "VCenter,FillXY" );

	//Luodaan objektit.
	txt = app.CreateText( "0" );
	txt.SetTextSize( 32 );
	lay.AddChild( txt );
	text = app.CreateTextEdit( "0" );
	text.SetTextSize( 32 );
	lay.AddChild( text );
	btn = app.CreateButton("Paina");
	btn.SetOnTouch(Tarkista );
	lay.AddChild(btn);
    skb = app.CreateSeekBar( 0.8 );
    skb.SetRange(10);
    lay.AddChild(skb);
	//Add layout to app.
	app.AddLayout( lay );
}

function Tarkista(){
 //Lasketaan, onko luku x:n potenssi.
 var luku = eval(text.GetText());
 var potenssi =
 Math.round(skb.GetValue());
 luku *= 1.0;
 var onko = false; //Potenssia ei ole vielä etsitty.
 while (luku > 1){
  luku /= potenssi;
  if (luku == 1){
   //Kyseessä on x:n potenssi.
   onko = true;
  }
 }
 //Näytetään tulos.
 if (onko == true){
  txt.SetText(potenssi + ": on");
 }
 else {
  txt.SetText(potenssi + ": ei ole");
 }

}

Grez [30.11.2019 11:55:23]

#

Äkkiseltään poistaisin sieltä ainakin täysin turhat Math.round() ja luku *= 1.0

Vai mikä noiden käyttötarkoitus on? Jos halutaan että kantalukuina käytetään vain kokonaislukuja, niin sitten olisi varmaan järkevämpää antaa käyttäjälle virheilmoitus eikä vaan hyväksyä desimaaliluku ja antaa käyttäjälle eri vastaus kuin minkä hän pyysi.

Tuossa kannattaa huomioida että tuo toimii oikein vain pienehköillä kokonaisluvuilla. Esim. sen mielestä 79792266297612001 ei ole 7:n potenssi. Jos tarkoitus on tukea vain kokonaislukuja, niin olisi ehkä järkevämpää käyttää vaikka BigIntiä ja laskea jakojäännöksillä.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta