background image

 

MATLAB 

PODSTAWY PROGRAMOWANIA 

 

Ćwiczenia 4 

SKRYPTY I INSTRUKCJE STERUJĄCE 

 

 

 
 
 

 
 
 
 
Wydział Inżynierii Lądowej i Środowiska 
Katedra Mechaniki Budowli i Mostów  

copyleft by Marcin Kujawa & Łukasz Smakosz 

background image

MATLAB 

 4. Skrypty i instrukcje sterujące  2013/2014 

Marcin Kujawa 

 Łukasz Smakosz 

 Politechnika Gdańska 

 WILiŚ 

 Katedra Mechaniki Budowli i Mostów 

2/25 

Operatory logiczne

 

Operatory logiczne służą do określania warunków i zależności między 
zmiennymi. Operatory używane w języku Matlab to: 
 
 

==

   

równe  

 

~=

   

różne  

 

  

mniejsze  

 

>

    

większe  

 

<=

   

mniejsze równe  

 

>= 

   większe równe  

 

&

    

oraz (koniunkcja)  

 

|

    

lub (alternatywa) 

 
 
Uwaga: należy pamiętać,  że  pojedynczy znak równości oznacza w Matlabie 
podstawienie i użycie go przy formułowaniu warunku równości spowoduje 

błąd

 

i przerwanie realizacji skryptu. 

 

 

background image

MATLAB 

 4. Skrypty i instrukcje sterujące  2013/2014 

Marcin Kujawa 

 Łukasz Smakosz 

 Politechnika Gdańska 

 WILiŚ 

 Katedra Mechaniki Budowli i Mostów 

3/25 

Instrukcje sterujące

 

Instrukcje sterujące  służą do wykonywania ciągu poleceń w pewnych 
określonych warunkach. Należą do nich pętle  FOR i WHILE oraz instrukcja 
warunkowa IF
 

Pętla FOR

 

Pętla  FOR pozwala na powtarzanie wybranego ciągu instrukcji określoną 
liczbę razy.  
 
Pętli FOR używamy, kiedy liczba powtórzeń jest z góry znana
 

 

 

background image

MATLAB 

 4. Skrypty i instrukcje sterujące  2013/2014 

Marcin Kujawa 

 Łukasz Smakosz 

 Politechnika Gdańska 

 WILiŚ 

 Katedra Mechaniki Budowli i Mostów 

4/25 

Przykład: 
Napisz skrypt, który generuje wektor A o wymiarze 1×5 o elementach 
spełniających zależność 

2 . 

 

 
 
clear, clc  

   

for

 

i=1:5

 

% otwarcie petli, liczba powtorzen

 

    

A(i)=2*i; 

% potarzany ciag instrukcji

 

end

 

% zamkniecie petli

 

A

 

% wynik dzialania petli

 

 
 

 

background image

MATLAB 

 4. Skrypty i instrukcje sterujące  2013/2014 

Marcin Kujawa 

 Łukasz Smakosz 

 Politechnika Gdańska 

 WILiŚ 

 Katedra Mechaniki Budowli i Mostów 

5/25 

Przykład: 
Napisz skrypt, który generuje wektor A o wymiarze 1×5 o elementach 
spełniających zależność 

2 . 

 

 
 
clear, clc  

   

for

 

i=1:5

 

 

 

    

A(i)=2*i 

 

 

end

 

 

 

A

 

 

 

 
 
 

 

z każdym kolejnym przebiegiem pętli za i  będą 
podstawiane liczby od 1 do 5, ze skokiem co 1

za element na i-tym miejscu wektora A zostanie 
podstawione wyrażenie  2*i, wartość  i zmienia się z 
każdym kolejnym przebiegiem pętli 

background image

MATLAB 

 4. Skrypty i instrukcje sterujące  2013/2014 

Marcin Kujawa 

 Łukasz Smakosz 

 Politechnika Gdańska 

 WILiŚ 

 Katedra Mechaniki Budowli i Mostów 

6/25 

ZADANIE DO WYKONANIA NA ZAJĘCIACH 

 

