Informatyka I Wykład 7

18
Jerzy F. Kotowski Jerzy F. Kotowski 1 Informatyka I Wykład 7 STEROWANIE c.d. switch switch Pętle Pętle

description

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) - PowerPoint PPT Presentation

Transcript of Informatyka I Wykład 7

Page 1: Informatyka I Wykład 7

Jerzy F. KotowskiJerzy F. Kotowski 11

Informatyka IWykład 7

STEROWANIE c.d.

switchswitch PętlePętle

Page 2: Informatyka I Wykład 7

Jerzy F. KotowskiJerzy F. Kotowski 22

KONSTRUKCJA KONSTRUKCJA switch

switchswitch(zmienna){

casecase wyrażenie_stałe1:instrukcja1breakbreak;case case wyrażenie_stałe2:………..defaultdefault:breakbreak;

}

Zawsze można podstawić Zawsze można podstawić do pomocniczej zmiennejdo pomocniczej zmiennej

Wyrażenie stałe oblicza Wyrażenie stałe oblicza kompilator (definicja)kompilator (definicja)

Wyjście poza konstrukcjęWyjście poza konstrukcję Dowolna kolejnośćDowolna kolejność Wszystkie różneWszystkie różne Powinno byćPowinno być Czasami tu jest Czasami tu jest

najciekawiejnajciekawiej

Page 3: Informatyka I Wykład 7

Jerzy F. KotowskiJerzy F. Kotowski 33

switch - przykład 1przykład 1

x = a % 2;x = a % 2;switch(x)switch(x){{

case 0:case 0:printf(“\nLiczba a jest parzysta”);printf(“\nLiczba a jest parzysta”);break;break;

case 1:case 1:printf(“\nLiczba a jest nieparzysta”);printf(“\nLiczba a jest nieparzysta”);break;break;

default:default:printf(“\nRatunku! Popsułem się!!”);printf(“\nRatunku! Popsułem się!!”);break;break;

}}

7_17_1

Page 4: Informatyka I Wykład 7

Jerzy F. KotowskiJerzy F. Kotowski 44

switch - przykład 2przykład 2

x = a % 3;x = a % 3;switch(x)switch(x){{

case 0:case 0:printf(“\nLiczba a dzieli się przez 3”);printf(“\nLiczba a dzieli się przez 3”);break;break;

case 1:case 1:case 2:case 2:

printf(“\nLiczba a nie dzieli się przez 3”);printf(“\nLiczba a nie dzieli się przez 3”);break;break;

default:default:break;break;

}}

7_27_2

Page 5: Informatyka I Wykład 7

Jerzy F. KotowskiJerzy F. Kotowski 55

switch - przykład 3przykład 3

printf(“\nCzy masz już dość na dzisiaj?”);printf(“\nCzy masz już dość na dzisiaj?”);c = getch();c = getch(); // Wczytanie znaku z klawiatury bez echa// Wczytanie znaku z klawiatury bez echaswitch(c)switch(c){{

case ‘t’:case ‘t’:case ‘T’:case ‘T’:

printf(“\nNo to pa!”); printf(“\nNo to pa!”); getch(); exit(0); // WYJŚCIEgetch(); exit(0); // WYJŚCIEcase ‘n’:case ‘n’:case ‘N’:case ‘N’:

printf(“\nNo to gramy jeszcze raz!!”); getch(); printf(“\nNo to gramy jeszcze raz!!”); getch(); break;break;default:default:

printf(“\n\aChyba jednak masz już dość...”);break;printf(“\n\aChyba jednak masz już dość...”);break;}}

7_37_3

Page 6: Informatyka I Wykład 7

Jerzy F. KotowskiJerzy F. Kotowski 66

switch - przykład 4przykład 4

