Magistrala danych Magistrala adresowa Magistrala steruj ROM, RAM CPU In/Out CPU RAM CPU Magistrala danych Magistrala adresowa Magistrala steruj



Podobne dokumenty
Wstęp do informatyki. Język asemblera. Język maszynowy. Programowanie komputerów PC. Cezary Bolek

Wstęp do informatyki. Język maszynowy. Programowanie komputerów PC. Cezary Bolek

Architektura komputera. Cezary Bolek. Uniwersytet Łódzki. Wydział Zarządzania. Katedra Informatyki. System komputerowy

Magistrala systemowa (System Bus)

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

Wstęp do informatyki. Algorytm. Algorytmika. Cezary Bolek. Uniwersytet Łódzki

Przepis na rozwiązanie określonego problemu za pomocą prostych czynności wykonywanych w ściśle określonej kolejności.

Algorytmy i struktury danych

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

Podstawy Informatyki Języki programowania

Cezary Bolek Uniwersytet Łódzki Wydział Zarządzania Katedra Informatyki

Algorytm. a programowanie -

Algorytmy. Programowanie Proceduralne 1

1 Wprowadzenie do algorytmiki

Algorytmy. Programowanie Proceduralne 1

Elżbieta Kula - wprowadzenie do Turbo Pascala i algorytmiki

CPU ROM, RAM. Rejestry procesora. We/Wy. Cezary Bolek Uniwersytet Łódzki Wydział Zarządzania Katedra Informatyki

Język ludzki kod maszynowy

Wstęp do programowania

Wprowadzenie do algorytmiki

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

Programowanie I. Wprowadzenie. Proces programowania

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

Architektura komputerów. Asembler procesorów rodziny x86

Programowanie komputerów

Definicje. Algorytm to:

Podstawy programowania

Podstawy programowania w języku C

Język programowania PASCAL

INFORMATYKA, TECHNOLOGIA INFORMACYJNA ORAZ INFORMATYKA W LOGISTYCE

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

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

Podstawy Programowania Algorytmy i programowanie

Technologie informacyjne - wykład 12 -

Języki i metodyka programowania

Wprowadzenie do informatyki i użytkowania komputerów. Kodowanie informacji System komputerowy

Algorytmika i pseudoprogramowanie

Heurystyki. Strategie poszukiwań

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

Wykład IV Algorytmy metody prezentacji i zapisu Rzut oka na język PASCAL

Algorytmy od problemu do wyniku

Algorytm. Krótka historia algorytmów

Algorytm poprawny jednoznaczny szczegółowy uniwersalny skończoność efektywność (sprawność) zmiennych liniowy warunkowy iteracyjny

Wstęp do informatyki. Maszyna RAM. Schemat logiczny komputera. Maszyna RAM. RAM: szczegóły. Realizacja algorytmu przez komputer

ALGORYTMY I PROGRAMY

Sprzęt komputera - zespół układów wykonujących programy wprowadzone do pamięci komputera (ang. hardware) Oprogramowanie komputera - zespół programów

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

Wprowadzenie do złożoności obliczeniowej

Budowa komputera Komputer computer computare

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

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

Informatyczna Wieża Babel, czyli o różnych językach programowania. Informatyczna Wieża Babel, czyli o różnych językach programowania

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

2.8. Algorytmy, schematy, programy

Podstawy Programowania

Podstawy Informatyki. Inżynieria Ciepła, I rok. Wykład 7 Algorytmy

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

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

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

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

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

Jerzy Nawrocki, Wprowadzenie do informatyki

Języki i paradygmaty programowania. I. Wprowadzenie

Podstawy programowania. Wykład 1 Wstęp. Krzysztof Banaś Podstawy programowania 1

Algorytm - pojęcie algorytmu, sposób zapisu, poziom szczegółowości, czynności proste i strukturalne. Pojęcie procedury i funkcji.

Budowa komputera. Magistrala. Procesor Pamięć Układy I/O

Algorytmy i struktury danych

Wstęp do programowania

Programowanie niskopoziomowe. dr inż. Paweł Pełczyński

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

Praktyka Programowania

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

Struktura i działanie jednostki centralnej

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

Język programowania: Lista instrukcji (IL Instruction List)

Wstęp do informatyki. Algorytm. Innymi słowy, czym jest algorytm?

Wstęp do programowania

Algorytmy i struktury danych

Literatura. adów w cyfrowych. Projektowanie układ. Technika cyfrowa. Technika cyfrowa. Bramki logiczne i przerzutniki.

Algorytmy równoległe: ocena efektywności prostych algorytmów dla systemów wielokomputerowych

Modelowanie i Programowanie Obiektowe

