320 likes | 495 Views
Podstawy informatyki. Algorytm – (Wikipedia). Algorytm - skończony, uporządkowany ciąg jasno zdefiniowanych czynności, koniecznych do wykonania pewnego zadania. Cechy algorytmu: Jednoznaczność (potrzebne dane, czynności i ich kolejność, oczekiwany wynik)
E N D
Algorytm – (Wikipedia) Algorytm - skończony, uporządkowany ciąg jasno zdefiniowanych czynności, koniecznych do wykonania pewnego zadania. Cechy algorytmu: • Jednoznaczność (potrzebne dane, czynności i ich kolejność, oczekiwany wynik) • Możliwość zastosowania do wielu podobnych zadań (klasa zadań rozwiązywanych za pomocą algorytmu)
Przykład – książka w bibliotece Problem- chcemy odszukać książkę znając autora i tytuł. Algorytm: • Weź książkę (pierwszą z lewej z najwyższej półki) • Sprawdź, czy jest to szukana książka. • Jeśli tak – książka znaleziona, koniec algorytmu. • Czy pozostały jeszcze niesprawdzone książki? • Jeśli nie – książki nie ma w tej bibliotece, koniec algorytmu. • Weź następną książkę (kolejna z prawej a gdy już nie ma pierwsza z lewej z niższej półki). • Przejdź do punktu 2.
Poprawność, wykonalność Poprawny algorytm – dla określonej klasy danych zawsze otrzymujemy wynik zgodny z oczekiwaniami np. największą z możliwych wartość wskaźnika podczas optymalizacji. Wykonalny algorytm - dla określonej klasy danych algorytm zawsze się kończy (własność stopu). Algorytm musi być wykonalny aby mógł być poprawny.
Złożoność obliczeniowa • Złożoność czasowa – czas najczęściej zależy od wymiarowości zadania. O czasie wykonania obliczeń decyduje niewielka część najczęściej wykonywanych operacji. Typowe zależności: • Czas stały niezależny od wymiarowości • Liniowa (n) • Logarytmiczna (log2n) • Liniowo-logarytmiczna (n * log2n) • Kwadratowa (n2 ) • Złożoność pamięciowa – często istnieje wymienność, szybsze obliczenia kosztem większego zapotrzebowania na pamięć Przykład – szukanie książki (w zbiorze n książek) • Złożoność pesymistyczna – n sprawdzeń • Złożoność średnia – n/2 sprawdzeń
Katalog uporządkowany • Dla katalogu nieuporządkowanego nie znamy lepszego algorytmu wyszukiwania niż „pełny przegląd” (n) • Dla katalogu uporządkowanego istnieje szybszy algorytm – „wyszukiwanie binarne” ((log2n)
Język programowania Przeznaczenie: definiowanie algorytmów. Wymagane cechy: • Jednoznaczność • Przejrzystość • Zwarty zapis • Precyzja. • Czytelność Język programowania służy do: • Komunikowania się programisty z komputerem • Komunikowania się programisty z innymi programistami • Komunikowania się programisty z samym sobą.
Podstawowe elementy • Komentarze – uwagi pomagające zrozumieć opis algorytmu • Deklaracje – używane biblioteki, przestrzeń nazw, opcje,… • Zmienne – nazwa, typ (int, float, text) • Stałe – dane używane w obliczeniach • Struktury kontrolne (if, for, while,..) • Procedury, funkcje, klasy
Zmienne i stałe • Stała – pewna wartość używana podczas obliczeń np. 0.22 , ”abc” • Zmienna – nazwana wielkość używana w obliczeniach, która może w trakcie obliczeń przyjmować różne wartości. • Do przechowywania zmiennych rezerwuje się potrzebną ilość pamięci • Podstawienie wartości na zmienną x=50 lub x=x+y • Zmienne wykorzystujemy w wyrażeniach arytmetycznych i logicznych np.: if (x <100 && x>40) x=x+30;
Struktury kontrolne • Zmieniają kolejność wykonywania komend języka • if ( x > 100 ) { x1 = x } else { x1 = x+x1 } • for (i = 0; i < 10; i++) { a[i] = a[i+1];} • do {i++;} while (i < 10); • switch (s) { case ”a”: x=”b”; break; … • goto et100;
Procedury i funkcje • Przeznaczenie: wygodne wydzielenie powtarzalnego fragmentu kodu np.: int xy(int x, int y) { … powtarzany fragment kodu } • int – typ zwracanego wyniku • xy – nazwa funkcji • x – przekazywany parametr • y – przekazywany parametr
Rekurencja • Wywoływanie funkcji przez siebie • Przydatny sposób do realizacji algorytmów dotyczących struktur wykazujących podobieństwo na różnych poziomach np. struktur hierarchicznych • Realizacja z wykorzystaniem stosu – możliwe przepełnienie stosu
Klasy • Wspólna definicja obiektów opisywanych tym samym zestawem atrybutów i funkcji • Dziedziczenie – definiowanie nowej klasy na podstawie już zrealizowanej
Wyrażenia arytmetyczne i logiczne • W językach programowania można używać swobodnie złożonych wyrażeń arytmetycznych i logicznych
Semantyka i syntaktyka • W językach programowania ściśle określa się • syntaktykę (gramatykę) – dopuszczalną budowę zdań języka (kolejność elementów, relacje między nimi,…) • semantykę – znaczenie poszczególnych elementów języka (co spowoduje użycie pewnej konstrukcji językowej) • Notacja BNF (Backus-Naur form) – ścisłe definiowanie gramatyki języków programowania (bezkontekstowe) Przykład: <liczba_binarna> ::= <liczba_binarna> <cyfra><liczba_binarna> ::= <cyfra><cyfra> ::= 0 | 1
Języki proceduralne • Biblioteki procedur podzielone na grupy funkcjonalne • Wszystkie dane potrzebne do wykonania przekazywane jako parametry podczas wywołania procedury (funkcji)
Języki obiektowe • Definiujemy klasę obiektów podając listę atrybutów określających obiekt oraz listę funkcji, za pomocą których można wpływać na działanie obiektu. • Tworzymy egzemplarze obiektów (słowo kluczowe new) np. przyciski w okienku. • Do atrybutów można odwoływać się poprzez nazwę obiektu i nawę atrybutu np. nazwa.atrybut • Funkcje obiektu można uruchomić podając nazwę obiektu i nazwę funkcji np. nazwa.funkcja()
Języki programowania • Assembler • Fortran • Algol • Cobol • PL-1 • C • Simula, Smalltalk • C++ • Java, C# • Prolog • Lisp • Perl, PHP • JavaScript
Assembler i macro-assembler • Język programowania niskiego poziomu • Asembler operuje na rejestrach procesora i komórkach pamięci • Komendy odpowiadają rozkazom procesora • Różne zestawy komend dla różnych modeli komputerów – brak przenośności oprogramowania pisanego w assemblerze • Macro-assembler – możliwość definiowania szablonów, krótszy i bardziej czytelny kod ale trudności podczas testowania.
Rejestry procesora x86 • AX – akumulator • DX – rozszerzenie akumulatora do mnożenia i dzielenia • CX – licznik iteracji • BX – główny rejestr adresowy • SP – wskaźnik stosu • BP – wskaźnik ramki • SI, DI – pomocnicze rejestry adresowe • IP – licznik instrukcji • FLAGS – rejestr wskaźników
Typowe rozkazy procesora • kopiowanie danych z pamięci do rejestru • kopiowanie danych rejestru do pamięci • zapamiętywanie danych na stosie • pobieranie danych za stosu • dodawanie zawartości rejestrów • odejmowanie zawartości rejestrów • dodawanie i odejmowanie jedności • zmiana znaku liczby • działania na bitach iloczyn logiczny, suma logiczna, suma modulo 2 (różnica symetryczna), negacja, przesunięcie bitów w lewo lub prawo • skoki bezwarunkowe • skoki warunkowe
Przykładowy program w assemblerze start: mov ah, 9 mov dx, info int 21h mov ah, 0 int 16h mov ax, 4C00h int 21h Info db „Hello world$"
FORTRAN – formula translator • zespół Johna Backusa 1954-57, IBM • Uniwersalny język do obliczeń inżynierskich • Programowanie z użyciem kart perforowanych • Wyrażenia arytmetyczne, tablice, funkcje
Algol – algorithmic language • John Backus, Peter Naur – specyfikacja przy współpracy międzynarodowej (Algol 60) • Uniwersalny język algorytmiczny oparty na ściśle zdefiniowanej gramatyce (notacja BNF) • Instrukcje blokowe (begin end) • Tablice dynamiczne (rozmiar definiowane w trakcji obliczeń a nie podczas translacji) • Rekurencja – wywoływanie procedur przez siebie • Przekazywanie parametrów do procedur przez wartość
COBOLCommon Business Oriented Language • Język przetwarzania danych biznesowych • Bardzo czytelny zapis – niepotrzebna dodatkowa dokumentacja • Rozbudowana składnia • Tylko zmienne globalne • Brak dynamicznej alokacji pamięci, rekurencji • Proste programowanie ale dużo pisania
PL-1 Programming Language One • Opracowany w IBM na początku lat 60-tych • „Wszystkomający” uniwersalny język programowania dla celów naukowych, inżynierskich i biznesowych • Wiele typów danych • Struktury danych • Rozbudowane operacje we-wy dla wielu urządzeń • Obszerna dokumentacja
Język C • Opracowany dla własnych potrzeb do realizacji jądra systemu operacyjnego Unix 1969-73 w Laboratoriach Bell’a • W 1978 Brian Kernighan i Dennis Ritchie opublikowali jego dokumentację • Zwarty zapis np. { } zamiast begin end, i++ zamiast i = i + 1 • Standardowa biblioteka funkcji (funkcje matematyczne, operacje we-wy, współpraca z systemem operacyjnym) • Użycie zmiennych wskaźnikowych
Simula • Rozszerzenie Algolu • Opracowany w 1967 w Oslo jako uniwersalny język dla potrzeb symulacji • Wprowadzono koncepcje klasy i obiektu • Obiekty należące do tej samej klasy są opisywane przez te same parametry i funkcje • Obiekty mogą być tworzone i usuwane
Smalltalk • Powstał w latach 70-tych w firmie Xerox • Pierwszy czysto obiektowy język programowania • Wszystkie dane (nawet stałe) są obiektami • Koncepcja maszyny wirtualnej – implementacja na różnych platformach • Garbage collection – odzyskiwanie nieużywanej pamięci • Zgrabny język o dużych możliwościach definiowania nowych funkcjonalności
C++ • Powstał w latach 80-tych, Bjarne Stroustrup • Rozszerzenie obiektowe języka C • Klasy, dziedziczenie • Konstruktory i destruktory – metody wywoływane podczas tworzenia i usuwania obiektów • Bezpośrednie zarządzanie dostępną pamięcią. Operatory new i delete do alokacji pamięci dla danych, struktur i klas • Przestrzenie nazw • … Bogaty ale dość złożony język, którym łatwo można zrobić wszystko włącznie z błędami.
Java • Opracowany w Sun Microsystems w latach 1991-94, James Gosling • Podstawowe koncepcje przejęte z języka Smalltalk, składnia wzorowana na C++ ale starano się usunąć te elementy, które były przyczyną błędów programistycznych w C++ • Kompilowany do kodu bajtowego – implementacja na wielu platformach • Garbage collection • Dziedziczenie tylko od jednej klasy • Bogate biblioteki klas • Nacisk na zastosowania sieciowe i programowanie rozproszone • Uruchamianie programów – NetBeans, JBuilder
C# - C Sharp • Odpowiedź Microsoftu na język Java • Powstał w 2000 w zespole kierowanym przez Andersa Hejlsberga • Kod kompilowany do języka CIL, wymaga środowiska uruchomieniowego .NET lub Mono DotGNU • Garbage collection • Dziedziczenie tylko z jednej klasy • Możliwość dynamicznego tworzenia kodu w trakcie działania programu • Bogate biblioteki klas .NET firmy Microsoft • Silne wsparcie przy uruchamianiu programów w Visual Studio