Zmienne: W progrmie operuje się 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. =2. b=6.3 c=+b Uwgi: Umieszczenie średnik n końcu poleceni sprwi, że wyliczon wrtość (lub wrtości) nie jest wyświetln. 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; 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 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 Scilb dl ciekwych świt -1- Zmienne, wektory i pętle
%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>?) 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, 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) 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. 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 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 Progrm Scilb jest progrmem wektorowym, 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 Scilb dl ciekwych świt -2- Zmienne, wektory i pętle
1 2 Y- też wektor 3 4 6 Istotne jest rozróżnienie wektor wierszowego i kolumnowego, le o tym z chwilę. Definiownie wrtości elementów wektorów pierwsze podejście (le już to robiliśmy podczs rysowni wykresów) Wektor wierszowy kolejne elementy oddzielone spcją lub przecinkiem: 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' 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) ; Scilb dl ciekwych świt -3- Zmienne, wektory i pętle
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. 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(10) c=y(2)+x(3) Scilb dl ciekwych świt -4- Zmienne, wektory i pętle
Element wektor to już tylko jedn wrtość, czyli obiekt tki sm jk zmienn prost. Indeksem może być zmienn: i=; y=x(i); Szybkie tworzenie specjlnych wektorów c=ones() wektor pięcioelementowy, wrtości wszystkich elementów są równe 1 d=zeros(10) - wektor dziesięcioelementowy, wrtości wszystkich elementów są równe 0 liczby=linspce(1,100,100) wektor 100 elementowy, którego kolejne elementy są równe 1, 2,., 100. los1=rnd(10,1) wektor (wierszowy) o 10 elementch pseudolosowych o rozkłdzie jednostjnym <0, 1). los2=rnd(1,10) wektor (kolumnowy) o 10 elementch pseudolosowych o rozkłdzie jednostjnym <0, 1). Uwg: Czy pmiętcie zdni o Pimpku rzucjącym kostką do gry? Npiszmy instrukcję symulującą 10 kolejnych rzutów kostką. Co się może przydć oprócz funkcji rnd? Zpewne funkcje zokrągljące wrtości rzeczywiste do wrtości cłkowitych. 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) 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. Zdnie Nrysowć spirlę Archimedes dl dnej wrtości prmetru. Nrysowć różę porównć wykresy dl k przystego i nieprzystego. Scilb dl ciekwych świt -- Zmienne, wektory i pętle
Spirl Archimedes r = ϕ, ϕ 0 prmetr -->=; -->fi = linspce(0, 6*%pi, 100); -->r=*fi; Przypomnienie: przechodzimy z ukłdu współrzędnych biegunowych do ukłdu współrzędnych krtezjńskich: -->x=r.*cos(fi); -->y=r.*sin(fi); -->plot(x,y) Róż r = cos( kϕ),, k - prmetry ϕ 0 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ę //. Njwygodniej skorzystć z okn edytor. Zwyczjowe rozszerzenie plików skryptowych to.sce. Uruchomienie poleceń z pliku nstępuje po wprowdzeniu poleceni: exec plik.sce N przykłd: =; fi = linspce(0, 6*%pi, 100); r=*fi; x=r.*cos(fi); y=r.*sin(fi); clf(); 1=10; r1=1*fi; x1=r1.*cos(fi); y1=r1.*sin(fi); //Uwg:.* ozncz mnożenie element po elemencie plot(x,y,x1,y1); title('spirl Archimedes'); leg ('=','=10'); xgrid(); Innym sposobem wykonni ciągu instrukcji zpisnych w oknie edytor jest ich skopiownie do okn konsoli (Copy Pste). Pętl wielokrotne wykonywnie ciągu instrukcji. Brdzo często w progrmowniu wykorzystuje się wielokrotne powtrznie określonego ciągu czynności (instrukcji). Scilb dl ciekwych świt -6- Zmienne, wektory i pętle
Rozróżnimy sytucje, gdy liczb powtórzeń jest znn orz gdy liczb powtórzeń zleży od konkretnej sytucji npotknej w toku obliczeń. Pętl for for i=1:10 Instrukcje zwrte pomiędzy instrukcją for instrukcją zostną wykonne 10 rzy, wynik to z zpisu i=1:10. Zmienn i (nzw przykłdow) nzywn jest zmienną sterującą; jej wrtość zmieni się przy kżdym obiegu pętli, począwszy od wrtości początkowej (tu: 1), ż do wrtości końcowej (10). Krok, czyli skok wrtości w tym przykłdzie wynosi 1 i dltego zostł pominięty, chociż równie dobrze możn npisć: for i=1:1:10 i= i=4 i=3 i=2 i=1 for i=1:1:... k=1 k=2 k=3 k=4 for k=4:-1:1... Koniec pętli, przejście do kolejnych instrukcji Koniec pętli, przejście do kolejnych instrukcji Krok może mieć wrtość dodtnią: for k=1:2:10 disp(k). i ujemną, wtedy wrtość zmiennej sterującej w kolejnych wykonnich pętli się zmniejsz: for licz=4:-1:1 disp(licz) Uwgi: Instrukcj disp(k) powoduje wypisnie wrtości zmiennej k n konsoli. Możn równocześnie wypisć większą liczbę zmiennych, oddzieljąc je przecinkiem (le będą wypisywne od końc ), możn też wypisywć teksty (mądrze mówi się łńcuchy znkowe ). Poptrzmy n efekt instrukcji: disp( zmienn licz +string(licz)) Brdzo często zmienn sterując jest powiązn z indeksmi elementów wektorów pozwljąc n ich systemtyczne przetwrznie/przeglądnie. Zcznijmy od tkich przykłdów: Scilb dl ciekwych świt -7- Zmienne, wektory i pętle
x=linspce(1,10,10); for i=1:10 disp (x(i)) for i=10:-1:1 disp(x(i)) lbo for i=1:2:10 disp(x(i)) Przykłd: Wyznczyć 20 początkowych wyrzów ciągu zdefiniownego wzorem: u = 1 1 u i = 2 u + 1 i u(1)=1; Inicjlizcj. Od czegoś trzeb zcząć. Koniecznie wykonywn PRZED rozpoczęciem pętli. for i=1:1:19 u(i+1)=2*u(i)-; Przy kżdym obiegu pętli tworzony jest kolejny element wektor u. Począwszy od u(2)=2*u(1)-=-3, u(3)=2*u(2)-=-11, ) Zdnie: Wyznczyć 10 pierwszych elementów ciągu Fiboncciego. Pętl while Innym rodzjem pętli jest pętl while, uzleżnijąc wykonnie ciągu instrukcji od spełnieni wrunku. h=0; while h<7 h=h+1; disp (h) ; Frzę while h<7 czytmy: dopóki spełniony jest wrunek h<7 wykonuj.. Zuwżmy, że gdyby wrtość zmiennej h nie byłmodyfikown wewnątrz pętli, to pętl t nie miłby sznsy się zkończyć. Z pomocą pętli while brdzo łtwo możn zprogrmowć symulcję gry w kości z Pimpkiem, któr m się toczyć do określonej liczby zwycięstw ( ztem w góry nie widomo, ile rzutów będzie wykonnych). Jednk. brkuje nm jeszcze jednej instrukcji: instrukcji wrunkowej. O tym opowiemy w kolejnym rozdzile. Scilb dl ciekwych świt -8- Zmienne, wektory i pętle