KURS C/C++ WYKŁAD 2 Instrukcje iteracyjne Instrukcja while Składnia tej instrukcji jest następująca: while (wyrażenie) instrukcja W pętli while wykonanie instrukcji powtarza się tak długo, jak długo wartość wyrażenia jest różna od zera. Sprawdzenia tego konuje się przed każdym wykonaniem instrukcji. char znak; znak = a ; Program 1 char znak; znak = getchar(); // pobierz znak, <enter> while(znak!= t ) // blok instrukcji putchar(znak); //wypisz znak znak = getchar(); char znak; while( (znak = getchar() )!= t ) putchar(znak); Blok instrukcji (instrukcja złożona): lista instrukcji ch = getchar(); Funkcja int getchar(void) zwraca czytany znak (kod). W przypadku gdy napotka koniec zbioru lub gdy wystąpi błąd w operacji czytania zwraca EOF. Funkcja int putchar(int c) zwraca wysyłany znak c lub EOF gdy powstał błąd.
Program 1 int ch; ch = getchar(); while(ch!= EOF) // blok instrukcji ch = getchar(); int ch; while( (ch = getchar() )!= EOF) Wprowadzono symboliczną nazwa EOF (end of file - koniec pliku). Stała EOF jest obiektem całkowitym zdefiniowanym w standarwym pliku nagłówkowym <stdio.h>. W Borland 3.1, EOF przyjmuje wartość -1, w niektórych implementacjach jako 0. Instrukcja...while Składnia instrukcji jest następująca: instrukcja while wyrażenie W pętli...while wykonanie instrukcji powtarza się tak długo, jak długo wartość wyrażenia jest różna od zera. Sprawdzenia tego konuje się po każdym wykonaniu instrukcji, dlatego pętla wykona się zawsze co najmniej raz; to różni ją od pętli while która może nie wykonć się wcale. Program 1 int ch; ch = getch(); putch (ch); while (ch!= a ); int i; i=2; while(i!= 0) // blok instrukcji printf ( pętla while i=%d\n,i); i=i-1; getch(); printf ( po pętli\n ); Program 3 int i; i=2; // blok instrukcji printf( pętla _while i=%d\n,i); i--; getch(); while (i!= 0); printf ( po pętli\n );
EKRAN: pętla while i=2 pętla while i=1 po pętli pętla _while i=2 pętla _while i=1 po pętli; Program 3 int i=0; float licznik=0; while(i) // blok instrukcji printf (?i=%d\n?,i); i--; licznik++; printf ( po pętli licznik=%f,licznik); Program 4 int i=0; float licznik=0; // blok instrukcji printf (?i=%d\n?,i); i = i-1; licznik++; while (i); printf( po pętli licznik=%f,licznik); EKRAN: licznik=0 Jestem po pętli while i=0 i=i-1=0-1=-1 i=-1 i=i-1=-1-1=-2 i=-2 i=i-1=-2-1=-3... po pętli licznik=65536 Przykłady pętli: Przykład 1, float kwota;
printf (? Podaj wpłacaną kwotę ); scanf (?%f?, &kwota); while (kwota<=0); Przykład 2. int liczba; cout<< Podaj liczbę całkowitą z przedziału <10, 100> ; cin>>liczba; while ( (liczba<10) (liczba>10)); // operator logiczny lub (suma logiczna) Przykład 3. int liczba; cout<< Podaj liczbę całkowitą z przedziału (-?,10) lub (100, +?) ; cin>>liczba; while ( (liczba>=10) && (liczba<=100)); //&& - operator logiczny i (iloczyn logiczny) Program 5 char ch; // zakończenie pętli po wprowadzeniu znaku ENTER while ( (ch=getchar())!=0xa) while ( (ch=getche())!=0xd) putch(ch); Instrukcja for Składnia pętli for ma postać: for (inst_ini; wyr_war; wyr_krok) instrukcja; inst _ini wykorzystywana jest zwykle deklarowania i inicjalizowania zmiennych na potrzeby pętli wyr_war wyrażenie warunkowe wykorzystywane jest testowania warunków wykonywania pętli, wyr_krok określa zmianę stanu pętli i używane jest zwykle zwiększania lub zmniejszania
zmiennej indeksującej pętlę. Wszystkie składniki w nawiasie są opcjonalne, jednak muszą być zachowane średniki oddzielające je. for (i =1; i < 4; i=i+1) printf ( Jestem w pętli ); // Pętla wypisze 3 razy ten sam tekst: Jestem w pętli 1) i = 1 wartość i jest mniejsza od 4 wypisuje tekst: Jestem w pętli 2) i = i+1=1+1=2 wartość i jest mniejsza od 4 wypisuje tekst: Jestem w pętli 3) i = i+1=2+1=3 wartość i jest mniejsza od 4 wypisuje tekst: Jestem w pętli 4) i = i+1=3+1=4 wartość i nie jest mniejsza od 4 pętla zostaje zakończona for (i =1; i<4; i++) printf ( Jestem %d raz w pętli, i); // 3 razy kolejno tekst: Jestem 1 raz w pętli ostatni raz: Jestem 2 raz w pętli Jestem 3 raz w pętli Praca pętli for wykonywana jest według nastepującego algorytmu: 1. wykonują się instrukcje inicjujące pętlę inst_inic. 2. Obliczana jest wartość wyrażenia wyr_war. Jeśli wartość tego wyrażenia jest równa zero, praca pętli jest przerywana. 3. Jeśli powyżej okazało się, że wyr_war jest!= 0, wtedy wykonywana są instrukcja 4. Po wykonaniu instrukcji, obilczana jest wartość wyrażenia wyr_krok. Po czym powtarzany jest punkt 2. Wyrażeń: inst_ini, wyr_war, wyr_krok - może być kilka,wtedy rozdzielane są przecinkami. Pętlą równoważną pętli for jest while w postaci: instr_inic; while (instr1_warunkowa) // instrukcje instr2; for (i =1; i < 4; i=i+1) printf ( Jestem w pętli ); i=1; while (i<4) printf ( Jestem w pętli );
i = i + 1; Pętlami tzw. nieskończonymi są pętle: for( ; ; ) while( 1) // instrukcje //instrukcje //instrukcje while (1); Program 1 #include <conio.h> #include <iostream.h> for ( int i = 1; i<24; i++) // int i - deklaracja zmiennej tylko w C++ cout<<i<<" INFORMATYKA \n"; gotoxy (2*i, i); getch(); #include <iostream.h> #include <conio.h> for(int i = 1; i<24; cout<<++i <<"INFORMATYKA\n"); Instrukcje: while (wyrażenie) instrukcja instrukcja while wyrażenie for (inst_ini; wyr_war; wyr_krok) instrukcja; nazywamy instrukcjami iteracyjnymi.