CPP WYKLAD 4 5


WYKAAD 4/5
INSTRUKCJE JZYKA C++
64
M. JANKOWSKA  PROGRAMOWANIE I JZYK C++
WYRAŻENIA
Wyrażenie  wartość lub kombinacja wartości, operatorów i znaków przestankowych
określających sposób wykonania danego obliczenia.
lub według innej definicji ...
Wyrażenie  ewaluowana (wartościowana) zgodnie z regułami określonymi
w danym języku kombinacja wartości, zmiennych, operatorów i funkcji,
która zwraca inną wartość.
UWAGA
W języku C++ każde wyrażenie ma swoją wartość. Mówimy, że wyrażenie
ewaluuje się do tej wartości.
PRZYKAADY
10 + 50
Wyrażenie składające się z dwóch wartości oraz operatora dodawania.
Wartość wyrażenia równa jest 60.
x = 35
W języku C++ wartość wyrażenia z przypisaniem definiowana jest jako wartość
lewego argumentu. Tak więc wartość wyrażenia równa jest 35.
65
M. JANKOWSKA  PROGRAMOWANIE I JZYK C++
PRZYKAADY  CIG DALSZY
x = 21 + (y = 5);
Wyrażenie przypisania ma wartość (zob. pkt. 2). Tak więc wyrażenie y = 5 ma
wartość równą 5. Ostatecznie zmienna x przyjmie wartość 26.
x = y = z = 0;
W powyższy sposób możemy w szybki sposób przypisać kilku zmiennym tę samą
wartość.
Zgodnie z priorytetem operatora = (operacja przypisania jest łączona od strony
prawej do lewej) wartość 0 zostanie najpierw przypisane do zmiennej z, następnie
do zmiennej y, a na końcu do zmiennej x.
66
M. JANKOWSKA  PROGRAMOWANIE I JZYK C++
INSTRUKCJE
Instrukcja  samodzielny element języka programowania umożliwiający zapis
algorytmu oraz, co za tym idzie, sterowanie przebiegiem programu.
Do instrukcji języka C++ zaliczamy:
" instrukcję pustą,
" instrukcje iteracyjne (pętle) (for, while, do ... while),
" instrukcje warunkowe (if, if ... else ...),
" instrukcję wyboru (switch),
" instrukcje sterujące, (np. break, continue, return, goto).
INSTRUKCJA PUSTA
Instrukcja pusta umieszczona w kodzie zródłowym nie powoduje wykonania
żadnych czynności.
W języku C/C++ instrukcję taką zapisuje się w postaci średnika, którego nie poprze-
dzamy żadnym słowem kluczowym, ani wyrażeniem. Dobrym nawykiem jest
umieszczanie instrukcji pustej w oddzielnym wierszu programu. Np.
for (int i=0; i<=10; i++)
;
UWAGA
Może się zdarzyć, że w trakcie pisania programu składnia języka wymaga podania
w danym miejscu kodu wyrażenia lub instrukcji, podczas gdy implementowany
algorytm nie wykonuje tam jakiejkolwiek czynności. W takiej sytuacji wystarczy
67
umieścić w danym miejscu programu instrukcję pustą.
M. JANKOWSKA  PROGRAMOWANIE I JZYK C++
INSTRUKCJE ITERACYJNE
Instrukcje iteracyjne (inaczej instrukcje powtórzeń, pętle) umożliwiają
wielokrotne wykonywanie określonych czynności tak długo, jak jest
spełniony pewien warunek.
Do instrukcji iteracyjnych języka C/C++ zaliczamy:
" instrukcję  dla (for),
" instrukcje  dopóki (while),
" instrukcje  wykonuj ... dopóki (do ... while).
1. Instrukcja  dla (for)
Ogólna postać instrukcji w języku C/C++ przedstawia się następująco:
for (wyrażenie-inicjujące; wyrażenie-warunkowe; wyrażenie-aktualizujące)
instrukcja1
gdzie
wyrażenie-inicjujące może być dowolnego rodzaju jednak najczęściej jest ono
wyrażeniem wyliczeniowym, które zawiera listę inicjacji liczników pętli. W języku
C++ wyrażenie inicjujące może być połączone z deklaracją zmiennych;
wyrażenie-warunkowe musi być typu skalarnego;
wyrażenie-aktualizujące może być dowolnym wyrażeniem języka C/C++;
instrukcja może być dowolną instrukcją języka C/C++ (w tym instrukcją
grupującą).
68
M. JANKOWSKA  PROGRAMOWANIE I JZYK C++
INSTRUKCJE ITERACYJNE  CIG DALSZY
PRZYKAAD
Kolejne kroki wykonywane w trakcie
for (k = 1; k<=5; k++)
działania pętli:
{
1. Obliczamy wyrażenia-inicjujących
a[k] = k;
i inicjujemy liczniki pętli (w przykładzie
}
inicjujemy jeden licznik kwartością 1).
2. Obliczamy wyrażenie-warunkowe. Jeżeli jego wartość jest niezerowa (true)
wówczas wykonywane są instrukcje związane z pętlą for (w przykładzie
wykonane zostanie podstawienie a[k] = k).
3. Obliczamy wyrażenia-aktualizujące. W wyniku otrzymujemy zwiększenie lub
zmniejszenie wartości liczników pętli (w przykładzie wartość licznika kbędzie
równa 2).
4. Ponownie obliczamy wyrażenie-warunkowe, a następnie jeżeli jego wartość
jest niezerowa powtarzamy czynności począwszy od punktu 2.
69
M. JANKOWSKA  PROGRAMOWANIE I JZYK C++
INSTRUKCJE ITERACYJNE  CIG DALSZY
UWAGI
Dozwolone jest pominiecie każdego z wyrażeń występujących w instrukcji for.
Jeżeli usuniemy wszystkie wyrażenia występujące w instrukcji for otrzymamy
puste wyrażenie warunkowe, które ma wartość logiczną prawda.
PRZYKAAD
for (;;) for (;1;)
{ {
// instrukcje // instrukcje
} }
Powyższe pętle są sobie równoważne.
Będą one wykonywane do momentu
napotkania instrukcji sterujących break,
return lub goto, które przeniosą
wykonywanie programu poza obszar pętli.
70
M. JANKOWSKA  PROGRAMOWANIE I JZYK C++
INSTRUKCJE ITERACYJNE  CIG DALSZY
2. Instrukcja  dopóki (while)
Ogólna postać instrukcji w języku C/C++ przedstawia się następująco:
while (wyrażenie-warunkowe)
instrukcja
gdzie
wyrażenie-warunkowe  musi być typu skalarnego;
instrukcja  może być dowolną instrukcją języka C/C++ (w tym instrukcją
grupującą).
Sposób działania instrukcji while:
" Sprawdzamy, czy wyrażenie-warunkowe ma wartość niezerową (true).
Jeżeli tak, wówczas wykonujemy instrukcję związaną z pętlą while.
" Kontynuujemy wykonywanie instrukcji dopóki wyrażenie-warunkowe ma
wartość niezerową (true).
" Przyjęcie przez wyrażenie-warunkowe wartości równej 0 (false) powoduje
przeniesienie wykonywania programu poza pętlę while.
71
M. JANKOWSKA  PROGRAMOWANIE I JZYK C++
INSTRUKCJE ITERACYJNE  CIG DALSZY
3. Instrukcja  wykonuj ... dopóki (do ... while)
Ogólna postać instrukcji w języku C/C++ przedstawia się następująco:
do
instrukcja
while (wyrażenie-warunkowe);
gdzie
wyrażenie-warunkowe  musi być typu skalarnego;
instrukcja  może być dowolną instrukcją języka C/C++ (w tym instrukcją
grupującą).
Sposób działania instrukcji do ... while:
" Wykonujemy instrukcje. (Uwaga: Instrukcje zostaną wykonane co najmniej raz,
gdyż wyrażenie-warunkowe sprawdzane jest po zakończeniu pierwszej iteracji).
" Sprawdzamy, czy wyrażenie-warunkowe ma wartość niezerową (true).
Jeżeli tak, wówczas wykonujemy instrukcje po raz kolejny.
" Kontynuujemy wykonywanie instrukcji dopóki wyrażenie-warunkowe ma
wartość niezerową (true).
" Przyjęcie przez wyrażenie-warunkowe wartości równej 0 (false) powoduje
przeniesienie wykonywania programu poza pętlę do ... while.
72
M. JANKOWSKA  PROGRAMOWANIE I JZYK C++
INSTRUKCJE ITERACYJNE  PORÓWNANIE
1. Pętla for
Przykład pokazuje jak przy
for (i=0; i<=4; i++)
pomocy trzech różnych pętli
a[i] = i;
iteracyjnych for, while oraz do ...
while wykonać to samo zadanie.
2. Pętla while
i = 0;
while (i<=4)
{
a[i] = i;
UWAGI
i++;
Licznik iw pętli for jest inicjowany w pętli
}
przed rozpoczęciem wykonywania
instrukcji.
3. Pętla do ... while
Pętle while oraz do ... while wymagają
i = 0;
inicjacji licznika przed rozpoczęciem
do
instrukcji w pętli.
{
a[i] = i;
i++;
} while (i<5);
73
M. JANKOWSKA  PROGRAMOWANIE I JZYK C++
INSTRUKCJE WARUNKOWE
Instrukcje warunkowe umożliwiają sprawdzenie, czy spełniony jest określony
warunek i na tej podstawie wykonanie (lub zaniechanie
wykonania) określonych czynności.
Do instrukcji warunkowych języka C/C++ zaliczamy:
" instrukcję  jeżeli (if),
" instrukcję  jeżeli ... w przeciwnym przypadku (if ... else).
1. Instrukcja  jeżeli (if)
Ogólna postać instrukcji w języku C/C++ przedstawia się następująco:
if (wyrażenie-warunkowe)
instrukcja
gdzie
wyrażenie-warunkowe musi być typu skalarnego,
instrukcja może być dowolną instrukcją (w tym instrukcją grupującą).
74
M. JANKOWSKA  PROGRAMOWANIE I JZYK C++
INSTRUKCJE WARUNKOWE  CIG DALSZY
2. Instrukcja  jeżeli ... w przeciwnym przypadku (if ... else)
Ogólna postać instrukcji w języku C/C++ przedstawia się następująco:
if (wyrażenie-warunkowe1)
instrukcja1
else if (wyrażenie-warunkowe2)
instrukcja2
...
else
instrukcja3
gdzie
wyrażenie-warunkowe1, wyrażenie-warunkowe2 muszą być typu skalarnego,
instrukcja1, instrukcja2, instrukcja3 mogą być dowolnymi instrukcjami
(w tym instrukcjami grupującymi).
UWAGI
Instrukcja if jest wykonywana, gdy wyrażenie-warunkowe jest niezerowe (lub
wartość logiczna true). W przeciwnym razie (tj. gdy jest ono równe zero, lub ma
wartość logiczną false) jest wykonywana druga instrukcja (lub sprawdzane
kolejne wyrażenie-warunkowe).
W miejsce wyrażenia-warunkowego możemy użyć dowolnego wyrażenia
arytmetycznego lub wskaznikowego.
75
M. JANKOWSKA  PROGRAMOWANIE I JZYK C++
INSTRUKCJE WARUNKOWE  CIG DALSZY
PRZYKAAD 1 PRZYKAAD 2 PRZYKAAD 3
Niech x będzie typu Niech i będzie typu Niech x będzie typu
logicznego. Wówczas całkowitego. Wówczas wskaznikowego. Wówczas
następujące instrukcje następujące instrukcje następujące instrukcje
są sobie równoważne: są sobie równoważne: są sobie równoważne:
1. Sprawdzamy (bezpośrednio),
1. 1.
if (x) if (i)
czy p jest niezerowe, tzn.  czy
// instrukcja // instrukcja
p wskazuje na poprawny
obiekt .
2. 2.
if (x == true) if (i > 0) if (p)
// instrukcja // instrukcja // instrukcja
2. Porównujemy p z wartością 0,
3. 3.
if (x != false) if (i != 0) o której wiemy, \e nie
// instrukcja // instrukcja wskazuje na \aden obiekt.
Sprawdzamy przez to
UWAGI
(pośrednio), podobnie jak
W wyrażeniach-warunkowych często używa się:
w pkt. 1,  czy p wskazuje na
operatorów porównania (==, !=, <, >, <=, >=),
poprawny obiekt .
które dają w wyniku wartości logiczne (true, false),
if (p != 0)
operatory logiczne (&&, ||, !).
// instrukcja
76
M. JANKOWSKA  PROGRAMOWANIE I JZYK C++
INSTRUKCJE WARUNKOWE  CIG DALSZY
UWAGA
Niektóre proste instrukcje if mogą być zastąpione wygodniejszą formą, w której
użyjemy operatora warunkowego ?: . Przykładowo następującą instrukcję:
if (a >= b)
max_value = a;
else
max_value = b;
możemy zapisać równoważnie w postaci:
max_value = a >= b ? a : b
lub dodatkowo ujmując warunek w nawiasy (przez co zwiększamy czytelność kodu)
w postaci:
max_value = (a >= b) ? a : b
77
M. JANKOWSKA  PROGRAMOWANIE I JZYK C++
INSTRUKCJA WYBORU
Instrukcja wyboru (switch) służy do testowania pewnej wartości względem danego
zbioru stałych oraz podjęcia określonych działań
w przypadku, gdy wartość ta należy do tego zbioru.
Ogólna postać instrukcji switch w języku C/C++ przedstawia się następująco:
switch (wyrażenie-sterujące)
{
UWAGA
case wyrażenie-stałe1:
Wykonanie instrukcji wyboru rozpoczyna się
instrukcja1
od obliczenia wartości wyrażenia-sterującego.
break;
Program jest wykonywany począwszy od
case wyrażenie-stałe2:
pierwszej instrukcji należącej do  gałęzi , dla
instrukcja2
której wartość wyrażenia-sterującego równa
break;
jest wartości wyrażenia-stałego.
default:
W przypadku, gdy żadne z wyrażeń-stałych nie
instrukcja3
jest równe wartości wyrażenia-sterującego
break;
wówczas program wykonuje instrukcje
}
począwszy od domyślnej etykiety default, lub
gdzie wyrażenie-sterujące
jeżeli jej nie ma, kończy wykonywanie instrukcji
musi być typu całkowitego, a
switch.
instrukcja1, ... ,instrukcja3
mogą być dowolnymi instrukcjami
78
(w tym instrukcjami grupującymi).
M. JANKOWSKA  PROGRAMOWANIE I JZYK C++
INSTRUKCJA WYBORU  CIG DALSZY
UWAGA
W przypadku, gdy założeniem programisty jest wykonanie danego zadania jedynie
w obrębie danej gałęzi, wówczas każda z nich musi być w jakiś sposób zakończona.
Najczęściej wykorzystuje się do tego celu instrukcje break lub return.
PRZYKAAD
W przypadku, gdy zmienna klawisz
// ... //
typu char będzie odpowiadała
switch (klawisz)
znakowi litery p lub P wówczas
{
program wywoła funkcję obliczającą
case  p :
pole prostokąta.
case  P :
 Gałąz rozpoczynająca się od
PoleProstokata();
etykiety wyboru case p
break;
nie została zakończona.
Oznacza to, że będzie ona
case  t :
kontynuowana aż do instrukcji
case  T :
break, która kończy  gałąz
PoleTrojkata();
następującą po niej.
break;
default:
cout <<  Nie wybrano zadnej opcji << endl;
}
79
M. JANKOWSKA  PROGRAMOWANIE I JZYK C++
INSTRUKCJA WYBORU  CIG DALSZY
UWAGA
Instrukcję switch możemy zastąpić zbiorem instrukcji if.
Działanie ich będzie takie samo, lecz preferuje się pierwszą z nich ze względu na
możliwość jawnego wyrażenia właściwej natury operacji testowania wartości
względem pewnego zbioru, przez co zapis staje się bardziej czytelny.
PRZYKAAD
switch (wybor)
{
if (wybor == 1)
case 1:
Opcja1();
Opcja1();
break;
else if (wybor == 2)
Opcja2();
case 2:
Opcja2();
else if (wybor == 3)
break;
Opcja3();
case 3:
else
Opcja3();
Opcja4();
break;
default:
Opcja4();
}
80


Wyszukiwarka