Pętla się nie kończy - proszę o sprawdzenie kodu

0

Hej czy mógłby mi ktoś pomóc w sprawdzeniu kodu? Nie wiem co zrobić żeby ta pętla się "skończyła"? Tutaj jest polecenie do zadania:

Napisz program (przy użyciu pętli), który przedstawi sekwencję talerzy zmytych przez dwóch studentów (Bolka i Lolka). Wczytaj następujące dane od użytkownika:

  1. dzień tygodnia (poniedziałek – 1, niedziela – 7),
  2. dodatnią liczbę talerzy do zmycia,
  3. dodatnią liczbę talerzy zmytych przez pierwszą osobę, nie większą niż liczba talerzy w zlewie.
    W przypadku, gdy użytkownik wprowadzi niepoprawne dane wejściowe, należy natychmiast zakończyć działanie programu.

Bolek i Lolek mają następującą umowę: we wtorki, czwartki i soboty jako pierwszy zmywa Bolek. W pozostałe dni jako pierwszy zmywa Lolek. Pierwsza osoba, która zmywa wybiera liczbę talerzy do zmycia w „pierwszej rundzie”, oznaczmy ją przez x. Następnie druga osoba zmienia pierwszą na zmywaku. Liczba talerzy, którą musi ona zmyć jest równa reszcie z dzielenia przez x połowy pozostałych do zmycia talerzy (w przypadku nieparzystej liczby talerzy zaokrąglamy w dół, czyżbyśmy zapomnieli wspomnieć, że Bolek i Lolek studiują matematykę?) plus numer dnia tygodnia. Potem znowu się zmieniają, licząc liczbę talerzy do zmycia tak jak poprzednio, za x przyjmując liczbę talerzy zmytą przez poprzednią osobę itd., aż zostaną zmyte wszystkie talerze. W przypadku, gdy okaże się, że któryś ze studentów ma zmyć więcej talerzy niż pozostało w zlewie, zmywa on wszystkie pozostałe talerze. Program powinien wypisywać, kto zmywa w kolejnych turach, liczbę talerzy zmytych przez tę osobę (w danej turze) oraz wyświetlać informację, ile talerzy pozostaje do zmycia..

a tutaj jest moj kod:

int main()
{
	int dzien;
	int talerze;
	int x; //liczba talerzy zmywanych przez 1 osobe
	int kto;
	int pozostalo;
	int k; // talerze do zmycia

	cout<<"Dzien tygodnia:"<< endl;
	cin>> dzien;
	cout<<"Ilosc talerzy do zmycia:"<< endl;
	cin>>talerze;
	cout<<"Liczba talerzy zmytych przez pierwsza osobe:"<< endl;
	cin>> x;

	
	if ((x<0)||(x>talerze)||(talerze<0)||(dzien<0)||(dzien>7))
	{
		cout<<"niepoprawne dane wyjsciowe!!!!!!!!!!!!!!!!!!!!"<< endl;
		system ("pause");
		return 0;
	}

	if (dzien%2==0)
	{
		kto=1;
	}

	if (dzien%2!=0)
	{
		kto=2;
	}
	pozostalo=talerze;
	
	while (pozostalo>0)
	{
			// i to kolejka;
		pozostalo=talerze-x;
		kto=kto%2 +1;
		if (kto==2)
		{
			cout<<"Teraz zmywa Bolek"<< endl;
		}
		else if (kto==1)
		{
			cout<<"Teraz zmywa Lolek"<< endl;
		}


		cout<<"Zmyto talerzy:"<<x<<endl;
		double l;
		l=pozostalo/2;
		x=((int)l)+dzien;
		

		cout<<"Pozostalo talerzy do umycia:"<< pozostalo<<endl;
}
		

	system ("pause");
	return 0; 
}

dodanie znaczników <quote> i # - @furious programming

0

pozostalo=talerze-x;
czy na pewno w ten sposób chcesz aktualizować zmienną pozostalo? Do tego warto tę aktualizację zrobić na końcu pętli - jeśli robisz ją tak jak teraz, to może się zdarzyć że otrzymasz ujemny wynik i ostatni przebieg pętli będzie błędny.

0

dziekuje za podpowiedz, zamienilam pozostalo na pozostalo=pozostalo-x; i wszystko dziala jak powinno :) dzieki raz jeszcze!

i oczywiscie wrzucilam je na koniec :D

0
int main()
  {
   int day,dish,x;
   cout<<"Dzien tygodnia: ";
   if((!(cin>>day))||(1>day)||(day>7)) return 1;
   cout<<"Ilosc talerzy do zmycia: ";
   if(!(cin>>dish)||(1>dish)) return 1;
   cout<<"Liczba talerzy zmytych przez pierwsza osobe: ";
   if((!(cin>>x))||(1>x)||(x>dish)) return 1;
   static char *tb[]={"Bolek","Lolek"};
   for(int i=0;dish;++i,dish-=x,x=min(dish,(dish>>1)%x+day)) cout<<tb[(day+i)&1]<<" zmywa "<<x<<" talerz(y)"<<endl;
   while(cin.get()!='\n') {} cin.get(); // Jeżeli potrzebujesz tego wiersza to zmień IDE na jakieś z tego tysiąclecia.
   return 0;
  }

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