Wykonywanie pętli


(funbooster) #1

Witam

Czy ktoś mi pomoże, chciałbym aby pętla wykonywała się aż do podania warunku. Na razie zrobiłem taką pseudo pętlę

if(zakres_od > zakres_do)

		{

			cout <<"Zakres od musi byc miejszy od zakresu do ;/" << endl;

			cout <<"Przedzial liczb od: "; cin >> zakres_od; //<< endl; 

			if (zakres_od > zakres_do)

			{

			cout <<"Chyba sie nie zrozumielismy :(" << endl;

			cout <<" Odpadasz ;(" << endl;

			klawisz();

			getch();

			return 0;

				}

			}

(nnick) #2

1)while(warunek)

{

}

2)do

{

}

while(warunek)

3)while(true)

{

if(warunek) break;

}


(Enterbios) #3
int zakres_od;

int zakres_do = 5; //np


do

{

         cout <<"Przedzial liczb od: ";

         cin.clear();

         fflush(stdin);  

         cin >> zakres_od; //<< endl;

         if (zakres_od > zakres_do)

         {

             cout <<"Zakres od musi byc miejszy od zakresu do ;/" << endl;

         }

}while(zakres_od > zakres_do)

(funbooster) #4

Pogubiłem się, zrobiłem coś takiego ale po wpisaniu błędnego warunku zaczyna się zabawa od nowa ;/

// losowanie własnej liczby w podanym pzez siebie zakresie

		klawisz();

		getch();

		int zakres_od;

		int zakres_do;

		do

		{


		cout <<"Test losowanie liczb ;)" << endl;

		cout <<"Przedzial liczb od: "; cin >> zakres_od; //<< endl;

		cout <<"Przedial liczb do: "; cin >> zakres_do; //<
		if(zakres_od > zakres_do)

		{

			cout <<"Zakres od musi byc mniejszy od zakresu do ;/" << endl;

			}

	}while(zakres_od > zakres_do);


	}

		int wlasne;

		wlasne=rand() % zakres_do+zakres_od;


		klawisz();

		getch();

		cout <<"Dzisiaj wylosowalismy dla ciebie liczbe: " << wlasne << endl;

		klawisz();

		getch();



		// losowanie własnej liczby w podanym przez siebie zakresie

(Enterbios) #5

Co masz na myśli zaczyna się zabawa od nowa? No wiesz zasadniczo od tego jest pętla że po błędnym warunku zaczyna się od nowa :o


(funbooster) #6

Chodzi mi oto, że gdy po podaniu złej wartości "zakres_od", prosi oczywiście o "zakres_od" ale nie potrzebnie też o "zakres_do".


(Enterbios) #7

No to wyciągnij wczytywanie "zakres_do" przed pętle.

// losowanie własnej liczby w podanym pzez siebie zakresie

      klawisz();

      getch();

      int zakres_od;

      int zakres_do;


      cout <<"Test losowanie liczb ;)" << endl;

      cout <<"Przedial liczb do: "; cin >> zakres_do; //<

      do

      {

      cout <<"Przedzial liczb od: "; cin >> zakres_od; //<< endl;

      if(zakres_od > zakres_do)

      {

         cout <<"Zakres od musi byc mniejszy od zakresu do ;/" << endl;

         }

   }while(zakres_od > zakres_do);


   }

      int wlasne;

      wlasne=rand() % zakres_do+zakres_od;


      klawisz();

      getch();

      cout <<"Dzisiaj wylosowalismy dla ciebie liczbe: " << wlasne << endl;

      klawisz();

      getch();



      // losowanie własnej liczby w podanym przez siebie zakresie

(Dropcio Dobreprogramy) #8

Rozumie, iż chcesz stworzyć pętlę w C++, która wykonuję się tak długo dopóki spełniony jest jakiś warunek? Albo może chcesz stworzyć pętlę, która wykonuje się tak długo dopóki nie spełni się jakiś warunek?

No to masz w takim razie opcji kilka.

Najlepszą z opcji będzie zdecydowanie skorzystania z pętli do...while(), która została do takich zadań stworzona.

Prosty kod, który będzie powtarzał czynność tak długo, aż użytkownik nie wpisze liczby 5 - czyli nie spełni warunku.

int podaj = 0;

do

{

cout << "Podaj liczbe: "; cin >> podaj;

}while(podaj!=5);

cout << "Podałeś 5! Kończymy!";

To była opcja pierwsza. Pętla wykonuje się tak długo, dopóki nie podasz liczby 5 - tak jak wspomniałem wtedy spełnisz określony warunek. Teraz pętla, która wykonuje się tak długo dopóki jest spełniony warunek. Przyjdzie nam z pomocą tak zwana pętla while:

int i = 0;

while(i<5)

{

cout << "ku-ku-ku";

i++;

}

cout << "Koniec pętli";

Drugi przykład czegoś takiego tylko z wykorzystaniem pętli for

for(int i = 0; i < 10; i++)

     cout << "Czeeesc";

Rozumiesz już idee pętli?


(Dropcio Dobreprogramy) #9

@RaveStar każdy ma swoje zdanie. Doceniam również Twoje ale wyobrażasz sobie tworzenie funkcjonalnych programów w C/C++/C# czy nawet Javie bez korzystania z pętli? Nie można wszystkiego tworzyć na sztywno zwłaszcza, jeżeli implementujemy jakieś algorytmy lub po prostu musimy powtórzyć jakąś czynność kilka(naście) razy.

Co do GOTO to się zgodzę, że jest stare ale nie jest bezużyteczne. W skrajnych sytuacjach przydaje się w switchu ale to naprawdę skrajnych i desperackich :). Szczerze powiedziawszy przeglądałem ostatnio kod jakiejś aplikacji czy łatki do Windows Phone, którą Microsoft udostępnił (nie pamiętam dokładnie co to było) i tam też było GOTO. :slight_smile:

Sorki za offtop.