UNIWERSYTET TECHNOLOGICZNO-PRZYRODNICZY

w Bydgoszczy

ZAKŁAD ELEKTROENERGETYKI

LABORATORIUM INFORMATYKI

INSTRUKCJA DO ĆWICZENIA III

Instrukcje iteracyjne (pętle programowe)

Opracował: dr inż. Marcin Drechny

Luty 2010 r.

2

1. Cel ćwiczenia

Celem ćwiczenia jest zapoznanie się z konstrukcją i użyciem instrukcji iteracyjnych (pętli

programowych) for oraz while.

2. Wprowadzenie

Instrukcje iteracyjne są jednymi z częściej stosowanych instrukcji w języku C/C++. Służą one

do powtarzania większej liczby instrukcji określoną liczbę razy lub tak długo jak założony

warunek jest spełniony (lub niespełniony). Rozróżniamy instrukcje iteracyjne for oraz while

( do while).

2.1. Pętla for

Instrukcja for:

for (wyrażenie inicjujące; wyrażenie warunkowe; wyrażenie zwiększające)

instrukcja

Przykład obliczania silni z 10:

#include <vcl.h>

#include <iostream.h>

#include <conio.h>

void main (void)

{

int w = 1;

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

{

w *= i;

}

cout << "Silnia z 10 wynosi: " << w;

getch();

}

3

Wykonanie pętli w powyższym przykładzie odbywa się w następujący sposób:

• obliczone zostaje wyrażenie inicjujące (w tym przykładzie i = 1),

• obliczone zostaje wyrażenie warunkowe (w przykładzie i < 11) i uruchamiana zostaje

pętla,

• wykonywane są operacje wewnątrz pętli, w tym przypadku instrukcja w *= i; ,

• ponownie obliczany jest warunek i ponownie wykonywane są działania wewnątrz

pętli do momentu gdy warunek będzie fałszem,

• czyli, gdy i będzie > lub = 11 pętla i program kończy działanie.

Należy uważać przy używaniu operatora == w wyrażeniu warunkowym, gdyż często

prowadzi to do błędów np. nieskończonego działania pętli:

w = 1;

for (i = 0; i == 103453; i += 2 )

{

w += i;

}

Istnieje możliwość umieszczania większej ilości wyrażeń inicjujących, wyrażeń

warunkowych lub wyrażeń zwiększających. W takim przypadku przedzielamy wyrażenia

znakiem przecinka np.

int i = 2;

int j;

for (i, j = 0; i < 21; i++, j = pow(i, 2))

{

cout << i << ’’ , ’’ << j << endl;

}

4

2.2. Pętla while

Instrukcja while:

while (wyrażenie warunkowe) instrukcja

Pętla while wykonywana jest do momentu gdy wyrażenie warunkowe osiągnie fałsz (0).

Inaczej mówiąc, pętla while będzie działać czyli będzie wykonywana instrukcja lub grupa instrukcji, dopóki wyrażenie warunkowe jest prawdą. Należy pamiętać, że na początku

sprawdzany jest warunek a potem jeżeli jest on prawdziwy, wykonywana jest instrukcja lub

grupa instrukcji.

Przykład:

#include <vcl.h>

#include <iostream.h>

#include <conio.h>

void main (void)

{

int ilosc;

int i = 1;

cout << "Ile razy ma sie wykonac petla?" << endl;

cin >> ilosc;

while (i <= ilosc)

{

cout << "Petla wykonuje sie po raz" << i << endl;

i++;

}

getch();

}

5

2.3. Pętla do..while

Instrukcja do .. while:

do

instrukcja;

while (wyrażenie warunkowe);

Pętla do .. while wykonywana jest do momentu gdy wyrażenie warunkowe osiągnie fałsz (0).

Inaczej mówiąc, pętla while będzie działać czyli będzie wykonywana instrukcja lub grupa instrukcji, dopóki wyrażenie warunkowe jest prawdą. Należy pamiętać, że przed

sprawdzeniem warunku wykonywana jest instrukcja (grupa instrukcji). Następnie jest

