Struktury danych i obliczenia w Prologu. Wykonali: Dzięgielewski Patryk Golacik Tomasz Rzepecki Michał Zawadzki Marcin

Wielkość: px
Rozpocząć pokaz od strony:

Download "Struktury danych i obliczenia w Prologu. Wykonali: Dzięgielewski Patryk Golacik Tomasz Rzepecki Michał Zawadzki Marcin"

Transkrypt

1 Struktury danych i obliczenia w Prologu Wykonali: Dzięgielewski Patryk Golacik Tomasz Rzepecki Michał Zawadzki Marcin

2 Arytmetyka Przykłady obliczeń w Prologu:?- Y is 2+2. Y=4?- 5 is 3-3. false?- Z is (3.9 / 2.1). Z =

3 Wbudowany predykat is bierze wyrażenie arytmetyczne z jego prawej strony, oblicza je i unifikuje je z wyrażeniem po jego lewej stronie. Wyrażenia w Prologu są bardzo podobne do tych z innych języków programowania. Najprostsze wyrażenie składa się z samej liczby: Cos is 2. Operatory infix: + dodawanie - odejmowanie * mnożenie / dzielenie typu floating-point // dzielenie typu integer mod modulo Funkcje: abs() sqrt() log() exp() wartość bezwzględna pierwiastek kwadratowy logarytm antylogarytm floor() największa wartość typu integer mniejsza lub równa argumentowi round() najbliższa wartość typu integer

4 Kolejność wykonywania działań jest taka sama jak w innych językach programowanie i matematyce. Prolog obsługuje wartości typu floating-point oraz integer i przekształca je w razie potrzeby. Warto zauważyć, że Prolog nie potrafi rozwiązywać równań matematycznych;?- 5 is 2 + Cos. instantiation error może być to zaskakujące, ze względu na fakt, że Prolog potrafi znaleźć niewiadomą w wyrażeniu ojciec(michal, Kto), ale nie w 5 is 2 + Cos. Po namyśle można jednak zauważyć, że pierwsze zapytanie może zostać rozwiązane poprzez podstawienie wszystkich z możliwych zależności, natomiast drugie zapytanie nie może być rozwiązane w ten sposób, ponieważ, dla is nie ma zdefiniowany zależności, a próba znalezienia rozwiązania oznaczała by przeszukiwanie nieskończonej liczby potencjalnych liczb w kilku wymiarach. Jedynymi metodami rozwiązania byłaby manipulacja algebraiczna(5 2 = Cos) lub numeryczna(omówiona w rozdziale 7).

5 Konstruowanie wyrażeń Dużą różnicą między Prologiem, a innymi językami programowania jest to, że inne języki wyliczają wyrażenia arytmetyczne, kiedykolwiek wystąpią, zaś Prolog wylicza je tylko w konkretnych miejscach. Dla przykładu; 2+2 jest wyliczane w 4 tylko wtedy gdy jest argumentem predykatu arytmetycznego, w innych przypadkach jest to tylko jakaś struktura danych składająca się z 2, + i 2: is bierze wyrażenie po prawej stronie, wylicza je i unifikuje rezultat z argumentem po lewej stronie, =:= wylicza dwa wyrażenia i porównuje wyniki, = unifikuje dwa wyrażenia, bez ich wyliczania, Zatem:?- Cos is 2+3. Cos = 5?- 4+1 =:= 2+3. true?- Cos = 2+3. Cos = 2+3

6 Inne porównania(<, >, =<, >=) działają tak jak =:= R is Wyr wylicza Wyr i unifikuje z R Wyr1 =:= Wyr2 - prawda jeśli wyniki obu wyrażeń są równe, Wyr1 =\= Wyr2 - prawda jeśli wyniki obu wyrażeń nie są równe, Wyr1 > Wyr2 Wyr1 < Wyr2 Wyr1 >= Wyr2 Wyr1 =< Wyr2 Uwaga: =< i >=, nie <= i =>.

7 Należy zauważyć, że predykaty porównawcze wymagają konkretnych argumentów; nie możemy powiedzieć: Podaj mi liczbę mniejszą od 20, ponieważ takie zapytanie miałoby nieskończoną liczbę możliwych odpowiedzi. Uwaga: Liczba zmienno-przecinkowa uzyskana w obliczeniach komputerowych prawie nigdy nie jest dokładnie równa jakiejkolwiek innej liczbie zmienno-przecinkowej, nawet jeśli obie wyglądają tak samo na wyjściu. Dzieje się tak, ponieważ komputery liczą w systemie binarnym, a my piszemy liczby w systemie dziesiętnym. Wiele dziesiętnych liczb, jak 0.1 nie ma binarnej reprezentacji ze skończoną liczbą znaków. (Wyrażanie 1/10 w notacji binarnej jest jak wyrażanie 1/3 lub 1/7 w notacji dziesiętnej znaki po prawej stronie kropki powtarzają się w nieskończoność.) W wyniku tego liczby zmienno-przecinkowe są przedmiotem błędów zaokrągleń.

8 Należy zauważyć, że predykaty porównawcze wymagają konkretnych argumentów; nie możemy powiedzieć: Podaj mi liczbę mniejszą od 20, ponieważ takie zapytanie miałoby nieskończoną liczbę możliwych odpowiedzi. Uwaga: Liczba zmienno-przecinkowa uzyskana w obliczeniach komputerowych prawie nigdy nie jest dokładnie równa jakiejkolwiek innej liczbie zmienno-przecinkowej, nawet jeśli obie wyglądają tak samo na wyjściu. Dzieje się tak, ponieważ komputery liczą w systemie binarnym, a my piszemy liczby w systemie dziesiętnym. Wiele dziesiętnych liczb, jak 0.1 nie ma binarnej reprezentacji ze skończoną liczbą znaków. (Wyrażanie 1/10 w notacji binarnej jest jak wyrażanie 1/3 lub 1/7 w notacji dziesiętnej znaki po prawej stronie kropki powtarzają się w nieskończoność.) W wyniku tego liczby zmienno-przecinkowe są przedmiotem błędów zaokrągleń.

9 Ćwiczenie: Wyjaśnij które z podanych zapytań zadziała, nie zadziała lub zwróci błąd, oraz dlaczego:?- 5 is 2+3.?- 5 =:= 2+3.?- 5 = 2+3.?- 4+1 is 2+3.?- 4+1 =:=2+3.?- 4+1 =:= 5.?- Cos is 2+3.?- Cos =:= 2+3.?- Cos is 5.?- Cos =5.

10 Praktyczne obliczenia Uważny czytelnik zauważy, że używając wyrażeń w Prologu, mieszamy dwa style kodowania. Z logicznego punktu widzenia suma i produkt to zależności między liczbami, tak jak ojciec i matka są zależnościami między ludźmi, więc zamiast?- Cos is 2 + 3*4 + 5 powinniśmy pisać?- produkt(3,4,p), suma(2,p,s), suma(s,5,cos) I rzeczywiście wczesne wersje Prologa tak działały, ale te stare podejście ma dwa problemy; jest niepraktycznie i daje wrażenie, że Prolog posiada strategię wyszukiwania dla liczb, co nie jest prawdą. Używamy więc wyrażeń.

11 Jeśli chcemy implementować numeryczne algorytmy, musimy zdefiniować własne predykaty. Dla przykłady zdefiniujmy predykat close_enough/2 który zadziała dla dwóch liczb różniących się o To pozwoli nam porównać liczby zmienno-przecinkowe bez bycia zmylonymi przez błędy zaokrągleń. close_enough(x,x) :-!. close_enough(x,y) :- X<Y, Y-X< close_enough(x,y) :- X>Y, close_enough(y,x). Pierwsza klauzula obsługuje przypadek gdy dwa argumenty, jakimś cudem, rzeczywiście są równe, wykrzyknik zapewnia, że jeśli pierwsza klauzula się wykona, dwie następne nie będą uruchomione. Druga klauzula to serce obliczeń; porównaj X i Y, odejmij mniejszą od większej, i sprawdź czy różnica jest mniejsza od Trzecia klauzula zajmuje się argumentami w przeciwnej kolejności zamienia je i wywołuje samą siebie ponownie.

12 Teraz wykonamy obliczenia, następujący predykat inicjalizuje Y wartością real square root X jeśli istnieje lub atomem nonexistent jeśli nie; real_square_root(x,nonexistent) :- X < 0.0. real_square_root(x,y) :- X >= 0.0, Y is sqrt(x). Przykład użycia:?- real_square_root(9.0,root). Root =3.0?- real_square_root(-1.0,root). Root =nonexistent Należy zauważyć, że zapytanie real_square_root(121.0,11.0) prawdopodobnie zawiedzie, ponieważ 11.0 nie równa się dokładnie zmienno-przecinkowemu wynikowi sqrt pomimo, że pierwiastek ze 121 wynosi dokładnie 11. Możemy to naprawić wykorzystując nasz predykat close_enough. Wymaga to następującej redefinicji real_square_root

13 real_square_root(x,nonexistent) :- X < 0.0. real_square_root(x,y) :- X >= 0.0, R is sqrt(x), close_enough(r,y). Teraz mamy nasz pożądany rezultat:?- real_square_root(121.0, 11.0) true Wreszcie, wykorzystajmy zdolność Prologa do zwracania alternatywnych odpowiedzi, każda dodatnia liczba rzeczywista ma dwa pierwiastki kwadratowe, jeden dodatni i jeden ujemny.

14 Potrzebujemy dodatkowych klauzul dla alternatyw, ponieważ arytmetyka w Prologu jest całkowicie deterministyczna; real_square_root(x,y) :- X > 0.0, R is -sqrt(x), close_enough(r,y). To daje nam alternatywną metodę znajdowania pierwiastka. Teraz każde wywołanie zakończone sukcesem zwróci dwa wyniki:?- real_square_root(9.0,root). Root =3.0 Root =-3.0

