Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

Instrukcje sterujące część 2

Podobne prezentacje


Prezentacja na temat: "Instrukcje sterujące część 2"— Zapis prezentacji:

1 Instrukcje sterujące część 2
Pętle: while( )...; do... while( ); for ( )...;

2 Wprowadzenie Do tej pory poznaliśmy instrukcje sterujące if( )...; i if( )...; else...; pozwalające na przebieg zmiany programu. Instrukcje te niestety nie pozwalały na powrót do instrukcji już wykonanych. Inaczej mówiąc instrukcje te nie dawały możliwości wykonywania tzw. pętli, czyli powtarzania jednej lub wielu instrukcji. W języku C++ istnieją trzy rodzaje pętli: while ( )...; do... while( ); for ( )...;

3 while (wyrazenie) instrukcja1;
Pętla while ( )...; Instrukcja while ma formę: while (wyrazenie) instrukcja1; Słowa te można przetłumaczyć na język Polski w następujący sposób: podczas_gdy (wyrazenie)wykonuj instrukcja1; while (wyrazenie) instrukcja1; Najpierw oblicza się wartość wyrażenia. Jeśli wynik jest zerowy, wówczas instrukcja1 nie jest wcale wykonywana. Jeśli jednak wartość wyrażenia jest niezerowa (prawda), wówczas wykonywana jest instrukcja1, po czym ponownie obliczana jest wartość wyrażenia. Jeśli nadal wartość tego wyrażenia jest niezerowa, wówczas ponownie wykonywana jest instrukcja1, i tak dalej, podczas gdy (while) wyrażenie ma wartość niezerową. Jeśli w końcu kiedyś obliczone wyrażenie będzie miało wartość zerową, wówczas dopiero pętla zostanie przerwana. Proszę zwrócić uwagę, że obliczenie wartości pętli odbywa się przed wykonaniem instrukcji instrukcja1. Oznacza to, że może ona nie zostać w ogóle wykonana.

4 Blok instrukcji - przypomnienie
Podobnie jak w instrukcjach warunkowych if( ), tak i w instrukcjach pętli zdarza się, że chodzi nam o wykonanie warunkowe nie jednej instrukcji, a całego bloku (kilku) instrukcji.Tak jak w instrukcji if( ), stosujemy instrukcję składaną zwaną inaczej blokiem. Są to po prostu zwykłe instrukcje ograniczone nawiasami { }. while (wyrazenie) { instrl; instr2; instr3; }

5 Przykład Oto prosty program pytający użytkownika ile gwiazdek ma wypisać, i wypisujący je. #include <iostream.h> main( ) { int ile; cout << ”Ile gwiazdek ma mieć kapitan?: ”; cin >> ile; cout << ”\n No to narysujmy wszystkie ” << ile << ” : ”; // pętla while rysująca gwiazdki while (ile) cout << ”*”; ile = ile – 1; } // na dowód, że miał prawo przerwać pętlę cout << ”\n Teraz zmienna ile ma wartość ” << ile; Ile gwiazdek ma mieć kapitan? : 4 No to teraz narysujmy wszystkie 4: **** Teraz zmienna ile ma wartość 0  Wykonanie programu Pętla while

6 Uzyskiwanie wartości losowych w języku C++
W programowaniu bardzo przydatne jest uzyskiwanie wartości losowych. Niestety nie ma możliwości otrzymania w bezpośredni sposób prawdziwych liczb losowych takich jak np. przy rzucie kostką. W komputerze zostało to rozwiązane za pomocą tzw. generatora liczb pseudolosowych. Realizowane jest to za pomocą wewnętrznego zegara komputera. Na początku powinna zostać wywołana funkcja randomize( );, która w momencie uruchomienia pobiera aktualny czas zegara systemowego i oblicza tzw. liczbę początkową. Można mówić o losowaniu tej liczby gdyż funkcja jest wykonywana w losowym momencie czasowym – w zależności od tego kiedy ją wywołamy (uruchomimy program). Funkcję randomize( ); powinno się wywoływać jeden raz. Po obliczeniu liczby początkowej można zacząć losować liczby za pomocą funkcji: liczba = random(zakres); Zakres oznacza maksymalna możliwą do wylosowania liczbę, minimalną liczbą jest 0. Oznacza to, że po wpisaniu: liczba = random(50); zostanie wylosowana liczba z zakresu Liczba ta zostanie przypisana do zmiennej liczba. Ostatnią rzeczą o której należy pamiętać jest dopisanie do nagłówka programu biblioteki #include <stdlib.h>, w której znajdują się funkcje: randomize(); i random();

