Z Skrypty dla studentów Ekonofizyki UPGOW
Instrukcje sterujące
Instrukcje sterujące służą do podejmowania decyzji w programie. Omówię je w składni występującej w języku C, identyczna syntaktyka została zresztą zaadoptowana w kolejnych językach C++, Java, C#. W języku C nie występują zmienne typu logicznego, czyli takie, które mogą przyjmować tylko dwie wartości true (prawda) lub false (fałsz). W zamian sprawdza się po prostu wartość danej zmiennej lub wyrażenia. Jeżeli wyrażenie ma liczbową wartość zero, to jego logiczna wartość (stan) jest false. Gdy wartość liczbowa wyrażenia różni się od zera, wówczas jego stan logiczny jest true. Naturalnie, stan logiczny true albo false otrzymamy również gdy w danym wyrażeniu występują operatory logiczne (np. > , < , = =, ...). W MATLAB także nie występuje expicite typ logiczny, obowiązuje w zamian taka sama konwencja, jak w języku C.
Spis treści |
Instrukcja warunkowa if
Instrukcja warunkowa if ma postac:
if (warunek)
- instrukcja;
Gdy wyrażenie w nawiasie ma wartość różną do zera czyli jest logicznie prawdziwe, instrukcja jest wykonywana, w przeciwnym wypadku pomijana. Słowo „wyrażenie” w nawiasie lepiej ze względów dydaktycznych zastąpić słowem „warunek”, które bezpośrednio oddaje sens logiczny wyrażenia, o to właśnie chodzi przy instrukcjach sterujących. Przykład:
int i = 2, j = 4, k; if (i < j) k = i + j;
Opcja zastąpienia pojedynczej instrukcji przez blok instrukcji obowiązuje także dla innych instrukcji sterujących, nie będę już tego powtarzał przy ich omawianiu poniżej.
Występuje bardziej rozbudowana forma instrukcji warunkowej if;
if(warunek)
- instrukcja_A;
else
- instrukcja_B;
Jeżeli warunek w nawiasie jest prawdziwy (wartość wyrażenia różna od zera), wykonywana jest instrukcja_A, w przeciwnym wypadku instrukcja_B. Przykład:
int i, j, k; if ( i < j ) k = j - i; else k = i - j;
Pętle
Pętla while
while (warunek)
- instrukcja;
Jeżeli warunek jest spełniony/prawdziwy, to instrukcja zostaje wykonywana i ponownie przystępuje się do testowania prawdziwości warunku w nawiasie. Instrukcja wykonywana jest tak długo, jak długo jest prawdziwy warunek. Dopiero, gdy wyrażenie w nawiasie przyjmie wartość zero (warunek nieprawdziwy), nastąpi przerwanie pętli i przejście do wykonywania instrukcji programu poniżej pętli. Instrukcja występująca w pętli while w ogóle nie będzie wykonywana, gdy warunek od razu nie jest prawdziwy. Przykład:
int i = 0, j = 6, r; while ( i < j) { r = j - i ; i = i +1; }
Pętla zostaje wykonana 6 razy, po zakończeniu iteracji zmienna r = 1.
Pętla do ... while
Pętla iteracyjna do … while przyjmuje postać
do
- instrukcja;
while(warunek)
Najpierw wykonywana jest instrukcja, następnie sprawdzany warunek logiczny, jeżeli jest prawdziwy, wykonanie instrukcji zostanie powtórzone. Znowu jest sprawdzany warunek w nawiasie, i tak w kółko, dopóki warunek jest prawdziwy. Warunek jest badany po wykonaniu instrukcji, a nie przed, jak w pętli while. Instrukcja zostanie wykonana co najmniej jeden raz, nawet gdy warunek nie będzie prawdziwy od początku. Przykład:
int i = 1, s = 0; do s = s + i * i; while ( i < 6);
pętla liczy sumę s kwadratów liczb naturalnych od 1 do 5, po jej zakończeniu s = 1 + 4 + 9 + 16 + 25 = 55.
Pętla for
Pętla for ma postać:
for (instr_pocz; warunek; instr_krok) instrukcja;
Najpierw wykonywana jest instr_pocz (początkowa), potem sprawdza się warunek, jeżeli warunek prawdziwy, to wykonywana jest instrukcja będąca treścią pętli. Na zakończenie każdego obiegu pętli wykonywana jest instr_krok. Instrukcja instr_pocz nie musi być tylko jedną instrukcją, może być ich kilka, wtedy są oddzielone przecinkami, podobnie jest w przypadku instr_krok. Składniki pętli: instr_pocz, warunek, instr_krok - niekoniecznie muszą wystąpić. Możliwe jest pominięcie któregokolwiek z nich, zachowując jednak średnik oddzielający go od sąsiedniego składnika. Opuszczenie warunku traktowane jest tak, jak gdyby był tam warunek prawdziwy.
Przykład,
int i, suma = 0; for (i = 0; i <10; i = i + 1) suma = suma + i;