<<wstecz ITERACJA
ITERACJA (działanie w pętli) to technika algorytmiczna polegająca na wykonaniu tej samej instrukcji dla n zmiennych (np. liczb, wartości logicznych etc.) Iteracja oszczędza czas programisty, który ten musiałby spędzić wpisując instrukcję n razy, zależnie od liczby zmiennych. Liczba powtórzeń w iteracji jest z góry określona lub zależy od spełnienia określonego warunku (FOR, WHILE).
Przykłady:
I. Suma i średnia n liczb ciągu 1 2 3 4 5 ... n
zauważamy, że kolejne wyrazy mają postać
1 i=1 1
2 i=2 2 itd czyli i
1 |
start |
|
2 |
wczytaj n |
czyli ilości wyrazów do dodania |
3 |
suma:=0
i:=0 |
ponieważ jeszcze nic nie dodano
ilośc wyrazów dodanych (nic nie dodano) |
4 |
czy i=n |
sprawdzenie czy dodano już wszystkie wyrazy |
|
jeśli TAK idź do kroku 7 |
|
5 |
i:=i+1 |
wzięcie kolejnego wyrazu |
6 |
wyraz:=i
suma:=suma+wyraz
idź do kroku 4 |
obliczenie jego wartości
obliczenie nowej sumy
|
7 |
wypisz suma
wypisz suma/n |
suma
średnia |
8 |
koniec |
|
|
 |
