Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

Imperatywne modele obliczeń Copyright, 2001 © Jerzy R. Nawrocki Wprowadzenie do.

Podobne prezentacje


Prezentacja na temat: "Imperatywne modele obliczeń Copyright, 2001 © Jerzy R. Nawrocki Wprowadzenie do."— Zapis prezentacji:

1 Imperatywne modele obliczeń Copyright, 2001 © Jerzy R. Nawrocki Jerzy.Nawrocki@put.poznan.pl http://www.cs.put.poznan.pl/jnawrocki/ics/ Wprowadzenie do informatyki Wykład 2

2 J.Nawrocki, Wprowadzenie do inf. (2) Plan wykładu Maszyna RAM i schematy blokowe Liczba automorficzna Obliczanie wielomianu Problem stopu

3 J.Nawrocki, Wprowadzenie do inf. (2) Model maszyny RAM

4 J.Nawrocki, Wprowadzenie do inf. (2) Model maszyny RAM Przykładowe operacje maszyny: przesłanie stałej do rejestru: R1 1 przesłanie iloczynu do rej.: R1 R1 * R2 porównanie rejestru ze stałą: R2 > 0 przesłanie komórki pamięci do rejestru: R1 M [1000]

5 J.Nawrocki, Wprowadzenie do inf. (2) Język schematów blokowych R1 1 R2 0 R2 > 0 Tak Nie Start Stop

6 J.Nawrocki, Wprowadzenie do inf. (2) Plan wykładu Maszyna RAM i schematy blokowe Liczba automorficzna Obliczanie wielomianu Problem stopu

7 J.Nawrocki, Wprowadzenie do inf. (2) Liczba automorficzna Liczba naturalna znajdująca się na końcu swego kwadratu. 5 bo 5 2 = 25 6 bo 6 2 = 36 7 nie bo 7 2 = 49 25 bo 25 2 = 625

8 J.Nawrocki, Wprowadzenie do inf. (2) Liczba automorficzna Napisać program sprawdzający, czy podana liczba naturalna n jest liczbą automorficzną. 5 TAK 7 NIE

9 J.Nawrocki, Wprowadzenie do inf. (2) Liczba automorficzna Start Czytaj n Automor(n) TakDrukuj(TAK) NieDrukuj(NIE) Stop

10 J.Nawrocki, Wprowadzenie do inf. (2) Liczba automorficzna Start Czytaj n Automor(n) TakDrukuj(TAK) NieDrukuj(NIE) Stop var n; begin read(n); if Automor(n) then writeln(TAK) else writeln(NIE) end. Funkcja nie- standardow a

11 J.Nawrocki, Wprowadzenie do inf. (2) Liczba automorficzna Liczba naturalna znajdująca się na końcu swego kwadratu. Jak obliczyć koniec(n 2 ) ? Tak Wynik true Nie Wynik false n=koniec(n 2 )

12 J.Nawrocki, Wprowadzenie do inf. (2) Liczba automorficzna Tak Wynik true Nie Wynik false n=koniec(n 2 ) function Automor (n: integer): Boolean; begin if n=koniec(n 2 ) then Automor:= true else Automor:= false end; Deklaracja funkcji Automor

13 J.Nawrocki, Wprowadzenie do inf. (2) Liczba automorficzna n=5: koniec(n 2 )=5 : 5 2 = 25 n=9: koniec(n 2 )=1 : 9 2 = 81 n=11: koniec(n 2 )=21 : 11 2 = 121 n=12: koniec(n 2 )=44 : 12 2 = 144 n=101: koniec(n 2 )=201: 101 2 = 10201 Jak obliczyć koniec(n 2 ) ? rząd(n) = 10 liczba_cyfr(n) rząd(1)= rząd(2) =.. = rząd(9)=10 rząd(10)=.. = rząd(99)=100 rząd(100)=.. = rząd(999)=1000

14 J.Nawrocki, Wprowadzenie do inf. (2) koniec(5 2 ) = 5*5 mod 10 = 25 mod 10 = 5 koniec(9 2 ) = 9*9 mod 10 = 81 mod 10 = 1 koniec(11 2 )= 11*11 mod 100 = = 121 mod 100 = 21 koniec(12 2 )= 12*12 mod 100 = = 144 mod 100 = 44 Liczba automorficzna Jak obliczyć koniec(n 2 ) ? rząd(n) = 10 liczba_cyfr(n) koniec(n 2 ) = n*n mod rząd(n)

