c++ petla do while warunek

c++ petla do while warunek
em J
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 8
0

Chce wstawic 2 warnuki w petli do while zrobilem tak: while(suma<50||i!=10), ale gdy uruchamiam program || (or) traktuje jak &, nie wiem czemu. Prosze o pomoc
Program w pętli wczytuje liczby i jeśli są parzyste sumuje je. Program kończy działanie, gdy suma przekroczy 50 lub dodane zostanie 10 liczb.

em J
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 8
0

#include <iostream>
using namespace std;
int main()
{
int a;
int suma=0;
int i=0;
do
{
cout<<"Podaj liczbe: ";
cin>>a;
i=i+1;
if(a%2==0)
suma=suma+a;

}
while(suma<50 ||i!=10);
cout<<suma <<" " <<i;

system("pause");
return 0;
}

atmal
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 913
2

To dlatego że gdy masz

Kopiuj
while(suma < 50 || i != 10)

to przynajmniej jeden warunek musi być prawdziwy aby pętla się wykonała.

Co innego gdy zmienisz na &&, wtedy oba warunki muszą być prawdziwe aby pętla się wykonała. Gdy jeden z tych warunków jest false wtedy pętla się już nie wykona.
Zobacz na tablicę prawdy:

A B A && B A OR B
0 0 0 0
0 1 0 1
1 0 0 1
1 1 1 1
CZ
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 231
1

Wygląda na to że stworzyłeś pętlę nieskończoną, możesz użyć instrukcji warunkowej i break:

Kopiuj
do
{
	cout << "Podaj liczbe: ";
	cin >> a;
	i = i+1;
	if(a%2 == 0)
	suma = suma+a;
	if (i == 10) break;
}
while(suma < 50);
PanRiK
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Szczecin
  • Postów: 104
1
atmal napisał(a):

to przynajmniej jeden warunek musi być prawdziwy aby pętla się wykonała.

A dokładniej jeżeli jest || czyli OR , to jeżeli pierwszy warunek jest prawdziwy to drugiego już się nie sprawdza.
A jeżeli jest && czyli AND to jeżeli pierwszy się zgadza to , sprawdza się drugi, jeżeli drugi się zgadza to dopiero przechodzimy do ciała while

em J
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 8
0
czaffik napisał(a):

Wygląda na to że stworzyłeś pętlę nieskończoną, możesz użyć instrukcji warunkowej i break:

Kopiuj
do
{
	cout << "Podaj liczbe: ";
	cin >> a;
	i = i+1;
	if(a%2 == 0)
	suma = suma+a;
	if (i == 10) break;
}
while(suma < 50);

A da sie to zrobic za pomoca do while? bo tylko tak na razie moge :/

atmal
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 913
0
Kopiuj
do
{
	cout << "Podaj liczbe: ";
	cin >> a;
	i++;

	if(a%2 == 0)
		suma += a;
}
while(suma < 50 && i != 10);

O to chodzi @em J?

PanRiK
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Szczecin
  • Postów: 104
0
Kopiuj
#include <iostream>
using namespace std;
int main()
{
int a;
int suma=0;
int i=0;
do
{
cout<<"Podaj liczbe: ";
cin>>a;
i=i+1;
if(a%2==0)
suma=suma+a;

}
while(suma<50 && i != 10);
cout<<suma <<" " <<i;

system("pause");
return 0;
}

O to Ci chodzi?

ewentualnie, możesz spróbować odwrócić warunek w while;

Kopiuj
#include <iostream>
using namespace std;
int main()
{
int a;
int suma=0;
int i=0;
do
{
cout<<"Podaj liczbe: ";
cin>>a;
i=i+1;
if(a%2==0)
suma=suma+a;

}
while(i !=10 || suma < 50);
cout<<suma <<" " <<i;

system("pause");
return 0;
}
em J
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 8
0
atmal napisał(a):
Kopiuj
do
{
	cout << "Podaj liczbe: ";
	cin >> a;
	i++;

	if(a%2 == 0)
		suma += a;
}
while(suma < 50 && i != 10);

O to chodzi @em J?
Tak dziala :D, dzieki. Jedna kwystarczylo zmienic tylko znak

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.