Proste algorytmy w języku C

Organizacja typowego mikroprocesora

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

Informatyka 1. Złożoność obliczeniowa

Języki formalne i techniki translacji

Podstawy programowania wykład

Ćwiczenie nr 3. Wyświetlanie i wczytywanie danych

Języki programowania zasady ich tworzenia

Wstęp do Informatyki i Programowania

Klasa 2 INFORMATYKA. dla szkół ponadgimnazjalnych zakres rozszerzony. Założone osiągnięcia ucznia wymagania edukacyjne na. poszczególne oceny

Języki programowania C i C++ Wykład: Typy zmiennych c.d. Operatory Funkcje. dr Artur Bartoszewski - Języki C i C++, sem.

Podstawy programowania

EGZAMIN MATURALNY Z INFORMATYKI 17 MAJA 2016 POZIOM PODSTAWOWY. Godzina rozpoczęcia: 14:00 CZĘŚĆ I WYBRANE: Czas pracy: 75 minut

Algorytmy i złożoność obliczeniowa. Wojciech Horzelski

Logiczny model komputera i działanie procesora. Część 1.

Szczegółowy program kursów szkoły programowania Halpress

Programowanie proceduralne INP001210WL rok akademicki 2017/18 semestr letni. Wykład 3. Karol Tarnowski A-1 p.

Zapisywanie algorytmów w języku programowania

Transkrypt:

System komputerowy -architektura Rozwój nowoczesnych technik obliczeniowych Magistrala systemowa (System Bus) Budowa komputera, algorytmika i języki programowania Cezary Bolek Katedra Informatyki Pamięć operacyjna ROM, RAM Jednostka centralna Układy we/wy In/Out Magistrala systemowa i pamięć RAM Magistrala danych Magistrala adresowa Magistrala sterująca ROM, RAM In/Out Magistrala adresowa Magistrala danych Magistrala sterująca ROM, RAM In/Out Magistrala danych słuŝy do przesyłania danych pomiędzy komórkami pamięci, rejestrami procesora oraz układami we/wy. Magistrala adresowa słuŝy do przesyłania adresów komórek pamięci (lub układów we/wy), które biorą udział w operacji odczytu lub zapisu. Magistrala sterująca słuŝy do określenia typu operacji ma się wykonać (zapis czy odczyt) oraz kierunku transferu danych (np. do pamięci, pamięć do ) RAM Pamięć operacyjna Pamięć RAM zawiera dane i rozkazy (programy) określające jak przetwarzać dane Magistrala danych przesyła dane z pamięci do w celu ich przetworzenia Magistrala danych przesyła przetworzone dane do pamięci w celu ich późniejszego przetwarzania, wyświetlenia, zapisania itp Jednostka centralna Przetwarza dane 1

Procesor Procesor (processor) - urządzenie cyfrowe sekwencyjne potrafiące pobierać, interpretować i wykonywać ciąg rozkazów. Wykonuje on bardzo szybko dowolny ciąg prostych operacji wybranych ze zbioru operacji podstawowych. Procesor składa się z: zespołu rejestrów do przechowywania danych i wyników, jednostki arytmetycznej (arytmometr) do wykonywania prostych operacji na danych, układu sterującego przebiegiem obliczeń, rejestru rozkazów, czyli operacji podstawowych. Procesor Działania wykonywane przez procesor: działania arytmetyczne: dodawanie, odejmowanie, porównywanie dwóch liczb, dodawanie i odejmowanie jedności, zmiana znaku liczby, działania logiczne: iloczyn logiczny - AND, suma logiczna - OR, suma modulo2 (róŝnica symetryczna) - XOR, negacja - NOT, przesunięcie bitów w lewo lub prawo, działania na bitach. Algorytm Innymi słowy, czym jest algorytm? Przepis na rozwiązanie określonego problemu za pomocą prostych czynności wykonywanych w ściśle określonej kolejności. Czynności: 1. muszą być znacznie prostsze od realizowanego algorytmu 2. muszą być wykonywalne dla danego sprzętu (prostota czynności jest sprawą względną) Kolejność: 1. określenie kolejności wykonywania czynności jest krytyczne dla osiągnięcia celu algorytmu; 2. musi istnieć mechanizm rozgałęziania algorytmu, tj. decydowania o kolejności w trakcie wykonywania algorytmu na podstawie zaistniałych warunków. Zbiór logicznie powiązanych kroków prowadzących do określonego celu Sposób rozwiązania problemu "Przepis" Sposób opisu zachowania Algorytm zawiera: Dane Instrukcje 2

