• Nie Znaleziono Wyników

 Podstawy programowania w językach wysokiego poziomu cz.2.

N/A
N/A
Protected

Academic year: 2021

Share " Podstawy programowania w językach wysokiego poziomu cz.2."

Copied!
21
0
0

Pełen tekst

(1)

1

Wprowadzenie do informatyki

Podstawy programowania w Matlabie – materiały

pomocnicze do ćwiczenia laboratoryjnego

Temat:

„Podstawy programowania

w językach wysokiego poziomu- środowisko obliczeniowe MATLAB”

Wykonali:

dr inż. BANASIAK Kazimierz kpt. mgr inż. KACZMAREK Paweł

Warszawa 2019 r.

(2)

2 ŚRODOWISKO OBLICZENIOWE MATLAB (MATrix LABoratory)

Matlab to proste w użyciu środowisko łączące obliczenia, wizualizację i programowanie. Zastosowania pakietu to:

obliczenia matematyczne,

algorytmy numeryczne,

modelowanie i symulacja,

analiza danych i wizualizacja,

grafika inżynierska,

aplikacje z wykorzystaniem graficznych interfejsów użytkownika GUI (Graphics User Interface).

Matlab jest systemem interaktywnym, którego podstawową strukturę danych stanowi dwuwymiarowa tablica dynamiczna o nieokreślonej z góry liczbie elementów. Takie podejście pozwala rozwiązywać wiele technicznych problemów, w szczególności opisanych za pomocą macierzy i wektorów, bez definiowania takich struktur (co nie jest możliwe w językach programowania np. typu C).

Dodatkowe biblioteki Matlaba (ang. toolboxes) umożliwiają stosowanie specjalistycznych technologii. Biblioteki składają się z funkcji Matlaba (tzw. m-plików), które poszerzają standardowy zestaw funkcji pakietu o możliwości rozwiązywania specyficznych problemów np.:

o Control System Toolbox- projektowanie układów sterowania o Optimization Toolbox - metody optymalizacji,

o Neural Network Toolbox - sieci neuronowe itp.).

Integralną częścią Matlaba jest Simulink - system, umożliwiający graficzne modelowanie i symulację układów.

Przykład budowy prostego układu i symulacji sygnału i jego wzmacniania przedstawiono na rysunku 1.1.

Rys. 1.1. Przykład Modelu w Simulinku i wyników jego uruchomienia

(3)

3 Pakiet Matlab składa się z podstawowych elementów:

1. język Matlab - język wysokiego poziomu, umożliwiający tworzenie małych programów, jak i kompletnych aplikacji, udostępniający funkcje, obsługę wejścia/wyjścia i elementy programowania obiektowego;

2. środowisko robocze Matlaba - zestaw narzędzi do zarządzania zmiennymi w przestrzeni roboczej, m-plikami, aplikacjami Matlaba oraz do importowania i eksportowania danych;

3. system graficzny - zawierający funkcje wysokiego poziomu do tworzenia 2D i 3D wykresów, funkcje przetwarzania obrazów i tworzenia animacji oraz wiele niskopoziomowych poleceń, umożliwiających kontrolę wyglądu tworzonych grafik i budowę graficznego interfejsu użytkownika (GUI);

4. biblioteka funkcji matematycznych - obejmuje zarówno funkcje podstawowe (np. sumowanie, funkcje trygonometryczne, funkcje liczb zespolonych), macierzowe (np. obliczanie macierzy odwrotnych, wartości własnych) oraz innych specjalnych funkcji matematycznych, np. funkcje Bessela, FFT (Fast Fourier Transform).

Program Matlab po uruchomieniu udostępnia interfejs graficzny użytkownika – rys. 1.2. Podstawowym oknem pracy interaktywnej jest okno Command Window. Użyte zmienne i macierze są pokazywane w oknie Workspace a ostatnie polecenia są pokazywane w oknie Command History. Ikony interfejsu umożliwiają m. in.:

- edycję plików programów;

- uruchamianie i testowanie programów.

Rys.1.2. Graficzny interfejs użytkownika środowiska Matlab

Praca z pakietem Matlab może odbywać się na dwa sposoby:

w trybie bezpośrednim - robocze prowadzenie dialogu pomiędzy użytkownikiem a pakietem na zasadzie:

wpisywanie polecenia – odpowiedź - patrz na operacje macierzowe na rys. 1.3.

Rys. 1.3. Przykład wykonywania obliczeń macierzowych w pracy interaktywnej

Okno poleceń i wyników wykonania

(4)

4

Po uruchomieniu pakietu polecenia można wydawać bezpośrednio w oknie Matlaba. O gotowości świadczy znak zachęty (>>) w oknie Command Window.

w trybie pośrednim - umożliwia efektywne wykonanie obliczeń i prezentację wyników za pomocą uruchomienia programu napisanego w języku pakietu Matlab, czyli tzw. skryptu pisanego w oknie edytora widocznym na rys. 1.4. Uruchamianie programu lub śledzenie jego wykonania instrukcja po instrukcji zapewniają opcje zakładki Debug.

Rys. 1.4. Skrypt programu animacji w Matlabie ilustrującego poszczególne kroki wykonywania i opisu wykresów

1. MATLAB- PODSTAWOWE POJĘCIA

Skrypt to plik zawierający ciąg instrukcji obliczeń zrozumiałych dla Matlaba. Jest zapisywany w pliku

z rozszerzeniem nazwa.m . Taki plik jest określany m-plikiem. Skrypt jest najprostszą formą programu stosowaną do prostych obliczeń. W tab. 2.1 przedstawiono przykład skryptu zapisanego np. w pliku Suma_N_Liczb.m.

Wykorzystane w skrypcie instrukcje disp, input i for Matlaba są omówione w dalszej części instrukcji. Poniżej pokazano wynik uruchomienia powyższego skryptu dla wprowadzonej liczby N=5.

Tabela 2.1. Przykład m-pliku w Matlabie1

Poniżej pokazano wynik uruchomienia skryptu dla wprowadzonej liczby N=5 Program sumuje N kolejnych liczb Ile liczb sumować? Podaj N= 5 Suma N kolejnych liczb=

15

(5)

5

Funkcja to specyficzny plik poleceń w języku Matlab, rozpoczynający się zawsze słowem kluczowym function.

