c++ petla do while warunek

c++ petla do while warunek
em J
  • Rejestracja:ponad 7 lat
  • Ostatnio:około 7 lat
  • 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:ponad 7 lat
  • Ostatnio:około 7 lat
  • 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:około 8 lat
  • Ostatnio:20 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

Failure of one test is a tragedy, failure of fifty is a statistic.
edytowany 2x, ostatnio: atmal
CZ
  • Rejestracja:ponad 8 lat
  • Ostatnio:około 2 lata
  • 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);
atmal
Tego if'a równie dobrze można w while wpakować. Chodzi o to że kolega nie rozumie że gdy ma || to przynajmniej jeden z warunków musi być true. Czyli gdy jeden zmieni się na false to pętla i tak będzie się wykonywać.
CZ
Tak, ale mógł też nie wiedzieć że z pętli można wyjść warunkowo albo wiedział ale chciał to wykombinować w warunku pętli.
PanRiK
  • Rejestracja:ponad 7 lat
  • Ostatnio:ponad rok
  • 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


Jeśli widzisz mój błąd to mnie popraw.
Pisanie błędnych wypowiedzi utrwala złe praktyki.
Kiedyś możesz dostać do ręki mój kod.
edytowany 1x, ostatnio: PanRiK
em J
  • Rejestracja:ponad 7 lat
  • Ostatnio:około 7 lat
  • 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:około 8 lat
  • Ostatnio:20 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?


Failure of one test is a tragedy, failure of fifty is a statistic.
PanRiK
  • Rejestracja:ponad 7 lat
  • Ostatnio:ponad rok
  • 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;
}

Jeśli widzisz mój błąd to mnie popraw.
Pisanie błędnych wypowiedzi utrwala złe praktyki.
Kiedyś możesz dostać do ręki mój kod.
edytowany 1x, ostatnio: PanRiK
CZ
odwrócenie nic nie daje, dalej będzie pętla nieskończona.
em J
  • Rejestracja:ponad 7 lat
  • Ostatnio:około 7 lat
  • 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

atmal
Wystarczyło :D. W moim poście wyżej masz napisane dlaczego tak jest.

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.