Dane wejściowe Algorytm Dane wyjściowe Rola algorytmu Algorytm Przepis Ciasteczka czekoladowe DANE (składniki) 2 1/4 szklanki mąki 1 łyŝeczka soli 1 łyŝeczki proszku do pieczenia 2 jajka 3/4 szklanki brązowego cukru 1 łyŝeczki wanilii 3/4 szklanki cukru 1 paczka masła 30 dag startej na tarce czekolady INSTRUKCJE (czynności) Rozgrzać piekarnik do temperatury 375 C. W misie zmieszać mąkę, sól, proszek do pieczenia. Utrzeć razem cukier, masło i wanilię aŝ do uzyskania jednolitej konsystencji. Dodać jajka i utrzeć. Dodać zmieszaną wcześniej mąkę, sól itd., utrzeć. Dodać kawałki czekolady NałoŜyć łyŝeczką niewielkie porcje ciasta na blachę przykrytą do pieczenia. Piec 8 do 10 minut. papierem Cechy dobrego algorytmu Co jest złego w tym algorytmie? Dobry algorytm musi być: Skończony Kompletny Jednoznaczny Poprawny Prosty Zawierać poziomy abstrakcji (Z etykiety szamponu) Sposób uŝycia: Zmoczyć włosy NałoŜyć niewielką ilość szamponu na włosy Wetrzeć Spłukać Czynności powtórzyć 3

Sposoby opisu algorytmu Algorytm: Średnie zuŝycie paliwa w l/km Język naturalny (np. angielski) Opis graficzny (np. sieć działań) Pseudokod lub język programowania 1. Pobierz wartości: zuŝyte paliwo w litrach, początkowy i końcowy stan licznika w kilometrach 2. Ustaw wartość: przejechany dystans na wartość (końcowy stan licznika - początkowy stan licznika) 3. Ustaw wartość: średnie zuŝycie paliwa na wartość (zuŝyte paliwo / przejechany dystans) 4. Wydrukuj wartość: średnie zuŝycie paliwa 5. Koniec Zapis algorytmu - sieć działań Zwięzłość, czytelność i wysoki poziom abstrakcji Sieć działań (schemat blokowy): 1. Elementarne czynności oznaczone są blokami (węzły sieci), a kolejność wyznaczona jest poprzez gałęzie sieci, łączące węzły. 2. Kształt bloków odpowiada rodzajowi operacji, a strzałki gałęzi identyfikują jednoznacznie ich kolejność. 3. NiezaleŜność struktury algorytmu od architektury konkretnej maszyny i rodzaju kodowania liczb. Za pomocą sieci działań moŝliwe jest zapisanie kaŝdego poprawnego algorytmu! KaŜdy algorytm moŝna zapisać za pomocą wielu róŝnych sieci działań! Sieć działań: Średnie zuŝycie paliwa w l/km Start zuŝyte paliwo początkowy stan licz. końcowy stan licz. przejechany dystans końcowy stan licz. - końcowy stan licz. średnie zuŝycie paliwa na wartość zuŝyte paliwo / przejechany dystans drukuj średnie zuŝycie paliwa Stop 4

Przykład A Znajdowanie największej z trzech liczb: max(a,b,c) Start a,b,c Przykład B Start a,b,c m a Znajdowanie największej z trzech liczb: max(a,b,c) T a>b N m<b T m b T a>c N T c>b N N m<c T m c drukuj a drukuj c drukuj b N drukuj m Stop Stop A max(a,b,c) rozmiar: 4 we/wy 3 dec. 0 op. szybkość: 2 we/wy 2 dec. 0 op. rozbudowa: trudna Sieci A vs B? B max(a,b,c) rozmiar: 2 we/wy 2 dec. 3 op. szybkość: 2 we/wy 2 dec. 1..3 op. rozbudowa: łatwa Rozwiązanie problemu moŝliwe jest za pomocą róŝnych sieci działań. Optymalizacja algorytmu polega na znalezieniu sieci najlepszej według określonego kryterium: np. rozmiaru, szybkości, rozbudowy. Przykład. Wykonanie pseudokodu - krok 1 1. Pobierz wartości dla Litry (zuŝyte paliwo), Start (początkowy stan licznika) i Koniec (końcowy stan licznika) 2. Ustaw wartość dla Dystans (przejechany dystans) na (Koniec - Start) 3. Ustaw wartość dla Sred (średnie zuŝycie paliwa) na (Litry / Dystans) 4. Wydrukuj wartość: Sred 5. Stop Rozkaz Pobierz pobiera dane z zewnątrz i zapisuje je do pamięci Pobierz zmienia zawartość pamięci Zmienne algorytmu odnoszą się do konkretnych miejsc w pamięci 1a PAMIĘĆ 1c Prześlij pobrane dane do pamięci PAMIĘĆ Litry=36 Start=430 Koniec=940 1b Czekaj na dane wej. I/O I/O 5