15 Testowanie dla inicjalizacji Jak dotąd real_square_root wymaga aby pierwszy argument był zainicjalizowany, ale z drobnymi zmianami może zostać wyposażony w wymienność niewiadomych. Używając X i Y nasza strategia wygląda tak: Jeśli X jest znane unifikuj Y z pierwiastkiem z X lub ujemnym pierwiastkiem z X(alternatywne rozwiązania). Jeśli Y jest znane, unifikuj X z Y*Y. Aby to osiągnąć musimy sprawdzić czy X i Y są zainicjalizowane. Prolog dostarcza dwa predykaty w tym celu: var który zwraca prawdę jeśli argument jest niezainicjalizowany oraz nonvar, który zwraca prawdę, jeśli argument ma wartość. Możemy zatem udoskonalić real_square_root;

16 real_square_root(x,nonexistent) :- nonvar(x), X < 0.0. real_square_root(x,y) :- nonvar(x), X >= 0.0, R is sqrt(x), close_enough(r,y). real_square_root(x,y) :- nonvar(x), X > 0.0, R is -sqrt(x), close_enough(r,y). real_square_root(x,y) :- nonvar(y), Ysquared is Y*Y, close_enough(ysquared,x). Tutaj klauzula 4 zapewnia metodę wyliczenia X z Y, a użycie nonvar zapewnia, że właściwa klauzula zostanie wybrana i nie będziemy próbować liczyć lub porównywać niezainicjalizowanych zmiennych.

17 Listy Jedną z najważniejszych struktur danych Prologa jest lista. Lista to posortowana sekwencja zera lub więcej termów wypisanych w nawiasach kwadratowych, oddzielonych kropkami: [alpha,beta,gamma,delta] [1,2,3,go] [(2+2),in(austin,texas),-4.356,X] [[a,list,within],a,list] Elementy listy mogą być termami dowolnego typu, włączając w to inne listy. Pusta lista to []. Warto zauważyć, że jednoelementowa lista [a] nie jest równa atomowi a. Listy mogą być konstruowane bądź rozkładane poprzez unifikacje. Cała lista może oczywiście równać się jednej zmiennej. Unify With Result [a,b,c] X X=[a,b,c]

18 Także, odpowiadające element dwóch list mogą być unifikowane jedna do drugiej Unify With Result [X,Y,Z] [a,b,c] X=a,Y=b, Z=c [X,b,Z] [a,y,c] X=a,Y=b, Z=c Ta zasada odnosi się także do list lub struktur zagnieżdżonych w listach Unify With Result [[a,b],c] [X,Y] X=[a,b], Y=c [a(b),c(x)] [Z,c(a)] X=a, Z=a(b) Co ważniejsze jakakolwiek lista może zostać podzielona na głowę i ogon poprzez symbol. Głową listy jest pierwszy element, zaś ogonem lista pozostałych elementów(może być pusta). Każda nie pusta lista ma głowę i ogon; [a [b,c,d]] = [a,b,c,d] [a []] = [a]

19 Term [X Y] unifikuje z jakąkolwiek nie pustą listą, inicjalizując X do głowy i Y do ogona: Unify With Result [X Y] [a,b,c,d] X=a, Y=[b,c,d] [X Y] [a] X=a, Y=[] Jak dotąd jest jak rozróżnienie CAR-CDR w Lispie, ale w przeciwieństwie do CAR i CDR, może wziąć pod uwagę więcej niż jeden początkowy element w pojedynczym kroku: [a,b,c [d,e,f]] = [a,b,c,d,e,f]

20 Co naprawdę przydaję się w unifikacji: Unify With Result [X,Y Z] [a,b,c] X=a, Y=b, Z=[c] [X,Y Z] [a,b,c,d] X=a, Y=b, Z=[c,d] [X,Y,Z A] [a,b,c] X=a, Y=b, Z=c, A=[] [X,Y,Z A] [a,b] fails [X,Y,a] [Z,b,Z] X=Z=a, Y=b [X,Y Z] [a W] X=a, W=[Y Z] Proces konstrukcji i rozkładania list jest wykonywany głównie poprzez unifikację, nie przez procedury. To znaczy, że serce procedury przetwarzającej listę jest często w notacji, która opisuje strukturę argumentów. Aby się do tej notacji przyzwyczaić, zdefiniujmy przetwarzający predykat: third_element([a,b,c Rest],C).

21 Osiąga on sukces, jeśli pierwszy argument jest listą, a drugi jest trzecim elementem listy. Posiada kompletną wymienność niewiadomych, więc:?- third_element([a,b,c,d,e,f],x). X= c?- third_element([a,b,y,d,e,f],c). Y= c?- third_element(x,a). X= [_0001,_0002,a _0003] W ostatnim użyciu predykatu, komputer nie wie nic o X poza tym, że jest lista, której trzecim elementem jest, więc tworzy listę z niezainicjalizowanym 1 i 2 elementem, następnie a, a po nim niezainicjalizowany ogon.

22 Przechowywanie danych w listach Listy mogą przechowywać dane podobnie jak rekordy w w COBOL-u bądź Pascalu. Dla przykładu; ['Michael Covington', '285 Saint George Drive', 'Athens', 'Georgia', '30606'] Jest to rozsądna metoda przedstawienia adresu, z polami dla imienia, ulicy, miasta, stanu oraz adresu pocztowego. Procedury takie jak third_element mogą wydobywać bądź wprowadzać dane do takiej listy.

23 Zasadniczą różnicą jest fakt, że pomiędzy listą, a rekordem danych jest fakt, że liczba elementów listy nie musi być z góry zadeklarowana. Kolejną różnicą jest to, że elementy listy nie muszą być żadnego konkretnego typu. Atomy, struktury i liczby mogą być dowolnie wykorzystywane w jakiejkolwiek kombinacji. Co więcej, lista może zawierać inną listę jako jeden ze swoich elementów. ['Michael Covington', [['B.A',1977], ['M.Phil.',1978], ['Ph.D.',1982]], 'Associate Research Scientist', 'University of Georgia'] W tym przykładzie główna lista posiada cztery elementy: imię, listę tytułów naukowych, stanowisko w pracy, pracodawca. Lista stopni naukowych posiada 3 elementy z których każdy jest dwu-elementową listą zawierającą stopień i datę. Zauważmy, że liczba stopni naukowych na osobę nie jest ograniczona; ta sama struktura może obsłużyć osobę bez żadnych luz z kilkunastoma.

24 Listy w Prologu mogą posłużyć jako zamiennik dla tablic z innych języków programowania. Np. macierz liczb może być przedstawiona jako lista list: [[1,2,3], [4,5,6], [7,8,9]] Istnieje jednak ważna różnica, w tablicy każdy element ma taki sam czas dostępu, pracując na liście komputer musi zawsze zaczynać od początku i przechodzić element po elemencie.

25 Rekurencja Aby całkowicie wykorzystać potencjał list, potrzebujemy metody pracowania z elementami listy, bez potrzeby określania ich pozycji z wyprzedzeniem. Rozwiązaniem jest rekurencja, czyli metoda kiedy procedura wywołuje samą siebie. Zdefiniujmy predykat member(x,y) który zwraca prawdę, jeśli X jest elementem tablicy Y. Nie wiemy z góry ile elementów posiada lista Y, nie możemy więc użyć skończonej liczby predeterminowanych pozycji, musimy kontynuować sprawdzanie, dopóki nie znajdziemy X lub elementy Y nie skończą się.

26 Zanim zajmiemy się samą rekurencją, pomyślmy nad dwoma specjalnymi przypadkami które nie są powtarzalne: 1) Jeśli Y jest puste, zwróć fałsz bez dalszych czynności, ponieważ nic nie jest elementem pustej listy, 2) Jeśli X jest pierwszym elementem Y zwróć prawdę bez dalszych czynności. Z pierwszą sytuacją uporamy się upewniając się, że we wszystkich naszych klauzulach, drugi argument jest czymś co nie unifikuje się z pustą listą, pusta lista nie ma ogona, więc możemy wykluczyć puste listy pozwalając drugiemu argumentowi być listą, która ma zarówno głowę jak i ogon. member(x,[x _]). Następnie rekurencyjna część: member(x,[_ Ytail]) :- member(x,ytail). Przykładowe uzycie:?- member(c,[a,b,c]).

27 To nie pasuje do klauzuli 1, więc program kontynuuje do drugiej, ta z kolei generuje nowe zapytanie:?- member(c,[b,c]). Ponownie, klauzula 1 nie pasuje, ale klauzula 2 już tak i generuje nowe zapytanie:?- member(c,[c]). Tym razem zadziała klauzula 1, ponieważ [c] jest równoznaczne z [c []], zapytanie kończy się sukcesem, zgodnie z oczekiwaniami.

28 Liczenie elementów listy Oto rekurencyjny algorytm do liczenia elementów listy: 1) Jeśli lista jest pusta, to ma 0 elementów, 2) W innym wypadku, pomiń pierwszy element, policz liczbę pozostałych elementów i dodaj 1. Druga z tych klauzul jest rekurencyjna ponieważ, w celu policzenia elementów listy, musisz policzyć elementy innej, mniejszej liczby. Algorytm zapisany w Prologu ma postać: list_length([],0). list_length([_ Tail],K) :- list_length(tail,j), K is J + 1.

29 Rekurencja kończy się ponieważ lista w końcu stanie się pusta po usuwaniu kolejnych elementów. Przykład użycia:?- list_length([a,b,c],k0).?- list_length([b,c],k1).?- list_length([c],k2).?-listl_ength([],0).?- K2 is 0+1.?- K1 is 1+1.?- K0 is 2+1.

30 Łączenie list Co jeśli chcielibyśmy połączyć dwie listy? Np. [a,b,c] z [d,e,f], aby uzyskać [a,b,c,d,e,f]. nie spełni zadania; [[a,b,c] [d,e,f]] daje [[a,b,c],d,e,f], a to nie to czego oczekujemy. Będziemy musieli przejść po pierwszej liście element po elemencie, dodając je do drugiej listy. Na początek zajmijmy się warunkiem ograniczającym, gdyż lista ewentualnie zostanie pusta. append([],x,x). Rekurencyjna klauzula jest mniej intuicyjna, ale bardzo zwięzła: append([x1 X2],Y,[X1 Z]) :- append(x2,y,z). Pierwszy element wynikowy jest taki sam jak pierwszy elemente pierwszej listy. Ogon wyniku jest uzyskany poprzez dołączenie ogona pierwszej listy do całej drugiej listy. Bardziej proceduralnie: Weź pierwszy element pierwszej listy(nazwij X1) Rekurencyjnie dołącz ogon pierwszej listy do całej drugiej listy. Nazwij rezultat Z. Dodaj X1 do początku Z.