7 do instrukcja while(wyrazenie);
Pętla do...while( ); Instrukcja while ma formę: do instrukcja while(wyrazenie); Słowa te można przetłumaczyć na język Polski w następujący sposób: rób instrukcja podczas_gdy (wyrażenie); do instrukcja while (wyrażenie); Działanie jej jest takie: Najpierw wykonywana jest instrukcja. Następnie obliczona zostaje wartość wyrażenia. Jeśli jest ono niezerowe (prawda), to wykona­nie instrukcji zostanie powtórzone, po czym znowu obliczone zostanie wyrażenie... i tak w kółko, dopóki wyrażenie będzie różne od zera. Jak widać działanie tej pętli przypomina tę opisaną poprzednio. Różnica polega tylko na tym, że wartość wyrażenia obliczana jest nie przed, ale po wykonaniu instrukcji. Wynika stąd, że instrukcja zostanie wykonana co najmniej raz. Czyli nawet wtedy, gdy wyrażenie nie będzie nigdy prawdziwe.

8 Przykład: Gra „za dużo – za mało”
Napiszmy program, który wylosuje liczbę. Naszym zadaniem będzie zgadnąć jaka to liczba. Po wprowadzeniu przez nas liczby program będzie porównywał ją z wylosowaną i podpowiadał nam za pomocą komunikatów: „Za dużo”, „Za mało”. #include <iostream.h> #include <stdlib.h> //do losowania liczb main ( ) { randomize(); //start generatora liczb losowych int zagadka = random(100);//losuje liczbe int liczba; do //początek pętli do.. while( ); cout << "\nPodaj liczbe: "; cin >> liczba; //wczytaj liczbe if (liczba>zagadka) cout << "Za dużo"; else if (liczba<zagadka) cout << "Za mało"; else cout << "Zgadłeś !!!"; } while(liczba-zagadka);//jeżeli liczba-zagadka=0 } //to koniec gry Pętla do.. while( );

9 Analiza przykładu Aby skorzystać z funkcji generatora liczb losowych należało dodać bibliotekę: #include <stdlib.h> //do losowania liczb Instrukcja randomize(); inicjalizuje generator liczb losowych, dzięki któremu losujemy liczbę int zagadka = random(100); z zakresu i jej wartość podstawiamy do zmiennej zagadka. W kolejnej linijce definiujemy zmienną: int liczba;, której będziemy używać do zgadywania wartości wylosowanej liczby. W tym momencie rozpoczyna się pętla do...while( ), warunkiem wyjścia z niej jest odgadnięcie wylosowanej liczby: while(liczba-zagadka); Jeżeli odgadnięta przez nas wartość liczba, będzie równa wylosowanej przez komputer liczbie zagadka, to ich różnica da nam zero i nastąpi wyjście z pętli. Jeżeli wartości będą różne od siebie to różnica będzie różna od zera i pętla będzie kontynuowana. Wewnątrz pętli program prosi nas o odgadnięcie liczby i wczytuje ją pod zmienną liczba, a następnie sprawdza czy wprowadzona przez nas wartość liczbowa jest większa od wylosowanej liczby, jeżeli tak wyświetla komunikat „Za dużo” if (liczba>zagadka) cout << "Za dużo"; else W kolejnej linijce program sprawdza, czy wprowadzona przez nas wartość liczbowa jest mniejsza od wylosowanej liczby, jeżeli tak wyświetla komunikat „Za mało” if (liczba<zagadka) cout << "Za mało"; else W przeciwnym wypadku wyświetla komunikat o odgadnięciu liczby „Zgadłeś!!!”