y = x % 3;y = x % 3;switch(y)switch(y){{

case 0:case 0:x++; break;x++; break;

case 1:case 1:x = 0; y = 1;x = 0; y = 1;

case 2:case 2:x++; y--;x++; y--;

default:default:printf(“\nZnowu printf(“\nZnowu

ja?”);ja?”);break;break;

}}

x = 7;x = 7; x?, y?x?, y? x: 1, y: 0 x: 1, y: 0

Zobaczymy Zobaczymy napisnapis

x = 8;x = 8; x?, y?x?, y? x: 9, y: 1 x: 9, y: 1

Zobaczymy Zobaczymy napisnapis

7_47_4

Page 7: Informatyka I Wykład 7

Jerzy F. KotowskiJerzy F. Kotowski 77

PĘTLA PĘTLA while

while(while(Wyrażenie))Instrukcja

Krok 1Krok 1 Wyznaczamy wartość Wyznaczamy wartość wyrażenia wyrażenia WyrażenieWyrażenie

Krok 2Krok 2 Jeżeli Jeżeli WyrażenieWyrażenie jest jest prawdą sterowanie przechodzi prawdą sterowanie przechodzi do do Kroku 3Kroku 3 a w przeciwnym a w przeciwnym przypadku wychodzi poza przypadku wychodzi poza konstrukcjękonstrukcję

Krok 3Krok 3 Wykonywana jest Wykonywana jest Instrukcja. Instrukcja. Powrót do Powrót do Kroku 1Kroku 1

Page 8: Informatyka I Wykład 7

Jerzy F. KotowskiJerzy F. Kotowski 88

PĘTLA PĘTLA while - przykład 1przykład 1

int n;int n;// wczytanie wartości n// wczytanie wartości nprintf(“\nPodaj n = “);printf(“\nPodaj n = “);scanf(“%d”, &n); scanf(“%d”, &n); while(n--)while(n--)

