Pętle iteracyjne i decyzyjne

Transkrypt

Pętle iteracyjne i decyzyjne
Laboratorium 4
Algorytmy i Systemy Obliczeniowe
Pętle iteracyjne i decyzyjne
1. Pętla iteracyjna for
Pętlę iteracyjną for stosuje się do wykonywania wyrażeń lub ich grup określoną liczbę razy. Licznik pętli
w pakiecie MatLab może być zwiększany bądź zmniejszany w sposób ściśle określony (domyślnie zwiększany co
1): for indeks = start:krok:stop powoduje zwiększenie/zmniejszenie wartości licznika indeks o wartość krok przy
każdym obiegu pętli.
Składnię i sposób działania pętli iteracyjnej for w systemie obliczeniowym MatLab przedstawiono
w ćwiczeniu 1.
Ćwiczenie 1
Napisać program, który będzie wizualizował na wykresach funkcje kwadratowe wraz z ich miejscami
zerowymi.
 f(x) = 3,125x2+6,25x+2 - Dwa miejsca zerowe w dziedzinie liczb rzeczywistych
 f(x) = 3,125x2+5x+2 - Jedno miejsce zerowe w dziedzinie liczb rzeczywistych
 f(x) = 3,125x2+2x+6,25 - Dwa miejsca zerowe w dziedzinie liczb zespolonych
 Skrypt programu:
clear
clc
%współczynniki kolejnych funkcji kwadratowych przechowane w macierzy 3x3
Wsp = [3.125 6.25 2;...
3.125 5
2;...
3.125 2
6.25];
%pętla iteracyjna for
for indeks = 1:3
a = Wsp(indeks,1); %przypisanie wartości współczynnika a dla
%kolejnych wartości indeks
b = Wsp(indeks,2); %przypisanie wartości współczynnika b dla
%kolejnych wartości indeks
c = Wsp(indeks,3); %przypisanie wartości współczynnika c dla
%kolejnych wartości indeks
rownanie = ['f(x)=' num2str(a) 'x^2+' num2str(b) 'x+' num2str(c)];
delta = b^2-4*a*c; %obliczenie wyróżnika delta
%obliczenie miejsc zerowych i przypisane komunikatów w zależności
%od wartości delty
if(delta>0)
x0 = [(-b-delta^0.5)/(2*a) (-b+delta^0.5)/(2*a)];
y0 = [0 0];
info = 'Dwa miejsca zerowe w dziedzinie liczb rzeczywistych';
miejsca0 = ['x_1=' num2str(x0(1)) ', x_2=' num2str(x0(2))];
elseif(delta==0)
x0 = -b/(2*a);
y0 = [0 0];
miejsca0 = ['x_1=x_2=' num2str(x0)];
info = 'Jedno miejsce zerowe w dziedzinie liczb rzeczywistych';
1
Laboratorium 4
Algorytmy i Systemy Obliczeniowe
else
x0 = [(-b-delta^0.5)/(2*a) (-b+delta^0.5)/(2*a)];
y0 = [0 0];
miejsca0 = ['x_1=' num2str(x0(1)) ', x_2=' num2str(x0(2))];
info = 'Dwa miejsca zerowe w dziedzinie liczb zespolonych';
end
xw = -b/(2*a); %współrzędna x wierzchołka paraboli
x = linspace(xw-1,xw+1,100); %wyznaczenie dziedziny
y = a*x.^2+b*x+c; %obliczenie przeciwdziedziny
subplot(1,3,indeks) %rozdzielenie wykresów w jednym wierszu
%i w trzech kolumnach
plot(x,y) %rysowanie paraboli
grid on %rysowanie siatki
if ~(delta<0) %rysowanie miejsc zerowych gdy delta nie jest
%mniejsza od 0
hold on %zablokowanie osi wykresu
plot(x0,y0,'or')
end
xlabel('Oś OX') %podpisanie osi OX
ylabel('Oś OY') %podpisanie osi OY
title({rownanie info miejsca0}) %podpisanie wykresu
end
 Wynik działania programu:
f(x)=3.125x 2+5x+2
f(x)=3.125x 2+6.25x+2
Dwa miejsca zerowe w dziedzinie liczb rzeczywistych Jedno miejsce zerowe w dziedzinie liczb rzeczywistych
x 1=x 2=-0.8
x 1=-1.6, x 2=-0.4
2
9
3
Oś OY
1
0.5
0
-0.5
2.5
8.5
2
8
Oś OY
1.5
Oś OY
f(x)=3.125x 2+2x+6.25
Dwa miejsca zerowe w dziedzinie liczb zespolonych
x 1=-0.32-1.3775i, x 2=-0.32+1.3775i
1.5
1
7
0.5
6.5
-1
-2
-1.5
-1
-0.5
Oś OX
0
7.5
0
6
-1.5
-1
-0.5
Oś OX
0
-1
-0.5
0
Oś OX
0.5
Rys. 1. Wykresy funkcji kwadratowej
Pętlę iteracyjną for można zagnieżdżać. Zagnieżdżenie dwóch pętli iteracyjnych for przedstawiono
w ćwiczeniu 2.
Ćwiczenie 2
 Iteracyjne wypełnienie macierzy o wymiarach 10 na 10 wartościami tabliczki mnożenia:
clear
clc
tabliczka = zeros(10,10);
for indeksW = 1:10 %pierwsza pętla, iterująca po wierszach macierzy
2
Laboratorium 4
Algorytmy i Systemy Obliczeniowe
%tabliczka
for indeksK = 1:10 %druga pętla, iterująca po kolumnach macierzy
%tabliczka
tabliczka(indeksW,indeksK) = indeksW*indeksK;
end
end
disp('Tabliczka mnożenia:');
disp(num2str(tabliczka))
 Wynik działania programu:
