Scilab
Rozdział 5 Instrukcje sterujące if…then…else , while… ,for…
Rozdział 5.1 Wstęp
Omówimy instrukcje sterujące, bez których Scilab, tak jak każdy inny język, byłby bez sensu.
A mianowicie:
– “If…then…else…elseif…”
– “while…”
– “for…”
Rozdział 5.1 Instrukcja sterująca “If…then…else”
W kropkach … są tzw. warunki logiczne np. x>5 lub bardziej rozbudowane x>5 & x<10
Dotychczas instrukcje wykonywane były na zasadzie “jedna po drugiej”. Inaczej, zawsze po jednej instrukcji była następna. To tak jakby pociąg z Warszawy do Szczecina jechał tylko jednym torem! Wiadomo, że zawsze dojedzie w końcu do Szczecina. A przecież na rzeczywistej trasie są zwrotnice. Gdy zwrotnica nastawiona jest na Szczecin, to dojedziemy do Szczecina, gdy na Kraków, to nie dojedziemy do Szczecina.
Tak jak w tym programie.
Program P5-1
clear;clc; zw="Szczecin" if zw=="Szczecin" then disp("Jedziem na Szczecin!") else disp("Nie jedziem na Szczecin!") end
Analiza programu
Instrukcja
if (warunek logiczny spełniony) then (wykonaj instrukcję) else (wykonaj instrukcję)
A po naszemu
Instrukcja
jeżeli (warunek logiczny spełniony) to (wykonaj instrukcję) w przeciwnym razie (wykonaj instrukcję)
W naszym programie zmienna czyli “zwrotnica” zw ma wartość tekstową “Szczecin”. Dlatego spodziewamy się, że będzie wyświetlony tekst “Jedziem na Szczecin”. Przy okazji zauważ, że nie musisz deklarować typu zmiennej jak w innych językach, np. w C++. Język Scilab jest na tyle mądry, że sam to rozpozna.
Po wykonaniu programu będzie coś takiego.
“Jedziem na Szczecin!”
A po zmianie instrukcji zw=”Szczecin” na zw=”Kraków”.
“Nie jedziem na Szczecin!”
Chyba wszystko jasne.
Uwaga:
Program jest okazją do rozróżnienia 2 bardzo podobnych wyrażeń:
zw=”Szczecin” // Instrukcja wpisania do zmiennej zw tekstu “Szczecin”
zw==”Szczecin”// Wyrażenie które ma wartość logiczną
-T (True,Prawda) gdy w zw jest tekst “Szczecin”
-F (False, Fałsz) gdy w zw jest inny tekst np. “Kraków”
Początkujący programista może napisać
if zw=”Szczecin” then..
A potem dziwi się, że program nie działa. Zgadnij dlaczego?
Instrukcja
if (warunek logiczny) then (instrukcja) else (instrukcja)
może występować w wersji bardziej rozbudowanej tzn.
– Zamiast jednej instrukcji po if lub po else może być ich kilka
– Warunek logiczny może być bardziej skomplikowaną funkcją logiczną
Czyli
if (warunek logiczny jest spełniony) then //wykonaj kolejne instrukcje
instrukcja 1
instrukcja 2
….
instrukcja n
else //wykonaj inne kolejne instrukcje
instrukcja 1
instrukcja 2
….
instrukcja k
end
Przykład z bardziej rozbudowaną funkcją logiczną i kilkoma instrukcjami po then, else.
Tu funkcją logiczną będzie suma x>5 | x<2
Uwaga:
Symbol “| “ to poczciwe “or” po naszemu “lub”
Program P5-2
clear;clc; x=7 if x>5|x<2 then x=x+1 disp("dodawanie") else x=x-1 disp("odejmowanie") end disp("x=",x)
Po wykonaniu programu powstał tekst
“dodawanie”
“x=”
8.
Zmień instrukcję x=7 na x=4
Efektem będzie
“odejmowanie”
“x=”
3.
Uwaga:
Gdy warunek po if…nie jest spełniony ,to wykonywana jest instrukcja (lub instrukcje po else… .A co jeśli po if…chcemy dalej sprawdzać? Wtedy po if… dajemy elseif. Takie instrukcje zostały użyte w Rozdz.5.4.3.
Rozdział 5.2 Instrukcja sterująca while…
W przykładzie jest i<5. Jest to instrukcja pętlowa, która będzie wykonana 3 razy. Przed wykonaniem zrób to “na sucho”. Tak jak każdy programista, wyobraź sobie, że jesteś Panem Komputerem.
Program P5-3
clear;clc; i=2 while i<5 disp(i) i=i+1 end
Po wykonaniu programu powstał tekst
2.
3.
4.
Zauważ, że dla i=5 warunek i<5 nie jest spełniony. Czyli program wykona tylko 3 a nie 4 pętle.
Pobaw się trochę np. i=2 na i=0 i while i<5 na while <10 itd.
To może ciekawszy program. Np. obliczający n! (n silnia) Wiemy, że np. 3!=1*2*3=6
Program P5-4
clear;clc; i=0 s=1 while i<3 s=s*(i+1) disp('s=',s) i=i+1 end disp('Wynikiem jest ',s)
Wynikiem jest taki tekst.
“s=”
1.
“s=”
2.
“s=”
6.
“Wynikiem jest “
6.
Zgadza się. Sprawdź w internetowym kalkulatorze
https://www.naukowiec.org/kalkulatory/kalkulator-silnia.html
dla większej liczby np. 10! = 3628800, a potem naszym programem. Też się zgadza.
Uwaga
W powyższych przykładach z while… informacja o liczbie pętli była możliwa tylko po wykonaniu programu!
Zauważ, że liczby pętli nie można wyznaczyć tylko z pojedynczego wyrażenia while i<3
Rozdział 5.3 Instrukcja sterująca for…
Też instrukcja pętlowa, ale liczbę pętli pętli można wyznaczyć bez wykonania programu!
Tu warunkiem jest x==2. Czyli, gdy x=2. Przy okazji przypomnij sobie, jaka jest różnica pomiędzy wyrażeniami x==2 i x=2?
Program P5-4
clear;clc; for x=0:0.5:2 x=x^2 disp(x) end
Opis instrukcji
for x=0:0.5:2
Będzie obliczona funkcja f(x), tu f(x)=x² dla x=0, 0.5, 1, 1.5, 2
Czyli dla każdego x od 0 do 2 z odstępem co 0.5
0.
0.25
1.
2.25
4.
Zauważ, że liczbę pętli 5 można było wyznaczyć z samej instrukcji for x=0:0.5:2.
Analiza samego programu, nie była do tego potrzebna.