printf(“\n%d”,n);printf(“\n%d”,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 = 4

3210-1

Wniosek: Pętla while(n--) chodzi n razy. Po pętli n: -1

7_57_5

Page 9: Informatyka I Wykład 7

Jerzy F. KotowskiJerzy F. Kotowski 99

PĘTLA PĘTLA while - przykład 2przykład 2

int n;int n;// wczytanie wartości n// wczytanie wartości nprintf(“\nPodaj n = “);printf(“\nPodaj n = “);scanf(“%d”, &n); scanf(“%d”, &n); while(n--);while(n--);

printf(“\n%d”,n);printf(“\n%d”,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ą

Kilka instrukcji pustychn = 5;;;;;n = 5;;;;;

7_67_6

Page 10: Informatyka I Wykład 7

Jerzy F. KotowskiJerzy F. Kotowski 1010

PĘTLA PĘTLA while - przykład 3przykład 3

int n;int n;// wczytanie wartości n// wczytanie wartości nprintf(“\nPodaj n = “);printf(“\nPodaj n = “);scanf(“%d”, &n); scanf(“%d”, &n); while(--n)while(--n)

printf(“\n%d”,n);printf(“\n%d”,n);printf(“\n%d”,n);printf(“\n%d”,n);

while(--n) Podaliśmy n = 4. Co

zobaczymy na ekranie?Podaj n = 4

3210

Wniosek: Pętla while(--n) chodzi n-1 razy. Po pętli n: 0

7_77_7

Page 11: Informatyka I Wykład 7

Jerzy F. KotowskiJerzy F. Kotowski 1111

PĘTLA PĘTLA while - przykład 4przykład 4

// obliczanie wartości n!// obliczanie wartości n!int n, n_silnia;int n, n_silnia;printf(“\nPodaj n = “);printf(“\nPodaj n = “);scanf(“%d”, &n); scanf(“%d”, &n); n_silnia = n;n_silnia = n;while(--n)while(--n)

n_silnia *=n;n_silnia *=n;

n_silnia *= n; n_silnia *= n; to samo co n_silnia = n_silnia * n;n_silnia = n_silnia * n; Niedługo będzie...

Uwaga!! n się zmieniło!! Można tak:

int n, n_s, i;int n, n_s, i;printf(“\nPodaj n = “);printf(“\nPodaj n = “);scanf(“%d”, &n); scanf(“%d”, &n); i = n_s = n;i = n_s = n;while(--i)while(--i)

n_s *= i;n_s *= i;printf(“\n%d! = %d”, n, n_s);printf(“\n%d! = %d”, n, n_s);

7_97_9

7_87_8

Page 12: Informatyka I Wykład 7

Jerzy F. KotowskiJerzy F. Kotowski 1212

PĘTLA PĘTLA do - while

dodoInstrukcja

while(while(Wyrażenie););

Krok 1Krok 1 Wykonywana jest Wykonywana jest InstrukcjaInstrukcja

Krok 2Krok 2 Wyznaczamy wartość Wyznaczamy wartość wyrażenia wyrażenia WyrażenieWyrażenie

Krok 3Krok 3 Jeżeli Jeżeli WyrażenieWyrażenie jest jest prawdą powracamy do prawdą powracamy do Kroku 1Kroku 1. . W przeciwnym przypadku W przeciwnym przypadku wychodzimy poza konstrukcjęwychodzimy poza konstrukcję

Wniosek:Wniosek: Pętla Pętla whilewhile może nie może nie pójść ani razu a pętla pójść ani razu a pętla do - whiledo - while pójdzie zawsze przynajmniej razpójdzie zawsze przynajmniej raz

Page 13: Informatyka I Wykład 7

Jerzy F. KotowskiJerzy F. Kotowski 1313

PĘTLA PĘTLA for

for(wyr1; wyr2; wyr3)for(wyr1; wyr2; wyr3)InstrukcjaInstrukcja

Średniki muszą byćŚredniki muszą być wyr1 - część inicjująca, - część inicjująca,

wykonywana razwykonywana raz wyr2 - warunek - warunek wyr3 - część modyfiku- - część modyfiku-

jącająca Instrukcja - może nie - może nie

być wykonana ani razubyć wykonana ani razu Od tłumaczenia jest Od tłumaczenia jest

jeden wyjątekjeden wyjątek

wyr1;wyr1;while(wyr2)while(wyr2){{

Instrukcja;Instrukcja;wyr3;wyr3;

}}

Page 14: Informatyka I Wykład 7

Jerzy F. KotowskiJerzy F. Kotowski 1414

PĘTLA PĘTLA for - przykłady 1 - 4przykłady 1 - 4

// inicjalizacja tablicy// inicjalizacja tablicyint i, a[10];int i, a[10];for(i=0; i<10; i++)for(i=0; i<10; i++)

a[i] = i;a[i] = i;

// inicjalizacja tablicy// inicjalizacja tablicyint i, a[10];int i, a[10];for(i=0; i<10; a[i++] = i);for(i=0; i<10; a[i++] = i);

// inicjalizacja tablicy// inicjalizacja tablicyint i, a[10];int i, a[10];i=0;i=0;for(;i<10;)for(;i<10;)

a[i++] = i;a[i++] = i;

int i = 0, a[10];int i = 0, a[10];for(;;)for(;;){{

if(i >= 10) break;if(i >= 10) break;a[i++] = i;a[i++] = i;

}}

Page 15: Informatyka I Wykład 7

Jerzy F. KotowskiJerzy F. Kotowski 1515

PĘTLA PĘTLA for - przykłady 5 - 6przykłady 5 - 6

// odwracanie tablicy// odwracanie tablicyint i, j;int i, j;float tab[20], kolega;float tab[20], kolega;for(i=0, j=19; i<j; i++, j--)for(i=0, j=19; i<j; i++, j--){{

kolega = tab[i];kolega = tab[i];tab[i] = tab[j];tab[i] = tab[j];tab[j] = kolega;tab[j] = kolega;

}}