15 J.Nawrocki, Wprowadzenie do inf. (2) Liczba automorficzna Tak Wynik true Nie Wynik false n=n*n mod rząd(n) Jak obliczyć rzad(n) ?

16 J.Nawrocki, Wprowadzenie do inf. (2) Liczba automorficzna Tak Wynik true Nie Wynik false n=n*n mod rząd(n) function Automor (n: integer): Boolean; begin if n=n*n mod rzad(n) then Automor:= true else Automor:= false end;

17 J.Nawrocki, Wprowadzenie do inf. (2) Liczba automorficzna Jak obliczyć rzad(n) ? rząd(1)=.. = rząd(9)=10 rząd(10)=.. = rząd(99)=100 rząd(100)=.. = rząd(999)=1000 rząd(n) = 10 liczba_cyfr(n) rząd(n) = 10, 100, 1000,.. rząd(n) > n

18 J.Nawrocki, Wprowadzenie do inf. (2) Liczba automorficzna Jak obliczyć rzad(n) ? rząd(n) = 10, 100, 1000,.. rząd(n) > n rz 10 rz <= n Tak rz rz*10 Nie Wynik rz

19 J.Nawrocki, Wprowadzenie do inf. (2) Liczba automorficzna rz 10 rz <= n Tak rz rz*10 Nie Wynik rz function rzad (n: integer): integer; var rz: integer; begin rz:= 10; while rz <= n do rz:= rz*10; rzad:= rz end;

20 J.Nawrocki, Wprowadzenie do inf. (2) Liczba automorficzna rz 10 rz <= n Tak rz rz*10 Nie Wynik rz Jak to sprawdzi ć?

21 J.Nawrocki, Wprowadzenie do inf. (2) Liczba automorficzna rz 10 rz <= n Tak rz rz*10 Nie Wynik rz Jak to sprawdzi ć? nrz 25 We Wyj

22 J.Nawrocki, Wprowadzenie do inf. (2) Liczba automorficzna rz 10 rz <= n Tak rz rz*10 Nie Wynik rz Jak to sprawdzi ć? nrz 25 We Wyj 10

23 J.Nawrocki, Wprowadzenie do inf. (2) Liczba automorficzna rz 10 rz <= n Tak rz rz*10 Nie Wynik rz Jak to sprawdzi ć? nrz 25 We Wyj 10

24 J.Nawrocki, Wprowadzenie do inf. (2) Liczba automorficzna rz 10 rz <= n Tak rz rz*10 Nie Wynik rz Jak to sprawdzi ć? nrz 25 We Wyj 10 100

25 J.Nawrocki, Wprowadzenie do inf. (2) Liczba automorficzna rz 10 rz <= n Tak rz rz*10 Nie Wynik rz Jak to sprawdzi ć? nrz 25 We Wyj 10 100

26 J.Nawrocki, Wprowadzenie do inf. (2) Liczba automorficzna rz 10 rz <= n Tak rz rz*10 Nie Wynik rz Jak to sprawdzi ć? nrz 25 We Wyj 10 100

27 J.Nawrocki, Wprowadzenie do inf. (2) Liczba automorficzna rz 10 rz <= n Tak rz rz*10 Nie Wynik rz Jak to sprawdzi ć? nrz 25 We Wyj 10 100

28 J.Nawrocki, Wprowadzenie do inf. (2) Liczba automorficzna rz 10 rz <= n Tak rz rz*10 Nie Wynik rz Jak to sprawdzi ć? nrz 25 We Wyj 10 100

29 J.Nawrocki, Wprowadzenie do inf. (2) Liczba automorficzna rz 10 rz <= n Tak rz rz*10 Nie Wynik rz Jak to sprawdzi ć? nrz 25 We Wyj 10 100

30 J.Nawrocki, Wprowadzenie do inf. (2) Liczba automorficzna rz 10 rz <= n Tak rz rz*10 Nie Wynik rz Jak to sprawdzi ć? nrz 25 We Wyj 10 100 Wynik=100

