Wstęp do programowania wykład 1 Piotr Cybula Wydział Matematyki i Informatyki UŁ 2012/2013 http://www.math.uni.lodz.pl/~cybula
Jak działa komputer Komputer może być traktowany jako urządzenie służące do przechowywania i przetwarzania informacji Działanie komputera jest kontrolowane przez wykonywany przez niego program
Podstawowe elementy komputera Procesor - mózg komputera zawiera element nadzorujący i koordynujący działania komputera (CU control unit) oraz element odpowiedzialny za operacje arytmetyczne i logiczne (ALU arithmetic logic unit) Pamięć (wewnętrzna) przechowuje m.in. uruchamiany program, dane, tymczasowe struktury danych niezbędne do poprawnego działania uruchamianego programu itp.
Pamięć Pamięć komputera może być traktowana jako ciąg komórek pamięci (nazywanych czasami słowami). Każda komórka pamięci ma pewien adres, określający jej pozycję w pamięci.
Pamięć - cd Każda komórka pamięci składa się z pewnej liczby bitów (zazwyczaj 8, 16, 32 lub 64). Każdy bit zawiera cyfrę dwójkową (0 lub 1) Grupę 8 bitów nazywamy bajtem bajt (1B) = 8 bitów (8b) kilobajt (1kB) = 1024 bajty (2 10 B) megabajt (1MB) = 2 20 B gigabajt (1GB) = 2 30 B
System dziesiętny podstawa: 10 cyfry: 0,1,2,3,4,5,6,7,8,9 największa cyfra jest o 1 mniejsza od podstawy interpretacja liczby: 356 pozycja: 2 1 0 = 3 10 2 + 5 10 1 + 6 10 0
podstawa: 2 cyfry: 0,1 System dwójkowy największa cyfra jest o 1 mniejsza od podstawy interpretacja liczby: 110 pozycja: 2 1 0 = 1 2 2 + 1 2 1 + 0 2 0
Wykonywany program zajmuje grupę powiązanych z sobą komórek pamięci Komórki lub grupy komórek zawierają poszczególne instrukcje programu różne instrukcje są reprezentowane przez różne kombinacje bitów w komórkach pamięci instrukcja mówi komputerowi, że powinien wykonać jakieś zadanie (np. przenieść zawartość komórki pamięci do procesora albo dodać dwie liczby w ALU)
program ciąg instrukcji podczas wykonywania programu CU czyta kolejne instrukcje z pamięci i zapewnia, że są one wykonywane w tym samym porządku
Postać programu Instrukcja może być traktowana jako pewien ciąg zer i jedynek instrukcja o takiej samej roli może mieć różną postać na różnych modelach komputerów Program przechowywany w ten sposób może być wykonywany przez komputer. Mówimy, że jest w postaci kodu maszynowego
Początkowo programy były pisane w kodzie maszynowym Obecnie programy pisze się w językach wysokiego poziomu przykładowe języki: Ada, Pascal, C, C++, C#, Java Programy napisane w jęz. wysokiego poziomu są następnie tłumaczone na kod maszynowy za pomocą specjalnego translatora
Jeszcze o językach Kod maszynowy (przykład): 1100111101011000 1000000111110100 1100110011001010 Język asembler: LOAD A ADD B STORE C każda instrukcja odpowiada jednej instrukcji kodu maszynowego. Program jest następnie tłumaczony na kod maszynowy przy użyciu programu asemblera Język wysokiego poziomu: C := A + B
Części komputera - cd Aby komunikować się z otoczeniem, komputer musi być wyposażony w jednostki wejścia/wyjścia (ang. input, output units), jak ekran, klawiatura, mysz itp Komputer musi być w stanie przechować np. różnorodne dane, programy które nie są wykonywane itp. Służy do tego pamięć pomocnicza (np. dysk twardy, pamięć przenośna, itp.)
Zawartość pamięci pomocniczej jest zazwyczaj zorganizowana w pliki (ang. files) Plik jest zbiorem danych powiązanych z sobą w jakiś sposób (np. zawiera dane czy kod jednego programu). Do plików odwołujemy się poprzez ich nazwy. Można usuwać i tworzyć pliki oraz modyfikować ich zawartość
Etapy tworzenia programu Aby napisać program, musimy: określić zadania programu (faza analizy wymagań i specyfikacji) zaprojektować sposób rozwiązania problemu (faza projektowa) zapisać w/w projekt w wybranym języku programowania (faza implementacji) skompilować i uruchomić program sprawdzić, czy program działa poprawnie (faza testowania)
PROGRAMOWANIE JEST JEDNO TYLKO JĘZYKÓW WIELE
Algorytmy Aby napisać program, musimy znaleźć odpowiedni algorytm czyli opisać, jak rozwiązać konkretny problem algorytmy można zapisywać na różne sposoby: w języku naturalnym w postaci schematu blokowego w postaci instrukcji programu w pseudokodzie...
Przykłady algorytmów Przepis na ciasto Instrukcja składania mebli Metoda rozwiązywania równania kwadratowego itd... oczywiście nie wszystkie są przydatne w programowaniu
Elementy algorytmów Sposób opisu algorytmów musi pozwalać na wyrażenie: sekwencyjności opisujemy kolejne kroki. Kroki muszą być wykonywane w takiej kolejności, w jakiej zostały zapisane: weź 4 jajka, szklankę cukru i cukier waniliowy utrzyj żółtka z cukrem przygotuj szklankę mąki z łyżeczką proszku do pieczenia dodaj część mąki do ucieranej masy ubij pianę z białek dodaj do ucieranej masy pianę i resztę mąki...
wyboru opisujemy fakt konieczności podjęcia decyzji, którą z alternatywnych ścieżek wybrać: jeśli ucierana masa jest zbyt gęsta, to należy dodać łyżkę wody jeżeli ciasto odkleja się od łyżki, to zakańczamy wyrabianie; w przeciwnym wypadku kontynuujemy jeżeli delta jest mniejsza od zera, to piszemy, że równanie kwadratowe nie ma rozwiązań. W przeciwnym wypadku: jeśli delta jest równa zero, to piszemy, że równanie ma jedno rozwiązanie, a w przeciwnym razie, że równanie ma dwa rozwiązania
iteracji musimy być w stanie wyrazić fakt, że pewna część algorytmu może być powtarzana albo określoną ilość razy, albo do momentu zajścia pewnego warunku: podgrzewaj masę mieszając, dopóki cukier się nie rozpuści idź 100 kroków na północ (stukrotne powtórzenie instrukcji idź krok na północ ) rekursji (rekurencji) problem dzielimy na mniejsze (zagnieżdżone) podproblemy o podobnej strukturze. Każdy z nich rozwiązujemy stosując ten sam algorytm
Prosty przykład algorytmu Aby tworzyć algorytmy, musimy rozumieć jak będą one wykonywane przez komputer: obliczenie drugiej potęgi liczby: pobierz liczbę (i zapamiętaj w jakiejś komórce pamięci musimy wiedzieć jak się do niej później odwołać, musimy wiedzieć jak duża ma być ta komórka, bo komputer musi ją zarezerwować) oblicz iloczyn liczby przez nią samą (i zapamiętaj w jakiejś innej komórce pamięci, odwołanie i rozmiar jak wyżej) wypisz wynik (czyli zawartość tej komórki pamięci, w której umieszczono powyższy iloczyn)
dodanie dwóch liczb: pobierz liczbę 1 (i zapamiętaj w jakiejś komórce pamięci musimy wiedzieć jak się do niej później odwołać, musimy wiedzieć jak duża ma być ta komórka, bo komputer musi ją zarezerwować) pobierz liczbę 2 (i zapamiętaj w jakiejś innej komórce pamięci, możliwość odwołania i określenia rozmiaru jak wyżej) oblicz ich sumę (i zapamiętaj w jakiejś innej komórce pamięci, odwołanie i rozmiar jak wyżej) wypisz wynik (czyli zawartość tej komórki pamięci, w której umieszczono sumę)
Projekt algorytmu Dzielimy problem na mniejsze prostsze podproblemy Projektujemy rozwiązanie dla każdego z podproblemów (ewentualnie rekurencyjnie dzieląc ja na kolejne podproblemy) projektowanie od ogółu do szczegółu (ang. top-down design)
Algorytm
Język programowania Kolejny krok to zapisanie algorytmu w wybranym języku programowania Każdy język ma swoją składnię: słowa kluczowe instrukcje itd...
Druga potęga w języku Pascal (* program obliczający drugą potęgę liczby *) program prog1; uses crt; var a, kwad: integer; begin writeln('program oblicza trzecia potege podanej liczby'); write('podaj a:'); read(a); kwad := a * a; writeln('wynik wynosi ', kwad); end.
Druga potęga w języku C /* program obliczający drugą potęgę liczby */ #include <stdio.h> int main() { int a, kwad; printf("program oblicza trzecia potege podanej liczby\n"); printf("podaj a: "); scanf("%d", &a); kwad = a * a; printf("wynik wynosi %d\n", kwad); return 0; }
Druga potęga w języku C++ /* program obliczający drugą potęgę liczby */ #include <iostream> int main() { int a, kwad; std::cout << "Program oblicza trzecia potege podanej liczby" << std::endl; std::cout << "Podaj a: "; std::cin >> a; kwad = a * a; std::cout << "Wynik wynosi " << kwad << std::endl; return 0; }
Trzecia potęga w języku Ada -- program obliczający drugą potęgę liczby with ada.text_io, ada.integer_text_io; use ada.text_io, ada.integer_text_io; procedure potega is a, kwad: integer; begin put_line("program oblicza trzecia potege podanej liczby"); put("podaj a: "); get(a); kwad := a * a; put("wynik wynosi "); put(kwad, 0); new_line; end potega;
Etapy Program piszemy posługując się edytorem tekstu (powstaje tekst źródłowy, inaczej kod źródłowy, programu)
Etapy - cd Wersja źródłowa programu musi zostać przetłumaczona na język maszyny (procesora) służy do tego kompilator danego języka programowania (etap kompilacja) kompilator sprawdza przy tym błędy składniowe skompilowana wersja (zazwyczaj zapisywana w pliku na dysku jako tzw. plik obiektowy - object file) jest już w języku maszynowym, ale jest jeszcze niepełna musi zostać połączona z bibliotekami
Etapy - cd Biblioteki zawierają dodatkowe instrukcje programu, napisane wcześniej bądź przez kogoś innego i oddzielnie skompilowane. Proces łączenia programu z bibliotekami wykonywany jest przez program zwany linkerem (etap linkowanie) inna, polska nazwa konsolidacja w wyniku otrzymujemy program gotowy do uruchomienia