1 / 18

Informatyka I Wykład 7

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)

lobo
Download Presentation

Informatyka I Wykład 7

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Informatyka IWykład 7 • switch • Pętle STEROWANIE c.d. Jerzy F. Kotowski

  2. 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

  3. 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

  4. 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

  5. 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

  6. 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

  7. 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

  8. 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

  9. 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

  10. 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

  11. 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

  12. 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

  13. 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

  14. 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

  15. 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

  16. 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

  17. 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

  18. 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

More Related