Skocz do zawartości
Zamknięcie Forum PC LAB

Szanowny Użytkowniku,

Informujemy, że za 30 dni tj. 30 listopada 2024 r. serwis internetowy Forum PC LAB zostanie zamknięty.

Administrator Serwisu Forum PC LAB - Ringier Axel Springer Polska sp. z o.o. z siedzibą w Warszawie: wypowiada całość usług Serwisu Forum PC LAB z zachowaniem miesięcznego okresu wypowiedzenia.

Administrator Serwisu Forum PC LAB informuje, że:

  1. Z dniem 29 listopada 2024 r. zakończy się świadczenie wszystkich usług Serwisu Forum PC LAB. Ważną przyczyną uzasadniającą wypowiedzenie jest zamknięcie Serwisu Forum PC LAB
  2. Dotychczas zamowione przez Użytkownika usługi Serwisu Forum PC LAB będą świadczone w okresie wypowiedzenia tj. do dnia 29 listopada 2024 r.
  3. Po ogłoszeniu zamknięcia Serwisu Forum od dnia 30 października 2024 r. zakładanie nowych kont w serwisie Forum PC LAB nie będzie możliwe
  4. Wraz z zamknięciem Serwisu Forum PC LAB, tj. dnia 29 listopada 2024 r. nie będzie już dostępny katalog treści Forum PC LAB. Do tego czasu Użytkownicy Forum PC LAB mają dostęp do swoich treści w zakładce "Profil", gdzie mają możliwość ich skopiowania lub archiwizowania w formie screenshotów.
  5. Administrator danych osobowych Użytkowników - Ringier Axel Springer Polska sp. z o.o. z siedzibą w Warszawie zapewnia realizację praw podmiotów danych osobowych przez cały okres świadczenia usług Serwisu Forum PC LAB. Szczegółowe informacje znajdziesz w Polityce Prywatności

Administrator informuje, iż wraz z zamknięciem Serwisu Forum PC LAB, dane osobowe Użytkowników Serwisu Forum PC LAB zostaną trwale usunięte ze względu na brak podstawy ich dalszego przetwarzania. Proces trwałego usuwania danych z kopii zapasowych może przekroczyć termin zamknięcia Forum PC LAB o kilka miesięcy. Wyjątek może stanowić przetwarzanie danych użytkownika do czasu zakończenia toczących się postepowań.

Temat został przeniesiony do archiwum

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

veelck

dwie petle

Rekomendowane odpowiedzi

Pytanie z serii glupawych ;)

jak wyjsc ladnie i szybko z dwoch petli od razu? mam cos takiego:

const int max = 10;
for (int j = max; j >= 0; --j)
{
	bool marker = false;
	for (int k = max; k >= j; --k)
	{
		if ( jakistam_warunek)
		{
			marker = true;
			break;
		}
	}
	if (marker == true)
	{
		break;
	}
}

nie chce uzywac goto, bo to bez sensu w C++ - moze ktos zna jakas ladna i szybka metode na takie wyskoczenie?

kombinowalem juz i wydaje mi sie ze to jedyny sposob, ale moze sie myle?

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

robisz tak, żeby warunek kontynuacji pętli nie był spełniony. Np. tak:

 

const int max = 10; 
  for (int j = max; j >= 0; --j)
{
	 for (int k = max; k >= j; --k)
	{
		if (jakistam_warunek)
		{
			k=-2;
			j=-1;
		} 
   }
}

 

i z głowy :)

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Zawsze mozna rzucic w petli wyjatek:

try
{

for (int j = max; j >= 0; --j)
	{
		 for (int k = max; k >= j; --k)
		{
			if (jakistam_warunek)
			{
				throw (int)1;
			}
	   }
	}
}

catch(int)
{
//i jestesmy tu 
}

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

wiec tak:

pierwszy odpada - petla jest po to, zeby znalezc odpowiednie wartosci j i k

 

 

podoba mi sie to z wyjatkiem :D dziwne, ze sam na to nie wpadlem ;P

dzieki :)

pozdro

veelck

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
wiec tak:pierwszy odpada - petla jest po to, zeby znalezc odpowiednie wartosci j i k

zapisz wynik na inną zmienną i wyskoczyć możesz w ten sposób też.

 

