wielokrotności n mniejsze od m

0

Witam. Problem na pewno jest błahy, ale nie wiem jak go rozgryźć. Powinien działać program według mnie. Zamiast odpowiedniego wyniku wyświtla zera. Pętla się zapętla, i cały czas wyświetla następne zera. A przecież jest warunek postawiony.

int main(){
	int n, m;
	cout<<"Podaj liczbe n: ";
	cin>>n;
	cout<<"Podaj liczbe m: ";
	cin>>m;
	for(int i=0; n<m; i++){
		n=n*i;
	cout<<n<<endl;
	}
	getch();
	return 0;
}
0

W linijce n=n*i, gdy pierwszy raz wykonujesz to przypisanie, przypisujesz zmiennej n zero, ponieważ i jest równe zero, potem już zawsze mnożysz zero (n, które jest równe zero) przez kolejne liczby naturalne, więc n jest zawsze równe zero.
Dodatkowo zwróć uwagę na to, że jeśli n, będziesz przypisywał zawsze n*i to nie uzyskasz wszystkich wielokrotności liczby n.
Przykład ze wszystkimi wielokrotnościami liczby n, może wyglądać tak:

#include <iostream>

using namespace std;

int main(void)
{
 int n, m;
 cout<<"Podaj liczbe n: ";
 cin>>n;
 cout<<"Podaj liczbe m: ";
 cin>>m;
 for(int i=1; n*i<=m; ++i)
  cout<<(n*i)<<'\n';
 return 0;
}

Jeśli interesują Ciebie tylko te wielokrotności, które uwzględni n=n*i to zamień początkową wartość i na jeden. Poza tym, n=n*i można ładniej zapisać, jako n*=i, ale wydaje mi się, że nie to było Twoją intencją.
Edit:
Jeśli i jest inicjalizowane wartością równą zero, w takiej pętli to będzie przebieg programu wygląda tak (dla n=5):
'' 1. n=5 i=0, więc ni=0
2. n=0 i=1, więc n
i=0
3. n=0 i=2, więc ni=0
...''
Jeśli natomiast zaczniesz od i=1:
'' 1. n=5 i=1 więc n
i=5
2. n=5 i=2, więc ni=10
3. n=10 i=3, więc n
i=30
4. n=30 i=4, więc n*i=120
5. n=120...''
Więc nie uzyskasz wszystkich wielokrotności.

0

Ale przecież jest w pętli for i++, więc po wykonaniu fora, powinien wartość i zwiększyć o 1.

0

Dobra. Dzięki. Za pędziłem się w materiale, a teraz ćwiczenia próbuje robić.

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