Przykład struktury funkcji pokazano w tab. 2. 2.Po słowie kluczowym musi wystąpić nazwa funkcji. Po nazwie funkcji może wystąpić w nawiasach (…) lista parametrów przekazywanych do funkcji przy jej wywołaniu np. function s= SIL(n). Tu przed nazwa funkcji występuje parametr s (wynik obliczeń) zwracany przez funkcję. Tak zdefiniowana funkcja może być wywołana z innego programu lub z okna Command Window np. poleceniem:

>> wynik= SIL(n)

Tabela 2.2. Przykład programu funkcji

Ważne: Funkcja musi być zapisana w m- pliku o nazwie takiej samej jak nazwa funkcji !.

Program iteracyjny to program, w którym dla osiągnięcia wyniku zastosowano powtarzalne wielokrotnie instrukcje.

Np. przy obliczaniu silni (patrz tabela 2.2) mnożymy wielokrotnie wynik bieżący (patrz wiersz 8) przez kolejną liczbę.

Powtarzanie operacji jest też określane jako iteracja. Stąd mówimy o programach iteracyjnych. Do programowego wykonywania iteracji w Matlabie wykorzystuje się pętle programowe:

for lub while lub też wektoryzację obliczeń

W programie funkcji z tabeli 2.2 (wiersze 6-9) wykorzystano, omawianą dalej szczegółowo, pętlę for.

Program strukturalny

W przypadku konieczności złożonych obliczeń problem jest dzielony na mniejsze problemy rozwiązywane przez funkcje. Taki program to program strukturalny. Przykład pokazano w tabeli 2.3.

Tabela 2.3. Przykład programu złożonego z funkcji głównej i podfunkcji

Wynik obliczeń ( ze zmiennej funkcji s) będzie w utworzonej zmiennej wynik. Na ekranie będzie widoczny rezultat:

wynik=

120

Przykładowe wyniki programu z tabeli 2.3:

Podaj n calkowite n=5 Wynik obliczen: 5 ! = 120 Podaj n calkowite n=0 Wynik obliczen: 0 ! = 1 Podaj n calkowite n=-5

Podano n =-5 ujemne! Silnia nie istnieje

>>

(6)

6 Program strukturalny to program, który najczęściej składa się z:

A) jednego pliku zawierającego funkcję główną ( tu SilniaLiczbyN - patrz w tabeli 2.3) oraz funkcji składowych wywoływanych w funkcji głównej - tu tylko jedna funkcja SIL. Cały program zawierający wiele funkcji jest zapisywany w jednym pliku o nazwie dokładnie takiej jak nazwa funkcji głównej (tu SilniaLiczbyN). Ułatwia to zarzadzanie plikami w komputerze. Przy tego typu organizacji mówimy często o podfunkcjach.

B) głównego segmentu (skryptu) i funkcji własnych, które są zapisane jako oddzielne pliki o nazwach takich jak nazwa każdej wykorzystywanej funkcji. Taka wieloplikowa organizacja utrudnia zarzadzanie plikami.

Warto podkreślić, ze mogą być funkcje, które nie mają parametrów wejściowych (np. funkcje pobierające dane z klawiatury) lub wyjściowych ( np. funkcje drukujące wyniki).

