max

Transkrypt

max
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 𝒆𝒙 dla
dowolnego x, z rozwinięcia w szereg Taylora
∞
𝒏
𝒙
𝒆𝒙 =
𝒏!
𝒏=𝟎
Analiza problemu, algorytm
Wartości funkcji składowych można policzyd
iteracyjnie:
𝟏
𝒅𝒍𝒂 𝒏 = 𝟎
𝒙 =
𝒙 ∙ 𝒙 ∙ ⋯ ∙ 𝒙 (𝒏 𝒓𝒂𝒛𝒚) 𝒅𝒍𝒂 𝒏 > 𝟎
𝒏
bądź rekurencyjnie:
𝟏
𝒏
𝒙 = 𝒏−𝟏
𝒙
∙𝒙
𝒅𝒍𝒂 𝒏 = 𝟎
𝒅𝒍𝒂 𝒏 > 𝟎
Analiza problemu, algorytm – cd.
Podobnie dla drugiej funkcji
iteracyjnie:
𝟏
𝒅𝒍𝒂 𝒏 = 𝟎
𝒏! =
𝟏 ∙ 𝟐 ∙ ⋯ ∙ 𝒏 𝒅𝒍𝒂 𝒏 > 𝟎
lub rekurencyjnie:
𝟏
𝒅𝒍𝒂 𝒏 = 𝟎
𝒏! =
𝒏 − 𝟏 ! ∙ 𝒏 𝒅𝒍𝒂 𝒏 > 𝟎
Analiza problemu, algorytm – cd.
Bardzo ważne:
kryterium zakooczenia obliczeo!
Np. dla małego 𝜺
𝒏+𝟏
𝒌=𝟎
lub
𝒌
𝒙
−
𝒌!
𝒏
𝒌=𝟎
𝒙𝒌
<𝜺
𝒌!
Analiza problemu, algorytm – cd.
𝒙𝒌+𝟏
𝒙𝒌
−
<𝜺
𝒌 + 𝟏 ! 𝒌!
Zauważmy, że 𝒏-ty wyraz szeregu ma postad:
𝒙𝒏
𝒙𝒏−𝟏
𝒙
=
∙
𝒏!
𝒏−𝟏 ! 𝒏
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
Obiekty
(dane)
Dane
Problem
(zadanie)
Cel
Analiza
problemu
Algorytm
Program
Moduły
Procedury
Akcje
(instrukcje)
Wyniki
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
NIE
FALSE
W
Przetwarzanie; skrzynka
operacyjna (instrukcja).
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
TAK
Pisz „NWR”
b=0?
a=0?
NIE
Pisz „RS”
STOP
NIE
x:=-b/a
Pisz (x)
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 a1, a2, …, an (wyrazy ciągu dalej niepotrzebne)
START
Czytaj (n)
Czytaj (a1)
max:=a1
i:=2
Czytaj (ai)
ai>max?
TAK
NIE
i:=i+1
max:=ai
i=n
TAK
Pisz
(max)
STOP
NIE
P 5: Algorytm z pętlą - maksymalny element z ciągu
danych n liczb a1, a2, …, an (wyrazy ciągu dalej potrzebne)
START
i:=1
Czytaj (ai)
i:=i+1
i=n
TAK
NIE
max:=a1
i:=2
ai>max?
NIE
TAK
i:=i+1
max:=ai
i=n
TAK
Pisz (max)
STOP
NIE
Lista pracowników z dośw. komputerowym,
zatrudnionych od co najmniej 5 lat
START
LiczPrac:=0
NIE
Drukuj
(LiczPrac)
STOP
Czy są
jeszcze
jakieś
rekordy
TAK
Czytaj rekord
pracownika
Czy ma
dośw.
komp?
TAK
TAK
Czy
zatrudn.
>5 lat?
Wydrukuj
nazwisko
pracownika
LiczPrac:=LiczPrac+1
NIE
NIE
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
cyfra
Liczba całkowita bez znaku
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ł
źródłowy 2
Moduł
źródłowy 3
Moduł
wynikowy 1
Kompilator
Moduł
wynikowy 2
Moduł
wynikowy 3
Program
łączący
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