Paziuch utworzono 20 maja 2017 utworzono 20 maja 2017 Hej chciałem w ramach treningu z pętlami napisać mini programik który po wpisaniu liczby wyświetli jej potęgi tyle razy ile wynosi ta liczba np. po wpisaniu liczby 4: 4,16,64,256 ale szczerze mówiąc trochę się przejechałem i okazało się to dla mnie trudniejsze niż myślałem, gdyż nie wiem dla jakiego "i" pętla powinna się kończyć . Kod wygląda tak: #include <iostream> #include <math.h> using namespace std; int liczba; int main() { cout << "Podaj liczbe" << endl; cin >> liczba; for (int i=liczba;i=pow(liczba, liczba);) cout <<i; return 0; } Ma ktoś jakiś pomysł? byłbym wdzięczny. PS. Jestem totalnym laikiem(z resztą to widać po kodzie) więc prosze o wyrozumiałość
Matematyk0 komentarz 20 maja 2017 komentarz 20 maja 2017 3 godziny temu, Paziuch napisał: który po wpisaniu liczby wyświetli jej potęgi tyle razy ile wynosi ta liczba np. po wpisaniu liczby 4: 4,16,64,256 Nie wiem czy dobrze rozumiem o co chodzi - podajesz liczbę i wypisujesz jej kolejne potęgi od 1 do tej liczby, tzn. dla 5 byłoby 5^1, 5^2 ... 5^5? To teraz tak: Jeżeli wiesz ile konkretnie razy ma się wykonać dana pętla (w tym wypadku liczba-razy), najłatwiej zrobić jedną z dwóch pętli: for (int i = 0; i < liczba; i++) for (int i = 1; i <= liczba; i++) Którą wybierzesz - kwestia wygody i zastosowania. W tym wypadku łatwiej byłoby wybrać drugą opcję - czyli zacząć od i = 1. Dlaczego? Jako że chodzi Ci o wypisanie kolejnych potęg (najpierw 1, później 2, 3 itd.), to i w pętli (co zresztą nazywa się iteratorem) będzie potęgą - to znaczy, że za każdym razem będziemy liczyć wyrażenie liczba ^ i gdzie liczbę podajemy, a i to potęga, do której ją podnosimy. Czyli, składając wszystko w całość, najprostsza pętla powinna wyglądać tak: for (int i = 1; i <= liczba; i++) cout << pow(liczba, i) << endl; Na końcu dopisałem endl, żeby kolejne potęgi wypisywały się od nowej linijki - inaczej dostaniesz ciąg (w podanym przez Ciebie przykładzie) 41664256. *** A teraz analiza Twojej pętli: for (int i=liczba; i=pow(liczba, liczba); ) cout <<i; Pętlę zaczynasz od wartości liczba (i = liczba). Następnie, warunek wykonywania się pętli to i równe liczba^liczba, a taki warunek jest spełniony tylko dla jednej liczby - dla jedynki. Dla żadnej innej liczby pętla nie wykona się nawet raz - bo warunek nie będzie spełniony. Trzeci argument pętli pozostawiłeś pusty - musiałbyś wtedy w pętli zmieniać wartość iteratora, a tak się nie dzieje, czyli pętla albo nie wykonuje się w ogóle (dla liczb różnych od 1), albo wykonuje w nieskończoność (dla jedynki). Twój pomysł nie był zły - zabrakło zrozumienia działania pętli, ale to kwestia wprawy Gdyby chcieć naprawić tę pętlę, musiałaby ona wyglądać tak: for (int i=liczba; i<=pow(liczba, liczba); i = i*liczba) cout << i << endl; Czyli: - wiemy, że potęgowanie to mnożenie liczby przez siebie określoną liczbę razy i że możemy uzyskać trzecią potęgę poprzez pomnożenie drugiej potęgi liczby przez tę liczbę, tzn. 4^2 * 4 = 4^3 - co wykorzystamy - pierwszą liczbą, którą chcemy wypisać, jest pierwsza potęga liczby, czyli liczba - przypisujemy więc i wartość liczba. - pętla będzie się wykonywać tak długo, aż nie osiągniemy upragnionego liczba^liczba. - po każdym przejściu pętli (czyli wypisaniu na ekranie) przemnażamy aktualną wartość i przez liczba, uzyskując kolejną potęgę liczby. - dzięki temu, pod zmienną i mamy przypisaną daną potęgę liczby, a po wypisaniu jej na ekran - liczymy kolejną, aż nie osiągniemy upragnionej wartości. Mam nadzieję, że napisałem wszystko wystarczająco zrozumiale i że chociaż trochę Ci to pomoże w programowaniu 1
Paziuch komentarz 20 maja 2017 Autor komentarz 20 maja 2017 Nawet nie wiesz jak mi pomogłeś. Dziękuję Ci bardzo.
Wciąż szukasz rozwiązania problemu? Napisz teraz na forum!
Możesz zadać pytanie bez konieczności rejestracji - wystarczy, że wypełnisz formularz.