31 J.Nawrocki, Wprowadzenie do inf. (2) Liczba automorficzna rz 10 rz <= n Tak rz rz*10 Nie Wynik rz nrz 25 We Wyj 10 100 Wynik=100 Jak to sprawdzi ć?

32 J.Nawrocki, Wprowadzenie do inf. (2) Liczba automorficzna rz 10 rz <= n Tak rz rz*10 Nie Wynik rz nrz 25 We Wyj 10 100 Wynik=100 To działa!

33 J.Nawrocki, Wprowadzenie do inf. (2) Liczba automorficzna Program główny Automor(n) rzad(n) Czy można połączyć Automor i rzad?

34 J.Nawrocki, Wprowadzenie do inf. (2) Liczba automorficzna function rzad (n: integer): integer; var rz: integer; begin rz:= 10; while rz <= n do rz:= rz*10; rzad:= rz end; function Automor (n: integer): Boolean; begin if n=n*n mod rzad(n) then Automor:= true else Automor:= false end;

35 J.Nawrocki, Wprowadzenie do inf. (2) Liczba automorficzna function rzad (n: integer): integer; var rz: integer; begin rz:= 10; while rz <= n do rz:= rz*10; rzad:= rz end; function Automor (n: integer): Boolean; begin if n=n*n mod rzad(n) then Automor:= true else Automor:= false end;

36 J.Nawrocki, Wprowadzenie do inf. (2) Liczba automorficzna function rzad (n: integer): integer; var rz: integer; begin rz:= 10; while rz <= n do rz:= rz*10; rzad:= rz end; function Automor (n: integer): Boolean; var rz: integer; begin rz:= 10; while rz <= n do rz:= rz*10; if n=n*n mod rz then Automor:= true else Automor:= false end;

37 J.Nawrocki, Wprowadzenie do inf. (2) Liczba automorficzna function Automor (n: integer): Boolean; var rz: integer; begin rz:= 10; while rz <= n do rz:= rz*10; if n=n*n mod rz then Automor:= true else Automor:= false end; Program główny Automor(n)

38 J.Nawrocki, Wprowadzenie do inf. (2) Plan wykładu Maszyna RAM i schematy blokowe Liczba automorficzna Obliczanie wielomianu Problem stopu

39 J.Nawrocki, Wprowadzenie do inf. (2) Obliczanie wielomianu Wielomian n-tego stopnia ma postać: p(x) = a 0 + a 1 x + a 2 x 2 + a 3 x 3 +.. + a n x n Mając dane wartości: n a 0, a 1,.., a n x należy obliczyć wartość p(x).

40 J.Nawrocki, Wprowadzenie do inf. (2) Obliczanie wielomianu p(x) = a 0 + a 1 x + a 2 x 2 + a 3 x 3 +.. + a n x n p(x) = s(0) + s(1) + s(2) +.. + s(n) gdzie s(i) = a i x i s(i) = a i *x*x*.. *x Dekompozycja problemu Suma n liczb Iloczyn n liczb

41 J.Nawrocki, Wprowadzenie do inf. (2) Obliczanie wielomianu P= s(0) + s(1) +.. + s(n) P(0) = s(0) P(1) = P(0) + s(1) P(2) = P(1) + s(2)... P(n) = P(n-1) + s(n)StartStop i 0 i i + 1 i n Tak Nie

42 J.Nawrocki, Wprowadzenie do inf. (2) Obliczanie wielomianu P= s(0) + s(1) +.. + s(n) P(0) = s(0) P(1) = P(0) + s(1) P(2) = P(1) + s(2)... P(n) = P(n-1) + s(n)Start Stop i 0 i i + 1 i n Tak Nie

43 J.Nawrocki, Wprowadzenie do inf. (2) Obliczanie wielomianu P= s(0) + s(1) +.. + s(n) P(0) = s(0) P(1) = P(0) + s(1) P(2) = P(1) + s(2)... P(n) = P(n-1) + s(n)Start Stop i 0 P P + s(i) i i + 1 i n Tak Nie

44 J.Nawrocki, Wprowadzenie do inf. (2) Obliczanie wielomianu P= s(0) + s(1) +.. + s(n) P(0) = s(0) P(1) = P(0) + s(1) P(2) = P(1) + s(2)... P(n) = P(n-1) + s(n)Start Stop i 0 P 0 P P + s(i) i i + 1 i n Tak Nie

