F# programowanie funkcyjne w.net ((bo każdy lubi programowanie funkcyjne))

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

Download "F# programowanie funkcyjne w.net ((bo każdy lubi programowanie funkcyjne))"

Transkrypt

1 F# programowanie funkcyjne w.net ((bo każdy lubi programowanie funkcyjne)) Marek Sawerwain Instytut Sterowania i Systemów Informatycznych Uniwersytet Zielonogórski M.Sawerwain@issi.uz.zgora.pl tel. (praca): pok. 328a A-2, ul. prof. Z.Szafrana 2, Zielona Góra IT Academy Day 14 listopada 2013 WEIT, UZ, Zielona Góra V1.0 1/ 45

2 Spis treści 1 Wprowadzenie Historia języka F# Książki, książki,... 2 Pierwsze kroki z F# Wyrażenia let jak szwajcarski scyzoryk do wszystkiego if, for, while czasem się przydają Typowe konstrukcje F# Rekurencja Listy Szybko i zwięźle o sortowaniu Tablice 3 F# krok dalej Klasy i obiekty Definicja nowych operatorów Zapytania LINQ Analiza wyrażeń arytmetycznych Aplikacje GUI 4 Podsumowanie Dodatkowe informacje V1.0 2/ 45

3 Historia języka F# Programowanie funkcyjne i F# Krótki rys historyczny Język F# zyskał sporą popularność od momentu pojawienia się pierwszej wersji razem ze środowiskiem Visual Studio Prace na F# rozpoczęły się już w roku Rozpoczęto wtedy prace nad adaptacją rozwiązań funkcyjnych opartych o języki z rodziny ML dla platformy.net, również w kontekście typów uogólnionych. Grupa, która zajmowała się tymi zagadnieniami, wzorowała się też na języku Ocaml. Głównym architektem jezyka F# jest Don Syme. V1.0 3/ 45

4 Historia języka F# Główne fakty o F# Główne fakty dotyczące języka F#: pierwsze produkcyjne wydanie F# pojawiło się w Visual Studio 2010, najnowsza wersja to F# 3.1 dostępny w Visual Studio 2013, istnieje kompilator Open Source, na razie wspiera wersję 3.0, programy F# a także kompilator, współpracuje z platformą Mono, co zapewnia multiplaformowość, wspiera różne paradygmaty (style) programowania, a ostatnio, w dobrym tonie jest pisanie w programów F#. V1.0 4/ 45

5 Historia języka F# Paradygmaty w języku F# Język F# jest językiem programowania wspierającego kilka paradygmatów programowania w ramach platformy.net: Uwaga F# wspiera programowanie funkcyjne, w tym stylu metody programowania podkreślają co program na zrobić, bez ścisłego określenia jak program powinien pracować, wspierane jest także programowanie obiektowe, dostępne są min. klasy abstrakcyjne, a powstałe klasy naturalnie zgodne są z modelem obiektowym dostępnym w.net, wspierana są również techniki programowania imperatywnego, co pozwala na łatwą obsługę plików, czy obsługę sieci, język F# jest językiem statycznie silnie typowalnym, co oznacza iż typ jest znany na etapie kompilacji, F# jest językiem należącym do platformy.net, działa w ramach CLI, co pozwala na wykorzystywanie możliwości platformy jak min. garbage collection, możliwy jest dostęp do zbioru klas, oraz do takich pojęć jak delegaci, zdarzenia i etc. Podsumowując, F# obejmuje głównie paradygmat obiektowy oraz funkcyjny, gdzie funkcje są funkcjami tzw. pierwszej klasy. V1.0 5/ 45

6 Książki, książki,... Literatura o języku F# Pozycja (elektroniczna) w języku polskim: Marian Mysior, Język F# w praktyce, 2012 W języku angielskim: Don Syme, Adam Granicz, Antonio Cisternino, Expert F# 3.0, Apress, 2012 Chris Smith, Programming F# 3.0, 2nd Edition, O Reilly Media, 2012 Informacje o innych książkach: V1.0 6/ 45

7 Książki, książki,... F# środowisko pracy Główne środowisko pracy to naturalnie Visual Studio wersje 2010, 2012, 2013, dostępne jest też SharpDevelop oraz MonoDevelop: V1.0 7/ 45

8 Książki, książki,... F# środowisko pracy Główne środowisko pracy to naturalnie Visual Studio wersje 2010, 2012, 2013, dostępne jest też SharpDevelop oraz MonoDevelop: V1.0 8/ 45

9 Programy w języku F#, mogą być bardzo krótkie, a nawet składać się tylko z jednej linii: let x = 2 in printfn "%d+%d=%d" x x (x+x) Naturalnie można podać wyrażenie pełniące rolę funkcji głównej: [<EntryPoint>] let main argv = printfn "Hello World!" 0 Jednakże o tym iż określony symbol pełni rolę funkcji głównej decyduje atrybut [<EntryPoint>]: [<EntryPoint>] let ZielonaGóraStacjaGłówna argv = printfn "Witaj Świecie!" 0 Uwaga Pod spinaczem, znajdują się kody źródłowe prezentowanych przykładów. V1.0 9/ 45

10 Poprawny i pełny program w F#, podobny do C#: open System [<EntryPoint>] let main (args : string[]) = if args.length <> 2 then failwith "Błąd: nie podano dwóch parametrów" let greeting, thing = args.[0], args.[1] let timeofday = DateTime.Now.ToString("hh:mm tt") printfn "%s, %s o godzinie %s" greeting thing timeofday 0 V1.0 10/ 45

11 Programy w F# wykonują się od góry do dołu: open System let rec fib = function 0 -> 0 1 -> 1 n -> fib (n - 1) + fib (n - 2) let mainfun() = Console.WriteLine("fib 5: {0}", (fib 5)) mainfun() Uwaga Jednak warto pisać programy porządnie, tzn. jawnie wskazywać funkcję główną. V1.0 11/ 45

12 Wyrażenia let jak szwajcarski scyzoryk do wszystkiego Konstrukcja let Podstawowym wyrażeniem w F# jest wiązanie symbolu z wartością za pomocą słowa kluczowego let. Wyrażenie let let symbol = wyrażenie Wiązania, symbole, zmienne Wiązania nie należy utożsamiać z przypisaniem wartości do zmiennej, jak to zwykle bywa w językach takich jak C++ czy Java, bowiem symbol powiązany z wartością nie może zostać zmieniony w lokalnej przestrzeni nazw. Operacja przypisania jest reprezentowana przez operator <-. Jeśli chcemy zmienić wartość symbolu, czyli traktować go jako tradycyjną zmienną, musimy dodać słowo mutable: Wyrażenie let z mutable let mutable x = 10 V1.0 12/ 45

13 Wyrażenia let jak szwajcarski scyzoryk do wszystkiego Konstrukcja let Przykładem let: let n = 42 let str = "Hello world!" Wyrażenie let kreuje także funkcje: let sqr v = v * v ;; albo let add20 n = n + 20 ;; Wyrażenia let mogą się zagnieżdżać jak w poniższym przykładzie obliczającym pojemność kuli: let pojemnośćkuli promień = let pi = (4.0 / 3.0) * pi * promień * promień * promień printfn "%f" (pojemnośćkuli 5.0) V1.0 13/ 45

