dr inż. Jarosław Forenc



Podobne dokumenty
Informatyka 1. Wykład nr 8 ( ) Plan wykładu nr 8. Politechnika Białostocka. - Wydział Elektryczny. Asembler - przykład programu.

Informatyka 1. Wykład nr 8 ( ) Politechnika Białostocka. - Wydział Elektryczny. dr inŝ. Jarosław Forenc

Informatyka 1. Wykład nr 8 ( ) Plan wykładu nr 8. Politechnika Białostocka. - Wydział Elektryczny. language) Asembler - przykład programu

dr inż. Jarosław Forenc

Algorytmy komputerowe. dr inż. Jarosław Forenc

Konsultacje: dr inż. Jarosław Forenc

dr inż. Jarosław Forenc

Informatyka 1. Wykład nr 8 ( ) Politechnika Białostocka. - Wydział Elektryczny. dr inŝ. Jarosław Forenc

INFORMATYKA, TECHNOLOGIA INFORMACYJNA ORAZ INFORMATYKA W LOGISTYCE

dr inż. Jarosław Forenc

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

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

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

Algorytmy komputerowe. dr inŝ. Jarosław Forenc

Język ludzki kod maszynowy

Podstawy programowania. Wprowadzenie

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

Technologie informacyjne - wykład 12 -

Początki Javy. dr Anna Łazińska, WMiI UŁ Podstawy języka Java 1 / 8

Algorytmy od problemu do wyniku

Programowanie komputerów

Paradygmaty programowania

Java EE produkcja oprogramowania

Java jako język programowania

Język programowania PASCAL

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

Wykład 4. Algorytmy i programy. Algorytmy + struktury danych = programy. Niklaus Wirth. Algorytm = logika + sterowanie.

Wstęp do Informatyki. Program, proces tworzenia programu Środowisko programistyczne Języki programowania

Algorytm. a programowanie -

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

Historia modeli programowania

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

Matematyczne Podstawy Informatyki

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

Programowanie i projektowanie obiektowe

Język C++ wykład VIII

1. Nagłówek funkcji: int funkcja(void); wskazuje na to, że ta funkcja. 2. Schemat blokowy przedstawia algorytm obliczania

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

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

Czym jest Java? Rozumiana jako środowisko do uruchamiania programów Platforma software owa

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

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

Podstawy języka Java. przygotował:

Języki i paradygmaty programowania Wykład 2. Dariusz Wardowski. dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/18

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

Programowanie. Pascal - język programowania wysokiego poziomu. Klasa 2 Lekcja 9 PASCAL

Informatyka 1. Wykład nr 7 ( ) Politechnika Białostocka. - Wydział Elektryczny. dr inŝ. Jarosław Forenc

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

1 Wprowadzenie do algorytmiki

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

Informatyka 1. Wykład nr 7 ( ) Politechnika Białostocka. - Wydział Elektryczny. dr inŝ. Jarosław Forenc

Programowanie w języku C++ Podstawowe paradygmaty programowania

Języki i paradygmaty programowania. I. Wprowadzenie

Języki i paradygmaty programowania

Podstawy programowania wykład

2.8. Algorytmy, schematy, programy

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

wykład V uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C++ klasy i obiekty wykład V dr Jarosław Mederski Spis Język C++ - klasy

Techniki Programowania

Języki programowania zasady ich tworzenia

KONSTRUKCJA KOMPILATORÓW

Języki programowania Język programowania Język maszynowy Kod maszynowy

Programowanie obiektowe

Algorytmy. Programowanie Proceduralne 1

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

