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"); } }
Ä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ä.
Aihe on jo aika vanha, joten et voi enää vastata siihen.