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

Pomoc przy zadaniu pętle

VPS Starter Arubacloud
0 głosów
3,730 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 (269,120 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 (269,120 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 (269,120 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 (269,120 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ź 635 wizyt
pytanie zadane 18 grudnia 2018 w Java przez mn130496 Gaduła (3,530 p.)
0 głosów
3 odpowiedzi 711 wizyt
pytanie zadane 12 kwietnia 2018 w Java przez Rekus Użytkownik (500 p.)
0 głosów
2 odpowiedzi 541 wizyt
pytanie zadane 4 kwietnia 2018 w Java przez Rekus Użytkownik (500 p.)

92,452 zapytań

141,262 odpowiedzi

319,078 komentarzy

61,854 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

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 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!

...