wstęp (podstawowe pojęcia związane z programowaniem, przegląd języków programowania, sieci działań, ogólne zasady programowania zorientowanego

Podstawy Programowania

Java. język programowania obiektowego. Programowanie w językach wysokiego poziomu. mgr inż. Anna Wawszczak

Wykład 8: klasy cz. 4

Microsoft IT Academy kurs programowania

Strona główna. Strona tytułowa. Programowanie. Spis treści. Sobera Jolanta Strona 1 z 26. Powrót. Full Screen. Zamknij.

Wstęp do programowania

Wstęp do Informatyki i Programowania

Podstawy programowania w języku C

Algorytmy. Programowanie Proceduralne 1

Programowanie I. Wprowadzenie. Proces programowania

Wstęp do Programowania Obiektowego. Wykład 13 Paradygmaty. Składnia i semantyka.

Praktyka Programowania

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

Programowanie obiektowe - 1.

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

Elżbieta Kula - wprowadzenie do Turbo Pascala i algorytmiki

Szablony funkcji i klas (templates)

Programowanie w Turbo Pascal

Technologie cyfrowe semestr letni 2018/2019

Algorytmy, reprezentacja algorytmów.

Podstawy programowania Laboratorium. Ćwiczenie 2 Programowanie strukturalne podstawowe rodzaje instrukcji

Podstawy programowania. Podstawy C# Przykłady algorytmów

Programowanie obiektowe Wykład 1. Dariusz Wardowski. dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/20

Spis treści. 1 Java T M

Pierwsze kroki. Algorytmy, niektóre zasady programowania, kompilacja, pierwszy program i jego struktura

Architektura komputerów

Wstęp do programowania. Wykład 1

Informatyka- wykład. Podstawy programowania w Pythonie. dr Marcin Ziółkowski

Wstęp do programowania

Programowanie obiektowe W1 Wprowadzenie. Dr hab. inż. Lucyna Leniowska, prof. UR Zakład Mechatroniki, Automatyki i Optoelektroniki

Algorytmika i pseudoprogramowanie

Programowanie, algorytmy i struktury danych

C# /.NET. Copyright by 3bird Projects 2018,

TEORETYCZNE PODSTAWY INFORMATYKI

Transkrypt:

Informatyka 1 Politechnika Białostocka - Wydział Elektryczny Elektrotechnika, semestr II, studia niestacjonarne I stopnia Rok akademicki 2011/2012 Wykład nr 9 (01.06.2012) dr inż. Jarosław Forenc

Rok akademicki 2011/2012, Wykład nr 9 2/63 Plan wykładu nr 9 Algorytmy komputerowe paradygmaty tworzenia programów komputerowych rekurencja złożoność obliczeniowa algorytmu Języki programowania kompilowane i interpretowane języki programowania generacje języków programowania przykłady języków programowania środowiska programistyczne

Rok akademicki 2011/2012, Wykład nr 9 3/63 Paradygmaty tworzenia programów komputerowych Strategia dziel i zwyciężaj Programowanie dynamiczne Algorytmy zachłanne Programowanie liniowe Algorytmy siłowe (brute force) Algorytmy probabilistyczne

Rok akademicki 2011/2012, Wykład nr 9 4/63 Strategia dziel i zwyciężaj Strategia dziel i zwyciężaj (ang. divide and conquer) - jedna z najefektywniejszych strategii konstruowania algorytmów w informatyce Rozwiązywany problem dzielony jest rekurencyjnie na dwa lub więcej mniejszych problemów tego samego (lub podobnego) typu tak długo, aż stanie się on wystarczająco prosty do bezpośredniego rozwiązania Rozwiązania otrzymane dla mniejszych podproblemów są scalane w celu uzyskania rozwiązania całego zadania Przykłady zastosowań: sortowanie szybkie (quicksort) wyszukiwanie binarne - sprawdzenie czy element znajduje się w uporządkowanej tablicy, jeśli tak, to zwracany jest jego indeks

Rok akademicki 2011/2012, Wykład nr 9 5/63 Programowanie dynamiczne Konstrukcja programu sformułowana jest w trzech etapach: Koncepcja: stworzenie rekurencyjnego modelu rozwiązania problemu (wraz z jednoznacznym określeniem przypadków elementarnych) stworzenie tablicy, zawierającej rozwiązania przypadków elementarnych i obliczonych na ich podstawie podproblemów Inicjacja: wpisanie do tablicy wartości dla przypadków elementarnych Progresja: obliczenie i wpisanie do tablicy rozwiązania problemu wyższego rzędu (na podstawie formuły rekurencyjnej i już wpisanych wartości) postępowanie w ten sam sposób do osiągnięcia pożądanej wartości

Rok akademicki 2011/2012, Wykład nr 9 6/63 Programowanie dynamiczne - przykład Koncepcja: (F 10 w ciągu Fibonacciego) model rekurencyjny, przypadki elementarne, tablica z rozwiązaniem F 0 = 0, F1 = 1, Fn = Fn 1 + Fn 2 n 0 1 2 3 4 5 6 7 8 9 10 F n Inicjacja: wpisanie do tablicy wartości dla przypadków elementarnych Progresja: n 0 1 2 3 4 5 6 7 8 9 10 F n 0 1 obliczenie rozwiązań problemów wyższego rzędu aż do osiągnięcia pożądanej wartości i wpisanie ich do tablicy n 0 1 2 3 4 5 6 7 8 9 10 F n 0 1 1 2 3 5 8 13 21 34 55

Rok akademicki 2011/2012, Wykład nr 9 7/63 Algorytmy zachłanne Algorytm zachłanny - w celu rozwiązania pewnego zadania w każdym kroku dokonuje się zachłannego, tj. najlepiej rokującego w danym momencie wyboru rozwiązania częściowego Algorytm podejmuje decyzję lokalnie optymalną, dokonując wyboru wydającego się w danej chwili najlepszym Dokonywany lokalnie najkorzystniejszy wybór ma w założeniu prowadzić do znalezienia globalnego optymalnego rozwiązania Algorytmy zachłanne stosowane są przede wszystkim w optymalizacji

Informatyka 1, studia niestacjonarne I stopnia dr inż. JarosławForenc Rok akademicki 2011/2012, Wykład nr 9 8/63 Programowanie liniowe Programowanie liniowe Programowanie liniowe - warunki ograniczające oraz funkcja celu mają postać liniową, np. warunki ograniczające: = + + + + + + + + + α α α n n 2 2 1 1 n n 2 2 1 1 x a x a x a x a x a x a x a x a x a K K K Zadanie polega na zmaksymalizowaniu (zminimalizowaniu) funkcji celu: wiele problemów można sprowadzić do maksymalizacji lub minimalizacji pewnej funkcji celu, przy ograniczonych zasobach i antagonistycznych warunkach programowanie liniowe znalazło szerokie zastosowanie w teorii decyzji, np. do optymalizacji planu produkcyjnego = + + + α n n 2 2 1 1 x a x a x a K c n x n x c x c f + + + + = K 2 2 1 1 α

Rok akademicki 2011/2012, Wykład nr 9 9/63 Programowanie liniowe Przykład: Fabryka produkuje urządzenia A i B. W ciągu jednego dnia można wytworzyć łącznie 200 urządzeń. Wyprodukowanie urządzenia A zajmuje 3 roboczogodziny, a B - 4 roboczogodziny. Dzienna liczba dostępnych roboczogodzin wynosi 600. W ciągu jednego dnia należy wyprodukować min. 50 urządzeń A i min. 50 urządzeń B. Zysk ze sprzedaży urządzenia A to 1000 PLN, a B - 1200 PLN. Ile urządzeń A i B należy dziennie wyprodukować, aby zysk był jak największy? Warunki ograniczające: Funkcja celu: x A + x B 200 f = 1000 x A + 1200 x B 3 x + 4 x 600 x A A, x B 50 B

Rok akademicki 2011/2012, Wykład nr 9 10/63 Algorytmy siłowe Algorytm siłowy (brute force) - opiera się na sukcesywnym sprawdzaniu wszystkich możliwych kombinacji w poszukiwaniu rozwiązania problemu Zazwyczaj nieoptymalny, ale najprostszy w implementacji W programowaniu termin ten odnosi się do dowolnego algorytmu, który rozwiązuje problem przez weryfikację i ocenę wszystkich wariantów postępowania

Rok akademicki 2011/2012, Wykład nr 9 11/63 Algorytmy probabilistyczne Algorytmy można podzielić na deterministyczne i probabilistyczne Dane wejściowe Dane wejściowe Algorytm deterministyczny Algorytm probabilistyczny Generator liczb losowych Dane wyjściowe Dane wyjściowe Działanie algorytmu deterministycznego jest całkowicie zależne od warunków początkowych (wejście), tzn. dla takich samych danych wejściowych algorytm zawsze zwraca taki sam wynik Algorytm probabilistyczny albo randomizowany (randomized algorithm) do swojego działania używa losowości (generatora liczb pseudolosowych)

Rok akademicki 2011/2012, Wykład nr 9 12/63 Metoda Monte Carlo - obliczanie całki oznaczonej Obliczanie przybliżonej wartości całki oznaczonej metodą Monte Carlo: Dla funkcji f(x), której całkę chcemy obliczyć w przedziale [x p,x k ] wyznaczamy prostokąt obejmujący pole pod wykresem tej funkcji o wysokości h i długości podstawy (x k -x p ) x k I = f ( x) dx x p Losujemy n punktów i zliczamy te punkty n w, które wpadają w pole pod wykresem funkcji Wartość całki obliczana jest na podstawie wzoru przybliżonego: I x k = x p f nw ( x) dx h( xk x p ) n

Rok akademicki 2011/2012, Wykład nr 9 13/63 Metoda Monte Carlo - obliczanie liczby π Obliczamy pole koła wpisanego w kwadrat o boku równym 2r, gdzie r - promień koła Pola koła i kwadratu opisują wzory: P koło = π r 2 P kwadrat = 2 2 ( 2 r ) = 4 r Po porównaniu powyższych wzorów otrzymamy: Pkoło 2 Pkwadrat Pkoło r =, r = = π 4 π 2 kwadrat P 4 czyli: π = 4 P P koło kwadrat

Rok akademicki 2011/2012, Wykład nr 9 14/63 Metoda Monte Carlo - obliczanie liczby π Wyznaczamy wewnątrz kwadratu bardzo dużo losowych punktów Zliczamy punkty, które wpadają do wnętrza koła Przybliżona wartość liczby π: π P P koło = 4 4 kwadrat n n koło kwadrat gdzie: n koło - liczba punktów w kole n kwadrat - liczba wszystkich punktów Pierwsze zastosowanie: Marquis Pierre-Simon de Laplace (1886)

Rok akademicki 2011/2012, Wykład nr 9 15/63 Metoda Monte Carlo - obliczanie liczby π Średnie wyniki przy 10 000 powtórzeń losowania: n kwadrat n koło wartość Średnia liczby π Średni błąd bezwzględny Średni błąd względny 10 7,8459 3,138298 0,417763 13,2984% 100 78,4887 3,139505 0,141593 4,1621% 1 000 785,388 3,141543 0,040952 1,3036% 10 000 7853,08 3,141234 0,013222 0,4209% 100 000 78532,6 3,141299 0,004156 0,1323% Dokładność wyniku zależy od: liczby sprawdzeń (n kwadrat ) jakości użytego generatora liczb pseudolosowych

Rok akademicki 2011/2012, Wykład nr 9 16/63 Rekurencja Rekurencja lub rekursja - jest to odwoływanie się funkcji lub definicji do samej siebie Rozwiązanie danego problemu wyraża się za pomocą rozwiązań tego samego problemu, ale dla danych o mniejszych rozmiarach W matematyce mechanizm rekurencji stosowany jest do definiowania lub opisywania algorytmów Przykład - silnia: 1 n! = n( n 1)! dla dla n = 0 n 1 int silnia(int n) { return n==0? 1 : n*silnia(n-1); }

Rok akademicki 2011/2012, Wykład nr 9 17/63 Rekurencja - przykłady Przykład - ciąg Fibonacciego: 0 dla n = 0 F n = 1 dla n = 1 F + F dla n > 1 n 1 + n 2 n 1 int F(int n) { if (n==0) return 0; else if (n==1) return 1; else return F(n-1) + F(n-2); }

Rok akademicki 2011/2012, Wykład nr 9 18/63 Rekurencja - przykłady Przykład - algorytm Euklidesa (największy wspólny dzielnik): NWD( a, b) = a NWD( b, a mod b) dla dla b b = 0 1 int NWD(int a, int b) { if (b==0) return a; else return NWD(b,a % b); }

Rok akademicki 2011/2012, Wykład nr 9 19/63 Złożoność obliczeniowa W celu rozwiązania danego problemu obliczeniowego szukamy algorytmu najbardziej efektywnego czyli: najszybszego o możliwie małym zapotrzebowaniu na pamięć Do oceny efektywności programu służy złożoność obliczeniowa (koszt algorytmu) Złożoność obliczeniowa algorytmu: jest ilością zasobów potrzebnych do jego działania (czas, pamięć) jest funkcją rozmiaru danych, na których pracuje algorytm

Rok akademicki 2011/2012, Wykład nr 9 20/63 Złożoność obliczeniowa Złożoność czasowa: Jej miarą jest liczba podstawowych operacji (dominujących) Podstawowe operacje - porównanie, podstawienie, operacja arytmetyczna Złożoność pamięciowa: Jest miarą wykorzystania pamięci (liczba komórek pamięci) Złożoność pesymistyczna: Odpowiada danym najbardziej niesprzyjającym dla algorytmu Złożoność średnia: Złożoność uśredniona po wszystkich możliwych zestawach danych, występująca dla typowych danych wejściowych

Rok akademicki 2011/2012, Wykład nr 9 21/63 Notacja O ( duże O ) Wyraża złożoność matematyczną algorytmu Po literze O występuje wyrażenie w nawiasach zawierające literę n, która oznacza liczbę elementów, na której działa algorytm Do wyznaczenia złożoności bierze się pod uwagę liczbę wykonywanych w algorytmie podstawowych operacji Przykład: O(n) - złożoność algorytmu jest prostą funkcją liczby elementów (jeśli sortowanie 10.000 elementów zajmuje 5 s, to sortowanie 20.000 elementów zajmie 10 s) O(n 2 )- czas konieczny do wykonania algorytmu rośnie wraz z kwadratem liczby elementów (przy podwojeniu liczby elementów ich obsługa będzie trwała cztery razy dłużej)

Rok akademicki 2011/2012, Wykład nr 9 22/63 Notacja O ( duże O ) Porównanie najczęściej występujących złożoności: Elementy O(log n) O(n) O(n logn) O(n 2 ) O(2 n ) 10 3 10 33 100 1024 100 7 100 664 10 000 1,27 10 30 1 000 10 1 000 9 966 1 000 000 1,07 10 301 10 000 13 10 000 132 877 100000000 1,99 10 3010 O(log n) - złożoność logarytmiczna O(n) - złożoność liniowa O(n log n) - złożoność liniowo-logarytmiczna (quasi-liniowa) O(n 2 ) - złożoność kwadratowa O(2 n ) - złożoność wykładnicza

Rok akademicki 2011/2012, Wykład nr 9 23/63 Język programowania Język programowania - usystematyzowany sposób przekazywania komputerowi poleceń do wykonania Język programowania - pozwala na dokładny zapis algorytmów oraz innych zadań jakie komputer ma wykonać Dane + algorytm Symbole Język programowania Słowa kluczowe Składnia Semantyka Program

Rok akademicki 2011/2012, Wykład nr 9 24/63 Język programowania Składnia języka określa: sposób opisywania struktur sterujących sposób opisywania struktur danych sposób tworzenia poprawnych symboli do nazywania zmiennych i struktur danych sposób stosowania interpunkcji, tj. znaków typu spacje, średniki, kropki, nawiasy sposób budowy poprawnych wyrażeń Semantyka języka określa znaczenie poprawnych składniowo wyrażeń

Rok akademicki 2011/2012, Wykład nr 9 25/63 Język programowania Implementacja języka - konkretna realizacja języka dla maszyn określonego typu Program komputerowy - zbiór (ciąg) instrukcji opisujących zadanie, które ma wykonać komputer Kod źródłowy - postać programu wyrażona w języku programowania Przetwarzanie kodu źródłowego odbywa się na dwa sposoby kompilacja (kompilowane języki programowania) interpretacja (interpretowane języki programowania)

Rok akademicki 2011/2012, Wykład nr 9 26/63 Kompilowane języki programowania Kod źródłowy jest tłumaczony do postaci kodu maszynowego (sekwencji operacji gotowych do przetworzenia przez procesor) Kompilacja do kodu maszynowego zapewnia najwyższą wydajność Wygenerowany kod jest ściśle powiązany z platformą sprzętową Przykłady kompilowanych języków programowania: C C++ Pascal Fortran

Rok akademicki 2011/2012, Wykład nr 9 27/63 Interpretowane języki programowania Kod źródłowy jest na bieżąco tłumaczony i wykonywany przez dodatkowy program zwany interpreterem Zapewnia większą przenośność programów, które są często niezależne od platformy i systemu operacyjnego Programy w językach interpretowanych są mniej wydajne niż w językach kompilowanych Przykłady interpretowanych języków programowania: Java C# Perl Python Ruby

Rok akademicki 2011/2012, Wykład nr 9 28/63 Generacje języków programowania Generacje języków opisują zaawansowanie (rozbudowanie) struktury języka, co jest równocześnie związane z łatwością posługiwania się nimi im mniejsza liczba oznaczająca generację języka tym bardziej jest on zbliżony do sprzętu im większa generacja języka tym jest on bardziej intuicyjny i niezależny od sprzętu

Rok akademicki 2011/2012, Wykład nr 9 29/63 Języki programowania Istnieje około 2500 języków programowania http://www.oreilly.com/pub/a/oreilly/news/languageposter_0504.html (do 2004 roku)

Rok akademicki 2011/2012, Wykład nr 9 30/63 Języki programowania http://www.oreilly.com/pub/a/oreilly/news/languageposter_0504.html (do 2004 roku)

Rok akademicki 2011/2012, Wykład nr 9 31/63 TIOBE Programming Community Index (May 2012) 2) Position May 2012 Position May 2011 Programming Language Ratings May 2012 Delta May 2011 1 2 C 17.346% +1.18% 2 1 Java 16.599% -1.56% 3 3 C++ 9.825% +0.68% 4 6 Objective-C 8.309% +3.30% 5 4 C# 6.823% -0.72% 6 5 PHP 5.711% -0.80% 7 8 (Visual) Basic 5.457% +0.96% 8 7 Python 3.819% -0.76% 9 9 Perl 2.805% +0.57% 10 11 JavaScript 2.135% +0.74% http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html

