• Nie Znaleziono Wyników

Wstęp do informatyki- wykład 7 Pętla for

N/A
N/A
Protected

Academic year: 2022

Share "Wstęp do informatyki- wykład 7 Pętla for"

Copied!
21
0
0

Pełen tekst

(1)

Pętla for

Treści prezentowane w wykładzie zostały oparte o:

S. Prata, Język C++. Szkoła programowania. Wydanie VI, Helion, 2012

www.cplusplus.com

Jerzy Grębosz, Opus magnum C++11, Helion, 2017

B. Stroustrup, Język C++. Kompendium wiedzy. Wydanie IV, Helion, 2014

Wstęp do informatyki- wykład 7

(2)

Instrukcje iteracyjne - pętla while

(3)

Pętla do...while...

(4)

Pętla while - przykład

Napisz program, który wyznaczy pierwszą liczbę naturalną postaci 2n, która jest większa od losowo wybranej liczby lim:

int main() {

int lim = rand(); //liczba losowa z [0, RAND_MAX]

cout<<"wylosowana granica to: "<<lim<<endl;

int liczba = 1;

while ( liczba <= lim )//dopóki nie przekroczymy lim

liczba *= 2;//liczymy kolejną potegę liczby 2

cout << "Szukana liczba to:" << liczba << endl;

return 0;

}

(5)

Pętla do...while -przykład – petla zaporowa

Napisz program, który będzie wczytywał dane od użytkownika aż do chwili, gdy poda on liczbę z przedziału [5, 100]

#include <iostream>

using namespace std;