31 Z powodu deklaratywnej natury appena jest całkowicie wymienna dla niewiadomych?- append([a,b,c],[d,e,f],x). X= [a,b,c,d,e,f]?- append([a,b,c],x,[a,b,c,d,e,f]). X= [d,e,f]?- append(x,[d,e,f],[a,b,c,d,e,f]). X= [a,b,c] Każde z tych jest deterministyczne istnieje tylko jedno możliwe rozwiązanie, ale jeśli zostawimy dwa pierwsze argumenty niezainicjalizowane, dostaniemy, jako alternatywne rozwiązania, wszystkie możliwe sposoby podzielenia drugiej argumentu na dwie podlisty:?- append(x,y,[a,b,c,d]). X=[] Y=[a,b,c,d] X=[a] Y=[b,c,d] X=[a,b] Y=[c,d] X=[a,b,c] Y=[d] X=[a,b,c,d] Y=[]

32 Rekurencyjne odwracanie list Klasyczny algorytm rekurencyjny dla odwrócenia elementów na liście: Podziel oryginalną listę na head(głowę) i tail(ogon). Rekurencyjnie odwrócić tail(ogon) oryginalnej listy. Stworzyć liste której jedyne elementy są head(głową) oryginalnej listy. Powiązać odwrócony tail(ogon) oryginalnej listy z listą stworzoną w kroku 3. Ponieważ lista staje się krótsza za każdym razem, ograniczający przypadkiem jest pusta lista, którą chcemy zwrócić nie zmienioną. W Prologu: reverse([],[]). % Klauzula 1 reverse([head Tail], Result) :- % Klauzula 2 reverse(tail,reversedtail), append(reversedtail,[head],result).

33 Jest to tłumaczenie klasycznego algorytmu odwracania listy Lisp-a (rodzina języków programowania) znany jako naive reversal albo NREV i często używany do testowanie prędkości realizacji Lisp-a i Prolog-a. Jego naiwność polega na jego wielkiej nieskuteczności. Można pomyśleć ze 8 elementowa lista możliwa jest do odwrócenia w 8-9 krokach. Z tym algorytmem jednak odwrócenie 8 elementowej listy potrzebuje 45 kroków 9 wezwań do odwrócenia, a następnie 36 wezwań do dołączenia. Jedną z rzeczy którą można powiedzieć na korzyść algorytmu jest to, że lubi wymienność niewiadomych przynajmniej przy pierwszym rozwiązaniu każdego pytania. Lecz jeżeli pierwszy argument jest niezainicjowany, drugi argument jest listą i prosimy o więcej niż jedno rozwiązanie zaczynają się dziać różne dziwne rzeczy. Ćwiczenie Wstawiając kilka writes i nls, spraw by reverse wyświetliło argumenty każdego wezwania do siebie i każde wezwanie do dodania. Następnie spróbuj pytania reverse(what, [a,b,c]), poproś o alternatywne rozwiązania i zobacz co się stanie. Pokaż swoją zmodyfikowaną wersję reverse i jego wynik.

34 Szybszy sposób na odwracanie list Oto algorytm który odwraca listy o wiele szybciej ale kosztem możliwości wymiany niewiadomych. fast_reverse(original,result) :- nonvar(original), fast_reverse_aux(original,[],result). fast_reverse_aux([head Tail],Stack,Result) :- fast_reverse_aux(tail,[head Stack],Result). fast_reverse_aux([],result,result). Pierwsza klauzula sprawdza czy oryginalna lista rzeczywiście jest zainicjowana, następnie wywołuje trzy argumentową procedurę nazywaną fast_reverse_aux. Ideą jest przesuniecie elementów jeden po drugim, podnosząc je z początku oryginalnej listy i dodawanie ich do nowej listy służącej jako stos. Nowa lista staje się odwróconą kopią oryginalnej listy. Przez wszystkie wezwania rekurencyjne, Result(wynik) jest niezainicjowany, na końcu zainicjowywujemy go i przekazujemy z powrotem do procedury wezwań.

35 ?- fast_reverse_aux([a,b,c],[],result).?- fast_reverse_aux([b,c],[a],result).?- fast_reverse_aux([c],[b,a],result).?- fast_reverse_aux([],[c,b,a],[c,b,a]). Ten algorytm odwróci n-elementową listę w n+1 krokach. W pierwszej klauzurze załączyliśmy nonvar by fast_reverse zawiodło jeżeli pierwszy argument jest niezainicjowany. Bez tego niezainicjowany argument wprowadził by komputer w niekończące się obliczanie, tworząc dłuższe i dłuższe listy niezainicjowanych zmiennych która żadna nie była by rozwiązaniem. Ćwiczenie Pokaż że fast_reverse działa jak opisaliśmy. Zmodyfikuj by wypisywało argumenty każdego wezwania rekurencyjnego byś mógł zobaczyć co się dzieje z algorytmem.

36 Ciąg znaków Są trzy sposoby na zaprezentowanie ciągu znaków w Prologu: 1) Jako atom. Atomy są kompaktowe ale ciężkie do rozdzielenia lub manipulowania. 2) Jako lista kodów ASCII. Możesz użyć na nich standardowej listy technik przetwarzania. 3) Jako lista jedno znakowych atomów. Ponownie możesz użyć na nich standardowej listy technik przetwarzania. W Prologu jeśli wpiszesz znak w cuszysłowiu ( tak jak tu ), komputer interpretuje to jako liste kodów ASCII. Tak więc abc i [97,98,99] są takie same w terminologi Prologu. Taki listy kodów ASCII tradycyjnie nazywane są Stringami.

37 Natychmiastowym problemem jest to że nie ma standardowego sposobu na wyświetlenie znaku, ponieważ write i display wypisują listę numerów:?- write("abc"). [97,98,99] yes Prosta procedura wyświetlania stringów: write_str([head Tail]) :- put(head), write_str(tail). write_str([]). Rekurencja jest prosta do śledzenia. Jeżeli string nie jest pusty (tak więc będzie się zgadzał [Head Tail]) wypisze pierwszą pozycjie i powtórz procedure dla pozostałych pozycji. Kiedy String stanie się pusty, zakończ powodzeniem bez kolejnych akcji. Stringi są listami w każdym sensie słowa i kazda lista technik przetwarzania może być na nich użyta. Tak więc reverse odwróci string-a, append zwiąże lub podzieli string i tak dalej.

38 Zdefiniuj Prologa przewidź print_split który, gdy otrzyma stringa, wypisze wszystkie możliwe sposoby podziału stringu na dwa tak jak to:?- print_splits("university"). university u niversity un iversity uni versity univ ersity unive rsity univer sity univers ity universi ty universit y university yes

39 Wprowadzenie linii jako string lub atom Łatwo sprawić by Prolog czytał całą linie wprowadzeń do pojedynczego stringa. Ideą jest unikanie używania read, a zamiast tego używania get 0 do wprowadzania znaków dopóki nie dojdziemy do końca linii. Okazuje się że algorytm potrzebuje jednego znaku LOOKAHEAD- nie może zdecydować co zrobić z każdym znakiem dopóki nie będzie wiedział czy kolejny znak jest znacznikiem końca linii. Wiec oto sposób jak to zrobić % read_str(string) % Accepts a whole line of input as a string (list of ASCII codes). % Assumes that the keyboard is buffered. read_str(string) :- get0(char), read_str_aux(char,string). read_str_aux(-1,[]) :-!. % end of file read_str_aux(10,[]) :-!. % end of line (UNIX) read_str_aux(13,[]) :-!. % end of line (DOS) read_str_aux(char,[char Rest]) :- read_str(rest). Zauważ ze przewidywanie zaczyna się krótkim komentarzem opisującym to. Od teraz taki komentarz będzie naszą standardową praktyką.

40 Lookahead jest osiągnięty przez przeczytanie jednego znaku, następnie przekazaniem tego znaku do read_str_aux, który dokonuje decyzji, a potem kończy wpisywanie w linii. Konkretnie: 1) Jeżeli Char jest 10 lub 13 (koniec linii) lub -1 (koniec pliku), nie wkładaj nic wiecej, reszta stringu jest pusta. 2) W przeciwnym wypadku postaw Char na początku stringu i rekurencyjnie wkładaj jego resztę w ten sam sposób. Cięcia w read_str_aux zapewniają że jeżeli jakakolwiek z pierwszych trzech klauzul zakończy się powodzeniem ostatnia klauzula nie będzie nigdy wypróbowywana. Celem cięć w tym przypadku jest zachowanie ostatniej klauzuli przed dopasowywaniem nieodpowiednich wartości Char-ów. Zauważcie ze read_str zakłada ze input klawiatury jest buforowany. Jeżeli klawiatura jest nie buforowana read_str będzie wciąż działał, ale jeżeli użytkownik użyje backspace podczas wpisywania backspace nie usunie poprzedniego znaku zamiast tego znak backspace-u pojawi się w stringu.

41 Często chcemy przeczytać całą linie input-u nie jako string ale jako atom. Jest to również proste, ponieważ wbudowane orzeczenie name/2 konwertuje stringi i atomy w obie strony:?- name(abc,what). What = [97,98,99] % equivalent to "abc"?- name(what,"abc"). What = abc?- name(what,"hello there"). What = 'Hello there' yes?- name(what,[97,98]). What = ab Ćwiczenie Uruchom read_str i read_atom na swoim komputerze i sprawdź czy działają tak jak jest to opisane.

42 Struktury Wiele warunków Prologa składa się z funktora wynikającego z zera lub więcej warunków takich jak argumenty: a(b,c) alpha([beta,gamma],x) 'this and'(that) f(g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v) i_have_no_arguments Warunki tej formy nazywane są Structures(Struktury). Funktor zawsze jest atomem, ale argumenty mogą być warunkami każdego typu. Struktura bez argumentów jest po prostu atomem.

