• Nie Znaleziono Wyników

Podstawy programowania w językach wysokiego poziomu cz.1,

N/A
N/A
Protected

Academic year: 2021

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

Copied!
10
0
0

Pełen tekst

(1)

Wprowadzenie do informatyki

Instrukcja laboratoryjna

Temat:

„Podstawy programowania w językach wysokiego

poziomu”

Wykonali:

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

Warszawa 2019 r.

(2)

1. W

STĘP

1. Utworzyć na pulpicie folder o nazwie Nazwisko_Grupa_dzień_miesiąc_rok np.

Kowalski_x1_06_11_2019. W folderze tym zapisywane będą wszystkie powstałe w trakcie ćwiczenia pliki.

Po zakończeniu ćwiczenia folder ten należy usunąć z pominięciem Kosza (shift+del).

2. Uruchomić program Matlab. Program Matlab może bezpłatnie pobrać, zainstalować i używać zgodnie z licencją każda osoba dysponująca adresem mailowym z domeny wat.edu.pl. Szczegółowa instrukcja postępowania znajduje się na stronie internetowej WAT -> Rozwój -> Dystrybucja oprogramowania.

3. W celu przygotowania się do wykonania ćwiczenia należy zapoznać się z poniższą instrukcją oraz z instrukcją zawierającą podstawowe informacje dotyczące programowania w Matlabie: Podstawy programowania w Matlabie – materiały pomocnicze do ćwiczenia laboratoryjnego.

2. Z

ADANIA DO WYKONANIA

2.1. Simulink

1. W oknie Command Window po znaku zachęty >> wpisać simulink i zatwierdzić klawiszem Enter lub kliknąć ikonkę programu :

. Wybrać pusty model (blank model).

2. Otworzyć okno Simulink Library Browser poprzez wybór z paska narzędzi View->Simulink Library Browser lub poprzez wciśnięcie kombinacji klawiszy Ctrl+Shift+L. W polu

wyszukiwarki w otwartym oknie wpisać: sine wave – zaznaczyć i zapoznać się z

widocznym po chwili krótkim opisem bloku DSP System Toolbox Sine Wave. Przeciągnąć blok w pole modelu (okno główne programu) . Następnie powtórzyć tę czynność dla drugiego generatora.

3. W polu wyszukiwarki w Simulink Library Browser wpisać scope. Z dostępnych wyników wybrać bloki Scope a następnie w podobny sposób XY Graph.

4. Wskazać myszą na wyjście > genaratora ( tak by kursor myszy przyjął postać +), nacisnąć lewy klawisz myszy i przeciągnąć wyjście generatora do wejścia > bloku zobrazowania (np. XY Graph) i zwolnić klawisz myszy. Urządzenia WE i WY zostają połączone. Aby rozgałęzić połączenie należy:

- wskazać myszą miejsce rozgałęzienia sygnału (pojawi się znak +),

- wcisnąć prawy klawisz myszy i przeciągnąć połączenie do wejścia urządzenia (Scope).

(3)

Bloki połączyć tak by uzyskać schematu przedstawiony na rys. 2.2

Uwaga: Domyślnie czas symulacji to 10sek. Aby obserwować spowolnione przebiegi elektryczne na oscyloskopie należy:

- kliknąć blok generatora Sine Wawe. W otwartym oknie ( rys. 2.1 ) zmienić parametr Sample time na wartość 0.001. Na rysunku generatora sinusoida przyjmie postać funkcji schodkowej.

- podobną czynność wykonać dla drugiego generatora.

Rys. 2.1. Blok opisu i konfiguracji parametrów generatora Sine Wave

5. Zapisać przygotowany model w przygotowanym wcześniej folderze pod nazwą model1.

Uruchomić model Simulation->Run, ctrl+t lub klikając stosowną ikonkę.

6. Czynność powtórzyć klikając uprzednio na blok Scope – otworzy się dodatkowe okienko Zobrazowania przebiegów.

7. Dokonać modyfikacji modelu ( zmian częstotliwości sygnałów w generatorach)i zgodnie z poleceniami prowadzącego, celem uzyskania zobrazowania okręgu lub wybranych figur

Lissajous.

Rys. 2.2. Schemat badanego układu porównania częstotliwości dwóch generatorów Przesuń suwak w dół

aby zobaczyć dalszy opis konfiguracji parametrów sygnału sinusoidalnego

(4)

8. Zapisać przygotowany model w przygotowanym wcześniej folderze pod nazwą model1.

Uruchomić model Simulation->Run, ctrl+t lub klikając stosowną ikonkę.

9. Czynność powtórzyć klikając uprzednio na blok Scope – otworzy się dodatkowe okienko.

10. Dokonać modyfikacji modelu i otwartych okien zgodnie z poleceniami prowadzącego, celem uzyskania zobrazowania okręgu lub wybranych figur Lissajous.

