x-kom hosting

Pętla w c++

Paziuch
utworzono
utworzono

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
komentarz
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 :)

  • Dobra wypowiedź 1
Paziuch
komentarz
komentarz

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.

×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Strona wykorzystuje pliki cookies w celu prawidłowego świadczenia usług i wygody użytkowników. Warunki przechowywania i dostępu do plików cookies możesz zmienić w ustawieniach przeglądarki.