J˛ezyki programowania – cz˛e´s´c II
Marcin Szpyrka
Katedra Automatyki
Akademia Górniczo-Hutnicza w Krakowie
2009/10
Marcin Szpyrka
J˛ezyki programowania – cz˛e´s´c II
1/26
Zasady organizacji kodu – programowanie strukturalne
– W trywialnym przypadku program z j˛ezyku C++ mo˙ze składa´c si˛e tylko z
jednego pliku i jednej funkcji.
– Funkcja jest wydzielon ˛
a cz˛e´sci ˛
a programu, realizuj ˛
ac ˛
a pewne zadanie.
Kompletny program musi zawiera´c funkcj˛e o nazwie main od której rozpoczyna
si˛e wykonanie programu.
– Do programu mo˙zna doł ˛
acza´c pliki zawieraj ˛
ace nagłówki (opis) funkcji
zdefiniowanych w innych plikach lub funkcji systemowych (dyrektywa include).
1
#include
<iostream>
2
3
int
main
()
4
{
5
std
::
cout
<<
"C++\n"
;
6
}
1
#include
<iostream>
2
3
int
main
()
4
{
5
std
::
cout
<<
"C++\n"
;
6
return
0;
7
}
Marcin Szpyrka
J˛ezyki programowania – cz˛e´s´c II
2/26
Zasady organizacji kodu w j˛ezyku C++
– Nagłówek funkcji zawiera: typ zwracanego wyniku, nazw˛e funkcji i list˛e
argumentów umieszczon ˛
a w nawiasach okr ˛
agłych (argumenty oddziela si˛e
przecinkiem).
– Instrukcje składaj ˛
ace si˛e na kod funkcji umieszcza si˛e w nawiasach klamrowych
’{’, ’}’. Para nawiasów klamrowych mo˙ze słu˙zy´c do grupowania instrukcji.
Ci ˛
ag instrukcji umieszczony wewn ˛
atrz nawiasów klamrowych okre´slany jest
mianem instrukcji zło˙zonej.
– Ka˙zda instrukcja musi by´c zako´nczona ´srednikiem ’;’. ´Srednika nie umieszcza
si˛e po zamykaj ˛
acym nawiasie klamrowym (s ˛
a wyj ˛
atki). To ´srednik, a nie koniec
linii, decyduje o tym gdzie ko´nczy si˛e instrukcja. Sam ´srednik traktowany jest
jako instrukcja pusta.
– Nie mo˙zna dzieli´c (przenosi´c do nowej linii) nazw zmiennych, funkcji i słów
kluczonych.
– Komentarz w C++, to dowolnej długo´sci tekst ograniczony znakami
/*
i
*/
lub
tekst od znaku
//
do ko´nca linii.
int
main
() {
/* Ten program nic nie robi. */
}
Marcin Szpyrka
J˛ezyki programowania – cz˛e´s´c II
3/26
Kompilacja i uruchomienie programu
GCC (ang. The GNU Compiler Collection) jest zło˙zonym oprogramowaniem, który
zarz ˛
adza cało´sci ˛
a procesu kompilacji i jest w stanie generowa´c programy
wykonywalne dla kodu napisanego we wszystkich powszechnie wykorzystywanych
j˛ezykach, dla praktycznie ka˙zdej u˙zywanej platformy sprz˛etowej i wszystkich
powszechnie u˙zywanych systemów operacyjnych.
Wywołanie kompilatora dla j˛ezyka C++ (posta´c ogólna):
g
++ [
opcje
]
pliki_wej´
sciowe
[-
o plik_wykonywalny
]
Je˙zeli pomini˛eta zostanie nazwa pliku wykonywalnego, to powstanie plik o nazwie
a
.
out
. Aby wł ˛
aczy´c wykrywanie wszystkich istotnych ostrze˙ze´n nale˙zy doł ˛
aczy´c
opcj˛e
-
Wall
. Mo˙zna wymusi´c traktowanie wszystkich ostrze˙ze´n jak sytuacji
bł˛ednych stosuj ˛
ac parametr:
-
Werror
. Aby zapewni´c pełn ˛
a zgodno´s´c ze standardem
ANSI C++ nale˙zy kompilowa´c tak:
g
++ -
Wall
-
ansi plik
.
cpp
-
o plik
Uwaga
Wszystkie przykłady na wykładzie b˛ed ˛
a demonstrowane w oparciu o system Linux!
1
g
++ -
Wall
-
ansi powitanie
.
cpp
-
o powitanie
2
./
powitanie
Marcin Szpyrka
J˛ezyki programowania – cz˛e´s´c II
4/26
Przestrzenie nazw
Przestrzenie nazw
Ka˙zdy zbiór definicji w bibliotece jest umieszczony w tzw. przestrzeni nazw. Dzi˛eki
temu w ró˙znych przestrzeniach nazw mog ˛
a istnie´c identyczne nazwy bez wywołania
kolizji. Odwołanie si˛e do konkretnego elementu (obiektu, funkcji) przestrzeni nazw
konieczne jest podanie jego nazwy poprzedzonej nazw ˛
a przestrzeni i operatorem
zakresu, np.: std::cout.
Aby unikn ˛
a´c konieczno´sci korzystania z pełnych nazw mo˙zna doł ˛
aczy´c jej nazw˛e
korzystaj ˛
ac z instrukcji using (nie jest to zalecane przy wi˛ekszych programach).
Standardowe biblioteki C++ umieszczone s ˛
a w przestrzeni nazw std.
1
#include
<iostream>
2
using namespace
std
;
Pliki nagłówkowe
Wraz z rozwojem j˛ezyka C++ uległ zmianie styl doł ˛
aczania plików nagłówkowych
do programu. Biblioteki, które zostały „w spadku” z j˛ezyka C s ˛
a ci ˛
agle dost˛epne z
rozszerzeniem „.h”. Nowy styl (C++) doł ˛
aczania tych bibliotek odrzuca rozszerzenie
i jednocze´snie dodana zostaje litera „c” na pocz ˛
atku nazwy biblioteki.
1
#include
<iostream.h>
#include<stdlib.h>
//stara wersja
2
#include
<iostream>
#include<cstdlib>
//nowa wersja
Marcin Szpyrka
J˛ezyki programowania – cz˛e´s´c II
5/26
Zmienne
– Zmienn ˛
a w j˛ezyku programowania nazywamy wielko´s´c, która mo˙ze
przechowywa´c warto´s´c nale˙z ˛
ac ˛
a do pewnego zbioru nazywanego typem
zmiennej. Zmienna jest jednoznacznie identyfikowana przez swoj ˛
a nazw˛e.
Ka˙zda zmienna, która jest u˙zywana w programie musi zosta´c wcze´sniej
zadeklarowana, tzn. nale˙zy okre´sli´c jej nazw˛e i typ warto´sci.
– Identyfikatorem (nazw ˛
a) nazywamy ci ˛
ag liter, cyfr i znaków podkre´slenia,
rozpoczynaj ˛
acy si˛e od litery lub znaku podkre´slenia. Nazwami nie mog ˛
a by´c
słowa kluczowe, tj. słowa zastrze˙zone u˙zywane w konstrukcjach j˛ezyka.
– Warto´s´c zmiennej jest tym, co przechowujemy w obszarze pami˛eci okre´slanym
przez nazw˛e. W momencie deklaracji warto´s´c zmiennej lokalnej jest
nieokre´slona, zmienne globalne s ˛
a inicjalizowane na zero.
– Typ zmiennej okre´sla jak ˛
a warto´s´c mo˙zna wpisa´c do obszaru wskazywanego
przez nazw˛e. W zale˙zno´sci od typu zmiennej, inny jest rozmiar pami˛eci
potrzebny do jej zapami˛etania. Kompilator na podstawie typu okre´sla jak ˛
a ilo´s´c
pami˛eci nale˙zy przydzieli´c zmiennej i jakie operacje s ˛
a na niej dopuszczalne.
– Do nadawania warto´sci zmiennej słu˙zy instrukcja przypisania. W instrukcji tej
po lewej stronie operatora przypisania znajduje si˛e identyfikator zmiennej, za´s
po prawej stronie warto´s´c lub wyra˙zenie daj ˛
ace w wyniku warto´s´c
odpowiedniego typu (zgodnego z zadeklarowanym typem zmiennej).
Marcin Szpyrka
J˛ezyki programowania – cz˛e´s´c II
6/26
Przykłady deklaracji zmiennych
1
int
i
;
2
int
j
= 3;
3
int
a
,
b
;
4
float
x
,
y
;
5
6
i
= 2;
7
x
=
y
= 7.51;
Uwagi
– W j˛ezyku C++ rozró˙zniane s ˛
a małe i wielkie litery, ewa i Ewa, to dwa ró˙zne
identyfikatory.
– W j˛ezyku C++ operator przypisania to znak
=
, a operator porównania ma posta´c
==
.
Marcin Szpyrka
J˛ezyki programowania – cz˛e´s´c II
7/26
Przykład 4
1
#include
<iostream>
2
using namespace
std
;
3
4
int
main
()
5
{
6
float
a
,
b
,
pole
;
7
cout
<<
"Podaj długo´
sci boków prostok ˛
ata:\n"
;
8
cout
<<
"a = "
;
9
cin
>>
a
;
10
cout
<<
"b = "
;
11
cin
>>
b
;
12
pole
=
a
*
b
;
13
cout
<<
"pole = "
<<
pole
<<
"\n"
;
14
}
Marcin Szpyrka
J˛ezyki programowania – cz˛e´s´c II
8/26
Proste typy danych
– Typ logiczny – typ bool (warto´sci true i false).
– Typy znakowe – typ char słu˙zy do przechowywania znaków w kodzie ASCII
lub innym stosowanym na danej maszynie, jest on na ogół jednobajtowy. Do
przechowywania znaków z wi˛ekszego zbioru (np. Unikod) słu˙zy typ wchar_t.
Jego rozmiar zale˙zy od implementacji.
– Typy całkowite – typ całkowity wyst˛epuje w trzech postaciach int, signed int i
unsigned int oraz w trzech rozmiarach: short int (short), int i long int (long).
– Typy zmiennoprzecinkowe – typ float (pojedyncza precyzja), double (podwójna
precyzja), long double. Dokładne znaczenie tych terminów zale˙zy od
implementacji.
– Typ void – typ pusty void oznacza brak warto´sci. ˙
Zadna zmienna nie mo˙ze by´c
typu void. Je˙zeli wynik funkcji jest typu void, to oznacza to, ˙ze funkcja nic nie
zwraca.
Marcin Szpyrka
J˛ezyki programowania – cz˛e´s´c II
9/26
Stałe numeryczne
Stałe numeryczne całkowite
Liczba całkowita składa si˛e z dowolnej liczby cyfr. Na pocz ˛
atku mo˙ze znajdowa´c si˛e
znak ’−’ lub ’+’. Je´sli stała całkowita mie´sci si˛e w zakresie int jest traktowana jako
int, je´sli nie mie´sci si˛e w zakresie int (lub na ko´ncu znajduje si˛e litera ’l’), a mie´sci
si˛e w zakresie long jest traktowana jako long. W innym przypadku jest traktowana
jako double.
Stałe bez znaku definiuje si˛e dopisuj ˛
ac na ko´ncu liter˛e ’u’: 12lu, 123u.
Stała ósemkowa zaczyna si˛e od znaku ’0’: 012, 0777
Stała szesnastkowa zaczyna si˛e od znaków ’0x’: 0xffff, 0x12fe. Cyfry 11-15 s ˛
a
zast˛epowane literami ’a’-’f’.
Stałe numeryczne zmiennoprzecinkowe
Stała zmiennoprzecinkowa składa si˛e z opcjonalnej cz˛e´sci całkowitej, znaku ’.’,
cz˛e´sci ułamkowej oraz opcjonalnej definicji wykładnika.
Cz˛e´s´c ułamkowa jest stał ˛
a całkowit ˛
a nie zawieraj ˛
aca znaków ’+’ ani ’−’.
Cz˛e´s´c okre´slaj ˛
aca wykładnik jest poprzedzona znakiem ’e’, po którym wyst˛epuje
liczba całkowita.
1.23, .23, 0.23, 1., 1.0, 1.2e10, .23e−15
Marcin Szpyrka
J˛ezyki programowania – cz˛e´s´c II
10/26
Stałe znakowe i tekstowe
Stałe znakowe w j˛ezyku C++ składaj ˛
a si˛e z pojedynczych znaków zamkni˛etych w
apostrofy; np.: ’a’, ’0’. Stałe znakowe s ˛
a w rzeczywisto´sci stałymi całkowitymi. Ich
warto´s´c jest równa kodowi znaku na maszynie, na której kompilowany jest program.
Znak znajduj ˛
acy si˛e po znaku ’\’ jest traktowany w sposób specjalny, np.: \n (nowa
linia), \t (tabulator), \"(cudzysłów).
Stała tekstowa jest ci ˛
agiem znaków zamkni˛etych w cudzysłowy, np: ”To jest stała
tekstowa”. Stała tekstowa ko´nczy si˛e znakiem o kodzie 0 (zawiera zawsze o jeden
znak wi˛ecej). Stała tekstowa jest tablic ˛
a znaków zawieraj ˛
ac ˛
a odpowiedni ˛
a liczb˛e
elementów. Np. ”abcd” jest typu const char[5].
Biblioteka standardowa dostarcza typ string, udost˛epniaj ˛
acy wiele u˙zytecznych
operacji na napisach.
Marcin Szpyrka
J˛ezyki programowania – cz˛e´s´c II
11/26
Operatory
Symbol operatora
Działanie
+, −, ∗, /
operatory arytmetyczne
%
reszta z dzielenia
++, −−
inkrementacja i dekrementacja
!, &&, ||
operatory logiczne (not, and, or)
<, <=, >, >=, ==, ! =
operatory relacyjne
=, + =, − =, ∗ =, / =
przypisanie
Przy konstruowaniu wyra˙ze´n mo˙zna u˙zywa´c nawiasów okr ˛
agłych. Mog ˛
a one by´c
zagnie˙zd˙zone.
1
n
= 72 % 6;
2
x
= 67/12 + (32-
y
)/(2+11*
y
);
3
i
=
i
+ 1;
/* to samo co i++; */
4
(110 > 78) && !(
’a’
<
’b’
)
Marcin Szpyrka
J˛ezyki programowania – cz˛e´s´c II
12/26
Instrukcja wyboru if
Instrukcja warunkowa umo˙zliwia wykonanie pewnej instrukcji w zale˙zno´sci od
warto´sci wyra˙zenia. Wszystkie warto´sci ró˙zne od 0 s ˛
a w j˛ezyku C traktowane jako
prawda, równe 0 jako fałsz. Wyra˙zenia logiczne s ˛
a liczone tylko do momentu, w
którym mo˙zna okre´sli´c jego warto´s´c.
1
if
(
wyra˙
zenie
)
instrukcja
;
2
if
(
wyra˙
zenie
)
instrukcja1
else
instrukcja2
;
W obu rozkazach instrukcja mo˙ze by´c instrukcj ˛
a zło˙zon ˛
a. W pierwszym przypadku
instrukcja wykonuje si˛e, je´sli warto´s´c wyra˙zenia jest ró˙zna od 0. W drugim
wykonuje si˛e jedna z dwóch podanych instrukcji (nigdy obie), pierwsza – gdy
warto´s´c wyra˙zenia jest ró˙zna od 0, druga – gdy warto´s´c wyra˙zenia jest równa 0.
Marcin Szpyrka
J˛ezyki programowania – cz˛e´s´c II
13/26
Wyznaczanie minimum trzech liczb
b < c
Start
Read(a,b,c)
a < b
Stop
Write(min)
a < c
min := a
min := c
min := b
min := c
yes
yes
yes
no
no
no
1
#include
<iostream>
2
using namespace
std
;
3
4
int
main
()
// minimum3liczb.cpp
5
{
6
float
a
,
b
,
c
,
min
;
7
cout
<<
"Podaj 3 liczby:\n"
;
8
cout
<<
"a = "
;
9
cin
>>
a
;
10
cout
<<
"b = "
;
11
cin
>>
b
;
12
cout
<<
"c = "
;
13
cin
>>
c
;
14
15
if
(
a
<
b
)
16
if
(
a
<
c
)
min
=
a
;
17
else
min
=
c
;
18
else
19
if
(
b
<
c
)
min
=
b
;
20
else
min
=
c
;
21
22
cout
<<
"Minimum: "
23
<<
min
<<
endl
;
24
}
Marcin Szpyrka
J˛ezyki programowania – cz˛e´s´c II
14/26
Rozwi ˛
azywanie równania kwadratowego
1
#include
<iostream>
2
#include
<cmath>
3
using namespace
std
;
4
5
int
main
()
// trojmian.cpp (trojmian2.cpp)
6
{
7
float
a
,
b
,
c
,
delta
,
x1
,
x2
;
8
9
cout
<<
"Podaj współczynniki trójmianu\n"
;
10
cout
<<
"a = "
;
11
cin
>>
a
;
12
cout
<<
"b = "
;
13
cin
>>
b
;
14
cout
<<
"c = "
;
15
cin
>>
c
;
16
delta
=
b
*
b
- 4.0 *
a
*
c
;
17
if
(
delta
>= 0.0)
18
{
19
x1
= (-
b
-
sqrt
(
delta
))/(2.0 *
a
);
20
x2
= (-
b
+
sqrt
(
delta
))/(2.0 *
a
);
21
cout
<<
"Pierwiastkami s ˛
a liczby "
<<
x1
<<
", "
<<
x2
<<
endl
;
22
}
23
else
24
{
25
cout
<<
"Trójmian nie ma pierwiastków rzeczywistych\n"
;
26
}
27
}
Marcin Szpyrka
J˛ezyki programowania – cz˛e´s´c II
15/26
Instrukcje wyboru switch
Instrukcja switch słu˙zy do wybierania jednego przypadku z wielu. Instrukcja case
okre´sla punkt wej´scia do ci ˛
agu nast˛epnych instrukcji. Program wykonuje si˛e od
instrukcji po tym case, dla którego warto´s´c wyra˙zenia stałego jest równa warto´sci
wyra˙zenia w instrukcji switch. (Wyra˙zenie stałe to takie, którego warto´s´c mo˙ze by´c
obliczona w momencie kompilacji.) Chc ˛
ac wyj´s´c z instrukcji switch nale˙zy u˙zy´c
rozkazu break. Instrukcja default okre´sla punkt wej´scia w przypadku, gdy wyra˙zenie
nie zostało dopasowane do ˙zadnego wyra˙zenia stałego.
switch
(
wyra˙
zenie
)
{ case
przypadek1
:
instrukcje1
;
case
przypadek2
:
instrukcje2
;
...
default
:
instrukcje
; }
1
switch
(
punkty
)
// int punkty, wynik;
2
{
3
case
10 : ;
4
case
9
:
wynik
= 5; break;
5
case
8
: ;
6
case
7
:
wynik
= 4; break;
7
case
6
:
wynik
= 3; break;
8
default
:
wynik
= 2;
9
}
Marcin Szpyrka
J˛ezyki programowania – cz˛e´s´c II
16/26
Wyra˙zenie warunkowe
W j˛ezyku C++ u˙zycie instrukcji wyboru
if
mo˙zna w wielu przypadkach zast ˛
api´c
wyra˙zeniem warunkowym.
if
(
a
>
b
)
z
=
a
;
else
z
=
b
;
z
= (
a
>
b
) ?
a
:
b
Wyra˙zenie warunkowe jest zapisywane za pomoc ˛
a trzyargumentowego operatora
?:
i ma ogóln ˛
a posta´c:
(
w1
) ?
w2
:
w3
W wyra˙zeniu warunkowym najpierw jest obliczana warto´s´c wyra˙zenia
w1
. Je´sli jego
warto´s´c jest ró˙zna od zera (prawda), to zostanie obliczona warto´s´c wyra˙zenia
w2
i
stanie si˛e ona warto´sci ˛
a całego wyra˙zenia warunkowego. W przeciwnym przypadku
warto´sci ˛
a wynikow ˛
a b˛edzie warto´s´c wyra˙zenia
w3
.
Marcin Szpyrka
J˛ezyki programowania – cz˛e´s´c II
17/26
P˛etle while i do while
Instrukcja while
Rozkaz umieszczony w p˛etli while (mo˙ze to by´c instrukcja zło˙zona!) jest powtarzany
do momentu, gdy warto´s´c wyra˙zenia b˛edzie równa 0. W przypadku, gdy warto´s´c
wyra˙zenia od razu jest równa 0, instrukcja nie wykona si˛e ani raz. Je´sli wyra˙zenie nie
przyjmie warto´sci 0, instrukcja b˛edzie si˛e wykonywa´c niesko´nczon ˛
a ilo´s´c razy.
while
(
wyra˙
zenie
)
instrukcja
;
Instrukcja do while
P˛etla do while jest podobna do p˛etli while, z t ˛
a ró˙znic ˛
a, ˙ze warunek kontynuacji
(wyra˙zenie) jest sprawdzany po wykonaniu instrukcji, tzn., ˙ze zawarto´s´c p˛etli
wykona si˛e co najmniej raz.
do
instrukcja
while
(
wyra˙
zenie
);
Marcin Szpyrka
J˛ezyki programowania – cz˛e´s´c II
18/26
Wyznaczanie silni
Start
i < n
Stop
Read(n)
i := 1;
s := 1;
Write(s)
no
yes
i := i + 1;
s := s * i;
1
#include
<iostream>
2
using namespace
std
;
3
4
int
main
()
// silnia.cpp
5
{
6
int
s
,
n
,
i
;
7
8
cout
<<
"Prosz˛
e poda´
c l. nat.: "
;
9
cin
>>
n
;
10
i
= 1;
11
s
= 1;
12
13
while
(
i
<
n
)
14
{
15
i
++;
16
s
*=
i
;
17
}
18
19
cout
<<
"Silnia: "
<<
s
<<
endl
;
20
}
Marcin Szpyrka
J˛ezyki programowania – cz˛e´s´c II
19/26
Wyznaczanie maximum ci ˛
agu liczb dodatnich
1
#include
<iostream>
2
using namespace
std
;
3
4
int
main
()
// maximum.cpp
5
{
6
float
max
,
a
;
7
cout
<<
"Podaj liczby, 0 - koniec!\n"
;
8
max
= 0.0;
9
10
do
11
{
12
cout
<<
"a = "
;
13
cin
>>
a
;
14
if
(
a
>
max
)
max
=
a
;
15
}
16
while
(
a
);
17
18
cout
<<
"Maximum: "
<<
max
<<
endl
;
19
return
0;
20
}
Marcin Szpyrka
J˛ezyki programowania – cz˛e´s´c II
20/26
Wyznaczanie ´sredniej ci ˛
agu liczb ró˙znych od zera
1
#include
<iostream>
2
using namespace
std
;
3
4
int
main
()
// srednia.cpp
5
{
6
float
suma
,
a
;
7
int
i
;
8
cout
<<
"Podaj liczby, 0 - koniec!\n"
;
9
suma
= 0.0;
10
i
= 0;
11
12
do
13
{
14
cout
<<
"a = "
;
15
cin
>>
a
;
16
if
(
a
)
17
{
18
suma
+=
a
;
19
i
++;
20
}
21
}
22
while
(
a
);
23
24
cout
<<
"´
Srednia: "
<<
suma
/
i
<<
endl
;
25
}
Marcin Szpyrka
J˛ezyki programowania – cz˛e´s´c II
21/26
Instrukcja for
Instrukcja for
for
(
instr_ini
;
warunek
;
instr_krok
)
instrukcja
;
Wszystkie wyra˙zenia s ˛
a opcjonalne. instr_ini jest wykonana przed wej´sciem do p˛etli
(tylko raz!). Nast˛epnie oblicza si˛e warunek i sprawdza czy jest on ró˙zny od 0. Je´sli
tak, wykonywana jest instrukcja i instrukcja instr_krok. Nast˛epnie sprawdzana jest
warto´s´c warunku itd. P˛etla jest wykonywana do momentu, gdy warunek b˛edzie
równy 0. Je´sli wszystkie trzy wyra˙zenia w p˛etli for s ˛
a puste – p˛etla postaci: for(;;)
instrukcja;, to jest to bezwarunkowa p˛etla niesko´nczona. Instrukcja w p˛etli for mo˙ze
nie wykona´c si˛e ani razu, je´sli warunek b˛edzie od razu równy 0. P˛etla for mo˙ze by´c
p˛etl ˛
a niesko´nczon ˛
a, je´sli warunek nigdy nie przyjmie warto´sci 0.
1
int
main
()
// silnia-for.cpp (silnia-for2.cpp)
2
{
3
int
s
,
n
,
i
;
4
cout
<<
"Podaj liczb˛
e naturaln ˛
a, n = "
;
5
cin
>>
n
;
6
s
= 1;
7
for
(
i
= 2;
i
<=
n
;
i
++)
s
*=
i
;
8
cout
<<
"Silnia n: "
<<
s
<<
endl
;
9
}
Marcin Szpyrka
J˛ezyki programowania – cz˛e´s´c II
22/26
Algorytm Euklidesa (NWD)
Start
Stop
a < b
yes
no
yes
no
Read(a,b)
Write(a)
a = b
a := a − b
b := b − a
1
#include
<iostream>
2
using namespace
std
;
3
4
int
main
()
// nwd.cpp
5
{
6
int
a
,
b
;
7
cout
<<
"Podaj 2 l. naturalne: "
;
8
cin
>>
a
>>
b
;
9
10
while
(
a
!=
b
)
11
{
12
if
(
a
<
b
)
b
-=
a
;
13
else
a
-=
b
;
14
}
15
16
cout
<<
"NWD: "
<<
a
<<
endl
;
17
}
Marcin Szpyrka
J˛ezyki programowania – cz˛e´s´c II
23/26
Instrukcja break
Instrukcja break umieszczona wewn ˛
atrz p˛etli (for, while, do..while) powoduje
przerwanie wykonywania i wyj´scie na zewn ˛
atrz p˛etli, w której została wywołana. W
przypadku p˛etli zagnie˙zd˙zonych, nast˛epuje wyj´scie do p˛etli o jeden poziom wy˙zej.
1
#include
<iostream>
2
using namespace
std
;
3
4
int
main
()
5
{
6
int
n
,
i
;
7
8
cout
<<
"Podaj liczb˛
e naturaln ˛
a, n = "
;
9
cin
>>
n
;
10
11
for
(
i
= 2;
i
<
n
;
i
++)
12
{
13
if
(
n
%
i
== 0) break;
14
}
15
16
if
(
i
<
n
)
cout
<<
"Znaleziono podzielnik "
<<
i
<<
endl
;
17
else
cout
<<
n
<<
" jest liczb ˛
a pierwsz ˛
a\n"
;
18
}
Marcin Szpyrka
J˛ezyki programowania – cz˛e´s´c II
24/26
Instrukcja continue
Instrukcja continue umieszczona wewn ˛
atrz p˛etli (for, while, do..while) powoduje
przerwanie wykonywania danego obiegu p˛etli i rozpocz˛ecie kolejnego (sama p˛etla
nie jest przerywana).
1
int
main
()
2
{
3
int
n
,
i
,
j
;
4
cout
<<
"Podaj liczb˛
e naturaln ˛
a, n = "
;
5
cin
>>
n
;
6
i
=
n
+ 1;
7
while
(1)
8
{
9
for
(
j
= 2;
j
<
i
;
j
++) if (
i
%
j
== 0) break;
10
if
(
j
<
i
)
/* tzn. je´
sli znaleziono podzielnik, */
11
{
12
i
++;
13
continue
;
/* zaczynamy kolejny przebieg p˛
etli while */
14
}
15
else break
;
16
}
17
cout
<<
"Najmniejsza liczba pierwsza wi˛
eksza od "
18
<<
n
<<
" to "
<<
i
<<
endl
;
19
}
Marcin Szpyrka
J˛ezyki programowania – cz˛e´s´c II
25/26
Wyznaczanie pierwiastka kwadratowego
Kolejne przybli˙zenia wyznaczamy ze wzoru: x
i
+1
=
1
2
(x
i
+
a
x
i
). Mo˙zna przyj ˛
a´c
x
1
= a. Ko´nczymy obliczenia, gdy |x
i
+1
− x
i
| 6 ε, gdzie ε oznacza zadan ˛a
dokładno´s´c.
1
#include
<iostream>
2
#include
<math.h>
3
using namespace
std
;
4
5
int
main
()
6
{
7
const float
EPS
= 0.01;
8
float
x1
,
x2
,
a
;
9
cout
<<
"Podaj liczb˛
e rzeczywist ˛
a: "
;
10
cin
>>
a
;
11
x1
=
a
;
12
x2
= 0.5 * (
x1
+
a
/
x1
);
13
14
while
(
fabs
(
x2
-
x1
) >
EPS
)
15
{
16
x1
=
x2
;
17
x2
= 0.5 * (
x1
+
a
/
x1
);
18
}
19
cout
<<
"Pierwiastek: "
<<
x2
<<
endl
;
20
}
Marcin Szpyrka
J˛ezyki programowania – cz˛e´s´c II
26/26