2.2. Matlab- obliczenia interaktywne

Część 2 ćwiczenia obejmuje pracę interaktywną w środowisku Matlab. Można tu wprowadzać dane, podawać polecenia i uzyskiwać rezultaty wykonania nawet bez konieczności pisania programu. Celem zrozumienia istoty, zrealizujemy 5 poleceń wpisanych w oknie Command Window po tzw. znaku zachęty (>>). Każde polecenie jest wykonane po zatwierdzeniu naciśnięciem Enter.:

>> r=5.1234;

>>kat=[0: 1: 360];

>>x=r*cosd(kat);

>>y=r*sind(kat);

>> plot(x,y)

Uwaga: W powyższym zapisie uzycie sind oznacza że podajemy argument w stopniach (ang. degree). Użycie Sin oznacza, że podawany jest argument w radianach.

Efektem wykonania ostatniego polecenia plot() jest wykres koła. Polecenia kolejno wpisane to instrukcje Matlaba przygotowujące dane do wykonania wykresu ( tu dane 361 wartości- patrz okno Workspace).

Realizowane dalej punkty punkty wskaże prowadzący ćwiczenie.

1. System pomocy. Funkcje Matlaba.

Wpisz polecenia i zapamiętaj je na przyszłość.

Co jest ich wynikiem?

help elfun help matfun help specfun

Po zapoznaniu się z wynikami. wpisz polecenie:

clc

Przyjrzyj się ponownie ekranowi. Co jest wynikiem polecenia clc?

2. Wprowadzanie danych liczbowych i tekstowych oraz wektorów i macierzy. Typy zmiennych. Separatory poleceń (spacje, przecinki, średniki), sygnalizacja błędów.

Instrukcje input i disp. Zaokrąglenia liczb wyświetlanych.

a=1 b=2 c=3 % popraw zapisy jeśli błędne a=4, b=5,c=6

a=5, b=7; c=6;

d=55; e=77; f=66; dlaczego brak wyświetlenia zmiennych d, e, f ?

(5)

x=123.1234567 disp(x)

X=input('podaj x takie jak wyzej: ')

5678.123456 % W jakiej zmiennej jest wprowadzona liczba?:

Naz='Kowalski ' % zobacz zmienną Naz w oknie Workspace

Naz=input(' Podaj swoje Nazwisko: ', 's' );

A=input('Wprowadz wektor A= ') % Wpisz tu [1 3 4 5 6 7] Enter M=[1 2 3; 4 5 6; 8 9 0]

M=input('Wprowadz macierz M= ') % Wpisz tu =[1 2 3; 4 5 6; 8 9 0] Enter disp(Naz)

disp(A) disp(M)

%Sprawdź typy danych i zajętość pamięci w oknie Workspace

clear a c M Naz % sprawdz teraz w Workspace zmienne a c M Naz clear

% sprawdź teraz w Workspace zmienne, ich typy i wymiary

Napisz polecenie clear usuwające wskazane zmienne. Sprawdź jego efekt w Workspace.

clear a b c M A

Napisz samo polecenie clear. Sprawdź jego efekt w Workspace.

clear

3. Tworzenie zmiennych liczbowych. Działania arytmetyczne.

Jaka będzie wartość obliczona w poniższych działaniach?

a=5;

y=a*a y=a^2 w=y^0.5 w=y^(1/2) w=sqrt(y) c1=sin(pi/2) c2=sind(90)

Co zawierają zmienne c1 i c2?

W jakich jednostkach należy podawać argumenty dla funkcji trygonometrycznych?

a=3; b=7; c=2;

delta=bb -4ac % popraw zapis delta=b^2 -4*a*c

Teraz załóż że powyższe a, b, c i delta to to parametry równania ax2+ bx+c. Zapisz wzory i oblicz w Matlabie wartości x1 i x2. Oblicz „ręcznie” i oceń wyniki.

x1=………..….

x2=………….

(6)

4. Wyświetlanie informacji na ekranie- instrukcje disp i sprintf. Zmienne tekstowe.

Konwersja num2str liczb na kod znakowy (ASCII). Łączenie informacji tekstowej i liczbowej przy jej wyświetlaniu w jednej linii.

clc

x= 144.1234567, y=sqrt(x)

%Utwórz zmienną tekstową i dołącz do niej wartość:

Tx=[ 'Dla x= ', num2str(x) ] % łączenie opisu i liczby disp(Tx)

Ty= [ 'wartosc y= ' , num2str(y) ] Wynik=[Tx, ' ' , Ty]

Wynik=[Tx, blanks(10) , Ty]

disp(Wynik)

% ----%.4f – format floating point, 5 m-c po przecinku sprintf(' dla x= %.5f wartosc y=%.5f ', x, y);