const int max = 10; 
int wynik1,wynik2;
  for (int j = max; j >= 0; --j)
{
	 for (int k = max; k >= j; --k)
	{
		if (jakistam_warunek)
		{
			wynik1=k;
			wynik2=j;
			k=-2;
			j=-1;
		} 
   }
}

i już :P

 

stosowanie wyjątków do tak błahej rzeczy jak wyskoczenie z petli jest zdeka nieeleganckie IMO. To jakby na muchę wytoczyć Abramsa.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

		const int max = 10;
for (int j = max; j >= 0 and !jakistam_warunek; --j)
{
	bool marker = false;
	for (int k = max; k >= j and !jakistam_warunek; --k)
	{
		if ( jakistam_warunek)
		{
			marker = true;
		}
	}
}

 

Można i bez wyjatków.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
i już :P

 

tak, wiem - na to tez wpadlem ;) ale potrzebne dodatkowe dwie zmienne :P

 

 

edit:

stosowanie wyjątków do tak błahej rzeczy jak wyskoczenie z petli jest zdeka nieeleganckie IMO. To jakby na muchę wytoczyć Abramsa.

moze masz racje... :)

 

ArturJak -> dodatkowe sprawdzanie warunkow dwa razy - te petle leca w rzeczywistosci kilkanascie tysiecy razy...

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
tak, wiem - na to tez wpadlem ale potrzebne dodatkowe dwie zmienne

możesz też na warunku wykonać procedury które tam chcesz, a potem jak już te wartości nie będą potrzebne, wyskoczyć.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

ok, zostawiam w rezultacie Twoja metoda Jędrzej:

 

	ULONG j = 0, k = 0;
for (ULONG a = oneThirdSum; a >= 0; --a)
{
	for (ULONG b = oneThirdSum; b >= a; --b)
	{
		if ( *(table.end()-1)[a][b] == true )
		{
			j = a;
			k = b;
			a = -1;
			break;
		}
	}
}

 

dzieki i pozdro

veelck

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Wiatam.

Ja tam dopiero się uczę, ale właśnie ucząc się podobne przypadki robiliśmy używając instrukcji switch.

Może to jest dobrym rozwiązaniem.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

const int max = 10;

int jakiśtam_warunek=0;

bool marker = false;

for (int j = max; j >= 0 && || !jakistam_warunek; --j)

{

 

for (int k = max; k >= j; --k)

{

if ( jakistam_warunek)

{

marker = true;

break;

}

}

 

}

 

?

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

ktoś mi wytłumaczy o co chodzi z throw i catch???? piszę już trochę w c ale takie bajery to pierwszy raz widzę :D

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

A może by tak zrezygnować ze stosowania na siłę pętli for i rozwiązać problem przy pomocy np. pętli do..while ?

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
ktoś mi wytłumaczy o co chodzi z throw i catch???? piszę już trochę w c ale takie bajery to pierwszy raz widzę :D

 

 

bo to jest C++ a nie C - inny jezyk :P

 

o wyjatkach mozesz sobie poczytac np. tutaj albo tutaj po polsku

 

 

A może by tak zrezygnować ze stosowania na siłę pętli for i rozwiązać problem przy pomocy np. pętli do..while ?

moze i mozna, ale po co ? ;)

a tak serio - i tak na jedno wyjdzie, bo sprawdzanie warunku i tak musi byc dodatkowe, albo wyskoczenie przez zmiane warunku domyslnego i zapamietanie stanu ... a przy while'u trzeba jeszcze dodatkowo pisac inkrementacje/dekrementacje, ponadto wole for'a :P Wszystko jest bardziej ulozone (jakos tak mi sie wydaje...)

While albo do-while czesciej sie przydaja przy wskaznikach/iteratorach, a tak jak tutaj, to jednak preferuje fory... takie moze moje zboczenie ;)

 

pozdro

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

jeśli by to robić w C

to albo dodatkowe zmienne flagi

 

albo zamknąc w funkcje i dac return 'a

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

  • Ostatnio przeglądający   0 użytkowników

    Brak zarejestrowanych użytkowników przeglądających tę stronę.

×
×
  • Dodaj nową pozycję...