[Java] Libovolná mocnina čísla.

C++, C#, Visual Basic, Delphi, Perl a ostatní

Moderátor: Moderátoři Živě.cz

Odeslat příspěvekod OS 18. 11. 2006 18:45

Ahoj, teď to dodělávám.
Amám tohle zadání: Napište metodu, která pro zadané celé kladné číslo n vrátí největší m takové, že 3 na m<=n. Hodnotu n předejte do metody jako parametr.
Zatím ještě metodu nedělám. Jen to zkouším nanečisto.
Kód: Vybrat vše
package testy;
import java.util.Scanner;
public class Ukol {
    public static void main(String[] args ) {
        Scanner sc = new Scanner(System.in);
       
        int cislo = sc.nextInt();
        int vysledek = 1;
        for (int i = 0; ; i++)
        {vysledek = vysledek * 3;
        if (vysledek <= cislo) break;
        System.out.println("Mocnina je" +i);}
       
    }
}


Nechce mi to vypsat to "i", vlastně potřebuji vypsat tu mocninu a ono jí to nechcce vypsat. :(
OS
Junior

Odeslat příspěvekod OS 18. 11. 2006 18:49

Teď mi svítá, nepůjde to náhodou cyklem while?
OS
Junior

Odeslat příspěvekod Imjagpul 18. 11. 2006 19:20

Můžeš použít for i while, to je celkem jedno. Máš tam několik chyb:

Kód: Vybrat vše
vysledek = vysledek * 3;

tohle je výsledek krát tři, ale v zadání je 3 na m. Takže tam patří
Kód: Vybrat vše
vysledek = mocnina(3, i);


Končit (break) musíš právě když neplatí vysledek <= cislo, takže tam patří vysledek > cislo (nebo by mohlo být !(vysledek <= cislo) ).

Takže takhle:
Kód: Vybrat vše
public static void main(String[] args ) {
        Scanner sc = new Scanner(System.in);
       
        int cislo = sc.nextInt();
        int vysledek = 1;
        int i;
        for (i = 0; ; i++) {
            vysledek = mocnina(3, i);
            if (vysledek > cislo) break;
        }
       
        System.out.println("m=" +(i-1));
}


Ale s tím while to vypadá jednodušeji:
Kód: Vybrat vše
static int metoda(int n) {
        int m=0;
        while(mocnina(3, m)<=n) {
            m++;
        }
        return m-1;
    }
Imjagpul
Junior
Uživatelský avatar

Odeslat příspěvekod OS 18. 11. 2006 19:24

Imjagpul píše:
Kód: Vybrat vše
vysledek = vysledek * 3;

tohle je výsledek krát tři, ale v zadání je 3 na m. Takže tam patří
pcode]vysledek = mocnina(3, i);[/code]



Moc děkuji, ale nechápu mocnina (3,i), musím to nejdříve umocnit, nevím kolikrát a potom zjistit, jestli ten umocněný výsledek je menší nebo roven tomu n.

Moment blbost, ty už používáš tu funkci, jak mám napsanou na počítání mocniny, že jo? Nepletu se? :shock:
OS
Junior

Odeslat příspěvekod Imjagpul 18. 11. 2006 19:34

Jo, používám, potřebujeme přece nějak vypočítat mocninu, ne?

Musí se to umocnit na neznámé číslo m. Takže forem zkoušíme 3 na 0, 3 na 1, 3 na 2, atd. Výsledek toho umocnění vždycky uložíme do vysledek, ktery pak porovnáme se zadaným číslem. Jakmile to už nebude menší nebo rovno, tak jsme zjistili, že hledané číslo je i-1 (protože pro i to už neplatí).
Imjagpul
Junior
Uživatelský avatar

Odeslat příspěvekod OS 18. 11. 2006 19:38

Aha, super, a půjde to dát do jedné funkce, procedury nebo jak se to jmenuje celé? Prostě jen jedna fukce, já se právě snažil to dát do jednohu cyklu a to asi nejde, protože od toho jsou ty funkce.

Může fukce zavolat funkci a potom si vypsat výsledek až té druhé funkce?
Děkuji.
OS
Junior

Odeslat příspěvekod OS 18. 11. 2006 19:45

Super funguje tak, jak má, moc vám děkuji. :D :D :D :D
OS
Junior

