Programowanie Ins ster

Z Skrypty dla studentów Ekonofizyki UPGOW

(Różnice między wersjami)
(Utworzył nową stronę „=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 zo…”)
Linia 22: Linia 22:
'''else'''
'''else'''
:instrukcja_B;
: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: <source lang="cpp">int i, j, k;                                                 
 +
if  ( i  <  j )                                       
 +
  k = j - i;
 +
else
 +
  k = i - j;
 +
</source>
 +
 +
==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: <source lang="cpp">int i = 0, j = 6, r;
 +
while ( i < j)    { 
 +
  r =  j - i ;
 +
  i = i +1;          }
 +
</source>
 +
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: <source lang="cpp">int i = 1, s = 0;
 +
do
 +
s = s + i * i;
 +
while ( i < 6);
 +
</source>
 +
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,
 +
<source lang="cpp">int i, suma = 0;
 +
for (i = 0; i <10; i = i + 1)
 +
suma = suma + i;
 +
</source>

Wersja z 14:31, 24 mar 2010

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;