• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Problem z wyrażeniem logicznym

0 głosów
590 wizyt
pytanie zadane 5 sierpnia 2016 w C i C++ przez avi1999 Nowicjusz (200 p.)
Mam duży problem z bardzo prostą pętlą mianowicie:

while (left < numbers.size() - 1 && numbers[++left] < numbers[pivot]);

chodzi o to że gdy left jest równe -1 to nie ważne jaka wartość zostanie podana w numbers.size() - 1 pętla zakończy się na tym wyrażeniu. Testowo ustawiłem żeby left miało wartość -1 a numbers.size() - 1 = 4 a mimo to pętla zostaje zakończona. Gdy left = 0 to pętla działa jak powinna. Próbowałem także zapisu:

while ((left < numbers.size() - 1) && numbers[++left] < numbers[pivot]);

ale wynik jest taki sam
komentarz 5 sierpnia 2016 przez avi1999 Nowicjusz (200 p.)
template<typename T>
void quicksort(std::vector<T> &numbers, int lPos, int rPos)
{
	int left = lPos - 1, right = rPos + 1;
	int pivot = numbers.size() / 2;

	while (true)
	{
		while (left < numbers.size() - 1 && numbers[++left] < numbers[pivot]);

		while (right > 0 && numbers[--right] > numbers[pivot]);

		if (left >= right)
		{
			//if (!(left - 1 - lPos < 1)) quicksort(numbers, lPos, left - 1);
			//if (!(rPos - right + 1 < 1)) quicksort(numbers, right + 1, rPos);
		}
		else
		{
			swap(numbers, left, right);
		}
	}
}

nie patrzcie na to co jest skomentowane, chodzi tylko o tą jedną pętle. I ten drugi warunek w ogóle nie jest wykonywany sprawdziłem w debugerze oraz zmienna left nie jest inkrementowana

komentarz 5 sierpnia 2016 przez Szahid Pasjonat (20,970 p.)
Mam problem ze zrozumieniem tego co napisałeś. Najpierw napisałeś że jak left =-1 to ma się przerwać a potem że jak ustawiasz testowo left na -1 to pętlą się przerywa Więc w czym problem

1 odpowiedź

+1 głos
odpowiedź 5 sierpnia 2016 przez CzikaCarry Szeryf (75,340 p.)
Pokaż cały kod, zapewne druga część warunku się nie spełnia.

Podobne pytania

0 głosów
1 odpowiedź 1,222 wizyt
0 głosów
4 odpowiedzi 1,156 wizyt
0 głosów
1 odpowiedź 314 wizyt
pytanie zadane 15 kwietnia 2017 w Matematyka, fizyka, logika przez Serpentes Nowicjusz (120 p.)

93,774 zapytań

142,731 odpowiedzi

323,383 komentarzy

63,378 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...