ZAAWANSOWANE JĘZYKI PROGRAMOWANIA

Podobne dokumenty
ZAAWANSOWANEJĘZYKI PROGRAMOWANIA

ZAAWANSOWANE JĘZYKI PROGRAMOWANIA

JĘZYKI PROGRAMOWANIA

ZASADY PROGRAMOWANIA KOMPUTERÓW

TABLICE W JĘZYKU C/C++ typ_elementu nazwa_tablicy [wymiar_1][wymiar_2]... [wymiar_n] ;

Funkcje. Funkcje. liczba rzeczywista r punkt, w którym wartość wielomianu nas interesuje. Szukane: liczba rzeczywista

Stefan Sokołowski JĘZYKIPROGRAMOWANIA. Inst. Informatyki UG, Gdańsk, 2012/2013

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

Wprowadzenie. Organizacja pracy i środowisko programistyczne. Mirosław Ochodek

3. Podaj elementy składowe jakie powinna uwzględniać definicja informatyki.

JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM. Wykład 6

Podstawy programowania C. dr. Krystyna Łapin

Wstęp do Informatyki dla bioinformatyków

Podstawy programowania. Wykład 7 Tablice wielowymiarowe, SOA, AOS, itp. Krzysztof Banaś Podstawy programowania 1

Paradygmaty programowania

Zapisywanie algorytmów w języku programowania

Rekurencja. Przygotowała: Agnieszka Reiter

JĘZYKIFORMALNE IMETODYKOMPILACJI

tablica: dane_liczbowe

Podstawy Programowania C++

Języki i paradygmaty programowania. I. Wprowadzenie

4 Literatura. c Dr inż. Ignacy Pardyka (Inf.UJK) ASK MP.01 Rok akad. 2011/ / 24

Nazwa wariantu modułu (opcjonalnie): Laboratorium programowania w języku C++

INFORMATYKA, TECHNOLOGIA INFORMACYJNA ORAZ INFORMATYKA W LOGISTYCE

