KURS C/C++ WYKAAD 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 dokonuje siÄ™ przed każdym wykonaniem instrukcji. char znak; znak =żÿażÿ; Program 1 Program 2 #include #include void main() void main() { { char znak; char znak; znak = getchar(); // pobierz znak, while( (znak = getchar() ) != żÿtżÿ) while(znak != żÿtżÿ) putchar(znak); { // blok instrukcji } putchar(znak); //wypisz znak znak = getchar(); } } Blok instrukcji (instrukcja zÅ‚ożona): { lista instrukcji } { putchar(ch); 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 Program 2 #include #include void main() void main() { { int ch; int ch; ch = getchar(); while( (ch = getchar() ) != EOF) while(ch != EOF) putchar(ch); { // blok instrukcji } putchar(ch); ch = getchar(); } } Wprowadzono symbolicznÄ… nazwa EOF (end of file - koniec pliku). StaÅ‚a EOF jest obiektem caÅ‚kowitym zdefiniowanym w standardowym pliku nagłówkowym . W Borland 3.1, EOF przyjmuje wartość -1, w niektórych implementacjach jako 0. Instrukcja do...while SkÅ‚adnia instrukcji jest nastÄ™pujÄ…ca: do instrukcja while wyrażenie W pÄ™tli do...while wykonanie instrukcji powtarza siÄ™ tak dÅ‚ugo, jak dÅ‚ugo wartość wyrażenia jest różna od zera. Sprawdzenia tego dokonuje 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 #include void main(){ int ch; do{ ch = getch(); putch (ch); } while (ch != żÿażÿ); } Program 2 Program 3 #include #include #include #include void main() void main() { { int i; int i; clrscr(); clrscr(); i=2; i=2; while(i != 0) do { // blok instrukcji { // blok instrukcji printf (żÿpÄ™tla while i=%d\nżÿ,i); printf(żÿpÄ™tla do_while i=%d\nżÿ,i); i=i-1; i--; getch(); getch(); } } while (i != 0); printf (żÿpo pÄ™tli\nżÿ); printf (żÿpo pÄ™tli\nżÿ); } } EKRAN: pÄ™tla while i=2 pÄ™tla do_while i=2 pÄ™tla while i=1 pÄ™tla do_while i=1 po pÄ™tli po pÄ™tli; Program 3 Program 4 #include #include #include #include void main() void main() { { int i=0; float licznik=0; int i=0; float licznik=0; clrscr(); clrscr(); while(i) do { // blok instrukcji { // blok instrukcji printf (?i=%d\n?,i); printf (?i=%d\n?,i); i--; i = i-1; licznik++; licznik++; } } while (i); printf (żÿpo pÄ™tli licznik=%fżÿ,licznik); printf(żÿpo pÄ™tli licznik=%fżÿ,licznik); } } EKRAN: licznik=0 i=0 Jestem po pÄ™tli while 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; do { printf (? Podaj wpÅ‚acanÄ… kwotÄ™ żÿ); scanf (?%f?, &kwota); } while (kwota<=0); PrzykÅ‚ad 2. int liczba; do { 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; do { 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 #include #include void main() { char ch; // zakoÅ„czenie pÄ™tli po wprowadzeniu znaku ENTER while ( (ch=getchar()) !=0xA){ putchar(ch); } 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 do deklarowania i inicjalizowania zmiennych na potrzeby pÄ™tli wyr_war wyrażenie warunkowe wykorzystywane jest do testowania warunków wykonywania pÄ™tli, wyr_krok okreÅ›la zmianÄ™ stanu pÄ™tli i używane jest zwykle do 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 Jestem 2 raz w pÄ™tli ostatni raz: 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) i=1; printf (żÿJestem w pÄ™tliżÿ); while (i<4){ printf (żÿJestem w pÄ™tliżÿ); i = i + 1; } PÄ™tlami tzw. nieskoÅ„czonymi sÄ… pÄ™tle: for( ; ; ) while( 1) do { { { // instrukcje //instrukcje //instrukcje } } } while (1); Program 1 #include #include void main() { clrscr(); for ( int i = 1; i<24; i++){ // int i - deklaracja zmiennej tylko w C++ cout< gotoxy (2*i, i); } getch(); } Program 2 #include #include void main(){ for(int i = 1; i<24; cout<<++i <<"INFORMATYKA\n"); } Instrukcje: while (wyrażenie) instrukcja do instrukcja while wyrażenie for (inst_ini; wyr_war; wyr_krok) instrukcja; nazywamy instrukcjami iteracyjnymi.