Rok akademicki 2011/2012, Wykład nr 9 32/63 TIOBE Programming Community Index (May 2012) 2) Position May 2012 Position May 2011 Programming Language Ratings May 2012 Delta May 2011 11 10 Ruby 1.451% +0.03% 12 26 Visual Basic.NET 1.274% +0.79% 13 21 PL/SQL 1.119% +0.62% 14 13 Delphi/Object Pascal 1.004% -0.07% 15 15 Lisp 0.941% -0.01% 16 24 Logo 0.839% +0.35% 17 17 Pasacal 0.808% +0.10% 18 18 Transcat-SQL 0.654% -0.04% 19 16 Ada 0.649% -0.10% 20 12 Lua 0.566% -0.54% http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html

Rok akademicki 2011/2012, Wykład nr 9 33/63 TIOBE Programming Community Index (May 2012) 2)

Rok akademicki 2011/2012, Wykład nr 9 34/63 Asembler (assembly language) Język programowania niskiego poziomu Powstał na bazie języka maszynowego danego procesora poprzez zastąpienie kodów liczbowych instrukcji kodu maszynowego ich mnemonikami Program w asemblerze jest tłumaczony na kod maszynowy Zazwyczaj jedna instrukcja w asemblerze odpowiada jednemu rozkazowi procesora Składnia języka asemblera zależy od architektury procesora oraz używanego asemblera Tworzenie programu jest dość trudne, ale umożliwia programiście pełną kontrolę nad procesorem Programy napisane w asemblerze są bardzo wydajne

