Strona główna » Kursy » Kurs C# » Instrukcje Skoku
 

Instrukcje Skoku

Wstęp

Instrukcje Skoku pozwalają pominąć fragment kodu. Tego typu instrukcje przydają się podczas wykonywania pętli, aby pominąć lub przerwać prowadzone obliczenia. Taka potrzeba może zaistnieć w przypadku wykrycia następującego błędul lub z celowego działania programu. W języku C# służą do tego instrukcje brake oraz continue.

Instrukcja brake

Opis

Instrukcja brake służy do przerwania aktualnie wykonywanej pętli. Najczęściej łączona jest z pewnym warunkiem. Takie połączenie pozwal a przeprowadzać pewne obliczenia tak długo, aż jest to możliwe. Zwykle jednak nie używa się tej instrukcji, ponieważ może go zastąpić dobrze zdefiniowany warunek wykonywania pętli.

Przykład 1: Wczytywanie klawisza

W programach konsolowych Menu najczęściej implementuje się w postaci nieskończonej w pętli, która odczytuje wpisany przez użytkownika klawisz, wykonuje odpowiednie instrukcje, a następnie następuje ponowne wykonanie pętli, aby rozpocząć proces wczytywania i wykonywania ponownie.

Taka pętla powinna być nieskończona, ponieważ niewiadomo ile operacji będzie chciał wykonać użytkownik, ale jak w takim razie możnaby opuścić taką pętle? Po wykryciu żądanego przycisku należałoby przerwać wykonywanie pętli poprzez instrukcję break. W poniższym kodzie program oczekuje naciśnięcia przycisku Escape, aby zakończyć wykonywanie programu.

  1. Console.WriteLine("Naciśnij ESC, aby zakończy działanie programu");
  2. while(true) {
  3.   ConsoleKeyInfo input = Console.ReadKey();
  4.   if (input.Key == ConsoleKey.Escape)
  5.     break;
  6. }

(1.) Pokazujemy instrukcję użytkownikowi, a następnie (2.) rozpoczynamy nieskończoną pętle. W każdej iteracji: (3.) wczytujemy znak i (4.) jeśli znak to Escape to (5.) przerywamy wykonywanie instrukcji.

Przykład 2: Sumowanie z ograniczeniem

Innym przykładem jest sumowanie składników tak długo, aż przekroczą określoną sumę. Podczas tego typu obliczeń niewiadomo ile razy będzie trzeba wykonać pętle (chyba, że znamy wzór na sumę ciągu). Przypuśćmy, że chcemy zsumować kolejne wyrazy ciągu 1, 2, .., aż przekroczą pewną wartość max. Obliczenia będą realizowane w nieskończonej pętli for.

  1. int max = 15, pom = 0;
  2. for (int i = 1; ; i++) {
  3.   pom += i;
  4.   if (pom > max) {
  5.     pom = i;
  6.     break;
  7.   }
  8. }
  9. Console.WriteLine("Suma pierwszych {0} wyrazow jest wieksza od {1}", pom, max);

(1.) Na początku deklarujemy dwie zmienne: max - służy do przechowywania wartości po przekroczeniu, której przerywamy obliczenia oraz pom - początkowo suma kolejnych wyrazów, a potem ile jest takich wyrazów. Następnie (2.) rozpoczynamy nieskończoną pętle for, gdzie pierwszy wyraz to i = 1, a w każdej iteracji następnej i jest zwiększane o jeden. Podczas iteracji: (3.) dodajemy do sumy aktualną wartość i, a następnie (4.) sprawdzamy czy nie przekroczyliśmy sumy. Jeśli tak to (5.) zmiennej pom przypisujemy aktualny indeks i, a potem (6.) przerywamy działanie programu. Na koniec (9.) wypisujemy wynik.

Instrukcja continue

Opis

Instrukcja continue nie przerywa działania programu, ale pozwala na zakończenie iteracji i przejście do następnej iteracji. Jest to szczególnie w przypadku, gdy nie zostały napotkane warunki do zatrzymania wykonywania pętli, ale istnieje potrzeba pominięcia pewnych danych.

