Algorytm - rkpomoce

Transkrypt

Algorytm - rkpomoce
Algorytm
a programowanie -
Program komputerowy:
Program komputerowy można rozumieć jako:
• kod źródłowy - program komputerowy zapisany w pewnym
języku programowania, zestaw poszczególnych instrukcji,
• plik wykonywalny - program, który można uruchomić.
Etapy tworzenia
programu:
• Kod źródłowy programu w języku C
jest to plik tekstowy
z rozszerzeniem .c, który może być
przygotowany w dowolnym edytorze
zapisującym niesformatowane
pliki tekstowe.
• Kompilacja polega na
przetłumaczeniu kodu źródłowego
na tzw. kod wynikowy, maszynowy
(pliki z rozszerzeniem .o lub .obj).
Etapy tworzenia programu:
• Podczas kompilacji programu mogą wystąpić błędy.
• Poprawienie tego rodzaju błędów wymaga ponownej
edycji kodu źródłowego.
• Łączenie (konsolidacja) polega na połączeniu kodu
wynikowego (.o lub .obj) z odpowiednimi bibliotekami.
• Podczas łączenia mogą wystąpić błędy spowodowane
brakiem odpowiedniej biblioteki.
• Uruchomienie pliku wykonywalnego .exe.
Etapy tworzenia programu:
• Po uruchomieniu programu mogą wystąpić błędy.
• Błędy takie mogą być spowodowany wykonaniem przez
program niedozwolonej operacji, np. odwołaniem do
zabronionego obszaru pamięci.
• Innego rodzaju błędem może być zwrócenie przez
program niepoprawnego wyniku.
• W obu przypadkach poprawienie błędu wymaga
ponownej edycji kodu źródłowego.
Uruchomienie programu:
• Skompilowany program (plik wykonywalny .exe)
przechowywany jest na nośniku danych (np. dysk twardy,
dyskietka, płyta CD/DVD, PenDrive).
• Uruchomienie programu wymaga jego odczytania z nośnika
i załadowania do pamięci operacyjnej komputera (RAM).
Za taką operację odpowiedzialny jest system operacyjny.
• Uruchomiony program nazywany jest procesem.
•Proces w pamięci komputera ma określoną strukturę,
przedstawioną na poniższym
rysunku.
Uruchomienie programu:
Blok kontrolny procesu jest
strukturą danych tworzoną
i zarządzaną przez system
operacyjny, a opisującą właściwości
procesu.
• Blok kontrolny procesu zawiera
m.in. identyfikator, stan procesu,
priorytet, licznik programu,
wskaźniki pamięci, informacje na
temat żądań we/wy.
Uruchomienie programu:
Program jest to kod wykonywanego programu
(instrukcje programu).
Dane są to dane potrzebne programowi podczas
wykonywania.
Stos jest specjalnym miejscem, w którym
przechowywane są tzw. zmienne lokalne oraz kody
powrotu z funkcji.
Programy komputerowe działają zazwyczaj zgodnie
z pewnym algorytmem
Definicje algorytmu:
algorytm - skończony, uporządkowany ciąg jasno
zdefiniowanych czynności, koniecznych do wykonania
pewnego zadania.
algorytm - metoda rozwiązania zadania.
algorytm - ściśle określona procedura obliczeniowa, która
dla właściwych danych wejściowych zwraca żądane dane
wyjściowe zwane wynikiem działania algorytmu.
algorytm - skończony zbiór reguł, wskazujący kolejność
operacji przy rozwiązywaniu
problemu pewnego typu.
Podstawowe cechy algorytmu:
• Algorytm powinien posiadać dane wejściowe (w ilości większej lub
równej zeru) pochodzące z dobrze zdefiniowanego zbioru.
• Algorytm powinien zwracać pewien wynik:
- działanie algorytmu niezwracającego wyniku pozbawione jest sensu.
• Algorytm powinien być precyzyjnie zdefiniowany: - każdy krok
algorytmu musi być jednoznacznie określony.
• Algorytm powinien być zawsze poprawny:
- ale dla każdego z założonego dopuszczalnego zestawu danych
wejściowych,
- w algorytmie mogą (ale nie muszą) być zaimplementowane
mechanizmy reakcji na błędne dane wejściowe.
• Algorytm powinien zawsze kończyć się po skończonej liczbie
kroków:
- w algorytmie powinna istnieć poprawnie działająca reguła stopu.
• Algorytm powinien być efektywny:
- jak najkrótszy czas wykonania,
- jak najmniejsze zapotrzebowanie na pamięć.
Podstawowe cechy algorytmu:
• Algorytm może zostać zaimplementowany w postaci programu
komputerowego lub dla innego urządzenia.
• Ten sam algorytm może być zaimplementowany w różny sposób przy
użyciu różnych języków programowania.
1. Opis słowny algorytmu:
Opis słowny przypomina przepis kulinarny z książki kucharskiej
2. Schemat blokowy:
• Schematy blokowe nie mają jednej, ściśle określonej postaci.
• Najczęściej na schematach blokowych występują cztery podstawowe
elementy (początek algorytmu, koniec algorytmu, blok funkcyjny, blok decyzyjny)
oraz strzałki określające kolejność wykonywania operacji.
• Elementy występujące na schematach blokowych algorytmów:
Algorytm Euklidesa:
Rozważmy sposób zapisu jednego z najbardziej znanych algorytmów –
algorytmu Euklidesa znajdowania największego wspólnego dzielnika dwóch
liczb - NWD(a,b)
Przykład nr 1.2
Algorytm: Euklidesa (opis algorytmu w punktach)
Dane wejściowe: niezerowe liczby naturalne a i b
Dane wyjściowe: NWD(a,b)
Kolejne kroki:
1. Czytaj liczby a i b.
2. Dopóki a i b są większe od zera, powtarzaj krok 3, a następnie przejdź
do kroku 4.
3. Jeśli a jest większe od b, to weź za a resztę z dzielenia a przez b, w
przeciwnym razie weź za b resztę z dzielenia b przez a.
4. Przyjmij jako największy wspólny dzielnik tę z liczb a i b, która pozostała
większa od zera.
5. Drukuj NWD(a,b).
Działanie powyższego algorytmu sprawdźmy na
przykładzie:
- szukamy: NWD(1675,3752), czyli a = 1675, b = 3752
- dzielimy większą liczbę przez mniejszą:
b/a = 3752/1675 = 2 reszta 402;
za b podstawiamy resztę z dzielenia, czyli teraz:
a = 1675, b = 402
- dzielimy większą liczbę przez mniejszą:
a/b = 1675/402 = 4 reszta 67; za a podstawiamy resztę z
dzielenia, czyli teraz: a = 67, b = 402
- dzielimy większą liczbę przez mniejszą: b/a = 402/67 = 6
reszta 0; za b podstawiamy resztę z dzielenia, czyli teraz: a =
67, b = 0
- za NWD przyjmujemy tę z liczb a i b, która jest większa od
zera, czyli: NWD(1675,3752) = 67
Przykład nr 1.3
Przykład nr 1.4
Zapis algorytmu Euklidesa w pseudokodzie.
NWD(a,b)
while a>0 i b>0
do if a>b
then a  a mod b
else b  b mod a
if a>0
then return a
else return b
Przykład nr 1.5
Zapis algorytmu Euklidesa jako funkcja w języku C.
int NWD(int a, int b)
{
while (a>0 && b>0)
if (a>b)
a = a % b;
else
b = b % a;
if (a>0)
return a;
else
return b;
}
Przykład nr 1.6
Narysuj schemat blokowy algorytmu wyznaczającego wartość bezwzględną
(moduł) liczby.
Wartość bezwzględna liczby określana jest następującym wzorem:
„Wczytaj(x)” można rozumieć jako podanie przez
użytkownika wartości x (wczytanie z klawiatury)
lub też przekazanie argumentu do funkcji, która
wyznacza wartość bezwzględną liczby.
„Drukuj(x)” można rozumieć jako wyświetlenie
na ekranie wyniku lub też zwrócenie go przez
funkcję.
W językach programowania do obliczenia
wartości bezwzględnej liczby stosowane są
funkcje (x jest argumentem przekazywanym do
funkcji):
- C, C++ - abs(x), fabs(x),
- Fortran - abs(x),
Przykład nr 1.7
Narysuj schemat blokowy algorytmu sprawdzającego parzystość liczby całkowitej.
Zasada działania powyższego algorytmu
jest następująca:
- wczytujemy liczbę x,
- jeśli liczba x jest ujemna, to zamieniamy
ją na dodatnią: x = -x,
- jeśli liczba x jest większa od 1, to
odejmujemy od niej wartość 2 - operację tę
powtarzamy do momentu, aż x będzie
mniejsze lub równe 1,
- jeśli x jest równe 0, to liczba była
parzysta, w przeciwnym wypadku (czyli,
gdy x jest równe 1) - liczba była
nieparzysta
Przykład nr 1.8
Parzystość liczby całkowitej można
sprawdzić w prostszy sposób,
wykorzystując dzielenie modulo.
Dzielenie modulo zwraca resztę z
dzielenia.
Jeżeli liczbę całkowitą podzielimy
modulo 2 to w wyniku możemy
otrzymać:
- 0 - jeśli liczba jest parzysta,
- 1 lub -1 - jeśli liczba jest nieparzysta.
Schemat blokowy algorytmu
sprawdzającego parzystość liczby przy
wykorzystaniu dzielenia modulo 2
przedstawiony jest na poniższym
rysunku.
Przykład nr 1.9
Narysuj schemat blokowy algorytmu obliczającego silnię
liczby n.
Silnią liczby naturalnej n (w notacji matematycznej n!)
nazywamy iloczyn wszystkich liczb naturalnych nie
większych niż n.
n!= 1× 2 × 3×... × n
przy czym 0!=1,
1!=1,
2!=1× 2,
3!=1× 2×3, ...
Przykład nr 1.10
Narysuj schemat blokowy algorytmu rozwiązującego równanie kwadratowe.
ZADANIE DOMOWE