Stwórz skrypt liczący wartości funkcji 

 dla a=2, b=4, c=5 oraz 

zmiennej 

1 ; 3  (ze skokiem co 1). 

 

 
 

 
 

 

 

background image

MATLAB 

 4. Skrypty i instrukcje sterujące  2013/2014 

Marcin Kujawa 

 Łukasz Smakosz 

 Politechnika Gdańska 

 WILiŚ 

 Katedra Mechaniki Budowli i Mostów 

7/25 

ZADANIE DO WYKONANIA NA ZAJĘCIACH 

 

Stwórz skrypt liczący wartości funkcji 

 dla a=2, b=4, c=5 oraz 

zmiennej 

1 ; 3  (ze skokiem co 1). 

 

clear, clc 

  

% definicja stalych

 

a=2;  
b=4;  
c=5;  

for

 

x=1:3 

  

y=a*x^2+b*x+c 

end 

 

 

background image

MATLAB 

 4. Skrypty i instrukcje sterujące  2013/2014 

Marcin Kujawa 

 Łukasz Smakosz 

 Politechnika Gdańska 

 WILiŚ 

 Katedra Mechaniki Budowli i Mostów 

8/25 

ZADANIE DO WYKONANIA NA ZAJĘCIACH 

 

Zmodyfikuj poprzedni skrypt tak aby x przyjmował wartości od 5 do 7 ze 
skokiem co 0.5. 
 
 
 

 
 
 

 

background image

MATLAB 

 4. Skrypty i instrukcje sterujące  2013/2014 

Marcin Kujawa 

 Łukasz Smakosz 

 Politechnika Gdańska 

 WILiŚ 

 Katedra Mechaniki Budowli i Mostów 

9/25 

ZADANIE DO WYKONANIA NA ZAJĘCIACH 

 

Zmodyfikuj poprzedni skrypt tak aby x przyjmował wartości od 5 do 7 ze 
skokiem co 0.5. 
 

clear, clc 

  

% definicja stalych

 

a=2;  
b=4;  
c=5;  

for

 

x=5:0.5:7

 

  y=a*x^2+b*x+c 

end

 

 

 
 
 

background image

MATLAB 

 4. Skrypty i instrukcje sterujące  2013/2014 

Marcin Kujawa 

 Łukasz Smakosz 

 Politechnika Gdańska 

 WILiŚ 

 Katedra Mechaniki Budowli i Mostów 

10/25 

ZADANIE DO WYKONANIA NA ZAJĘCIACH 

 

Napisz skrypt, który generuje macierz A o wymiarze 3×6 o elementach 

spełniających zależność 

,

.  

 
 

 
 
 

 

background image

MATLAB 

 4. Skrypty i instrukcje sterujące  2013/2014 

Marcin Kujawa 

 Łukasz Smakosz 

 Politechnika Gdańska 

 WILiŚ 

 Katedra Mechaniki Budowli i Mostów 

11/25 

ZADANIE DO WYKONANIA NA ZAJĘCIACH 

 

Napisz skrypt, który generuje macierz A o wymiarze 3×6 o elementach 

spełniających zależność 

,

.  

 

clear, clc  

   

for

 

i=1:3 

    

for

 

j=1:6 

        

A(i,j)=i*sqrt(2*j)/(i+j); 

    

end

 

end

   

A  

 
 
 
 

pętla zewnętrzna - generuje wiersze macierzy; 
dla każdego  i-tego wiersza realizowany jest 
pełen przebieg pętli wewnętrznej 

pętla wewnętrzna - generuje elementy we 
wszystkich j kolumnach i-tego wiersza 

background image

MATLAB 

 4. Skrypty i instrukcje sterujące  2013/2014 

Marcin Kujawa 

 Łukasz Smakosz 

 Politechnika Gdańska 

 WILiŚ 

 Katedra Mechaniki Budowli i Mostów 

12/25 

Pętla WHILE

 

Pętla  WHILE pozwala na powtarzanie ciągu instrukcji tak długo, jak długo 
określone w niej wyrażenie warunkowe jest spełnione
 
