c++ petla do while warunek

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.

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;
}

2

To dlatego że gdy masz

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
1

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

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

0
czaffik napisał(a):

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

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 :/

0
do
{
	cout << "Podaj liczbe: ";
	cin >> a;
	i++;

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

O to chodzi @em J?

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;
}

O to Ci chodzi?

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

#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;
}
0
atmal napisał(a):
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

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