Wykonanie pseudokodu: krok 2 1. Pobierz wartości dla Litry (zuŝyte paliwo), Start (początkowy stan licznika) i Koniec (końcowy stan licznika) 2. Ustaw wartość dla Dystans (przejechany dystans) na (Koniec - Start) 3. Ustaw wartość dla Sred (średnie zuŝycie paliwa) na (Litry / Dystans) 4. Wydrukuj wartość: Sred 5. Stop Rozkaz Ustaw moŝe zmienić zawartość pamięci Procesor wykonuje operacje matematyczne Procesor pobiera dane z pamięci na których operuje Procesor przesyła wynik do pamięci 2a Litry=39 Start=330 Koniec=980 2b 2d Pobierz wart. Prześlij wynik do odejm. do pamięci PAMIĘĆ Litry=39 Start=330 Koniec=980 Dystans=650 PAMIĘĆ I/O 2c: Oblicz róŝnicę I/O Wykonanie pseudokodu: krok 3 1. Pobierz wartości dla Litry (zuŝyte paliwo), Start (początkowy stan licznika) i Koniec (końcowy stan licznika) 2. Ustaw wartość dla Dystans (przejechany dystans) na (Koniec - Start) 3. Ustaw wartość dla Sred (średnie zuŝycie paliwa) na (Litry / Dystans) 4. Wydrukuj wartość: Sred 5. Stop Kolejna operacja Ustaw Analogiczne kroki Analogiczne operacje na pamięci 3a Litry=39 Start=330 Koniec=980 PAMIĘĆ I/O Dystans=650 3b Pobierz wart. 3d do dziel. Prześlij wynik do pamięci Litry=39 Start=330 Koniec=980 PAMIĘĆ Dystans=650 Sred=0.06 3c: Oblicz iloraz I/O Wykonanie pseudokodu: krok 4 1. Pobierz wartości dla Litry (zuŝyte paliwo), Start (początkowy stan licznika) i Koniec (końcowy stan licznika) 2. Ustaw wartość dla Dystans (przejechany dystans) na (Koniec - Start) 3. Ustaw wartość dla Sred (średnie zuŝycie paliwa) na (Litry / Dystans) 4. Wydrukuj wartość: Sred 5. Stop Wartość, która ma być wydrukowana znajduje się w pamięci Procesor wysyła Ŝądanie wysłania zawartości pamięci do urządzenia wyjściowego 4a Litry=39 Start=330 Koniec=980 PAMIĘĆ Dystans=650 Sred=0.06 4b Pobierz wartość z pamięci Litry=39 Start=330 Koniec=980 Dystans=650 Sred=0.06 PAMIĘĆ Wyślij wartośćna wyjście 4c I/O I/O 0.06 Pamięć operacyjna np. 01001000 00001000 11001010 00001011 11111110 Język maszynowy 48 h 08 h CA h 0B h FE h Instrukcja procesora (kod programu) w pamięci zapisane są w postaci liczb dwójkowych. Zapis programu za pomocą liczb, które mogą być bezpośrednio wykonywane przez maszyną nazywa się językiem maszynowym., 48, 08, CA, 0B, FE, Pisanie programów w języku maszynowym przez człowieka jest bardzo Ŝmudne, ale było stosowane do programowania komputerów I i II generacji. 6

