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.