PODSTAWY INFORMATYKI 1 PRACOWNIA NR 6 TEMAT: Programowanie w języku C/C++: instrukcje iteracyjne for, while, do while Ogólna postać instrukcji for for (wyr1; wyr2; wyr3) Instrukcja for twory pętlę działającą w następujący sposób: 1. Wyliczane jest wyr1 (jeśli występuje). 2. Wyliczane jest wyr2. Jeśli jego wartością jest zero, to instrukcja for kończy działanie, w przeciwnym razie działanie instrukcji for jest kontynuowane (krok 3). 3. Wykonywana jest instrukcja. 4. Wyliczana jest wartość wyr3. Działanie jest wznawiane od kroku 2. TAK START oblicz wyr1 oblicz wyr2 wyr2 == 0 NIE wykonaj instrukcję Każde z trzech wyrażeń w nawiasach jest opcjonalne (może ich nie być), ale nawiasy i średniki są obowiązkowe. Jako instrukcja może wystąpić instrukcja złożona (blok). Działanie instrukcji for może zostać przerwane instrukcjami: break, goto lub return (zakończenie całej funkcji). oblicz wyr3 KONIEC Po nawiasie w instrukcji for nie stawia się średnika. Konstrukcja ze średnikiem na końcu: for (i=0; i<10; i++); jest poprawna (kompilator nie zasygnalizuje błędu), ale oznacza wielokrotne wykonanie instrukcji pustej (w podanym przykładzie - 10 razy). Natomiast instrukcja zostanie wykonana tylko raz. Jeśli w instrukcji for nie jest podane wyr2, to przyjmuje się, że jest ono zawsze prawdziwe. Zatem w prosty sposób można skonstruować pętlę nieskończoną: for ( ; ; ) - 1 -
Przykład 1 #include <stdio.h> int main() int i,x; float suma = 0.0; for (i=0; i<10; i++) printf("podaj liczbe nr %d: \n",i+1); scanf("%d",&x); suma = suma + x; printf("srednia: %.3f\n",suma/10); return(0); program przedstawia jedno z częstszych zastosowań instrukcji for czyli organizację pętli iteracyjnej, wyr1 inicjalizuje licznik (i=0), wyr2 kontroluje granice licznika (i<10), wyr3 zmienia bieżącą wartość licznika (i++). Zagnieżdżanie pętli for Jako instrukcja w pętli for może występować kolejna pętla for. Przykład 2 (tabliczka mnożenia) #include <stdio.h> int main() int i,j; for (i=1; i<11; i++) for (j=1;j<11;j++) printf("%2d ",i*j); printf("\n"); return 0; Wynik działania programu: 1 2 3 4 5 6 7 8 9 10 2 4 6 8 10 12 14 16 18 20 3 6 9 12 15 18 21 24 27 30 4 8 12 16 20 24 28 32 36 40 5 10 15 20 25 30 35 40 45 50 6 12 18 24 30 36 42 48 54 60 7 14 21 28 35 42 49 56 63 70 8 16 24 32 40 48 56 64 72 80 9 18 27 36 45 54 63 72 81 90 10 20 30 40 50 60 70 80 90 100-2 -
Instrukcja break Instrukcja break umożliwia wcześniejsze zakończenie pętli for. Powoduje ona natychmiastowe opuszczenie pętli i przejście do instrukcji znajdującej się bezpośrednio po pętli for. W przypadku pętli zagnieżdżonych przerywane jest działanie tylko najbardziej wewnętrznej z nich. Instrukcja skoku: goto Instrukcja ta w postaci: goto label; przekazuje sterowanie do miejsca w programie oznaczonego etykietą o nazwie label. Etykietą można oznaczać tylko całe instrukcje. Skok może odbywać się tylko w ramach tej samej funkcji. Przykład: goto xxx; xxx: printf( Tekst\n ); Wystąpienie w powyższym fragmencie programu instrukcji skoku powoduje przeniesienie sterowania do instrukcji rozpoczynającej się od etykiety xxx. Instrukcja kontynuacji: continue Instrukcja kontynuacji używana jest wewnątrz pętli for i ma postać: continue; Instrukcja ta powoduje bezwarunkowe przejście na początek pętli (do następnej iteracji) z pominięciem instrukcji znajdujących się poniżej instrukcji continue. Dokładniej mówiąc powoduje przejście do wyliczania wartości wyr3. - 3 -
Instrukcja while Instrukcja while służy do tworzenia pętli w języku C. Jej składnia jest następująca: while (wyr) Zasada działania instrukcji jest następująca: 1. Obliczana jest wartość wyr. 2. Jeśli wartość wyr jest różna od zera (czyli wyrażenie jest prawdziwe) to wykonywana jest instrukcja, a następnie powracamy do pkt. 1 (obliczanie wartości wyr). Jeśli wartość wyr jest równa zeru (nie jest ono prawdziwe), to pętla while kończy działanie. START oblicz wyr wyr 0 Działanie pętli while można opisać także w następujący sposób: dopóki wyrażenie w nawiasach jest prawdziwe wykonuj instrukcję. TAK Wyrażenie (wyr) po słowie kluczowym while musi być wykonaj instrukcję koniecznie umieszczone w nawiasach zwykłych. Jako instrukcja może wystąpić instrukcja złożona (blok) czyli kilka instrukcji ograniczonych nawiasami klamrowymi: i. KONIEC Działanie pętli while może zostać przerwane instrukcjami: break (opuszczenie pętli), goto (skok do etykiety) lub return (zakończenie całej funkcji). W pętli while można zastosować instrukcję continue. Spowoduje ona przerwanie bieżącego kroku pętli i przejście do sprawdzenia wartości wyr. Poprawne zakończenie pętli while wymaga, aby w jej wnętrzu następowały zmiany (np. modyfikacje wartości zmiennych) wpływające na wartość wyrażenia w nawiasach (wyr). Po nawiasie w instrukcji while nie stawia się średnika. Konstrukcja ze średnikiem na końcu: while (wyr); jest poprawna składniowo (kompilator nie zasygnalizuje błędu), ale oznacza wykonanie instrukcji pustej. Natomiast instrukcja zostanie wykonana tylko raz. NIE - 4 -
Przykład 3 (program sprawdzający ile kolejnych liczb całkowitych należy dodać do siebie, aby otrzymać największą wartość nie przekraczającą MAX) #include <stdio.h> #define MAX 100 int main() int suma, n; suma = n = 0; while (suma<max) n++; suma = suma + n; suma = suma - n; n--; printf("ilosc liczb: %d\nsuma liczb: return 0; %d\n",n,suma); Wykorzystując instrukcję while można stworzyć pętlę nieskończoną. W takim przypadku jej opuszczenie musi nastąpić poprzez użycie instrukcji break, goto lub return, np. while (1) Opuszczenie pętli można zrealizować wykorzystując tzw. zmienną kontrolną, np. int stop = 0; while (!stop) if () stop = 1; Pętlę while można wykorzystać do zastąpienia pętli for: for (wyr1; wyr2; wyr3) jest równoważne wyr1; while (wyr2) wyr3; - 5 -
Instrukcja do while Zasada działania pętli do while jest taka sama jak instrukcji while, ale z tą różnicą, że warunek (wartość wyr) sprawdzany jest po wykonaniu instrukcji. Składnia instrukcji do while jest następująca: do while (wyr); Zasada działania instrukcji jest następująca: 1. Wykonywana jest instrukcja. 2. Obliczana jest wartość wyr. Jeśli wartość wyr jest różna od zera (czyli wyrażenie jest prawdziwe) to powracamy do pkt. 1 (wykonanie instrukcji). Jeśli wartość wyr jest równa zeru (czyli wyrażenie nie jest prawdziwe), to pętla do while kończy działanie. START wykonaj instrukcję oblicz wyr Pozostałe uwagi są takie same jak dla pętli while. W pętli while instrukcja może nie być ani razu wykonana, natomiast w pętli do while jest wykonywana przynajmniej jeden raz. NIE wyr 0 TAK KONIEC - 6 -