Odeslat příspěvekod twoflower 20. 11. 2006 23:19

Teda za umocnovani timhle stylem bych te hnal :-)
The sun is the same in a relative way but you're older,
shorter of breath and one day closer to death.
twoflower
Junior
Uživatelský avatar

Odeslat příspěvekod OS 21. 11. 2006 10:25

twoflower: Pročpak? Já dělám úkol jen podle zadání. Matematické funkce Javy nějak nevyužíváme a tak tohle řešení bude asi nejlepší. Ber, že se to teprve učím. Co se ti na tom teda nelíbí?
OS
Junior

Odeslat příspěvekod AZOR 21. 11. 2006 17:20

ja myslim, že by jsi mu tam tu matematickou fuknci javy mohl klidně prsknout, přece nebudeš dělat prasárnu, jen protože se to učíte = naopak to by mělo bejt čisté..
Marta Jandova's Absolute Monarchy Forever Rulezz - one country, one world, no wars, full of love.
ALL SHOULD DIE UNDER HER FLAG, AND FOR HER EYES !
AZOR
Junior
Uživatelský avatar

Odeslat příspěvekod Vebloud 21. 11. 2006 17:33

Jenže to není učení Javy, ale algoritmizace. dyž to chceč mít čistý, tak vymysli lepší algoritmus na umocnění a navrhni ho.
Žít a nechat žít, ty máš svůj názor, já mám svůj názor, já ti nebudu nutit svůj, nemusím souhlasit s tvým, ale udělám vše, abys ho mohl svobodně vyjádřit.
Vebloud
VIP uživatel
Uživatelský avatar

Odeslat příspěvekod OS 21. 11. 2006 18:36

Velbloud má pravdu, učím se algoritmizaci, kdybych tam prsknul funkci, tak je to celkem jednoduchý. A ta Java je jen prostředí, ve kterém se to učím.
Děkuji všem za připomínky, rady a názory.

A proč je to tedy prasárna? Zbytečně to zatěžuje počítač, není to přesné, není to efektivní?
OS
Junior

Odeslat příspěvekod twoflower 21. 11. 2006 22:09

OS píše:twoflower: Pročpak? Já dělám úkol jen podle zadání. Matematické funkce Javy nějak nevyužíváme a tak tohle řešení bude asi nejlepší. Ber, že se to teprve učím. Co se ti na tom teda nelíbí? /quote]


Je to strasne pomaly a hloupy algoritmus :) A obzvlaste, pokud je ten predmet zameren spis na algoritmizaci, nez na jazyk.
The sun is the same in a relative way but you're older,
shorter of breath and one day closer to death.
twoflower
Junior
Uživatelský avatar

Odeslat příspěvekod Vebloud 21. 11. 2006 22:25

Tak navrhni lepší. Ať nás hloupé poučíš. A zkus něco co má lepší než lineární složitost.
Naposledy upravil Vebloud dne 21. 11. 2006 22:35, celkově upraveno 1
Žít a nechat žít, ty máš svůj názor, já mám svůj názor, já ti nebudu nutit svůj, nemusím souhlasit s tvým, ale udělám vše, abys ho mohl svobodně vyjádřit.
Vebloud
VIP uživatel
Uživatelský avatar

Odeslat příspěvekod OS 21. 11. 2006 22:33

twoflower píše:
OS píše:twoflower: Pročpak? Já dělám úkol jen podle zadání. Matematické funkce Javy nějak nevyužíváme a tak tohle řešení bude asi nejlepší. Ber, že se to teprve učím. Co se ti na tom teda nelíbí? /quote]

Je to strasne pomaly a hloupy algoritmus :) A obzvlaste, pokud je ten predmet zameren spis na algoritmizaci, nez na jazyk.


Jistě, rozumím, ale musím tak nějak vědět, jak by se to dalo udělat bez pomoci vestavěných funkcí jazyka. Ale tyhle funkce přeci každý jazyk nemá, nebo jo? Já slyšel, že jsou i jazyky, co nemají cykly a všechno se dělá rekurzí. Ovšem to musí být zajímavé, protože rekurze je věc, které ani za mák nerozumím. :?
OS
Junior

Předchozí stránkaDalší stránka

Kdo je online

Uživatelé procházející toto fórum: Žádní registrovaní uživatelé a 0 návštevníků