10 Pętla for ( )...; for (instr_ini; wyraz_warun; instr_krok) instrukcja;
Instrukcja while ma formę: for (instr_ini; wyraz_warun; instr_krok) instrukcja; Poszczególne człony mają następujące znaczenie: instr_ini – jest to instrukcja wykonywana przed wejściem do petli wyraz_warun – jest to wyrażenie, które jest obliczane przed każdym obiegiem do pętli. Jeżeli jest ono różne od zera , to wykonywane zostają instrukcje będące treścią pętli instr_krok – to instrukcja wykonywana na zakończenie każdego obiegu pętli. Jest to jakby ostatnia instrukcja, wykonywana bezpośrednio przed obliczeniem wyrażenia wyraz_warun. Pętla ta działa następująco: na początku obliczana jest instr_ini, potem sprawdzane jest wyrażenie warunkowe: wyraz_warun, jeżeli jest ono równe zero następuje wyjście z pętli. W przeciwnym wypadku wykonywana jest instrukcja, a następnie instr_krok, i pętla wraca do sprawdzenia wyrażenia warunkowego: wyraz_warun.

11 Zastosowanie pętli for ( )
Pętlę for ( ) stosujemy zazwyczaj, gdy chcemy powtórzyć daną instrukcję określoną - z góry znaną - ilość razy. Dwie wcześniej omówione pętle stosujemy gdy chcemy powtarzać daną instrukcję podczas gdy dany warunek jest prawdziwy. Przykład Napisz program wypisujący liczby od 0 do 99. Liczby maja być oddzielone przecinkami. #include <iostream.h> main( ) { int liczba; for(liczba=0; liczba<100; liczba=liczba+1) cout << liczba << ”,”; } Instrukcją inicjująca jest instrukcja liczba = 0; Warunkiem wyjścia z pętli jest liczba<100;. A liczba=liczba+1, to instrukcja obliczana przy każdorazowym przejściu pętli. Ponieważ w każdym obiegu pętli zmienna liczba zwiększa się o 1, to wypisując ją otrzymamy kolejne liczby od 0 do 99.

12 Przykład 2 Napisz program sumujący liczby od 1 do 100
#include <iostream.h> main() { int liczba; //zmienna do przechowywania // kolejnych liczb od 1 do 100 int suma=0; //tu będziemy obliczać sumę for (liczba=1; liczba<=100; liczba=liczba+1) suma = suma + liczba; //sumujemy cout << "\nZsumowane liczby od 1 do 100: ” << suma; //wypisujemy wynik sumowania } Proszę zwrócić uwagę, że wyrażeniem startowym jest teraz liczba=1 a końcowym liczba <=100, mamy bowiem zsumować liczby od 1 do 100. Zmienną, w której dokonujemy sumowania nazwaliśmy suma i jest ona początkowo ustawiana na 0. Na końcu programu wypisywana jest wartość zliczona w zmiennej suma.

13 Podsumowanie while (wyrazenie) instrukcja1; do instrukcja
for (instr_ini; wyraz_warun; instr_krok) instrukcja; używamy gdy pętla ma działać do momentu gdy warunek jest spełniony warunek wyjścia z pętli sprawdzany jest na początku – oznacza to, że instrukcja może nie zostać wykonana wcale warunek wyjścia z pętli sprawdzany jest na końcu – oznacza to, że instrukcja będzie wykonana przynajmniej jeden raz stosujemy zazwyczaj, gdy chcemy powtórzyć daną instrukcję określoną - z góry znaną - ilość razy.

14 Zadania Zadanie 1 Napisz program obliczający iloczyn liczb od 1 do 7
Zadanie 2 Napisz program wczytujący liczby do momentu wprowadzenia liczby 0. Zadanie 3 Napisz program wczytujący liczby i sumujący je, do momentu wprowadzenia liczby 0. Suma powinna być wypisana na końcu programu Zadanie 4 Napisz program wypisujący liczby parzyste od 2 do 100. Zadanie 5 Napisz program wypisujący dziesięć losowych liczb z zakresu 0 do 50 . Zadanie 6 Napisz program wypisujący losowe liczby zakresu od 0 do 100 do momentu wylosowania liczby większej od 90. Zadanie 7 Napisz program wyznaczający na „chybił-trafił” 6 liczb dużego lotka. Zadanie 8 Napisz program wyznaczający przybliżenie liczby Pi ze wzoru Leibnitza: 


Pobierz ppt "Instrukcje sterujące część 2"

Podobne prezentacje


Reklamy Google