Instrukcja wyboru, pętle 2 wykład. Podstawy programowania - Paskal
Tematy Instrukcja wyboru jeden z wielu wariantów: case Pętle while repeat for Instrukcje sterowania pętli break continue goto
Instrukcja wyboru instrukcja switch jeden z wielu wariantów, switch ( ) { case : /* instrukcje, jeśli wyrażenie == wartość1 */ break; case : /* instrukcje, jeśli wyrażenie == wartość2 */ break; /*... */ default: /* instrukcje, jeśli żaden z wcześniejszych warunków nie został spełniony */ break;
Program z instrukcją wyboru (1) #include <stdio.h> #include <conio.h> int main () { int a, b; printf ("Podaj a: "); scanf ("%d", &a); printf ("Podaj b: "); scanf ("%d", &b); switch (b) { case 0: printf ("Nie można dzielić przez 0!\n"); break; default: printf ("a/b=%d\n", a/b); getch(); return 0; Czego brakuje w instrukcji switch?
Program z instrukcją wyboru (2) switch (n) { case 0: puts( N jest zerem."); Brak instrukcji break może być celowy break; case 1: case 4: case 9: puts( N jest kwadratem liczby."); break; case 2: puts( N jest liczbą parzystą."); case 3: case 5: case 7: puts("n jest liczba pierwszą."); break; case 6: case 8: puts("n jest liczba parzystą."); break; default: puts( Tylko liczby jednocyfrowe są dozwolone."); break;
Program z instrukcją wyboru (3) #include <stdio.h> #include <conio.h> int main () { unsigned short dzieci = 3, podatek = 1000; switch (dzieci) { case 0: break; /* brak dzieci - czyli brak ulgi */ case 1: /* ulga 2% */ podatek = podatek - (podatek / 100 * 2); break; case 2: /* ulga 5% */ podatek = podatek - (podatek/100* 5); break; default: /* ulga 10% */ podatek = podatek - (podatek/100*10); printf ("Do zapłaty: %d\n", podatek); getch(); return 0;
Użycie instrukcji warunkowej i wyboru Instrukcja warunkowa dla grupy działań używamy instrukcji grupującej if ( warunek ) { instrukcje; else { instrukcje; Instrukcja wyboru Grupa działań nie wymaga instrukcji grupującej switch ( ) { case warto case warto default: instrukcja; instrukcja; : instrukcja; instrukcja; break: : instrukcja; instrukcja; break:
Operator warunkowy warunek? wyrażenie1 : wyrażenie2 Przy spełnionym warunku zwracana jest wartość wyrażenia1, w przeciwnym razie - wyrażenia 2. Poniewaz to operator, to wynik należy przypisać zmiennej zmienna = warunek? wyrażenie1 : wyrażenie2 Obliczana jest wartość tylko tego z wyrażeń, które zostało wybrane. Nie mylić z instrukcją warunkową if (warunek) instrukcja; else instrukcja;
Pętle powtórzenie działań Dla jednej powtarzanej instrukcji: warunek tak nie while ( warunek ) instrukcja; czytamy: dopóki spełnia się warunek, wykonujemy instrukcję instrukcja dla kilku powtarzanych instrukcji: while ( warunek ) { instrukcja; instrukcja; instrukcja;
Przykład 3 iloczyn = 2; while ( iloczyn <= 100) iloczyn *=2; Ile razy będzie wykonywane każde działanie? Jaką wartość będzie posiadała zmienna iloczyn po wykonaniu wszystkich działań?
Przykład 4 #include <stdio.h> #include <conio.h> #define KON 999 Podawać liczby całkowite aż do zakończenia 999. Policzyć sumę liczb podzilenych na 5 i średnią arytmetyczną wszystkich liczb. int main() { int licznik, liczba, suma, podzielny_na_5; float srednia; suma = licznik = podzielny_na_5 = 0; printf("\n Podawaj liczby. Na końcu wpisz %d \n", KON); scanf("%d", &liczba); while (liczba!= KON ) { licznik++; suma += liczba; if (liczba % 5 == 0) podzielny_na_5 += liczba; scanf("%d", &liczba); srednia = (float) suma / licznik; printf("srednia liczb wynosi %.2f\n", srednia); printf("suma liczb podzielnych na 5 wynosi %d\n", podzielny_na_5); getch();
Przykład 5 Podać ciąg liczb całkowitych, który kończy się na 0. Wydrukować sumę cyfr wszystkich liczb. #include <stdio.h> #include <conio.h> int main() { short const KON=0; int liczba, suma_cyfr; suma_cyfr = 0; puts ("Podaj liczby calkowite."); printf ("Na koncu podaj %d\n", KON); scanf ("%d", &liczba); liczba = liczba < 0? -liczba : liczba; while ( liczba!= KON ) { while ( liczba > 0 ) { suma_cyfr += liczba % 10; liczba /= 10; scanf("%d", &liczba); printf("suma cyfr wynosi %d \n", suma_cyfr); getch(); operator warunkowy
Pętla do... while... instrukcje tak do { instrukcja; instrukcja; while (warunek ) ; warunek nie na początku wykonują się instrukcje, potem sprawdzany jest warunek, czy należy dalej powtarzać
Przykład Podać ciąg liczb całkowitych. Policzyć, ile jest w nim liczb, podzielnych na 3. #include <stdio.h> #include <conio.h> int main() { int liczba, ile = 0; printf("podaj liczby calkowite. Na koncu podaj 0.\n"); do { scanf("%d", &liczba); if ( liczba % 10 == 3 ) ile++; while (liczba!= 0); printf(" %d liczb(y) koncza sie na 3. \n", ile); getch();
Przykład Algorytm Euklidesa obliczanie najwiekszego wspólnego dzielnika do { reszta = A % B; A = B; B = reszta; while (B!= 0);
Porównanie while i do while while na początku warunek, następnie instrukcja instrukcja może być wykonana 0 lub więcej razy do while na początku instrukcje, potem warunek instrukcja może być wykonana 1 lub więcej razy Instrukcje są powtarzane, gry warunek jest spełniony (tak)
Pętla for For ( ; ; ) instrukcja; - jest to instrukcja, wykonywana przed pierwszym - - po
Przykład Wydrukować tabelę kwadratów. #include <stdio.h> #include <conio.h> int main(){ int i; for( i = 1; i < 100; i++) printf("%4d %5d", i, i*i); printf("\n"); getch();
Instrukcje sterowania pętli break kończy pętlę continue kończy iterację, czyli jeden krok petli. go to <etykieta> skierowuje do instrukcji, zaznaczoną etykietą nie rekomenduje się, bo powoduje błędy, które jest trudno wykryć używamy tylko w wyjątkowych wypadkach
Instrukcje sterowania pętli - break Wydrukuj 10 podanych liczb. Jeśli są 0, zatrzymać program. #include <stdio.h> #include <conio.h> int main() { int i, ch; printf("\n Podaj liczby ca³kowite... Koniec - 0.\n Podano: "); for ( i = 1; i<=10; i++) { scanf("%d", &ch); if ( ch == 0 ) break; printf("%d ", ch); printf("\n"); getch();
Instrukcje sterowania pętli - continue Jak się zmieni wykonanie tego programu? #include <stdio.h> int main() { int i, ch; printf("\n Podaj liczby całkowite... Koniec - 0.\n Podano: "); for ( i = 1; i<=10; i++) { scanf("%d", &ch); if ( ch == 0 ) continue; printf("%d ", ch); printf("\n"); program wydrukuje: Podaj liczby calkowite... koniec 0 Podano: 1 2 0 3 0 4 0 5 0 5 0 7 0 8 1 2 3 4 5 5
Podsumowanie Instrukcja wyboru switch Pętle while, do... while, for zakończenie pętli zależy od spełnienia warunku Instrukcje sterowania pętli break continue goto
Na następnym wykładzie: 3. Tablice 2 wykład - pętle