michaelxp91
Administrator Master of Puppets


Wiek: 17 Dołączył: 11 Cze 2006 Posty: 2687 Otrzymał 4 piw(a) Skąd: Ruda Śląska
|
Wysłany: 2007-10-25, 17:37 | Schematy blokowe - podstawy budowy algorytmów. |
|
|
|
Schematy blokowe, czyli prosty sposob zapisu algorytmow.
W oparciu o skladnie Pascalowa.
Zaczynamy od notki z Wikipedii:
| wikipedia.pl napisał/a | Schemat blokowy (ang. block diagram, flowchart) - diagram, na ktorym procedura, system albo program komputerowy sa reprezentowane przez opisane figury geometryczne, polaczone liniami zgodnie z kolejnoscia wykonywania czynnosci wynikajacych z przyjetego algorytmu rozwiazania zadania.
Schemat blokowy pozwala dostrzec istotne etapy algorytmu i logiczne zaleznosci miedzy nimi.
Zaleznie od przedstawianego algorytmu stosowane sa rozne zestawy figur geometrycznych zwanych blokami, ktorych ksztalty reprezentuja umownie rodzaje elementow skladowych. |
Krotko mowiac, jest to prosty, graficzny, najlogiczniejszy z mozliwych sposobow zapisu algorytmow (1e: to jest proste! Bez tego ani rusz do programowania w Pascalu.).
Calosc opiera sie na czterech rodzajach skrzynek:
– skrzynki rozpoczecia i zakonczenia. BEGIN jest zawsze na poczatku schematu – END zawsze na jego koncu.
– skrzynki wejscia / wyjscia. Za pomoca READ wprowadzamy dane do programy: wczytujemy wartosci zmiennych, elementy tablicy itd. WRITE wyprowadza, lub inaczej mowiac drukuje, podane jej wartosci.
– skrzynka operacyjna. Wewnatrz tego prostokata wykonywane sa wszystkie operacje, np. obliczenia matematyczne (dodawanie, odejmowanie itd...), zmiana wartosci zmiennych, przypisywanie wartosci itd.
– skrzynka warunkowa. Jako jedyna posiada jedno wejscie, dla dwa wyjscia – YES i NO. Zawsze, gdy wyrazenie zawarte w tej skrzynce zwraca wartosc logiczna 1, program zostaje skierowany na wyjscie YES. W przeciwnym razie (warunek nie jest spelniony, wartosc logiczna 0), program przechodzi przez wyjscie NO.
Wazna jest tez znajomosc operatorow i znakow dzialan wykorzystywanych w Pascalu.
:= – operator przypisania. Taki zapis przypisze danej zmiennej podana przez uzytkownika wartosc, dla przykladu zapis x := 3 oznacza przypisanie wartosci 3 dla zmiennej x.
= – operator porownania. Stosowany w skrzynkach warunkowych, porownuje wartosc dwoch wyrazen, np. x = 3 odczytujemy jako porownanie wartosci 3 z wartoscia ukryta pod zmienna x. Jesli beda one rowne, dzialanie zwroci wartosc logiczna 1, a jesli nie beda, zwroci 0.
<> – operator nierownosci. Oznacza dokladne pojecie 'rozny od'. Zasady te same, dla x <> 3, warunek jest spelniony jesli wartosci sa rozne, znow gdy sa rowne – nie zostaje spelniony. Jest to dokladnie odwrotne dzialanie niz w przypadku operatora porownania.
<= – mniejszy lub rowny, zasady warunkow j/w.
>= – wiekszy lub rowny, zasady warunkow j/w.
< – mniejszy od, zasady warunkow j/w.
> – wiekszy od, zasady warunkow j/w.
+ – operator dodawania.
- – operator odejmowania.
* – operator mnozenia.
/ – operator dzielenia.
mod – reszta z dzielenia. Dla zapisu np. x mod 3 = 1 oznacza sprawdzenie, czy reszta z dzielenia x przez 3 jest rowna 1.
a, b, i, x itd. - zmienne. Wyrazenia, pod ktorymi mozemy 'ukrywac' rozne wartosci np. liczbowe.
t[ ] – tablica. Jest to specyficzny rodzaj zmiennej zawierajacej wiele elementow. Litera, wyraz, lub ciag znakow oznacza nazwe tablicy, znow wartosc podana w nawiasie kwadratowym – wspolrzedne wybranego przez nas elementu. W tablicach jednowymiarowych bedzie to liczba, okreslajaca do ktorego z ciagu elementow chcemy sie odwolac. W przypadku tablic dwuwymiarowych, beda to dwie wspolrzedne, podane po przecinku, na zasadzie dokladniej takiej samej jak przy grze w statki.
Proste? No pewnie, wszystko logiczne, do zapamietania. Teraz kilka przykladow.
!! W przykladach wazny jest uklad blokow. Podpisy skrzynek moga sie roznic. W skladni Pascalowej zamiast wyrazu 'start' wystapi 'begin' itd. Nie ma to wiekszego znaczenia. !!
Prosty i znany wszystkim algorytm Euklidesa, czyli obliczanie NWD.
Interpretacja: schemat rozpoczyna skrzynka otwierajaca algorytm. Nastepnie do programu wprowadzane sa wartosci dla zmiennych a i b. Wartosci zmiennych sa porownywane – w przypadku, gdy zachodzi nierownosc pomiedzy zmiennymi, otrzymujemy wartosc logiczna 1, przechodzimy dalej wraz ze strzalka TAK do nastepnej skrzynki warunkowej. Jesli znow warunek nie jest spelniony (czyli zmienne sa sobie rowne) przechodzimy wzdluz drugiej strzalki – tam zostaje wypisana wartosc zmiennej a oraz nastepuje zakonczenie pracy programu. Wrocmy jednak do sytuacji, gdy nierownosc zostala spelniony – przechodzimy do drugiej skrzynki warunkowej. Porownywane sa wartosci zmiennych. Jesli a jest wieksze od b (warunek spelniony) przechodzimy dalej wzdluz strzalki TAK, jesli znow warunek nie zostaje spelniony (czyli wieksza wartosc ma zmienna b) idziemy w kierunku drugiej strzalki. Tam, w zaleznosci od wyniku sprawdzania warunku, albo zmieniamy wartosc zmiennej a, albo b. W pierwszym przypadku (a := a – b) wartosc zmiennej a zmniejszymy o wartosc zmiennej b, w drugim (b := b – a) robimy to samo ze zmnienna b. Po wykonaniu tej operacji wracamy do sprawdzania warunku – jest to tzw. petla. Calosc operacji bedzie powtarzana tak dlugo, az zmienne a i b uzyskaja te same wartosci (warunek a <> b nie bedzie spelniony), wtedy przejdziemy do drukowania wartosci jednej ze zmiennych i konca dzialania programu. Proste? Jakies pytania?
To teraz tablice jednowymiarowe, prosty przyklad. Wypelnianie tablicy k-elementowej i drukowanie jej zawartosci w odwrotnej kolejnosci.
Znow – pierwsza skrzynka, rozpoczecie programu. Nastepnie mamy doczynienia ze skrzynka operacyjna, w ktorej dla zmiennej i przypisujemy wartosc 1. Zmienna ta jest tzw. licznikiem iteracji, o niej pozniej. Przechodzimy do skrzynki warunkowej – program sprawdza, czy wartosc zmiennej i jest wieksza od zmiennej k (ilosci elementow tablicy). Jesli jest wieksza (a i ma wartosc 1), jednoznaczny staje sie fakt, iz zmienna k musi posiadac wartosc 0 – czyli tablica nie posiada zadnego elementu, wiec przejdziemy dalej. Jednak, jesli warunek nie bedzie spelniony (czyli i nie bedzie wieksze od k) przechodzimy do bloku instrukcji nastepujacych za wyjsciem NIE. Skrzynka wczytywania wartosci dla zmiennej a, tutaj uzytkownik poda jakas przykladowa wartosc, ktora w nastepnej skrzynka zostanie wpisana do tabeli – w tym wypadku bedzie to pozycja t[1]. Dlaczego akurat tak? Poniewaz zmienna i, czyli licznik iteracji, ma aktualnie wartosc 1. Chwile pozniej jestesmy w skrzynce operacyjnej, gdzie zwiekszamy wartosc licznika o 1, tak wiec gdy nastepnym razem dojdziemy do przypisania zmiennej do tablicy, licznik bedzie posiadal wartosc 2, wiec aktualna pozycja w tablicy bedzie wyrazona za pomoca zapisu t[2] – drugiego elementu, bo pod zmienna i siedzi dwojka, i tak za kazdym razem powtarzania sie tych operacji (petla). Po wykonaniu k-razy tych funkcji, wartosc zmiennej i bedzie rowna k + 1, wiec pierwszy warunek (i > k) zostanie spelniony – mozemy przejsc do instrukcji za strzalka TAK. Tam nastepuje przypisania do zmiennej j wartosci k – to rowniez bedzie licznik iteracji. Porownujemy, czy wartosc j jest mniejsza od 1. W przypadku niespelnionego warunku przechodzimy do strzalki NIE, gdzie czeka na nas skrzynka wypisujaca element tablicy. Dla j rownego k, bedzie to ostatni element tablicy, ktory przypisalismy do niej w poprzedniej petli. Nastepnie zmniejszamy wartosc licznika o 1, i znow przechodzimy przez wszystkie instrukcje petli – sprawdzamy warunek, wypisujemy wartosc, zmniejszamy licznik o 1. Powtarzamy to do momentu gdy j osiagnie wartosc 1, wtedy zostanie wypisany element t[1], wartosc j zostanie zmniejszona do 0, a wiec warunek zostanie zmniejszony – zero jest mniejsze od jeden. Przechodzimy do strzaleczki TAK, gdzie nastepuje koniec programu. Wypelnilismy tym samym tablice k-elementowa oraz wypisalismy wszystkie elementy w odwrotnej kolejnosci – a algorytm bedzie dzialal dla kazdej wartosci zmiennej k wyrazonej liczba naturalna. Proste?
Jakies pytania? Prosze na GG, numer na dole, postaram sie pomoc.
Artykul zostal napisany z mysla o uczniach 1e ( ), ale postaram sie w razie potrzeby pomoc kazdemu uzytkownikowi forum. Temat bedzie poszerzany, gdy tylko mi sie znow zachce postaram sie opisac tablice dwuwymiarowe, oraz ewentualnie jakis inny przyklad, na prosbe uzytkownikow.
Autor: Michal Pawlica.
Wszelkie prawa zastrzezone.
Pozdrawiam. |
_________________
 |
|