Wiele działań przy komputerowym przetwarzaniu danych może wymagać wielokrotnego wykonania, czyli iteracji. Do takich działań służą pętle. W MATLABie będziemy używać dwóch pętli: pętli for i pętli while. Składnia pętli for wygląda następująco:

for licznik=początek:krok:koniec

        jakieś_instrukcje

end

Zadanie (5)

Prześledź działanie poniższych instrukcji, możesz je zapisać w skrypcie lub wpisywać w konsoli naciskając Shift+ENTER po każdej linijce oprócz ostatniej, po której należy nacisnąć samo ENTER:


>> for k=1:10

disp(k);

end % nacisnij ENTER


>> for k=1:3:10

disp(k);

end


% przykład ze zmianą zawartości macierzy:

>> A=round(rand(3,4)*10)-5;

disp(A);

[a b] = size(A);

disp(['wymiary macierzy: ' num2str(a) ' oraz ' num2str(b)]);

for k=1:a

    for t=1:b

      if A(k,t) < 0

          A(k,t)=[100];

      end

    end

end

disp(A);


% przykład z dzielnikami liczby:

>> liczba = 64;

disp(['Dzielniki liczby ' num2str(liczba)]);

for k=1:liczba

    if mod(liczba,k)==0      % mod(a,b) zwraca resztę z dzielenia a/b

      disp(k)

    end

end


Instrukcja break powoduje, że pętla kończy się przedwcześnie na wyraźne życzenie użytkownika. Poniższy przykład pokazuje ideę działania tej instrukcji:


>> liczba = 64;

disp(['Czy liczba ' num2str(liczba) ' ma co najmniej 4 dzielniki?' ]);

licznik = 0;

for k=1:liczba

     if mod(liczba,k)==0

        disp(k);
        licznik = licznik+1;

    end

    if licznik==4

       disp('Owszem, ma');

       break; % nie ma co dalej sprawdzać, liczba ma co najmniej 4 dzielniki

    end

end

if licznik < 4

    disp('Niestety, nie ma');

end



Zadanie (6)

Napisz skrypt, w którym wygenerowana zostanie macierz 5x5 losowych liczb całkowitych z zakresu [-10,10]. Korzystając z dwóch zagnieżdżonych pętli for zamień każdą ujemną liczbę w macierzy na kwadrat tej liczby, zaś każdą dodatnią liczbę w oryginalnej macierzy pomnóż przez -1.

Odpowiedź

A=round(rand(5,5)*20)-10;

disp(A);

[a b] = size(A);

for k=1:a

    for t=1:b

        if A(k,t) < 0

            A(k,t)=[A(k,t)^2];

        else

            A(k,t)=[-A(k,t)];

        end

    end

end

disp(A);

 

 

Ostatnia modyfikacja: środa, 21.08.2013, 10:42 AM