Wykorzystanie for.

0

Witam.
Jak łatwo będzie się domyślić z dalszej części postu dopiero zaczynam zabawę z programowaniem, proszę więc o wyrozumiałość;].
Przerabiam właśnie "zbiór zadań" Krzaczkowskiego i...
1.4.6 Napisz program, który wczytuje ze standardowego wejścia liczbę całkowitą
n (n > 2) i wypisuje na standardowym wyjściu iloczyn liczb
parzystych z zakresu od 2 do n (czyli 2 ∗ 4 ∗ . . . ∗ n dla n parzystych
i 2 ∗ 4 ∗ . . . ∗ (n − 1) w przeciwnym wypadku).

Zadanie wydaje mi się łatwe zwłaszcza, że poprzednie podobne udało mi sie jakos ogarnąć. Tym większa więc moja frustracja kiedy siedzę nadal od ponad godziny i zupełnie nie rozumiem co może być źle.
Kod napisałem tak:

#include <iostream>

using namespace std;
main ()
{
int n, m, i = 1;
do
{
cout <<"Podaj liczbe n:";
cin >>n;
}
while ( n < 2);
for ( m = 2; m >= n - 1; m = m + 2)
{
i = i * m;
}
cout <<i;
system("PAUSE");
}

Wynik na wyjściu pokazuje: 1 , więc zakładam że pętla wcale nie jest wykonywana. Wyjątkie jest sytuacja dla n=2 wtedy namyśla się dłuższą chwilę i wypluwa 0. Ktoś ma jakąś odkrywczą sugestię?;) Wiem, że chodzi o warunek pętli ale co z nim jest nie tak?
Z góry dziękuję za pomoc.

Pozdrawiam.


1

prawidłowa pętla for to for ( m = 2; m <= n; m = m + 2). Po pierwsze pomyliłeś znaki (dopóki m będzie większe niż n? nigdy nie będzie, bo ustawiasz je na 2), po drugie n a nie n-1, co jak n będzie parzyste? a jak będzie nieparzyste to przy m=n-1 przekroczy n i się nie wykona (np przy 5 po dojściu do m=4 jeszcze się wykona ale po dodaniu 2 będzie 6 czyli się już nie wykona następny obieg). Uważaj na znaki < oraz > łatwo się pomylić.

0

Dzięki. Nie wiem czemu ubzduralem sobie, że na drugim miejscu jest warunek zakończenia pętli.;]

1

Nie tyle zakończenia co kontynuacji traktuj to jako "dopóki". W każdym razie pętla robi się dopóki to co tam dasz jest prawdą.

1 użytkowników online, w tym zalogowanych: 0, gości: 1