typ_zwracanej_wartości nazwa_funkcji(lista deklaracji argumentów) { ciało(treść) funkcji return Val; //zwracana wartość }

Języki programowania zasady ich tworzenia

Programowanie komputerów

JĘZYKI FORMALNE I METODY KOMPILACJI

Technologie cyfrowe. Artur Kalinowski. Zakład Cząstek i Oddziaływań Fundamentalnych Pasteura 5, pokój 4.15

Uniwersytet Zielonogórski Instytut Sterowania i Systemów Informatycznych. Ćwiczenie 3 stos Laboratorium Metod i Języków Programowania

1. Liczby i w zapisie zmiennoprzecinkowym przedstawia się następująco

Programowanie. Projektowanie funkcje programu tworzenie algorytmu i struktur danych. Programowanie implementacja algorytmu kompilacja programu

kiedy znowu uzyska sterowanie, to podejmuje obliczenie od miejsca, w którym poprzednio przerwała, i z dotychczasowymi wartościami zmiennych,

Programowanie komputerowe. Zajęcia 3

zmienne stanowią abstrakcję komórek pamięci: programista może przechowywać dane w pamięci, nie martwiąc się o techniczne szczegóły (np.

Język C++ zajęcia nr 2

Wykład V. Rzut okiem na języki programowania. Studia Podyplomowe INFORMATYKA Podstawy Informatyki

Wstęp do informatyki- wykład 12 Funkcje (przekazywanie parametrów przez wartość i zmienną)

Kurs programowania. Wstęp - wykład 0. Wojciech Macyna. 22 lutego 2016

Podstawy Programowania. Wykład 1

Podstawy programowania. Wykład 3 Konstrukcje sterujące. Krzysztof Banaś Podstawy programowania 1

Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni. Wykład 3. Karol Tarnowski A-1 p.

4. Funkcje. Przykłady

Jeśli chcesz łatwo i szybko opanować podstawy C++, sięgnij po tę książkę.

Wstęp do programowania

Podstawy Programowania

Wieczorowe Studia Licencjackie Wrocław, Wykład nr 6 (w oparciu o notatki K. Lorysia, z modyfikacjami) Sito Eratostenesa

Personal Home Page PHP: Hypertext Preprocessor

KARTA PRZEDMIOTU. Egzamin / zaliczenie. Egzamin / zaliczenie. ocenę*

Architektura komputerów

Algorytmika i pseudoprogramowanie

Wstęp do programowania

Opisy efektów kształcenia dla modułu

Laboratorium nr 1. i 2.

Wstęp do programowania

Programowanie w C++ Wykład 3. Katarzyna Grzelak. 12 marca K.Grzelak (Wykład 1) Programowanie w C++ 1 / 35

12. Rekurencja. UWAGA Trzeba bardzo dokładnie ustalić <warunek>, żeby mieć pewność, że ciąg wywołań się zakończy.

Podstawy programowania w języku C

JĘZYKI FORMALNE I METODY KOMPILACJI

Proste algorytmy w języku C

KARTA KURSU. Wstęp do programowania

PARADYGMATY PROGRAMOWANIA Wykład 4

Laboratorium 5: Tablice. Wyszukiwanie binarne

Programowanie Komponentowe WebAPI

Wstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy. Wykład 1. Karol Tarnowski A-1 p.

PROLOG WSTĘP DO INFORMATYKI. Akademia Górniczo-Hutnicza. Wydział Elektrotechniki, Automatyki, Informatyki i Inżynierii Biomedycznej.

Jerzy Nawrocki, Wprowadzenie do informatyki

Podstawy Informatyki Języki programowania c.d.

Programowanie Strukturalne i Obiektowe Słownik podstawowych pojęć 1 z 5 Opracował Jan T. Biernat

DYNAMICZNE PRZYDZIELANIE PAMIECI

Rok akademicki: 2013/2014 Kod: JFT s Punkty ECTS: 5. Poziom studiów: Studia I stopnia Forma i tryb studiów: Stacjonarne

Programowanie w języku Python. Grażyna Koba

ECDL Podstawy programowania Sylabus - wersja 1.0

Programowanie w języku C++ Podstawowe paradygmaty programowania

Programowanie Niskopoziomowe

Wykład 8. Rekurencja. Iterować jest rzeczą ludzką, wykonywać rekursywnie boską. L. Peter Deutsch

Język programowania PASCAL

Programowanie obiektowo zorientowane. Mirosław Głowacki Wykład w języku C++

1 Wskaźniki. 1.1 Główne zastosowania wskaźników

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

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

Jerzy Nawrocki, Wprowadzenie do informatyki

KARTA PRZEDMIOTU. 1. NAZWA PRZEDMIOTU: Algorytmizacja i programowanie. 2. KIERUNEK: Matematyka. 3. POZIOM STUDIÓW: I stopnia

Języki formalne i techniki translacji

Wstęp do informatyki. System komputerowy. Magistrala systemowa. Architektura komputera. Cezary Bolek

MATERIAŁY DO ZAJĘĆ I. Podstawowe pojęcia. Algorytm. Spis treści Przepis

C++ - przeciążanie operatorów. C++ - przeciążanie operatorów. C++ - przeciążanie operatorów. C++ - przeciążanie operatorów

Temat: Dynamiczne przydzielanie i zwalnianie pamięci. Struktura listy operacje wstawiania, wyszukiwania oraz usuwania danych.

Praktyka Programowania

KARTA PRZEDMIOTU. Programowanie niskopoziomowe, C2. Low Level Programming Informatyka

Stefan Sokołowski SZTUCZNAINTELIGENCJA. Inst. Informatyki UG, Gdańsk, 2009/2010

Komputer nie myśli. On tylko wykonuje nasze polecenia. Nauczmy się więc wydawać mu rozkazy

SZTUCZNA INTELIGENCJA

KARTA PRZEDMIOTU. Programowanie niskopoziomowe, C1

7. Pętle for. Przykłady

Podstawy programowania.

Wstęp do programowania. Procedury i funkcje. Piotr Chrząstowski-Wachtel

Podstawy informatyki. Elektrotechnika I rok. Język C++ Operacje na danych - wskaźniki Instrukcja do ćwiczenia

1 Podstawy c++ w pigułce.

PODSTAWY PROGRAMOWANIA STRUKTURALNEGO (C) SYLABUS A. Informacje ogólne

Transkrypt:

Stefan Sokołowski ZAAWANSOWANE JĘZYKI PROGRAMOWANIA Inst Informatyki, UG Gdańsk, 2016/2017 Zaawansowane Języki Programowania Wykład1,str1 Na http://infugedupl/ stefan/dydaktyka/zaawjezprog będą się stopniowo pojawiać: slajdy do wykładów szkicowy plan wykładu zadania z laboratorium spis literatury itd Uwaga: przeczytanie tych materiałów nie wystarczy do zaliczenia!

Zaawansowane Języki Programowania Wykład1,str2 Wymagania wstępne: zaliczone Języki programowania z I roku st lic(lub równoważne); obycie z programowaniem i biegłość w uruchamianiu programów Wymagania na zaliczenie: zaliczyć laboratorium przez sprawdziany(łatwa droga), lub sprawdziany+rozbójnik pod koniec semestru(trudniejsza droga), lub zaliczenie poprawkowe(bardzo trudna droga) na co najmniej 51%; zdać egzamin w sesji podstawowej lub poprawkowej procenty ocena p<51% 20 51% p<61 30 61% p<71 35 71% p<81 40 81% p<91 45 91% p 50 Tradycyjne dziedziny zastosowań Wykład1,str3 Nauka(fizyka, astronomia, technika) proste struktury danych(tablice), dużo obliczeń na liczbach rzeczywistych Fortran,Algol60, Biznes sporządzanie skomplikowanych zestawień i sprawozdań Cobol Sztucznainteligencja działania na symbolach(listy), elastyczność Lisp, Prolog Programowaniesystemowe dostęp do cech niskiego poziomu(dla efektywności) PL/I,C, Internet niezależność od platformy, wymagania bezpieczeństwa PHP,JavaScript,

Wykład1,str4 Człowiek kulturalny zamienia się w bestię w trzech przypadkach: kiedy siada za kierownicę samochodu, kiedyjegodrużynagraważnymecz, kiedy dyskutuje o wyższości jednego języka programowania nadinnym Wykład1,str5 czytelność programów pisalność (łatwość pisania) programów niezawodność programów koszty

Wykład1,str6 Czytelność programów rozumienie kodu praca wspólna pielęgnacja prostota języka: wiele konstruktów podstawowych dłuższa nauka programiści często znają tylko podzbiór, każdy inny wiele sposobów powiedzenia tego samego czytanie programów wymaga staranniejszej analizy wiele sposobów powiedzenia prawie tego samego jeszcze gorzej n=n+1; n+=1; n++; ++n; wieloznaczności w języku(np w C: & ma dwa różne znaczenia) bardzo zmniejszają czytelność ALE języki bardzo proste wymagają długich programów, co zmniejsza czytelność Wykład1,str7 Czytelność programów rozumienie kodu praca wspólna pielęgnacja ortogonalność pojęć ogólne zasady, stosowalne w ten sam sposób do wszystkiego (ortogonalność) M w C elementy struktury mogą mieć dowolny typ, również tablicowy w C elementy tablicy mogą mieć dowolny typ, również strukturowy tablicewewnątrzstruktur,zawartewtablicach,itpsąok tablice i struktury są ortogonalne (nieortogonalność) MwCwartośćoddawanaprzezfunkcjęmożemiećdowolnytypzwyjątkiem tablicowego typy i funkcje nie są ortogonalne

Wykład1,str8 Czytelność programów rozumienie kodu praca wspólna pielęgnacja ortogonalność pojęć ogólne zasady, stosowalne w ten sam sposób do wszystkiego (ortogonalność) M w języku wewn minikomputerów VAX: dodawanie komórki do rejestru ozn ADDL rejestr komórka dodawanie rejestru do rejestru ozn ADDL rejestr rejestr można w ten sposób dodać wszystko do wszystkiego (nieortogonalność) M w języku wewn dużych komputerów IBM: dodawanie komórki do rejestru ozn A rejestr komórka dodawanie rejestru do rejestru ozn AR rejestr rejestr w żaden sposób nie można dodać niczego do komórki pamięci Wykład1,str9 Czytelność programów rozumienie kodu praca wspólna pielęgnacja ortogonalność pojęć ogólne zasady, stosowalne w ten sam sposób do wszystkiego ALE zbyt dużo ortogonalności może zmniejszyć czytelność MW Algolu 68 wyrażenia warunkowe i inne rzeczy mogą występować po obu stronach przypisania: ifa<bthenaelsebfi := 0

Wykład1,str10 Czytelność programów szczegóły składni: język C x=arg; nizej=0; wyzej=x+1; while(wyzej-nizej > 1) { srodek =(nizej+wyzej)/2; if(srodek*srodek <= x) { nizej = srodek; else { wyzej = srodek; printf(" sqrt(%i) =%i\n", x,nizej); gorzej:identyczneklamry { język Bash x=$1 nizej=0; wyzej=x+1 while[$[wyzej-nizej]-gt1] do srodek=$[(nizej+wyzej)/2] if[$[srodek*srodek]-le$x] then nizej=$srodek else wyzej=$srodek fi done echo" sqrt($x) =$nizej" lepiej:słowakluczoweiffi dodone Wykład1,str11 Łatwość pisania programów prostota i ortogonalność: duża liczba gotowych konstrukcji trudno się ich nauczyć i łatwo użyć błędnie mała liczba gotowych konstrukcji i reguły do ich łączenia łatwo(po minimalnej nauce) wymyślić dobry program ALE przesadna ortogonalność, kiedy każda kombinacja symboli coś dla kompilatora znaczy, utrudnia wykrycie błędu

Wykład1,str12 Łatwość pisania programów abstrakcja możliwość definiowania złożonych danych i operacji i używania ich bez pamiętania szczegółów definicji abstrakcja procesu: np podprogram(funkcja), którego wywołania mogą być używane jak predefiniowane operacje abstrakcja danych: np definicja drzewa binarnego jeśli możemy zdefiniować wierzchołki drzewa: 4 2 1 5 3 jeśli drzewo musimy implementować w tablicach: 1 2 3 2 4 5 3 0 0 4 0 0 5 0 0 Wykład1,str13 Łatwość pisania programów ekspresywność łatwość wyrażenia w języku pojęć potrzebnych do obliczeń M dla każdego elementu tablicy wydrukować jego indeks i wartość język C for(int i=0; i<dlug TABL; i++) printf("%i:%lf\n", i,tabl[i]); gorzej: obliczenie język PHP foreach($tabl as $ind => $wart) echo" $ind: $wart\n"; lepiej: wyrażone wprost

Wykład1,str14 Łatwość pisania programów ekspresywność łatwość wyrażenia w języku pojęć potrzebnych do obliczeń M zaprogramować wieże Hanoi 1 2 3 mamy przełożyć wszystkie krążki z pałeczki 1 na pałeczkę 3, używając pomocniczo pałeczki 2, na raz wolno przełożyć tylko jeden krążek, nigdy nie wolno kłaść krążka większego na mniejszy Wykład1,str15 Łatwość pisania programów ekspresywność łatwość wyrażenia w języku pojęć potrzebnych do obliczeń M zaprogramować wieże Hanoi zrekursją void Hanoi(int n, inta,intb,intc) { /*nkrążków zpałeczkianapałeczkęc*/ if(n>0) { Hanoi(n-1, a, c, b); przełóżkrążekzanac; Hanoi(n-1, b, a, c); bez rekursji skomplikowane operacje na stosie rekursja poprawia ekspresywność

Wykład1,str16 Niezawodność sprawdzanie typu: M printf("witam!\n"+1); bez sprawdzania typów: itam! ze sprawdzaniem typów: sygnał błędu M printf("%i\n",100); bez sprawdzania typów: 1624615624 (C daje ostrzeżenie) ze sprawdzaniem typów: sygnał błędu Wykład1,str17 Niezawodność reakcja na wyjątki(błędy wykonania): M double srednia(int N, double tab[n]) { doublesuma=00; for(inti=0;i<n;i++) suma+=tab[i]; return suma/n; Co zmienić, żeby program sensownie reagował na sytuację, gdy N = 0? bez obsługi wyjątków: przebudować funkcję srednia, albo zgodzić się, że program czasem padnie z obsługą wyjątków: zaprogramować własną reakcję

Wykład1,str18 Niezawodność unikanie aliasów: M inta;int b=&a; a=0; b=1; printf("a==%i\n",a); Drukuje: 1, chociaż wartość zmiennej a nie została jawnie zmieniona Aliasy pozwalają na niejawną zmianę wartości, a to prowadzi do błędów Wykład1,str19 Koszt stworzenia programu pielęgnacji niezawodności koszt każdorazowego wykonania programu(zależy od natury zagadnienia i jakości stosowanego algorytmu) koszt kompilacji programu(zależy od prostoty języka i jakości kompilatora) koszt napisania programu(zależy od łatwości pisania) koszt pielęgnacji programu(zależy od czytelności) koszt zawodności programu koszt nauczenia się języka(zależy od jego prostoty i ortogonalności)

Co kształtuje języki programowania? Wykład1,str20 Architektura komputera(bardzo uproszczona) PAMIĘĆ PROCESOR 0 1 2 3 4 5 licz rozkazów rejestr arytm WEJŚCIE/WYJŚCIE n 1 Komputer von Neumanna: bierna pamięć adresowana(numerowana); w niej rozkazy i dane; czynnyprocesor: licznik rozkazów wskazuje adres rozkazu do wykonania, działania wykonują się między rejestrem a komórką pamięci Co kształtuje języki programowania? Wykład1,str21 Architektura komputera(bardzo uproszczona) Komputer von Neumanna: inicjalizuj licznik rozkazów; while(prawda) { /*czylibezkońca*/ pobierz instrukcję spod adresu w licznrozk; zwiększ licznrozk o 1; wykonaj pobraną instrukcję; Taka architektura powoduje, że programowanie imperatywne(rozkazy dla komputera, jeden po drugim) jest bardziej naturalne dla komputera chociaż nie dla człowieka