int main() {

int n;

do {

cout << "Podaj liczbe z przedziału [5, 100]";

cin >> n;

}while (n < 5 || n > 100);

cout << "Liczba z przedziału wynosi:" << n << endl;

return 0;

(6)

Pętle – przykład – liczba cyfr liczby - pętla do-while

#include <iostream>

#include <cmath> //bo używamy funkcji abs using namespace std;

int main() { int n;

cout << "Podaj liczbe calkowita ";

cin >> n;

int rob = abs(n);//można rob=n; bo tylko liczymy cyfry

int il = 0; //zmienna - licznik ilości cyfr do

{ il++; //il = il+1; il += 1; zwiększamy licznik //bo mamy pierwszą lub kolejna cyfrę liczby

rob /= 10; //n = n/10;

} while (rob != 0);

cout << "Liczba cyfr liczby " << n << " to " << il ; return 0;

(7)

Pętla for

Pętla for (ang. for – dla) oznacza: dla takich warunków wykonuj...:

for(instr_inicjalizująca; wyr_warunkowe; instr_kroku) treść_pętli ;

instr_inicjalizująca – jest to instrukcja inicjalizująca zmienne używane w pętli. Wykonana jest jednokrotnie, na początku zanim zostanie wykonana właściwa praca pętli.

wyr_warunkowe – jest to wyrażenie, które obliczane jest przed każdym obiegiem pętli. Jeśli jest prawdziwe, to wykonywane

zostają instrukcje będące treścią pętli, jeżeli nie, przerywana jest dalsza praca pętli.

instr_kroku – to instrukcja kroku pętli, wykonywana na

zakończenie każdego obiegu (kroku) pętli. Jest to jakby ostatnia instrukcja, wykonywana bezpośrednio przed obliczeniem wartości

(8)

Pętla for

for(instr_inicjaliz; wyr_warunkowe; instr_kroku) treść_pętli ;

Praca pętli for:

(1) Najpierw wykonuje się instrukcje instr_inicjaliz inicjalizujące pracę pętli.

(2) Obliczana jest wartość wyrażenia warunkowego wyr_warunkowe:

· Jeżeli ma wartość false praca pętli jest przerywana.

· Jeżeli zaś ma wartość true, wówczas wykonywane zostają instrukcje będące treścią pętli.

(3) Po wykonaniu treści pętli wykonana zostaje instrukcja kroku pętli (instr_kroku), a następnie wracamy do (2).

(9)

Pętla for

(10)

Pętla for -przykład

for(instr_inicjaliz; wyr_warunkowe; instr_kroku) treść_pętli ;

int main() {

cout << "Stewardzie, ilu leci pasazerów ? ";

int ile; // liczba pasażerów cin >> ile;

for(int i = 1 ; i <= ile ; i++ ) {

cout << "Pasazer nr " << i

<< " prosze zapiac pasy ! \n";

}

cout << "Wszyscy zapieli pasy, to ladujemy. ";

}

(11)

Pętla for -przykład

Jeśli stewart odpowie 3, to na ekranie pojawi się:

Stewardzie, ilu leci pasazerów ? 3 Pasazer nr 1 prosze zapiac pasy ! Pasazer nr 2 prosze zapiac pasy ! Pasazer nr 3 prosze zapiac pasy ! Wszyscy zapieli pasy, to ladujemy.

instr_inicjaliz: int i = 1 – definicja zmiennej z

przypisaniem, tworzymy i ustawiamy licznik obiegów pętli i na 1 wyr_warunkowe: i <= ile - Jeżeli i jest mniejsze lub równe ile, wówczas wykonywana zostaje instrukcja będąca treścią pętli (czyli wypisanie tekstu z prośbą do i-tego pasażera o zapięcie

pasów )

instr_kroku:i++ - zwiększenie wartości licznika – zmiennej i o

(12)

Pętla for -zakres istnienia zmiennych

for(int i = 1 ; i <= ile ; i++ )

i- licznik obiegów pętli

W wyrażeniu inicjalizacyjnym zmiennej o nazwie i nadajemy wartość 1, po czym przy każdym obiegu pętli wartość tego licznika rośnie. Licznik i jest zmienną, której potrzebujemy tylko na użytek tej pętli, dlatego tworzymy go w instrukcji inicjalizacyjnej.

Obiekt zdefiniowany w instrukcji inicjalizacyjnej pętli for

istnieje (jest do dyspozycji) tylko w ramach tej instrukcji for.

To znaczy w tej linii, w której go napisaliśmy, a także w

instrukcjach stanowiących treść pętli. Po zakończeniu pracy pętli – tak zdefiniowany obiekt staje się niedostępny

(przestaje istnieć).

(13)

Pętla for

for(instr_inicjaliz; wyr_warunkowe; instr_kroku) treść_pętli ;

Pętla for jest najczęściej stosowaną formą instrukcji iteracyjnej.

Jest szczególnie wygodna, jeśli z góry wiadomo, ile będzie powtórzeń instrukcji stanowiącej ciało pętli (instrukcja

treść_pętli).

Zwykle w części inicjalizacyjnej instr_inicjaliz nadajemy odpowiednie wartości zmiennym używanym w ciele pętli, a w części instr_kroku dokonujemy ich zmiany po każdym

przebiegu pętli.

(14)

Pętle – przykład – pętla z licznikiem

Napisz program, który oblicza sumę 1/1+1/2 +1/3+...+1/n ,

gdzie n jest liczbą >0 podaną przez użytkownika (pętla zaporowa).

#include <iostream>

using namespace std;

int main() {

int n; //n ma być liczbą >0 do

{

cout << "Podaj liczbe calkowita";

cin >> n;

} while (n<=0);//(!(n>0))

(15)

Pętle – przykład – while i for – pętla z licznikiem

// 1/1 + 1/2 +1/3 + … + 1/n

double s = 0.0; //suma odwrotności l.rzeczywista int k = 1; //licznik przechodzący

//po kolejnych mianownikach od 1 do n while(k <= n) //dopóki są jeszcze odwrotnosci {

s += 1.0/k;//do sumy dodajemy kolejne składnik k++; //przechodzimy do kolejnej odwrotnosci }

s = 0.0; //zmienna na sume wyzerowana na poczatku for (int k=1; k <= n; k++)

s += 1.0/k;

cout << "Suma odwrotnosci wynosi" << s << endl;

}

(16)

Pętle – przykład - for– pętla z licznikiem

Wyświetlić 10 początkowych liczb parzystych >0.

/*1 sposób: wyswietlamy liczby 2,4,...,20, idziemy w pętli poczynając od 2 i przesuwamy się o 2*/

for(int i=2; i<=20; i+=2) {

cout<<i<<endl;

}

//2-gi sposób- kolejne liczby parzyste są równe // 2i, i=1,..,10

for(int i=1; i<=10; i++ ) cout<<2*i<<endl;

(17)

Pętle – przykład - for– pętla z licznikiem

//odliczanie od 10 w dół do 0

int main() {

for (int i = 10; i>=0; i--) //petla od 10 do 0 cout << "i = " << i << "\n";

cout << "Start\n";

}

(18)

Pętla - for – uwagi

instr_inicjaliz nie musi być tylko jedną instrukcją.

Może być ich kilka oddzielonych przecinkami (operator przecinkowy). Podobnie w przypadku instrukcji kroku pętli (instr_kroku).

Zauważmy, że nie jest możliwe zadeklarowanie w instr_inicjaliz zmiennych różnych typów (gdyż

wymagałoby to więcej niż jednej instrukcji deklaracyjnej i ;)

Można natomiast zadeklarować więcej niż jedną zmienną tego samego typu; na przykład prawidłowa jest konstrukcja for (int i = 0, k = size-1; i < k; i++, k--) {

// OK }

(19)

Pętla - for – uwagi

Poszczególne elementy: instr_inicjaliz,

wyr_warunkowe, instr_kroku nie muszą wystąpić.

Dowolny z nich można opuścić, zachowując jednak średnik oddzielający go od sąsiada.

Opuszczenie wyrażenia warunkowego traktowane jest tak, jakby stało tam wyrażenie zawsze prawdziwe (warunek

spełniony true).

Tak więc pętla for( ; ; ) {

// treść pętli }

jest pętlą nieskończoną.

(20)

Pętle – break

Zapoznaliśmy się już z działaniem instrukcji break,

polegającym na przerwaniu wykonywania instrukcji switch.

Podobne działanie ma break w stosunku do instrukcji pętli:

for, while, do...while.

Instrukcja break powoduje natychmiastowe przerwanie wykonywania tych pętli.

Jeśli mamy do czynienia z kilkoma pętlami, zagnieżdżonymi jedna wewnątrz drugiej, to instrukcja break powoduje

przerwanie tylko tej pętli, w której bezpośrednio tkwi. Jest to więc jakby przerwanie z wyjściem tylko o jeden poziom

wyżej.

(21)

Pętla – break - przykład

for (int i = 1; i < 10; i++) {

cout << i << '\n';

if (i == 4) break;

}

W rezultacie wykonania tego fragmentu programu na ekranie pojawi się:

1 2 3

Cytaty

Powiązane dokumenty

Analogicznie, jak dla instrukcji czytania, instrukcja pisania odnosi się do listy wyrażeń wypisanych na wyjście (ekran, plik,

W ten sposób stosując analizę klasyczną (tzn. niekwan- tową) otrzymaliśmy taką samą wartość i kierunek orbitalnego momentu magne- tycznego, jak w podejściu kwantowym. Być

Wewnętrzna pętla for wykonywana jest także 10 razy (j zmienia się od 1 do 10), zatem instrukcja printf() będzie wykonana 100 razy.. Instrukcja

Wyregulować wzmocnienie Y i X oscyloskopu tak, aby pętla histerezy mieściła się na ekranie oscyloskopu a jednocześnie była możliwie największa.. Wzmocnienie

continue Instrukcja continue powoduje zaniechanie wykonywania dalszej części instrukcji w pętli – przerywany jest aktualny obieg pętli, następuje wykonanie instrukcji kroku

Instrukcja continue powoduje zaniechanie wykonywania dalszej części instrukcji w pętli – przerywany jest aktualny obieg pętli, następuje wykonanie instrukcji kroku i

Na tej podstawie oszacuj czas działania pojedynczej pary tych instrukcji (po prostu zmierz czas wykonywania się powyższej pętli) i porównaj z czasem potrzebnym Twojemu procesorowi

Pola podkreślone na żółto oznaczają dane podane