43 Dotąd używaliśmy struktur w faktach, zasadach, zapytaniach i wyrażeniach algebraicznych. Struktury są również pozycjami danych w ich własnych prawach. Dla przykładu: person(name('michael Covington'), gender(male), birthplace(city('valdosta'), state('georgia'))) sentence(noun_phrase(determiner(the), noun(cat)), verb_phrase(verb(chased), noun_phrase(determiner(the) ), noun(dog))))

44 Struktury działają jak listy, jednakże są inaczej przechowywane (i bardziej kompaktowo) w pamięci. Struktura a(b,c) zawiera te same informacje jak lista [a,b,c]. W rzeczywistości oba są wymienialne przez =..?- a(b,c,d) =.. X. X = [a,b,c,d] yes?- X =.. [w,x,y,z]. X = w(x,y,z) Yes?- alpha =.. X. X = [alpha] Yes Zauważcie ze po lewej stronie argument jest zawsze strukturą, kiedy prawa strona argumentu jest zawsze listą której pierwszy element jest atomem.

45 Jedną ważną różnicą jest to że lista jest rozkładana na head i tail, kiedy struktura nie jest. Struktura zjednoczy się z inna strukturą która ma taki sam funktor i tą samą liczbę argumentów. Oczywiście cała struktura również zjednoczy się z pojedynczą zmienna: Unify With Result a(b,c) X X=a(b,c) a(b,c) a(x,y) X=b, Y=c a(b,c) a(x) fails a(b,c) a(x,y,z) fails Ćwiczenie Używając tego co już znasz o listach wykonywania, stwórz orzeczenie reverse_args które bierze dowolną strukture i odwraca kolejność jej argumentów:?- reverse_args(a(b,c,d,e),what). What = a(e,d,c,b)