Jest wykorzystywana kiedy dokładna liczba powtórzeń nie jest z góry znana, ale 
znany jest warunek powtarzania ciągu instrukcji, lub jeżeli operacja ma się 
powtarzać aż do przerwania jej przez użytkownika. 
 
 
Uwaga: błędna realizacja pętli może prowadzić do powtarzania zawartego w niej 
ciągu instrukcji w nieskończoność.  Żeby  przerwać taką realizację należy użyć 
kombinacji klawiszy 

CTRL+C

 przy aktywnym oknie Command Window

 

 

background image

MATLAB 

 4. Skrypty i instrukcje sterujące  2013/2014 

Marcin Kujawa 

 Łukasz Smakosz 

 Politechnika Gdańska 

 WILiŚ 

 Katedra Mechaniki Budowli i Mostów 

13/25 

Przykład: 
Stwórz skrypt zwiększający wartość zdefiniowanej przez użytkownika zmiennej 
i o 1, aż do osiągnięcia wartości 100. Przetestuj zachowanie skryptu dla różnych 
wartości i
 

clear, clc  

  

i=input(

'Podaj i: '

);

 

while

 

i<100 

% warunek realizacji petli

 

    

i=i+1

 

% wartosc i rosnie przy kazdym przebiegu

 

end

 

 

 

 

background image

MATLAB 

 4. Skrypty i instrukcje sterujące  2013/2014 

Marcin Kujawa 

 Łukasz Smakosz 

 Politechnika Gdańska 

 WILiŚ 

 Katedra Mechaniki Budowli i Mostów 

14/25 

Przykład: 
Stwórz skrypt obliczający pierwiastek kwadratowy z wprowadzonej przez 
użytkownika liczby. Niech po wyświetleniu wyniku skrypt pyta się użytkownika 
o chęć powtarzania obliczeń. 
 

clear, clc 

  

disp(

'Skrypt oblicza pierwiastek kadratowy liczby a'

)

 

i=

't'

;

 

% def zmiennej aktywujacej petle

 

while

 

i==

't'

 

% warunek powtarzania petli

 

    

clc

 

% czyszczenie ekranu po kazdym powtorzeniu

 

    

a=input(

'Wprowadz a: '

);

 

    

sqrt(a) 

    

i=input(

'Kontynuowac [t/n]? '

,

's'

);

 

end

 

 

background image

MATLAB 

 4. Skrypty i instrukcje sterujące  2013/2014 

Marcin Kujawa 

 Łukasz Smakosz 

 Politechnika Gdańska 

 WILiŚ 

 Katedra Mechaniki Budowli i Mostów 

15/25 

ZADANIE DO WYKONANIA NA ZAJĘCIACH 

 

Zmień powyższy skrypt tak, żeby akceptował tylko liczby dodatnie i powtarzał 
się jeżeli warunek ten nie zostanie spełniony.  
 
 
 

 

 

 

 

 

background image

MATLAB 

 4. Skrypty i instrukcje sterujące  2013/2014 

Marcin Kujawa 

 Łukasz Smakosz 

 Politechnika Gdańska 

 WILiŚ 

 Katedra Mechaniki Budowli i Mostów 

16/25 

ZADANIE DO WYKONANIA NA ZAJĘCIACH 

 

Zmień powyższy skrypt tak, żeby akceptował tylko liczby dodatnie i powtarzał 
się jeżeli warunek ten nie zostanie spełniony. 

clear, clc 

  

disp(

'Skrypt oblicza pierwiastek kadratowy liczby a'

)

 

i=

't'

while

 

i==

't'

 

    

clc

  

    

a=input(

'Wprowadz dodatnie a: '

);

 

        

while

 

a<=0 

            

clc 

            

disp(

'Wprowadzona liczba nie jest dodatnia!'

)

 

            

a=input(

'Wprowadz dodatnie a: '

);

 

        

end

 

    

sqrt(a) 

    

i=input(

'Kontynuowac [t/n]? '

,

's'

);

 

end

 

 

pętla wewnętrzna aktywuje się tylko wtedy 
kiedy wprowadzona liczba jest niewłaściwa 

