Programowanie. Lista zadań nr 15. Na ćwiczenia 11, 19 i 23 czerwca 2008
|
|
- Magda Krzemińska
- 8 lat temu
- Przeglądów:
Transkrypt
1 Programowanie Lista zadań nr 15 Na ćwiczenia 11, 19 i 23 czerwca 2008 Zadanie 1. Pokaż, że w systemie z polimorfizmem parametrycznym można napisać program P n rozmiaru O(n), którego typ ma rozmiar 2 2Ω(n). Pokaż, że typ wyrażenia rozmiaru n w systemie z polimorfizmem parametrycznym ma rozmiar 2 2O(n). Zadanie 2. Wyznacz typ główny σ i napisz dowód sądu typowego w polimorficznym systemie typów Damasa-Milnera: let f = λx.x in ff end : σ Zadanie 3. Rozważmy system, w którym konstrukcja α.σ nie jest schematem typu, lecz zwykłym typem, tj. język, którego abstrakcyjna składnia jest następująca: e ::= x e 1 e 2 λx.e σ ::= α σ 1 σ 2 α.σ i w którym przyjęto następujące reguły typowania: Γ, x : σ x : σ Γ e : σ Γ e : α.σ α FV(Γ) Γ e 1 : σ τ Γ e 2 : σ Γ e 1 e 2 : τ Γ e : α.σ Γ e : σ[α/τ] Γ, x : σ e : τ Γ λx.e : σ τ Jest to tak zwany rachunek typów drugiego rzędu lub system F. Pokaż, że w tym systemie wyrażenie λx.xx posiada typ, podczas gdy w języku z tzw. płytkim polimorfizmem, tj. w systemie Damasa-Milnera nie. Wskaż przykład termu, który nie posiada typu w nowym systemie. Pokaż, że każdy term, który posiada typ w prostym systemie typów posiada go i w nowym. Pokaż, że jeżeli do składni wyrażeń dodać let i przyjąć w systemie F tłumaczenie Landina, to każdy let-term typowalny w ML-u ma też typ w systemie F z tłumaczeniem Landina (zatem let jest jedynie cukrem syntaktycznym w monomorficznym systemie typów i w systemie F, lecz ma kluczowe znaczenie dla polimorfizmu w ML-u). 1
2 Zadanie 4. Rozważmy system z poprzedniego zadania. Zauważ, że istnieją dokładnie dwa zamknięte termy typu α.α α α. Typ ten może więc służyć do zakodowania typu bool. Zdefiniuj wartości true i false oraz komplet operacji logicznych. Zauważ, że wszystkie dają się wyrazić przy pomocy operatora if i że operator ten jest kodowany przez wyrażenie λx.x (to nie przypadek). Pamiętając o liczebnikach Churcha zauważ dalej, że α.(α α) (α α) może reperezentować typ nat. Pokaż, że dowolny zamknięty term jest typu α.(α α) (α α), wtedy i tylko wtedy, gdy jest liczebnikiem Churcha. Zdefiniuj podstawowe operacje arytmetyczne. Zauważ, że wszystkie dają się wyrazić przy pomocy iteratora iter, takiego, że iter n f c = f n (c). Zauważ, że iter jest kodowany przez wyrażenie λx.x (to nie przypadek). Zauważ dalej, że typ list(β) α.(β α α) (α α) koduje listy typu β. Zdefiniuj konstruktory i operacje działające na listach. Zauważ, że dają się one wyrazić przy pomocy iteratora foldr i że foldr jest kodowany przez wyrażenie λx.x (to nie przypadek). Wywnioskuj z tych rozważań, że system F może służyć do zadania semantyki typów danych, takich, jak listy, krotki, liczby itp. Zakoduj kilka innych typów danych (unit, void, drzewa binarne itp.). Zadanie 5. Pokaż, że polimorfizm parametryczny kłóci się ze skutkami ubocznymi. Rozważmy język t ::= x t 1 t 2 λx.t let x = t 1 in t 2 n t 1 + t 2 True False ref t t 1 := t 2! t τ ::= α τ 1 τ 2 Int Bool Ref τ σ ::= α.τ z regułami typowania Γ, x : α.τ x : τ[ α/ τ ] Γ t : τ 1 τ 2 Γ s : τ 2 Γ ts : τ 2 Γ, x : τ 1 t : τ 2 Γ λx.t : τ 1 τ 2 Γ t 1 : τ 1 Γ, x : α.τ 1 t 2 : τ 2 let x = t 1 in t 2 : τ 2 α = FV(τ 1 ) \ FV(Γ) Γ n : Int Γ t 1 : Int Γ t 2 : Int Γ t 1 + t 2 : Int Γ True : Bool Γ False : Bool Γ t : τ Γ ref t : Ref τ Γ t 1 : Ref τ Γ t 2 : τ Γ t 1 := t 2 : τ Γ t : Ref α Γ! t : α Operator ref alokuje pamięć dla nowej zmiennej i inicjuje ją podaną wartością, := jest operatorem przypisania, a! dereferencji. Np. program let x = ref 1 in x := 2 alokuje pamięć dla komórki przechowującej dane typu Int, związuje adres tej komórki ze zmienną x typu Ref Int, inicjuje tę komórkę wartością 1, a następnie przypisuje jej wartość 2. Pokaż, że powyższy system jest sprzeczny i pozwala napisać program, który dodaje 1 do True. Wykorzystaj ten trik do zdefiniowania funkcji cast : α β. 2
3 Komentarz: Istnieje wiele rozwiązań tego problemu, żadne jednak nie jest eleganckie. Konserwatywne rozszerzenie systemu Damasa-Milnera wymaga wprowadzenia dodatkowych zmiennych typowych (tzw. słabych typów) i mało intuicyjnych reguł typowania. Prostsze rozwiązanie (Andrew Wrighta) uszkadza system typów tak, że przestaje być dla niego słuszne twierdzenie o subject reduction dla reguły η. W Haskellu problem znika, bo nie ma skutków ubocznych (choć pojawia się dla funkcji unsafeperformio i nie jest dla niej w żaden sposób rozwiązany funkcja ta pozwala zdefiniować funkcję cast : α β). Zadanie 6. Pokaż, że w języku z poprzedniego zadania można przywrócić niesprzeczność jeśli wprowadzimy nowy rodzaj zmiennych, nazwijmy je słabymi i oznaczmy ich zbiór przez W. Zmienne te nie mogą wystąpić w schemacie typu po kwantyfikatorze, tj. nie wolno ich generalizować w regule let nawet, jeśli nie występują w Γ. Warunek w regule let ma więc postać α = FV(τ 1 ) \ (FV(Γ) X ). Przyjmij, że typy mają teraz postać (Weak α 1,..., Weak α n ) τ w której prefiks wskazuje, które zmienne są słabe. Zadanie 7. Zauważ, że rekonstrukcja typów z polimorfizmem parametrycznym kłóci się z przeciążaniem operatorów pokaż że w następującym języku: z regułami typowania t ::= x t 1 t 2 λx.t let x = t 1 in t 2 n r t 1 + t 2 τ ::= α τ 1 τ 2 Int Float σ ::= α.τ Γ, x : α.τ x : τ[ α/ τ ] Γ t : τ 1 τ 2 Γ s : τ 2 Γ ts : τ 2 Γ, x : τ 1 t : τ 2 Γ λx.t : τ 1 τ 2 Γ t 1 : τ 1 Γ, x : α.τ 1 t 2 : τ 2 let x = t 1 in t 2 : τ 2 α = FV(τ 1 ) \ FV(Γ) Γ n : Int Γ r : Float Γ t 1 : Int Γ t 2 : Int Γ t 1 + t 2 : Int Γ t 1 : Float Γ t 2 : Float Γ t 1 + t 2 : Float istnieją programy nie posiadające typu głównego. Jaki wpływ ma brak typu głównego na efektywność rekonstrukcji typów i możliwość rozdzielnej kompilacji? Zadanie 8. Pokaż, że w języku z poprzedniego zadania można przywrócić istnienie typów głównych, jeżeli wprowadzimy dodatkowy rodzaj zmiennych, nazwijmy je numerycznymi, a ich zbiór oznaczmy przez N. Pod zmienne te wolno podstawić jedynie stałe Int oraz Float. Przyjmij, że typy mają teraz postać (Num α 1,..., Num α n ) τ w której prefiks wskazuje, które zmienne są numeryczne. Zauważ, że jesteśmy o krok od wynalezienia haskellowych klas typów. 3
4 Zadanie 9. Zauważ, że algebraiczne typy danych świetnie współgrają z polimorfizmem parametrycznym deklaracja data T α = C 1 τ τ n C k τ 1 k... τ n k k dodaje po prostu do składni termów stałe C 1,..., C k i wyrażenie case pozwalające dopasowywać wyrażenia do wzorców, do typów wyrażenie typowe T τ 1... τ k, a do reguł typowania reguły Γ C i : τ 1 i... τ n i i T α Zdefiniuj składnię abstrakcyjną i napisz algorytm rekonstrukcji typów dla takiego języka. Zauważ, że musimy przyjąć następujące założenie: n i j=1 FV(τ j i ) α, inaczej system jest sprzeczny pokaż, że jeśli dopuścilibyśmy deklarację data T = C a to łatwo moglibyśmy napisać funkcję cast :: a -> b. (Tu jesteśmy o krok od wynalezienia typów egzystencjalnych). Zadanie 10. Zauważ, że rekursja polimorficzna nie jest zjawiskiem egzotycznym lecz pojawia się w całkiem naturalnych problemach. Lista o bezpośrednim dostępie, to struktura danych udostępniająca operacje: class RandomAccessList l where nil :: l a cons :: a -> l a -> l a head :: l a -> a tail :: l a -> l a lookup :: Int -> l a -> a update :: a -> Int -> l a -> l a Wszystkie operacje powinny się wykonywać w czasie logarytmicznym względem wielkości listy. Jedną z możliwych implementacji takiej listy jest data Tree a = Node (Tree a, Tree a) Leaf a type BinomialRAL a = [Tree a] przy czym elementami listy [Tree a] są pełne drzewa binarne, a ich wysokości ściśle rosną. Powyższa reprezentacja jest nadmiarowa, gdyż wiele danych typu BinomialRAL jest nielegalnych. Aby system typów wykluczył nielegalne reprezentacje, powinniśmy tak zdefiniować typ Tree, by jedynymi danymi tego typu były drzewa pełne. Możemy to zrobić np. tak: 4
5 data Tree a = Node (Tree (a,a)) Leaf a (zauważ, że zmiana polega na zamianie miejscami typów Tree i (,) w argumencie konstruktora Node). Zaprogramuj funkcje height :: Tree a -> Int size :: Tree a -> Int peek :: Int -> Int -> Tree a -> a poke :: Int -> Int -> a -> Tree a -> Tree a link :: (Tree (a,a)) -> (Tree (a,a)) -> Tree a Funkcja peek h i t ujawnia i-ty element drzewa wysokości h (elementy numerujemy od lewej do prawej poczynając od zera), funkcja poke zmienia odpowiedni element, zaś link łączy dwa drzewa w większe. Wyjaśnij w których miejscach pojawia się rekursja polimorficzna. Komentarz: możemy w Haskellu zaprogramować typ BinomialRAL tak, że każda dana tego typu jest nie tylko ciągiem pełnych drzew, ale także wysokości tych drzew są ciągiem ściśle rosnącym. Zamiast standardowego typu [] należy zdefiniować wersję list sprawdzających rozmiar drzew. Zadanie 11. Tzw. zagnieżdżone lub nieregularne typy danych są atrakcyjne o tyle, że nie wymagają rozszerzania systemu typów. Są jednak mało intuicyjne. Lepiej byłoby majstrować przy wyniku, a nie argumencie konstruktora. To prowadzi nas do tzw. uogólnionych algebraicznych typów danych. Niestety zawierają one w sobie typy egzystencjalne, więc jak widzieliśmy w zadaniu 9 musimy uważać, żeby nie załamać systemu typów. Pozwalamy, by typ wyniku konstruktora nie był dokładnie równy definiowanemu typowi, lecz mógł być jego instancją. Ten pomysł w połączeniu z typami fantomowymi (typami, które nie posiadają wartości) prowadzi do znacznie czytelniejszej implementacji pełnych drzew binarnych: data Zero data Succ n data Tree h a where Node :: Tree h a -> Tree h a -> Tree (Succ h) a Leaf :: a -> Tree Zero a Dodatkowy parametr typowy zlicza wysokość drzewa i zapewnia, że łączymy tylko drzewa tej samej wysokości. Zaprogramuj funkcje z poprzedniego zadania dla tej reprezentacji (zauważ, że np. link jest nie tylko prostsza, ale ma znacznie lepszą złożoność). Zauważ, że rekursja polimorficzna tu również jest niezbędna do rozwiązania zadania. 5
Programowanie funkcyjne Wykład 13. Siła wyrazu rachunku lambda
Programowanie funkcyjne Wykład 13. Siła wyrazu rachunku lambda Zdzisław Spławski Zdzisław Spławski: Programowanie funkcyjne, Wykład 13. Siła wyrazu rachunku lambda 1 Wstęp Wartości logiczne Liczby naturalne
Bardziej szczegółowoProgramowanie 2009 Programming 2009
Programowanie 2009 Programming 2009 Lista zadań nr 14 Problem set no. 14 Na zajęcia 9 10 czerwca 2009 Due June 10, 2009 W poniższych zadaniach rozważamy system typów z polimorfizmem parametrycznym zadany
Bardziej szczegółowoWykład 2: Rachunek lambda
Wykład 2: Rachunek lambda Systemy typów, II UWr, 2010 20 października 2010 λ-termy zmienne (Var) {x, y, z,...} nieskończony, przeliczalny zbiór zmiennych termy (Term) t ::= x λx.t t t skróty notacyjne
Bardziej szczegółowoProgramowanie funkcyjne. Wykªad 13
Programowanie funkcyjne. Wykªad 13 Siªa wyrazu rachunku lambda Zdzisªaw Spªawski Zdzisªaw Spªawski: Programowanie funkcyjne. Wykªad 13, Siªa wyrazu rachunku lambda 1 Wst p Warto±ci logiczne Liczby naturalne
Bardziej szczegółowoSzablony funkcji i szablony klas
Bogdan Kreczmer bogdan.kreczmer@pwr.wroc.pl Zakład Podstaw Cybernetyki i Robotyki Instytut Informatyki, Automatyki i Robotyki Politechnika Wrocławska Kurs: Copyright c 2011 Bogdan Kreczmer Niniejszy dokument
Bardziej szczegółowoAlgorytmy funkcjonalne i struktury danych
Algorytmy funkcjonalne i struktury danych Lista zadań nr 4 5 listopada 2009 Zadanie 1. Zaprogramuj strukturę Deque o sygnaturze signature DEQUE = sig type a Queue val empty : a Queue val isempty : a Queue
Bardziej szczegółowoProgramowanie obiektowe i C++ dla matematyków
Programowanie obiektowe i C++ dla matematyków Bartosz Szreder szreder (at) mimuw... 22 XI 2011 Uwaga! Ponieważ już sobie powiedzieliśmy np. o wskaźnikach i referencjach, przez które nie chcemy przegrzebywać
Bardziej szczegółowoP. Urzyczyn: Materia ly do wyk ladu z semantyki. Uproszczony 1 j. ezyk PCF
29 kwietnia 2013, godzina 23: 56 strona 1 P. Urzyczyn: Materia ly do wyk ladu z semantyki Uproszczony 1 j ezyk PCF Sk ladnia: Poniżej Γ oznacza otoczenie typowe, czyli zbiór deklaracji postaci (x : τ).
Bardziej szczegółowoC++ - przeciążanie operatorów. C++ - przeciążanie operatorów. C++ - przeciążanie operatorów. C++ - przeciążanie operatorów
Operatory są elementami języka C++. Istnieje zasada, że z elementami języka, takimi jak np. słowa kluczowe, nie można dokonywać żadnych zmian, przeciążeń, itp. PRZECIĄŻANIE OPERATORÓW Ale dla operatorów
Bardziej szczegółowoProgramowanie Funkcyjne. Marcin Kubica Świder,
Programowanie Funkcyjne Marcin Kubica Świder, 28-04-2015 Czym jest programowanie funkcyjne? Obliczalne pojęcia matematyczne. Definicje stałych i funkcji i relacji. Wszystkie definicje są konstruktywne,
Bardziej szczegółowoTypy, klasy typów, składnie w funkcji
Typy, klasy typów, składnie w funkcji Typy w Haskell Każde wyrażenie w Haskell posiada zdefiniowany typ. Dzięki temu już na etapie kompilacji kodu następuje sprawdzenie poprawności kodu i zabezpiecza nas
Bardziej szczegółowoTeoretyczne Podstawy Języków Programowania Wykład 4. Siła wyrazu rachunku λ
Teoretyczne Podstawy Języków Programowania Wykład 4. Siła wyrazu rachunku λ Zdzisław Spławski Zdzisław Spławski: Teoretyczne Podstawy Języków Programowania, Wykład 4. Siła wyrazu rachunku λ 1 Wstęp Wartości
Bardziej szczegółowoPoprawność semantyczna
Poprawność składniowa Poprawność semantyczna Poprawność algorytmu Wypisywanie zdań z języka poprawnych składniowo Poprawne wartościowanie zdań języka, np. w języku programowania skutki wystąpienia wyróżnionych
Bardziej szczegółowoJę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ółowoPodstawy Programowania C++
Wykład 3 - podstawowe konstrukcje Instytut Automatyki i Robotyki Warszawa, 2014 Wstęp Plan wykładu Struktura programu, instrukcja przypisania, podstawowe typy danych, zapis i odczyt danych, wyrażenia:
Bardziej szczegółowoJęzyk programowania zbiór reguł określających, które ciągi symboli tworzą program komputerowy oraz jakie obliczenia opisuje ten program.
PYTHON Język programowania zbiór reguł określających, które ciągi symboli tworzą program komputerowy oraz jakie obliczenia opisuje ten program. Aby program napisany w danym języku mógł być wykonany, niezbędne
Bardziej szczegółowoParadygmaty programowania
Paradygmaty programowania Jacek Michałowski, Piotr Latanowicz 15 kwietnia 2014 Jacek Michałowski, Piotr Latanowicz () Paradygmaty programowania 15 kwietnia 2014 1 / 12 Zadanie 1 Zadanie 1 Rachunek predykatów
Bardziej szczegółowoKLASA UCZEN Uczen imię, nazwisko, średnia konstruktor konstruktor Ustaw Wyswietl Lepszy Promowany
KLASA UCZEN Napisz deklarację klasy Uczen, w której przechowujemy następujące informacje o uczniu: imię, nazwisko, średnia (pola prywatne), poza tym klasa zawiera metody: konstruktor bezparametrowy (nie
Bardziej szczegółowoObiektowy Caml. Paweł Boguszewski
Obiektowy Caml Paweł Boguszewski Plan prezentacji Charakterystyka języka Składnia Obiektowość w OCamlu Wyjątki Standardowe Moduły Narzędzia wspomagające Bibliografia OCaml OCaml jest obiektowym, funkcyjnym
Bardziej szczegółowojava.util.* :Kolekcje Tomasz Borzyszkowski
java.util.* :Kolekcje Tomasz Borzyszkowski Wstęp Kolekcje w Java dają programiście pewien standardowy sposób radzenia sobie z przetwarzaniem grup obiektów. Implementacja kolekcji w Java składa się z następujących
Bardziej szczegółowoPrzeciążenie operatorów
Przeciążenie operatorów W C++ można przeciążyć większość operatory tak, żeby wykonywali zadania, charakterystyczne dla danej klasy Po przeciążeniu odpowiednich operatorów można posługiwać się obiektami
Bardziej szczegółowoSwift (pol. jerzyk) nowy język programowania zaprezentowany latem 2014 r. (prace od 2010 r.)
Swift (pol. jerzyk) nowy język programowania zaprezentowany latem 2014 r. (prace od 2010 r.) przeznaczony do programowania zarówno pod ios jak i Mac OS X bazuje na logice Objective-C bez kompatybilności
Bardziej szczegółowoWykład 3 Składnia języka C# (cz. 2)
Wizualne systemy programowania Wykład 3 Składnia języka C# (cz. 2) 1 dr Artur Bartoszewski -Wizualne systemy programowania, sem. III- WYKŁAD Wizualne systemy programowania Metody 2 Metody W C# nie jest
Bardziej szczegółowoJęzyk programowania Scala / Grzegorz Balcerek. Wyd. 2. Poznań, cop Spis treści
Język programowania Scala / Grzegorz Balcerek. Wyd. 2. Poznań, cop. 2016 Spis treści Przedmowa 1 Stosowana notacja 1 1. Wprowadzenie 3 1.1. Konsola interaktywna języka Scala 3 1.2. Zmienne 5 1.3. Wartości
Bardziej szczegółowoKOTLIN. Język programowania dla Androida
KOTLIN Język programowania dla Androida Historia Kotlin został opracowany przez firmę JetBrains Prace rozpoczęto w 2011 r., od 2012 r. dostępny na licencji Apache 2. Nazwa pochodzi od wyspy koło Petersburga
Bardziej szczegółowoPodstawy 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ółowoKLASA UCZEN Uczen imię, nazwisko, średnia konstruktor konstruktor Ustaw Wyswietl Lepszy Promowany
KLASA UCZEN Napisz deklarację klasy Uczen, w której przechowujemy następujące informacje o uczniu: imię, nazwisko, średnia (pola prywatne), poza tym klasa zawiera metody: konstruktor bezparametrowy (nie
Bardziej szczegółowoProgramowanie obiektowe
Programowanie obiektowe Język programowania Ruby Marcin Młotkowski 12 kwietnia 2018 Plan wykładu 1 Wstęp 2 Typy numeryczne Łańcuchy znaków (klasa String) Przedziały Tablice i tablice asocjacyjne Nazwy
Bardziej szczegółowoSkładnia funkcji i Rekurencja w języku Haskell
Składnia funkcji i w języku Haskell Tomasz Ostrowski, Adrian Niechciał, Michał Workiewicz, Marcin Wilk 26 marca 2015 Składnia funkcji i w języku Haskell Spis treści Składnia funkcji Tomasz Ostrowski Adrian
Bardziej szczegółowoMetody Kompilacji Wykład 3
Metody Kompilacji Wykład 3 odbywa się poprzez dołączenie zasad(reguł) lub fragmentów kodu do produkcji w gramatyce. Włodzimierz Bielecki WI ZUT 2 Na przykład, dla produkcji expr -> expr 1 + term możemy
Bardziej szczegółowoJAVA W SUPER EXPRESOWEJ PIGUŁCE
JAVA W SUPER EXPRESOWEJ PIGUŁCE Obiekt Obiekty programowe to zbiór własności i zachowań (zmiennych i metod). Podobnie jak w świecie rzeczywistym obiekty posiadają swój stan i zachowanie. Komunikat Wszystkie
Bardziej szczegółowoZaawansowane programowanie w języku C++ Funkcje uogólnione - wzorce
Zaawansowane programowanie w języku C++ Funkcje uogólnione - wzorce Prezentacja jest współfinansowana przez Unię Europejską w ramach Europejskiego Funduszu Społecznego w projekcie pt. Innowacyjna dydaktyka
Bardziej szczegółowoWstęp do Programowania potok funkcyjny
Wstęp do Programowania potok funkcyjny Marcin Kubica 2010/2011 Outline 1 Pojęcie typu Definition (Typ danych) Typ danych to zbiór wartości wraz z zestawem podstawowych operacji na tych wartościach. Typy
Bardziej szczegółowoPrzeciążanie operatorów
Instrukcja laboratoryjna nr 4 Programowanie w języku C 2 (C++ poziom zaawansowany) Przeciążanie operatorów dr inż. Wilk-Jakubowski Jacek mgr inż. Lasota Maciej dr inż. Kaczmarek Tomasz Wprowadzenie Oprócz
Bardziej szczegółowoInformatyka 1. Wyrażenia i instrukcje, złożoność obliczeniowa
Informatyka 1 Wykład III Wyrażenia i instrukcje, złożoność obliczeniowa Robert Muszyński ZPCiR ICT PWr Zagadnienia: składnia wyrażeń, drzewa rozbioru gramatycznego i wyliczenia wartości wyrażeń, operatory
Bardziej szczegółowoTablice mgr Tomasz Xięski, Instytut Informatyki, Uniwersytet Śląski Katowice, 2011
Tablice mgr Tomasz Xięski, Instytut Informatyki, Uniwersytet Śląski Katowice, 2011 Załóżmy, że uprawiamy jogging i chcemy monitorować swoje postępy. W tym celu napiszemy program, który zlicza, ile czasu
Bardziej szczegółowoSwift (pol. jerzyk) nowy język programowania zaprezentowany latem 2014 r. (prace od 2010 r.)
Swift (pol. jerzyk) nowy język programowania zaprezentowany latem 2014 r. (prace od 2010 r.) przeznaczony do programowania zarówno pod ios jak i Mac OS X bazuje na logice Objective-C bez kompatybilności
Bardziej szczegółowoWykład 4: Klasy i Metody
Wykład 4: Klasy i Metody Klasa Podstawa języka. Każde pojęcie które chcemy opisać w języku musi być zawarte w definicji klasy. Klasa definiuje nowy typ danych, których wartościami są obiekty: klasa to
Bardziej szczegółowoWiadomości wstępne Środowisko programistyczne Najważniejsze różnice C/C++ vs Java
Wiadomości wstępne Środowisko programistyczne Najważniejsze różnice C/C++ vs Java Cechy C++ Język ogólnego przeznaczenia Można programować obiektowo i strukturalnie Bardzo wysoka wydajność kodu wynikowego
Bardziej szczegółowoC++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy WSKAŹNIKI KLASOWE
WSKAŹNIKI KLASOWE Wskaźniki klasowe Każdy obiekt zajmuje fragment pamięci i wszystkie obiekty tego samego typu zajmują fragmenty pamięci tej samej długości początek miejsca w pamięci zajmowanego przez
Bardziej szczegółowoTypy danych, zmienne i tablice. Tomasz Borzyszkowski
Typy danych, zmienne i tablice Tomasz Borzyszkowski Silne typy Javy Java jest językiem wyposażonym w silny system typów. Wywodzi się stąd siła i bezpieczeństwo tego języka. Co to znaczy silny system typów?
Bardziej szczegółowoWprowadzenie. Organizacja pracy i środowisko programistyczne. Mirosław Ochodek
Wprowadzenie Organizacja pracy i środowisko programistyczne Mirosław Ochodek Miroslaw.Ochodek@pwsz.pila.pl Miroslaw.Ochodek@cs.put.poznan.pl Dane kontaktowe Mirosław Ochodek E-mail: Miroslaw.Ochodek@pwsz.pila.pl
Bardziej szczegółowoWstęp do Programowania potok funkcyjny
Wstęp do Programowania potok funkcyjny Marcin Kubica 2010/2011 Outline Programowanie imperatywne 1 Programowanie imperatywne Intuicje Programowanie imperatywne Paradygmat programowania imperatywnego: program
Bardziej szczegółowoJęzyk ludzki kod maszynowy
Język ludzki kod maszynowy poziom wysoki Język ludzki (mowa) Język programowania wysokiego poziomu Jeśli liczba punktów jest większa niż 50, test zostaje zaliczony; w przeciwnym razie testu nie zalicza
Bardziej szczegółowoProgramowanie w C++ Wykład 6. Katarzyna Grzelak. 1 kwietnia K.Grzelak (Wykład 6) Programowanie w C++ 1 / 43
Programowanie w C++ Wykład 6 Katarzyna Grzelak 1 kwietnia 2019 K.Grzelak (Wykład 6) Programowanie w C++ 1 / 43 Pojęcia z poprzednich wykładów Tablica to ciag obiektów tego samego typu, zajmujacy ciagły
Bardziej szczegółowo3. Wykład 3: Dowody indukcyjne, strategie dowodowe Dowody indukcyjne. Dotychczas zobaczyliśmy w jaki sposób można specyfikować definicje
3. Wykład 3: Dowody indukcyjne, strategie dowodowe. 3.1. Dowody indukcyjne. Dotychczas zobaczyliśmy w jaki sposób można specyfikować definicje indukcyjne kategorii syntaktycznych lub osądów, czy też w
Bardziej szczegółowoPython wstęp do programowania dla użytkowników WCSS
Python wstęp do programowania dla użytkowników WCSS Dr inż. Krzysztof Berezowski Instytut Informatyki, Automatyki i Robotyki Politechniki Wrocławskiej Wprowadzenie CHARAKTERYSTYKA JĘZYKA Filozofia języka
Bardziej szczegółowoDziedziczenie Dana jest klasa Punkt w pliku o nazwie Punkt.java:
Dziedziczenie Dana jest klasa Punkt w pliku o nazwie Punkt.java: p u b l i c c l a s s Punkt { i n t x, y ; Punkt ( ) { x = 1 ; y = 1 ; Punkt ( i n t wspx, i n t wspy ) { x = wspx ; y = wspy ; Punkt (
Bardziej szczegółowoSTL: Lekcja 1&2. Filozofia STL
STL: Lekcja 1&2 Tematy: Filozofia STL Po co nam STL? Podstawowa zawartość STL Co warto znać zanim zaczniemy pracę z STL?: wskaźniki Praca na tekstach: klasa String Vector: nowy wymiar standardowych tablic.
Bardziej szczegółowoWstęp do Programowania potok funkcyjny
Wstęp do Programowania potok funkcyjny Marcin Kubica 2010/2011 Outline Procedury wyższych rzędów 1 Procedury wyższych rzędów jako abstrakcje konstrukcji programistycznych Intuicje Procedury wyższych rzędów
Bardziej szczegółowoParadygmaty programowania. Paradygmaty programowania
Paradygmaty programowania Paradygmaty programowania Dr inż. Andrzej Grosser Cz estochowa, 2013 2 Spis treści 1. Zadanie 2 5 1.1. Wprowadzenie.................................. 5 1.2. Wskazówki do zadania..............................
Bardziej szczegółowoSWIFT. Zaawansowane Programowanie Obiektowe
SWIFT Zaawansowane Programowanie Obiektowe Swift (pol. jerzyk) nowy język programowania zaprezentowany latem 2014 r. (prace od 2010 r.) przeznaczony do programowania zarówno pod ios jak i Mac OS X bazuje
Bardziej szczegółowoMETODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02
METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE Wykład 02 NAJPROSTSZY PROGRAM /* (Prawie) najprostszy przykład programu w C */ /*==================*/ /* Między tymi znaczkami można pisać, co się
Bardziej szczegółowoAlgorytmy i struktury danych. wykład 1
Plan całego wykładu:. Pojęcie algorytmu, projektowanie wstępujące i zstępujące, rekurencja. Klasy algorytmów. Poprawność algorytmu, złożoność obliczeniowa. Wskaźniki, dynamiczne struktury danych: listy,
Bardziej szczegółowoCzym jest stos i sterta?
W języku C# istnieje kilka podstawowych typów danych. Na pierwszy rzut oka nie widać między nimi żadnej różnicy, jednak pojawia się w charakterystycznych sytuacjach takich jak przekazywanie parametrów
Bardziej szczegółowoKurs programowania. Wstęp - wykład 0. Wojciech Macyna. 22 lutego 2016
Wstęp - wykład 0 22 lutego 2016 Historia Simula 67 język zaprojektowany do zastosowan symulacyjnych; Smalltalk 80 pierwszy język w pełni obiektowy; Dodawanie obiektowości do języków imperatywnych: Pascal
Bardziej szczegółowoPodstawy programowania. Wykład 6 Wskaźniki. Krzysztof Banaś Podstawy programowania 1
Podstawy programowania. Wykład 6 Wskaźniki Krzysztof Banaś Podstawy programowania 1 Adresy zmiennych Język C pozwala na operowanie adresami w pamięci stąd, między innymi, kwalifikowanie C jako języka relatywnie
Bardziej szczegółowo- nawiasy kwadratowe oznaczają, że to lista
Haskell jest statycznym typem języka: - wszystkie typy i wyrażenia są znane w czasie kompilacji ( zwiększa to bezpieczeństwo kodu). Podawanie typów zmiennych i argumentów funkcji jest zbędne, gdyż Haskel
Bardziej szczegółowoOperacje 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ółowoProgramowanie 2. Język C++. Wykład 3.
3.1 Programowanie zorientowane obiektowo... 1 3.2 Unie... 2 3.3 Struktury... 3 3.4 Klasy... 4 3.5 Elementy klasy... 5 3.6 Dostęp do elementów klasy... 7 3.7 Wskaźnik this... 10 3.1 Programowanie zorientowane
Bardziej szczegółowoWykł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ółowoPodstawy Programowania Obiektowego
Podstawy Programowania Obiektowego Wprowadzenie do programowania obiektowego. Pojęcie struktury i klasy. Spotkanie 03 Dr inż. Dariusz JĘDRZEJCZYK Tematyka wykładu Idea programowania obiektowego Definicja
Bardziej szczegółowowykład IV uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C, a C++. wykład IV dr Jarosław Mederski Spis Język C++ - wstęp
Programowanie uzupełnienie notatek: dr Jerzy Białkowski 1 2 3 4 Historia C++ został zaprojektowany w 1979 przez Bjarne Stroustrupa jako rozszerzenie języka C o obiektowe mechanizmy abstrakcji danych i
Bardziej szczegółowoStrona główna. Strona tytułowa. Programowanie. Spis treści. Sobera Jolanta 16.09.2006. Strona 1 z 26. Powrót. Full Screen. Zamknij.
Programowanie Sobera Jolanta 16.09.2006 Strona 1 z 26 1 Wprowadzenie do programowania 4 2 Pierwsza aplikacja 5 3 Typy danych 6 4 Operatory 9 Strona 2 z 26 5 Instrukcje sterujące 12 6 Podprogramy 15 7 Tablice
Bardziej szczegółowoPARADYGMATY PROGRAMOWANIA Wykład 4
PARADYGMATY PROGRAMOWANIA Wykład 4 Metody wirtualne i polimorfizm Metoda wirualna - metoda używana w identyczny sposób w całej hierarchii klas. Wybór funkcji, którą należy wykonać po wywołaniu metody wirtualnej
Bardziej szczegółowoProgramowanie w C++ Wykład 7. Katarzyna Grzelak. 23 kwietnia K.Grzelak (Wykład 7) Programowanie w C++ 1 / 40
Programowanie w C++ Wykład 7 Katarzyna Grzelak 23 kwietnia 2018 K.Grzelak (Wykład 7) Programowanie w C++ 1 / 40 Standard Template Library (STL) K.Grzelak (Wykład 7) Programowanie w C++ 2 / 40 C++ Templates
Bardziej szczegółowoProgramowanie obiektowe
Programowanie obiektowe Wykład 2: Wstęp do języka Java 3/4/2013 S.Deniziak: Programowanie obiektowe - Java 1 Cechy języka Java Wszystko jest obiektem Nie ma zmiennych globalnych Nie ma funkcji globalnych
Bardziej szczegółowoWykład 2 Składnia języka C# (cz. 1)
Wizualne systemy programowania Wykład 2 Składnia języka C# (cz. 1) 1 dr Artur Bartoszewski -Wizualne systemy programowania, sem. III- WYKŁAD Wizualne systemy programowania Budowa projektu 2 Struktura programu
Bardziej szczegółowoKurs WWW. Paweł Rajba. pawel@ii.uni.wroc.pl http://pawel.ii.uni.wroc.pl/
Paweł Rajba pawel@ii.uni.wroc.pl http://pawel.ii.uni.wroc.pl/ Spis treści Wprowadzenie Automatyczne ładowanie klas Składowe klasy, widoczność składowych Konstruktory i tworzenie obiektów Destruktory i
Bardziej szczegółowoElementy języka Haskell
Elementy języka Haskell Cechy języka Historia języka Proste przykłady Środowisko interakcyjne Typy i klasy Definiowanie funkcji Wyrażenia listowe Deklarowanie typów, danych i klas Monady Cechy języka zwięzłe
Bardziej szczegółowoInstrukcja 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ółowoRozdział 4 KLASY, OBIEKTY, METODY
Rozdział 4 KLASY, OBIEKTY, METODY Java jest językiem w pełni zorientowanym obiektowo. Wszystkie elementy opisujące dane, za wyjątkiem zmiennych prostych są obiektami. Sam program też jest obiektem pewnej
Bardziej szczegółowoKlasy Obiekty Dziedziczenie i zaawansowane cechy Objective-C
#import "Fraction.h" #import @implementation Fraction -(Fraction*) initwithnumerator: (int) n denominator: (int) d { self = [super init]; } if ( self ) { [self setnumerator: n anddenominator:
Bardziej szczegółowoProblem Próby rozwiązania Maszyna stanów Inne zastosowania Podsumowanie. Maszyny stanów. Programowanie gier bez Unity, cz. 3.
Maszyny stanów Programowanie gier bez Unity, cz. 3 Piotr Korgul Koło Naukowe Twórców Gier Polygon 3 grudnia 2014 r. Cykl Programowanie gier bez Unity 1 Jak zorganizować prace nad grą? 2 Jak działa gra?
Bardziej szczegółowoMyś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ółowoC++ Przeładowanie operatorów i wzorce w klasach
C++ i wzorce w klasach Andrzej Przybyszewski numer albumu: 89810 14 listopada 2009 Ogólnie Przeładowanie (przeciążanie) operatorów polega na nadaniu im nowych funkcji. Przeładowanie operatora dokonuje
Bardziej szczegółowoDariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki
Dariusz Brzeziński Politechnika Poznańska, Instytut Informatyki zaprojektowany jako rozszerzenie języka C o obiektowe mechanizmy abstrakcji danych jest to język pozwalający na programowanie zarówno proceduralne
Bardziej szczegółowoPrzykładowy dokument XML
Przykładowy dokument XML DTD - wady Ograniczona kontrola nad strukturą dokumentów. Zbyt wysokopoziomowe typy danych: liczby, daty są zawsze reprezentowane jako tekst! Bardzo ogólne metody definiowania
Bardziej szczegółowoZaawansowane programowanie w języku C++ Przeciążanie operatorów
Zaawansowane programowanie w języku C++ Przeciążanie operatorów Prezentacja jest współfinansowana przez Unię Europejską w ramach Europejskiego Funduszu Społecznego w projekcie pt. Innowacyjna dydaktyka
Bardziej szczegółowoDrzewa BST i AVL. Drzewa poszukiwań binarnych (BST)
Drzewa ST i VL Drzewa poszukiwań binarnych (ST) Drzewo ST to dynamiczna struktura danych (w formie drzewa binarnego), która ma tą właściwość, że dla każdego elementu wszystkie elementy w jego prawym poddrzewie
Bardziej szczegółowoDECLARE <nazwa_zmiennej> typ [(<rozmiar> )] [ NOT NULL ] [ { := DEFAULT } <wartość> ];
Braki w SQL obsługi zdarzeń i sytuacji wyjątkowych funkcji i procedur użytkownika definiowania złożonych ograniczeń integralnościowych Proceduralny SQL Transact- SQL używany przez Microsoft SQL Server
Bardziej szczegółowoJava. język programowania obiektowego. Programowanie w językach wysokiego poziomu. mgr inż. Anna Wawszczak
Java język programowania obiektowego Programowanie w językach wysokiego poziomu mgr inż. Anna Wawszczak 1 Język Java Język Java powstał w roku 1995 w firmie SUN Microsystems Java jest językiem: wysokiego
Bardziej szczegółowo1 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ółowoAlgorytmy i Struktury Danych. Anna Paszyńska
Algorytmy i Struktury Danych Anna Paszyńska Tablica dynamiczna szablon Array Zbiory Zbiory template class Container {public: virtual ~Container() { }; virtual int Count() const = 0;
Bardziej szczegółowoPrezentacja o Haskell u(rozdział 3 i 4)
9 marca 2017 Spis treści 1 2 Wprowadzenie Każda wartość jak i funkcja ma w haskellu ściśle określony typ. Jawne definiowanie typów nie jest konieczne, ponieważ Haskell sam rozpoznaje typ wartości. Warto
Bardziej szczegółowoDiagramy klas. dr Jarosław Skaruz http://ii3.uph.edu.pl/~jareks jaroslaw@skaruz.com
Diagramy klas dr Jarosław Skaruz http://ii3.uph.edu.pl/~jareks jaroslaw@skaruz.com O czym będzie? Notacja Ujęcie w różnych perspektywach Prezentacja atrybutów Operacje i metody Zależności Klasy aktywne,
Bardziej szczegółowoC# 6.0 : kompletny przewodnik dla praktyków / Mark Michaelis, Eric Lippert. Gliwice, cop Spis treści
C# 6.0 : kompletny przewodnik dla praktyków / Mark Michaelis, Eric Lippert. Gliwice, cop. 2016 Spis treści Spis rysunków 11 Spis tabel 13 Przedmowa 15 Wprowadzenie 17 Podziękowania 27 O autorach 29 1 Wprowadzenie
Bardziej szczegółowoKurs programowania. Wykład 1. Wojciech Macyna. 3 marca 2016
Wykład 1 3 marca 2016 Słowa kluczowe języka Java abstract, break, case, catch, class, const, continue, default, do, else, enum, extends, final, finally, for, goto, if, implements, import, instanceof, interface,
Bardziej szczegółowoZmienne, 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ółowoProgramowanie obiektowe
Programowanie obiektowe Podstawowe cechy i możliwości języka Scala mgr inż. Krzysztof Szwarc krzysztof@szwarc.net.pl Sosnowiec, 2017 1 / 32 mgr inż. Krzysztof Szwarc Programowanie obiektowe Informacje
Bardziej szczegółowoSpis treści. Wprowadzenie 15
Spis treści Wprowadzenie 15 1. Mechanizmy języka C++ 19 1.1. Struktura programu jednostki translacji.................. 21 1.1.1. Składnia tekstu źródłowego...................... 22 1.1.2. Preprocesor...
Bardziej szczegółowo1 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ółowoWstęp do programowania obiektowego, wykład 7
Wstęp do programowania obiektowego, wykład 7 Klasy i funkcje abstrakcyjne Przeciążanie funkcji Definiowanie i interpretacja złożonych typów danych w C++ Wskaźniki do funkcji 1 KLASA ABSTRAKCYJNA 2 Klasa
Bardziej szczegółowoJęzyk C zajęcia nr 11. Funkcje
Język C zajęcia nr 11 Funkcje W języku C idea podprogramów realizowana jest wyłącznie poprzez definiowanie i wywołanie funkcji. Każda funkcja musi być przed wywołaniem zadeklarowana. Deklaracja funkcji
Bardziej szczegółowoWstęp do Programowania 2
Wstęp do Programowania 2 dr Bożena Woźna-Szcześniak bwozna@gmail.com Akademia im. Jana Długosza Wykład 5 W programowaniu obiektowym programista koncentruje się na obiektach. Zadaje sobie pytania typu:
Bardziej szczegółowoLuty 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ółowoOracle PL/SQL. Paweł Rajba.
Paweł Rajba pawel@ii.uni.wroc.pl http://www.kursy24.eu/ Zawartość modułu 8 Wprowadzenie Definiowanie typu obiektowego Porównywanie obiektów Tabele z obiektami Operacje DML na obiektach Dziedziczenie -
Bardziej szczegółowoLaboratorium 03: Podstawowe konstrukcje w języku Java [2h]
1. Typy. Java jest językiem programowania z silnym systemem kontroli typów. To oznacza, że każda zmienna, atrybut czy parametr ma zadeklarowany typ. Kompilator wylicza typy wszystkich wyrażeń w programie
Bardziej szczegółowoWstęp do Programowania potok funkcyjny
Wstęp do Programowania potok funkcyjny Marcin Kubica 2016/2017 Outline Moduły i bariery abstrakcji 1 Moduły i bariery abstrakcji Moduły co to jest i po co to jest? Duży system dzielimy na mniejsze, łatwiejsze
Bardziej szczegółowo