46 Occurs check Można stworzyć dziwną, zapętloną strukturę by ujednolicić zmienne z strukturą lub listą która zawiera tę zmienną. Takie struktury zawierają wskaźniki do nich samych i prowadzą do niekończących się pętli kiedy wydruk staję się rutyną lub cokolwiek innego próbuje pokrzyżować je. Dla przykładu:?- X = f(x). X = f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f...?- X = [a,b,x] X = [a,b,[a,b,[a,b,[a,b,[a,b,[a,b,[a,b,[a,b[a,b,[a,b[a,b,[a,b...?- f(x) = f(f(x)) X = f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(...

47 Standard ISO zawiera orzeczenie unify_with_occurs_check które sprawdza którykolwiek jeden termin zawierający inny przed próbą ujednolicenia i zawodzi, jeśli tak to:?- unify_with_occurs_check(x,f(x)). no.?- unify_with_occurs_check(x,f(a)). X = f(a) Nasze doświadczenie jest takie ze occurs-check jest rzadko potrzebny w praktycznych programach Prologa, jednak jest czymś czego powinniśmy byś świadomi. Ćwiczenie Który z podanych zapytań tworzy zapętloną strukturę:?- X=Y, Y=X.?- X=f(Y), Y=X.?- X=f(Y), Y=f(X).?- X=f(Y), Y=f(Z), Z=a.

48 Konstruowanie celów na starcie Ponieważ zapytania w Prologu są strukturami, możesz je traktować jako dane i konstruować je podczas uruchomienia programu. Wbudowane orzeczenie call wykonuje swoje argumenty jako pytanie. Tak więc call(write( hello there )) jest równoznaczne z write( hello there ). Siła call-a pochodzi z faktu ze cel może być stworzony przez obliczenie i wykonanie. Dla przykładu: answer_question :- write('mother or father? '), read_atom(x), write('of whom? '), read_atom(y), Q =.. [X,Who,Y], call(q), write(who), nl.

49 Jeżeli użytkownik wpisze mother i cathy wtedy Q stanie się mother(who,cathy). Jest to wtedy wykonywane jako pytanie a wartość Who jest wypisana. Tak więc:?- answer_question. Mother or father? father Of whom? michael charles_gordon yes?- answer_question. Mother or father? mother Of whom? melody eleanor yes

50 Możemy zrobić to nieco bardziej wygodne przez zdefiniowanie orzeczenia Apple (podobne do APPLY w Lisp) które bierze atom oraz listę i tworzy zapytanie używając atomu jako funktora a listy jako argumentów, następnie wykonuje zapytanie. % apply(functor,arglist) % Constructs and executes a query. apply(functor,arglist) :- Query =.. [Functor Arglist], call(query). Cel apple(mother,[who,melody]) ma ten sam efekt co mother(who,melody). Argumenty dawane są przez listę ponieważ ich liczba jest nieprzewidywalna. Prolog zapobiega zdefiniowaniu orzeczenia z dowolną zmienną liczbą argumentów. Ćwiczenie Czy twój Prolog pozwala ci na wpisaniu zmiennej jako cel, zamiast używania call?

51 Strategie przechowywania danych Istnieją trzy miejsca w których mogą być przechowywane dane w programie Prolog: 1) W instancji zmiennej. Jest to mniej trwały sposób przechowywania informacji ponieważ, zmienne istnieją tylko w zasięgu klauzuli która je definiuje. Dalej zmienne tracą swoje wartości na rzecz backtracking-u. 2) W argumentach orzeczeń. Lista argumentów jest jedynym sposobem by procedura Prologa normalnie komunikowała się ze światem. Przez przekazywanie argumentów do siebie kiedy wzywa się rekurencyjnie, procedura może wykonać rekurencyjny proces i zapisać informacje z jednej rekurencji do następnej. 3) W bazie wiedzy. Jest to najbardziej trwały sposób przechowywania informacji. Informacje umieszczone w bazie wiedzy przez asserta lub assertz pozostaje tam dopóki wyraźnie je wycofamy.

52 Prostym przykładem przechowywania wiedzy w bazie wiedzy jest orzeczenie count które mówi ci ile razy zostało wywołane. Dla przykładu:?- count(x). X = 1 yes?- count(x). X = 2 Yes % count(x) % Unifies X with the number of times count/1 has been called. count(x) :- retract(count_aux(n)), X is N+1, asserta(count_aux(x)). :- dynamic(count_aux/1). count_aux(0).

53 Ponieważ count musi zapamiętać informacje z jednego wezwania do następnego bez względu na backtracking lub niepowodzenie, musi przechowywać dane w bazie wiedzy używając assert i retract. Nie ma możliwości by informacje mogły przejść z jednej procedury do innej przez argumenty, ponieważ nie ma możliwości przewidzenia jaka będzie ścieżka wykonywania. Jest kilka powodów by używać assert tylko jako środek ostateczny. Pierwszym jest to ze assert przeważnie zabiera więcej czasu komputerowi niż zwykłe przekazywanie argumentu. Innym powodem jest to że programy używające assert są trudniejsze do zdebugowania. Są jednak słuszne powody używania assert. Jednym z nich jest zapisywanie wyników które zajmują dużo czasu i miejsca do przeliczenia. Dla przykłady algorytm przeszukujący grafy może wykonać ogromną ilość kroków by znaleźć każdą ścieżkę grafu.

54 Kolejnym słusznym użyciem assert jest ustawienie parametrów kontrolnych duzego skomplikowanego programu takiego jak eksperckiego systemu którego użytkownik może używać w kilku trybach. Przez wykonywanie właściwych assert-ów program może ustawić się do wykonywanie funkcji które użytkownik chce wykorzystać w szczególnych sesjach. Ćwiczenie Zdefiniuj procedurę Gengym(x) która generuje nowy atom za każdym razem gdy jest wywołana. Jedyną z możliwości było by sprawić by działało tak:?- gensym(what). What = a?- gensym(what). What = b...?- gensym(what). What = z?- gensym(what). What = za Jednak możesz generować atomy jak tylko chcesz pod warunkiem by się nie powtarzały.

55 Dziękujemy za uwagę

Prolog struktury danych oraz obliczenia. 1. Arytmetyka?- Y is 2+2. Y = 4. ?- 5 is 3+3. false. ?- Z is (3.9 / 2.1). Z =

Prolog struktury danych oraz obliczenia. 1. Arytmetyka?- Y is 2+2. Y = 4. ?- 5 is 3+3. false. ?- Z is (3.9 / 2.1). Z = Prolog struktury danych oraz obliczenia 1. Arytmetyka?- Y is 2+2. Y = 4?- 5 is 3+3. false.?- Z is 4.5 + (3.9 / 2.1). Z = 6.357142857142857. Wbudowany predykat is bierze wyrażenie po prawej, oblicza je

Bardziej szczegółowo

Prolog 2 (Filip Wroński, Łukasz Betkowski, Paweł Świerblewski, Konrad Kosmatka)

Prolog 2 (Filip Wroński, Łukasz Betkowski, Paweł Świerblewski, Konrad Kosmatka) Prolog 2 (Filip Wroński, Łukasz Betkowski, Paweł Świerblewski, Konrad Kosmatka) Rozdział 2 Constructing Prolog Programs z książki Prolog Programming in Depth autorstwa Michael A. Covington, Donald Nute,

Bardziej szczegółowo

Programowanie w logice

Programowanie w logice Wydział Matematyki UŁ 14 marca 2007 Plan prezentacji 1 Składnia Termy Stałe Zmienne Struktury 2 Własny operator Przeciążanie operatorów 3 Arytmetyczne i logiczne predykaty systemowe 4 Do zapamiętania Termy

Bardziej szczegółowo

Programowanie strukturalne. Opis ogólny programu w Turbo Pascalu

Programowanie strukturalne. Opis ogólny programu w Turbo Pascalu Programowanie strukturalne Opis ogólny programu w Turbo Pascalu STRUKTURA PROGRAMU W TURBO PASCALU Program nazwa; } nagłówek programu uses nazwy modułów; } blok deklaracji modułów const } blok deklaracji

Bardziej szczegółowo

Programowanie w logice

Programowanie w logice Programowanie w logice PROLOG cz.1 PROLOG język wysokiego poziomu Powstał w 1972 na Uniwersytecie w Marsylii (Francja) w zespole A.Colmerauer a i F.Roussel a PROgrammation en LOGique, PROgramming in LOGic,

Bardziej szczegółowo

Definicje wyższego poziomu

Definicje wyższego poziomu Definicje wyższego poziomu Interpreter Scheme-a nie będzie narzekad w przypadku wystąpienia niezdefionowanej zmiennej w ciele wyrażenia lambda dopóki nie będzie zastosowana Przykład braku informacji o

Bardziej szczegółowo

Programowanie w Logice

Programowanie w Logice Programowanie w Logice Działanie Prologu Przemysław Kobylański na podstawie [CM2003] Składnia Programy Prologu składają się z termów. Term to stała, zmienna lub struktura (term złożony). Term zapisuje

Bardziej szczegółowo

Podstawy programowania 2. Temat: Funkcje i procedury rekurencyjne. Przygotował: mgr inż. Tomasz Michno

Podstawy programowania 2. Temat: Funkcje i procedury rekurencyjne. Przygotował: mgr inż. Tomasz Michno Instrukcja laboratoryjna 6 Podstawy programowania 2 Temat: Funkcje i procedury rekurencyjne Przygotował: mgr inż. Tomasz Michno Wstęp teoretyczny Rekurencja (inaczej nazywana rekursją, ang. recursion)

Bardziej szczegółowo

PROLOG INNE PRZYKŁADY MACIEJ KELM

PROLOG INNE PRZYKŁADY MACIEJ KELM PROLOG INNE PRZYKŁADY MACIEJ KELM PREDYKAT RANDOM Funkcja random zwraca losową liczbę całkowitą w przedziale od 1 do X. Gdzie X jest parametrem funkcji random. Przed użyciem random należy zainicjować tak

Bardziej szczegółowo

Pascal - wprowadzenie

Pascal - wprowadzenie Pascal - wprowadzenie Ogólne informacje o specyfice języka i budowaniu programów Filip Jarmuszczak kl. III c Historia Pascal dawniej jeden z najpopularniejszych języków programowania, uniwersalny, wysokiego

Bardziej szczegółowo

I. Podstawy języka C powtórka

I. Podstawy języka C powtórka I. Podstawy języka C powtórka Zadanie 1. Utwórz zmienne a = 730 (typu int), b = 106 (typu long long), c = 123.45 (typu double) Wypisz następujące komunikaty: Dane sa liczby: a = 730, b = 106 i c = 123.45.

Bardziej szczegółowo

4. Funkcje. Przykłady

4. Funkcje. Przykłady 4. Funkcje Przykłady 4.1. Napisz funkcję kwadrat, która przyjmuje jeden argument: długość boku kwadratu i zwraca pole jego powierzchni. Używając tej funkcji napisz program, który obliczy pole powierzchni

Bardziej szczegółowo

REKURENCJA W JĘZYKU HASKELL. Autor: Walczak Michał

REKURENCJA W JĘZYKU HASKELL. Autor: Walczak Michał REKURENCJA W JĘZYKU HASKELL Autor: Walczak Michał CZYM JEST REKURENCJA? Rekurencja zwana rekursją, polega na wywołaniu przez funkcję samej siebie. Algorytmy rekurencyjne zastępują w pewnym sensie iteracje.

Bardziej szczegółowo

Cw.12 JAVAScript w dokumentach HTML

Cw.12 JAVAScript w dokumentach HTML Cw.12 JAVAScript w dokumentach HTML Wstawienie skryptu do dokumentu HTML JavaScript jest to interpretowany, zorientowany obiektowo, skryptowy język programowania.skrypty Java- Script mogą być zagnieżdżane

Bardziej szczegółowo

JAVAScript w dokumentach HTML (1) JavaScript jest to interpretowany, zorientowany obiektowo, skryptowy język programowania.

JAVAScript w dokumentach HTML (1) JavaScript jest to interpretowany, zorientowany obiektowo, skryptowy język programowania. IŚ ćw.8 JAVAScript w dokumentach HTML (1) JavaScript jest to interpretowany, zorientowany obiektowo, skryptowy język programowania. Skrypty JavaScript są zagnieżdżane w dokumentach HTML. Skrypt JavaScript

Bardziej szczegółowo

Widoczność zmiennych Czy wartości każdej zmiennej można zmieniać w dowolnym miejscu kodu? Czy można zadeklarować dwie zmienne o takich samych nazwach?

Widoczność zmiennych Czy wartości każdej zmiennej można zmieniać w dowolnym miejscu kodu? Czy można zadeklarować dwie zmienne o takich samych nazwach? Część XVIII C++ Funkcje Widoczność zmiennych Czy wartości każdej zmiennej można zmieniać w dowolnym miejscu kodu? Czy można zadeklarować dwie zmienne o takich samych nazwach? Umiemy już podzielić nasz

Bardziej szczegółowo

Luty 2001 Algorytmy (7) 2000/2001 s-rg@siwy.il.pw.edu.pl

Luty 2001 Algorytmy (7) 2000/2001 s-rg@siwy.il.pw.edu.pl System dziesiętny 7 * 10 4 + 3 * 10 3 + 0 * 10 2 + 5 *10 1 + 1 * 10 0 = 73051 Liczba 10 w tym zapisie nazywa się podstawą systemu liczenia. Jeśli liczba 73051 byłaby zapisana w systemie ósemkowym, co powinniśmy

Bardziej szczegółowo

znajdowały się różne instrukcje) to tak naprawdę definicja funkcji main.

znajdowały się różne instrukcje) to tak naprawdę definicja funkcji main. Część XVI C++ Funkcje Jeśli nasz program rozrósł się już do kilkudziesięciu linijek, warto pomyśleć o jego podziale na mniejsze części. Poznajmy więc funkcje. Szybko się przekonamy, że funkcja to bardzo

Bardziej szczegółowo

Wskaźniki a tablice Wskaźniki i tablice są ze sobą w języku C++ ściśle związane. Aby się o tym przekonać wykonajmy cwiczenie.

Wskaźniki a tablice Wskaźniki i tablice są ze sobą w języku C++ ściśle związane. Aby się o tym przekonać wykonajmy cwiczenie. Część XXII C++ w Wskaźniki a tablice Wskaźniki i tablice są ze sobą w języku C++ ściśle związane. Aby się o tym przekonać wykonajmy cwiczenie. Ćwiczenie 1 1. Utwórz nowy projekt w Dev C++ i zapisz go na

Bardziej szczegółowo

Arytmetyka liczb binarnych

Arytmetyka liczb binarnych Wartość dwójkowej liczby stałoprzecinkowej Wartość dziesiętna stałoprzecinkowej liczby binarnej Arytmetyka liczb binarnych b n-1...b 1 b 0,b -1 b -2...b -m = b n-1 2 n-1 +... + b 1 2 1 + b 0 2 0 + b -1

Bardziej szczegółowo

Języki programowania deklaratywnego

Języki programowania deklaratywnego Katedra Inżynierii Wiedzy laborki 14 Języki deklaratywne Główne różnice między paradygmatem deklaratywnym a imperatywnym Omów główne cechy paradygmatu programowania w logice na przykładzie Prologa Główne

Bardziej szczegółowo

Algorytmy i struktury danych. Wykład 4

Algorytmy i struktury danych. Wykład 4 Wykład 4 Różne algorytmy - obliczenia 1. Obliczanie wartości wielomianu 2. Szybkie potęgowanie 3. Algorytm Euklidesa, liczby pierwsze, faktoryzacja liczby naturalnej 2017-11-24 Algorytmy i struktury danych

Bardziej szczegółowo

Programowanie w logice Prolog 2

Programowanie w logice Prolog 2 Programowanie w logice Prolog 2 Listy Lista to uporządkowany ciąg elementów. Elementami listy mogą być dowolne terminy: stałe, zmienne i struktury W Prologu listę zapisujemy następująco: Przykłady [element1,element2,,elementn]

Bardziej szczegółowo

1. Wypisywanie danych

1. Wypisywanie danych 1. Wypisywanie danych Przykłady 1.1. Napisz program, który wypisze na ekran słowa Hello, world!. 1 // Przyklad 1: Hello, world! 3 using namespace std; 5 int main() { 6 cout

Bardziej szczegółowo

JAVAScript w dokumentach HTML (1)

JAVAScript w dokumentach HTML (1) JAVAScript w dokumentach HTML (1) JavaScript jest to interpretowany, zorientowany obiektowo, skryptowy język programowania. Skrypty JavaScript mogą być zagnieżdżane w dokumentach HTML. Instrukcje JavaScript

Bardziej szczegółowo

Instrukcja do ćwiczeń nr 4 typy i rodzaje zmiennych w języku C dla AVR, oraz ich deklarowanie, oraz podstawowe operatory

Instrukcja do ćwiczeń nr 4 typy i rodzaje zmiennych w języku C dla AVR, oraz ich deklarowanie, oraz podstawowe operatory Instrukcja do ćwiczeń nr 4 typy i rodzaje zmiennych w języku C dla AVR, oraz ich deklarowanie, oraz podstawowe operatory Poniżej pozwoliłem sobie za cytować za wikipedią definicję zmiennej w informatyce.

Bardziej szczegółowo

Algorytm. a programowanie -

Algorytm. a programowanie - Algorytm a programowanie - Program komputerowy: Program komputerowy można rozumieć jako: kod źródłowy - program komputerowy zapisany w pewnym języku programowania, zestaw poszczególnych instrukcji, plik

Bardziej szczegółowo

Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego Publikacja jest dystrybuowana bezpłatnie Program Operacyjny Kapitał Ludzki Priorytet 9 Działanie 9.1 Poddziałanie

Bardziej szczegółowo

PASCAL. Etapy pisania programu. Analiza potrzeb i wymagań (treści zadania) Opracowanie algorytmu Kodowanie Kompilacja Testowanie Stosowanie

PASCAL. Etapy pisania programu. Analiza potrzeb i wymagań (treści zadania) Opracowanie algorytmu Kodowanie Kompilacja Testowanie Stosowanie PASCAL Język programowania wysokiego poziomu Opracowany przez Mikołaja Wirtha na początku lat 70 XX wieku Prosty, z silną kontrolą poprawności Stosowany prawie wyłącznie na uczelniach do nauki programowania

Bardziej szczegółowo

Liczby losowe i pętla while w języku Python

Liczby losowe i pętla while w języku Python Liczby losowe i pętla while w języku Python Mateusz Miotk 17 stycznia 2017 Instytut Informatyki UG 1 Generowanie liczb losowych Na ogół programy są spójne i prowadzą do przewidywanych wyników. Czasem jednak

Bardziej szczegółowo

Instrukcje warunkowe i skoku. Spotkanie 2. Wyrażenia i operatory logiczne. Instrukcje warunkowe: if else, switch.

Instrukcje warunkowe i skoku. Spotkanie 2. Wyrażenia i operatory logiczne. Instrukcje warunkowe: if else, switch. Instrukcje warunkowe i skoku. Spotkanie 2 Dr inż. Dariusz JĘDRZEJCZYK Wyrażenia i operatory logiczne Instrukcje warunkowe: if else, switch Przykłady 11/3/2016 AGH, Katedra Informatyki Stosowanej i Modelowania

Bardziej szczegółowo

Języki i techniki programowania Ćwiczenia 2

Języki i techniki programowania Ćwiczenia 2 Języki i techniki programowania Ćwiczenia 2 Autor: Marcin Orchel Spis treści: Język C++... 5 Przekazywanie parametrów do funkcji... 5 Przekazywanie parametrów w Javie.... 5 Przekazywanie parametrów w c++...

Bardziej szczegółowo

lekcja 8a Gry komputerowe MasterMind

lekcja 8a Gry komputerowe MasterMind lekcja 8a Gry komputerowe MasterMind Posiadamy już elementarną wiedzę w zakresie programowania. Pora więc zabrać się za rozwiązywanie problemów bardziej złożonych, które wymagają zastosowania typowych

Bardziej szczegółowo

Po uruchomieniu programu nasza litera zostanie wyświetlona na ekranie

Po uruchomieniu programu nasza litera zostanie wyświetlona na ekranie Część X C++ Typ znakowy służy do reprezentacji pojedynczych znaków ASCII, czyli liter, cyfr, znaków przestankowych i innych specjalnych znaków widocznych na naszej klawiaturze (oraz wielu innych, których

Bardziej szczegółowo

DZIAŁANIA NA UŁAMKACH DZIESIĘTNYCH.

DZIAŁANIA NA UŁAMKACH DZIESIĘTNYCH. DZIAŁANIA NA UŁAMKACH DZIESIĘTNYCH. Dodawanie,8 zwracamy uwagę aby podpisywać przecinek +, pod przecinkiem, nie musimy uzupełniać zerami z prawej strony w liczbie,8. Pamiętamy,że liczba to samo co,0, (

Bardziej szczegółowo

Zmienne, stałe i operatory

Zmienne, stałe i operatory Zmienne, stałe i operatory Przemysław Gawroński D-10, p. 234 Wykład 2 4 marca 2019 (Wykład 2) Zmienne, stałe i operatory 4 marca 2019 1 / 21 Outline 1 Zmienne 2 Stałe 3 Operatory (Wykład 2) Zmienne, stałe

Bardziej szczegółowo

Pascal typy danych. Typy pascalowe. Zmienna i typ. Podział typów danych:

Pascal typy danych. Typy pascalowe. Zmienna i typ. Podział typów danych: Zmienna i typ Pascal typy danych Zmienna to obiekt, który może przybierać różne wartości. Typ zmiennej to zakres wartości, które może przybierać zmienna. Deklarujemy je w nagłówku poprzedzając słowem kluczowym

Bardziej szczegółowo

Programowanie komputerowe. Zajęcia 1

Programowanie komputerowe. Zajęcia 1 Programowanie komputerowe Zajęcia 1 Code::Blocks - tworzenie projektu Create New Project Console Application -> C++ Wybierz nazwę projektu Stworzy się nowy projekt z wpisaną funkcją main Wpisz swój program

Bardziej szczegółowo

1. Operacje logiczne A B A OR B

1. Operacje logiczne A B A OR B 1. Operacje logiczne OR Operacje logiczne są operacjami działającymi na poszczególnych bitach, dzięki czemu można je całkowicie opisać przedstawiając jak oddziałują ze sobą dwa bity. Takie operacje logiczne

Bardziej szczegółowo

Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1

Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1 Podstawy programowania. Wykład Funkcje Krzysztof Banaś Podstawy programowania 1 Programowanie proceduralne Pojęcie procedury (funkcji) programowanie proceduralne realizacja określonego zadania specyfikacja

Bardziej szczegółowo

Projekt 4: Programowanie w logice

Projekt 4: Programowanie w logice Języki Programowania Projekt 4: Programowanie w logice Środowisko ECL i PS e W projekcie wykorzystane będzie środowisko ECL i PS e. Dostępne jest ono pod adresem http://eclipseclp.org/. Po zainstalowaniu

Bardziej szczegółowo

do instrukcja while (wyrażenie);

do instrukcja while (wyrażenie); Instrukcje pętli -ćwiczenia Instrukcja while Pętla while (póki) powoduje powtarzanie zawartej w niej sekwencji instrukcji tak długo, jak długo zaczynające pętlę wyrażenie pozostaje prawdziwe. while ( wyrażenie

Bardziej szczegółowo

12.Rozwiązywanie równań i nierówności liniowych oraz ich układów.

12.Rozwiązywanie równań i nierówności liniowych oraz ich układów. matematyka /.Rozwiązywanie równań i nierówności liniowych oraz ich układów. I. Przypomnij sobie:. Co to jest równanie /nierówność? Rodzaje nierówności. Ogólnie: Równaniem nazywamy dwa wyrażenia algebraiczne

Bardziej szczegółowo

Operatory AND, OR, NOT, XOR Opracował: Andrzej Nowak Bibliografia:

Operatory AND, OR, NOT, XOR Opracował: Andrzej Nowak Bibliografia: Operatory logiczne Komputery i ich logika AND - && Podstawy programowania w C++ Operatory AND, OR, NOT, XOR Opracował: Andrzej Nowak Bibliografia: CPA: PROGRAMMING ESSENTIALS IN C++ https://www.netacad.com

Bardziej szczegółowo

Podstawy programowania. Wykład: 4. Instrukcje sterujące, operatory. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

Podstawy programowania. Wykład: 4. Instrukcje sterujące, operatory. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD programowania Wykład: 4 Instrukcje sterujące, operatory 1 programowania w C++ Instrukcje sterujące 2 Pętla for for ( instrukcja_ini ; wyrazenie_warunkowe ; instrukcja_krok ) tresc_petli ; instrukcja_ini

Bardziej szczegółowo

Definicje. Algorytm to:

Definicje. Algorytm to: Algorytmy Definicje Algorytm to: skończony ciąg operacji na obiektach, ze ściśle ustalonym porządkiem wykonania, dający możliwość realizacji zadania określonej klasy pewien ciąg czynności, który prowadzi

Bardziej szczegółowo

Programowanie. programowania. Klasa 3 Lekcja 9 PASCAL & C++

Programowanie. programowania. Klasa 3 Lekcja 9 PASCAL & C++ Programowanie Wstęp p do programowania Klasa 3 Lekcja 9 PASCAL & C++ Język programowania Do przedstawiania algorytmów w postaci programów służą języki programowania. Tylko algorytm zapisany w postaci programu

Bardziej szczegółowo

Informatyka I. Typy danych. Operacje arytmetyczne. Konwersje typów. Zmienne. Wczytywanie danych z klawiatury. dr hab. inż. Andrzej Czerepicki

Informatyka I. Typy danych. Operacje arytmetyczne. Konwersje typów. Zmienne. Wczytywanie danych z klawiatury. dr hab. inż. Andrzej Czerepicki Informatyka I Typy danych. Operacje arytmetyczne. Konwersje typów. Zmienne. Wczytywanie danych z klawiatury. dr hab. inż. Andrzej Czerepicki Politechnika Warszawska Wydział Transportu 2019 1 Plan wykładu

Bardziej szczegółowo

Wykład 11a. Składnia języka Klasycznego Rachunku Predykatów. Języki pierwszego rzędu.

Wykład 11a. Składnia języka Klasycznego Rachunku Predykatów. Języki pierwszego rzędu. Andrzej Wiśniewski Logika I Materiały do wykładu dla studentów kognitywistyki Wykład 11a. Składnia języka Klasycznego Rachunku Predykatów. Języki pierwszego rzędu. 1 Logika Klasyczna obejmuje dwie teorie:

Bardziej szczegółowo

Zadanie 1. Potęgi (14 pkt)

Zadanie 1. Potęgi (14 pkt) 2 Egzamin maturalny z informatyki Zadanie 1. otęgi (14 pkt) W poniższej tabelce podane są wartości kolejnych potęg liczby 2: k 0 1 2 3 4 5 6 7 8 9 10 2 k 1 2 4 8 16 32 64 128 256 512 1024 Ciąg a=(a 0,

Bardziej szczegółowo

Samodzielnie wykonaj następujące operacje: 13 / 2 = 30 / 5 = 73 / 15 = 15 / 23 = 13 % 2 = 30 % 5 = 73 % 15 = 15 % 23 =

Samodzielnie wykonaj następujące operacje: 13 / 2 = 30 / 5 = 73 / 15 = 15 / 23 = 13 % 2 = 30 % 5 = 73 % 15 = 15 % 23 = Systemy liczbowe Dla każdej liczby naturalnej x Î N oraz liczby naturalnej p >= 2 istnieją jednoznacznie wyznaczone: liczba n Î N oraz ciąg cyfr c 0, c 1,..., c n-1 (gdzie ck Î {0, 1,..., p - 1}) taki,

Bardziej szczegółowo

Podstawy Programowania

Podstawy Programowania Podstawy Programowania Monika Wrzosek Instytut Matematyki Uniwersytet Gdański Matematyka 2017/18 Monika Wrzosek (IM UG) Podstawy Programowania 1 / 119 Sprawy organizacyjne E-mail: mwrzosek@mat.ug.edu.pl

Bardziej szczegółowo

wagi cyfry 7 5 8 2 pozycje 3 2 1 0

wagi cyfry 7 5 8 2 pozycje 3 2 1 0 Wartość liczby pozycyjnej System dziesiętny W rozdziale opiszemy pozycyjne systemy liczbowe. Wiedza ta znakomicie ułatwi nam zrozumienie sposobu przechowywania liczb w pamięci komputerów. Na pierwszy ogień

Bardziej szczegółowo

Niezwykłe tablice Poznane typy danych pozwalają przechowywać pojedyncze liczby. Dzięki tablicom zgromadzimy wiele wartości w jednym miejscu.

Niezwykłe tablice Poznane typy danych pozwalają przechowywać pojedyncze liczby. Dzięki tablicom zgromadzimy wiele wartości w jednym miejscu. Część XIX C++ w Każda poznana do tej pory zmienna może przechowywać jedną liczbę. Jeśli zaczniemy pisać bardziej rozbudowane programy, okaże się to niewystarczające. Warto więc poznać zmienne, które mogą

Bardziej szczegółowo

Informacja o języku. Osadzanie skryptów. Instrukcje, komentarze, zmienne, typy, stałe. Operatory. Struktury kontrolne. Tablice.

Informacja o języku. Osadzanie skryptów. Instrukcje, komentarze, zmienne, typy, stałe. Operatory. Struktury kontrolne. Tablice. Informacja o języku. Osadzanie skryptów. Instrukcje, komentarze, zmienne, typy, stałe. Operatory. Struktury kontrolne. Tablice. Język PHP Język interpretowalny, a nie kompilowany Powstał w celu programowania

Bardziej szczegółowo

Podstawowe operacje arytmetyczne i logiczne dla liczb binarnych

Podstawowe operacje arytmetyczne i logiczne dla liczb binarnych 1 Podstawowe operacje arytmetyczne i logiczne dla liczb binarnych 1. Podstawowe operacje logiczne dla cyfr binarnych Jeśli cyfry 0 i 1 potraktujemy tak, jak wartości logiczne fałsz i prawda, to działanie

Bardziej szczegółowo

Arytmetyka komputera. Na podstawie podręcznika Urządzenia techniki komputerowej Tomasza Marciniuka. Opracował: Kamil Kowalski klasa III TI

Arytmetyka komputera. Na podstawie podręcznika Urządzenia techniki komputerowej Tomasza Marciniuka. Opracował: Kamil Kowalski klasa III TI Arytmetyka komputera Na podstawie podręcznika Urządzenia techniki komputerowej Tomasza Marciniuka Opracował: Kamil Kowalski klasa III TI Spis treści 1. Jednostki informacyjne 2. Systemy liczbowe 2.1. System

Bardziej szczegółowo

Kurs ZDAJ MATURĘ Z MATEMATYKI MODUŁ 2 Teoria liczby rzeczywiste cz.2

Kurs ZDAJ MATURĘ Z MATEMATYKI MODUŁ 2 Teoria liczby rzeczywiste cz.2 1 POTĘGI Definicja potęgi ł ę ę > a 0 = 1 (każda liczba różna od zera, podniesiona do potęgi 0 daje zawsze 1) a 1 = a (każda liczba podniesiona do potęgi 1 dają tą samą liczbę) 1. Jeśli wykładnik jest

Bardziej szczegółowo

Programowanie w logice

Programowanie w logice Programowanie w logice PROLOG cz.3 Predykat sprawdzający, czy podana lista stanowi początek innej listy: poczatek([],[_ _]). poczatek([h1 T1], [H2 T2]) :- H1 = H2, poczatek(t1,t2). ------------------------------------------------------------------------

Bardziej szczegółowo

Wstęp do Informatyki zadania ze złożoności obliczeniowej z rozwiązaniami

Wstęp do Informatyki zadania ze złożoności obliczeniowej z rozwiązaniami Wstęp do Informatyki zadania ze złożoności obliczeniowej z rozwiązaniami Przykład 1. Napisz program, który dla podanej liczby n wypisze jej rozkład na czynniki pierwsze. Oblicz asymptotyczną złożoność

Bardziej szczegółowo

Programowanie w Logice Struktury danych (Lista 2)

Programowanie w Logice Struktury danych (Lista 2) Programowanie w Logice Struktury danych (Lista 2) Przemysław Kobylański Wstęp Struktury danych wyraża się w Prologu w postaci termów, tj. symbolicznych wyrażeń. Dotychczas poznaliśmy proste termy takie

Bardziej szczegółowo

Wstęp do programowania. Drzewa podstawowe techniki. Piotr Chrząstowski-Wachtel

Wstęp do programowania. Drzewa podstawowe techniki. Piotr Chrząstowski-Wachtel Wstęp do programowania Drzewa podstawowe techniki Piotr Chrząstowski-Wachtel Drzewa wyszukiwań Drzewa często służą do przechowywania informacji. Jeśli uda sie nam stworzyć drzewo o niewielkiej wysokości

Bardziej szczegółowo

Nazwa implementacji: Nauka języka Python wyrażenia warunkowe. Autor: Piotr Fiorek. Opis implementacji: Poznanie wyrażeń warunkowych if elif - else.

Nazwa implementacji: Nauka języka Python wyrażenia warunkowe. Autor: Piotr Fiorek. Opis implementacji: Poznanie wyrażeń warunkowych if elif - else. Nazwa implementacji: Nauka języka Python wyrażenia warunkowe Autor: Piotr Fiorek Opis implementacji: Poznanie wyrażeń warunkowych if elif - else. Nasz kalkulator umie już liczyć, ale potrafi przeprowadzać

Bardziej szczegółowo

1 Podstawy c++ w pigułce.

1 Podstawy c++ w pigułce. 1 Podstawy c++ w pigułce. 1.1 Struktura dokumentu. Kod programu c++ jest zwykłym tekstem napisanym w dowolnym edytorze. Plikowi takiemu nadaje się zwykle rozszerzenie.cpp i kompiluje za pomocą kompilatora,

Bardziej szczegółowo

Programowanie w Baltie klasa VII

Programowanie w Baltie klasa VII Programowanie w Baltie klasa VII Zadania z podręcznika strona 127 i 128 Zadanie 1/127 Zadanie 2/127 Zadanie 3/127 Zadanie 4/127 Zadanie 5/127 Zadanie 6/127 Ten sposób pisania programu nie ma sensu!!!.

Bardziej szczegółowo

WHILE (wyrażenie) instrukcja;

WHILE (wyrażenie) instrukcja; INSTRUKCJE ITERACYJNE WHILE, DO WHILE, FOR Instrukcje iteracyjne pozwalają powtarzać daną instrukcję programu określoną liczbę razy lub do momentu osiągnięcia określonego skutku. Pętla iteracyjna while

Bardziej szczegółowo

3. Macierze i Układy Równań Liniowych

3. Macierze i Układy Równań Liniowych 3. Macierze i Układy Równań Liniowych Rozważamy równanie macierzowe z końcówki ostatniego wykładu ( ) 3 1 X = 4 1 ( ) 2 5 Podstawiając X = ( ) x y i wymnażając, otrzymujemy układ 2 równań liniowych 3x

Bardziej szczegółowo

Nazwa implementacji: Nauka języka Python pętla for. Autor: Piotr Fiorek

Nazwa implementacji: Nauka języka Python pętla for. Autor: Piotr Fiorek Nazwa implementacji: Nauka języka Python pętla for Autor: Piotr Fiorek Opis implementacji: Poznanie innego rodzaju pętli, jaką jest pętla for w języku Python. Składnia pętli for jest następująca: for

Bardziej szczegółowo

Schematy blokowe I. 1. Dostępne bloki: 2. Prosty program drukujący tekst.

Schematy blokowe I. 1. Dostępne bloki: 2. Prosty program drukujący tekst. Schematy blokowe I Jeżeli po schematach blokowych będzie używany język C, to należy używać operatorów: '&&', ' ', '!=', '%' natomiast jeśli Ruby to 'and', 'or', '%', '!='. 1. Dostępne bloki: a) początek:

Bardziej szczegółowo

METODY KOMPUTEROWE W OBLICZENIACH INŻYNIERSKICH

METODY KOMPUTEROWE W OBLICZENIACH INŻYNIERSKICH METODY KOMPUTEROWE W OBLICZENIACH INŻYNIERSKICH ĆWICZENIE NR 9 WYRAŻENIA LOGICZNE, INSTRUKCJE WARUNKOWE I INSTRUKCJE ITERACYJNE W PROGRAMIE KOMPUTEROWYM MATLAB Dr inż. Sergiusz Sienkowski ĆWICZENIE NR

Bardziej szczegółowo

Elżbieta Kula - wprowadzenie do Turbo Pascala i algorytmiki

Elżbieta Kula - wprowadzenie do Turbo Pascala i algorytmiki Elżbieta Kula - wprowadzenie do Turbo Pascala i algorytmiki Turbo Pascal jest językiem wysokiego poziomu, czyli nie jest rozumiany bezpośrednio dla komputera, ale jednocześnie jest wygodny dla programisty,

Bardziej szczegółowo

Laboratorium Wstawianie skryptu na stroną: 2. Komentarze: 3. Deklaracja zmiennych

Laboratorium Wstawianie skryptu na stroną: 2. Komentarze: 3. Deklaracja zmiennych 1. Wstawianie skryptu na stroną: Laboratorium 1 Do umieszczenia skryptów na stronie służy znacznik: //dla HTML5 ...instrukcje skryptu //dla HTML4 ...instrukcje

Bardziej szczegółowo

Wstęp do informatyki- wykład 2

Wstęp do informatyki- wykład 2 MATEMATYKA 1 Wstęp do informatyki- wykład 2 Systemy liczbowe Treści prezentowane w wykładzie zostały oparte o: S. Prata, Język C++. Szkoła programowania. Wydanie VI, Helion, 2012 www.cplusplus.com Jerzy

Bardziej szczegółowo

JAVAScript w dokumentach HTML - przypomnienie

JAVAScript w dokumentach HTML - przypomnienie Programowanie obiektowe ćw.1 JAVAScript w dokumentach HTML - przypomnienie JavaScript jest to interpretowany, zorientowany obiektowo, skryptowy język programowania. Skrypty JavaScript są zagnieżdżane w

Bardziej szczegółowo

Języki programowania zasady ich tworzenia

Języki programowania zasady ich tworzenia Strona 1 z 18 Języki programowania zasady ich tworzenia Definicja 5 Językami formalnymi nazywamy każdy system, w którym stosując dobrze określone reguły należące do ustalonego zbioru, możemy uzyskać wszystkie

Bardziej szczegółowo

WYRAŻENIA ALGEBRAICZNE

WYRAŻENIA ALGEBRAICZNE WYRAŻENIA ALGEBRAICZNE Wyrażeniem algebraicznym nazywamy wyrażenie zbudowane z liczb, liter, nawiasów oraz znaków działań, na przykład: Symbole literowe występujące w wyrażeniu algebraicznym nazywamy zmiennymi.

Bardziej szczegółowo

Metody numeryczne Laboratorium 2

Metody numeryczne Laboratorium 2 Metody numeryczne Laboratorium 2 1. Tworzenie i uruchamianie skryptów Środowisko MATLAB/GNU Octave daje nam możliwość tworzenia skryptów czyli zapisywania grup poleceń czy funkcji w osobnym pliku i uruchamiania

Bardziej szczegółowo

Temat 1: Podstawowe pojęcia: program, kompilacja, kod

Temat 1: Podstawowe pojęcia: program, kompilacja, kod Temat 1: Podstawowe pojęcia: program, kompilacja, kod wynikowy. Przykłady najprostszych programów. Definiowanie zmiennych. Typy proste. Operatory: arytmetyczne, przypisania, inkrementacji, dekrementacji,

Bardziej szczegółowo

Celem ćwiczenia jest zapoznanie się z podstawowymi możliwościami języka Prolog w zakresie definiowania faktów i reguł oraz wykonywania zapytań.

Celem ćwiczenia jest zapoznanie się z podstawowymi możliwościami języka Prolog w zakresie definiowania faktów i reguł oraz wykonywania zapytań. Paradygmaty Programowania Język Prolog Celem ćwiczenia jest zapoznanie się z podstawowymi możliwościami języka Prolog w zakresie definiowania faktów i reguł oraz wykonywania zapytań. Wstęp Prolog (od francuskiego

Bardziej szczegółowo

Pliki. Operacje na plikach w Pascalu

Pliki. Operacje na plikach w Pascalu Pliki. Operacje na plikach w Pascalu ścieżka zapisu, pliki elementowe, tekstowe, operacja plikowa, etapy, assign, zmienna plikowa, skojarzenie, tryby otwarcia, reset, rewrite, append, read, write, buforowanie

Bardziej szczegółowo

PoniŜej znajdują się pytania z egzaminów zawodowych teoretycznych. Jest to materiał poglądowy.

PoniŜej znajdują się pytania z egzaminów zawodowych teoretycznych. Jest to materiał poglądowy. PoniŜej znajdują się pytania z egzaminów zawodowych teoretycznych. Jest to materiał poglądowy. 1. Instrukcję case t of... w przedstawionym fragmencie programu moŝna zastąpić: var t : integer; write( Podaj

Bardziej szczegółowo

Lista 0. Kamil Matuszewski 1 marca 2016

Lista 0. Kamil Matuszewski 1 marca 2016 Lista 0 Kamil Matuszewski marca 206 2 3 4 5 6 7 8 0 0 Zadanie 4 Udowodnić poprawność mnożenia po rosyjsku Zastanówmy się co robi nasz algorytm Mamy podane liczby n i m W każdym kroku liczbę n dzielimy

Bardziej szczegółowo

B.B. 2. Sumowanie rozpoczynamy od ostatniej kolumny. Sumujemy cyfry w kolumnie zgodnie z podaną tabelką zapisując wynik pod kreską:

B.B. 2. Sumowanie rozpoczynamy od ostatniej kolumny. Sumujemy cyfry w kolumnie zgodnie z podaną tabelką zapisując wynik pod kreską: Dodawanie dwójkowe Do wykonywania dodawania niezbędna jest znajomość tabliczki dodawania, czyli wyników sumowania każdej cyfry z każdą inną. W systemie binarnym mamy tylko dwie cyfry 0 i 1, zatem tabliczka

Bardziej szczegółowo

Wstęp do programowania. Różne różności

Wstęp do programowania. Różne różności Wstęp do programowania Różne różności Typy danych Typ danych określa dwie rzeczy: Jak wartości danego typu są określane w pamięci Jakie operacje są dozwolone na obiektach danego typu 2 Rodzaje typów Proste

Bardziej szczegółowo

Kod U2 Opracował: Andrzej Nowak

Kod U2 Opracował: Andrzej Nowak PODSTAWY TEORII UKŁADÓW CYFROWYCH Kod U2 Opracował: Andrzej Nowak Bibliografia: Urządzenia techniki komputerowej, K. Wojtuszkiewicz http://pl.wikipedia.org/ System zapisu liczb ze znakiem opisany w poprzednim

Bardziej szczegółowo

Powtórka algorytmów. Wprowadzenie do języka Java.

Powtórka algorytmów. Wprowadzenie do języka Java. Powtórka algorytmów. Wprowadzenie do języka Java. BEGIN Readln(a); Readln(b); Suma := 0; IF Suma < 10 THEN Writeln( Suma wynosi:, Suma); ELSE Writeln( Suma większa niż 10! ) END. 1. Narysować schemat blokowy

Bardziej szczegółowo

Wstęp do programowania INP003203L rok akademicki 2018/19 semestr zimowy. Laboratorium 2. Karol Tarnowski A-1 p.

Wstęp do programowania INP003203L rok akademicki 2018/19 semestr zimowy. Laboratorium 2. Karol Tarnowski A-1 p. Wstęp do programowania INP003203L rok akademicki 2018/19 semestr zimowy Laboratorium 2 Karol Tarnowski karol.tarnowski@pwr.edu.pl A-1 p. 411B Plan prezentacji Komentarze Funkcja printf() Zmienne Łańcuchy

Bardziej szczegółowo

Myśl w języku Python! : nauka programowania / Allen B. Downey. Gliwice, cop Spis treści

Myśl w języku Python! : nauka programowania / Allen B. Downey. Gliwice, cop Spis treści Myśl w języku Python! : nauka programowania / Allen B. Downey. Gliwice, cop. 2017 Spis treści Przedmowa 11 1. Jak w programie 21 Czym jest program? 21 Uruchamianie interpretera języka Python 22 Pierwszy

Bardziej szczegółowo

Programowanie w języku Python. Grażyna Koba

Programowanie w języku Python. Grażyna Koba Programowanie w języku Python Grażyna Koba Kilka definicji Program komputerowy to ciąg instrukcji języka programowania, realizujący dany algorytm. Język programowania to zbiór określonych instrukcji i

Bardziej szczegółowo

Operacje wykonywane są na operandach (argumentach operatorów). Przy operacji dodawania: argumentami operatora dodawania + są dwa operandy 2 i 5.

Operacje wykonywane są na operandach (argumentach operatorów). Przy operacji dodawania: argumentami operatora dodawania + są dwa operandy 2 i 5. Operatory w Javie W Javie występują następujące typy operatorów: Arytmetyczne. Inkrementacji/Dekrementacji Przypisania. Porównania. Bitowe. Logiczne. Pozostałe. Operacje wykonywane są na operandach (argumentach

Bardziej szczegółowo

W dowolnym momencie można zmienić typ wskaźnika.

W dowolnym momencie można zmienić typ wskaźnika. c++ Wskaźniki mają jeszcze jedną przydatną cechę. W dowolnym momencie można zmienić typ wskaźnika. Robi się to za pomocą operatora rzutowania. Najpierw zdefiniujemy sobie wsk_uniwersalny mogący pokazywać

Bardziej szczegółowo

Obiekt klasy jest definiowany poprzez jej składniki. Składnikami są różne zmienne oraz funkcje. Składniki opisują rzeczywisty stan obiektu.

Obiekt klasy jest definiowany poprzez jej składniki. Składnikami są różne zmienne oraz funkcje. Składniki opisują rzeczywisty stan obiektu. Zrozumienie funkcji danych statycznych jest podstawą programowania obiektowego. W niniejszym artykule opiszę zasadę tworzenia klas statycznych w C#. Oprócz tego dowiesz się czym są statyczne pola i metody

Bardziej szczegółowo

Podstawy programowania. 1. Operacje arytmetyczne Operacja arytmetyczna jest opisywana za pomocą znaku operacji i jednego lub dwóch wyrażeń.

Podstawy programowania. 1. Operacje arytmetyczne Operacja arytmetyczna jest opisywana za pomocą znaku operacji i jednego lub dwóch wyrażeń. Podstawy programowania Programowanie wyrażeń 1. Operacje arytmetyczne Operacja arytmetyczna jest opisywana za pomocą znaku operacji i jednego lub dwóch wyrażeń. W językach programowania są wykorzystywane

Bardziej szczegółowo

Podstawy programowania skrót z wykładów:

Podstawy programowania skrót z wykładów: Podstawy programowania skrót z wykładów: // komentarz jednowierszowy. /* */ komentarz wielowierszowy. # include dyrektywa preprocesora, załączająca biblioteki (pliki nagłówkowe). using namespace

Bardziej szczegółowo

x 2 = a RÓWNANIA KWADRATOWE 1. Wprowadzenie do równań kwadratowych 2. Proste równania kwadratowe Równanie kwadratowe typu:

x 2 = a RÓWNANIA KWADRATOWE 1. Wprowadzenie do równań kwadratowych 2. Proste równania kwadratowe Równanie kwadratowe typu: RÓWNANIA KWADRATOWE 1. Wprowadzenie do równań kwadratowych Przed rozpoczęciem nauki o równaniach kwadratowych, warto dobrze opanować rozwiązywanie zwykłych równań liniowych. W równaniach liniowych niewiadoma

Bardziej szczegółowo

Bash - wprowadzenie. Bash - wprowadzenie 1/39

Bash - wprowadzenie. Bash - wprowadzenie 1/39 Bash - wprowadzenie Bash - wprowadzenie 1/39 Bash - wprowadzenie 2/39 Czym jest bash? Rysunek : Zadanie powłoki to ukrycie wywołań systemowych Bash - wprowadzenie 3/39 Czym jest bash? Przykład polecenia:

Bardziej szczegółowo

Zapisywanie algorytmów w języku programowania

Zapisywanie algorytmów w języku programowania Temat C5 Zapisywanie algorytmów w języku programowania Cele edukacyjne Zrozumienie, na czym polega programowanie. Poznanie sposobu zapisu algorytmu w postaci programu komputerowego. Zrozumienie, na czym

Bardziej szczegółowo