Paradygmaty programowania (główne) | |--> Imperatywny -> Proceduralny -> Strukturalny -> Obiektowy L--> Deklaratywny L--> Funkcyjny L--> W logice ======================================================================== c (I) PROGRAM IMPERATYWNY W FORTRANIE 77 c c Kompilacja: f77 program_imperatywny.f -o program_imperatywny.x c lub za pomocą g77, fortran, ifort, fort... c c UWAGA NA WCIĘCIA! c234--7--0---------0---------0---------0---------0---------0---------012 program silnia integer a,b,c write(*,*) "Podaj liczbe, ktorej silnie chcesz policzyc: a =" read(*,*) a b=1 do 5 c=1,a b=b*c 5 continue write(*,*) "a! = ",b end program ======================================================================== // (II) JAVA JEST JĘZYKIEM OBIEKTOWYM // // Kompilacja: javac program_obiektowy.java // lub: gcj -C program_obiektowy.java // Uruchomienie: java program_obiektowy public class program_obiektowy { public static void main (String[] args) { System.out.println("Przyklad programu obiektowego w Javie"); } } ======================================================================== ;; (III) JĘZYK FUNKCYJNY SCHEME ;; PRZYKŁAD 1 (DEFINE (suma m n) (IF (> m n) 0 (+ m (suma (+ m 1) n)) ) ) ;; PRZYKŁAD 2 (DEFINE (silnia n) (IF (= n 0) 1 (* n (silnia (- n 1))))) ======================================================================== % (IV) JĘZYK LOGICZNY PROLOG ojciec(jan, jerzy). ojciec(jerzy, janusz). ojciec(jerzy, józef). dziadek(X, Z) :- ojciec(X, Y), ojciec(Y, Z). ?- dziadek(X, janusz). ======================================================================== ZADANIA 01. Rozgrzewka: Uruchom programy w Fortranie (I) i Javie (II) 02. Napisz program liczący 20! w Javie i C. Skompiluj oba kody $ gcc silnia.c -o silnia.x $ javac silnia.java Porównaj: - otrzymywane wyniki - rozmiar plików na dysku (silnia.class i silnia.x) - czas wykonywania programów $ time silnia.x $ time java silnia.class Wnioski? 03. Przepisz programy z przykładów (III) do postaci obiektowej. Czy rzeczywiście korzystasz z właściwości obiektów w tym przypadku? 04. Przepisz programy z przykładów (III) do postaci imperatywnej 05. Uprość (III.1) korzystając ze wzorów na sumę 1+2+...+n = n(1+n)/2 n+(n+1)+...+m = m(1+m)/2 - n(1+n)/2 + n = [m(m+1)-n(n+1)]/2 + n 06. Przepisz (IV) do postaci imperatywnej. Stwórz najpierw schemat blokowy, potem zaimplementuj w dowolnym języku imperatywnym (Fortran, C,...) 07. Napisz funkcję obliczającą uogólnioną silnię s(n,k) = n (n-k) (n-2k)... tak że s(n,1) = s!, s(n,2) = s!!... 08. Napisz operator/funkcję obliczającą iloczyn skalarny dwóch wektorów x.y = x1*y1 + x2*y2 + ... + xn*yn 09. Dla listy dwójek [(x1,y1),...,(xn,yn)] napisz funkcję zwracającą wartość y odpowiadającą zadanemu x (pierwsze wystąpienie). Jakie struktury w języku programowania przydałyby się, żeby taka funkcja była prosta do zaimplementowania? +**************************************************************+ * /tablice asocjacyjne są w C++, AWK, Pythonie.../ * * # Wywołanie skryptu: * * # awk -v x="x4" -f tablica-asocjacyjna.awk * * BEGIN{ * * tablica["x1"]="y1"; * * tablica["x2"]="y2"; * * tablica["x3"]="y3"; * * tablica["x4"]="y4"; * * tablica["x5"]="y5"; * * tablica["x6"]="y6"; * * if (tablica[x]) * * print tablica[x]; # <-- To jest TA WŁAŚNIE KONSTRUKCJA * * else * * print "Nie ma" * * } * +**************************************************************+ 10. Zaimplementuj algorytm szybkiego potęgowania w/g następującego wzoru: x^n = x * x^(n-1) , jeśli n jest nieparzyste = x^(n/2) * x^(n/2) , jeśli n jest parzyste 11. Zaimplementuj przybliżony pierwiastek 3 stopnia w/g wzoru a^(1/3) = lim_{n-->oo} {x_n}, gdzie ciąg x jest określony rekurencyjnie przez x_{n+1} = 1/3 (a/x_n^2 + 2 x_n) x_0 = a/3 12. Napisz funkcję wyliczającą przybliżoną wartość liczby Pi w/g wzoru Pi = 4 SUMA_k=0...oo (-1)^k / (2k+1) Spróbuj też wykorzystać fakt, że arctg(oo)--> Pi/2 awk 'BEGIN{print 2*atan2(1000000000,1)}' 13. Napisz funkcję wyliczającą przybliżoną wartość liczby exp(x) w/g wzoru e^x = SUMA_k=0...oo x^k / k! Zadania i przykłady m.in. z: http://wazniak.mimuw.edu.pl/index.php?title=Paradygmaty_programowania http://www.ii.pwr.wroc.pl/~drwal/ Skrypt UMCS, Bylina, Bylina, Języki i paradygmaty programowania + Własne modyfikacje