sprawdzany warunek i jeżeli jest on prawdziwy, to pętla wznawia swoje działanie. To jest

różnica pomiędzy pętlą while a do .. while.

Przykład:

#include <vcl.h>

#include <iostream.h>

#include <conio.h>

void main (void)

{

int i = 1;

int ilosc = 0;

do {

cout << "Petla wykonuje sie " << i << " raz " << endl; i++;

} while (i <= ilosc);

getch();

}

6

2.4. Instrukcje sterujące przebiegiem programu

Instrukcja break

Instrukcja ta powoduje porzucenie aktualnego poziomu pętli lub instrukcji wyboru. Należy

pamiętać, że opuszczamy tylko jeden poziom. Gdy instrukcje np. pętli są kilkukrotnie

zagnieżdżone aby wyjść całkowicie z pętli, należy w odpowiednim miejscu użyć kilkukrotnie

instrukcji break.

Instrukcja continue

Jej użycie powoduje:

• w przypadku pętli while i while .. do, przeniesienie sterowania z wnętrza pętli do wyrażenia warunkowego, które zostaje obliczone. W zależności od uzyskanego

wyniku wykonywanie pętli jest kontynuowane lub zakończone,

• dla pętli for przeniesienie sterowania do wyrażenia zwiększającego liczniki pętli,

• w przypadku wielokrotnie zagnieżdżonych pętli instrukcja continue jest wiązana z

najbliższą instrukcją iteracyjną.

Instrukcja return

Zakończenie wykonywania funkcji. Jeśli funkcja zwraca wartość to piszemy:

return zwracana-wartość.

7

3. Przebieg ćwiczenia – zadania do wykonania

Wymagana znajomość zagadnień z ćwiczenia 1 i 2.

3.1. Zmodyfikować przykład z silnią w taki sposób, aby liczbę z której wyznaczona zostanie

silnia wprowadzać z klawiatury. Sprawdzić, z jakiej największej wprowadzonej

z klawiatury wartości można obliczyć silnię, dla założonego typu zmiennej, aby wynik był

poprawny! (użyć pętli for lub while)

3.2. Napisać program, który wyznacza średnią z ilości wartości wprowadzonych z klawiatury:

a) ilość wprowadzanych liczb jest ustalona z góry, ( for)

b) liczba danych wprowadzanych do programu jest wpisywana jako pierwsza dana do

programu po czym następuje wprowadzanie kolejnych liczb z których należy obliczyć

średnią, ( for)

c) nie jest znana liczba wprowadzanych danych do programu, wprowadzanie trwa tak

długo, aż wybierzemy opcję obliczania średniej z liczb już wprowadzonych. ( while)

3.3. Napisać program, który sprawdza czy liczba wpisana z klawiatury jest mniejsza lub

większa od założonej wartości umieszczonej w programie. Program informuje

użytkownika odpowiednim komunikatem aby ten wpisał mniejszą lub większą liczbę.

Program kończy działanie gdy wpiszemy wartość równą założonej wartości

umieszczonej w programie. (while)

3.4. Zmodyfikować program z zadania 3.3, tak aby wartość w programie została

wygenerowana losowo z zakresu np. od 20 do 50. (while, randomize, random)

3.5. Napisać program, który sprawdza czy wprowadzona z klawiatury liczba X jest liczbą pierwszą.

3.6. Napisać program, który wyznacza liczby pierwsze od 0 do X, gdzie X jest liczbą całkowitą zadaną przez prowadzącego.

3.7. Zmodyfikować program 3.6. w taki sposób aby liczby pierwsze były wyznaczane

8

z zakresu od X do Y, gdzie X, Y liczby całkowite podane przez prowadzącego oraz

Y>X.

3.8. Napisać program, który generuje 100 liczb losowych o rozkładzie normalnym ze wzoru:

z =

− 2 * ln x *sin(2 *π * x ) , gdzie z – wygenerowana liczba o rozkładzie 1

2

normalnym, x1 oraz x2 – liczby losowe o rozkładzie równomiernym. Wygenerowane liczby x1 i x2 powinny mieć dokładność minimum do czwartego miejsca po przecinku.

