180 likes | 296 Views
Informatyka I Wykład 7. switch Pętle. STEROWANIE c.d. KONSTRUKCJA switch. Zawsze można podstawić do pomocniczej zmiennej Wyrażenie stałe oblicza kompilator (definicja) Wyjście poza konstrukcję Dowolna kolejność Wszystkie różne Powinno być Czasami tu jest najciekawiej. switch (zmienna)
E N D
Informatyka IWykład 7 • switch • Pętle STEROWANIE c.d. Jerzy F. Kotowski
KONSTRUKCJA switch • Zawsze można podstawić do pomocniczej zmiennej • Wyrażenie stałe oblicza kompilator (definicja) • Wyjście poza konstrukcję • Dowolna kolejność • Wszystkie różne • Powinno być • Czasami tu jest najciekawiej switch(zmienna) { case wyrażenie_stałe1: instrukcja1 break; case wyrażenie_stałe2: ……….. default: break; } Jerzy F. Kotowski
7_1 switch - przykład 1 x = a % 2; switch(x) { case 0: printf(“\nLiczba a jest parzysta”); break; case 1: printf(“\nLiczba a jest nieparzysta”); break; default: printf(“\nRatunku! Popsułem się!!”); break; } Jerzy F. Kotowski
7_2 switch - przykład 2 x = a % 3; switch(x) { case 0: printf(“\nLiczba a dzieli się przez 3”); break; case 1: case 2: printf(“\nLiczba a nie dzieli się przez 3”); break; default: break; } Jerzy F. Kotowski
7_3 switch - przykład 3 printf(“\nCzy masz już dość na dzisiaj?”); c = getch(); // Wczytanie znaku z klawiatury bez echa switch(c) { case ‘t’: case ‘T’: printf(“\nNo to pa!”); getch(); exit(0); // WYJŚCIE case ‘n’: case ‘N’: printf(“\nNo to gramy jeszcze raz!!”); getch(); break; default: printf(“\n\aChyba jednak masz już dość...”);break; } Jerzy F. Kotowski
7_4 switch - przykład 4 y = x % 3; switch(y) { case 0: x++; break; case 1: x = 0; y = 1; case 2: x++; y--; default: printf(“\nZnowu ja?”); break; } • x = 7; • x?, y? • x: 1, y: 0 Zobaczymy napis • x = 8; • x?, y? • x: 9, y: 1 Zobaczymy napis Jerzy F. Kotowski
PĘTLA while • Krok 1 Wyznaczamy wartość wyrażenia Wyrażenie • Krok 2 Jeżeli Wyrażeniejest prawdą sterowanie przechodzi do Kroku 3 a w przeciwnym przypadku wychodzi poza konstrukcję • Krok 3 Wykonywana jest Instrukcja. Powrót do Kroku 1¨ while(Wyrażenie) Instrukcja Jerzy F. Kotowski
7_5 PĘTLA while - przykład 1 int n; // wczytanie wartości n printf(“\nPodaj n = “); scanf(“%d”, &n); while(n--) printf(“\n%d”,n); printf(“\n%d”,n); • & w funkcji scanf • Drugie printf poza pętlą • Podaliśmy n = 4. Co zobaczymy na ekranie? • Podaj n = 43210-1 • Wniosek: Pętla while(n--) chodzi n razy. Po pętli n: -1 Jerzy F. Kotowski
7_6 PĘTLA while - przykład 2 int n; // wczytanie wartości n printf(“\nPodaj n = “); scanf(“%d”, &n); while(n--); printf(“\n%d”,n); printf(“\n%d”,n); • Pojawił się średnik • Podaliśmy n = 4. Co zobaczymy na ekranie? • Podaj n = 4-1-1 • Ten przykład to bliskie spotkanie z instrukcją pustą n = 5;;;;; Kilka instrukcji pustych Jerzy F. Kotowski
7_7 PĘTLA while - przykład 3 int n; // wczytanie wartości n printf(“\nPodaj n = “); scanf(“%d”, &n); while(--n) printf(“\n%d”,n); printf(“\n%d”,n); • while(--n) • Podaliśmy n = 4. Co zobaczymy na ekranie? • Podaj n = 43210 • Wniosek: Pętla while(--n) chodzi n-1 razy. Po pętli n: 0 Jerzy F. Kotowski
7_8 PĘTLA while - przykład 4 7_9 // obliczanie wartości n! int n, n_silnia; printf(“\nPodaj n = “); scanf(“%d”, &n); n_silnia = n; while(--n) n_silnia *=n; • n_silnia *= n; to samo co n_silnia = n_silnia * n;Niedługo będzie... • Uwaga!! n się zmieniło!! • Można tak: • int n, n_s, i; • printf(“\nPodaj n = “); • scanf(“%d”, &n); • i = n_s = n; • while(--i) • n_s *= i; • printf(“\n%d! = %d”, n, n_s); Jerzy F. Kotowski
PĘTLA do - while • Krok 1 Wykonywana jest Instrukcja • Krok 2 Wyznaczamy wartość wyrażenia Wyrażenie • Krok 3 Jeżeli Wyrażeniejest prawdą powracamy do Kroku 1. W przeciwnym przypadku wychodzimy poza konstrukcję¨ • Wniosek: Pętla while może nie pójść ani razu a pętla do - while pójdzie zawsze przynajmniej raz do Instrukcja while(Wyrażenie); Jerzy F. Kotowski
PĘTLA for • Średniki muszą być • wyr1 - część inicjująca, wykonywana raz • wyr2 - warunek • wyr3 - część modyfiku-jąca • Instrukcja - może nie być wykonana ani razu • Od tłumaczenia jest jeden wyjątek for(wyr1; wyr2; wyr3) Instrukcja wyr1; while(wyr2) { Instrukcja; wyr3; } Jerzy F. Kotowski
PĘTLA for - przykłady 1 - 4 // inicjalizacja tablicy int i, a[10]; for(i=0; i<10; i++) a[i] = i; // inicjalizacja tablicy int i, a[10]; for(i=0; i<10; a[i++] = i); int i = 0, a[10]; for(;;) { if(i >= 10) break; a[i++] = i; } // inicjalizacja tablicy int i, a[10]; i=0; for(;i<10;) a[i++] = i; Jerzy F. Kotowski
7_a PĘTLA for - przykłady 5 - 6 7_b • // odwracanie tablicy • int i, j; • float tab[20], kolega; • for(i=0, j=19; i<j; i++, j--) • { • kolega = tab[i]; • tab[i] = tab[j]; • tab[j] = kolega; • } • W przykładzie wystąpił gościnnie (2 x) słynny operator przecinkowy • // wyznaczanie wartości “n nad k” • int n, k, n_k, min, i; • printf(“\nn = “); scanf(“%d”, &n); • printf(“k = “); scanf(“%d”, &k); • min = k; // min = min(k,n-k) • if (n-k < min) min = n-k; • n_k = n; • for(i=1; i < min; i++) • n_k = n_k * (n - i) / (i + 1); // *** • printf(“%d nad %d = %d”,n,k,n_k); • W instrukcji *** wykorzystano lewostronną łączność mnoże-nia i dzielenia Jerzy F. Kotowski
7_c PĘTLA for - przykład 6A • Alternatywna postać do pętli for z przykładu 6 int r, s; // pomocnicze zmienne n_k = n; r = n - 1; s = 2; while(--min) n_k = n_k * r-- / s++; Jerzy F. Kotowski
SŁOWA KLUCZOWEbreakoraz continue • breakpozwala na wyskoczenie z wszystkich konstrukcji sterujących • continue jest używane w kontekście z pętlami.Przerywa bieżacy obieg i zaczyna nowy uprzednio sprawdzając warunek. W pętli for wpierw przejście do części modyfikującej. // sumowanie dodatnich // elementów N elemen- // towej tablicy ‘tab’ int i, sumator; for(i=0, i<N; i++) { if(tab[i] <= 0) continue; sumator += tab[i]; } Jerzy F. Kotowski
KONSTRUKCJA STERUJĄCAgotoi etykiety • Dobra praktyka dotycząca pisania programów w ję-zyku C polega na unikaniu konstrukcji goto • Konstrukcja goto przydaje się w wyjątkowych sytuac-jach (np. obsługa błędów). • W C++ służy do tego spec-jalny mechanizm nazywa-ny “obsługą wyjątków”. • // Przykład wykorzystania • // konstrukcji ‘goto’ • if(niepowodzenie) • goto error; • …………… • …………… • error: • dwukropek, średnik • error - etykieta Jerzy F. Kotowski