Algorytmy Etapy tworzenia programu: 1) Sformułowanie zadania analiza problemu. 2) Opracowanie algorytmu sposób rozwiązania. 3) Zapisanie algorytmu w języku programowania kodowanie programu. 4) Kompilowanie programu (efekt plik typu.exe). 5) Testowanie programu dla różnych grup danych.
Algorytmy od problemu do wyniku Ad 1) Co program ma robid: - jakie dane na wejściu - jakie wyniki na wyjściu Przykład: a) Program oblicza wartośd funkcji e x dla dowolnego x, z rozwinięcia w szereg Taylora e x = n=0 x n n!
Analiza problemu, algorytm Wartości funkcji składowych można policzyd iteracyjnie: x n 1 dla n = 0 = x x x (n razy) dla n > 0 bądź rekurencyjnie: x n 1 dla n = 0 = x n 1 x dla n > 0
Analiza problemu, algorytm cd. Podobnie dla drugiej funkcji iteracyjnie: n! = lub rekurencyjnie: n! = 1 dla n = 0 1 2 n dla n > 0 1 dla n = 0 n 1! n dla n > 0
Analiza problemu, algorytm cd. Bardzo ważne: kryterium zakooczenia obliczeo! Np. dla małego ε n+1 k=0 x k k! n k=0 x k k! < ε lub
Analiza problemu, algorytm cd. x k+1 k + 1! xk < ε k! Zauważmy, że n-ty wyraz szeregu ma postad: x n n! = xn 1 n 1! x n Pytanie: jak liczyd sumę w algorytmie?
Algorytmy cd. b) Program wyszukuje w bazie danych WME studentów ze średnią >=4 i sporządza ich listę. EXCEL funkcje warunkowe i That s it! Ad 2): Sposób rozwiązania: musimy wiedzied, czy rozwiązanie istnieje i wiedzied, czy jest jednoznaczne
Etapy tworzenia programu - cd Ad 3) Platforma programisty (np. edytor tekstowy), powstaje tzw. kod źródłowy (nie program!) Ad 4) Kompilacja + konsolidacja = plik wykonywalny (.exe) Ad 5) Testowanie. Dane kontrolne.
Algorytm Zbiór akcji wykonanych w określonej kolejności na obiektach. Zbiór reguł postępowania (przepis), mający na celu w skooczonej liczbie kroków przetworzenie informacji wejściowych (dane) w informacje wyjściowe (wyniki). Wartości wspólne dla algorytmu i programu: poprawnośd skooczonośd
Modularyzacja algorytmów Każdy algorytm można podzielid na moduły. Większośd języków programowania: - podprogramy - procedury Programowanie strukturalne. Programowanie obiektowe (OOP Object Oriented Programming)
Schemat Dane Wyniki Dane Obiekty (dane) Problem (zadanie) Analiza problemu Algorytm Program Wyniki Cel Moduły Procedury Akcje (instrukcje)
Jeszcze o algorytmie Raz opracowany dla danego problemu dobry dla wszystkich problemów tej samej klasy Przed opracowaniem algorytmu: czy zadanie jest rozwiązalne i czy rozwiązanie jest jednoznaczne? Przy zadaniach inżynierskich: analiza matematyczna z użyciem metod numerycznych Powinien uwzględniad wszystkie warianty przebiegu obliczeo z powodu różnych danych
Schematy blokowe (sieci działao) Graficzny sposób przedstawienia algorytmu. Składa się ze ściśle określonych figur geometrycznych Stanowi brakujące ogniwo między sformułowaniem zadania w języku użytkownika a przedstawieniem go w postaci programu Umożliwia szybkie orientowanie się w organizacji algorytmu.
Niektóre symbole stosowane w schematach blokowych I Przetwarzanie; skrzynka operacyjna (instrukcja). NIE FALSE W TAK TRUE Decyzja; skrzynka warunkowa; określa wybór jednej z alternatywnych dróg działania
Niektóre symbole stosowane w schematach blokowych cd. WE/WY Skrzynka wprowadzania i (lub) wyprowadzania danych START Skrzynki graniczne STOP
Algorytm liniowy Przykład 1: suma dwóch liczb START Wprowadź (a) Wprowadź (b) S=a+b Wypisz (S) STOP
Przykład 2: Algorytm z rozgałęzieniami Program rozwiązuje równanie liniowe ax+b=c dla dowolnych współczynników a, b, c. Analiza problemu: a=0 i b=0: nieskooczenie wiele rozwiązao a=0 i b<>0: równanie sprzeczne a<>0: x=-b/a
Algorytm z rozgałęzieniami START Podaj (a) Podaj (b) TAK a=0? NIE TAK b=0? NIE x:=-b/a Pisz NWR Pisz RS Pisz (x) STOP
Algorytm z rozgałęzieniami Pseudokod w umownym strukturalnym języku programowania. Podaj (a) Podaj (b) Jeśli a=0 To Jeśli b=0 to Pisz ( Nieskooczenie wiele rozwiązao ) W przeciwnym razie Pisz ( Równanie sprzeczne ) W przeciwnym razie Początek x:=a/b Pisz (x) Koniec
P3: Algorytm z pętlą suma 5 kolejnych liczb naturalnych START S:=0 i:=1 S:=S+i i:=i+1 NIE i>5 TAK Pisz (s) STOP
P 4: Algorytm z pętlą - maksymalny element z ciągu danych n liczb a 1, a 2,, a n (wyrazy ciągu dalej niepotrzebne) START Czytaj (n) Czytaj (a 1 ) max:=a 1 i:=2 Czytaj (a i ) a i >max? TAK NIE i:=i+1
max:=a i i=n NIE TAK Pisz (max) STOP
P 5: Algorytm z pętlą - maksymalny element z ciągu danych n liczb a 1, a 2,, a n (wyrazy ciągu dalej potrzebne) START i:=1 Czytaj (a i ) i=n TAK NIE i:=i+1
max:=a 1 i:=2 a i >max? NIE TAK max:=a i i:=i+1 i=n NIE TAK Pisz (max) STOP
Lista pracowników z dośw. komputerowym, zatrudnionych od co najmniej 5 lat START LiczPrac:=0 NIE Drukuj (LiczPrac) Czy są jeszcze jakieś rekordy TAK Czytaj rekord pracownika STOP
TAK Czy ma dośw. komp? NIE TAK Wydrukuj nazwisko pracownika Czy zatrudn. >5 lat? NIE LiczPrac:=LiczPrac+1
Zadanie domowe Opracowad schemat blokowy dla algorytmu Euklidesa znajdowania Największego Wspólnego Dzielnika (NWD) dla dwóch liczb całkowitych: Jeśli a>b, to NWD(a, b)=nwd(b, a mod b) Działanie mod zwraca resztę z dzielenia całkowitego Kryterium zakooczenia algorytmu: Gdy b=0, to NWD(a, b)=a
Języki programowania Język przeznaczony do zapisu algorytmu komputerowego. Ma określone: alfabet składnię (syntaktykę) reguły znaczeniowe (semantyka) Przykład: - notacja Backusa-Naura - diagramy syntaktyczne
Notacja Backusa-Naura <, > symbol definiowany ::= z definicji równa się / albo <cyfra>::=0/1/2/3/4/5/6/7/8/9 <litera>::=a/b/c/ /z/a/b/c/ /Z <identyfikator>::=<litera> / <identyfikator><litera> / <identyfikator><cyfra>
Diagramy syntaktyczne 1) Identyfikator Litera Litera Cyfra
2) Liczba Liczba całkowita bez znaku cyfra Liczba bez znaku Liczba całkowita bez znaku. cyfra E + - Liczba całkowita bez znaku
Klasyfikacja języków programowania poziom mikroprogramowania język maszynowy (wewnętrzny) język asemlerowy języki wyższe (proceduralne): - języki trzeciej generacji (np. BASIC, Pascal, FORTRAN, C) - języki czwartej generacji deklaratywne, Np. w bazach danych: FIND ALL RECORDS WHERE LASTNAME= TUSK języki visual (np. Visual Basic, Java, C++, Pascal)
Translator Program tłumaczący kod źródłowy na program wynikowy (w języku wewnętrznym). Trzy typy: asemblery z języka asemblerowego na wewnętrzny kompilatory tłumaczą cały program przed wykonaniem interpretery czyta, tłumaczy i wykonuje jedną linię po drugiej z kodu źródłowego
Zadania translatorów 1) Rozpoznanie w programie źródłowym jednostek składniowych języka 2) Analiza poprawności składni programu 3) Informowanie użytkownika o zaistniałych błędach 4) Powiązanie identyfikatorów (zmiennych, etykiet itd.) z adresami w pamięci operacyjnej 5) Łączenie przekładu z używanymi podprogramami bibliotecznymi (konsolidacja) 6) Przekształcanie wyrażeo arytmetycznych w ciąg rozkazów języka wewnętrznego, z uwzględnieniem ogólnych zasad kolejności działao
Moduł źródłowy 1 Moduł wynikowy 1 Moduł źródłowy 2 Kompilator Moduł wynikowy 2 Program łączący Moduł źródłowy 3 Moduł wynikowy 3
PASCAL Program Szukanie_Max; Var i, n: byte; a, max: real; begin write ( Ile wyrazów ma ciąg? ); readln (n); readln (a); max:=a; for i:=2 to n do begin readln (a); if a > max then max:=a end; {for} write (max); end. BASIC INPUT n INPUT a LET max=a FOR i=2 TO n INPUT a IF a > max THEN LET max=a NEXT i PRINT max