W przedstawionym w tabeli 2.3 programie w funkcji głównej (wiersze 13 ,14 oraz 16,17,18) zastosowano bardziej złożone instrukcje wyprowadzania informacji na ekran (instrukcje sprintf, wektory tekstowe […] i instrukcje disp([…]). Umożliwiają one przejrzyste formatowanie informacji wynikowej i są omawiane w dalszej części instrukcji.

Uwaga:

Dystrybutorem oprogramowania Matlab w Polsce jest firma : ONT Oprogramowanie Naukowo Techniczne. Kraków

Aktualnie ( od 2 lat) studenci WAT mogą korzystać z darmowej licencji Matlaba, szczegółowe warunki licencji użytkownika oraz procedura instalacji dostępna jest na stronie internetowej WAT->Rozwój->Dystrybucja oprogramowania.

Informacje i przykłady dotyczące algorytmizacji i podstaw Matlaba są w książce:

K. Banasiak : Algorytmizacja i programowanie w Matlabie”

Książka ta ( również inne książki z zakresu studiów) jest dostępna w wydawnictwie BTC, księgarniach

internetowych i księgarniach naukowo- technicznych.

(7)

7

2. INSTRUKCJE WPROWADZANIA I WYPROWADZANIA DANYCH

W środowisku Matlab zmienne rzeczywiste np. x=12.345 czy L=321 są traktowane jako macierze o nazwach x i L i domyślnie o rozmiarach 1x1. Wpisanie w Matlabie polecenia np. L=321 spowoduje powołanie zmiennej L i nadanie jej wartości. Zmienne mogą też zawierać więcej liczb i są wtedy wektorami. Powołanie wektora liczb wymaga użycia w zapisie nawiasów kwadratowych. Np. zapis W=[1 3 5 7] spowoduje utworzenie wektora wierszowego a zapis z innymi separatorami liczb np. K=[1; 3; 5; 7] spowoduje utworzenie wektora kolumnowego o identycznej zawartości jak W. Zmienne mogą zawierać kilka równolicznych grup liczb i są wówczas macierzami.

Np. zapis M=[1 2 3

;

6 5 4] spowoduje utworzenie macierzy o 2 wierszach i 3 kolumnach. Powołanie zmiennej tekstowej Z zawierającej literę T wymaga zapisu Z=’T’. W podobny sposób tworzy się zmienne tekstowe zawierające więcej niż jeden znak np. W=’TAK’. Wówczas zostanie utworzony trzy elementowy wektor W a zmienna W będzie typu char.

Instrukcja input

Powołanie w programie zmiennej liczbowej (macierzy 1x1) np. L i nadanie jej wartości liczbowej wpisywanej z klawiatury może być zrealizowane instrukcją input np.:

L= input(’Wprowadz L= ’)

Wpisywaną liczbę należy zaakceptować naciskając Enter.

Powołanie w programie wektora WL zawierającego N liczb (macierzy 1x N) wpisywanych z klawiatury może być zrealizowane również instrukcją input np.:

WL= input(’Wprowadz wektor […] WL= ’)

W przypadku definiowania wektora liczb właściwą ilość liczby należy wpisać w nawiasach klamrowych oddzielając kolejne liczby przecinkami lub spacjami. W przypadku macierzy wielowierszowej wiersze należy rozdzielać średnikiem ( ; ). Powołanie w programie zmiennej tekstowej np. Z (macierzy 1x1) i nadanie jej wartości kodu ASCII litery (np. T lub t) może być też zrealizowane instrukcją input o poniższej strukturze np.:

Z = input(’Wprowadz L=’,’s’)

W powyższym zapisie znak ‘s’ oznacza słowo string (ang. ciąg znaków).

Zmienną tekstową zawierającą więcej znaków (np. n) można utworzyć identycznie jak zmienną zawierającą jeden znak, ale w pamięci jest to macierz wierszowa Z[1x n] o liczbie elementów n równej ilości znaków tekstu.

Instrukcja disp i sprintf

Wartości zmiennych np. x i/lub tekstów można wyświetlać instrukcją disp np.:

disp('Wartosc x = '), disp(x)

Jeśli zmienna x zawiera wartość 123.456 to każda użyta w powyższym zapisie instrukcja disp wyświetla swój wynik w kolejnym wierszu jak niżej:

Wartosc x = 123.4560

Aby wyświetlić wynik w jednym wierszu należy utworzyć wektor tekstowy. Wektor tekstowy […] musi łączyć opis zmiennej (np. Wartosc x=) i jej wartość np. x=12.34557. Jednak ponieważ wartość liczbowa jest numeryczna i wymaga ona konwersji na tekst funkcja Matlaba num2 str (ang. numeric to string). Wektor ten można wyświetlić instrukcją disp np.:

disp( ['Wartosc x =', num2str(x) ] )

Wygodną instrukcją do wyświetlania wyników jest sprintf. np. definiujemy zmienną x i wyświetlimy jej wartość:

x =12.34567;

T= sprintf( 'Wartosc x = %4.3f', x ); disp(T);

Wówczas wyświetlony wynik będzie jak niżej:

Wartosc x = 12.346

(8)

8

3. STEROWANIE PRZEBIEGIEM OBLICZEŃ W PROGRAMACH Instrukcja sterująca if…elseif….else… end

W programie instrukcje wykonywane są sekwencyjnie tzn. jedna po drugiej. Kolejność wykonywania może być zmieniona przez instrukcję sterującą if. Ta konstrukcja języka nazywana jest też instrukcją warunkową lub wyboru. Na rys. 4.1 przedstawiono schemat prostej instrukcji sterującej, jej strukturę programowa i przykład.

Powoduje ona, że pewna część programu ma być wykonana tylko wtedy, gdy spełniony jest (bądź niespełniony ) określony warunek. Wykonanie instrukcji rozpoczyna się od wyznaczenia wartości logicznej wyrażenia, które jest określone jako warunek w1.

Rys. 4.1. Prosta instrukcja sterująca if

W warunkach logicznych stosowane są operatory logiczne:

- > -większy np.. L>0, - >= - większy równy np. L>=0, - == - równy np. L==99 - <= - mniejszy równy L<= P - ~= - różny np. L ~=0

Wyrażania mogą składać się z wielu członów logicznych połączonych operatorami sumy logicznej (II ) lub iloczynu (&&) logicznego np.:

- ( L>= -5 && L<=5 ) – określa czy liczba L jest z przedziału [-5, 5], - ~ ( L>= -5 && L<=5 ) – określa czy liczba L jest spoza przedziału [-5, 5],

- (Znak==’T’ II Znak == ‘t’) – określa czy zmienna Znak zawiera literę t (mała lub duża)

Rys. 4.2 przedstawia schemat wyboru alternatywy w instrukcji sterującej, jej strukturę programową i przykład.

Natomiast na rys. 4.3 przedstawiono schemat złożonej instrukcji sterującej, jej strukturę programowa i przykład.

Rys. 4. 2. Prosta instrukcja sterująca if - wybór alternatywy

W szczególnej sytuacji blok może zawierać tylko pojedynczą instrukcję. Każdy warunek W w instrukcjach if jest wyrażeniem logicznym i zwraca wartość logiczną –jeśli wartość będzie prawda (true) to instrukcje w bloku

Zapis w Matlabie:

if (W1) Instrukcje 1 end

gdzie:

W1-warunek W1

Instrukcje lub blok instr.

T

N Zapis w Matlabie:

L=input(‘Podaj Liczbe L=’) if (L> 0)

disp(‘ L=’) disp(L)

disp(‘ jest dodatnia)’

end

Zapis programowy w Matlabie:

If (W)

Instrukcje 1 else

Instrulcje 2 end gdzie:

w-warunek

Zapis w Matlabie:

L=input(‘Podaj Liczbe L= ’) If (L> 0)

disp(‘Liczba L> 0)’

else

disp(‘Liczba L nie jest dodatnia’);

end

W

Instrukcje Lub blok instrukcji

T N

Instrukcje Lub blok instrukcji

Inny zapis w Matlabie:

L=input(‘Podaj L=’) if (L> 0)

T=[‘ L=’, num2str(L), ‘ jest dodatnia’];

disp(T) end

(9)

9

zostaną wykonane a jeśli warunek ma wartość false to instrukcje są pomijane. W przykładach instrukcji dla lepszej przejrzystości warunki logiczne zapisane zostały w nawiasach, ale nie jest to obligatoryjne.

Rys. 4.3. Złożona instrukcja sterująca if

W blokach opisanych jako instrukcje 1, instrukcje 2 albo instrukcje 3, mogą znajdować się zarówno instrukcje proste, jak i strukturalne, w szczególności inne instrukcje warunkowe. W takim przypadku mówimy, że instrukcje warunkowe są zagnieżdżone- patrz zapis w programie tabela 4.1.

Tabela 4.1 Zapis zagnieżdżonych instrukcji sterujących w programie wyznaczania pierwiastków równania kwadratowego

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28

% Skrypt oblicza pierwiastki równania kwadratowego

% Wejście: a,b,c - wprowadzane z klawiatury współczynniki RK

% Wyjście: Wyniki są wyświetlane w oknie Command Window clc; clear; format compact;

a=input('Podaj a=');

b=input('Podaj b=');

c=input('Podaj c=');

% <========= M-ce na ewent. wstawienie wykresu i prezentacje rozwiązania graficznego ============

if a~= 0 % teraz obliczenia delta=b*b-4*a*c;

if delta>0

x1=(-b-sqrt(delta))/(2*a);

x2=(-b+sqrt(delta))/(2*a);

disp( ' x1='); disp(x1);

disp( 'x2=' ); disp(x2);

% lub inny sposób wyświetlania wyników disp([ 'x1= ', num2str(x1)]);

disp([ 'x1= ', num2str(x1)]);

elseif delta==0

Wynik=[ 'P1= P2= ', num2str( -b/(2*a)) ];

disp(Wynik) else

disp('Brak pierw. rzeczywistych');

end else

disp('Jest a=0 - to nie rownanie kwadratowe ! ');

disp(' Może być: liniowe, sprzeczne lub tożsamościowe');

end

Zapis programowy w Matlabie:

if (W1) Instrukcje 1 elseif (W2) Instrulcje 2 else

Instrukcje 3 end

gdzie:

w1, w2-warunki

Zapis w Matlabie:

L=input(‘Podaj Liczbe L=’) if (L> 0)

disp(‘Liczba L> 0)’

elseif (L==0) disp(‘Liczba=0’) else

disp(‘Liczba ujemna’) end

W1

T

N

Instrukcje 1

W2 T

N

Instrukcje 2

Instrukcje 3

Wprowadzenie współczynników RK : a, b, c

Obliczenia

pierwiastków lub komunikat o ich braku

Wprowadzono a=0

Komunikat

(10)

10

Zadania do samodzielnego wykonania:

Zadanie 4.1

Narysuj algorytm i napisz program rozwiązywania równania kwadratowego dla wprowadzonych wartości parametrów a, b, c. Użyj tylko prostych instrukcji sterujących.

Zadanie 4.2

Narysuj algorytm i napisz program rozwiązywania równania kwadratowego dla wprowadzonych wartości parametrów a, b, c. Użyj 2 prostych instrukcji sterujących i jednej instrukcji alternatywy.

Zadanie 4.3

Narysuj algorytm i napisz program rozwiązywania równania kwadratowego dla wprowadzonych wartości parametrów a, b, c. Użyj 1 prostej instrukcji sterującej i jednej instrukcji alternatywy. Nie stosuj zagnieżdżania instrukcji.

Zadanie 4.4

Zmodyfikuj program z zadania 4.1 stosując sposób wyprowadzania danych jak w przykładzie na rys. 4.1. Zastosuj również alternatywne rozwiązanie stosując instrukcję sprintf(). Jej opis znajdź w helpie.

Zadanie 4.5

Zmodyfikuj program z zadania 4.2 stosując sposób wyprowadzania danych jak w przykładzie na rys. 4.1. Zastosuj również alternatywne rozwiązanie stosując instrukcję sprintf(). Jej opis znajdź w helpie.

Zadanie 4.6

Zmodyfikuj program z zadania 4.3 stosując sposób wyprowadzania danych jak w przykładzie na rys. 4.1. Zastosuj również alternatywne rozwiązanie stosując instrukcję sprintf(). Jej opis znajdź w helpie.

(11)

11

Przykłady zastosowania instrukcji sterujących

Zadanie 4.7

Sformułuj algorytm i zapisz w Matlabie program sprawdzający czy z boków o długościach a, b, c można zbudować trójkąt. Parametry a,b,c są wprowadzane z klawiatury.

Specyfikacja danych:

Dane wejściowe:

a, b, c – zadane długości boków, Wynik

T – zmienna logiczna (np. od nazwy Trójkąt Istnieje) przyjmująca wartości:

T=Tak (True) – jeśli trójkąt istnieje lub T=Nie (False) – jeśli trójkąt nie istnieje Lista kroków

1. Wprowadź: a, b, c

2. Zmiennej T przypisz wartość początkową False 3. Jeśli a+b >c oraz a+c >b oraz c+b >a to T=True 4. Jeśli T=False to pisz: Trójkąt nie istnieje 5. Jeśli T=True to pisz: Trójkąt istnieje 6. Koniec

Schemat blokowy

Rys. 4.4. Schemat blokowy algorytmu zadania N

T

Koniec Początek

T =False ( lub T=0 )

a+b >c T

T b+c >a

c+a >b

T =True (lub T=1)

T=True

T

Trójkąt istnieje Trójkąt nie istnieje

N N N Wprowadź: a, b, c

Sprawdź dla danych (a, b, c ) np:

W1 – (12, 4, 8) W2 – (12,10, 8) W3 –(12, 5, 6)

Tabela 4.1. Program w Matlabie 1

2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19

clc; clear; close all

disp('Algorytm sprawdza istnienie trójkąta’);

disp('o bokach a, b, c') ; a = input('Podaj bok a: ');

b = input('Podaj bok b: ');

c = input('Podaj bok c: ');

T = false;

if (a+b) > c if (b+c) > a if (c+a) > b T = true;

end;

end;

end;

if T == true

disp('Trójkąt istnieje');

else

disp('Trójkąt nie istnieje');

end;

Rys. 4.2. Program w Matlabie

(12)

12

Zadanie 4.8

Sformułuj algorytm sprawdzający czy z boków o długościach a, b, c można zbudować trójkąt.

Użyj zmiennych i operacji logicznych.

Specyfikacja danych:

Dane wejściowe:

a, b, c – zadane długości boków (zmienne liczbowe, liczby dodatnie), Zmienne pomocnicze (robocze)

A, B, C – zmienne logiczne przyjmujące wartości 0 lub 1

np. C=1 (True) jeśli jest prawdziwa relacja a+b>c a jeśli nieprawdziwa to C=0 (False).

Wynik

T – zmienna logiczna (np. od nazwy Trójkąt ) przyjmująca wartości:

T=Tak (True) – jeśli trójkąt istnieje lub T=Nie (False) – jeśli trójkąt nie istnieje

Rys. 4.5. Schemat blokowy algorytmu

Tabela 4.2. Program w Matlabie 1

2 3 4 5 6 7 8 9 10 11 12 13 14 15

clc; clear; close all

disp('Algorytm sprawdza istnienie trójkąta );

disp('o bokach a, b, c') ; a = input('Podaj bok a: ');

b = input('Podaj bok b: ');

c = input('Podaj bok c: ');

C= a+b > c % A, B,C, T będą wyświetlone A= b+c > a

B= c+a > b T = A&B&C if T == true

disp('Trójkąt istnieje');

else

disp('Trójkąt nie istnieje');

end;

&- symbol iloczynu logicznego AND

| - symbol sumy logicznej OR

Koniec Początek

C = a+b >c A = b+c >a B =c+a >b

T=Tru e

T

Trójkąt istnieje N

T= C & A & B

Trójkąt nie istnieje Wprowadź: a, b,

c

(13)

13

Złożone warunki logiczne w instrukcjach sterujących

Wykonanie niektórych instrukcji (lub grup instrukcji) zależy od wartości warunków logicznych. Warunki logiczne mogą być proste (np. x>0) lub mogą być wyrażeniami logicznymi (np. L>0 && mod(L,2)==0 && (L>= 10 && L<100)), w których wykorzystywane są operatory iloczynu (&&) lub alternatywy (||). W poniższych przykładach zadań pokazano przykłady wykorzystania warunków logicznych w rozwiazywaniu różnych problemów.

Zadanie 4.9

Napisz skrypt sprawdzający czy wprowadzona liczba L jest dodatnia i całkowita

Rozwiązanie 1 Rozwiązanie 2

clc; clear; close all;

format compact;

L=input('Podaj liczbę L= ');

if L>0 && mod(L, 1)==0

disp('Liczba spełnia warunki');

else

disp('liczba nie spełnia warunków');

end

clc; clear; close all;

format compact;

L=input('Podaj liczbę L= ');

if L>0 && round(L) - L==0 disp('Liczba spełnia warunki');

else

disp('liczba nie spełnia warunków');

end

Zadanie 4.10

Napisz skrypt sprawdzający czy wprowadzona liczba L jest dodatnia, parzysta i 2 cyfrowa.

Rozwiązanie clc; clear; close all;

format compact;

L=input('Podaj liczbe L= ');

if L>0 && mod(L,2)==0 && (L>= 10 && L<100) disp('Liczba spełnia warunki');

else

disp('liczba nie spelnia warunkow');

end

Zadanie 4.11

Napisz skrypt sprawdzający czy wprowadzony znak jest literą T lub t.

Rozwiązanie clc; clear; close all;

format compact

Z=input('Podaj znak Z= ', 's');

if Z=='T' || Z=='t'

disp(' Znak jest właściwy') else

disp(' To nie jest dobry znak') end

(14)

14

4. PĘTLE for i while W PROGRAMOWANIU

W języku Matlab występują dwie pętle: for i while. Pętle służą do wielokrotnego powtarzania pewnych identycznych czynności. Instrukcja for (rys. 5.1) powoduje wykonanie bloku instrukcji tyle razy, ile wartości znajduje się w przedziale wyznaczonym przez wartości początkową P i końcową K zmiennej sterującej s. Liczba tych wartości zależy od wartości krok. Jeśli krok nie jest podany to domyślnie jest przyjęte ze krok=1. Pętla for wykonuje się znaną, i z góry określoną liczbę razy. Każdorazowo wartość zmiennej sterującej zmienia się wg zależności:

s=s+krok.

Rys. 5.1. Schemat pętli for i jej zapis w Matlabie

Czasami, zapisana w programie pętla for może nie zostać zrealizowana, ( nie spełniony jest warunek np. dla pętli for i=1:1:0 widać, ze Wk <Wp). Wtedy blok instrukcji przeznaczony do powtórzeń nie będzie wykonany nawet raz. Pętla for jest elastyczna. Zmienna sterująca może być typu całkowitego lub niecałkowitego. Jej wartości mogą zmieniać się o dowolny krok (np. 0.1). W przypadku gdy zmienna sterująca ma zmieniać się co 1, w definicji pętli for można pominąć jeden dwukropek i wyrażenie krok. Jeżeli potrzebna jest pętla zliczająca w dół, tzn. wartość początkowa jest większa od końcowej, to trzeba nadać ujemną wartość stałej krok.

W przypadkach, gdy liczba powtórzeń pętli nie jest z góry znana, wygodnie jest stosować pętlę while. Realizacja tej pętli jest zależna od spełnienia postawionego na początku warunku kontynuacji. Wykonanie „bloku powtarzanych instrukcji" jest powtarzane dopóki jest spełniony jest warunek. Jednocześnie jedna z instrukcji bloku musi mieć wpływ na wartość warunku, gdyż w innym przypadku pętla nie mogłaby się skończyć. Postać warunku jest taka sama, jak w instrukcji if. W pętli while rys. 5.2 najpierw jest sprawdzany warunek.

Rys. 5.2. Schemat pętli while i jej zapis w Matlabie

Konstrukcja for w Matlabie:

for s=P : krok: K

Blok powtarzalnych instrukcji;

end gdzie:

s- zmienna sterująca pętli P- wartość początkowa K- wartość końcowa krok- wartość zmian s Nadanie wartości początkowej

zmiennej sterującej s

Warunek kontynuacji

obliczeń

Zmiana wartości zmiennej sterując

ej Blok powtarzalnych

Instrukcji T

N

while (warunek)

Instrukcje;

end

Przykład:

Sumowanie N kolejnych liczb dodatnich

N=input(‘Podaj liczbe calk. N= ’) Suma=0;

for j=1: 1: N Suma=Suma+j;

end

disp(‘Wynik=’);

disp(Suma)

Przykład:

Sumowanie N kolejnych liczb dodatnich

N=input(‘Podaj liczbe calk. N= ’) Suma=0;

j=1;

while (j <=N) Suma=Suma+j;

j=j+1;

end

disp(‘Wynik=’);

disp(Suma) Blok powtarzalnych

Instrukcji

Warunek kontynuacji

obliczeń

T

N Nadanie wartości początkowych

zmiennych

(15)

15

Wyrażenie warunek jest typu logicznego (podobnie jak w instrukcji if) i może przyjmować tylko wartości: true lub false. Jeżeli warunek jest prawdziwy (spełniony), pętla się wykona, w przeciwnym wypadku następuje wyjście z pętli. Jeśli przed rozpoczęciem iteracji (powtórzeń) pętli warunek nie jest spełniony, to blok instrukcji nie zostanie wykonany ani jeden raz, a realizacja pętli while zostanie zakończona. Wystąpienie gdziekolwiek w pętli instrukcji break powoduje natychmiastowe zakończenie pętli, a program realizuje się dalej (poza pętlą). Przykładowe zastosowanie pętli while to wystawianie rachunku przez kasjerkę. Tu liczba produktów w zapełnionym koszyku nie jest znana. Algorytm wystawienia rachunku polega na wielokrotnym dodawaniu ceny kolejnego towaru do aktualnej sumy już zsumowanych cen zakupów. Czynnością początkową jest zerowanie rachunku klienta w kasie fiskalnej.

Algorytm tworzenia rachunku można zapisać jak poniżej:

1 Rachunek=0 (uruchom kasę)

2 Warunek: Dopóki koszyk nie jest pusty wykonuj:

-pobierz kolejny produkt z koszyka i odczytaj jego cenę, - aktualizuj rachunek wykonując działanie:

Rachunek=Rachunek +cena kolejnego produktu

(powyższy zapis należy rozumieć że: nowy rachunek = stary rachunek + cena kolejnego produktu) 3. Wystaw paragon do zapłaty

Pokazana tu czynność 2 może być realizowana wielokrotnie i a’priori nie wiadomo ile razy.

Jest to typowe dla pętli typu while. Tu zdanie w punkcie 2 można zapisać: while ( koszyk nie pusty).

Każda pętla wykonywana jest pewną liczbę razy. Tu o zakończeniu pętli decyduje opróżnienie koszyka.

Zadanie 5.1

Przedstawić algorytm i napisać program obliczający wektor n=12 wartości zmiennej x oraz funkcji f(x) = a*x^2 +b*x + c. Do obliczeń przyjąć, że zmienna x przyjmuje wartości z przedziału [-10, 10]. Obliczane wartości zapamiętać w wektorach wierszowych Wx i Wf i na tej podstawie wykonać wykres funkcji f(x).

W programie zapewnić wczytywanie współczynników a, b, c z klawiatury.

Specyfikacja danych:

Dane wejściowe:

a,b,c- współczynniki funkcji f(x) = a*x^2 +b*x + c wczytywane z klawiatury L, P- wartość najmniejsza (Lewa) i największa (Prawa) zmiennej niezależnej x n- założona liczba punktów wykresu.

Zmienne robocze:

krok- różnica wartości dla każdej pary kolejnych wartości zmiennej niezależnej xn - xn-1,

j- zmienna oznaczająca numer wartości zmiennej x (indeks).

Dane wyjściowe (wynikowe):

Wx(1: n)- n-elementowy wektor wartości zmiennej niezależnej x, Wf(1: n)- n-elementowy wektor wartości funkcji f(x).

Dalej na rys. 3 przedstawiono schemat blokowy algorytmu rozwiązania zadania. Natomiast w tabeli 5.1 przedstawiono instrukcje programu w Matlabie a na rys. 5.6 pokazano okno edytora programu.

W rozwiązaniu przedstawianego programu zastosowano pętlę for.

W tabeli 5.1 w wierszach 1-16 przedstawiono program tablicowania funkcji i wykonania jej wykresu. Na końcu programu (wiersze18-21) dodano instrukcje opisujące wykres a w wierszach 22-25 dodano instrukcje wyświetlania wektorów Wx i Wf.

W tabeli 5.2 przedstawiono inne sposoby zapisu pętli for. Pokazano też alternatywny zapis wektorowy tablicowania funkcji. Takie rozwiązanie występuję tylko w Matlabie a jego cechą jest:

- prostota zapisu,

- ogromna szybkość wykonywania.

W tabeli 5.3 przedstawiono inne zapisy pętli tablicowania funkcji wykorzystującej instrukcję while.

(16)

16 Rys. 5.3. Schemat blokowy tablicowania funkcji

Tabela 5.1. Program tablicowania funkcji w Matlabie 1

2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25

%---Początek programu---

% Tablicowanie funkcji f(x)= a*x^2 +b*x + c clc; clear; close all;

format compact; format short;

a=input('Podaj a = ');

b=input('Podaj b = ');

c=input('Podaj c = ');

L=-10; P=10; n=50; % zadawane parametry stałe krok=(P-L)/(n-1);

j=1;

for x=L: krok: P

Wx(j)=x; %wartosci zmiennej x

Wf(j)=a*x^2 +b*x+c; %wartosci funkcji dla zmiennej x j=j+1; %j- numer kolejnej wartości x i f(x) end

plot(Wx, Wf, '*-'); % wykres f(x)

% poniżej podstawowe opisy uzupełniające wykres xlabel('\bf zmienna niezalezna x')

ylabel('\bf f(x)= a*x^2 +b*x+c')

title('\bf \it Wykres f(x)= a*x^2 +b*x+c', 'FontSize' , 16 ) legend( 'f(x)' )

disp('Zawartości wektorów Wx i Wf:');

TWx= sprintf('%7.2f ',Wx); % Utworzenie wektora TWx do wydruku zawatrosci Wx disp( TWx); % wydruk wektora TWx

TWf= sprintf('%7.2f ',Wf);

disp(TWf);

Czyść zmienne, ekran, zamknij okna wykresów.

Wprowadź współczynniki równania: a, b, c

Utwórz zmienne i nadaj im wartości:

L=-10; P=10; n=12; krok=(P-L)/(n-1)

Wykonaj wykres funkcji : f(x)=a*x^2 +b*x +c poleceniem : plot(Wx, Wf)

Początek

Zapis programowy pętli w Matlabie:

j=1;

for x=L: krok: P Wx(j)=x;

Wf(j)=a*x^2+ b*x+ c;

j=j + 1;

end

Koniec x<P

Wx(j)=x Wf(j)=a*x^2+b*x+ c

j=j+1 x=x+ krok T

N

x=L, j=1

Wykonanie i opis wykresu Tablicowanie

funkcji Wprowadzenie danych i wartości

ustalonych

(17)

17

W programie przedstawionym w tabeli 3 następujące wiersze zawierają:

-1-2 komentarze

- 3-15 instrukcje realizujące zadanie tablicowania z wykorzystaniem pętli for, - 16 instrukcję wykonującą wykres,

- 18-21 instrukcje opisujące wykres

-22-26 to wyświetlające w oknie Command Window zawartości wektorów Wx i Wf.

Tabela 5.2 Warianty pętli for i obliczeń wektoryzowanych for- wersja 1

(patrz w tab. 1) for- wersja 2 for-wersja 3 Obliczenia

wektoryzowane j=1;

for x=L: krok: P Wx(j)=x;

Wf(j)=a*x^2+ b*x+ c;

j=j+11;

end

x=L;

for j=1: 1 : n Wx(j)=x;

Wf(j)=a*x^2+ b*x +c;

x=x+ krok;

end

for j=1: 1 : n x= L+(j-1)*krok;

Wf(j)=a*x^2+ b*x +c;

x=x+ krok;

end

x= L: krok: P Wx=x;

Wf=a*x.^2 +b*x +c

Tabela 5.3 Warianty pętli while i obliczeń

while- wersja 1 while - wersja 2 while – wersja 3 x=L;

while x <= P Wx(j)=x;

Wf(j)=a*x^2+ b*x+c;

x=x+krok;

j=j+1;

end

j=1; x=L;

while j <= n Wx(j)=x;

Wf(j)=a*x^2+ b*x+c;

x=x+krok;

j=j+1;

end

j=1;

while j <=1 x= L+(j-1)*krok;

Wx(j)=x;

Wf(j)=a*x^2+ b*x+c;

j=j+1;

end

Opis działania programu tablicowania funkcji przedstawionego w tabeli 5.1:

Instrukcje w wierszu 4 i 5 oznaczają:

clc - polecenie czyszczenia ekranu wyników (okno Command) clear - usuwanie wszystkich zmiennych z pamięci roboczej Matlaba close all – zamknięcie wszystkich wykresów (jeśli były)

format compact – pisanie w oknie Command Windows bez wstawiania pustych wierszy format short- wyświetlanie liczb z dokładnością 4 miejsc po przecinku

Instrukcje w wierszu 5,6 i 7 :

Tworzą one w pamięci Matlaba (patrz okno Workspace) zmienne a,b i c . Wartości tych zmiennych są nadawane z klawiatury.

Wartości a,b, c to zmienne wejściowe.

Instrukcje w wierszu 8 :

W tym wierszu są trzy instrukcje podstawienia. Tworzą one w przestrzeni roboczej Matlaba zmienne L,P o n.

Ich znaczenie fizyczne przedstawiono w opisie danych.

Instrukcja w wierszu 9 :

Instrukcja oblicza wartość kroku krok=(P-L)/(n-1) zmian zmiennej x.

W wierszach 11- 15 zapisano pętlę for. Zaznaczono ją elipsą wskazującą zakres powtarzalnych instrukcji.

W petli for zawsze możemy określić ile razy będzie ona powtarzana. W tym przykładzie będzie to dokładnie n razy.

Jest tak, bo pętla (wiersz 11 zmienia x z krokiem zależnym do n.

Wartość zmiennej krok jest wykorzystywana do zmiany kolejnych wartości zmiennej x w pętli for (początek wiersz 11) Pierwszą wartością zmiennej x jest: x=L

Kolejna to: x=x+krok (inaczej L+krok) Następna: x=x+krok (inaczej L+2*krok)

………itp.

Ostatnia to: x=P

(18)

18

W pętli do wskazywania miejsca pamiętania wyników obliczeń w wektorach Wx(1:n) i Wf(1:n) będzie wykorzystana zmienna indeksowa j. Jest ona inicjowana przed pętlą (wiersz 10) i otrzymuje wartość j=1;

W wierszu 11 tworzone są kolejne wartości zmiennej x zaczynając od wartości x=P.

W kolejnym kroku wartość zmiennej x zwiększa się o wartość kroku. Czynności te powtarzają się aż do osiągniecia przez zmienną x wartości górnej tzn. x=P.

Każda tworzona wartość zmiennej x jest zapamiętywana w j-tej komórce pamięci wektora Wx(j) - wiersz12.

Dla każdej wartości x w wierszu 13 obliczana jest wartość funkcji f(x) i zapamiętywana w j-tej pozycji wektora Wf(j).

Po każdym wykonaniu pętli wartość zmienne j wzrasta 1 (wiersz 14- j=j+1).

Zapis j=j+1 należy interpretować następująco:

nowa wartość j (w zapisie czerwona z lewej strony) będzie poprzednią wartością zwiększoną o 1 (czyli prawą stronę zapisu).

Wiersz 15 to koniec pętli for.

Wiersz 16 to polecenie plot dotycząca wykonania wykresu.

Wektory zmiennej niezależnej (tu Wx) i wartości funkcji (tu Wf) muszą mieć ten sam wymiar (tu jest to n=12).

Trzecim parametrem funkcji plot jest string (ciąg znaków) ' *-' . Są one opcjonalne i dotyczą sposobu oznaczenia serii danych na wykresie. Wykorzystane w przykładzie symbole podane oznaczają:

* - punkty (x, f(x) ) mają zostać oznaczone na wykresie symbolem *, - - punkty należy połączyć linią ciągłą,

r- wykres wykonać w kolorze czerwonym.

Zrozumienie opisanego działania pętli for ułatwi przykład pokazujący wynik działania pętli tablicowania dla parametrów:

a=2, b=7, c=1, L=-10, P=10, n=12

Dla powyższych danych wartość kroku wyniosła: krok = 1.8182

Stąd zawartość wektorów Wx i Wf będzie taka jak przedstawiono poniżej w tabeli 5.4:

Tabela 5.4. Wyniki obliczeń zawartości wektorów Wx i Wf w programie z tabeli 1

j 1 2 3 4 5 6 7 8 9 10 11 n=12

Wx(j) -10.00 -8.18 -6.36 -4.55 -2.73 -0.91 0.91 2.73 4.55 6.36 8.18 10.00

Wf(j) 131.00 77.61 37.45 10.50 -3.21 -3.71 9.02 34.97 74.14 126.54 192.16 271.00

Na podstawie obliczonych wektorów Wx i Wf instrukcja plot(Wx, Wf, '*-') programu wykonuje wykres widoczny na rys. 5.4.

Wykres zostaje dodatkowo opisany przez polecenia w liniach 16-21 (opisy osi, tytuł i legenda).

Rys. 5.4. Wykres przebiegu funkcji f(x) dla parametrów : a=2, b=7, c=1, L=-10, P=10, n=12

Wiersze 18-21 opisują dokładniej rysunek 1. Wiersz 18 powoduje umieszczenie pogrubionego( (\bf) – bold font ) tekstu opisu osi x.

Wiersz 19 powoduje umieszczenie pogrubionego( (\bf) – bold font ) tekstu opisu osi y.

Wiersz 20 wykonuje tytuł (\bf- pogrubiony , \it- italic czyli pochylony. Instrukcja nadaje tytułowi nowy atrybut wielkości czcionki (FontSize) równy 14 punktów.

(19)

19

Końcowe instrukcje (wiersze 22-26) wyświetlają z dokładnością do 3 miejsc (format np. %7.3f ) zawartości wektorów Wx i Wf w oknie Command Window.

Na rys. 5.5 przedstawiono okna starszego środowiska obliczeniowego Matlab wersja R2011a z wynikami obliczeń programu z tab. 5.1. Wyniki są zawarte w podstawowych oknach charakterystyczne dla każdej wersji środowiska Matlaba:

- Command Window - Workspace - Command History.

W oknie Command Window widoczne są:

- instrukcje wejścia i efekt wprowadzania danych do programu

- zawartość obliczonych w pętli for ( patrz instrukcje 10-15 tabela 5.1) wektorów Wx i Wf.

W oknie Workspace pokazane są nazwy zmiennych wykorzystywanych w programie, ich typy rozmiary.

W oknie Command History są wyświetlane wprowadzane polecenia lub dane. Pozwala to na szybkie ponowne ich wykorzystanie.

Rys. 5.5. Okna środowiska Matlab wersja R2011a

Na rys. 5.6 przedstawiono okno Edytora z programem. Do uruchamiania i śledzenia programu (np. przy jego wykonywaniu instrukcja po instrukcji służy menu zakładki Debug.

Rys. 5.6. Okno edytora programu w środowisku Matlab.

(20)

20

Zadanie 5.2

Napisać program obliczający wektor n=50 wartości zmiennej x oraz funkcji f(x) = a*x^2 +b*x + c dla x z przedziału [-10, 10]. Obliczane wartości zapamiętać w wektorach wierszowych.

Współczynniki a, b, c są wczytywane z klawiatury. Zapewnij możliwość wielokrotnego powtarzania obliczeń.

Wskazówka:

Do powtarzania obliczeń wykorzystać i nieskończoną pętlę while przerywaną instrukcją break.

Do uruchomienia przerywania wykorzystać przycisków graficznych menu Program zadania 5.2 pokazano w tab. 5.4.

Tab. 5.4. Program tablicowania funkcji z powtarzaniem jej wykonania 1

2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26

%---Początek programu--- while (1 ) % petla nieskonczona

%=========-Początek pętli while========================

% Tablicowanie funkcji f(x).

% Tablicowanie funkcji f(x)= a*x^2 +b*x + c clc; clear; close all;

format compact; format short;

a=input('Podaj a = ');

b=input('Podaj b = ');

c=input('Podaj c = ');

L=-10; P=10; n=50; % zadawane parametry stałe krok=(P-L)/(n-1);

j=1;

for x=L: krok: P Wx(j)=x;

Wf(j)=a*x^2 +b*x+c;

j=j+1 end

plot(Wx, Wy, '*-');

%---Koniec tablicowania --- P= menu('Czy zakonczyc obliczenia?, 'TAK ', 'NIE');

if P==1 break;

end

end %==============Koniec petli while================

Tablicowanie funkcji

Sprawdzanie warunków zakończenia

programu

Wprowadzenie danych i wartości

ustalonych

(21)

21

Zadania do samodzielnego wykonania:

W zadaniach tablicowania przyjmuj liczbę punktów (np. n=10) tak by można było zawartości wektorów przejrzyście wyświetlać w oknie Command.

Zadanie 5.3

Przedstaw wykres funkcji f(x)=2x^2+7x+1 w zakresie x z przedziału [ - 8, 6] . Do tablicowania wykorzystaj wektoryzację.

Pokaż graficzne rozwiązanie równania.

Wskazówka: Do wykresu dodaj prostą f(x)=0.

Zadanie 5.4

Przedstaw wykres funkcji f(x)=2x^2+7x+1 w zakresie x z przedziału [ - 8, 6] . Do tablicowania wykorzystaj pętlę for. Dodaj polecenia opisujące wykres.

Pokaż graficzne rozwiązanie równania.

Wskazówka: Do wykresu dodaj prostą f(x)=0.

Zadanie 5.5

Przedstaw wykres funkcji f(x)=2x^2+7x+1 w zakresie x z przedziału [ - 8, 6] . Do tablicowania wykorzystaj pętlę while. Dodaj polecenia opisujące wykres.

Pokaż graficzne rozwiązanie równania.

Wskazówka: Do wykresu dodaj prostą f(x)=0.

Zadanie 5.6

Korzystając z polecenia ezplot przedstaw na jednym rysunku wykres funkcji f1(x)=2x^2+7x+1 oraz funkcji f2(x)=2x^2+7x-1. Dodaj legendę.

Wskazówka: skorzystaj z polecenia hold.

Zadanie 5.7

Korzystając z jednej pętli for wykonaj tablicowanie funkcji f1(x)=2x^2+7x+1 oraz funkcji f2(x)=2x^2+7x-1.

Wykonaj wykres i dodaj legendę.

Wskazówka: skorzystaj z polecenia hold.

Zadanie 5.8

Wykonaj wykres koła o zadanym promieniu r. Do wykonania wykorzystaj równanie koła we współrzędnych biegunowych.

X= r*sin(k) dla k=1,2.3,…360 Y=r*cos(k)

Cytaty

Powiązane dokumenty

Znaleźć wartość oczekiwaną pola prostokąta, którego obwód równy jest 20, a jeden bok jest zmienną losową X o rozkładzie jednostajnym na odcinku [1, 10].. Niech X będzie

Wartością zmiennej losowej X jest numer tej próby, w której klucz pasuje do zamka.. Wiadomo, że tylko jeden klucz

Zmienna losowa X przyjmuje wartości równe ilości wyrzuconych orłów, natomiast zmienna losowa Y przyjmuje wartość jeden jeśli w pierwszym rzucie wypadł orzeł oraz zero w

Zmienna losowa X przyjmuje wartości równe maksimum wyrzuconych oczek.. Wyz- naczyć rozkład zmiennej

Jakie jest prawdopodobieństwo, że losowo wybrana osoba waży więcej niż 83 kg?. Jaka jest frakcja osób mających wagę pomiędzy 71 a

zadania domowe 2, 27 października

Zmienna losowa wysokości szkody B ma rozkład jednostajny na przedziale [0, 20], X = IB2. Prawdopodobieństwo wystąpienia szkody

W bieżącym roku zakład sprzedał 400 polis z pierwszej grupy, 300 polis z drugiej i 200 polis z trzeciej grupy.. Dane umieszczono