W trakcie generowania należy liczyć ile liczb jest znajduje się w zadanych poniżej

przedziałach. Liczebności danych przedziałów należy wyświetlić na ekranie.

Przykładowe przedziały:

(-∞, -10>, (-10,-8>, (-8, -6>, (-6, -4>, (-4, -2>, (-2, 0>, (0, 2>, (2, 4>,

(4, 6>, (6, 8>, (8, 10>, (10, ∞>.

3.9. Napisać program wyświetlający tabliczkę mnożenia dla wartości od 1 do 10 (zagnieździć

pętlę for w pętli for, do wyświetlania danych użyć funkcji cout ze specyfikatorem setw()) 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

9

4) Proponowana literatura:

- Robert Sedgewick, Algorytmy w C++, Wydawnictwo RM, Warszawa 1999,

- Harvey M. Dietel, Paul J. Dietel, Arkana C++: programowanie, Wydawnictwo RM,

Warszawa, 1998,

- Nabajyoti Bakarati, Biblia Turbo C++, LT & P, Warszawa, 1993,

- P. J. Plauger, Biblioteka standardowa C++, WNT, Warszawa, 1997,

- Namir C. Shammas, Borland C++ 4 kurs na zderzenie: [najszybszy sposób nauki

programowania !], Intersoftland, Warszawa, 1995,

- Piotr Metzger, C ++: pierwsze kroki, Helion, Gliwice, 1994,

- Jesse Liberty, C++: ksiega eksperta, Helion, Gliwice 1999,

- Tony L. Hansen, C++: zadania i odpowiedzi, WNT, Warszwa, 1994,

- Davis Stephen R., C++ dla opornych, Oficyna wydawnicza Read Me, Warszawa, 1995,

- Paul Snaith, C++ nie tylko dla orłów, Intersoftland, Warszawa, 2000,

- Adam Majczak, C++ w 48 godzin, Intersoftland, Warszawa, 1993,

- Tomasz Kopacz, Język C w praktyce: Turbo C i C++, Zakład Nauczania Informatyki

Mikom, Warszawa, 1993,

- Kisielewicz Jerzy, Język C w środowisku Borland C++, Oficyna wydawnicza Politechniki

Wrocławskiej, Wrocław, 1998,

- David Vandevoorde, Język C++; ćwiczenia i rozwiązania, WNT, Warszawa, 2001,

- Bjarne Stroustrup, Język C++, WNT, Warszawa 1994, 1995, 2000,

- Alan Neibauer, Języki C i C++: twój pierwszy program, Komputerowa Oficyna

Wydawnicza Help, Warszawa, 1995,

- Clovis L. Tondo, Bruce P. Lenug, Podstawy języka C++: ćwiczenia i rozwiązania, WNT,

Warszawa, 2001,

- Stanley B. Lippman, Podstawy języka C++, WNT, Warszawa, 1994, 1996, 2001,

- Adam Majczak, Praktyczne programowanie w C++, Intersoftland, Warszawa, 1996,

- Steven Holzner, Programowanie w Borland C++, Intersoftland, Warszawa, 1993,

- Andrzej Zalewski, Programowanie w językach C i C++ z wykorzystaniem pakietu

Borland C++, Wydawnictwo Nakom, Poznań, 1994, 1997, 1998,

- Paweł Chomicz, Robert Ulijasz, Programowanie w jezyku C i C++, Wydawnictwo PLJ,

Warszawa, 1992,

- Kris Jamsa, Wygraj z C++, Zakład Nauczania Informatyki Mikom, Warszawa, 1996,

- Conor Sexton, Język C++ to proste, Wydawnictwo RM, Warszawa, 2001,

10

- Alan R. Neibauer, Języki C i C++. Twój pierwszy program, Komputerowa Oficyna

Wydawnicza HELP, Warszawa, 1995,

- Wiesław Porębski, Programowanie w języku C++, Komputerowa Oficyna Wydawnicza

HELP, Warszawa, 2001,

- Adam Majczak, C++ dla licealistów i studentów, Wydawnictwo Translator S.C.,

Warszawa, 2003.