np. 48 h 08 h CA h 0B h FE h Język asemblera KaŜdej instrukcji procesora (która moŝe zajmować jeden lub więcej bajtów) moŝna przypisać skrót literowy (mnemonik), a kaŝdemu rejestrowi nazwę. Zapis programu za pomocą mnemoników nazywa się językiem asemblera, który jest znacznie łatwiejszy do opanowania przez człowieka. BL,8 ADD BL,B INC BL BL,8 ADD BL,B INC BL Program zapisany w języku asemblera nie moŝe być wykonywany bezpośrednio przez komputer i wymaga tłumaczenia na kod maszynowy za pomocą programu zwanego asemblerem. PoniewaŜ istnieje ścisły związek pomiędzy mnemonikami a instrukcjami maszynowymi, proces tłumaczenia (asemblacja) jest stosunkowo prosty. Proces odwrotny nazywa się deasemblacją (za pomocą disasemblera). BL,8 ADD BL,B INC BL Asembler, 48, 08, CA, 0B, FE, Języki wysokiego poziomu Program zapisany w języku wysokiego poziomu charakteryzuje: Abstrakcja danych programista operuje na zmiennych bez konieczności organizacji wykorzystania rejestrów procesora i lokalizacji liczb w pamięci ZłoŜone struktury danych proste jest deklarowanie i korzystanie ze złoŝonych struktur liczb jak np. tablice (macierze), stosy, kolejki, drzewa, etc. Zaawansowane konstrukcje sterujące określenie kolejności wykonywania programu realizuje się z pomocą intuicyjnych konstrukcji warunkowych typu IF-THEN-ELSE, FOR, DO-WHILE, etc. Dowolność układu zapisu programu programista moŝe zapisywać program w postaci najbardziej dla niego czytelnej i zgodnej z upodobaniami. for (i=1; i<10, i++) { n=10+x*2 }; for (i=1; i<10, i++) { n=10+x*2 }; for (i=1; i<10, i++) { n=10+x*2 }; Kompilacja programów Programy napisane w językach wysokiego poziomu muszą być tłumaczone na język maszynowy za mocą programu zwanego kompilatorem, a proces tłumaczenia nazywa się kompilacją. for (i=1; i<10, i++) { n=10+x*2 }; Kompilator, 48, 08, CA, 0B, FE, BL,8 ADD BL,B INC BL Kompilacja programów jest zadaniem bardzo złoŝonym, ze względu na mnogość moŝliwości realizacji zadania w języku asemblera. Kompilatory są jednymi z najbardziej zaawansowanych i złoŝonych programów dla komputerów osobistych. X = X + Y*Z MUL ADD AL,X BL,Y CL,Z CL,BL lub AL,CL X,AL MUL ADD AL,Y BL,Z AL,BL BL,X AL,BL X,AL MUL ADD lub AL,Z AL,Y CL,X X,AL Przykład - algorytm Euklidesa Znajdowanie największego wspólnego podzielnika Największy Wspólny Dzielnik (NWD) dwóch liczb jest największą liczbą naturalną spośród tych, które dzielą obie te liczby bez reszty Np. NWD(24,18) = 6. Aby znaleźć Największy Wspólny Dzielnik dwóch liczb, to od większej liczby naleŝy odejmować mniejszą dotąd, aŝ obie liczby będą sobie równe. Wynik jest ich największym wspólnym podzielnikiem. NWD(24,15) 24-15 = 9 15-9 = 6 9-6 = 3 6-3 = 3 Od większej liczby odejmujemy mniejszą. Liczby 24 i 15 przechodząw 15 i 9. PoniewaŜnie sąone równe, wykonujemy dalej odejmowanie Teraz otrzymujemy parę9 i 6, która dalej nie składa sięz liczb sobie równych, więc kontynuujemy odejmowanie. Para 6 i 3 - odejmujemy dalej Para 3 i 3 - otrzymaliśmy równość, więc liczba 3 jest największym wspólnym podzielnikiem liczb 24 i 15. 7

Przykład - algorytm Euklidesa Lista kroków K01: Czytaj a,b K02: Dopóki a b: wykonuj krok K03 K03: JeŜeli a > b, to a a - b. Inaczej b b a K04: nwd a K05: Zakończ algorytm Schemat blokowy Algorytm Euklidesa kod maszynowy i asembler b9 18 00 00 00 b8 0f 00 00 00 3b c8 7e 04 2b c8 eb 02 2b c1 3b c8 75 f4 33 c0 c3 b9 18 00 00 00 b8 0f 00 00 00 3b c8 7e 04 2b c8 eb 02 2b c1 3b c8 75 f4 33 c0 c3 mov ecx, 24 mov eax, 15 cmp ecx, eax $L591: jle SHORT $L584 sub ecx, eax jmp SHORT $L585 $L584: sub eax, ecx $L585: cmp ecx, eax jne SHORT $L591 xor eax, eax ret 0 Algorytm Euklidesa język Pascal 1 2 3 4 program Od języka wysokiego poziomu do kodu varm,n: Euclide; maszynowego beginreadln(m); readln(n); integer; $L591: mov cmp eax, ecx, 24 15 eax while if else m<> m> nnthen writeln(m); m:= n:= m n $L584: jle sub jmp ecx, eax $L584 sub SHORT eax, ecx $L585 end. n-m; $L585: cmp jne xor ret ecx, SHORT eax, 0 eax $L591 b9 f4 18 3300 c0 0000b8 c3 0f 0000003b c8 7e 042b c8 eb02 2b c1 3b c8 75 8

