Druhá mocnina – Java – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Druhá mocnina – Java – Fórum – Programujte.comDruhá mocnina – Java – Fórum – Programujte.com

 

off010
Duch
23. 11. 2008   #1
-
0
-

Zdravím, potřeboval bych poradit s částí programu. Mám vytvořit program, který po načtení čísla zjistí jestli je to druhá mocnina nějakého čísla. Vše by mi tak nějak fungovalo až na vyjímku



import java.util.Scanner;




public class mocninyy {

public static void main(String[] args) {
Scanner sc=new Scanner (System.in);
int h;
System.out.println("Zadejte číslo");
h = sc.nextInt();
int i = h;
int n = 0;

while (i > 1) {
if (i % 2 == 1) {
System.out.println("Nemá druhou mocninu "); break;
}

i = i / 2;
n = n + 1;

}
System.out.println(h + " = 2 na " + n);


}
}


problém je v tom, že když zadám třeba číslo 16 tak je vše v pořádku, ale když zadám číslo 17 vypíše se Zadejte číslo
17
Nemá druhou mocninu
17 = 2 na 0
což by bylo v pořádku, ale já nechci aby si mi vypsalo 17= 2 na 0

Tak prosím o radu co stím...

Nahlásit jako SPAM
IP: 94.112.147.–
Mihulik0
Návštěvník
23. 11. 2008   #2
-
0
-

A co třeba takhle, hm:


import java.util.Scanner;




public class Mocninyy {

public static void main(String[] args) {
Scanner sc=new Scanner (System.in);
int h;
System.out.println("Zadejte číslo");
h = sc.nextInt();
int i = h;
int n = 0;

boolean powerOfTwo=true;
while (i > 1) {
if (i % 2 == 1) {
System.out.println("Nemá druhou mocninu ");
powerOfTwo=false;
break;
}

i = i / 2;
n = n + 1;

}
if(powerOfTwo){
System.out.println(h + " = 2 na " + n);
}

}
}

Jen poznámka ke kódu, která mě praštila okamžitě do očí-názvy tříd se píší stylem "TohleJeSpravnyNazevTridy". Jedná se sice "jen" o konvenci, ale dostat do ruky zdroják, kde by byla třída pojmenována tak, jak jsi to udělal ty, tak bych ho okamžitě smazal a o autorovi si myslel svoje (nebo by mě šéf musel hodně moc přesvědčovat:-D), takže asi tak:)
Neuškodilo by si pročíst Javovské konvence-na SUNu jsou nádherně sepsané...
A název třídy by měl být Mocnina, nikoliv Mocniny. Ovšem to už tak nějak vyplývá z kořenů OOP, ale vsadím se, že v těch konvencích to bude psané také...

Nahlásit jako SPAM
IP: 85.13.98.–
off010
Duch
23. 11. 2008   #3
-
0
-

To Mihulik :

Wow díky moc za radu, ten boolean mě vůbec nenapadl :) jinak k těm názvu tříd dík za upozornění :)

Nahlásit jako SPAM
IP: 94.112.147.–
Anonymní uživatel
~ Anonymní uživatel
0 příspěvků
23. 11. 2008   #4
-
0
-

sice neznám Javu, ale obecně se se určují mocniny dvojky jednoduššeji:

if(x&(x-1)==0){

je mocnina
}

Nahlásit jako SPAM
IP: 213.211.34.–
off010
Duch
24. 11. 2008   #5
-
0
-

Ještě bych se chtěl zeptat. Když bych chtěl vytvořit program, ve kterém když zadám nějaký interval, aby mi vypsal druhé mocniny. Tak nejlepší by bylo kdybych použil cyklus for pro vypsání intervalu a pak pro každé vypsané dosazoval a porovnával jestli má druhou mocninu. Nebo by byl lepší postup?

Nahlásit jako SPAM
IP: 94.112.147.–
DraXík0
Newbie
24. 11. 2008   #6
-
0
-

Nevim jestly je to přesně to co chcešale platí:
1 = 1^2
1+3 = 2^2
1+3+5= 3^2
1+3+5+7= 4^2
1+3+5+7+9=5^2
atd. atd. atd :)

Nahlásit jako SPAM
IP: 213.226.196.–
off010
Duch
24. 11. 2008   #7
-
0
-

Mno ktomu prvnímu dotazu co jsem zadával jsem to podělal, potřeboval jsem defacto opak, jako že 9 se zapíše právě 3^2, 17 nejde 25 se zapíše 5^2 atd... takže jsem to celé pomotal. A druhý můj dotaz směřoval jak nejlépe napsat a později právě zakomponovat ty mocniny do programu, který pro interval, který zadáme vypíše kolik má druhých mocnin jako že interval <0,10> má 1^2,2^2 a 3^2 ...tudíž 3 druhé mocniny

Nahlásit jako SPAM
IP: 94.112.147.–
Honzc0
Stálý člen
25. 11. 2008   #8
-
0
-

Odpověď na druhou otázku (kolik je mocnin v nějakém intervalu)
Já sice také neznám javu, ale předpokládám, že v ní lze udělat druhou odmocninu (sqrt ?).
Pak stačí udělat druhou odmocninu z prvního čísla intervalu a druhou odmocninu z druhého čísla
intervalu. Počet čísel, které jsou druhou mocninou pak stačí pouze spočítat jako celá celá čísla mezi těmito dvěma čísly.
Např. Interval <10,45>
sqrt(10)=3.162...
sqrt(45)=6.708...
Pak čísla Jsou: 4^2,5^2,6^2, tj. 3 čísla (6-4+1=3)
Pro Interval <9,49>
sqrt(9)=3
sqrt(49)=7
7-3+1=5 čísel
Samozřejmě je není ani těžké vypsat.

Nahlásit jako SPAM
IP: 85.207.57.–
off010
Duch
25. 11. 2008   #9
-
0
-

jj díky už jsem na tom nějak tak zapracoval a něco vypotil

import java.util.*;



public class Ukol6 {

public static boolean powerOfTwo(int n){
return (Math.sqrt(n)%1==0);
}

public static int numberOfPoweroftwo(int x,int y){
int count=0;
for(int i=x;i<=y;i++){
if(powerOfTwo(i))count++;
}
return count;
}

public static void main(String[] args ) {
Scanner scan=new Scanner(System.in);
System.out.println("Zadejte cislo: ");
int n=scan.nextInt();
if(powerOfTwo(n)) System.out.println("Cislo je celociselnou mocninou.");
else System.out.println("Cislo neni celociselnou mocninou.");

System.out.print("Zadejte mez intervalu: ");
int x=scan.nextInt();
System.out.print("Zadejte mez intervalu: ");
int y=scan.nextInt();
System.out.println("Pocet druhych mocnin v intervalu <"+x+","+y+"> je "+numberOfPoweroftwo(x, y)+".");



}
}


jeste po mě chteji abych porovnal dobu běhu cyklu, který bude zkoušet každé číslo ze zadaného intervalu a funkce, která výsledek vypočítá, ale stím si nevím rady a nějak to hrotit už asi nebudu. Jinak dík za pomoc

Nahlásit jako SPAM
IP: 94.112.147.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 35 hostů

Podobná vlákna

PHP druhá mocnina — založil noname

Mocnina a třetí mocnina — založil Ondra

Mocnina — založil Akacko

N-tá mocnina a odmocnina — založil XyZZyX

Druha odmocnina — založil matouch

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý