Upload
phamlien
View
231
Download
2
Embed Size (px)
Citation preview
AlgoritmyBI-PA1 – Programovanı a Algoritmizace I.
Ladislav Vagner
Katedra teoreticke informatikyFakulta informacnıch technologiı
CVUT v [email protected]
2., 4. a 5. rıjna 2017
Kontakt
mıstnost A–1233, KTI FIT,
e-mail: [email protected],
agenda: proseminare, Progtest.
L. Vagner, CVUT FIT Algoritmy, BI-PA1 2/35
Programovacı jazyky a styly
Imperativnı (proceduralnı) programovanı:
Pascal, strojovy kod, . . .
Funkcionalnı programovanı:
Haskell, Lisp, . . .
Logicke (deklarativnı) programovanı:
Prolog, SQL, XSLT, . . .
OO programovanı:
Eiffel, Objective C, Smalltalk, . . .
Kam patrı Java, C++, a C?
L. Vagner, CVUT FIT Algoritmy, BI-PA1 3/35
Programovacı jazyky a styly
Imperativnı (proceduralnı) programovanı:
Pascal, strojovy kod, . . .
Funkcionalnı programovanı:
Haskell, Lisp, . . .
Logicke (deklarativnı) programovanı:
Prolog, SQL, XSLT, . . .
OO programovanı:
Eiffel, Objective C, Smalltalk, . . .
Kam patrı Java, C++, a C?
L. Vagner, CVUT FIT Algoritmy, BI-PA1 3/35
Algoritmy
Vlastnosti algoritmu:
Hromadnost (univerzalnost).
Jednoznacnost (determinismus).
Poskytuje vysledky (resultativnost).
Konecnost.
Vstupy.
Vystupy.
Slozitost.
Zapis algoritmu:
textova podoba (pseudokod, programovacı jazyk),
graficka podoba (vyvojovy diagram – flow chart).
L. Vagner, CVUT FIT Algoritmy, BI-PA1 4/35
Algoritmy
Zakladnı elementy pri zapisu algoritmu:
vstupnı bod,
koncovy bod,
vetvenı,
prıkaz.
Odvozene:
smycky (= vetvenı + navrat),
I/O operace (= specialnı typ prıkazu),
vyvolanı jineho algoritmu (= specialnı typ prıkazu).
L. Vagner, CVUT FIT Algoritmy, BI-PA1 5/35
Algoritmy – vyvojove diagramy
Elementy vyvojoveho diagramu:
START
KONEC
Vstupní bod
Koncový bod
Podmínka (větvení)
Příkaz
I/O operace
L. Vagner, CVUT FIT Algoritmy, BI-PA1 6/35
Algoritmy – vyvojove diagramy
Prıklad: algoritmus nacte dve cısla a zobrazı vetsı z nich.
START
READ A,B
A > B
WRITE BWRITE A
END
+ -
L. Vagner, CVUT FIT Algoritmy, BI-PA1 7/35
Algoritmy – pseudokod
Prıklad: algoritmus nacte dve cısla a zobrazı vetsı z nich.
START
CTI A, B
POKUD A > B
ZOBRAZ A
JINAK
ZOBRAZ B
KONEC
L. Vagner, CVUT FIT Algoritmy, BI-PA1 8/35
Algoritmy – kvadraticka rovnice
Ukol: vymyslet a zapsat algoritmus, ktery dokaze vyresit zadanoukvadratickou rovnici.
L. Vagner, CVUT FIT Algoritmy, BI-PA1 9/35
Algoritmy – kvadraticka rovnice
START
CTI a, b, c
d := b * b - 4 * a * c
x1 := (-b + sqrt ( d )) / 2 / a
x2 := (-b - sqrt ( d )) / 2 / a
ZOBRAZ x1, x2
KONEC
Je tento algoritmus spravny?
Co se stane pro a = 0?Co se stane pro d < 0?
L. Vagner, CVUT FIT Algoritmy, BI-PA1 10/35
Algoritmy – kvadraticka rovnice
START
CTI a, b, c
d := b * b - 4 * a * c
x1 := (-b + sqrt ( d )) / 2 / a
x2 := (-b - sqrt ( d )) / 2 / a
ZOBRAZ x1, x2
KONEC
Je tento algoritmus spravny?Co se stane pro a = 0?
Co se stane pro d < 0?
L. Vagner, CVUT FIT Algoritmy, BI-PA1 10/35
Algoritmy – kvadraticka rovnice
START
CTI a, b, c
d := b * b - 4 * a * c
x1 := (-b + sqrt ( d )) / 2 / a
x2 := (-b - sqrt ( d )) / 2 / a
ZOBRAZ x1, x2
KONEC
Je tento algoritmus spravny?Co se stane pro a = 0?Co se stane pro d < 0?
L. Vagner, CVUT FIT Algoritmy, BI-PA1 10/35
Algoritmy – kvadraticka rovnice
START
CTI a, b, c
POKUD a = 0
ZOBRAZ "Neni kvadraticka rovnice"
KONEC
d := b * b - 4 * a * c
POKUD d < 0
ZOBRAZ "Neexistuje realne reseni"
KONEC
x1 := (-b + sqrt ( d )) / 2 / a
x2 := (-b - sqrt ( d )) / 2 / a
ZOBRAZ x1, x2
KONEC
L. Vagner, CVUT FIT Algoritmy, BI-PA1 11/35
Algoritmy – protiletecka obrana
Ukol: algoritmus pro rızenı obranne rakety urcı spravne nastavenınameru αd tak, aby raketa sestrelila nepratelskou strelu. Vıme, zeobranna strela letı rychlostı vd a odpalıme ji se zpozdenım t0.Nepratelskou strelu musıme zasahnout ve vzestupne fazi letu.Pokud to nelze splnit, algoritmus na to musı upozornit. Z radaru onepratelske strele vıme:
vzdalenost mısta odpalenı l ,
rozdıl nadmorskych vysek h,
namer nepratelske strely αe a
rychlost nepratelske strely ve .
αe
ve
αd
vd
l
h
L. Vagner, CVUT FIT Algoritmy, BI-PA1 12/35
Algoritmy – protiletecka obrana
Z fyzikalnıho popisu drahy strel zıskame nasledujıcı rovnice:
xe = l − vet cosαe
ye = h + vet sinαe −gt2
2xd = vd(t − t0) cosαd
yd = vd(t − t0) sinαd −g(t − t0)2
2
V okamziku stretu tx platı, ze xe = xd a ye = yd :
tx =l + t0vd cosαd
ve cosαe + vd cosαd=
2t0vd sinαd + 2h + gt20
2vd sinαd + 2gt0 − 2ve sinαe
L. Vagner, CVUT FIT Algoritmy, BI-PA1 13/35
Algoritmy – protiletecka obrana
Po upravach vyjde:
αd1 = 2 arctanB +√A2 + B2 − C 2
A− C
αd2 = 2 arctanB −√A2 + B2 − C 2
A− C
Kde:
A = gt20vd − 2t0vdve sinαe − 2hvd
B = 2lvd − 2t0vdve cosαe
C = 2lgt0 − 2lve sinαe − 2hve cosαe − gt20ve cosαe
L. Vagner, CVUT FIT Algoritmy, BI-PA1 14/35
Algoritmy – protiletecka obrana
Derivacı urcıme, ze nepratelska strela dosahne vrcholu stoupanı vcase:
tmax =ve sinαe
g
Pro vypoctene hodnoty uhlu αd musıme vypocıtat okamzik stretu:
tx1 =l + t0vd cosαd1
ve cosαe + vd cosαd1
tx2 =l + t0vd cosαd2
ve cosαe + vd cosαd2
Strelu lze sestrelit pouze s nastavenım, pro ktere je tx ≤ tmax .
L. Vagner, CVUT FIT Algoritmy, BI-PA1 15/35
Algoritmy – protiletecka obrana
START
CTI l, h, t0, ve, vd, ae
tmax := ve * sin(ae) / g
A := g*t0*t0*vd - 2*t0*vd*ve*sin(ae) - 2*h*vd
B := 2*l*vd - 2*t0*vd*ve*cos(ae)
C := 2*l*g*t0 - 2*l*ve*sin(ae) - 2*h*ve*cos(ae) - g*t0*t0*ve*cos(ae)
D := A*A + B*B - C*C
POKUD D < 0
ZOBRAZ "Nelze zasahnout"
KONEC
tmax := ve * sin(ae) / g
ad1 := 2*atan2( A-C, B + sqrt(D) )
tx1 := (l + t0*vd*cos(ad1)) / (ve*cos(ae) + vd*cos(ad1))
POKUD tx1 <= tmax
ZOBRAZ "Namer ", ad1
KONEC
ad2 := 2*atan2( A-C, B - sqrt(D) )
tx2 := (l + t0*vd*cos(ad2)) / (ve*cos(ae) + vd*cos(ad2))
POKUD tx2 <= tmax
ZOBRAZ "Namer ", ad2
KONEC
ZOBRAZ "Nelze zasahnout"
KONEC
L. Vagner, CVUT FIT Algoritmy, BI-PA1 16/35
Algoritmy – minimum, maximum a prostrednı cıslo
Ukol: pro tri zadana cısla a, b a c (navzajem ruzna) urcitmaximum, minimum a prostrednı cıslo.
L. Vagner, CVUT FIT Algoritmy, BI-PA1 17/35
Algoritmy – minimum, maximum a prostrednı cıslo
START
CTI a, b, c
POKUD a > b
POKUD a > c
max := a
POKUD b > c
mid := b
min := c
JINAK
mid := c
min := b
JINAK
max := c
mid := a
min := b
JINAK
POKUD b > c
max := b
POKUD a > c
mid := a
min := c
JINAK
mid := c
min := a
JINAK
max := c
mid := b
min := a
ZOBRAZ "Maximum", max
ZOBRAZ "Prostredni", mid
ZOBRAZ "Minimum", min
KONEC
L. Vagner, CVUT FIT Algoritmy, BI-PA1 18/35
Algoritmy – minimum, maximum a prostrednı cıslo
START
CTI a, b, c
max := a
POKUD b > max
max := b
POKUD c > max
max := c
min := a
POKUD b < min
min := b
POKUD c < min
min := c
mid := a + b + c - min - max
ZOBRAZ "Maximum", max
ZOBRAZ "Prostredni", mid
ZOBRAZ "Minimum", min
KONEC
L. Vagner, CVUT FIT Algoritmy, BI-PA1 19/35
Algoritmy – spolecny delitel a nasobek
Ukol: zapsat algoritmus, ktery pro zadana prirozena cısla a a b urcıjejich nejvetsı spolecny delitel a nejmensı spolecny nasobek.
L. Vagner, CVUT FIT Algoritmy, BI-PA1 20/35
Algoritmy – spolecny delitel a nasobek
START
CTI a, b
prod := a * b
DOKUD a <> b
POKUD a > b
a := a - b
JINAK
b := b - a
gcd := a
lcm := prod / gcd
ZOBRAZ "Nejvetsi spolecny delitel", gcd
ZOBRAZ "Nejmensi spolecny nasobek", lcm
KONEC
Je tento algoritmus efektivnı?
Pro 60 a 36.Pro 1001 a 1.
L. Vagner, CVUT FIT Algoritmy, BI-PA1 21/35
Algoritmy – spolecny delitel a nasobek
START
CTI a, b
prod := a * b
DOKUD a <> b
POKUD a > b
a := a - b
JINAK
b := b - a
gcd := a
lcm := prod / gcd
ZOBRAZ "Nejvetsi spolecny delitel", gcd
ZOBRAZ "Nejmensi spolecny nasobek", lcm
KONEC
Je tento algoritmus efektivnı?Pro 60 a 36.
Pro 1001 a 1.
L. Vagner, CVUT FIT Algoritmy, BI-PA1 21/35
Algoritmy – spolecny delitel a nasobek
START
CTI a, b
prod := a * b
DOKUD a <> b
POKUD a > b
a := a - b
JINAK
b := b - a
gcd := a
lcm := prod / gcd
ZOBRAZ "Nejvetsi spolecny delitel", gcd
ZOBRAZ "Nejmensi spolecny nasobek", lcm
KONEC
Je tento algoritmus efektivnı?Pro 60 a 36.Pro 1001 a 1.
L. Vagner, CVUT FIT Algoritmy, BI-PA1 21/35
Algoritmy – spolecny delitel a nasobek
START
CTI a, b
prod := a * b
POKUD a < b
tmp := a
a := b
b := tmp
DOKUD b > 0
tmp := a mod b
a := b
b := tmp
gcd := a
lcm := prod / gcd
ZOBRAZ "Nejvetsi spolecny delitel", gcd
ZOBRAZ "Nejmensi spolecny nasobek", lcm
KONEC
L. Vagner, CVUT FIT Algoritmy, BI-PA1 22/35
Algoritmy – maximum v posloupnosti
Ukol: zapsat algoritmus, ktery pro zadanou posloupnost nnavzajem ruznych celych cısel najde maximum.
L. Vagner, CVUT FIT Algoritmy, BI-PA1 23/35
Algoritmy – maximum v posloupnosti
START
CTI n
max := 0
DOKUD n > 0
CTI x
POKUD x > max
max := x
n := n - 1
ZOBRAZ "Maximum", max
KONEC
Je algoritmus spravny?
Ne pro n = 3 a vstup: -1, -2, -3.
L. Vagner, CVUT FIT Algoritmy, BI-PA1 24/35
Algoritmy – maximum v posloupnosti
START
CTI n
max := 0
DOKUD n > 0
CTI x
POKUD x > max
max := x
n := n - 1
ZOBRAZ "Maximum", max
KONEC
Je algoritmus spravny?Ne pro n = 3 a vstup: -1, -2, -3.
L. Vagner, CVUT FIT Algoritmy, BI-PA1 24/35
Algoritmy – maximum v posloupnosti
START
CTI n
POKUD n <= 0
ZOBRAZ "Chyba ..."
KONEC
CTI max
n := n - 1
DOKUD n > 0
CTI x
POKUD x > max
max := x
n := n - 1
ZOBRAZ "Maximum", max
KONEC
L. Vagner, CVUT FIT Algoritmy, BI-PA1 25/35
Algoritmy – druhe nejvetsı cıslo
Ukol: zapsat algoritmus, ktery pro zadanou posloupnost nnavzajem ruznych celych cısel najde druhe nejvetsı cıslo.
L. Vagner, CVUT FIT Algoritmy, BI-PA1 26/35
Algoritmy – druhe nejvetsı cıslo
START
CTI n
POKUD n < 2
ZOBRAZ "Chyba ..."
KONEC
CTI m1, m2
POKUD m1 < m2
tmp := m1
m1 := m2
m2 := tmp
n := n - 2
DOKUD n > 0
CTI x
POKUD x > m1
m2 := m1
m1 := x
n := n - 1
ZOBRAZ "Druhe maximum", m2
KONEC
Je algoritmus spravny?
Ne pro n = 3 a vstup: 1, 3, 2.
L. Vagner, CVUT FIT Algoritmy, BI-PA1 27/35
Algoritmy – druhe nejvetsı cıslo
START
CTI n
POKUD n < 2
ZOBRAZ "Chyba ..."
KONEC
CTI m1, m2
POKUD m1 < m2
tmp := m1
m1 := m2
m2 := tmp
n := n - 2
DOKUD n > 0
CTI x
POKUD x > m1
m2 := m1
m1 := x
n := n - 1
ZOBRAZ "Druhe maximum", m2
KONEC
Je algoritmus spravny?Ne pro n = 3 a vstup: 1, 3, 2.
L. Vagner, CVUT FIT Algoritmy, BI-PA1 27/35
Algoritmy – druhe nejvetsı cıslo
START
CTI n
POKUD n < 2
ZOBRAZ "Chyba ..."
KONEC
CTI m1, m2
POKUD m1 < m2
tmp := m1
m1 := m2
m2 := tmp
n := n - 2
DOKUD n > 0
CTI x
POKUD x > m1
m2 := m1
m1 := x
JINAK
POKUD x > m2
m2 := x
n := n - 1
ZOBRAZ "Druhe maximum", m2
KONEC
Je algoritmus spravny?
Ano.
L. Vagner, CVUT FIT Algoritmy, BI-PA1 28/35
Algoritmy – druhe nejvetsı cıslo
START
CTI n
POKUD n < 2
ZOBRAZ "Chyba ..."
KONEC
CTI m1, m2
POKUD m1 < m2
tmp := m1
m1 := m2
m2 := tmp
n := n - 2
DOKUD n > 0
CTI x
POKUD x > m1
m2 := m1
m1 := x
JINAK
POKUD x > m2
m2 := x
n := n - 1
ZOBRAZ "Druhe maximum", m2
KONEC
Je algoritmus spravny?Ano.
L. Vagner, CVUT FIT Algoritmy, BI-PA1 28/35
Algoritmy – faktorizace
Ukol: zapsat algoritmus, ktery pro zadane prirozene cıslo n urcıjeho prvocıselny rozklad (faktorizaci).
Napr. pro n = 720 je faktorizace:
720 = 5 ∗ 2 ∗ 2 ∗ 2 ∗ 2 ∗ 3 ∗ 3
L. Vagner, CVUT FIT Algoritmy, BI-PA1 29/35
Algoritmy – faktorizace
START
CTI n
i := 2
DOKUD i < n
POKUD n mod i = 0
ZOBRAZ i
i := i + 1
KONEC
Je algoritmus spravne?
Ne, zobrazı vsechny delitele, ne pouze prvocısla.
L. Vagner, CVUT FIT Algoritmy, BI-PA1 30/35
Algoritmy – faktorizace
START
CTI n
i := 2
DOKUD i < n
POKUD n mod i = 0
ZOBRAZ i
i := i + 1
KONEC
Je algoritmus spravne?Ne, zobrazı vsechny delitele, ne pouze prvocısla.
L. Vagner, CVUT FIT Algoritmy, BI-PA1 30/35
Algoritmy – faktorizace
START
CTI n
i := 2
DOKUD i < n
POKUD n mod i = 0
POKUD isprime ( i )
ZOBRAZ i
i := i + 1
KONEC
Je algoritmus spravne?
Ne, zobrazı prvocıselne faktory, ale pouze jednou.
L. Vagner, CVUT FIT Algoritmy, BI-PA1 31/35
Algoritmy – faktorizace
START
CTI n
i := 2
DOKUD i < n
POKUD n mod i = 0
POKUD isprime ( i )
ZOBRAZ i
i := i + 1
KONEC
Je algoritmus spravne?Ne, zobrazı prvocıselne faktory, ale pouze jednou.
L. Vagner, CVUT FIT Algoritmy, BI-PA1 31/35
Algoritmy – faktorizace
START
CTI n
i := 2
DOKUD i <= n
POKUD n mod i = 0
POKUD isprime ( i )
ZOBRAZ i
n := n / i
JINAK
i := i + 1
KONEC
Je algoritmus spravne?
Ano, pouze pro n = 1 nezobrazı nic.Je velmi neefektivnı.
L. Vagner, CVUT FIT Algoritmy, BI-PA1 32/35
Algoritmy – faktorizace
START
CTI n
i := 2
DOKUD i <= n
POKUD n mod i = 0
POKUD isprime ( i )
ZOBRAZ i
n := n / i
JINAK
i := i + 1
KONEC
Je algoritmus spravne?Ano, pouze pro n = 1 nezobrazı nic.
Je velmi neefektivnı.
L. Vagner, CVUT FIT Algoritmy, BI-PA1 32/35
Algoritmy – faktorizace
START
CTI n
i := 2
DOKUD i <= n
POKUD n mod i = 0
POKUD isprime ( i )
ZOBRAZ i
n := n / i
JINAK
i := i + 1
KONEC
Je algoritmus spravne?Ano, pouze pro n = 1 nezobrazı nic.Je velmi neefektivnı.
L. Vagner, CVUT FIT Algoritmy, BI-PA1 32/35
Algoritmy – faktorizace
START
CTI n
i := 2
DOKUD i <= n
POKUD n mod i = 0
ZOBRAZ i
n := n / i
JINAK
i := i + 1
KONEC
Je algoritmus spravne?
Ano, pouze pro n = 1 nezobrazı nic.Je stale neefektivnı.
L. Vagner, CVUT FIT Algoritmy, BI-PA1 33/35
Algoritmy – faktorizace
START
CTI n
i := 2
DOKUD i <= n
POKUD n mod i = 0
ZOBRAZ i
n := n / i
JINAK
i := i + 1
KONEC
Je algoritmus spravne?Ano, pouze pro n = 1 nezobrazı nic.
Je stale neefektivnı.
L. Vagner, CVUT FIT Algoritmy, BI-PA1 33/35
Algoritmy – faktorizace
START
CTI n
i := 2
DOKUD i <= n
POKUD n mod i = 0
ZOBRAZ i
n := n / i
JINAK
i := i + 1
KONEC
Je algoritmus spravne?Ano, pouze pro n = 1 nezobrazı nic.Je stale neefektivnı.
L. Vagner, CVUT FIT Algoritmy, BI-PA1 33/35
Algoritmy – faktorizace
START
CTI n
factorize ( n )
KONEC
factorize ( n ):
START
i := sqrt ( n )
DOKUD i >= 2
POKUD n mod i = 0
factorize ( i )
factorize ( n / i )
KONEC
i := i - 1
ZOBRAZ n
KONEC
L. Vagner, CVUT FIT Algoritmy, BI-PA1 34/35
Dotazy
Dotazy . . .
Dekuji za pozornost.
L. Vagner, CVUT FIT Algoritmy, BI-PA1 35/35