background image

MATLAB 

 4. Skrypty i instrukcje sterujące  2013/2014 

Marcin Kujawa 

 Łukasz Smakosz 

 Politechnika Gdańska 

 WILiŚ 

 Katedra Mechaniki Budowli i Mostów 

17/25 

ZADANIE DO WYKONANIA NA ZAJĘCIACH 

 

Podaj i skomentuj wynik działania następującego skryptu: 
 

tol=1; 

while

 

(1+tol)>1

 

    

tol=tol/2; 

end

 

tol 

 

 

background image

MATLAB 

 4. Skrypty i instrukcje sterujące  2013/2014 

Marcin Kujawa 

 Łukasz Smakosz 

 Politechnika Gdańska 

 WILiŚ 

 Katedra Mechaniki Budowli i Mostów 

18/25 

ZADANIE DO WYKONANIA NA ZAJĘCIACH 

 

Podaj i skomentuj wynik działania następującego skryptu: 
 

tol=1; 

while

 

(1+tol)>1

 

    

tol=tol/2; 

end

 

tol 
 
tol = 
 
   1.1102e-16 

 

 

pętla będzie się powtarzać tak długo, aż wartość 
zmiennej  tol, dzielona na pół przy każdym 
przebiegu, stanie się dla Matlaba nieodróżnialna 
od zera

background image

MATLAB 

 4. Skrypty i instrukcje sterujące  2013/2014 

Marcin Kujawa 

 Łukasz Smakosz 

 Politechnika Gdańska 

 WILiŚ 

 Katedra Mechaniki Budowli i Mostów 

19/25 

Instrukcja warunkowa IF

 

Instrukcja pozwala na wykonanie jednego z kilku ciągów instrukcji zawartych 
pomiędzy instrukcjami ifelseifelse.  
 
Wybór realizowanego kodu zależy od spełnienia sprawdzanych kolejno wyrażeń 
warunkowych  if oraz elseif. Gdy żadne z nich nie jest spełnione, 
wykonywany jest kod występujący za operatorem else
 
Samodzielna instrukcja pozwala na jednorazową realizację fragmentu kodu. 
 

 

background image

MATLAB 

 4. Skrypty i instrukcje sterujące  2013/2014 

Marcin Kujawa 

 Łukasz Smakosz 

 Politechnika Gdańska 

 WILiŚ 

 Katedra Mechaniki Budowli i Mostów 

20/25 

Przykład: 
Stwórz skrypt obliczający rzeczywiste pierwiastki równania kwadratowego 
postaci: 

 

a=10;, b=12;, c=3; 

% definicja stałych

 

d=b^2-4*a*c;  

if

 

d>0 

% jezeli prawda, to...

 

    

disp(

'Delta>0'

)

 

    

x1=(-b+sqrt(d))/(2*a) 

    x2=(-b-sqrt(d))/(2*a) 

elseif

 

d==0 

% jezeli prawda, to...

 

    

disp(

'Delta=0'

)

 

    

x1=-b/(2*a)   

    

x2=x1 

else

 

% jezeli cokolwiek innego to...

 

    

disp(

'Delta<0'

)

 

    

disp(

'brak pierwiastkow rzeczywistych'

)

 

end 

 

 

background image

MATLAB 

 4. Skrypty i instrukcje sterujące  2013/2014 

Marcin Kujawa 

 Łukasz Smakosz 

 Politechnika Gdańska 

 WILiŚ 

 Katedra Mechaniki Budowli i Mostów 

21/25 

Przykład: 
Stwórz skrypt obliczający rzeczywiste pierwiastki równania kwadratowego 
postaci: 

 

a=10;, b=12;, c=3; 

% definicja stałych

 

d=b^2-4*a*c;  

if

 

d>=0 

% jezeli prawda, to...

 

 

    

x1=(-b+sqrt(d))/(2*a) 

    x2=(-b-sqrt(d))/(2*a) 

 

 
 
 

else

 

% jezeli cokolwiek innego to...

 

    

disp(

'Delta<0'

)

 

    

disp(

'brak pierwiastkow rzeczywistych'

)

 

