Ć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.