14 if, for, while czasem się przydają Instrukcja silnego sterowania F# oferuje instrukcję sterującą ze silną kontrolą sterowania, a jest to konstrukcja if... then... else... let result = if System.DateTime.Now.Second % 2 = 0 then "tik" else "tak" printfn "%A" result Jest to bezpośredni odpowiednik następującego przykładu z match: let result = match System.DateTime.Now.Second % 2 = 0 with true -> "tik" false -> "tak" Operatory logiczne to &&,, not. V1.0 14/ 45

15 if, for, while czasem się przydają Pętla for... do Ogólny zapis instrukcji for for identifier = start [ to downto ] finish do body-expression Przykład typowej pętli for: let funexam1() = for i = 1 to 100 do printf "%d " i printfn "" Określenie wartości początkowej i końcowej: let ex1 x y = x - 2*y let ex2 x y = x + 2*y let funexam2 x y = for i = (ex1 x y) to (ex2 x y) do printf "%d " i printfn "" funexam V1.0 15/ 45

16 if, for, while czasem się przydają Pętla for... in Ogólne zapis instrukcji for... in dla przeliczalnego wyrażenia for pattern in enumerable-expression do body-expression Przeglądnięcie listy: let list1 = [ 1; 2; 4; 8; 16 ] for i in list1 do printfn "%d" i Utworzenie i przeglądnięcie sekwencji uporządkowanych par: let seq1 = seq { for i in > (i, i*i) } for (i, isqr) in seq1 do printfn "%d podniesione do kwadratu to %d" is isqr V1.0 16/ 45

17 if, for, while czasem się przydają Pętla for... in Wyświetlenie, co drugiego elementu: let funexam3() = for i in do printf "%d " i printfn "" funexam3() Konwersja liczby całkowitej na postać binarną: let BitsNum = 32 ;; let binary_of_int n = [ for i in BitsNum > if (n >>> i) % 2 = 0 then "0" else "1" ] > String.concat "" ;; let x1 = binary_of_int 1431 ;; let x2 = binary_of_int ( ) ;; Operator > to tzw. pipe-forward operator stosujący lewy argument to prawego np.: 0.5 > Math.Sin. Operator _ pozwala na zignorowanie zmiennej/wzorca w konstrukcji for: let mutable count = 0 for _ in list1 do count <- count + 1 printfn "Długość listy: %d" count V1.0 17/ 45

18 if, for, while czasem się przydają Konstrukcja pętli while Konstrukcja pętli while ma następującą postać: while test-expression do body-expression Typowy iteracyjny przykład zastosowania pętli while: open System let szukajwartości val maxval = let mutable nextiter = true let randomnumbergenerator = new Random() while nextiter do let rand = randomnumbergenerator.next( maxval ) printfn "%d " rand if rand = val then printfn "\nodgadnięto wartość %d!" value nextiter <- false szukajwartości V1.0 18/ 45

19 Typowe konstrukcje F# printfn Wyrażenie let i różne typy danych: let message = "Hello World\r\n\t!" let main() = let dir printfn "%A" message let bytes = "bytesbytesbytes"b printfn "%A" dir let xa = 0xFFy printfn "%A" bytes let xb = 0o7777un printfn "%A" xa let xc = 0b10010UL printfn "%A" xa printfn "%A" xb printfn "%A" xc main() Po wykonaniu tego programu otrzymuje się następujące rezultaty: "Hello World!" "c:\projects" [ 98uy; 121uy; 116uy; 101uy; 115uy; 98uy; 121uy; 116uy; 101uy; 115uy; 98uy; 121uy; 116uy; 101uy; 115uy ] -1y 4095un 18UL V1.0 19/ 45

20 Typowe konstrukcje F# Wcięcia są ważne Ponieważ syntaktyka F# nie stosuje np. nawiasów klamrowych do tworzenie bloków instrukcji, to wcięcia wyznaczają nowe zasięgi zmiennych. let sign v = if v > 0 then 1 else if v = 0 then 0 else -1 Poniższe wyrażenie oblicza liczbę słów w podanym zdaniu: let wordcount (text : string) = let words = text.split > Array.toList in let wordset = Set.ofList words in let numwords = words.length in numwords printfn "Liczba słów: %A" (wordcount "Ile słów jest w tym zdaniu!") V1.0 20/ 45

21 Typowe konstrukcje F# Polecenie match dopasowanie wzorca Wyrażenie match pozwala na porównywanie wartości wyrażenia ze zbiorem wzorców i wybór rezultatu jeśli wyrażenie testowe jest zgodne z jednym ze wzorców: // schemat dla match match test-expression with pattern1 [ when condition ] -> result-expression1 pattern2 [ when condition ] -> result-expression2... // schemat dla funkcji function pattern1 [ when condition ] -> result-expression1 pattern2 [ when condition ] -> result-expression2... W przypadku połączenie match z tworzeniem lambda wyrażeń (słowo fun), schemat jest następujący: fun arg -> match arg with pattern1 [ when condition ] -> result-expression1 pattern2 [ when condition ] -> result-expression2... V1.0 21/ 45

22 Typowe konstrukcje F# Przykłady z match Raz jeszcze funkcja sign, let sign2 v = match v with _ when v > 0 -> 1 _ when v = 0 -> 0 _ when v < 0 -> -1 Typowy przykład dla match: let filter123 x = match x with > printfn "Znaleziono 1, 2 lub 3" a -> printfn "%d" a filter123 3 V1.0 22/ 45

23 Typowe konstrukcje F# Aktywne wzorce Siła polecenia match to tzw. aktywne wzorce, poniżej wzorzec, który w zależności od argumentu zwraca wartość oznaczającą parzystość lub nieparzystość liczby: let ( LParzysta LNieParzysta ) wartość = if wartość % 2 = 0 then LParzysta else LNieParzysta Funkcja testująca parzystość posiada bardo czytelną postać: let TestLiczbyCałkowitej wartość = match wartość with LParzysta -> printfn "liczba %d jest p." wartość LNieParzysta -> printfn "liczba %d jest niep." wartość V1.0 23/ 45

24 Rekurencja Funkcje rekurencyjne Liczby Fibonacciego: let rec fib n = match n with 0 1 -> n _ -> fib (n - 1) + fib (n - 2) Funkcja silnia (ang. factorial): let rec factorial n = match n with 0 -> 1 1 -> 1 n -> n * factorial ( n - 1 ) printfn "(fac 5) = %i" (factorial 5) V1.0 24/ 45

25 Rekurencja Silnia imperatywnie oraz funkcyjnie Definicja funkcji silnia w podejściu funkcyjnym: let rec ffactorial n = if (n = 0) then 1 else n * ffactorial(n - 1) albo let rec ffactorial n = if (n = 0) then 1 else n * ffactorial(n - 1) Wersja imperatywna z pętlą for: let ifactorial n = let mutable ret = 1 for i = 1 to n do ret <- ret * i ret V1.0 25/ 45