Algorytm Euklidesa Język C i Ada with use procedure Text_IO; int { main(int begin a, b: Integer; Euklides is argc, char* argv[]) printf("podaj a,b; a b while := 153; scanf("%d", a.\n"); if 1326; while &a); if &b); b.\n"); elseb a (a > /= a b) b) -b; then loop elseb (a (a a!= b){ -= > b; a; end end loop; if; := b -a; } }printf("nwd return 0; to: %d", a); end; Put_Line("Największy &Integer'Image(b)); wspólny dzielnik (NWD) to: " Język ADA Język C Historia języków programowania 1 Plankalkül (1946, Niemcy) A-O (1951, USA) AutoCode (1952, Wlk.Brytania) FORTRAN I (1957, IBM, USA) FORTRAN II (1958, IBM, USA) pierwszy na świecie język programowania twórca Konrad Zues, komputer Z3 kmdr. Grace Hopper opracowuje kompilator A-O znany takŝe pod nazwą AT-3 studentka Alick Glennie opracowuje w ramach studiów kompilator AutoCode dla komputera Manchester Mark I rozwinięcie kompilatora A-O; opublikowany pod nazwą Math-Matic; programy numeryczno-modelujące rozwinięcie FORTRAN-u I wprowadzenie podprogramów Historia języków programowania 2 Historia języków programowania 3 COBOL (1959, USA) LISP (1959, USA) Algol 60 (1960) język dla przetwarzania duŝych zespołów danych w systemach ewidencyjno-zarządczych (skrót: COmmon Business Oriented Language) John McCarthy publikuje specyfikację LISP-u (skrót: LISt Processing) międzynarodowy zespół publikuje specyfikację języka Algol 60 Snobol (1962, Bell Labs, USA) BASIC (1964, USA) PL/I (1964, IBM, USA) język programowania ukierunkowany na przetwarzanie tekstów i wzorców językowych John Kemeny i Thomas Kurtz opracowują język BASIC (skrót: Beginners All-purpose Symbolic Instruction Code) publikacja specyfikacji języka PL/I przeznaczonego do ogólnych zastosowań APL (1961, USA) Keneth Iversson publikuje specyfikację języka APL ukierunkowanego na zagadnienia matematyczne RPG (1964, IBM, USA) publikacja specyfikacji języka RPG przeznaczonego do raportowania baz danych (skrót: Report Program Generator) FORTRAN IV (1962, USA) publikacja specyfikacji czwartej wersji języka FORTRAN LOGO (1966, USA) język wzorowany na LISP-ie, ukierunkowany na nauczanie dzieci i osób poznających programowanie 9

Historia języków programowania 4 Historia języków programowania 5 Simula (1967, Norwegia) język wzorowany na Algolu 60; wprowadzenie pojęcia klasy i obiektu; ukierunkowany na symulacje Smalltalk (1970, XEROX, USA) pierwszy język całkowicie obiektowy PASCAL (1968, Szwajcaria) Niklaus Wirth opracowuje język PASCAL do nauki programowania strukturalnego Icon (1970, USA) język programowania ukierunkowany na przetwarzanie tekstów i wzorców językowych BCPL (1969, Wlk.Brytania) Forth (1970, USA) PROLOG (1970, Francja) język niskiego poziomu zawierający wyłącznie bardzo proste typy danych (skrót: Basic Combined Programming Language) Charles Moore opracowuje język wysokiego poziomu Forth stosujący odwrotną notację polską język wysokiego poziomu stosowany w badaniach nad sztuczną inteligencją (skrót: PROgramming LOGic) B (1970, USA) C (1972, Bell Labs, USA) Tiny BASIC (1975, USA) język bazujący na BCPL opracowany dla komputera PDP-11 Dennis Ritchie opracowuje język C (bazujący na języku B) dla komputera PDP-11 dr Wong opracowuje miniaturową (tylko 2 KB pamięci) wersję BASIC-a dla mikroprocesorów Intela i Ziloga; jest to pierwszy program freeware; w programie uŝyto zastrzeŝeń: All Wrongs Reserved oraz Copyleft Historia języków programowania 6 Historia języków programowania 7 BASIC (1975, USA) Bill Gates i Paul Allen opracowują własną wersję BASIC-a, którą sprzedają dla firmy MITS produkującej mikrokomputer Altair, w którym stosowany jest mikroprocesor Intel 8080 Modula-2 (1983, Szwajcaria) C++ (1983, Bell Labs, USA) Niklaus Wirth opracowuje ulepszoną wersję języka Modula zespół Bjarne Stroustrupa opracowuje język C++ na bazie rozszerzonego języka C (C z klasami) DSL (1975, USA) ADA (1977, USA) Modula (1977, Szwajcaria) język będący poprzednikiem PostScriptu Jean Ichbiahn wraz z zespołem opracowują język ADA przyjęty później jako standardowy język programowania Ministerstwa Obrony USA Niklaus Wirth opracowuje język stosujący modularyzację i współbieŝność Perl (1987) Java (1995, Sun, USA) C# (2000, Microsoft, USA) udostępniona zostaje wersja 1.0 języka PERL opracowanego przez Larry ego Walla i Randala Schwartza; (skrót: Practical Extract and Report Language) zaprezentowano język programowania i środowisko opracowywane od roku 1991 przez zespół Jamesa Goslinga w Sun Microsystems Microsoft prezentuje język C# dla platformy.net będący kompilacją języków C++ i Java 10