end 

 

 

background image

MATLAB 

 4. Skrypty i instrukcje sterujące  2013/2014 

Marcin Kujawa 

 Łukasz Smakosz 

 Politechnika Gdańska 

 WILiŚ 

 Katedra Mechaniki Budowli i Mostów 

22/25 

Przykład: 
Stwórz skrypt tworzący menu z trzema opcjami, jedną z których jest 'koniec'. 
Niech menu powraca po każdym wyborze do czasu, aż nie zostanie kliknięta 
opcja 'koniec'. 
 

clear, clc 
m=0; 

% def zmiennej aktywujacej petle WHILE

 

while

 

m~=3

  

    

% funkcja menu podstawia za m numer wybranej opcji

 

    

m=menu(

'Tytul'

,

'Opcja 1'

,

'Opcja 2'

,

'Koniec'

);

 

    

if

 

m==1

 

        

disp(

'Opcja 1'

)

 

    

elseif

 

m==2

 

        

disp(

'Opcja 2'

)

 

    

else

 

        

disp(

'Koniec'

)

 

    

end

 

end

 

background image

MATLAB 

 4. Skrypty i instrukcje sterujące  2013/2014 

Marcin Kujawa 

 Łukasz Smakosz 

 Politechnika Gdańska 

 WILiŚ 

 Katedra Mechaniki Budowli i Mostów 

23/25 

Przykład: 
Stwórz skrypt tworzący menu z trzema opcjami, jedną z których jest 'koniec'. 
Niech menu powraca po każdym wyborze do czasu, aż nie zostanie kliknięta 
opcja 'koniec'. 
 

clear, clc 
m=0; 

% def zmiennej aktywujacej petle WHILE

 

while

 

m~=3

  

    

% funkcja menu podstawia za m numer wybranej opcji

 

    

m=menu(

'Tytul'

,

'Opcja 1'

,

'Opcja 2'

,

'Koniec'

);

 

    

if

 

m==1

 

        

disp(

'Opcja 1'

)

 

    

elseif

 

m==2

 

        

disp(

'Opcja 2'

)

 

    

else

 

        

disp(

'Koniec'

)

 

    

end

 

end

 

"Powtarzaj tak długo jak długo 
m jest różne od 3"
,  
tzn. aż w menu nie zostanie 
wybrana opcja nr 3 

background image

MATLAB 

 4. Skrypty i instrukcje sterujące  2013/2014 

Marcin Kujawa 

 Łukasz Smakosz 

 Politechnika Gdańska 

 WILiŚ 

 Katedra Mechaniki Budowli i Mostów 

24/25 

ZADANIE DO WYKONANIA NA ZAJĘCIACH 

Napisz skrypt, który dla dowolnych wartości abc wyliczy wartość d równą: 

 

 gdy a jest większe równe b oraz b jest równe c

 

 gdy a i c są mniejsze równe od b

  ∗  gdy a jest równe b

Jeżeli powyższe warunki nie zostały spełnione, na ekranie ma pojawić się 
stosowny komunikat. 

 

 

 

background image

MATLAB 

 4. Skrypty i instrukcje sterujące  2013/2014 

Marcin Kujawa 

 Łukasz Smakosz 

 Politechnika Gdańska 

 WILiŚ 

 Katedra Mechaniki Budowli i Mostów 

25/25 

ZADANIE DO WYKONANIA NA ZAJĘCIACH 

Napisz skrypt, który dla dowolnych wartości abc wyliczy wartość d równą: 

 

 gdy a jest większe równe b oraz b jest równe c

 

 gdy a i c są mniejsze równe od b

  ∗  gdy a jest równe b

Jeżeli powyższe warunki nie zostały spełnione, na ekranie ma pojawić się 
stosowny komunikat. 

 

a=2;, b=2;, c=5; 

if

 

(a>=b & b==c) 

    

d=a+b 

elseif

 

(a<=b & c<=b) 

    

d=a-c 

elseif

 

(a==b) 

    

d=a*b 

else

 

disp(

'Zaden z warunkow nie jest spełniony!'

)

 

end