Instrukcję „for” wykorzystuje się zazwyczaj wtedy, gdy wiadomo ile iteracji ma się wykonać np. i < 10. Instrukcje „while” oraz „do ... while” zazwyczaj wtedy, gdy większe znaczenie ma prawdziwość warunku, a nie ilość wykonań. Jest to subtelna różnica, którą zaczyna się wyczuwać wraz ze zdobytym doświadczeniem.
Pętla while
Pętla ta ma następującą budowę:
while( warunek )
{
ciało pętli
}
Najpierw sprawdzany jest warunek znajdujący się pomiędzy nawiasami. Jeśli jego wynik jest prawdziwy to wykonują się instrukcje znajdujące się wewnątrz pętli, a więc jej ciało. W przeciwnym wypadku wykonanie programu omija pętle i wykonuje się instrukcja znajdująca się bezpośrednio za pętlą. Wykonywanie pętli jest kontynuowane dopóki warunek jest prawdziwy, tak więc jeśli nie chcemy aby iteracji nie była nieskończona ilość musimy odpowiednio wpłynąć na prawdziwość warunku (w pewnym momencie musi być nieprawdziwy aby instrukcja „while” zakończyła się).
Napiszmy program, który zapyta nas o hasło. Jeśli podamy poprawne (w tym wypadku jest nim wyraz „tajne”) to wyświetli się komunikat powiadamiający nas o tym, w przeciwnym wypadku program zawiadomi nas o błędzie i poprosi o ponowne wprowadzenie hasła. Dopóki nie podamy poprawnego, program będzie powtarzał pytanie w pętli.
class KlasaGlowna
{
static void Main()
{
System.Console.Write("hasło:
");
string haslo = System.Console.ReadLine();
while (haslo != "tajne")
{
System.Console.WriteLine("Podałeś; złe hasło. Spróbuj jeszcze raz.");
System.Console.Write("hasło: ");
haslo = System.Console.ReadLine();
}
System.Console.WriteLine("Brawo!
Podałeś; poprawne hasło.");
System.Console.Read();
}
Na początku pobieramy hasło za pomocą instrukcji „ReadLine()” i przypisujemy jego zawartość do zmiennej „haslo”. Następnie w instrukcji „while” sprawdzamy czy podane hasło nie jest równe wyrazowi „tajne”. Warunek jest prawdziwy jeśli podaliśmy niepoprawne hasło, dlatego wykona się ciało pętli. Wewnątrz pętli znowu pobieramy hasło i zanim wykona się następna iteracja, ponownie sprawdzamy prawdziwość warunku. W momencie gdy podamy poprawne hasło, warunek zwróci wartość „false” (nieprawda), następna iteracja nie wykona się i instrukcja „while” zostanie przerwana.
A oto wynik:
Instrukcja „do ... while”
Różnica między „while” a „do ... while” jest niewielka. W zasadzie sprowadza się ona do tego, że w przypadku „while” warunek sprawdzany jest przed wykonaniem iteracji, a w przypadku „do ... while” na końcu. Co nam to daje?
Wykorzystując pętlę „while” musimy spodziewać się tego, że jest szansa, że nie wykona się ani jedna iteracja. Natomiast w przypadku „do ... while” mamy pewność, że wykona się przynajmniej jedna.
Napiszmy program do pobierania hasła jeszcze raz, tym razem używając pętli „do ... while”.
class KlasaGlowna
{
static void
{
string haslo;
do
{
System.Console.Write("hasło: ");
haslo
= System.Console.ReadLine();
}
while (haslo != "tajne");
System.Console.WriteLine("Brawo! Podałeś poprawne hasło.");
System.Console.Read();
}
Program pyta się nas o hasło, następnie sprawdza prawdziwość warunku. Jeśli jest prawdziwy to wykonuje się następna iteracja, jeśli nie to pętla kończy swoje działanie. Zauważmy także, że w przypadku instrukcji „do ... while” należy umieścić średnik zaraz po nawiasie zamykającym, znajdującym się po warunku.
Działanie tego programu jest trochę inne niż poprzedniego, ponieważ aplikacja nie powiadamia nas o błędnie wprowadzonym haśle. Jeśli chcielibyśmy to zmienić powinniśmy dodać wyświetlanie komunikatu o błędzie i wprowadzić dodatkową instrukcję warunkową.
class KlasaGlowna
{
static void
{
string haslo;
System.Console.Write("hasło:
");
haslo =
System.Console.ReadLine();
do
{
if (haslo != "tajne")
{
System.Console.Write("hasło: ");
haslo
= System.Console.ReadLine();
}
}
while (haslo != "tajne");
System.Console.WriteLine("Brawo! Podałeś poprawne hasło.");
System.Console.Read();
}
Powyższe rozwiązanie nie jest idealne, dlatego jeśli chcemy wyświetlać komunikat o błędzie lepiej użyć instrukcji “while”, jeśli nie chcemy “do … while”.
Użycie for oraz while w jednym przykładzie
Powróćmy do przykładu z poprzedniego rozdziału, a więc potęgowania. Poprzedni program obliczał zadanie i kończył swoje działanie. Musieliśmy ponownie go uruchamiać, jeśli chcieliśmy znowu coś obliczyć. Dzięki instrukcjom warunkowym możemy sami decydować kiedy chcemy aby program się zakończył.
class KlasaGlowna
{
static void
{
string
koniec;
do
{
System.Console.WriteLine("Podaj podstawę.");
string podstawa =
System.Console.ReadLine();
System.Console.WriteLine("Podaj
wykładnik");
string wykladnik
= System.Console.ReadLine();
int wynik = 1;
for
(int i = 0; i < int.Parse(wykladnik);
i++)
{
wynik *= int.Parse(podstawa);
}
System.Console.WriteLine("Wynik wynosi: " + wynik);
koniec = System.Console.ReadLine();
}
while
(koniec != "k");
System.Console.WriteLine("Papa!");
System.Console.Read();
}
Pętla „do ... while” jest zewnętrzna w stosunku do „for” („for” znajduje się w ciele „do ... while”). Program będzie się wykonywał, czyli będzie obliczał dla nas potęgi, do momentu gdy wprowadzimy „k” z klawiatury.
Istnieje jeszcze pętla „foreach”, jednak z jej omówieniem musimy poczekać do momentu aż poznamy takie typy danych jak tablice czy kolekcje.
Ćwiczenie
Napisz kalkulator umożliwiający dodawanie, odejmowanie, mnożenie, dzielenie, potęgowanie oraz obliczanie silni. Działanie programu ma się kończyć po wciśnięciu klawisza „k”.
class KlasaGlowna
{
static void Main()
{
string
koniec;
do
{
string x;
string y;
string dzialanie;
double wynik = 0;
System.Console.WriteLine("Wybierz działanie: \n1) Mnożenie \n2)
Dzielenie");
System.Console.WriteLine("3)
Dodawanie \n4) Odejmowanie \n5) Potęgowanie \n6) Silnia");
dzialanie = System.Console.ReadLine();
if(int.Parse(dzialanie) < 6)
{
System.Console.WriteLine("Podaj
pierwszą liczbę.");
x = System.Console.ReadLine();
System.Console.WriteLine("Podaj drugą liczbę.");
y = System.Console.ReadLine();
if(dzialanie == "1")
{
wynik = double.Parse(x) * double.Parse(y);
}
if(dzialanie
== "2")
{
wynik = double.Parse(x) / double.Parse(y);
}
if(dzialanie == "3")
{
wynik = double.Parse(x) + double.Parse(y);
}
if(dzialanie == "4")
{
wynik = double.Parse(x) - double.Parse(y);
}
if(dzialanie
== "5")
{
wynik = 1;
for(int i = 0; i <
int.Parse(y); i++)
{
wynik *= int.Parse(x);
}
}
}
else
if(dzialanie == "6")
{
System.Console.WriteLine("Podaj
liczbę.");
x = System.Console.ReadLine();
wynik = 1;
for(int
i = 1; i <= int.Parse(x); i++)
{
wynik *= i;
}
}
System.Console.WriteLine("Wynik
wynosi: " + wynik + "\ Jeżeli
chcesz zakończyc nacisnij \"k\".");
koniec = System.Console.ReadLine();
}
while(koniec
!= "k");
}
}
Artykuły z kategorii
![Jak wykorzystać Copilot w codziennej pracy? Kurs w przedsprzedaży](https://images.centrumxp.pl/images/universal/44/wydarzenia-banner-kurs-copilot-removebg-preview%20(1)341f31d.png)
Aktualności
- Dostęp do plików i folderów Androida na PC. To był tydzień z Microsoft 327
- Generatywna AI w wynikach wyszukiwania Bing
- Pliki i foldery Androida w Eksploratorze na Windows 11 dostępne dla Insiderów
- Microsoft Edge 127 w Stable Channel - co nowego?
- Nowe funkcje w Windows 11 24H2 (build 26100.1297 w Release Preview Channel)
- Przeciąganie aplikacji z menu Start na pasek zadań w Windows 11 23H2 (build 22631.3958)
- Nowy panel treści na stronach i w wiadomościach SharePoint
- Reddit zablokował Bingowi dostęp do jego treści
![Jak wykorzystać Copilot w codziennej pracy? Kurs w przedsprzedaży](https://images.centrumxp.pl/images/universal/44/wydarzenia-banner-kurs-copilot-removebg-preview%20(1)341f31d.png)
Artykuły
- VAR, Hawk-eye i AI - nowe technologie triumfują na EURO 2024
- Sprawdź nasze szkolenia z Copilot dla Microsoft 365
- Jak zabezpieczyć konto administratora: Praktyczne porady dotyczące odzyskiwania dostępu
- Poznaj nasze usługi: Konfiguracja domeny w Microsoft 365
- Co nowego w Microsoft 365? Podsumowanie zmian z czerwca 2024
- Lista gier w Xbox Game Pass
- Jak przywrócić Wordpad na Windows 11?
- Jak działa Copilot dla Microsoft 365 w Outlook?