Rok akademicki 2011/2012, Wykład nr 9 35/63 Asembler - przykład programu.model SMALL.286.stack 100h.code start: jmp begin handler: pusha push ds pop ds popa iret begin: mov ax,0000h mov ds,ax mov di,0070h lea ax,handler cli mov [di],ax mov [di+2],cs sti mov ax,3100h mov dx,(offset begin - offset handler) inc dx int 21h end start

Rok akademicki 2011/2012, Wykład nr 9 36/63 Fortran (FORmula TRANslator) Stworzony w latach 50-tych, ale nadal stosowany Pierwszy kompilator Fortranu był jednocześnie pierwszym w historii kompilatorem języka wysokiego poziomu Standardy języka: Fortran IV (1960), Fortran 66, Fortran 77, Fortran 90, Fortran 95, Fortran 2003, Fortran 2008 Głównym zastosowaniem języka Fortran są obliczenia naukowoinżynierskie (w szczególności obliczenia numeryczne) Dysponuje ogromną liczbę bibliotek, które pozwalają rozwiązać praktycznie każde zadanie numeryczne

Rok akademicki 2011/2012, Wykład nr 9 37/63 Fortran - przykład programu program oblicz_srednia parameter (MaxX=1000) dimension x(maxx) character*80 plik_danych write (*,'(a,$)') "Podaj nazwe pliku danych... " 10 read (*,'(a)') plik_danych open (1,file=plik_danych,status="old",err=20) goto 30 20 write (*,*) & "Blad - ten plik nie istnieje. Podaj nazwe jeszcze raz." goto 10 30 continue read (1,*) N do i=1,n read (1,*) x(i) enddo suma = 0.0 do i=1,n suma = suma+x(i) enddo srednia = suma/n write (*,*) "Srednia wynosi",srednia stop end