26 Listy Listy ważny typ danych Trzy główne pojęcia, lista pusta: let pustalista = [] Operator :: łączy wskazane elementy w listę let lista2 = "jeden" :: "dwa" :: "trzy" :: [] albo let lista3 = ["jeden" ; "dwa" ; "trzy" ] Operator :: ma też drugie zastosowanie, bowiem pozwala na wydzielenie z listy tzw. głowy, tj. pierwszego elementu oraz tzw. ogona lista. Połączenie dwóch list to zadanie dla let lista4 = ["e1"; ["e2"; "d3"; "e5"] V1.0 26/ 45

27 Listy Przykłady z listami Rekurencja do obliczania sumy elementów na liście: let rec sumaelementówlisty L = match L with h::t -> h + sumaelementówlisty t [] -> 0 F# oferuje wiele wbudowanych funkcji np.: operację reduce: let sumaelementówlistyprzezredukcję L = List.reduce (fun x y -> x + y) L Odczytanie ostatniego elementu z listy również można zrealizować poprzez wyznaczanie ogona z listy, aż otrzymamy jeden element: let rec ostatnielementlisty L = match L with [] -> failwith "lista pusta" [v] -> v _::L -> ostatnielementlisty L V1.0 27/ 45

28 Listy Przykłady z listami Ostatni element listy w jednej linii: let ostatnielementlisty2 L = L > List.rev > List.head Poniższa konstrukcja z podanej listy wybierze tylko elementy parzyste, a następnie z wybranych elementów zostanie zbudowana nowa lista: let tylkoparzyste L = List.filter (fun x -> x % 2 = 0) L Lista może też przechowywać tzw. krotki, np. pary elementów typu ciąg znaków i liczba całkowita. let data = [("Xyaz",3); ("Aghdrgs",4); ("Abcd",2); ("Pepsntlsc",1)] let res = data > List.filter (fun (słowo, id) -> słowo.length <= 4) printfn "Krótkie wyrazy : %A" res V1.0 28/ 45

29 Listy Przykłady z listami Odwrócenie kolejności elementów na liście: let revlista = List.rev lista Łącznie list w jedną listę: let listalist = [[2; 3; 5]; [7; 11; 13]; [17; 19; 23; 29]] let rec łączenielist l = match l with głowa :: ogon -> (łączenielist ogon) [] -> [] let liczbypierwsze = łączenielist listalist printfn "%A" liczbypierwsze Zastosowanie operacji do każdego elementu na liście: let rec listmap func list = match list with head :: rest -> func head :: listmap func rest [] -> [] let x = listmap ((+) 1) [1; 2; 3] printfn "%A" x V1.0 29/ 45

30 Szybko i zwięźle o sortowaniu Sortowanie szybkie Sortowanie szybkie, to modelowy przykład stosowany do prezentacji zwięzłości programowania funkcyjnego: let rec qsort1 L = match L with [] -> [] x::xs -> let smaller = [for i in xs do if i <= x then yield i] in let larger = [for i in xs do if i > x then yield i] in qsort1 qsort1 larger;; Można to zapisać krócej bez jawnego powoływania list smaller oraz larger: let rec qsort2 = function [] -> [] x::xs -> qsort2 [for a in xs do if a < x then yield x :: qsort2 [for a in xs do if a >= x then yield a] V1.0 30/ 45

31 Szybko i zwięźle o sortowaniu Sortowanie szybkie Wersja sortowania szybkiego z operacją filtrowania listy konstrukcją List.filter: let rec quicksort l = match l with [] -> [] h::t -> quicksort (List.filter (fun x -> x < h) h :: quicksort (List.filter (fun x -> x >= h) t) V1.0 31/ 45

32 Tablice Tablice Tablice powinny być stosowane w zadaniach gdzie niezbędna jest wysoka wydajność. Definicja tablicy: let arr = [ 1.0; 1.0; 1.0 ];; Tablice mogą być ogromne : let bigarray = Array.zeroCreate<int> ;; Tablice, współpracują operator >, który znakomicie sprawdza się w sekwencyjnym przetwarzaniu tablic: [ ] > Array.filter (fun elem -> elem % 2 <> 0) > Array.choose (fun elem -> if (elem <> 7 && elem <> 13) then Some(elem*elem) else None) > Array.rev > printfn "%A" V1.0 32/ 45

33 Klasy i obiekty Bez klas się nie da F# to język programowania funkcyjnego, ale dziś wiele aplikacji jest pisanych z użyciem klas oraz obiektów. Dlatego, F# oferuje także wsparcie dla klas dostępnych w ramach platformy.net. Zapewnia to możliwość łatwej współpracy z resztą platformy.net. type Base() = member x.getfirststate() = 10 type Sub() = inherit Base() member x.getsecondstate() = 20 let myobject = new Sub() printfn "myobject.state = %i,\nmyobject.otherstate = %i" (myobject.getfirststate()) (myobject.getsecondstate()) V1.0 33/ 45

34 Klasy i obiekty Bez klas się nie da F# to język programowania funkcyjnego, ale dziś wiele aplikacji jest pisanych z użyciem klas oraz obiektów. Dlatego, F# oferuje także wsparcie dla klas dostępnych w ramach platformy.net. Zapewnia to możliwość łatwej współpracy z resztą platformy.net. open System type Vector(x: float, y : float) = member this.x = x member this.y = y static member (~-) (v : Vector) = Vector(-1.0 * v.x, -1.0 * v.y) static member (*) (v : Vector, a) = Vector(a * v.x, a * v.y) static member (*) (a, v: Vector) = Vector(a * v.x, a * v.y) override this.tostring() = this.x.tostring() + " " + this.y.tostring() V1.0 34/ 45

35 Klasy i obiekty Bez klas się nie da Użycie klasy wektor oraz zdefiniowanych operatorów: let v1 = Vector(1.0, 2.0) let v2 = v1 * 2.0 let v3 = 2.0 * v1 let v4 = - v2 printfn "%s" (v1.tostring()) printfn "%s" (v2.tostring()) printfn "%s" (v3.tostring()) printfn "%s" (v4.tostring()) Console.ReadLine() > ignore V1.0 35/ 45

36 Definicja nowych operatorów Nowy operator globalny Można też przeciążać operatory globalne, a nawet tworzyć specjalne własne operatory: let inline (+?) (x: int) (y: int) = x + 2*y printfn "%d" (10 +? 1) Inny przykład bez specjalizacji typów: let inline (+@) x y = x + x * y printfn "%d" (1 +@ 1) printfn "%f" (1.0 +@ 0.5) V1.0 36/ 45

37 Zapytania LINQ Zapytania LINQ od wersji F# 3.0 Prosty przykład zapytania LINQ dla listy o trzech słowach: let słowa = ["słowo"; "marzec"; "abecadło"] Zadaniem tego zapytania jest posortowanie alfabetycznie słów w liście: let r = query { for s in słowa do sortby s select s } Rezultat możemy odczytać w następujący sposób: r > Seq.iter( fun n -> printf "%s " n ) V1.0 37/ 45

38 Zapytania LINQ Zapytania LINQ od wersji F# 3.0 Przykład, dla listy z liczbami: let liczby = [ 5; 4; 1; 3; 9; 8; 6; 7; 2; 0 ] Wyświetlamy tylko te liczby, które są większe od np. pięciu: let Liczba = 5 in query { for l in liczby do where (l < Liczba) select l; } > Seq.iter(fun n -> printf "%d " n) V1.0 38/ 45

39 Analiza wyrażeń arytmetycznych Analiza rożnego rodzaju wyrażeń, a jest to zagadnienie bardzo ważne np. w budowie interpreterów czy kompilatorów, to także domena języka F#, czy ogólnie języków funkcyjnych. open System open FParsec let chars s = pstring s >>. spaces let number = pfloat.>> spaces let numorpunctation = nextcharsatisfiesnot isletter >>. spaces let operators = new OperatorPrecedenceParser<float, unit,unit>() let expr = operators.expressionparser operators.termparser <- number < > between (chars "(") (chars ")") expr V1.0 39/ 45

40 Analiza wyrażeń arytmetycznych Głowna cześć analizatora: operators.addoperator(infixoperator("+", spaces, 1, Associativity.Left, (+))) // usunięte operatory operators.addoperator(infixoperator("^", spaces, 3, Associativity.Right, fun x y -> System.Math.Pow(x, y))) operators.addoperator(prefixoperator("-", spaces, 4, true, fun x -> -x)) operators.addoperator(prefixoperator("sin", numorpunctation, 4, true, System.Math.Sin)) // usunięte funkcje let arithexpr = spaces >>. expr.>> eof let aritheval s = run arithexpr s V1.0 40/ 45

41 Analiza wyrażeń arytmetycznych Część sterująca analizatora: let rec calctest() = printf "> " let strexpr = Console.ReadLine() match strexpr with "quit" -> () _ -> match aritheval strexpr with Success(value, _, _) -> printfn "%A" value ; calctest() Failure(msg, _, _) -> printfn "error: %A" msg do calctest() V1.0 41/ 45

42 Aplikacje GUI Aplikacje GUI Język F# pozwala także na budowanie aplikacje GUI. Niestety, jak dotąd nie ma środowiska graficznego do budowy aplikacji GUI bezpośrednio w F#, przy użyciu graficznych narzędzi jak w np.: C#. Dlatego, trzeba samodzielnie tworzyć obiekty odpowiedzialne za okno i poszczególne kontrolki. let windowsform = new Form() windowsform.text <- "Okno aplikacji okienkowej" albo let windowsform = new Form(Width= 640, Height = 480, Visible = true, Text = "tytuł") Przykład budowy menu: let mainmenu = windowsform.menu <- new MainMenu() let filemenu = windowsform.menu.menuitems.add("&plik") let quititem = new MenuItem("&Wyjście") filemenu.menuitems.add( quititem ) > ignore albo let _ = mfile.menuitems.add(menuitemquit) V1.0 42/ 45

43 Aplikacje GUI Aplikacje GUI obsługa zdarzeń Zamknięcie okna: quititem.click.add(fun _ -> windowsform.close()) Utworzenie okna dialogowego: let SaveFile file text = let dlg = new SaveFileDialog() dlg.filter <- "Pliki tekstowe *.txt *.txt Wszyst...*" dlg.filterindex <- 2 Zapis danych do pliku: if dlg.showdialog() = DialogResult.OK then let sw = new StreamWriter( dlg.filename ) sw.write( richtextbox.text:string ) sw.close( ) else None V1.0 43/ 45

44 Aplikacje GUI Aplikacje GUI obsługa zdarzeń Obsługa zapisu danych, podłączanie zdarzeń i uruchamianie programu: let clbsaveastext _ = match SaveFile filename textrichbox.text with Some file -> SetFilename file None -> () menuitemopen.click.add( clbloadtext ) > ignore menuitemsaveas.click.add( clbsaveastext ) > ignore menuitemquit.click.add( fun _ -> winform.close () ) > ignore menuitemabout.click.add( fun _ -> MessageBox.Show("Super-hyper notatnik w F#!", "O Notatniku") > ignore) > ignore [<STAThread()>] do Application.Run( winform ) V1.0 44/ 45

45 Dodatkowe informacje Zamiast uwag na koniec, spis dodatkowych materiałów w Internecie: 1 Podstawowa strona dotycząca języka F#: 2 Kod źródłowy kompilatora F# oraz najważniejszych pakietów: 3 Obszerny zbiór przykładów dla F#, które można wypróbować on-line: 4 F# PowerPack: 5 Obszerny zbiór przykładów dla F# w tym również przykładów zapytań LINQ: 6 Zbiór 99 problemów wraz z rozwiązaniami w F#: 7 Czasopismo o języku F#: 8 Web-blog głównego architekta F#, Don Symea: Dziękuje za uwagę!!! V1.0 45/ 45

Platforma.NET Wykład 6 Programowanie w F# Spis treści. Marek Sawerwain. 8 maja 2012. Notatki. Notatki

Platforma.NET Wykład 6 Programowanie w F# Spis treści. Marek Sawerwain. 8 maja 2012. Notatki. Notatki Platforma.NET Wykład 6 Platforma.NET Wykład 6 Marek Sawerwain Instytut Sterowania i Systemów Informatycznych Uniwersytet Zielonogórski 8 maja 2012 V1.1 1/ 52 Platforma.NET Wykład 6 Spis treści Wprowadzenie

Bardziej szczegółowo

Platforma.NET Wykład 6 Programowanie w F# Spis treści. Plan wykładu spotkania tydzień po tygodniu. Plan wykładu tydzień po tygodniu. Notatki.

Platforma.NET Wykład 6 Programowanie w F# Spis treści. Plan wykładu spotkania tydzień po tygodniu. Plan wykładu tydzień po tygodniu. Notatki. Platforma.NET Wykład 6 Marek Sawerwain Instytut Sterowania i Systemów Informatycznych Uniwersytet Zielonogórski 8 maja 2012 V1.1 1/ 52 Spis treści Wprowadzenie Plan wykładu Języki funkcyjne i paradygmaty

Bardziej szczegółowo

Programowanie Funkcyjne. Marcin Kubica Świder,

Programowanie 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ółowo

Paradygmaty programowania

Paradygmaty 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ółowo

Programowanie obiektowe

Programowanie 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ółowo

Podstawy programowania funkcjonalnego

Podstawy programowania funkcjonalnego Podstawy programowania funkcjonalnego haskell.mariuszrozycki.pl Mariusz Różycki Churchill College, University of Cambridge rev. 2014.03.27.1 Wprowadzenie Materiały haskell.mariuszrozycki.pl Slajdy (w tym

Bardziej szczegółowo

Programowanie funkcyjne wprowadzenie Specyfikacje formalne i programy funkcyjne

Programowanie funkcyjne wprowadzenie Specyfikacje formalne i programy funkcyjne Programowanie funkcyjne wprowadzenie Specyfikacje formalne i programy funkcyjne dr inż. Marcin Szlenk Politechnika Warszawska Wydział Elektroniki i Technik Informacyjnych m.szlenk@elka.pw.edu.pl Paradygmaty

Bardziej szczegółowo

KOTLIN. Język programowania dla Androida

KOTLIN. 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ół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

Technologie informacyjne - wykład 12 -

Technologie informacyjne - wykład 12 - Zakład Fizyki Budowli i Komputerowych Metod Projektowania Instytut Budownictwa Wydział Budownictwa Lądowego i Wodnego Politechnika Wrocławska Technologie informacyjne - wykład 12 - Prowadzący: Dmochowski

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

Wprowadzenie do programowania w języku Visual Basic. Podstawowe instrukcje języka

Wprowadzenie do programowania w języku Visual Basic. Podstawowe instrukcje języka Wprowadzenie do programowania w języku Visual Basic. Podstawowe instrukcje języka 1. Kompilacja aplikacji konsolowych w środowisku programistycznym Microsoft Visual Basic. Odszukaj w menu startowym systemu

Bardziej szczegółowo

Uwagi dotyczące notacji kodu! Moduły. Struktura modułu. Procedury. Opcje modułu (niektóre)

Uwagi dotyczące notacji kodu! Moduły. Struktura modułu. Procedury. Opcje modułu (niektóre) Uwagi dotyczące notacji kodu! Wyrazy drukiem prostym -- słowami języka VBA. Wyrazy drukiem pochyłym -- inne fragmenty kodu. Wyrazy w [nawiasach kwadratowych] opcjonalne fragmenty kodu (mogą być, ale nie

Bardziej szczegółowo

Programowanie obiektowe. Literatura: Autor: dr inŝ. Zofia Kruczkiewicz

Programowanie obiektowe. Literatura: Autor: dr inŝ. Zofia Kruczkiewicz Programowanie obiektowe Literatura: Autor: dr inŝ. Zofia Kruczkiewicz Java P. L. Lemay, Naughton R. Cadenhead Java Podręcznik 2 dla kaŝdego Języka Programowania Java Linki Krzysztof Boone oprogramowania

Bardziej szczegółowo

Spis treści WSTĘP CZĘŚĆ I. PASCAL WPROWADZENIE DO PROGRAMOWANIA STRUKTURALNEGO. Rozdział 1. Wybór i instalacja kompilatora języka Pascal

Spis treści WSTĘP CZĘŚĆ I. PASCAL WPROWADZENIE DO PROGRAMOWANIA STRUKTURALNEGO. Rozdział 1. Wybór i instalacja kompilatora języka Pascal Spis treści WSTĘP CZĘŚĆ I. PASCAL WPROWADZENIE DO PROGRAMOWANIA STRUKTURALNEGO Rozdział 1. Wybór i instalacja kompilatora języka Pascal 1.1. Współczesne wersje kompilatorów Pascala 1.2. Jak zainstalować

Bardziej szczegółowo

Programowanie strukturalne i obiektowe : podręcznik do nauki zawodu technik informatyk / Adam Majczak. Gliwice, cop

Programowanie strukturalne i obiektowe : podręcznik do nauki zawodu technik informatyk / Adam Majczak. Gliwice, cop Programowanie strukturalne i obiektowe : podręcznik do nauki zawodu technik informatyk / Adam Majczak. Gliwice, cop. 2010 Spis treści Wstęp 11 Część I PASCAL - wprowadzenie do programowania strukturalnego

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

ALGORYTMY I STRUKTURY DANYCH

ALGORYTMY I STRUKTURY DANYCH KATEDRASYSTEMÓWOBLICZENIOWYCH ALGORYTMY I STRUKTURY DANYCH 1.Rekurencja Rekurencja inaczej rekursja (ang. recursion) to wywołanie z poziomu metody jej samej. Programowanie z wykorzytaniem rekurencji pozwala

Bardziej szczegółowo

Wstęp do Programowania potok funkcyjny

Wstę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ółowo

ECDL Podstawy programowania Sylabus - wersja 1.0

ECDL Podstawy programowania Sylabus - wersja 1.0 ECDL Podstawy programowania Sylabus - wersja 1.0 Przeznaczenie Sylabusa Dokument ten zawiera szczegółowy Sylabus dla modułu Podstawy programowania. Sylabus opisuje, poprzez efekty uczenia się, zakres wiedzy

Bardziej szczegółowo

Laboratorium 1 Temat: Przygotowanie środowiska programistycznego. Poznanie edytora. Kompilacja i uruchomienie prostych programów przykładowych.

Laboratorium 1 Temat: Przygotowanie środowiska programistycznego. Poznanie edytora. Kompilacja i uruchomienie prostych programów przykładowych. Laboratorium 1 Temat: Przygotowanie środowiska programistycznego. Poznanie edytora. Kompilacja i uruchomienie prostych programów przykładowych. 1. Przygotowanie środowiska programistycznego. Zajęcia będą

Bardziej szczegółowo

Programowanie obiektowe

Programowanie obiektowe Programowanie obiektowe Laboratorium 1. Wstęp do programowania w języku Java. Narzędzia 1. Aby móc tworzyć programy w języku Java, potrzebny jest zestaw narzędzi Java Development Kit, który można ściągnąć

Bardziej szczegółowo

Laboratorium 03: Podstawowe konstrukcje w języku Java [2h]

Laboratorium 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ółowo

Obiektowy Caml. Paweł Boguszewski

Obiektowy 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ółowo

Wstęp do programowania

Wstęp do programowania Wstęp do programowania Podstawowe konstrukcje programistyczne Paweł Daniluk Wydział Fizyki Jesień 2014 P. Daniluk (Wydział Fizyki) WP w. II Jesień 2014 1 / 38 Przypomnienie Programowanie imperatywne Program

Bardziej szczegółowo

Wprowadzenie do programowania

Wprowadzenie do programowania do programowania ITA-104 Wersja 1 Warszawa, Wrzesień 2009 ITA-104 do programowania Informacje o kursie Zakres tematyczny kursu Opis kursu Kurs przeznaczony jest do prowadzenia przedmiotu do programowania

Bardziej szczegółowo

Redis, skrypty w języku Lua

Redis, skrypty w języku Lua edis, skrypty w języku Lua 1/15 Redis, skrypty w języku Lua Technologie Zarządzania Treścią dr inż. Robert Perliński rperlinski@icis.pcz.pl Politechnika Częstochowska Instytut Informatyki Teoretycznej

Bardziej szczegółowo

Microsoft IT Academy kurs programowania

Microsoft IT Academy kurs programowania Microsoft IT Academy kurs programowania Podstawy języka C# Maciej Hawryluk Język C# Język zarządzany (managed language) Kompilacja do języka pośredniego (Intermediate Language) Kompilacja do kodu maszynowego

Bardziej szczegółowo

Składnia funkcji i Rekurencja w języku Haskell

Skł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ółowo

Wstęp do informatyki. stęp do informatyki Polecenia (cz.2)

Wstęp do informatyki. stęp do informatyki Polecenia (cz.2) Wstęp do informatyki stęp do informatyki Polecenia (cz.2) Lista procesów top Pokaż listę procesów polecenie interaktywne Procesy Uruchamianie w tle. shell nie czeka na zakończenie procesu, można wydawać

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

Informatyka 1. Plan dzisiejszych zajęć. zajęcia nr 1. Elektrotechnika, semestr II rok akademicki 2008/2009

Informatyka 1. Plan dzisiejszych zajęć. zajęcia nr 1. Elektrotechnika, semestr II rok akademicki 2008/2009 Informatyka 1 zajęcia nr 1 Elektrotechnika, semestr II rok akademicki 2008/2009 mgr inż.. Paweł Myszkowski Plan dzisiejszych zajęć 1. Organizacja laboratorium przedmiotu 2. Algorytmy i sposoby ich opisu

Bardziej szczegółowo

Zofia Kruczkiewicz, Programowanie obiektowe - java, wykład 2 1

Zofia Kruczkiewicz, Programowanie obiektowe - java, wykład 2 1 PODSTAWOWE ELEMENTY JĘZYKA JAVA WYRAŻENIA, OPERATORY, INSTRUKCJE 1. Operatory arytmetyczne +, -, /,*, % Przykład 1 programu z interfejsem konsolowym public class Lab2_1 // Tworzy generator liczb losowych,

Bardziej szczegółowo

Programowanie I. O czym będziemy mówili. Plan wykładu nieco dokładniej. Plan wykładu z lotu ptaka. Podstawy programowania w językach. Uwaga!

Programowanie I. O czym będziemy mówili. Plan wykładu nieco dokładniej. Plan wykładu z lotu ptaka. Podstawy programowania w językach. Uwaga! Programowanie I O czym będziemy mówili Podstawy programowania w językach proceduralnym ANSI C obiektowym Java Uwaga! podobieństwa w podstawowej strukturze składniowej (zmienne, operatory, instrukcje sterujące...)

Bardziej szczegółowo

Programowanie obiektowe i C++ dla matematyków

Programowanie obiektowe i C++ dla matematyków Programowanie obiektowe i C++ dla matematyków Bartosz Szreder szreder (at) mimuw... 04 X 2011 Wszelkie uwagi, poprawki, braki czy sugestie najlepiej wysyłać na maila. 1. wprowadzenie do Linuksa: kompilacja

Bardziej szczegółowo

Język JAVA podstawy. Wykład 3, część 3. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

Język JAVA podstawy. Wykład 3, część 3. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna Język JAVA podstawy Wykład 3, część 3 1 Język JAVA podstawy Plan wykładu: 1. Konstrukcja kodu programów w Javie 2. Identyfikatory, zmienne 3. Typy danych 4. Operatory, instrukcje sterujące instrukcja warunkowe,

Bardziej szczegółowo

Język skryptowy: Laboratorium 1. Wprowadzenie do języka Python

Język skryptowy: Laboratorium 1. Wprowadzenie do języka Python Język skryptowy: Laboratorium 1. Wprowadzenie do języka Python Język PYTHON Podstawowe informacje Python to język skryptowy, interpretowany - co oznacza, że piszemy skrypt, a następnie wykonujemy go za

Bardziej szczegółowo

Programowanie obiektowe

Programowanie 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ółowo

XQuery. sobota, 17 grudnia 11

XQuery. sobota, 17 grudnia 11 XQuery XQuery XQuery pozwala na wydobywanie danych z dokumentów XML w sposób podobny do tego w jaki używany jest SQL do tabel w bazach danych. XQuery to język do wykonywania zapytań na dokumentach XML.

Bardziej szczegółowo

I - Microsoft Visual Studio C++

I - Microsoft Visual Studio C++ I - Microsoft Visual Studio C++ 1. Nowy projekt z Menu wybieramy File -> New -> Projekt -> Win32 Console Application w okienku Name: podajemy nazwę projektu w polu Location: wybieramy miejsce zapisu i

Bardziej szczegółowo

Informatyka I. Klasy i obiekty. Podstawy programowania obiektowego. dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2018

Informatyka I. Klasy i obiekty. Podstawy programowania obiektowego. dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2018 Informatyka I Klasy i obiekty. Podstawy programowania obiektowego dr inż. Andrzej Czerepicki Politechnika Warszawska Wydział Transportu 2018 Plan wykładu Pojęcie klasy Deklaracja klasy Pola i metody klasy

Bardziej szczegółowo

Wstęp do programowania

Wstęp do programowania Wstęp do programowania Podstawowe konstrukcje programistyczne Paweł Daniluk Wydział Fizyki Jesień 2013 P. Daniluk (Wydział Fizyki) WP w. II Jesień 2013 1 / 34 Przypomnienie Programowanie imperatywne Program

Bardziej szczegółowo

PROGRAMOWANIE W PYTHONIE OD PIERWSZYCH KROKÓW

PROGRAMOWANIE W PYTHONIE OD PIERWSZYCH KROKÓW PROGRAMOWANIE W PYTHONIE OD PIERWSZYCH KROKÓW http://metodycy.torun.pl/ m.informatyka@metodycy.torun.pl 1. Wprowadzenie do Pythona podstawowe informacje Python to język programowania wysokiego poziomu,

Bardziej szczegółowo

Python wprowadzenie. Warszawa, 24 marca PROGRAMOWANIE I SZKOLENIA

Python wprowadzenie. Warszawa, 24 marca PROGRAMOWANIE I SZKOLENIA Python wprowadzenie Warszawa, 24 marca 2017 Python to język: nowoczesny łatwy w użyciu silny można pisać aplikacje Obiektowy klejący może być zintegrowany z innymi językami np. C, C++, Java działający

Bardziej szczegółowo

Języki i Paradygmaty Programowania

Języki i Paradygmaty Programowania Języki i Paradygmaty Programowania Odkrywamy Haskell Marcin Benke 24 lutego 2014 Odkrywamy Haskell Haskell zasadniczo kompilowany, ale też interpreter: ghci $ ghci GHCi, version 7.6.2: http://www.haskell.org/ghc/

Bardziej szczegółowo

λ parametry. wartość funkcji suma = λ x y. x + y kwadrat = λ x. x * x K.M. Ocetkiewicz, 2008 WETI, PG 2 K.M. Ocetkiewicz, 2008 WETI, PG 3

λ parametry. wartość funkcji suma = λ x y. x + y kwadrat = λ x. x * x K.M. Ocetkiewicz, 2008 WETI, PG 2 K.M. Ocetkiewicz, 2008 WETI, PG 3 Organizacja przedmiotu Języki programowania (Programming language concepts) Krzysztof M. Ocetkiewicz pok. 205 email: Krzysztof.Ocetkiewicz@eti.pg.gda.pl konsultacje: czwartek 10:15-11.00, 13:15-14:00 projekt:

Bardziej szczegółowo

Wstęp do Programowania potok funkcyjny

Wstęp do Programowania potok funkcyjny Wstęp do Programowania potok funkcyjny Marcin Kubica 2016/2017 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ółowo

Podstawy i języki programowania

Podstawy i języki programowania Podstawy i języki programowania Laboratorium 1 - wprowadzenie do przedmiotu mgr inż. Krzysztof Szwarc krzysztof@szwarc.net.pl Sosnowiec, 16 października 2017 1 / 25 mgr inż. Krzysztof Szwarc Podstawy i

Bardziej szczegółowo

PLAN WYNIKOWY PROGRAMOWANIE APLIKACJI INTERNETOWYCH. KL III TI 4 godziny tygodniowo (4x30 tygodni =120 godzin ),

PLAN WYNIKOWY PROGRAMOWANIE APLIKACJI INTERNETOWYCH. KL III TI 4 godziny tygodniowo (4x30 tygodni =120 godzin ), PLAN WYNIKOWY PROGRAMOWANIE APLIKACJI INTERNETOWYCH KL III TI 4 godziny tygodniowo (4x30 tygodni =120 godzin ), Program 351203 Opracowanie: Grzegorz Majda Tematyka zajęć 1. Wprowadzenie do aplikacji internetowych

Bardziej szczegółowo

Podstawy programowania. Wprowadzenie

Podstawy programowania. Wprowadzenie Podstawy programowania Wprowadzenie Proces tworzenia programu Sformułowanie problemu funkcje programu zakres i postać danych postać i dokładność wyników Wybór / opracowanie metody rozwiązania znaleźć matematyczne

Bardziej szczegółowo

Wstęp do programowania

Wstęp do programowania Wstęp do programowania Programowanie funkcyjne Paweł Daniluk Wydział Fizyki Jesień 2013 P. Daniluk(Wydział Fizyki) WP w. XIV Jesień 2013 1 / 25 Paradygmaty programowania Programowanie imperatywne Program

Bardziej szczegółowo

Kurs rozszerzony języka Python

Kurs rozszerzony języka Python Wykład 1. 6 października 2017 Plan wykładu 1 2 3 4 Plan wykładu 1 2 3 4 Wykładowca: Termin wykładu: piątek, 10:15 12:00, sala 119 Strona wykładu http://www.ii.uni.wroc.pl/ marcinm/dyd/python Materiały

Bardziej szczegółowo

SZYBKO ZROZUMIEĆ VISUAL BASIC 2012 Artur Niewiarowski -

SZYBKO ZROZUMIEĆ VISUAL BASIC 2012 Artur Niewiarowski - S t r o n a 2 SZYBKO ZROZUMIEĆ VISUAL BASIC 2012 Artur Niewiarowski - Copyright by Artur Niewiarowski 2013 ISBN: 978-83-937802-0-4 - Artur Niewiarowski Self-Publishing - All rights reserved. Wszelkie prawa

Bardziej szczegółowo

Programowanie obiektowe zastosowanie języka Java SE

Programowanie obiektowe zastosowanie języka Java SE Programowanie obiektowe zastosowanie języka Java SE Wstęp do programowania obiektowego w Javie Autor: dr inŝ. 1 Java? Java język programowania obiektowo zorientowany wysokiego poziomu platforma Javy z

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

Wykład 3 Składnia języka C# (cz. 2)

Wykł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ółowo

Analiza leksykalna 1. Teoria kompilacji. Dr inż. Janusz Majewski Katedra Informatyki

Analiza leksykalna 1. Teoria kompilacji. Dr inż. Janusz Majewski Katedra Informatyki Analiza leksykalna 1 Teoria kompilacji Dr inż. Janusz Majewski Katedra Informatyki Zadanie analizy leksykalnej Kod źródłowy (ciąg znaków) Analizator leksykalny SKANER Ciąg symboli leksykalnych (tokenów)

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

Opis zagadnieo 1-3. Iteracja, rekurencja i ich realizacja

Opis zagadnieo 1-3. Iteracja, rekurencja i ich realizacja Opis zagadnieo 1-3 Iteracja, rekurencja i ich realizacja Iteracja Iteracja to czynnośd powtarzania (najczęściej wielokrotnego) tej samej instrukcji (albo wielu instrukcji) w pętli. Mianem iteracji określa

Bardziej szczegółowo

LibreOffice Calc VBA

LibreOffice Calc VBA LibreOffice Calc VBA LibreOffice Calc umożliwia tworzenie własnych funkcji i procedur przy użyciu składni języka VBA. Dostęp do edytora makr: Narzędzia->Makra->Zarządaj makrami->libreoffice Calc Aby rozpocząć

Bardziej szczegółowo

Java EE produkcja oprogramowania

Java EE produkcja oprogramowania Java EE produkcja oprogramowania PPJ PODSTAWY PROGRAMOWANIA W JAVIE PODSTAWY JĘZYKA JAVA 1 Warszawa, 2016Z 2 Ogólna charakterystyka języka Java 3 Java 1/2 Język programowania Java został opracowany przez

Bardziej szczegółowo

Programowanie dla początkujących w 24 godziny / Greg Perry, Dean Miller. Gliwice, cop Spis treści

Programowanie dla początkujących w 24 godziny / Greg Perry, Dean Miller. Gliwice, cop Spis treści Programowanie dla początkujących w 24 godziny / Greg Perry, Dean Miller. Gliwice, cop. 2017 Spis treści O autorach 11 Podziękowania 12 Wprowadzenie 13 CZĘŚĆ I ZACZNIJ PROGRAMOWAĆ JUŻ DZIŚ Godzina 1. Praktyczne

Bardziej szczegółowo

Programowanie Komputerów

Programowanie Komputerów Programowanie Komputerów Łukasz Kuszner pokój 209, WETI http://www.kaims.pl/ kuszner/ kuszner@eti.pg.gda.pl Wykład 30 godzin, Laboratoria 30 godzin 2012/ Strona 1 z 28 1. Tablice w C# Indeksowane od zera

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 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

Wprowadzenie do języka Java

Wprowadzenie do języka Java WSNHiD, Programowanie 2 Lab. 1 [ część 1 ] Wprowadzenie do języka Java Wprowadzenie Język programowania Java jest obiektowym językiem programowania. Powstał w 1995 i od tej pory był intensywnie rozwijany.

Bardziej szczegółowo

Python wstęp do programowania dla użytkowników WCSS

Python 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ółowo

Wstęp do Programowania potok funkcyjny

Wstę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ółowo

Typy, klasy typów, składnie w funkcji

Typy, 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ółowo

Analiza leksykalna 1. Języki formalne i automaty. Dr inż. Janusz Majewski Katedra Informatyki

Analiza leksykalna 1. Języki formalne i automaty. Dr inż. Janusz Majewski Katedra Informatyki Analiza leksykalna 1 Języki formalne i automaty Dr inż. Janusz Majewski Katedra Informatyki Zadanie analizy leksykalnej Kod źródłowy (ciąg znaków) Analizator leksykalny SKANER Ciąg symboli leksykalnych

Bardziej szczegółowo

- nawiasy kwadratowe oznaczają, że to lista

- 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ółowo

Języki skryptowe w programie Plans

Języki skryptowe w programie Plans Języki skryptowe w programie Plans Warsztaty uŝytkowników programu PLANS Kościelisko 2010 Zalety skryptów Automatyzacja powtarzających się czynności Rozszerzenie moŝliwości programu Budowa własnych algorytmów

Bardziej szczegółowo

Algorytmy i struktury danych

Algorytmy i struktury danych Algorytmy i struktury danych 4. Łódź 2018 Suma szeregu harmonicznego - Wpisz kod programu w oknie edycyjnym - Zapisz kod w pliku harmonic.py - Uruchom skrypt (In[1]: run harmonic.py) - Ten program wykorzystuje

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

Zaawansowane aplikacje WWW - laboratorium

Zaawansowane aplikacje WWW - laboratorium Zaawansowane aplikacje WWW - laboratorium Przetwarzanie XML (część 2) Celem ćwiczenia jest przygotowanie aplikacji, która umożliwi odczyt i przetwarzanie pliku z zawartością XML. Aplikacja, napisana w

Bardziej szczegółowo

Program szkolenia VBA (VISUAL BASIC FOR APPLICATIONS) W EXCELU PODSTAWOWY.

Program szkolenia VBA (VISUAL BASIC FOR APPLICATIONS) W EXCELU PODSTAWOWY. Program szkolenia VBA (VISUAL BASIC FOR APPLICATIONS) W EXCELU PODSTAWOWY SZKOLENIE JEST DLA OSÓB, KTÓRE: nigdy wcześniej nie programowały lub nie miały styczności z programowaniem od dłuższego czasu,

Bardziej szczegółowo

Technologie cyfrowe semestr letni 2018/2019

Technologie cyfrowe semestr letni 2018/2019 Technologie cyfrowe semestr letni 2018/2019 Tomasz Kazimierczuk Wykład 7 (08.04.2019) Wikipedia Programowanie komputerów proces projektowania, tworzenia, testowania i utrzymywania kodu źródłowego programów

Bardziej szczegółowo

JAVA. Platforma JSE: Środowiska programistyczne dla języka Java. Wstęp do programowania w języku obiektowym. Opracował: Andrzej Nowak

JAVA. Platforma JSE: Środowiska programistyczne dla języka Java. Wstęp do programowania w języku obiektowym. Opracował: Andrzej Nowak JAVA Wstęp do programowania w języku obiektowym Bibliografia: JAVA Szkoła programowania, D. Trajkowska Ćwiczenia praktyczne JAVA. Wydanie III,M. Lis Platforma JSE: Opracował: Andrzej Nowak JSE (Java Standard

Bardziej szczegółowo

Programowanie MorphX Ax

Programowanie MorphX Ax Administrowanie Czym jest system ERP? do systemu Dynamics Ax Obsługa systemu Dynamics Ax Wyszukiwanie informacji, filtrowanie, sortowanie rekordów IntelliMorph : ukrywanie i pokazywanie ukrytych kolumn

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

Rok akademicki: 2012/2013 Kod: ZIE-1-306-s Punkty ECTS: 3. Poziom studiów: Studia I stopnia Forma i tryb studiów: -

Rok akademicki: 2012/2013 Kod: ZIE-1-306-s Punkty ECTS: 3. Poziom studiów: Studia I stopnia Forma i tryb studiów: - Nazwa modułu: Programowanie obiektowe Rok akademicki: 2012/2013 Kod: ZIE-1-306-s Punkty ECTS: 3 Wydział: Zarządzania Kierunek: Informatyka i Ekonometria Specjalność: - Poziom studiów: Studia I stopnia

Bardziej szczegółowo

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki Dariusz Brzeziński Politechnika Poznańska, Instytut Informatyki Język programowania prosty bezpieczny zorientowany obiektowo wielowątkowy rozproszony przenaszalny interpretowany dynamiczny wydajny Platforma

Bardziej szczegółowo

Język programowania zbiór reguł określających, które ciągi symboli tworzą program komputerowy oraz jakie obliczenia opisuje ten program.

Ję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ółowo

Programowanie funkcyjne (Haskell Wprowadzenie) Kowalik Adrian

Programowanie funkcyjne (Haskell Wprowadzenie) Kowalik Adrian Programowanie funkcyjne (Haskell Wprowadzenie) Kowalik Adrian Programowanie funkcyjne Krótka geneza języka Haskell Polecenia i składnia języka Funkcje i wyrażenia Typy i typy klasowe Listy i krotki Programowanie

Bardziej szczegółowo

WPROWADZENIE DO JĘZYKA JAVA

WPROWADZENIE DO JĘZYKA JAVA WPROWADZENIE DO JĘZYKA JAVA programowanie obiektowe KRÓTKA HISTORIA JĘZYKA JAVA KRÓTKA HISTORIA JĘZYKA JAVA 1991 - narodziny języka java. Pierwsza nazwa Oak (dąb). KRÓTKA HISTORIA JĘZYKA JAVA 1991 - narodziny

Bardziej szczegółowo

I. WSTĘP. Przykład 1. Przykład 2. Programowanie czyli tworzenie programów komputerowych (aplikacji komputerowych)

I. WSTĘP. Przykład 1. Przykład 2. Programowanie czyli tworzenie programów komputerowych (aplikacji komputerowych) I. WSTĘP Programowanie czyli tworzenie programów komputerowych (aplikacji komputerowych) Algorytm - sposób na osiągnięcie celu w pewnych ograniczonych krokach. Program komputerowy realizuje zawsze algorytm.

Bardziej szczegółowo

Wykład 15. Literatura. Kompilatory. Elementarne różnice. Preprocesor. Słowa kluczowe

Wykład 15. Literatura. Kompilatory. Elementarne różnice. Preprocesor. Słowa kluczowe Wykład 15 Wprowadzenie do języka na bazie a Literatura Podobieństwa i różnice Literatura B.W.Kernighan, D.M.Ritchie Język ANSI Kompilatory Elementarne różnice Turbo Delphi FP Kylix GNU (gcc) GNU ++ (g++)

Bardziej szczegółowo

Katedra Elektrotechniki Teoretycznej i Informatyki. wykład 12 - sem.iii. M. Czyżak

Katedra Elektrotechniki Teoretycznej i Informatyki. wykład 12 - sem.iii. M. Czyżak Katedra Elektrotechniki Teoretycznej i Informatyki wykład 12 - sem.iii M. Czyżak Język C - preprocesor Preprocesor C i C++ (cpp) jest programem, który przetwarza tekst programu przed przekazaniem go kompilatorowi.

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

Kostki OLAP i język MDX

Kostki OLAP i język MDX Kostki OLAP i język MDX 24 kwietnia 2015 r. Opis pliku z zadaniami Wszystkie zadania na zajęciach będą przekazywane w postaci plików PDF sformatowanych jak ten. Będą się na nie składały różne rodzaje zadań,

Bardziej szczegółowo

Visual C# dla zupełnie początkujących / Tony Gaddis. Wydanie IV. Gliwice, copyright Spis treści. Wstęp 11. Uwaga, czytelnicy 19

Visual C# dla zupełnie początkujących / Tony Gaddis. Wydanie IV. Gliwice, copyright Spis treści. Wstęp 11. Uwaga, czytelnicy 19 Visual C# dla zupełnie początkujących / Tony Gaddis. Wydanie IV. Gliwice, copyright 2019 Spis treści Wstęp 11 Uwaga, czytelnicy 19 Rozdział 1. Wstępne informacje na temat komputerów i programowania 21

Bardziej szczegółowo

1 Wprowadzenie do algorytmiki

1 Wprowadzenie do algorytmiki Teoretyczne podstawy informatyki - ćwiczenia: Prowadzący: dr inż. Dariusz W Brzeziński 1 Wprowadzenie do algorytmiki 1.1 Algorytm 1. Skończony, uporządkowany ciąg precyzyjnie i zrozumiale opisanych czynności

Bardziej szczegółowo

Java. 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 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ółowo

Języki i metody programowania Java Lab1 https://docs.oracle.com/javase/tutorial/ Zofia Kruczkiewicz

Języki i metody programowania Java Lab1 https://docs.oracle.com/javase/tutorial/ Zofia Kruczkiewicz Języki i metody programowania Java Lab1 https://docs.oracle.com/javase/tutorial/ Zofia Kruczkiewicz Zadanie 1. Wykonanie projektu Java SE w środowisku Netbeans- File/New Project W formularzu New Project

Bardziej szczegółowo

METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02

METODY 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ółowo

Wykład 0 Informacje Podstawowe

Wykład 0 Informacje Podstawowe Paradygmaty Programowania Wykład 0 Informacje Podstawowe Nieliniowej, WMiI UŁ 1 Informacje Ogólne (22 luty 2013) Wykłady: piątek, 10.00-12.00, D103 Wykłady: 1 wprowadzający +10 wykładów głównych Zaliczenie

Bardziej szczegółowo

Narzędzie pomocnicze do przedmiotu Podstawy Informatyki - złożoność obliczeniowa

Narzędzie pomocnicze do przedmiotu Podstawy Informatyki - złożoność obliczeniowa Narzędzie pomocnicze przedmiotu Podstawy Informatyki - złożoność obliczeniowa Piotr Jeruszka 1 25 listopada 2013 1 Instytut Informatyki Teoretycznej i Stosowanej Politechnika Częstochowska pjeruszka@icis.pcz.pl

Bardziej szczegółowo

JAVA. Java jest wszechstronnym językiem programowania, zorientowanym. apletów oraz samodzielnych aplikacji.

JAVA. Java jest wszechstronnym językiem programowania, zorientowanym. apletów oraz samodzielnych aplikacji. JAVA Java jest wszechstronnym językiem programowania, zorientowanym obiektowo, dostarczającym możliwość uruchamiania apletów oraz samodzielnych aplikacji. Java nie jest typowym kompilatorem. Źródłowy kod

Bardziej szczegółowo

Metody Kompilacji Wykład 3

Metody 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ół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