• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Pomoc przy zadaniu pętle

Object Storage Arubacloud
0 głosów
3,771 wizyt
pytanie zadane 3 maja 2017 w Java przez fiszu258 Początkujący (440 p.)

Ma ktoś pomysł na rozwiązanie tego? Bo ja już nie mam bladego pojęcia.



//3. Napisać program, który wczytuje od użytkownika liczbę całkowitą dodatnią n, a
//następnie wyświetla na ekranie wszystkie potęgi liczby 2 nie większe, niż podana
//liczba. Przykładowo, dla liczby 71 program powinien wyświetlić:
//1
//2
//4
//8
//16
//32
//64

3 odpowiedzi

+1 głos
odpowiedź 3 maja 2017 przez Wiciorny Ekspert (270,190 p.)
kolega podał złe rozumowanie. Ja bym to zrobił tak.

Warunkiem wykonywania pentli będzie potęgowanie liczby 2, do momentu aż będzie ona nie większa od podajnej np

podając N=50;

inicjujesz jakaś zmienną tzn tworzysz  int potęga=0;

robimy petle     while(wynik <50 ) {  tutaj kod}

Co w kodzie? potęgujesz wynik zerujac go na starcie a zwiekszajac tylko potege

 wynik= 2^potęga;  potęga ++  i teraz wypisz nam tę liczbę    

pamiętając o zwiększaniu potegi .

Wiec za kazdym razem pojawiać się będą liczby 2^0 ; 2^1 2^2 etc... ale gdy wynik bedzie > od 50 przerwie sie wypisywanie
komentarz 3 maja 2017 przez kGrab Użytkownik (700 p.)
Tylko trzeba zmienić moment sprawdzania warunku bo dla takiej konstrukcji, gdy podam liczbe 71 jak w przykladzie to otrzymam ciag do 128, bo wypisujesz od razu wynik i sprawdzasz przy kolejnym przejściu czy spełnia warunek.
komentarz 4 maja 2017 przez Wiciorny Ekspert (270,190 p.)
no ale to sprytny programista chocby w ifie zmiesci w srodku kodu, ja napisalem tylko schemat przykladowy. To nie jest nawet optymalne wykonanie- bo jest dosyć marnotrawne... i mozna to zrobic na for eachu znacznie oszczedzajac pamięć. Ja chciałem tylko logiczny- przekaz dać i przykład rozumowania
0 głosów
odpowiedź 3 maja 2017 przez kGrab Użytkownik (700 p.)

Problem dotyczy implementacji czy jak to rozwiązać?

Najprościej byłoby:

  1. Pobrać od użytkownika liczbe nazwijmy ją N, (zwalidować dane czyli że wymusić że ma być całkowita dodatnia)
  2. W petli for powielać instrukcje drukującą N*N albo N^2
  3. powyższa instrukcje opatrzyć instrukcja if czy jest wynik wiekszy niż N jeśli tak opuść petle i nie druku rozwiązania.

Oczywiscnie nie jest to najzgrabniejsze, warto sie zastanowić czy nie lepiej uzyć petli do, do..while czy jakiejkolwiek innej. Ale w myśl zasady jak sie kompiluje to można sprzedawać działa. Jak masz problem z implementacją to sprecyzuj pytanie.

komentarz 3 maja 2017 przez Wiciorny Ekspert (270,190 p.)
twoim tokiem myślenia podając 5:) wynik bedzie 1/5/25/625 .... itd a to mają być same potęgi dwójki ;] więc 1/2/.... tak długo aż potęga będzie mniejsza od 5 czyli dla 5-tki ma to byc 1 i 2 ;] ... bo 2^3 jest 8... a 8 > 5 .... przeczytaj dokładnie instrukcje nie potęgi liczby podanej tylko potęgi liczby 2 mniejsze od podanej ;]
komentarz 3 maja 2017 przez kGrab Użytkownik (700 p.)
Ok. W punkcie 2. po prostu 2^n. To tylko liczba, postepowanie to samo.
komentarz 4 maja 2017 przez Wiciorny Ekspert (270,190 p.)
zwracam honor :) dzięki za poprawe- oczywiście zwrócenie uwagi nie miało na celu WYTYKANIE tylko poprawke !
0 głosów
odpowiedź 3 maja 2017 przez Mordi Nowicjusz (160 p.)

Napisałem co prawda w C++ ale moze jakos pomoge mimo ze sam ucze sie od 3 dni :D

#include <iostream>

using namespace std;

int n=1, liczba;

int main()
{
    cout<<"Wprowadz liczbe: ";
    cin>>liczba;

   while(n*2<=liczba)
   {
       n=n*2;
        cout<<endl<<n;

   }
    return 0;
}

Mam nadzieje ze pomogłem.

 

komentarz 4 maja 2017 przez kGrab Użytkownik (700 p.)

No spoko, tylko potega 2 zamiast mnożenia, ale to tylko liczba.

Założyciel tematu dał temat w dziale Java, ja dam przykład rozwiązania w JS,

sama logika bez poboru zarówno przy użyciu for jak i while.

Ogólnie żadne z tych dwóch rozwiązań mi sie nie podoba, for przez użycie Infinity, co prawda jest określony warunek wyjścia. Natomiast rozwiązanie z while, że dwukrotnie dokonujemy operacji potegowania (przy sprawdzaniu warunku i przed wypisaniem wartości, przy for tylko raz).

var warunek = 167;

console.log("For");

var wynik_1 = 0;

for(var i=0; i<Infinity; i++){
	
	wynik_1 = Math.pow(2,i);
	
	if( wynik_1 < warunek ){
		console.log( wynik_1 );
	}
	else{
		break;
	}
}

console.log("While");

var wynik_2 = 0;
var power = 0;

while( Math.pow(2,power) < warunek ){
	wynik_2 = Math.pow(2,power);
	console.log( wynik_2 );
	power++;
}

 

Podobne pytania

0 głosów
1 odpowiedź 654 wizyt
pytanie zadane 18 grudnia 2018 w Java przez mn130496 Gaduła (3,530 p.)
0 głosów
3 odpowiedzi 720 wizyt
pytanie zadane 12 kwietnia 2018 w Java przez Rekus Użytkownik (500 p.)
0 głosów
2 odpowiedzi 566 wizyt
pytanie zadane 4 kwietnia 2018 w Java przez Rekus Użytkownik (500 p.)

92,579 zapytań

141,431 odpowiedzi

319,657 komentarzy

61,963 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...