Ćwiczenie 3-4 Iteracje

Transkrypt

Ćwiczenie 3-4 Iteracje
ITERACJA – POWTÓRZENIE
Jak przewidziała Ada Augusta hrabina
Lovelance
zastosowanie
komputerów
przynosi największe korzyści wtedy, gdy
wykonują one wielokrotnie te same operacje
na kolejnych porcjach danych. Mówimy
wówczas
o
wykonywaniu
instrukcji
iteracyjnych
(pętli
programowych).
Instrukcje w pętli mogą być powtarzane
znaną z góry liczbę razy lub do spełnienia
określonego warunku. W przypadku pętli
wykonywanych określoną liczbę razy należy
w algorytmie przewidzieć zastosowanie
zmiennej wykorzystywanej jako licznik pętli.
Zmienna ta jest inicjowana wartością
początkową
na
początku
instrukcji
iteracyjnej, zwiększana o 1 po każdym
wykonaniu instrukcji w pętli i porównywana
z wartością końcową w celu sprawdzenia
warunku zakończenia pętli
licz := WP
licz > WK
T
N
instrukcja
licz:=licz+1
Iteracja wykonywana określoną liczbę razy
‰
Sumowanie i obliczanie średniej
Gdy kilkakrotnie mierzymy jakąś wielkość otrzymujemy często wyniki nieco
różniące się od siebie. W takiej sytuacji odpowiedź na pytanie ile właściwie wynosi
mierzona wielkość wymaga obliczenia średniej - najczęściej stosuje się wtedy średnią
arytmetyczną: sumę wszystkich wyników pomiarów podzieloną przez ich ilość.
Spróbujmy zaplanować algorytm obliczania średniej arytmetycznej N liczb, w którym
nie są zapamiętywane wszystkie liczby.
Najpierw musimy wiedzieć ile jest liczb, czyli wczytać N - będzie to drugi
klocek po startowym. Następny klocek - obliczeniowy ma zadanie nadać wartości
początkowe dwóm zmiennym: suma - pojemnikowi na sumę liczb oraz licz - licznikowi
wczytywanych liczb. Obie zmienne powinny być na starcie równe zero.
Teraz zorganizujmy pętlę sumowania kolejnych liczb:
najpierw sprawdzamy warunek - czy stan licznika jest mniejszy niż N
jeśli TAK - wczytujemy kolejną liczbę x,
dodajemy ją do sumy,
zwiększamy licznik o 1
i wracamy na początek pętli;
jeśli NIE - to wszystkie liczby zostały już wczytane i możemy obliczyć średnią, dzieląc
otrzymaną sumę przez ilość liczb oraz wypisać uzyskaną wartość i zakończyć działanie
algorytmu.
START
wczytaj ilość liczb N
suma:=0
licz := 0
licz < N
N
T
średnia:=suma/N
wczytaj X
pisz średnia
suma:=suma +X
licz:=licz+1
KONIEC
Algorytm obliczania średniej arytmetycznej z N liczb
Po zbudowaniu i prześledzeniu funkcjonowania algorytmu można go modyfikować tak aby nie było
konieczne podawanie z góry ile liczb będzie wprowadzanych (trzeba się wtedy umówić, że jakaś
wartość np. 0 powoduje przerwanie wczytywania w pętli).
Korzystamy wówczas z innych konstrukcji pętli – takich, które wykonują się nieznaną z góry liczbę
razy. W trakcie wykonywania instrukcji w pętli należy tak modyfikować wartości zmiennych
wpływających na testowany warunek aby zapewnić wyjście z pętli – w przeciwnym razie uzyskamy
pętlę nieskończoną.
A>0
N
A:=A+B
T
A>0
A:=A-B
T
N
Pętla typu while
Pętla typu repeat
‰
Znajdowanie największej z podawanych liczb
Mamy znaleźć największą z nieznanej ilości podawanych kolejno liczb
nieujemnych
bez zapamiętywania tych liczb.
Gdy chcemy coś korzystnie sprzedać i zbieramy oferty - kto da więcej - nie wiemy
zawczasu ile będzie tych ofert. Trzeba wtedy postanowić, że np. liczba ujemna (która nie może
być ofertą) będzie sygnałem zakończenia działań.
Tak postąpimy przy znajdowaniu największej liczby. Tym razem będą potrzebne
dwa klocki sprawdzania warunku: pierwszy - sprawdzający czy podano liczbę ujemną decydujący o tym czy powtarzać działania, czy też je kończyć, drugi sprawdzający, czy podana
liczba jest większa niż aktualnie pamiętana kandydatka na największą.
1. Start
2. Wczytanie pierwszej wartości X,
3. Podstawienie X do MAX,
4. Sprawdzenie, czy wczytana liczba jest różna od wartości kończącej,
4A. Jeśli TAK, to:
5.Sprawdzenie, czy podana liczba jest większa od aktualnej kandydatki na największą,
5A. Jeśli TAK, to zmiana aktualnej kandydatki na podaną liczbę,
6. Wczytanie kolejnej wartości X
7. Powrót do punktu 4,
4B. Jeśli NIE, to Wypisanie największej z dotychczas podanych liczb,
8. Zakończenie działania.
START
wczytaj pierwszą
liczbę X
MAX:=X
T
N
X>MAX
X≠koniec
T
N
pisz MAX
MAX := X
KONIEC
wczytaj X
Algorytm znajdowania największej z nieznanej ilości podawanych kolejno liczb
‰
Obliczanie sumy cyfr liczby całkowitej
Algorytm
1.
Wczytaj badaną liczbę całkowitą a
2.
Wyzeruj sumę cyfr s
3.
Dopóki liczba a jest większa od zera wykonuj:
3a. Do sumy s dodaj resztę z dzielenia a przez 10
3b. Podziel zawartość a przez 10
4.
Wyświetl sumę cyfr s
‰
Sprawdzanie czy zadana liczba jest liczbą pierwszą
Algorytm 1
Z definicji liczba pierwsza to taka, która jest podzielna tylko przez 1 oraz przez samą siebie.
Aby sprawdzić, czy zadana liczba jest liczbą pierwszą poszukujemy jej podzielników wśród
kolejnych liczb naturalnych większych od 1. Jeśli znaleziony podzielnik jest mniejszy niż
badana liczba, to liczba ta nie jest liczbą pierwszą. W przeciwnym przypadku liczba jest
liczbą pierwszą.
Algorytm 2
Algorytm powyższy możemy znacznie usprawnić jeżeli zauważymy, że jeśli liczba a ma
podzielnik o wartości większej od
a to ma również podzielnik mniejszy od
Możemy zatem sprawdzanie zakończyć na pierwszej liczbie większej lub równej
a
a
‰
Algorytm Euklidesa
Ten algorytm jest jednym z najstarszych przepisów - schematów obliczeń. Jest on pomysłowy
i szybko daje wynik. Zadaniem jest znalezienie największego wspólnego dzielnika dwóch liczb
całkowitych (NWD) - jest to potrzebne na przykład przy skracaniu ułamków. Naturalnym
pomysłem jest sprawdzanie podzielności obu liczb przez kolejne liczby od 2 poczynając, a na
mniejszej liczbie kończąc. Lepszym i szybszym rozwiązaniem problemu jest właśnie algorytm
Euklidesa. Opiera się on na fakcie, że jeśli od większej liczby odejmiemy mniejszą, to ta
mniejsza liczba i otrzymana różnica będą miały taki sam największy wspólny dzielnik jak
pierwotne liczby. Gdy przy kolejnym odejmowaniu otrzymamy parę takich samych liczb, to
znaczy, że znaleźliśmy NWD.
Mamy znaleźć największy wspólny dzielnik dwóch liczb naturalnych (NWD).
Zbudujmy algorytm z klocków.
1. Najpierw musimy wczytać dwie liczby, których NWD będziemy poszukiwać.
2. Teraz przystąpimy do tworzenia pętli kolejnych odejmowań.
3. Jeśli liczby nie są sobie równe, to musimy zbadać, która jest większa, odjąć od niej mniejszą
i zastąpić ją przez otrzymaną różnicę, a następnie wrócić do początku pętli (punktu 2)
3a. w przeciwnym wypadku NWD jest np. pierwszą z nich
Algorytm zapisujemy w pliku
‰
Znajdowanie Najmniejszej Wspólnej Wielokrotności
Algorytm 1
Począwszy od większej z liczb a i b dla kolejnych liczb naturalnych sprawdź, czy a i b są
jej dzielnikami. Pierwsza taka napotkana liczba jest najmniejszą wspólną wielokrotnością
liczb a i b.
Algorytm 2
Korzystamy z zależności NWD(a,b)*NWW(a,b) = a*b
Algorytm 3 (Euklidesa)
Przyjmij za początkowe wartości zmiennych pomocniczych a1 i b1 odpowiednio a i b.
Dopóki wartości zmiennych a1 i b1 są różne powtarzaj krok:
jeśli wartość zmiennej a1 jest większa od wartości zmiennej b1 zwiększ b1 o b,
w przeciwnym razie zwiększ wartość a1 o a.
Przyjmij za NWW(a,b) wartość a1 lub b1.

Podobne dokumenty