Definicja, opracowana w 1989 roku przez ACM, mówi: „Informatyka zajmuje się całokształtem przechowywania, przesyłania, przetwarzania i interpretowania informacji. Wyróżnia się w niej dwa działy, dotyczące sprzętu i programowania”. Definicja, opracowana w 1989 roku przez ACM, mówi: „Informatyka to systematyczne badanie procesów algorytmicznych, które charakteryzują i przetwarzają informację, teoria, analiza, projektowanie, badanie efektywności, implementacja i zastosowania procesów algorytmicznych. Podstawowe pytanie informatyki to: co można (efektywnie) zalgorytmizować”. W celu rozwiązania dowolnego zadania przy wykorzystaniu komputera należy określić skończoną liczbę czynności, które należy wykonać na określonych danych, tj. skonstruować odpowiedni algorytm. Algorytmizacja jest to działanie pozwalające otrzymać algorytm. Algorytm zapisany w języku programowania nazywa się programem, w którym czynności opisane są za pomocą odpowiednich instrukcji języka. Każdy algorytm: - posiada dane wejściowe i produkuje pewien wynik, - jest precyzyjnie zdefiniowany (za pomocą określonych instrukcji), - jest skończony, - powinien być efektywny.
Rys. Szybkość zmian w informatyce Poznanie zasad algorytmizacji oznacza nabycie umiejętności konstruowania i zapisywania algorytmów w taki sposób by mogły one być wykonywane przez komputer. Czy można powiedzieć, że nabyta umiejętność poddaje się jakimś stałym regułom skoro możliwości wykonywania algorytmów przez komputery zmieniają się tak szybko? Odpowiedzią może być cytat: „Mimo oszałamiającej szybkości z jaką niektóre z innowacji technicznych stają się bezużyteczne i są zastępowane następnymi” podstawy informatyki „zmieniają się powoli”. Charakter zmian w informatyce ilustruje rysunek Rys. Szybkość zmian w informatyce Z rysunku wynika, że zmiany w wytwarzaniu algorytmów są dużo wolniejsze niż postęp technologiczny i nabyte umiejętności algorytmizacji nie tracą tak szybko na wartości jak mogło by to wynikać z postępu technologicznego.
Czy w takim razie postęp technologiczny nie ma wpływu na rozwój zasad wytwarzania algorytmów? Postęp technologiczny ma wpływ na rozwój zasad wytwarzania algorytmów poprzez: · skrócenie czasu realizacji algorytmów, · umożliwienie realizowania algorytmów dla dużej liczby przetwarzanych danych, · umożliwienie prezentacji wyników działania algorytmów o złożonej postaci wyników (obraz, dźwięk) oraz · umożliwienie udostępniania wyników szerokiemu gronu ich odbiorców w dowolnym miejscu i czasie. Rozwój technologii wpływa na rozwój algorytmów, których stosowanie było uwarunkowane ograniczeniami technologicznymi.
Ważniejsze fakty z historii algorytmiki i rozwoju maszyn liczących Abak(us) – liczydło w Mezopotamii X w. pne Euklides IV w. pne – algorytm znajdowania największego wspólnego podzielnika Muhammed ibn Musa al Chorezmi (Algorismus) VIII / IX w., matematyk, astronom (algorytm, algebra, zero, system dziesiętny) John Neper (XVII w.) – logarytmy, pałeczki Nepera Blaise Pascal (1623-1662) – Pascalina, maszyna mechaniczna (50 szt.) wykorzystywana przy poborze podatków i pomiarach geodezyjnych. Wykonywała dodawanie i odejmowanie Leibnic Gotfried (1646-1716) system binarny, maszyna mnożąca Joseph Jacquard (1801) krosno tkackie sterowane otworami w kartach perforowanych Charles Babbage (1791-1871) twórca maszyny różnicowej (np. kwadrat kolejnej liczby naturalnej jest sumą kwadratu poprzedniej liczby naturalnej i kolejnej nieparzystej liczby naturalnej) oraz projekt maszyny analitycznej sterowanej programem Ada Augusta hrabina Lovelance, córka Byrona – algorytmy dla maszyny Babbage’a Herman Hollerith (1860-1929) - karty perforowane i czytniki elektryczne (1890), IBM (1924) Alan Turing (1912-1954) – maszyna Turinga (1936) ENIAC (1946) – pierwszy komputer elektroniczny John von Neuman (1903-1957) komputer z zapamiętanym programem
Zasady algorytmizacji. Czym jest algorytmizacja? Algorytmizacja jest to działanie pozwalające otrzymać algorytm. W literaturze najczęściej spotykanym nieformalnym określeniem algorytmu jest zdefiniowanie go jako przepisu na otrzymywanie pożądanych wyników na podstawie posiadanych danych. Na algorytm musi składać się zatem opis trzech elementów: 1. pożądanych wyników działania algorytmu 2. danych wejściowych 3. sposobu otrzymania wyników na podstawie danych wejściowych. Pojęcie to chętnie jest ilustrowane za pomocą przykładów „z życia” oraz najstarszego opisanego algorytmu matematycznego: algorytmu Euklidesa. Przykłady 1 i 2 ilustrują rolę danych wejściowych w definicji algorytmu. Ten sam wynik (rozwiązanie problemu) można uzyskać dwoma różnymi sposobami w zależności od rodzaju posiadanych danych wejściowych.
Przykład 1: Obliczanie pola trójkąta: ad 1. pole ad 2. podstawa i wysokość ad 3. pole= podstawa*wysokość/2 Przykład 2:Obliczanie pola trójkąta: ad 2. trzy boki trójkąta ad 3. wzór Herona Przykład 3: Wyznaczanie podatku dochodowego od osób fizycznych: ad 1. wysokość podatku do dopłacenia ad 2. przychody, koszty uzyskania, wpłacona zaliczka na podatek dochodowy, odpisy od podstawy opodatkowania ad 3. Urząd Skarbowy (najbezpieczniej zadawać pytania o sposób obliczania podatku na piśmie) Przykład 4: Zupa dla smakoszy z nadwagą: ad 1. schudnąć i nie przestawać jeść ad 2. 6 dużych zielonych cebul, 1 lub 2 puszki pomidorów (mogą być świeże pomidory), duża główka kapusty, 2 zielone papryki, pęczek zielonego selera, 1 torebka przyprawy do zup. ad 3. Pokroić jarzyny w małe lub średnie kawałki i zalać wodą. Gotować na dużym ogniu 10 min. Zmniejszyć gaz i gotować powoli aż do czasu gdy jarzyny będą miękkie. (Wieczór Wybrzeża, 20.07.98 s.3) Przykład 5: Algorytm Euklidesa (wiek algorytmu: 2300 lat) ad 1. największy wspólny podzielnik c ad 2. dwie liczby całkowite a i b ad 3.
Algorytmy charakteryzują się pewnymi mierzalnymi cechami. Są nimi np.: · dokładność obliczeń, · złożoność obliczeniowa, · złożoność pamięciowa. Algorytmy posiadają pewne, najczęściej pożądane, właściwości (cechy). Są nimi: · poprawność - posiadanie tej cechy przez algorytm oznacza, że algorytm rzeczywiście wytwarza żądane wyniki, · określoność - cecha ta oznacza możliwość działania algorytmu niezależnie od wartości danych wejściowych, · wykonalność - algorytmu składa z kroków wykonalnych dla wykonawcy algorytmu, · testowalność - właściwość ta oznacza możliwość dokonania testów pozwalających rozstrzygnąć czy algorytm posiada wyżej wymieniowych cech. Algorytmy klasyfikuje się często ze względu na przeznaczenie wyników ich działania. Przykładowo wyróżnia się algorytmy numeryczne, graficzne, sterowania, komunikacyjne itp. Czasami podstawą klasyfikacji jest rodzaj użytej metody rozwiązania zadania otrzymania wyniku. Przykładami mogą być tu określenia: deterministyczne, losowe, heurystyczne, genetyczne. Zadanie otrzymania wyniku na podstawie danych może być rozwiązywane różnymi sposobami, a jeśli da się je doprowadzić do postaci algorytmu to mówimy o algorytmizacji problemu. Konstruując algorytm trzeba posiadać metodę jego zapisania. Spośród wielu znanych, nas będzie interesowała metoda polegająca na zastosowaniu opisu słownego, schematów blokowych i języka programowania. Zapis algorytmu w postaci programu komputerowego umożliwia jego realizację przez komputer.
Elementy schematów blokowych START KONIEC A>0 czytaj A, B pisz NWD A1 P := A*B sortuj dane
Konstrukcje sterujące Konstrukcje sterujące A=0 P:=A*B P:=A/B Rozgałęzienie T N P:=A*B OB:=2*(A+B) Sekwencja Iteracja A>0 A:=A-B N T A:=A+B licz > WK licz := WP instrukcja licz:=licz+1
Rozwiązywanie równania kwadratowego ax2 + bx + c =0 Dane: Współczynniki a, b, c równania. Wyniki: Pierwiastki równania, jeśli dane współczynniki rzeczywiście określają równanie kwadratowe i równanie ma pierwiastki. Jeśli równanie nie ma pierwiastków, to wypisz odpowiedni komunikat. Krok 1: Jeśli a = 0, to wypisz komunikat, że nie jest to równanie kwadratowe i zakończ algorytm. Krok 2: Oblicz wartość wyróżnika = b2 – 4ac Krok 3: Jeśli <0 , to wypisz komunikat, że równanie kwadratowe nie ma pierwiastków i zakończ algorytm. Krok 4: Jeśli =0 , to oblicz oba pierwiastki z tego samego wzoru: x1 = x2 = -b/(2a), wypisz ich wartości i zakończ algorytm. Krok 5: {W tym przypadku >0} Oblicz pierwiastki według wzorów: wypisz ich wartości i zakończ algorytm.
START czytaj a, b, c a=0 pisz „To nie RK” =b2 - 4ac <0 pisz „Brak pierw.” =0 oblicz x1=x2 oblicz x1 x2 pisz „x1=x2” pisz „x1 oraz x2” KONIEC
Algorytm szukania NWD dwóch liczb całkowitych (prosty) Dane: niezerowe liczby naturalne a i b. Wynik: NWD(a,b) Czytaj liczby a i b Ustal wartość zmiennej d na mniejszą z liczb a i b. Dopóki wartość d nie jest podzielnikiem a i b powtarzaj krok 4, a następnie przejdź do kroku 5. Zmniejsz wartość zmiennej d o jeden. Drukuj wartość NWD=d. function NWD(a, b: integer) : integer; var d, N: integer; begin if a<b then d:=a else d:=b; while (a mod d <> 0) or (b mod d <> 0) do d:=d+1; NWD:=d; end;
Algorytm Euklidesa znajdowania NWD Dane: niezerowe liczby naturalne a i b. Wynik: NWD(a,b) Czytaj liczby a i b. Dopóki a i b są większe od zera, powtarzaj krok 3, a następnie przejdź do kroku 4. 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. Przyjmij jako największy wspólny dzielnik tę z liczb a i b, która pozostała większa od zera. Drukuj NWD(a, b). function NWD(a, b: integer): integer; begin while (a>0) and (b>0) do if a>b then a := a MOD b else b := b MOD a; NWD := a+b; end; NWD(a,b)=NWD(a modb, b) dla a>b>0 Dowód: a = q*b+r 0≤r<b r = a-q*b a i b są podzielne przez NWD(a,b), a zatem i r = a mod b jest podzielne