(oczywiście można nie obliczać wyrazu i krok 6 przedstawić tak --> suma:=suma + i ,
a można inaczej ... (jak prawdopodobnie zrobił młody Gauss - gdy jeszcze był uczniem) ale trzeba zauważyć, że to suma ciągu arytmetycznego która wynosi n*(n+1)/2
Mamy więc:
1 |
start |
|
2 |
wczytaj n |
czyli ilości wyrazów do pomnożenia |
3 |
wypisz n*(n+1)/2
wypisz n*(n+1)/2n |
suma
średnia |
4 |
koniec |
|
II. Suma i średnia nieznanej ilości liczb.
1 |
start |
|
2
|
suma:=0
i:=0 |
ponieważ jeszcze nic nie dodano
ilość wyrazów dodanych (jeszcze nic nie dodano) |
3 |
czy kończymy wczytywanie? |
można to zrobić np polecając wcisnięcie klawisza T lub cyfry 1 i sprawdzając co wciśnięto lub zakładając, że wciśnięcie liczby ujemnej kończy zabawę |
|
jeśli TAK idź do kroku 6 |
|
4 |
wczytaj a |
wczytaj liczbę |
5
|
suma:=suma + a
i:=i+1
idź do kroku 3 |
obliczenie nowej sumy
zwiększenie ilości dodanych liczb o 1
|
6 |
wypisz suma
wypisz suma / i |
suma
średnia (gdy zakończymy bez wczytania żadnej liczby - podzielimy przez zero) |
7 |
koniec |
|
|
 |
III. Największy wspólny dzielnik NWD liczb a i b (algorytm Euklidesa).
1 |
start |
|
2
|
wczytaj a
wczytaj b |
wczytaj liczbę a>0
wczytaj liczbę b>0 |
3 |
czy a <> b |
jeśli TAK to sprawdź kolejny warunek |
|
jeśli NIE idź do kroku 7 |
|
4 |
czy a > b |
jeśli TAK to jest to NWD |
|
jeśli TAK idź do kroku 6 |
|
5
|
b := b - a
idź do kroku 3 |
za dotychczasową większą liczbę podstawiamy różnicę większa - mniejsza |
6 |
a := a - b
idź do kroku 3 |
za dotychczasową większą liczbę podstawiamy różnicę większa - mniejsza |
7 |
wypisz a |
to jest NWD |
8 |
koniec |
|
|
 |
IV. Sumowanie liczb nieparzystych (w tablicy)
Tablica służy do przechowywania danych i ma budowę podobną do tabeli - składa się z wierszy i kolumn. Element tablicy można znaleźć znając numer jego wiersza i kolumny - czyli adres w tablicy. Wiersze i kolumny są ponumerowane od zera. W pierwszym, nie ponumerowanym wierszu można umieścić opis - dowolny napis. Do każdego pola można wstawić wartość - należy w tym celu wskazać kursorem myszki to pole, nacisnąć klawisz Shift i lewy przycisk myszy i wpisać liczbę. Po naciśnięciu Enter w wybranym polu pojawi się wpisana wartość. Klocek Zapis do tablicy użyty w algorytmie powoduje ten sam efekt, natomiast klocek Odczyt z tablicy powoduje pobranie wartości z podanego pola tablicy.
Odczytaj z tablicy
Zapisz do tablicy
Zapisywanie wyników w tablicy pozwoli na oglądanie kolejnych sum. W kolumnie 0 będziemy zapisywać kolejne liczby nieparzyste (i), a w kolumnie 1 - sumy.
1 |
start |
|
2
|
wczytaj a
|
wczytaj liczbę a na której skończymy obliczenia.
{dodatnią, całkowitą, nieparzystą} |
3 |
pocz:= 1
suma:=0 |
ustalenie wartości początkowej (najmniejsza, nieparzysta, większa od 0) |
|
i:=pocz |
przypisanie początkowej liczby zmiennej i |
4 |
czy i <= a |
jeśli tak to licz dalej |
|
jeśli NIE idź do kroku 9 |
|
5
|
suma:=suma+i |
obliczenie nowej sumy |
6 |
tablica |
zapis do tablicy - kolumna 0, wiersz i, wyrażenie i |
7 |
tablica |
zapis do tablicy - kolumna 1, wiersz i, wyrażenie suma |
8 |
i:=i+2
idź do kroku 4 |
zwiększenie liczby o 2
|
9 |
koniec |
|
|
 |
V. Przeliczanie liczby z układu dziesiętnego na dwójkowy.
1 |
start |
|
2
|
wczytaj a
|
wczytaj liczbę do zamiany na system dwójkowy
{całkowita, dodatnia} |
3 |
taśma  |
przesunięcie wskaźnika na początek taśmy |
4 |
wsp:=a mod 2
a:=a div 2 |
wykonanie obliczeń: dzielenie wczytanej liczby na 2 (div) oraz sprawdzenie czy zostaje reszta z dzielenia (mod) |
5 |
taśma  |
zapis na taśmę <wsp> |
6
|
czy a=0 |
jeśli NIE to idź do kroku 4 |
|
jeśli TAK to idź do kroku 7 |
|
7 |
koniec |
Komunikat końcowy - Taśma zawiera liczbę w systemie dwójkowym. Należy ją czytać od dołu. Numery na taśmie - to kolejne potęgi 2. |
|
 |
VI. Przeliczamy z układu dwójkowego na dziesiętny
Algorytm ten ma działanie odwrotne od poprzedniego. Do algorytmu będzie wprowadzana liczba w systemie dwójkowym, czyli ciąg cyfr 0 i 1. W wyniku powinniśmy otrzymać liczbę całkowitą w układzie dziesiętnym. Wzór na przeliczanie wygląda następująco - LiczbaDziesiętna := w0*2^0 + w1*2^1 + ... + wn*2^n. Musimy zdecydować w jaki sposób będziemy wczytywać współczynniki. Powiedzmy, że zostaną one odczytane z taśmy, tak że skrajna prawa cyfra - współczynnik przy potędze 0 będzie na początku (na pozycji 0, wtedy numer pozycji na taśmie będzie odpowiadał potędze dwójki). Na końcu algorytmu powinien zostać wypisany wynik w postaci liczby dziesiętnej. (Aby algorytm działał poprawnie musimy mieć otwartą taśmę z dowolną liczbą w systemie dwójkowym.)
1 |
start |
|
2 |
taśma  |
przesunięcie wskaźnika na początek taśmy |
3
|
pot := 1
liczba := 0
|
ustalenie wartości początkowych |
4 |
taśma  |
wczytujemy pierwszy współczynnik z taśmy; rozpoczynamy pętlę<wsp>
|
5 |
(wsp = 0)or(wsp=1) |
jeżeli cyfry znajdujące się na taśmie mają wartość 0 lub 1 to przejdź do kolejnego kroku |
6
|
liczba:=liczba+wsp*pot
pot:=pot*2 |
|
7 |
taśma  |
wczytujemy kolejny współczynnik z taśmy <wsp>
wracamy do kroku 3
jeśli NIE (nie ma już cyfry na taśmie), to kończymy pętlę
wypisujemy liczbę
|
8 |
koniec |
|
|
 |
VII. Szukamy wylosowanej liczby
Zbudujemy algorytm realizujący zabawę w zgadywanie liczby.
Wybierzmy zakres: od 0 do 100, komputer losuje liczbę z tego zakresu (trzeba użyć funkcji losowa(n) zwracającej pseudolosową liczbę z przedziału 0 - n-1), a my ją mamy odgadnąć, otrzymując tylko informacje, czy podana liczba jest za mała, czy też za duża. Po wczytaniu naszej liczby algorytm ma więc do wyboru trzy możliwości: 1 - trafiona, 2 - za mała, 3 - za duża.
Interesuje nas nie tylko budowa algorytmu ale także wyniki jego działania. Podawane przez nas liczby są zapisywane na taśmie. Po trafieniu możemy więc prześledzić historię gry. Czy udaje się Wam zgadnąć liczbę w najwyżej siedmiu krokach? Jeśli nie, to powinniście popracować nad strategią zgadywania.
Najlepsza strategia zgadywania liczby - to metoda połowienia nazywana także przeszukiwaniem binarnym.
1 |
start |
|
2 |
los := 1+random( 100 ) |
wylosowanie dowolnej liczb z zakresu 1 - 100 |
3
|
ile := 1
|
ustawienie licznika prób na 1 |
4 |
taśma  |
przewinięcie taśmy na początek |
5 |
wczytanie zgadywanej liczby <liczba> |
|
6
|
taśma  |
zapis wczytanej liczby na taśmę <liczba> |
7 |
czy liczba = los |
jeśli TAK to wyświetl komunikat: "To jest ta liczba, prób było:"
<ile>
przejdź do kroku 12 |
8 |
jeśli NIE to |
|
9 |
sprawdzenie, czy podana liczba jest za duża |
jeśliTAK to przejdź do kroku 11 |
10 |
jjeśli NIE to: |
|
11 |
ile := ile + 1
powrót do kroku 5 |
zwiększenie licznika prób o 1 |
12 |
koniec |
|
|
 |
do góry
|