Pętle iteracyjne i decyzyjne. 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 ): 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. Ćwiczenie Napisać program, który będzie wizualizował na wykresach funkcje kwadratowe wraz z ich miejscami zerowymi. f(x) = 3,5x +6,5x+ - Dwa miejsca zerowe w dziedzinie liczb rzeczywistych f(x) = 3,5x +5x+ - Jedno miejsce zerowe w dziedzinie liczb rzeczywistych f(x) = 3,5x +x+6,5 - Dwa miejsca zerowe w dziedzinie liczb zespolonych %współczynniki kolejnych funkcji kwadratowych przechowane w macierzy 3x3 Wsp = [3.5 6.5 ;... 3.5 5 ;... 3.5 6.5]; %pętla iteracyjna for for indeks = :3 a = Wsp(indeks,); %przypisanie wartości współczynnika a dla b = Wsp(indeks,); %przypisanie wartości współczynnika b dla c = Wsp(indeks,3); %przypisanie wartości współczynnika c dla rownanie = ['f(x)=' numstr(a) 'x^+' numstr(b) 'x+' numstr(c)]; delta = b^-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)/(*a) (-b+delta^0.5)/(*a)]; info = 'Dwa miejsca zerowe w dziedzinie liczb rzeczywistych'; miejsca0 = ['x_=' numstr(x0()) ', x_=' numstr(x0())]; elseif(delta==0) x0 = -b/(*a); miejsca0 = ['x_=x_=' numstr(x0)]; info = 'Jedno miejsce zerowe w dziedzinie liczb rzeczywistych';
else x0 = [(-b-delta^0.5)/(*a) (-b+delta^0.5)/(*a)]; miejsca0 = ['x_=' numstr(x0()) ', x_=' numstr(x0())]; info = 'Dwa miejsca zerowe w dziedzinie liczb zespolonych'; xw = -b/(*a); %współrzędna x wierzchołka paraboli x = linspace(xw-,xw+,00); %wyznaczenie dziedziny y = a*x.^+b*x+c; %obliczenie przeciwdziedziny subplot(,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') xlabel('') %podpisanie osi OX ylabel('') %podpisanie osi OY title({rownanie info miejsca0}) %podpisanie wykresu f(x)=3.5x +6.5x+ Dwa miejsca zerowe w dziedzinie liczb rzeczywistych =-.6, x =-0.4 f(x)=3.5x +5x+ Jedno miejsce zerowe w dziedzinie liczb rzeczywistych =x =-0.8 3 f(x)=3.5x +x+6.5 Dwa miejsca zerowe w dziedzinie liczb zespolonych =-0.3-.3775i, x =-0.3+.3775i 9.5.5 8.5 8 0.5.5 7.5 0 7-0.5 0.5 6.5 - - -.5 - -0.5 0 0 -.5 - -0.5 0 6 - -0.5 0 0.5 Pętlę iteracyjną for można zagnieżdżać. Zagnieżdżenie dwóch pętli iteracyjnych for przedstawiono w ćwiczeniu. Ćwiczenie Rys.. Wykresy funkcji kwadratowej Iteracyjne wypełnienie macierzy o wymiarach 0 na 0 wartościami tabliczki mnożenia: tabliczka = zeros(0,0); for indeksw = :0 %pierwsza pętla, iterująca po wierszach macierzy
%tabliczka for indeksk = :0 %druga pętla, iterująca po kolumnach macierzy %tabliczka tabliczka(indeksw,indeksk) = indeksw*indeksk; disp('tabliczka mnożenia:'); disp(numstr(tabliczka)) Tabliczka mnożenia: 3 4 5 6 7 8 9 0 4 6 8 0 4 6 8 0 3 6 9 5 8 4 7 30 4 8 6 0 4 8 3 36 40 5 0 5 0 5 30 35 40 45 50 6 8 4 30 36 4 48 54 60 7 4 8 35 4 49 56 63 70 8 6 4 3 40 48 56 64 7 80 9 8 7 36 45 54 63 7 8 90 0 0 30 40 50 60 70 80 90 00. 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 mniejsze od 0000. potegi = []; %inicjacja tablicy do przechowywania wartości potęg wynik = ; wykladnik = ; %pętla decyzyjna while while wynik < 0000 potegi = [potegi wynik]; %wstawienie nowego wyniku do tablicy wykladnik = wykladnik+; %obliczenie nowego wykładnika wynik = ^wykladnik; %obliczenie nowej wartości potęgi disp('wartości kolejnych potęg liczby mniejsze od 0000:') disp(numstr(potegi)); Wartości kolejnych potęg liczby mniejsze od 0000: 3
4 8 6 3 64 8 56 5 04 048 4096 89 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ń. liczbylotto = []; dubel = false; %kontynuacja pętli while jeśli ilość liczb Lotto jest mniejsza od 6 while length(liczbylotto)<6 los = floor(49 *rand())+; %losowanie kolejnej liczby z 49 for id = :length(liczbylotto) if los==liczbylotto(id) dubel = true; break %przerwanie pętli for if dubel dubel = false; continue %kontynuacja pętli while liczbylotto = [liczbylotto los]; %zapisanie unikatowej liczby disp('wylosowane liczby Lotto:') disp(numstr(liczbylotto)) Wylosowane liczby Lotto: 40 45 7 3 5 4 4. Zadania do samodzielnego wykonania Wytyczna : Przed przystąpieniem do rozwiązywania zadań należy:. Utworzyć nowy folder i nazwać go (imię_nazwisko_lab_numer);. Do utworzonego katalogu skopiować wzorzec raportu dołączony do instrukcji, zamienić jego nazwę według wzorca podanego w punkcie ; 3. Otworzyć raport i wypełnić go swoimi danymi; 4. Uruchomić środowisko obliczeniowe MatLab; 4
5. W środowisku obliczeniowym MatLab w oknie Current Directory lub Current Folder (zależy od wersji systemu obliczeniowego) zlokalizować katalog utworzony w punkcie. 6. Wszystkie pliki powiązane z zadaniami należy zapisywać w tej lokalizacji. Wytyczna : Przed przystąpieniem do każdego z zadań należy wykonać następujące czynności:. Wyczyścić przestrzeń Workspace ze wszystkich zmiennych (polecenie: );. Wyczyścić przestrzeń Command Window ze wszystkich poleceń (polecenie: ); Wytyczna 3: Wytyczna dotyczy osób pracujących na stanowiskach komputerowych zapewnionych przez Uczelnię. Po ocenieniu przez prowadzącego zajęcia należy:. 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;. Trwale usunąć z przestrzeni dyskowej katalog utworzony według wytycznej w punkcie. Zadanie Wykorzystać pętlę iteracyjną for i napisać program, który będzie wizualizował na wykresach funkcje liniowe wraz z ich miejscami zerowymi.. f(x) = v ix+v n - Funkcja rosnąca, jedno miejsce zerowe. f(x) = -v nx+v i - Funkcja malejąca, jedno miejsce zerowe 3. f(x) = v iv n - Funkcja stała, brak miejsc zerowych Gdzie: v i liczba liter imienia, v n liczba liter nazwiska. Styl wizualizacji funkcji ma być zbliżony do wizualizacji przedstawionej w ćwiczeniu (układ wykresów, podpisy wykresów oraz podpisy osi wykresów funkcji). 5