Zmienne Po nieco intuicyjnych początkch, zjmiemy się obiektmi, n których opier się progrmownie są to zmienne. Zmienne Progrmy operują n zmiennych. Ndwnie im wrtości odbyw się poprzez instrukcję podstwieni. Interpretcj tej instrukcji jest nstępując: zmiennej znjdującej się z lewej strony instrukcji podstwieni ndn jest wrtość wyrżeni znjdującego się po prwej stronie instrukcji. Zmienne są identyfikowne poprzez nzwę. =2. b=6.3 c=+b Uwgi: Umieszczenie średnik n końcu poleceni sprwi, że wyliczon wrtość (lub wrtości) nie jest wyświetln n konsoli. W powyższych przykłdch zmienne, b, c przechowują po jednej wrtości. Odwołnie do wrtości zmiennej (prw stron instrukcji podstwieni) nie wpływ n jej wrtość: =; c=+; Wrtością zmiennej jest, zmiennej c 10. Jest błędem odwołnie się do zmiennej, której nie przypisno wcześniej żdnej wrtości. Ndnie zmiennej wrtości powoduje zniszczenie jej poprzedniej wrtości: =; =10; Wżne! Poptrzmy n sekwencję instrukcji: n=1; n=n+1; Przypomnijmy interpretcję instrukcji podstwieni: zmiennej z lewej strony ndwn jest wrtość wyrżeni z lewej strony instrukcji. A ztem w tym przykłdzie zmiennej n (lew stron instrukcji) ndn jest wrtość wyrżeni z prwej strony instrukcji (wynosząc n+1, czyli 2, bowiem n=1). A ztem nową wrtością n stje się 2. Poprzedni wrtość jest niszczon. Instrukcje podstwieni tego typu są brdzo często wykorzystywne w progrmch. = = = =10 b=+1 =+ 10 b 6 10 Oprócz zmiennych, w progrmch wykorzystuje się stłe, np., 2, 3.46. Mtemtyk dl ciekwych świt -7- Scilb
Scilb wyróżni kilk stłych specjlnych: %i - wrtość urojon równ 1 %pi - π %e - podstw logrytmu nturlnego %eps - njwiększ wrtość, dl której 1 + % eps = 1 %inf - nieskończoność (komputerow) %t, %f - zmienne logiczne o wrtościch prwd (T - true) i fłsz (F - flse) (Co wyświetli się po wypisniu wyrżeni logicznego 2>?) %nn Not Number N zmiennych i stłych wykonuje się opercje. N zmiennych i stłych o typie liczbowym wykonuje się opercje rytmetyczne. Opertory rytmetyczne: w wyrżenich wykorzystuje się nstępujące opertory: + dodwnie - odejmownie * mnożenie / dzielenie ^ potęgownie Priorytety wykonywni opercji rytmetycznych: Wrtość wyrżeni jest wyznczn od lewej strony do prwej, w kolejności zgodnej z priorytetmi opercji (potęgownie, mnożenie/dzielenie, dodwnie/odejmownie). Kolejność możn zmienić poprzez użycie nwisów (). W wyrżenich mogą pojwić się funkcje Scilb, n przykłd: sin(x), cos(x), tn(x), cotg(x) bs(x) wrtość bezwzględn sqrt(x) pierwistek kwdrtowy exp(x) e ^x (e- stł Euler, możn się do niej odwoływć poprzez %e) Możn również wykorzystywć włsne funkcje, le tym zjmiemy się poźniej. Argumenty funkcji w Scilbie umieszcz się w nwisch ( ). Scilb nie wymg deklrowni zmiennych. Ogólne opercje n zmiennych who wyświetlenie wszystkich używnych zmiennych who_user wyświetlenie zmiennych użytkownik cler() usunięcie (wyczyszczenie) wszystkich zdefiniownych zmiennych cler nzw usunięcie zmiennej o nzwie nzw. Wektory i mcierze N rzie w przykłdch występowły zmienne proste jednej nzwie odpowidł jedn wrtość (możn powiedzieć, jedno pudełko służące do przechowywni wrtości). Ale przypomnijmy, że do rysowni wykresów wykorzystywne były większe obiekty, w Mtemtyk dl ciekwych świt -8- Scilb
których pod jedną nzwą znjdowł się większ liczb wrtości (n przykłd wrtości xów lub y-ków ). Tkie większe obiekty to wektory (inczej: tblice jednowymirowe). Wektory W progrmie Scilb większość opercji jest wykonywnych w odniesieniu do wektorów. Wektor to ciąg wrtości. O ile zmiennej prostej odpowidło pudełko z jedną wrtością, to wektorem jest ciąg pudełek. Ten ciąg pudełek, z których kżde może przechowywć jkąś wrtość, jest identyfikowny z pomocą jednej nzwy. A 1 B 10 C 00 zmienne proste 1 4 6 12 34 2-4 -10 3 2 X wektor 1 2 Y- też wektor 3 4 6 Istotne jest rozróżnienie wektor wierszowego i kolumnowego, le o tym z chwilę. Jeśli zncie progrmy typu rkusz klkulcyjny, to możecie wyobrżć sobie wektory jko frgmenty wiersz lub kolumny w rkuszu. Zuwżmy też, że zmienn prost jest szczególnym przypdkiem wektor złożonego z jednego elementu. Definiownie wrtości elementów wektorów pierwsze podejście (chociż już to robiliśmy podczs rysowni wykresów) Wektor wierszowy kolejne elementy oddzielone spcją lub przecinkiem, cłość umieszczon w nwisch kwdrtowych: x=[1 4 6 12 34 2-4 -10 3 2] lbo x=[1, 4, 6, 12, 34, 2, -4, -10, 3, 2] Wektor kolumnowy - elementy oddzielone średnikiem lub pisne od nowego wiersz: y=[1; 2; 3; 4; ; 6] r=[1 2 3 4 6] Uwg: W przypdku dużych zestwów wrtości lepiej jest umieszczć średnik n końcu poleceni. Wektor kolumnowy możn zmienić n wierszowy i odwrotnie korzystjąc z symbolu (postrof). Tk opercj nzyw się trnspozycją. xt = x'; Mtemtyk dl ciekwych świt -9- Scilb
yt = y'; Wektory możn konstruowć w oprciu o wcześniej zdefiniowne zmienne: =1 b=2 c=3 x=[, b, c] Wektor możn zdefiniowć zdjąc wrtość pierwszego elementu, krok orz wrtość osttniego elementu, oddzieljąc je dwukropkiem: x=[-10:0.:10] Zwróćmy uwgę n różnicę po umieszczeniu znku : x=[-10:0.:10] Z kolei polecenie: z=linspce (-10, 10, 101); wygeneruje wektor (wierszowy) o 101 elementch, przyjmujących wrtości z przedziłu [-10, 10]. Polecenie v=linspce (-10, 10, 101) ; wygeneruje wektor kolumnowy wrtości kolejnych elementów będą tkie sme jk poprzednio. Jeśli mmy wektor x, o elementch przykłdowo równych: x=linspce(0, %pi, 20); to instrukcj y=sin(x); utworzy wektor y o tkiej smej liczbie elementów jk wektor x, i też będzie to wektor wierszowy. N wektorch o zgodnych wymirch (co to ozncz?) możn wykonywć różne opercje: z=x+y; w=x-y; v=x+2*y; u=sqrt(bs(x)); W powyższych przykłdch dziłni są wykonywne element po elemencie. + + x y + z=x+y z Mtemtyk dl ciekwych świt -10- Scilb
Uwżjmy n mnożenie, w przypdku wektorów opercj x*x nie jest określon. Pomijmy tę sprwę, n rzie n pociechę mmy dziłnie: x.*x oznczjące mnożenie element wektor po elemencie. Podobnie jest dzieleniem, n rzie ogrniczmy się do dziłni element po elemencie, czyli: x./x Pytnie: Jkie wrtości będzie mił wektor w wyniku wykonni osttniej instrukcji? Uwg: w przypdku próby wykonni dzieleni przez 0, wynikiem będzie Nn (Not number), co ozncz, że dziłnie nie było możliwe do wykonni. Ogólnie, poprwne progrmy powinny być tk skonstruowne, lby nie dopuścić do tkiej sytucji. Wrócimy do tego później Odwołnie do elementu wektor: Do elementów wektorów możn odwoływć się poprzez podnie indeksu, czyli numeru elementu, n przykłd: =x(1) b=2*x(7) c=y(2)+x(3) Element wektor to już tylko jedn wrtość, czyli obiekt tki sm jk zmienn prost. Indeksem może być zmienn: i=; y=x(i); Jeśli jko indeks pod się $, to nstępuje odwołnie do osttniego elementu wektor. lst=x($) X 3 <--- ---- x(1) 6-3 <--- ---- x(3) 7 9 10 <--- ---- x(7) 2-8 20 <--- ---- x($) Szybkie tworzenie specjlnych wektorów c=ones(,1) wektor kolumnowy pięcioelementowy, wrtości wszystkich elementów są równe 1 c=ones(1,) wektor wierszowy pięcioelementowy, wrtości wszystkich elementów są równe 1 d=zeros(10,1) - wektor kolumnowy dziesięcioelementowy, wrtości wszystkich elementów są równe 0 d=zeros(1,10) - wektor kolumnowy dziesięcioelementowy, wrtości wszystkich elementów są równe 0 Mtemtyk dl ciekwych świt -11- Scilb
liczby=linspce(1,100,100) wektor 100 elementowy, którego kolejne elementy są równe 1, 2,., 100. los1=rnd(10,1) wektor (kolumnowy) o 10 elementch pseudolosowych o rozkłdzie jednostjnym [0, 1). los2=rnd(1,10) wektor (wierszowy) o 10 elementch pseudolosowych o rozkłdzie jednostjnym [0, 1). Zdnie: Npisć instrukcję symulującą 10 kolejnych rzutów kostką do gry. Co się może przydć oprócz funkcji rnd? Zpewne funkcje zokrągljące wrtości rzeczywiste do wrtości cłkowitych. Orz trzeb przeliczyć zkres wrtości [0,1) n zkres od 1 do 6. round zokrąglenie do njbliższej wrtości cłkowitej floor zokrąglenie do dołu ceil zokrąglenie do góry Może tk? kostk=floor(rnd(10,1)*6+1) Jeszcze o wektorch. Wektory możn ze sobą zlepić : x=ones(1,); z=2*ones(1,); xiz=[x,z] -->x=ones(1,); -->z=2*ones(1,); -->xiz=[x,z] xiz = 1. 1. 1. 1. 1. 2. 2. 2. 2. 2. Możn wyciąć frgment wektor: -->srodek=xiz(3:6) srodek = 1. 1. 1. 2. W poprzednim przykłdzie zlepiliśmy dw wektory wierszowe. Podobnie, możn połączyć wektory kolumnowe; znkiem oddzieljącym jest średnik: -->wek1=[1,2,3]' wek1 = 1. 2. 3. -->wek2=[10,20,30]' wek2 = 10. 20. 30. -->wek3=[wek1;wek2] wek3 = 1. 2. 3. Mtemtyk dl ciekwych świt -12- Scilb
10. 20. 30. Jeśli jko znk oddzieljący pod się przecinek. to uzysk się inny obiekt o brdziej złożonej strukturze: -->obiekt=[wek1,wek2] obiekt = 1. 10. 2. 20. 3. 30. Obiektem tym jest mcierz, inczej tblic dwuwymirow. Możn powiedzieć, że wektor jest szczególnym przypdkiem mcierzy (zbudownej odpowiednio z jednej kolumny lub jednego wiersz), również zmienn prost to szczególn mcierz o jednym wierszu i jednej kolumnie. Mcierz to jkby wycinek rkusz klkulcyjnego. I jk w przypdku rkusz, by wskzć n konkretny element mcierzy, trzeb wykorzystć dw indeksy, pierwszy wskzuje n numer wiersz, drugi n numer kolumny. A A(4,3) B B(3,6) Z Z(1,4) Zdnie Utworzyć mcierz o wierszch i kolumnch, przy czym wszystkie elementy pierwszego wiersz mją mieć wrtość1, drugiego 2, itd. -->wiersz=ones(1,) wiersz = 1. 1. 1. 1. 1. -->mcierz=[wiersz;wiersz*2;wiersz*3;wiersz*4;wiersz*] mcierz = 1. 1. 1. 1. 1. 2. 2. 2. 2. 2. 3. 3. 3. 3. 3. 4. 4. 4. 4. 4...... Mtemtyk dl ciekwych świt -13- Scilb
Zdnie Powtórzyć poprzednie zdnie, zstępując wiersze kolumnmi. Funkcje wektorowe Kilk funkcji n wektorch: s=sum(x) sum elementów wektor x c=mx(x) wrtość mksymlnego elementu wektor x d=min(x) wrtość minimlnego elementu wektor x z=gsort(x) uporządkownie mlejąco elementów wektor x wynik umieszczony jest w wektorze z. Zpisnie sesji do pliku: diry ('sesj.txt').. diry (0) W pliku sesj.txt znjduje się zpis wszystkich wykonnych poleceń orz wyników wypisywnych n monitor pomiędzy poleceniem diry ('sesj.txt') poleceniem diry (0). Uwg: Jeśli w poleceniu wymgjącym podni nzwy pliku pod się tylko nzwę, to domyślnie zkłd się, że plik ten znjduje się w ktlogu bieżącym; nzwę ktlogu bieżącego możn wyświetlić z pomocą poleceni pwd. Ktlog bieżący możn zmienić poleceniem Plik/ Zmin bieżącego ktlogu. Innym sposobem uniknięci nieporozumień jest podwnie nzwy pliku wrz z pełną ścieżką dostępu. Skrypty Poleceni progrmu Scilb możn umieścić w pliku (skrypcie) i wielokrotnie wykonywć. W plikch oprócz poleceń możn umieszczć komentrze; są to linie rozpoczynjące się //. Do pisni skryptu njwygodniej jest skorzystć z okn edytor. Zwyczjowe rozszerzenie plików skryptowych to.sce. Uruchomienie poleceń z pliku nstępuje po wprowdzeniu poleceni: exec ( plik.sce ) Innym sposobem wykonni ciągu instrukcji zpisnych w oknie edytor jest ich skopiownie do okn konsoli (Copy Pste), lbo wybór opcji Wykonj / plik (z echem, lbo bez ech). SCILAB Mteriły oprcowł Ann Trykozko, we współprcy z Łukszem Czerwińskim Mtemtyk dl ciekwych świt -14- Scilb