W przykładzie wystąpił W przykładzie wystąpił gościnnie (2 x) słynny gościnnie (2 x) słynny operator przecinkowyoperator przecinkowy

// wyznaczanie wartości “n nad k”// wyznaczanie wartości “n nad k”int n, k, n_k, min, i;int n, k, n_k, min, i;printf(“\nn = “); scanf(“%d”, &n);printf(“\nn = “); scanf(“%d”, &n);printf(“k = “); scanf(“%d”, &k);printf(“k = “); scanf(“%d”, &k);min = k;min = k; // min = min(k,n-k)// min = min(k,n-k)if (n-k < min) min = n-k;if (n-k < min) min = n-k;n_k = n;n_k = n;for(i=1; i < min; i++)for(i=1; i < min; i++)

n_k = n_k * (n - i) / (i + 1); n_k = n_k * (n - i) / (i + 1); // ***// ***printf(“%d nad %d = %d”,n,k,n_k);printf(“%d nad %d = %d”,n,k,n_k); W instrukcji W instrukcji ****** wykorzystano wykorzystano

lewostronną łączność mnoże-lewostronną łączność mnoże-nia i dzieleniania i dzielenia

7_b7_b

7_a7_a

Page 16: Informatyka I Wykład 7

Jerzy F. KotowskiJerzy F. Kotowski 1616

PĘTLA PĘTLA for - przykład 6Aprzykład 6A

Alternatywna postać do pętli Alternatywna postać do pętli for z przykładu 6 z przykładu 6

int r, s; int r, s; // pomocnicze zmienne// pomocnicze zmiennen_k = n;n_k = n;r = n - 1;r = n - 1;s = 2;s = 2;while(--min)while(--min)

n_k = n_k * r-- / s++;n_k = n_k * r-- / s++;

7_c7_c

Page 17: Informatyka I Wykład 7

Jerzy F. KotowskiJerzy F. Kotowski 1717

SŁOWA KLUCZOWESŁOWA KLUCZOWE break oraz oraz continue

break pozwala na pozwala na wyskoczenie z wszystkich wyskoczenie z wszystkich konstrukcji sterującychkonstrukcji sterujących

continue jest używane w jest używane w

kontekście z pętlami.kontekście z pętlami. Przerywa bieżacy obieg i Przerywa bieżacy obieg i zaczyna nowy uprzednio zaczyna nowy uprzednio sprawdzając warunek. W sprawdzając warunek. W pętli pętli for wpierw przejście wpierw przejście do części modyfikującej.do części modyfikującej.

// sumowanie dodatnich// sumowanie dodatnich// elementów N elemen-// elementów N elemen-// towej tablicy ‘tab’// towej tablicy ‘tab’

int i, sumator;for(i=0, i<N; i++){

if(tab[i] <= 0)continue;

sumator += tab[i];}

Page 18: Informatyka I Wykład 7

Jerzy F. KotowskiJerzy F. Kotowski 1818

KONSTRUKCJA STERUJĄCAKONSTRUKCJA STERUJĄCA goto i etykietyi etykiety

Dobra praktyka dotycząca Dobra praktyka dotycząca pisania programów w ję-pisania programów w ję-zyku C polega na unikaniu zyku C polega na unikaniu konstrukcji konstrukcji goto

Konstrukcja Konstrukcja goto przydaje przydaje się w wyjątkowych sytuac-się w wyjątkowych sytuac-jach (np. obsługa błędów).jach (np. obsługa błędów).

W C++ służy do tego spec-W C++ służy do tego spec-jalny mechanizm nazywa-jalny mechanizm nazywa-ny “obsługą wyjątków”. ny “obsługą wyjątków”.

// Przykład wykorzystania// Przykład wykorzystania// konstrukcji ‘goto’// konstrukcji ‘goto’

if(niepowodzenie)goto error;

…………………………error:

dwukropek, średnik error - etykieta