Rok akademicki 2011/2012, Wykład nr 9 38/63 BASIC (Beginner All-purpose Symbolic Instruction Code) Opracowany w 1964 roku przez J.G. Kemeny ego i T.E. Kurtza w Darthmouth Collage w oparciu o języki Fortran i Algol-60 Popularny w komputerach 8-bitowych (Atari, ZX Spectrum, Amstrad, Commodore) i kalkulatorach programowanych Występował w wielu wersjach dla różnych komputerów - dla IBM PC jako: GW BASIC, QB, QuickBasic, Visual Basic Brak typów, w pierwszych wersjach numerowanie instrukcji Przykładowe instrukcje: skoku bezwarunkowego: GOTO wywołania podprogramu: GOSUB RETURN warunkowa: IF THEN (ELSE) iteracyjna: FOR NEXT

Rok akademicki 2011/2012, Wykład nr 9 39/63 BASIC - przykłady programów 10 INPUT "What is your name: ", U$ 20 PRINT "Hello "; U$ 30 INPUT "How many stars: ", N 40 S$ = "" 50 FOR I = 1 TO N 60 S$ = S$ + "*" 70 NEXT I 80 PRINT S$ 90 INPUT More stars? ", A$ 100 IF LEN(A$) = 0 THEN 90 110 A$ = LEFT$(A$, 1) 120 IF A$ = "Y" OR A$ = "y" THEN 30 130 PRINT "Goodbye ";U$ 140 END INPUT "What is your name: ", UserName$ PRINT "Hello "; UserName$ DO INPUT "How many stars: ", NumStars Stars$ = STRING$(NumStars, "*") PRINT Stars$ DO INPUT More stars? ", Answer$ LOOP UNTIL Answer$ <> "" Answer$ = LEFT$(Answer$, 1) LOOP WHILE UCASE$(Answer$) = "Y" PRINT "Goodbye "; UserName$ QuickBasic

