Instrukcje iteracyjne pętle
Iteracja: metoda matematyczna polegająca na wielokrotnym kolejnym zastosowaniu tego samego algorytmu postępowania, przy czym wynik i-tej operacji stanowi dane wejściowe dla kolejnej, (i+1)-szej operacji. W algorytmach jest to wielokrotne powtarzanie pewnych operacji, lub nawet całych fragmentów obliczeń (np. kilku kroków).
Wykonaj obliczenie: n! = n! * liczba Dane: n =5. Wynik: wyprowadzenie wyniku n!=1*2*3*4*5. Start Obliczenie wstępne: n! = 1, gdzie liczba = 1 (obliczenia zostaną zakończone, gdy liczba przekroczy wartość 5). Wykonaj obliczenie: n! = n! * liczba Wykonaj obliczenie liczba = liczba + 1 n!=1*1=1 liczba=2 Wykonaj obliczenie: n! = n! * liczba Wykonaj obliczenie liczba = liczba + 1 n!=1*2=2 liczba=3 Wykonaj obliczenie: n! = n! * liczba Wykonaj obliczenie liczba = liczba + 1 n!=2*3=6 liczba=4 Wykonaj obliczenie: n! = n! * liczba Wykonaj obliczenie liczba = liczba + 1 n!=6*4=24 liczba=5 Tak należałoby skonstruować algorytm, by obliczyć wartość 5! A co dla 100! ? Wykonaj obliczenie: n! = n! * liczba Wykonaj obliczenie liczba = liczba + 1 n!=24*5=120 liczba=6 Koniec
Wynik: wyprowadzenie wyniku n!=1*2*3*4*5 Start Dane: n=5 Wynik: wyprowadzenie wyniku n!=1*2*3*4*5 Start Obliczenie wstępne: n! = 1 liczba = 1 Wykonaj obliczenie: n! = n! * liczba Wykonaj obliczenie liczba=liczba+1 Wykonaj obliczenie: liczba = liczba + 1 Koniec Dane: n=5 Wynik: wyprowadzenie wyniku n!=1*2*3*4*5 Start Obliczenie wstępne: liczba =1 n!=1 Sprawdzenie warunku liczba <= 5 Jeśli TAK, to: Wykonaj obliczenie: n! = n! * liczba Wykonaj obliczenie liczba = liczba + 1 Ponowne sprawdzenie warunku Jeśli NIE, to Wyprowadź wynik: n! Koniec Porównanie algorytmów liniowego i iteracyjnego do obliczenia 5!
schemat blokowy algorytmu iteracyjnego schemat blokowy algorytmu iteracyjnego. Tu można wprowadzić pojęcie pętli iteracyjnej – widać ją na schemacie
Obliczenie silni (5!) Dane: n =5 Wynik: wyprowadzenie wyniku n!=1*2*3*4*5 Start Obliczenie wstępne: liczba =1 n!=1 Sprawdzenie warunku liczba <= 5 Jeśli TAK, to: Wykonaj przypisanie: n! = n! * liczba Wykonaj przypisanie: liczba = liczba + 1 Ponowne sprawdzenie warunku Jeśli NIE, to Wyprowadź wynik: n! Koniec Liczba=2 Liczba=3 Liczba=4 Liczba=5 Liczba=6 n!=120
Instrukcja while (dopóki) Składnia tej instrukcji jest następująca: while (wyrażenie_warunkowe) instrukcja; W pętli while wykonanie instrukcji powtarza się tak długo, jak długo wyrażenie_warunkowe ma wartość TRUE (czyli jest prawdziwe). Sprawdzenia tego dokonuje się przed każdym wykonaniem instrukcji, a więc może się zdarzyć, że instrukcje w pętli nie będą wykonane ani raz! Przy pomocy różnych rodzajów pętli iteracyjnych obliczać będziemy wartość sin (x) dla x >0 i x <180
#include<iostream.h> #include <iomanip.h> #include <math.h> main(){ int x; float y, pi=3.1415; //pi=3.1415926535897932384626433832795 x=0; while (x<=180) { y=sin(x*pi/180); cout<<"sin("<<x<<") = "<<setprecision(2)<<y<<endl; //to samo co "\n" x=x+10; } //end while system ("pause"); } w funkcji sinus musimy wprowadzić mnożnik pi/180 ponieważ w C++ funkcje trygonometryczne pracują nie w stopniach lecz radianach. Stąd ten przelicznik radianów na stopnie
Instrukcja do...while Składnia instrukcji jest następująca: do instrukcja while wyrażenie_warunkowe; W pętli do...while wykonanie instrukcji powtarza się tak długo, jak długo wyrażenie_warunkowe ma wartość TRUE (czyli jest prawdziwe). 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 wykonać się wcale.
#include<iostream.h> #include <math.h> main() { int x; float y, pi=3.141592654; x=0; do { y=sin(x*pi/180); cout<<"sin("<<x<<") = "<<y<<endl; //to samo co "\n" x=x+10; } while (x<=180) ; system (”pause”); }
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ę.
#include<iostream.h> main() { int i; for (i =1; i < 4; i=i+1) // Pętla wypisze 3 razy cout<<"Jestem w pętli\n"; // ten sam tekst: Jestem w pętli system("pause”); } Praca pętli for wykonywana jest według następują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 jest instrukcja. 4. Po wykonaniu instrukcji, obliczana jest wartość wyrażenia wyr_krok, po czym powtarzany jest punkt 2.
#include<iostream.h> #include <math.h> main() { int x; float y, pi=3.141592654; // tu nie musimy podawać x=0, ponieważ jest to realizowane w pętli for (x=0;x<180;x=x+10) { y=sin(x*pi/180); cout<<"sin("<<x<<") = "<<y<<endl; //to samo co "\n" } system (”pause”);
/* Program sprawdza, czy wpisano liczbę z zakresu (10, 100) jeśli liczba należy do przedziału, pętla wykonywana jest dalej */ #include<iostream.h> main() { int liczba; do { // && operator logiczny i (iloczyn logiczny) cout<<"Podaj liczbę całkowitą z przedziału <10, 100>" ; cin>>liczba; } while ( (liczba<100) && (liczba>10)); system("pause"); }
Pętle zagnieżdżone Często mamy do czynienia z pętlami iteracyjnymi znajdującymi się w innej pętli – są to tzw. pętle zagnieżdżone. Aby prawidłowo z nich korzystać, należy pamiętać, że: pętla rozpoczynająca się w danej pętli musi się również w niej kończyć; klamra zamykająca pętlę wewnętrzną MUSI być w pętli zewnętrznej, zawsze najpierw wykonywana jest pętla wewnętrzna, a później – zewnętrzna.
// Pętle zagnieżdżone for – tabliczka mnożenia #include<iostream.h> main() { int i, x, y, iloczyn; for (x=1; x<=10; x=x+1) { //x++ for (y=1; y<=10; y=y+1) { iloczyn=x*y; cout<<" "<<x<<" * "<<y<<" = "<<iloczyn<<endl; } //for cout<<"\n"; system ("pause"); }
Zadanie Proszę napisać program obliczający średnią arytmetyczną wprowadzanych liczb, wykorzystując wszystkie instrukcje iteracyjne (while, do…while, for).