Przeanalizuj zmienne i ich opisy w oknie Workspace a następnie usuń zmienne.

5. Liczby zespolone, prezentacja graficzna –prezentacja clc

W=sqrt(-1) L1=5+7*j compass(L1)

L1=5+7i % TU MOŻNA POMINĄĆ ZNAK " * "

L2=3-2j

% zobacz interpretację L1, L2 i ich sumy Z=[L1, L2, L1+L2]

compass(Z)

6. Wpisz liczbę L i sprawdź co jest wynikiem funkcji wbudowanych:

clc, clear L=5+7.77j compass(L);

kat= angle(L) a=abs(L) s= conj(L)

compass([L,s] ) % liczba zespolona i sprzężona

% możesz sprawdzić też: phase(L), imag(L), real(L)

7. Sprawdź na przykładach działanie funkcji wbudowanych:

A=[1 3 4 5 6 7] %wektor wierszowy

n= length(A) % ilość liczb w wektorze (liczba kolumn)

(7)

n=numel(A)

[w ,k]=size(A) % w- liczba wierszy, k-liczb kolumn T=A' % wektor A transponowany K=[1; 3; 4; 5; 6; 7] % wektor K kolumnowy [w ,k]=size(A)

M=[1 2 3; 4 5 6] % Macierz wektor K kolumnowy [w ,k]=size(M)

sprintf(' Macierz ma: %d wiersze i % d kolumny ', w,k)

Mt=M' % Macierz M transponowana

8. Tworzenie wektorów zawierających ciągi liczb np. o strukturze min:krok:max.

Wizualizacja wektorów poleceniem plot.

A= [0: 1.7 : 10]

C=[0:10]

plot(A) % wizualizacja wektora A x= [-10: 2 : 8]

f=2*x.^2 + 7*x + 1 %wstawienie wektora do wyrazenia plot(x, f ,'*') % wizualizacja punktów funkcji f(x)

Napisz polecenie:

ezplot( '2*x^2 +5*x -14' ) a następnie polecenie:

ezplot( '2*x^2 +5*x -14' , [-5 12])

Wybierz z menu Tools otwartego okna figure polecenie Basic Fitting. Zanacz opcję Show equations. Dla jakiego stopnia wielomianu (polynomial) uzyskano najbliższe oryginałowi odwzorowanie przebiegu funkcji.

ezplot( '2*x^2 +5*x -14' , [-5 12])

Wybierz z menu Tools otwartego okna figure polecenie Basic Fitting. Zanacz opcję Show equations. Dla jakiego stopnia wielomianu (polynomial) uzyskano najbliższe oryginałowi odwzorowanie przebiegu funkcji.

figure(2)

ezplot('abs(sin(x)/x)', [-6 6, -0.1 1.1])

9. Funkcje generujące oraz funkcje statystyczne i histogramy wektorów i macierzy obliczające:

wartość minimalną - min() wartość maksymalną – max() wartość średnią - mean() odchylenie standardowe- std() mediana - median() sortowania - sort()

histogram rozkładu wartości -hist() np.: hist(A, Liczba_przedzialow) generacja liczb losowych równomiernie z przedziału [0,1]- rand() generacja liczb losowych z rozkładu normalnego N(0,1) - randn()

(8)

Sposób użycia poleceń:.

W=rand(1,6) % generacja wektora 6 liczb z przedziału [0,1]

M=rand(3,6) % generacja macierzy liczb % poniżej obowiązkowo średnik ; na końcu!

A=randn(1, 1000000) ; % generacja miliona liczb losowych z rozkładu normalnego hist(A,25)

Wmin= min(A); generacja liczb losowych równomiernie z przedziału [0,1]- rand() [Wmin, Poz]=min(A)

Srednia=mean(A)

10. Suma i różnica macierzy A=[1 2 3; 4 5 6]

B=[7 8 9; 3 5 1]

C=A+B D=A-B

11. Mnożenie macierzy – NIE JEST PRZEMIENNE A=[1 2 3; 4 5 6]

B=[1 2; 4 5; 6 2]

IloczynAB=A*B IloczynBA=B*A

12. Generowanie charakterystycznych macierzy –funkcje wbudowane Z=zeros(3,4)

O=ones(3,4) E=eye(4) E5=eye(4)+4 M=magic(3)

Sprawdź sumy elementów: w wierszach np. sum(M(1,1:3)), kolumnach np. sum(N(1:3,1)) i na głównej przekątnej diag(M).

13. Tworzenie i użycie macierzy pustej, dopisywanie wartości. Łączenie wektorów.

A=[]

A=[A,15]

A=[A,17]

Co się dzieje z zawartością wektora A?

B=[7 8 9 ] C=[A,B]

14. Generowanie macierzy na podstawie innych macierzy A=[1 4 1; 2 0 1]