Rok akademicki 2011/2012, Wykład nr 9 40/63 Pascal Język wysokiego poziomu, ogólnego zastosowania, oparty na Algolu, opracowany w 1970 r. przez Niklausa Wirtha Szczyt popularności przypadał na lata 80-te i początek lat 90-tych Pierwotnie służył celom edukacyjnym do nauki programowania strukturalnego - z tego powodu jest jednym z najszerzej znanych i popularnych języków, zwłaszcza wśród początkujących programistów Zastosowanie w praktyce jest obecnie ograniczone Zalety: czytelność, zwięzłość kodu, rygorystyczna kontrola typów Jedną z popularniejszych implementacji kompilatorów tego języka był Turbo Pascal firmy Borland International

Rok akademicki 2011/2012, Wykład nr 9 41/63 Turbo Pascal Version 7.0 - Borland Inter. Inc. (1992)

Rok akademicki 2011/2012, Wykład nr 9 42/63 Pascal program funkcja; var delta, x1, x2 : real; var a, b, c : real; begin writeln ('Podaj wspolczynniki a, b, c trojmianu kwadratowego: '); readln (a, b, c); delta := (b * b) - (4 * a * c); writeln ('Delta = ', delta); if delta < 0 then writeln('brak MIEJSC ZEROWYCH FUNKCJI!') else if delta > 0 then begin x1 := ((- b) - sqrt(delta)) / (2 * a); x2 := ((- b) + sqrt(delta)) / (2 * a); writeln('x1 = ', x1); writeln('x2 = ', x2); end else begin x1 := (- b) / (2 * a); writeln('x1 = ', x1); end; end.

