5 styczeń, 2006 Programowanie w Scilab Slajd 1 Programowanie w Scilab
5 styczeń, 2006 Programowanie w Scilab Slajd 2 Plan zajęć Wprowadzenie -operatory porównawcze: Pętle Przerywanie pętli Warunki Definiowanie funkcji Funkcje specjalne
5 styczeń, 2006 Programowanie w Scilab Slajd 3 Operatory porównawcze Scilab posiada wiele wbudowanych narzędzi do programowania, np. pętle, warunki, wybór przypadków. Podstawową użyteczność Scilaba stanowią funkcje. Istnieje pięć metod porównywania obiektów w Scilabie: == równe < mniejsze od > większe od <= mniejsze lub równe >= większe lub równe <> lub ~= nierówne
5 styczeń, 2006 Programowanie w Scilab Slajd 4 Warunki Definicja warunku if (w kilku liniach): if warunek-1 then instrukcja... [ elseif warunek-2 then instrukcja ] [ else instrukcja ] Przykład (zapis w kilku liniach): x=1; if x>0 then, y=-x, else, y=x, y y= -1 lub w jednej linii: if x>0 then, y=-x, else, y=x, ; y y= -1
5 styczeń, 2006 Programowanie w Scilab Slajd 5 Pętle Pętla for Definicja w jednej linii: for zmienna=wyrażenie, instrukcja, instrukcja, Definicja w kilku liniach: for zmienna=wyrażenie, instrukcja, instrukcja, Przykład: x=1; for k=[-1 3 0], x=x+k, x = 0. x = 3. x = 3.
5 styczeń, 2006 Programowanie w Scilab Slajd 6 Pętle Pętla for lub Przykład: x=1; for k=1:6 x=x*k x=1; for k=1:6, x=x*k, Uwaga! - Pętla nie musi być wpisana w jednej linii.
5 styczeń, 2006 Programowanie w Scilab Slajd 7 Pętle Pętla for może również operować na listach Przykład: 1. L=list(1, [1,2;3,4],'str'); for k=l, disp(k),! 1. 2.!! 3. 4.! str Ćwiczenie 1 Utwórz macierz o wymiarach 5x5, której wyrazy spełniają warunek a(i,j) = 1/(i+j-1) (korzystaj z SciPada) Zmodyfikuj wyrazy macierzy a tak aby na głównej przekątnej a(2,2)=2, a(3,3)=3 oraz a(4,4)=4
5 styczeń, 2006 Programowanie w Scilab Slajd 8 Pętla Ćwiczenie 1 Utwórz macierz o wymiarze 5x5, której wyrazy spełniają warunek a(i,j) = 1/(i+j-1) n=5; for i = 1:n, for j = 1:n, a(i,j) = 1/(i+j-1); ; ; a a =! 1. 0.5 0.3333333 0.25 0.2!! 0.5 0.3333333 0.25 0.2 0.1666667!! 0.3333333 0.25 0.2 0.1666667 0.1428571!! 0.25 0.2 0.1666667 0.1428571 0.125!! 0.2 0.1666667 0.1428571 0.125 0.1111111!
5 styczeń, 2006 Programowanie w Scilab Slajd 9 Pętla Ćwiczenie 1 Zmodyfikuj wyrazy macierzy a tak aby na głównej przekątnej a(2,2)=2, a(3,3)=3 oraz a(4,4)=4 for j = 2:n-1, ; a a(j,j) = j; a =! 1. 0.5 0.3333333 0.25 0.2!! 0.5 2.0 0.25 0.2 0.1666667!! 0.3333333 0.25 3.0 0.1666667 0.1428571!! 0.25 0.2 0.1666667 4.0 0.125!! 0.2 0.1666667 0.1428571 0.125 0.1111111!
5 styczeń, 2006 Programowanie w Scilab Slajd 10 Pętle Pętla while Definicja : while warunek instrukcja... [else instrukcja... ] lub (w jednej linii): while warunek do instrukcja,...[,else instrukcja], while warunek then instrukcja,...[,else instrukcja],
5 styczeń, 2006 Programowanie w Scilab Slajd 11 Pętle Pętla while Przykład: x=1; while x<14, x=2*x, x = 2. x = 4. x = 8. x = 16.
5 styczeń, 2006 Programowanie w Scilab Slajd 12 Pętle Przerwanie pętli instrukcja break warunek if Przykład: a=0; for i=1:5:100, a=a+1, if i>10 then break, ; a a = 3.
5 styczeń, 2006 Programowanie w Scilab Slajd 13 Pętle Ćwiczenie 2 Utwórz skrypt o nazwie break.sce o treści: for k=1:3; for j=1:4; if k+j>5 then, break, else, disp(k) ; ; ; Prześledź działanie instrukcji
5 styczeń, 2006 Programowanie w Scilab Slajd 14 Warunki Ćwiczenie 3 Stwórz procedurę tworzącą macierz kwadratową o dowolnym rozmiarze i cechach jak następująca macierz (użyj SciPada):! 2. - 1. 3. 3. 3. 3. 3. 3. 3. 3.!! - 1. 2. - 1. 3. 3. 3. 3. 3. 3. 3.!! 3. - 1. 2. - 1. 3. 3. 3. 3. 3. 3.!! 3. 3. - 1. 2. - 1. 3. 3. 3. 3. 3.!! 3. 3. 3. - 1. 2. - 1. 3. 3. 3. 3.!! 3. 3. 3. 3. - 1. 2. - 1. 3. 3. 3.!! 3. 3. 3. 3. 3. - 1. 2. - 1. 3. 3.!! 3. 3. 3. 3. 3. 3. - 1. 2. - 1. 3.!! 3. 3. 3. 3. 3. 3. 3. - 1. 2. - 1.!! 3. 3. 3. 3. 3. 3. 3. 3. - 1. 2.!
5 styczeń, 2006 Programowanie w Scilab Slajd 15 Warunki Ćwiczenie 3 n=10 for i=1:n, for j = 1:n, if i == j then, a(i,j) = 2; elseif abs(i-j) == 1 then, a(i,j) = -1; else, a(i,j) = 3; ; ; ; a
5 styczeń, 2006 Programowanie w Scilab Slajd 16 Warunki -->a a = Ćwiczenie 3 c.d.! 2. - 1. 3. 3. 3. 3. 3. 3. 3. 3.!! - 1. 2. - 1. 3. 3. 3. 3. 3. 3. 3.!! 3. - 1. 2. - 1. 3. 3. 3. 3. 3. 3.!! 3. 3. - 1. 2. - 1. 3. 3. 3. 3. 3.!! 3. 3. 3. - 1. 2. - 1. 3. 3. 3. 3.!! 3. 3. 3. 3. - 1. 2. - 1. 3. 3. 3.!! 3. 3. 3. 3. 3. - 1. 2. - 1. 3. 3.!! 3. 3. 3. 3. 3. 3. - 1. 2. - 1. 3.!! 3. 3. 3. 3. 3. 3. 3. - 1. 2. - 1.!! 3. 3. 3. 3. 3. 3. 3. 3. - 1. 2.!
5 styczeń, 2006 Programowanie w Scilab Slajd 17 Warunek typu select-case Definicja warunku if w kilku liniach: select wyrażenie, case wartość_1 then instrukcja, case wartość_2 then instrukcja,... [else instrukcja], Przykład: x=-1; select x, y = case 1, i y=x+5, case -1, y=sqrt(x),
5 styczeń, 2006 Programowanie w Scilab Slajd 18 Warunek typu select-case Ćwiczenie 4 Stwórz procedurę (w pliku select.sce), która będzie losowała liczby z przedziału <0, 2) Liczby losowe (rozkład jednorodny) mają być następnie zaokrąglone - funkcja round() Przerwanie losowania ma następować po wylosowaniu liczby która po zaokrągleniu daje 2
5 styczeń, 2006 Programowanie w Scilab Slajd 19 Warunek typu select-case while %t do n=round(2*rand(1,1)) select n case 0 then disp(0) case 1 then disp(1) else break Ćwiczenie 4
5 styczeń, 2006 Programowanie w Scilab Slajd 20 Definiowanie funkcji Składnia dowolnej funkcji: function [y1,y2,...,yn]=foo(x1,...xn)... function Przykład: function [x]=fact(k) k=int(k) if k<1 then k=1, x=1; for j=1:k, x=x*j; function -->exists('fact') ans 0.
5 styczeń, 2006 Programowanie w Scilab Slajd 21 Definiowanie funkcji Jeśli funkcja nie istnieje należy ją załadować do Scilaba exec lub getf: Przykład c.d.: -->exec('~/fact.sci') -->exists('fact') ans 1. -->x=fact(5) x = 120
5 styczeń, 2006 Programowanie w Scilab Slajd 22 Definiowanie funkcji Ćwiczenie 5 Zdefiniuj funkcje która będzie podawała sumę i różnicę dwóch liczb. Funkcję zapisz do pliku sumroz.sce:
5 styczeń, 2006 Programowanie w Scilab Slajd 23 Definiowanie funkcji Ćwiczenie 5 function [y1,y2]=f(x1,x2) y1=x1+x2 y2=x1-x2 function wywołaj funkcję: -->exec('~/f.sci') -->[x,y]=f(5,5) y = 0 x = 10
5 styczeń, 2006 Programowanie w Scilab Slajd 24 Funkcje specjalne Scilab posiada wiele wbudowanych kom pomocniczych funkcji: argn zwraca liczbę argumentów wejściowych i wyjściowych funkcji error używana do wyświetlania komunikatu o błędach warning pause używana do chwilowego zatrzymania działania funkcji break zatrzymanie pętli Return lub resume -wyprowadzenie lokalnych zmiennych ze środowiska funkcji
5 styczeń, 2006 Programowanie w Scilab Slajd 25 Definiowanie funkcji Ćwiczenie 6 Zdefiniuj funkcje która będzie obliczała iloczyn Cauchego dwóch macierzy. Funkcję zapisz do pliku mult.sce:
5 styczeń, 2006 Programowanie w Scilab Slajd 26 Definiowanie funkcji function [c]=mult(a,b) [m,n]=size(a); [k,l]=size(b); if n~=k then, c='blad - n~=k'; resume Ćwiczenie 6
5 styczeń, 2006 Programowanie w Scilab Slajd 27 Definiowanie funkcji Ćwiczenie 6 c.d. c=zeros(m,l); for i=1:m, for j=1:l, for p=1:n, c(i,j)=c(i,j)+a(i,p)*b(p,j); function
5 styczeń, 2006 Programowanie w Scilab Slajd 28 Definiowanie funkcji Ćwiczenie 6 c.d. wywołaj funkcję: -->exec('~/mult.sci') -->a=[2,4;4,5];b=[3, 6]; -->c=mult(a,b) c = Blad - n~=k -->a=[2,4;4,5];b=[3; 6]; -->c=mult(a,b) c =! 30.!! 42.!
5 styczeń, 2006 Programowanie w Scilab Slajd 29 Definiowanie funkcji Ćwiczenie 7 Zdefiniuj funkcje która będzie obliczała sumę dwóch macierzy. Funkcję zapisz do pliku add.sce:
5 styczeń, 2006 Programowanie w Scilab Slajd 30 Definiowanie funkcji Ćwiczenie 7 function [c]=add(a,b) [m,n]=size(a); [k,l]=size(b); if m~=k n~=l then, c='blad - rozmiary macierzy nie sa identyczne'; return,
5 styczeń, 2006 Programowanie w Scilab Slajd 31 Definiowanie funkcji Ćwiczenie 7 c.d. c=zeros(m,n); for i=1:m, for j=1:n, c(i,j)=a(i,j)+b(i,j); function
5 styczeń, 2006 Programowanie w Scilab Slajd 32 Definiowanie funkcji Ćwiczenie 7 c.d. wywołaj funkcję: -->exec('~/add.sci') -->a=[2,4;4,5];b=[3; 6]; -->c=add(a,b) c = Blad rozmiary macierzy nie są identyczne -->a=[2,4;4,5];b=[3 5; 6 5]; -->c=add(a,b) c =! 5. 9.!! 10. 10.!