Rozwój języków programowania Dlaczego tak duŝo języków programowania? Ewolucja Osobiste preferencje Specjalne zastosowania Obszary zastosowań Co czyni język popularnym? Aplikacje naukowe (Fortran, TCE) Aplikacje biznesowe (Cobol) Sztuczna inteligencja (Lisp) Programowanie systemowe (C, C++) Aplikacje sieciowe (Java, C#) Języki bardzo wysokiego poziomu (perl) Języki wysoce specjalizowane (make, sh) Efektywność kodu Łatwość nauki Łatwość implementacji Open Source Dostępność kompilatorów, bibliotek Ekonomia, patronat, inercja Składnia podobna do języka C 11

Paradygmaty programowania ZłoŜoność obliczeniowa ZłoŜoność obliczeniowa miara efektywności algorytmu Imperatywne (C, Pascal, etc.) Funkcjonalne (Lisp, ML, Haskell) Logiczne (Prolog) Zorientowane obiektowo (C++, Java, CLOS) Podawana jako liczba operacji potrzebnych do wykonania algorytmu, wyraŝona w stosunku do liczby elementów zbioru (n), na którym działa dany algorytm. PoniewaŜ dokładna liczba operacji zaleŝy od konkretnych danych wejściowych, złoŝoność obliczeniową podaje się dla najgorszego moŝliwego przypadku ZłoŜoność obliczeniową wyraŝa się za pomocą tzw. notacji O( ), która określa dominującą tendencję zaleŝności liczby operacji od n. np. algorytm sortowania bąbelkowego zbioru n-elementowego: liczba porównań = 0.5(n 2 -n) liczba przesunięć = 0.75(n 2 -n) złoŝoność obliczeniowa = O(n 2 ) Big-Oh np. 100n, 2n+4, 0.5n+n -1, 0.01n O(n) ZłoŜoność przykład Sortowanie zbioru n=1,000,000 (słowniki, ksiąŝki telefoniczne, bazy danych) Proste metody sortowania O(n 2 ) (wstawianie, wybieranie, bąbelkowe) Sprzęt Czas 1mln op/s 6 dni 100,000 op/s 2 miesiące 10,000 op/s 2 lata Zaawansowane metody sortowania O(n*log(n)) (Shell a, przez podział, ) Sprzęt Czas 1mln op/s 12s 100,000 op/s 2min 10,000 op/s 20min (op/s dotyczy operacji na elementach sortowanego zbioru, które mogąbyćzłoŝone, a nie elementarnych operacji procesora. ZłoŜoność przykład Sortowanie zbioru n=1,000,000,000 (symulacje fizyczne, astronomiczne, biologiczne) Proste metody sortowania O(n 2 ) (wstawianie, wybieranie, bąbelkowe) Sprzęt 1mln op/s Czas 160 lat Zaawansowane metody sortowania O(n*log(n)) (Shell a, przez podział, ) Sprzęt Czas 1mln op/s 0.5h 100,000 op/s 4.5h 10,000 op/s 2 dni (op/s dotyczy operacji na elementach sortowanego zbioru, które mogąbyćzłoŝone, a nie elementarnych operacji procesora. 12

Przykład - WieŜe Hanoi WieŜe Hanoi: Rozwiązanie Stan początkowy Ruch 1 A B C Cel: Przenieść wszystkie krąŝki z jednego drąŝka na inny Zasada 1: Wolno przenosić tylko jeden krąŝek za kaŝdym razem Zasada 2: Nie wolno połoŝyć większego krąŝka na mniejszym Ruch 2 Ruch 3 Ruch 4 Ruch 5 Ruch 6 Ruch 7 WieŜe Hanoi - ZłoŜoność WieŜe Hanoi (2 N ) Dla trzech pierścieni naleŝy wykonać 7 operacji. W ogólnym przypadku: koszt wynosi 2 N 1 = O(2 N ) Przy kaŝdym zwiększeniu N o jeden, nakłady pracy zwiększają się dwukrotnie. Przyrost pracy rośnie bardzo szybko! Dla N = 64 2 N = 2 64 = 18,450,000,000,000,000,000 Dysponując komputerem mogącym wykonywać milion instrukcji na sekundę Wykonanie zajęłoby 584,000 lat! Ale moŝe być jeszcze gorzej 13

ZłoŜoność rozsądna i nierozsądna Algorytmy o rozsądnej złoŝoności obliczeniowej mają złoŝoność najwyŝej wielomianową : O (Log N) O (N) O (NK) where K is a constant Algorytmy o nierozsądnej złoŝoności obliczeniowej mają złoŝoność wykładniczą i wyŝszą O (2 N ) O (N!) O (N N ) O( ) 10 50 100 300 1000 n log n 33 282 665 2469 9966 n 2 100 2500 10,000 90,000 1,000,000 n 3 1000 125000 1,000,000 27mln 1mld (10-cyfr) 2 n 1024 16-cyfr 31-cyfr 91-cyfr n! 3,6mld 65-cyfr 161-cyfr n n 10mld 85-cyfr 201-cyfr Algorytmy heurystyczne - heurystyka Heurystyka od greckiego słowa heurisco odkrywać znajdować Heurystyka twórcze rozwiązywanie problemów, zarówno logicznych, jak i matematycznych przez eksperyment, metodą prób i błędów bądź odwołaniem się do analogii Zastosowanie wszędzie tam, gdzie rozwiązanie problemu wymaga olbrzymiej ilości obliczeń. Dzięki heurystyce moŝna wyeliminować pewne obszary poszukiwanej przestrzeni, redukując koszty obliczeniowe i przyspieszając znalezienie rozwiązania dla porównania: liczba protonów we wszechświecie 126-cyfr liczba mikrosekund od powstania wszechświata 24 cyfry Heurystyka idea - przykład Przypuśćmy, Ŝe komuś upadło szkło kontaktowe. MoŜliwości poszukiwań: Szukanie ślepe schylanie się i szukanie po omacku, nie gwarantuje pozytywnego rezultatu Szukanie systematyczne polega na rozszerzaniu przeszukiwanej przestrzeni w sposób metodyczny i zorganizowany. Zawsze gwarantuje sukces, ale jest bardzo czasochłonne Szukanie analityczne wymaga rozwiązania równania matematycznego rządzącego upadkiem szkła z uwzględnieniem oporu powietrza, siły wiatru, ciąŝenia. Gwarantuje sukces, ale jest niepraktyczne. Szukanie leniwe polega na znalezieniu najbliŝszego optyka i zakupie nowego szkła Szukanie heurystyczne określamy przybliŝony kierunek upadku i domyślamy się, na jaką odległość moŝe upaść szkło, a następnie przeszukujemy wybrany obszar Heurystyka Przeszukiwanie ślepe i heurystyczne jest w penym stopniu do siebie podobne, ale: o szukaniu ślepym mówi się wtedy, gdy nie są wykorzystywane informacje o dziedzinie rozwiązywanego problemu w poszukiwaniu heurystycznym korzysta się z dodatkowych informacji o przestrzeni stanów, a ponadto jest się w stanie ocenić postępy poprawiające efektywność działania Pokonanie mistrza świata w szachach przez komputer stało się moŝliwe dzięki technikom heurystycznym, które pozwoliły wykluczyć warianty nie rokujące sukcesu. 14

Systemy sztucznej inteligencji Wykorzystują heurystykę w celu realizacji celu. Inteligencja - cecha umysłu odpowiadajaąca za sprawność myślenia i innych czynności poznawczych, umoŝliwiajaąca jednostce korzystanie z nabytej wiedzy oraz skuteczne zachowanie się wobec nowych zadań i sytuacji. Encyklopedia Powszechna PWN Inteligencja - umiejętność wnioskowania, rozumowania, kojarzenia faktów. Słownik jęz. ang. Webster Systemy sztucznej inteligencji AI Artificial Intelligence AI jest nauką podejmującą próbę stworzenia urządzeń cechujących się INTELIGENCJĄ W świetle definicji inteligencji, nie (Test wiadomo Turinga) konkretnie jakich urządzeń MoŜna załoŝyć takich jak my (bądź sprytniejszych od nas) Systemy AI to systemy, które (Sieci zachowują Neuronowe) się jak ludzie. Systemy AI to systemy, których budowa i działanie jest oparta o działanie mózgu. (poprawne wnioskowanie) Systemy AI to systemy, których działanie oparte jest o racjonalne zasady. (poprawne wnioskowanie + optymalne decyzje) Systemy AI to systemy, które w działaniu wykazują znamiona racjonalności. Systemy sztucznej inteligencji Systemy ekspertowe Sieci neuronowe Systemy ewolucyjne (algorytmy genetyczne) Technologie oparte na logice rozmytej Algorytmy mrówkowe Teoria gier inne 15