Przykład 1: Liczby podzielne

Jednym z najprostszych sposobów na wypisanie liczb podzielnych przez pewną liczbę k polega na znalezieniu najmniejszej z zakresu, a następnie jej zwiększania przez k. Innym sposobem jest przechodzenie po każdej liczbie z zakresu i w przypadku znalezienia liczby podzielnej wypisania jej, a w przypadku, gdy nie jest pominięcie wypisania.

Poniższy kod wypisuje liczby podzielne przez dzielnik z zakresu [1, zakres_do]. Wartości zmiennych przypisane w kodzie można zmienić.

  1. int dzielnik = 5, zakres_do = 100;
  2. Console.WriteLine("Liczby podzielne przez {0} z zakresu [1, {1}]", dzielnik, zakres_do);
  3. for (int i = 1; i < zakres_do; i++) {
  4.   if (i % dzielnik != 0)
  5.     continue;
  6.   Console.Write("{0} ", i);
  7. }

(1.) Przypisz wartości zmiennym i (2.) wypisz co robi komputer. Potem (3.) dla każdej liczby z zakresu: (4.) sprawdź czy liczba jest podzielna przez wskazany na początku dzielnik. Jeśli nie jest to (5.) przejdź do następnej iteracji. W przeciwnym razie kontynuuj wykonywanie iteracji i (6.) wypisz znalezioną liczbę i.

Przykład 2: Sumowanie po indeksach

W tym przykładzie zadanie polega na zsumowaniu elementów, które znajdują się w tablicy na indeksach parzystych. Podobnie jak w poprzednim przykładzie program będzie przechodził po wszystkich elementach, ale sumowanie odbędzie się tylko dla odpowiednich elementów.

  1. int[] tab = { 1, 2, 3, 4, 5 };
  2. int suma = 0;
  3. for (int i = 0; i < tab.Length; i++) {
  4.   if (i % 2 == 1)
  5.     continue;
  6.   suma += tab[i];
  7. }
  8. Console.WriteLine("Suma wynosi: {0}", suma);

(1.) Inicjalizuj tablicę z elementami oraz (2.) przygotuj sumę. Następnie (3.) dla każdego elementu w tablicy: (4.) sprawdź czy spełnia warunek (czy pozycja parzysta). Jeśli nie jest to indeks parzysty to (5.) przejdź do następnej iteracji. W przeciwnym razie (6.) kontynuuj iterację tj. dodaj wartość do sumy. Na koniec (8.) wypisz wynik.

Podsumowanie

Instrukcje skoku pozwalają na sterowanie wykonywaniem pętlą. Ich wykorzystanie może okazać się wygodniejsze niż zapisywanie odpowiedniego warunku. Ich znajomość z pewnością pozwoli uzyskać pewną elastyczność podczas pisania kodu programu.

Zadania

Zadanie 1

a)

Napisz program, który będzie wczytywał kolejne liczby tak długo, aż zostanie wczytana wartość 0. Skorzystaj z nieskończonej pętli while oraz instrukcji brake.

Przykładowy ekran z konsoli:

  1. Podaj liczby:
  2. 3
  3. 4
  4. 0
  5. Suma: 7

b)

Zmień działanie programu z podpunktu a) tak, aby sumował jedynie parzyste wartości. Sugerowane zastosowanie instrukcji continue. Program ponownie powinien sumować, aż do wczytania wartości 0.

Przykładowy ekran z konsoli:

  1. Podaj liczby:
  2. 3
  3. 4
  4. 0
  5. Suma: 4

Zadanie 2

Napisz program, który dla danej tablicy obliczy sumę wszystkich jej elementów oraz elementy tylko na pozycjach nieparzystych. Skorzystaj z instrukcji continue.

Przykładowy dla tablicy L:={1, 2, 3, 4, 5} program powinien wypisać:

  1. Suma wszystkich: 15, w tym suma nieparzystych indeksów: 6

Wyjaśnienie: Suma wszystkich to 15 = 1 + 2 + 3 + 4 + 5, a suma elementów na indeksach nieparzystych to 2 + 4, ponieważ indeksujemy od 0.