Tabliczka
1
2
2
4
3
6
4
8
5
10
6
12
7
14
8
16
9
18
10
20
mnożenia:
3
4
6
8
9
12
12
16
15
20
18
24
21
28
24
32
27
36
30
40
5
10
15
20
25
30
35
40
45
50
6
12
18
24
30
36
42
48
54
60
7
14
21
28
35
42
49
56
63
70
8
16
24
32
40
48
56
64
72
80
9
18
27
36
45
54
63
72
81
90
10
20
30
40
50
60
70
80
90
100
2. Pętla decyzyjna while
Pętla decyzyjna while powtarza wykonywanie wyrażenia bądź ich grup, aż do spełnienia warunku. Pętlę
decyzyjną while można zagnieżdżać.
Składnię i przykład działania pętli decyzyjnej while w systemie obliczeniowym MatLab przedstawiono
w ćwiczeniu 3.
Ćwiczenie 3
Napisz prosty program, który znajdzie i wypisze wszystkie kolejne wartości potęg liczby 2 mniejsze od 10000.
 Skrypt programu:
clear
clc
potegi = []; %inicjacja tablicy do przechowywania wartości potęg
wynik = 2;
wykladnik = 1;
%pętla decyzyjna while
while wynik < 10000
potegi = [potegi wynik]; %wstawienie nowego wyniku do tablicy
wykladnik = wykladnik+1; %obliczenie nowego wykładnika
wynik = 2^wykladnik; %obliczenie nowej wartości potęgi
end
disp('Wartości kolejnych potęg liczby 2 mniejsze od 10000:')
disp(num2str(potegi));
 Wynik działania programu:
Wartości kolejnych potęg liczby 2 mniejsze od 10000:
3
Laboratorium 4
Algorytmy i Systemy Obliczeniowe
2
4
8
16
32
64
128
256
512
1024
2048
4096
8192
3. Polecenie break i continue
Polecenie break wewnątrz pętli for lub while kończy jej wykonanie, nawet, jeśli warunek pętli jest spełniony.
Słowo kluczowe continue kontynuuje działanie pętli for lub while od początkowej instrukcji w ciele pętli, jeśli
warunek wykonywania pętli jest spełniony.
Przykład stosowania słów kluczowych break i continue przedstawiono w ćwiczeniu 4.
Ćwiczenie 4
Losowanie 6 liczb z 49 bez powtórzeń.
 Skrypt programu:
clear
clc
liczbyLotto = [];
dubel = false;
%kontynuacja pętli while jeśli ilość liczb Lotto jest mniejsza od 6
while length(liczbyLotto)<6
los = floor(49 *rand())+1; %losowanie kolejnej liczby z 49
for id = 1:length(liczbyLotto)
if los==liczbyLotto(id)
dubel = true;
break %przerwanie pętli for
end
end
if dubel
dubel = false;
continue %kontynuacja pętli while
end
liczbyLotto = [liczbyLotto los]; %zapisanie unikatowej liczby
end
disp('Wylosowane liczby Lotto:')
disp(num2str(liczbyLotto))
 Wynik działania programu:
Wylosowane liczby Lotto:
40 45
7 31
5 14
4. Zadania do samodzielnego wykonania
Wytyczna 1:
Przed przystąpieniem do rozwiązywania zadań należy:
1. Utworzyć nowy folder i nazwać go (imię_nazwisko_Lab_numer);
2. Do utworzonego katalogu skopiować wzorzec raportu dołączony do instrukcji, zamienić jego nazwę
według wzorca podanego w punkcie 1;
3. Otworzyć raport i wypełnić go swoimi danymi;
4. Uruchomić środowisko obliczeniowe MatLab;
4
Laboratorium 4
Algorytmy i Systemy Obliczeniowe
5. W środowisku obliczeniowym MatLab w oknie Current Directory lub Current Folder (zależy od wersji
systemu obliczeniowego) zlokalizować katalog utworzony w punkcie 1.
6. Wszystkie pliki powiązane z zadaniami należy zapisywać w tej lokalizacji.
Wytyczna 2:
Przed przystąpieniem do każdego z zadań należy wykonać następujące czynności:
1. Wyczyścić przestrzeń Workspace ze wszystkich zmiennych (polecenie: clear);
2. Wyczyścić przestrzeń Command Window ze wszystkich poleceń (polecenie: clc);
Wytyczna 3:
Wytyczna dotyczy osób pracujących na stanowiskach komputerowych zapewnionych przez Uczelnię. Po
ocenieniu przez prowadzącego zajęcia należy:
1. Zarchiwizować wyniki swoich prac na własnym zewnętrznym nośniku danych, lub przesyłając je na
własny adres e-mail, czy dysk działający w chmurze bądź w inny legalny sposób;
2. Trwale usunąć z przestrzeni dyskowej katalog utworzony według wytycznej 1 w punkcie 1.
Zadanie 1
Wykorzystać pętlę iteracyjną for i napisać program, który będzie wizualizował na wykresach funkcje liniowe
wraz z ich miejscami zerowymi.
1. f(x) = vix+vn - Funkcja rosnąca, jedno miejsce zerowe
2. f(x) = -vnx+vi - Funkcja malejąca, jedno miejsce zerowe
3. f(x) = vivn - Funkcja stała, brak miejsc zerowych
Gdzie: 𝑣𝑖 – liczba liter imienia, 𝑣𝑛 – liczba liter nazwiska.
Styl wizualizacji funkcji ma być zbliżony do wizualizacji przedstawionej w ćwiczeniu 1 (układ wykresów,
podpisy wykresów oraz podpisy osi wykresów funkcji).
5

Podobne dokumenty