45 J.Nawrocki, Wprowadzenie do inf. (2) Obliczanie wielomianu P= s(0) + s(1) +.. + s(n) P= s(n) + s(n-1) +.. + s(0) P 0 = 0 P 1 = s(n) P 2 = P 1 + s(n-1)... P n = P n-1 + s(0)

46 J.Nawrocki, Wprowadzenie do inf. (2) Obliczanie wielomianu P= s(0) + s(1) +.. + s(n)Start Stop n n - 1 n 0 Tak Nie P= s(n) + s(n-1) +.. + s(0) P 0 = 0 P 1 = s(n) P 2 = P 1 + s(n-1)... P n = P n-1 + s(0)

47 J.Nawrocki, Wprowadzenie do inf. (2) Obliczanie wielomianu P= s(0) + s(1) +.. + s(n)Start Stop P 0 P 0 n n - 1 n 0 Tak Nie P= s(n) + s(n-1) +.. + s(0) P 0 = 0 P 1 = s(n) P 2 = P 1 + s(n-1)... P n = P n-1 + s(0)

48 J.Nawrocki, Wprowadzenie do inf. (2) Obliczanie wielomianu P= s(0) + s(1) +.. + s(n)Start Stop P 0 P 0 P P + s(n) n n - 1 n 0 Tak Nie P= s(n) + s(n-1) +.. + s(0) P 0 = 0 P 1 = s(n) P 2 = P 1 + s(n-1)... P n = P n-1 + s(0)

49 J.Nawrocki, Wprowadzenie do inf. (2) Obliczanie wielomianu Start Stop P 0 P 0 P P + s(n) n n - 1 n 0 Tak Nie Hura! Jedna zmienna mniej! P= s(n) + s(n-1) +.. + s(0)

50 J.Nawrocki, Wprowadzenie do inf. (2) Obliczanie wielomianu Obliczanie a n x nStart Stop S a n ; k n S a n ; k n S S * x k k - 1 k > 0 Tak Nie

51 J.Nawrocki, Wprowadzenie do inf. (2) Obliczanie wielomianu Złożoność alg.:Start Stop S a n ; k n S a n ; k n S S * x k k - 1 k 0 Tak Nie (n+1) razy S każde S: k mnożeń Razem: 0 + 1 +.. + (n+1) = Złożoność= O(n 2 )

52 J.Nawrocki, Wprowadzenie do inf. (2) Obliczanie wielomianu P(x)= (((a n )*x + a n-1 )*x + a n-2 )*x + a n-3... Schemat Hornera Jak zmniejszyć liczbę mnożeń?

53 J.Nawrocki, Wprowadzenie do inf. (2) Plan wykładu Maszyna RAM i schematy blokowe Liczba automorficzna Obliczanie wielomianu Problem stopu

54 J.Nawrocki, Wprowadzenie do inf. (2) Problem stopu Dany jest podprogram X. Czy ten podprogram skończy obliczenia w skończonym czasie?

55 J.Nawrocki, Wprowadzenie do inf. (2) Problem stopu function ZatrzymaSię(P: procedure): Boolean; { ??? } procedure X; { while ZatrzymaSię(X) do ; }

56 J.Nawrocki, Wprowadzenie do inf. (2) Problem stopu ZatrzymaSię(X) procedure X Tak Nie Wniosek: Problem stopu jest nierozstrzygalny

57 J.Nawrocki, Wprowadzenie do inf. (2) Podsumowanie Język schematów blokowych jest wygodnym narzędziem opisu algorytmów. Nie wszystko można obliczyć. Wreszcie!

58 J.Nawrocki, Wprowadzenie do inf. (2) Ocena wykładu 1. Wrażenie ogólne? (1 - 6) 2. Zbyt wolno czy zbyt szybko? 3. Czy dowiedziałeś się czegoś ważnego? 4. Co poprawić i jak?


Pobierz ppt "Imperatywne modele obliczeń Copyright, 2001 © Jerzy R. Nawrocki Wprowadzenie do."

Podobne prezentacje


Reklamy Google