B=[3 1; 4 1]

C=[1 2 2 0 1; 2 4 7 1 0]

D=[A B; C]

(9)

15. Generowanie macierzy – technika mieszana A=[1 2 3; 4 5 6]

B=[A, [1;2]; 1:4]

16. Sprawdź w menu help znaczenie terminów int8, int16, single, double.

Napisz polecenie: clear a następnie:

N=magic(4) K=int8(magic(4))

Sprawdź czy macierz ma podobne własności jak poprzednia M? Ile zajmuje bajtów?.

17. Mnożenie tablicowe (element po elemencie) ze znakiem : .*

A=[1 2; 4 5]

B=[3 4; 2 3]

Mnozenie_tablicowe=A.*B

18. Dzielenie tablicowe (element po elemencie) A=[6 4; 8 2]

B=[3 2; 4 1]

Dzielenie_tablicowe=A./B

19. Dostęp do elementów macierzy A=[1 2 3; 4 5 6; 7 8 9]

E =A(2,3) % element (2,3) P =A(1:2, 1:2) % podmacierz

el_w2 =A(2, 1:2) % drugi wiersz, pierwsze 2 elementy W2 =A(2, : ) % cały drugi wiersz

W13=A([1 3], : ) % cały pierwszy i trzeci wiersz K2 =A(: , 2) % cala 2 kolumna

20. Powołaj poniższe zmienne i zastanów się nad uzyskanymi wynikami. Co to jest kod ASCII?

W1='abcd…z ABCD…Z' A1=double(W1)

W2= char(A1) Imie= 'Ala ' Nazw= 'Ładna '

ImNaz=[Imie, ' ' , Nazw]

ImNaz=[Imie, ' ' , Nazw]

char(W2) W3=[W1 W2]

W4=[W1,’ ‘, W2]

(10)

21. Wizualizacja wektorów lub ich części A=randn(1,300);

subplot(3,1,1) plot(A)

S=sort(A);

subplot(3,1,2) plot(S)

subplot(3,1,3) plot(A(50:200))

22. Wprowadzanie danych- instrukcje WE A=input('Wprowadź wartość zmiennej A: ') Wprowadzenie wektora danych

A=input('Wprowadź wektor […] A:') %polecenie

Wprowadź wektor […] A:[ 1 3 2 4 6 7]% wykonanie polecenia

23. Instrukcje języka Matlab. Wprowadzanie danych w pętli i ich zapis w wektorze A.

Utwórz nowy plik .m poprzez kombinację klawiszy ctrl+n lub poprzez wybranie z menu polecenia New Script. W otwartym pliku edytora wpisz:

A=[];

for j=1: 5 % tu będzie 5 liczb T=['Podaj L', num2str(j), '= '];

L=input(T);

A(j)=L; %lub A=[A,L];

end

Nadaj skryptowi nazwę Program1. Zapisz plik w folderze utworzonym na początku zajęć i uruchom poprzez ikonkę Run lub klawisz F5.

24. Instrukcje języka Matlab. Instrukcja warunkowa if W=input('Podaj liczbę: ');

if W==1

disp('Wybrałeś 1') elseif W==2

disp('Wybrałeś 2') elseif W==3

disp('Wybrałeś 3') else

disp('Wybrałeś inną liczbe niż 1, 2 czy 3') end

25. Napisz skrypt rozwiązujący wskazane przez prowadzącego zadanie (z zadań zamieszczonych w drugiej części instrukcji)

Cytaty

Powiązane dokumenty

Jest jednak kilka istotnych różnic pomiędzy referencją a wskaźnikiem: po pierwsze referencja tuż przy swoim powstaniu musi wiedzieć na co ona będzie referencją, wskaźnik

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:

Cukrzyca jest chorobą, która dotyka coraz większą liczbę osób, stając się niemal epidemią i dotyka prawie 3% ogólnoświatowej populacji ludzkości. Rozwiąż równania

dyrektywa preprocesora - jest to oddzielna część kompilatora, której zadaniem jest wstępne odczytanie tekstu programu i wprowadzenie w nim pewnych modyfikacji.. Prefiks

Za każdym razem, gdy kompilator napotka komentarz w twoim programie, komentarz jest do niego całkowicie niewidoczny - z jego punktu widzenia jest to tylko jedna spacja (bez względu

\a (jak w alarmie) jest reliktem przeszłości, gdy do komunikowania się z komputerami często używano telegrafów (czy wiesz, czym jest teletekst?); wysłanie tego znaku do

Operator >> jest często nazywany operatorem ekstrakcji. Strumień cin, wraz z operatorem ekstrakcji, jest

Schemat instrukcji warunkowej(niepełnej) – jeśli warunek jest spełniony instrukcja zostanie wykonana w przeciwnym wypadku wykonana zostanie następna instrukcja po instrukcji