1 / 32

Podstawy informatyki

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)

twila
Download Presentation

Podstawy informatyki

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Podstawy informatyki

  2. 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)

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

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

  5. 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ń

  6. 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)

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

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

  9. 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;

  10. 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;

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

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

  13. Klasy • Wspólna definicja obiektów opisywanych tym samym zestawem atrybutów i funkcji • Dziedziczenie – definiowanie nowej klasy na podstawie już zrealizowanej

  14. Wyrażenia arytmetyczne i logiczne • W językach programowania można używać swobodnie złożonych wyrażeń arytmetycznych i logicznych

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

  16. Języki proceduralne • Biblioteki procedur podzielone na grupy funkcjonalne • Wszystkie dane potrzebne do wykonania przekazywane jako parametry podczas wywołania procedury (funkcji)

  17. 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()

  18. Języki programowania • Assembler • Fortran • Algol • Cobol • PL-1 • C • Simula, Smalltalk • C++ • Java, C# • Prolog • Lisp • Perl, PHP • JavaScript

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

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

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

  22. 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$"

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

  24. 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ść

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

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

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

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

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

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

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

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

More Related