Podstawy informatyki
description
Transcript of 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)
Możliwość zastosowania do wielu podobnych zadań (klasa zadań rozwiązywanych za pomocą algorytmu)
Przykład – książka w biblioteceProblem- 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 programowaniaPrzeznaczenie: 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
Prolog Lisp Perl, PHP JavaScript
Assembler Fortran Algol Cobol PL-1 C Simula, Smalltalk C++ Java, C#
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 łatwomoż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