Rok akademicki 2011/2012, Wykład nr 9 43/63 C++ Obiektowy język programowania zaprojektowany w 1979 roku przez Bjarne a Stroustrupa jako rozszerzenie języka C Nazwa C++ została zaproponowana w 1983 r., wcześniej używano nazwy C z klasami - ++ pochodzi od nazwy operatora inkrementacji C++ zachowuje pełną zgodność z C na poziomie kodu źródłowego Standard ISO/IEC 14882:2011 ( Standard for the C++ Programming Language (C++11) Od początku występowała i wciąż występuje niekompatybilność kompilatorów języka C++ w zakresie obsługiwanej składni C++ nie zmusza programistów do wyboru określonego stylu programowania - w jednym programie można stosować paradygmaty programowania proceduralnego i obiektowego

Rok akademicki 2011/2012, Wykład nr 9 44/63 C++ - nowe elementy względem języka C Programowanie obiektowe: mechanizmy enkapsulacji (funkcje składowe, sekcje prywatne, chronione i publiczne, funkcje zaprzyjaźnione), klasy, obiekty dziedziczenie metody wirtualne (polimorfizm) konstruktory i destruktory operatory new i delete metody i pola statyczne Udogodnienia związane z programowaniem generycznym: szablony (wzorce) klas i funkcji włączenie do biblioteki standardowej generycznej biblioteki STL

Rok akademicki 2011/2012, Wykład nr 9 45/63 C++ - nowe elementy względem języka C Obsługa wyjątków: Inne: przechwytywanie wyjątków: try catch wywoływanie wyjątków: throw przeciążanie funkcji i operatorów funkcje inline przestrzenie nazw i operator zasięgu - ::

Rok akademicki 2011/2012, Wykład nr 9 46/63 C++ - przykład programu cpl.h #include <iostream.h> class Complex { double Re,Im; public: Complex(double,double ); Complex (void); friend istream & operator >> (istream &, Complex &); friend ostream & operator << (ostream &, Complex &); Complex & operator = (Complex &); friend Complex operator + (Complex &,Complex &); };

Rok akademicki 2011/2012, Wykład nr 9 47/63 C++ - przykład programu cpl.cpp #include "cpl.h" Complex::Complex(void) { Re=0; Im=0; } Complex::Complex(double a,double b) { Re=a; Im=b; } Complex operator + (Complex &c,complex &d) { Complex e; e.re=c.re+d.re; e.im=c.im+d.im; return e; } Complex & Complex::operator = (Complex &f) { Re=f.Re; Im=f.Im; return *this; } istream & operator >> (istream &s,complex &g) { s >> g.re; s >> g.im; return s; } ostream & operator << (ostream &s,complex &g) { s << g.re; s << g.im; return s; }

Rok akademicki 2011/2012, Wykład nr 9 48/63 C++ - przykład programu main.cpp #include <iostream.h> #include "cpl.h" void main(void) { Complex a1,a2,a3(3,4); } cout << a3; cin >> a1; cin >> a2; a3 = a1 + a2; cout << a3;

Rok akademicki 2011/2012, Wykład nr 9 49/63 Java Obiektowy język programowania stworzony przez grupę roboczą pod kierunkiem Jamesa Goslinga z firmy Sun Microsystems Programy źródłowe kompilowane są do kodu bajtowego, czyli do postaci wykonywanej przez maszynę wirtualną Podstawowe koncepcje przejęte zostały z języka Smalltalk i C++ Java składa się z szeregu klas definiujących obiekty różnego typu; klasy te pogrupowane są w hierarchicznie ułożone pakiety Podstawowy zestaw klas rozprowadzany jako Java występuje w dwóch wersjach - JRE i JDK: JRE (Java Runtime Environment) - udostępnia bytecode wszystkich klas standardowych i wirtualną maszynę do ich uruchamiania JDK (Java Development Kit) - dodatkowo udostępnia źródła klas oraz dodatkowe narzędzia jak kompilator, paker czy debuger

Rok akademicki 2011/2012, Wykład nr 9 50/63 Java - przykład programu class Person { public String firstname, lastname; public int year; public String PESEL; } public class Proba { public static void main(string[] args) { Person p, q, r; p = new Person(); q = new Person(); r = new Person(); p.firstname = "Jan"; p.lastname = "Kowalski"; p.year = 1981; p.pesel = "81111224350"; } } System.out.println( p.firstname + " " + p.lastname + ", " + p.year + ", PESEL: " + p.pesel );

Rok akademicki 2011/2012, Wykład nr 9 51/63 C# Obiektowy język programowania zaprojektowany pod kierunkiem A. Hejlsberga dla firmy Microsoft w 2001 roku Program napisany w C# kompilowany jest do języka CIL (Common Intermediate Language), specjalnego kodu pośredniego wykonywanego w środowisku uruchomieniowym takim jak.net C# ma wiele cech wspólnych z językami C++ i Java Kolejne wersje: C# 2.0 (2005), C# 3.0 (2007), C# 4.0 (2010)

Rok akademicki 2011/2012, Wykład nr 9 52/63 C# - przykład programu using System; public class PrzykladowaKlasa { public static void Main() { string imie; Console.WriteLine("Podaj swoje imie:"); imie=console.readline(); Console.WriteLine("Twoje imie to: " + imie); } } Console.ReadKey();

Rok akademicki 2011/2012, Wykład nr 9 53/63 Borland C++ 3.1 (1992) źródło: forum.codenet.ru/q67485

Rok akademicki 2011/2012, Wykład nr 9 54/63 Borland C++ 3.1 (1992) źródło: jp.progit.pl/

Rok akademicki 2011/2012, Wykład nr 9 55/63 Delphi 1 (1995) źródło: delphi.wikia.com/wiki/delphi_images_(versions)

Rok akademicki 2011/2012, Wykład nr 9 56/63 Borland C++ Builder 1 (1997) źródło: www.blong.com/conferences/borconuk97/c++fordelphi/cbuilder.htm

Rok akademicki 2011/2012, Wykład nr 9 57/63 Microsoft Visual C++ 6.0 (1998)

Rok akademicki 2011/2012, Wykład nr 9 58/63 Borland C++ Builder 6 (2002)

Rok akademicki 2011/2012, Wykład nr 9 59/63 Borland Turbo C++ 2006 Explorer (2006)

Rok akademicki 2011/2012, Wykład nr 9 60/63 Microsoft Visual C++ 2008

Rok akademicki 2011/2012, Wykład nr 9 61/63 Dev-C++ 4.9.9.2

Rok akademicki 2011/2012, Wykład nr 9 62/63 Code::Blocks 10.05

Rok akademicki 2011/2012, Wykład nr 9 63/63 Koniec wykładu nr 9 Dziękuję za uwagę!