wykład 1 - Wydział Matematyki i Informatyki UŁ
Transkrypt
wykład 1 - Wydział Matematyki i Informatyki UŁ
Komputery, programy, języki Tworzenie programu Algorytmy Wstęp do programowania wykład 1 Agata Półrola Wydział Matematyki i Informatyki UŁ sem. zimowy 2016/2017 Agata Półrola Wydział Matematyki i Informatyki UŁ Wstęp do programowania Język C++ Komputery, programy, języki Tworzenie programu Algorytmy strona www: http://www.math.uni.lodz.pl/~polrola Agata Półrola Wydział Matematyki i Informatyki UŁ Wstęp do programowania Język C++ Komputery, programy, języki Tworzenie programu Algorytmy To oczywiście pewnie wszyscy wiedzą... 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 Agata Półrola Wydział Matematyki i Informatyki UŁ Wstęp do programowania Język C++ Komputery, programy, języki Tworzenie programu Algorytmy Język C++ Podstawowe elementy komputera Procesor - “mózg” komputera. Zawiera: jednostkę sterującą (CU - control unit) - element nadzorujący i koordynujący działanie komputera jednostkę wykonawczą (EU - execution unit), a w niej m.in. element odpowiedzialny za operacje arytmetyczne i logiczne (ALU - arithmetic-logic unit) oraz różnego rodzaju rejestry (wbudowane w procesor małe komórki pamięci o szybkim dostępie, służące do przechowywania wyników obliczeń, adresów w pamięci operacyjnej, instrukcji; procesor wykonuje działania korzystając ze swoich rejestrów - dane są pobierane z pamięci do rejestrów a potem odsyłane) . Pamięć operacyjna przechowuje m.in. uruchamiany program, dane, tymczasowe struktury danych niezbędne do poprawnego działania uruchamianego programu itp. Agata Półrola Wydział Matematyki i Informatyki UŁ Wstęp do programowania Komputery, programy, języki Tworzenie programu Algorytmy Język C++ Podstawowe elementy komputera - cd jednostki wejścia/wyjścia umożliwiające komunikację z “otoczeniem” (mysz, klawiatura, ekran itp) pamięć pomocnicza (zewnętrzna) pozwalająca przechowywać dane, programy które nie są wykonywane itp zawartość pamięci pomocniczej jest zazwyczaj zorganizowana w pliki Agata Półrola Wydział Matematyki i Informatyki UŁ Wstęp do programowania Komputery, programy, języki Tworzenie programu Algorytmy Język C++ Pamięć Pamięć komputera może być traktowana jako ciąg komórek pamięci (nazywanych czasami słowami). Każda komórka ma pewien adres, określający jej pozycję w pamięci. Każda komorka składa się z pewnej liczby bitów (zazwyczaj 8, 16, 32 lub 64). 8 bitów tworzy bajt Każdy bit przechowuje cyfrę dwójkową (0 lub 1) za pomocą ciągów cyfr dwójkowych zapisujemy liczby całkowite, rzeczywiste, wartości logiczne, instrukcje programu itd Agata Półrola Wydział Matematyki i Informatyki UŁ Wstęp do programowania Komputery, programy, języki Tworzenie programu Algorytmy Język C++ Wykonanie programu Wykonywany program zajmuje grupę powiązanych ze sobą komórek pamięci. Komórki lub grupy komórek zawierają poszczególne instrukcje programu. program to ciąg instrukcji podczas wykonania programu CU czyta kolejne instrukcje z pamięci i zapewnia, że są one wykonywane w odpowiednim porządku instrukcja “mówi” komputerowi, że powinien wykonać jakieś zadanie (np. przenieść zawartość komórki pamięci znajdującej się pod jakimś adresem do określonego rejestru procesora, albo dodać dwie liczby w ALU) Agata Półrola Wydział Matematyki i Informatyki UŁ Wstęp do programowania Komputery, programy, języki Tworzenie programu Algorytmy Język C++ Postać programu (“wewnątrz komputera”) Instrukcja jest zapisana jako pewien ciąg zer i jedynek. instrukcja o tej samej roli może mieć różną postać w rożnych modelach komputerów Program zapisany w takiej postaci może być wykonany przez komputer. Mówimy, że jest w postaci kodu maszynowego instrukcje kodu maszynowego nazywa się też rozkazami maszynowymi Przykład 0011001111110011 0011111110000110 1001001111001111 Agata Półrola Wydział Matematyki i Informatyki UŁ Wstęp do programowania Komputery, programy, języki Tworzenie programu Algorytmy Język C++ Języki programowania początkowo programy były pisane w kodzie maszynowym kolejnym etapem był język asembler jest to język używający krótkich nazw odpowiadających poszczególnym rozkazom maszynowym danego typu procesora oraz pozwalający na użycie nazw zmiennych zamiast ich adresów Przykład LOAD A ADD B STORE C przetłumaczenie takiego programu na kod maszynowy jest bardzo proste język asembler jest w użyciu; pozwala pisać bardzo wydajne programy Agata Półrola Wydział Matematyki i Informatyki UŁ Wstęp do programowania Komputery, programy, języki Tworzenie programu Algorytmy Język C++ Języki programowania - cd kolejnym etapem są języki programowania wysokiego poziomu (np. Pascal, Ada, C++, Java, ...) prosty zapis operacji Przykład C := A + B programy napisane w takich językach są tłumaczone na kod maszynowy przy pomocy specjalnego translatora Agata Półrola Wydział Matematyki i Informatyki UŁ Wstęp do programowania Komputery, programy, języki Tworzenie programu Algorytmy Język C++ Od kodu do programu wykonywalnego Program napisany w języku programowania ma postać pliku tekstowego. Ta postać nazywana jest kodem źródłowym Aby program można było wykonać, musi zostać przetłumaczony na kod wykonywalny (program wykonywalny) zapisany w języku maszynowym proces tłumaczenia programu nazywany jest kompilacją Agata Półrola Wydział Matematyki i Informatyki UŁ Wstęp do programowania Komputery, programy, języki Tworzenie programu Algorytmy Język C++ Od kodu do programu wykonywalnego - cd proces tłumaczenia programu składa się tak naprawdę z dwóch czynności: kompilacji i łączenia kompilacja (przetworzenie kodu źródłowego przez program zwany kompilatorem) zamienia program źródłowy na plik binarny zawierający program w kodzie maszynowym (object file). Najczęściej nie jest on jeszcze końcową wersją programu - zawiera odwołania do zewnętrznych podprogramów umieszczonych w bibliotekach kompilacja może być poprzedzona analizą kodu źródłowego wykonywaną przez program zwany preprocesorem (często kompilator spełnia równocześnie rolę preprocesora) łączenie (konsolidacja, linkowanie,) wykonywana przez program zwany konsolidatorem, tworzy kolejny plik binarny, w którym jest już wszystko co jest potrzebne do wykonania programu na danym sprzęcie z danym systemem operacyjnym Agata Półrola Wydział Matematyki i Informatyki UŁ Wstęp do programowania Komputery, programy, języki Tworzenie programu Algorytmy Język C++ Języki interpretowane (skryptowe) Programy napisane w niektórych językach programowania (np. w języku Perl lub Python) uruchamiane są w inny sposób. do uruchomienia programu potrzebne jest środowisko uruchomieniowe - interpreter interpreter nie tworzy programu wykonywalnego; poszczególne instrukcje programu tłumaczone są po kolei na bieżąco na kod maszynowy i wykonywane. Odwołania do podprogramów umieszczonych w zewnętrznych bibliotekach również przetwarzane są na bieżąco Agata Półrola Wydział Matematyki i Informatyki UŁ Wstęp do programowania Komputery, programy, języki Tworzenie programu Algorytmy Język C++ Etapy tworzenia programu Aby napisać program musimy: określić wymagania 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) ... z czego faza implementacji jest chyba najprostsza ... ;-) Agata Półrola Wydział Matematyki i Informatyki UŁ Wstęp do programowania Komputery, programy, języki Tworzenie programu Algorytmy PROGRAMOWANIE JEST JEDNO tylko językow programowania wiele Agata Półrola Wydział Matematyki i Informatyki UŁ Wstęp do programowania Język C++ Komputery, programy, języki Tworzenie programu Algorytmy Język C++ Algorytmy Aby napisać program, musimy znaleźć odpowiedni algorytm - czyli opisać, jak rozwiązać konkretny problem / zadanie Algorytmy można zapisywać na różne sposoby: w języku naturalnym w postaci schematu blokowego w postaci instrukcji programu w pseudokodzie ... Agata Półrola Wydział Matematyki i Informatyki UŁ Wstęp do programowania Komputery, programy, języki Tworzenie programu Algorytmy Przykłady algorytmów przepis na ciasto instrukcja składania mebli “przepis” na rozwiązanie równania kwadratowego postaci ax 2 + bx + c = 0 metoda znalezienia największej liczby w (bardzo, bardzo długim) ciągu liczb Agata Półrola Wydział Matematyki i Informatyki UŁ Wstęp do programowania Język C++ Komputery, programy, języki Tworzenie programu Algorytmy Elementy algorytmów Sposób opisu algorytmu musi pozwalać na wyrażenie: sekwencyjności wyboru iteracji rekursji (rekurencji) Agata Półrola Wydział Matematyki i Informatyki UŁ Wstęp do programowania Język C++ Komputery, programy, języki Tworzenie programu Algorytmy Sekwencyjność Opisujemy kolejne kroki. Kroki muszą być wykonywane w takiej kolejności, w jakiej zostały zapisane Przykład 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 ... Agata Półrola Wydział Matematyki i Informatyki UŁ Wstęp do programowania Język C++ Komputery, programy, języki Tworzenie programu Algorytmy Język C++ Wybór Opisujemy fakt konieczności podjęcia decyzji którą z alternatywnych “ścieżek” wybrać Przykłady jeżeli ucierana masa jest zbyt gęsta, to dodaj łyżkę wody jeżeli uczestnik turnieju odpowiedział poprawnie na co najmniej 5 pytań, to przechodzi do następnego etapu, w przeciwnym razie odpada z gry jeżeli wyróżnik trójmianu kwadratowego jest ujemny, to piszemy że trójmian nie ma pierwiastków, jeżeli wyróżnik jest równy zero, to piszemy że trójmian ma jeden pierwiastek, w pozostałych przypadkach trójmian ma dwa pierwiastki Agata Półrola Wydział Matematyki i Informatyki UŁ Wstęp do programowania Komputery, programy, języki Tworzenie programu Algorytmy Iteracja Opisujemy fakt, że pewna część algorytmu będzie powtarzana albo określoną ilość razy, albo do momentu zajścia pewnego warunku Przykłady podgrzewaj masę mieszając, dopóki cukier się nie rozpuści powtórz 100 razy czynność “idź krok na północ” (czyli idź 100 kroków na północ) Agata Półrola Wydział Matematyki i Informatyki UŁ Wstęp do programowania Język C++ Komputery, programy, języki Tworzenie programu Algorytmy Język C++ Rekurencja Problem dzielimy na mniejsze (zagnieżdżone) podproblemy o podobnej strukturze. Każdy z nich rozwiązujemy stosując ten sam algorytm. Agata Półrola Wydział Matematyki i Informatyki UŁ Wstęp do programowania Komputery, programy, języki Tworzenie programu Algorytmy Język C++ Aby tworzyć algorytmy, powinniśmy rozumieć co jest w stanie zrobić komputer W przypadku bardziej złożonego problemu wygodnie jest: podzielić problem na mniejsze, prostsze podproblemy zaprojektować rozwiązanie dla każdego z nich, w razie potrzeby znów dzieląc je na podproblemy Jest to tzw. projektowanie “od ogółu do szczegółu” albo “z góry w dół” (top-down design) Kolejny krok to zapisanie algorytmu w wybranym języku programowania Agata Półrola Wydział Matematyki i Informatyki UŁ Wstęp do programowania Komputery, programy, języki Tworzenie programu Algorytmy Język C++ Każdy język ma swoją składnię: słowa kluczowe instrukcje itd Na wykładzie / ćwiczeniach będziemy używać języka C++ jeden z bardziej popularnych języków programowania powstały w latach 80-tych XX wieku jako rozszerzenie języka C o mechanizmy programowania obiektowego Agata Półrola Wydział Matematyki i Informatyki UŁ Wstęp do programowania Komputery, programy, języki Tworzenie programu Algorytmy Język C++ Musimy zaopatrzyć się w jakiś kompilator C++ (albo w odpowiednie IDE, tj. zintegrowane środowisko programistyczne dla danego języka) Przykłady IDE: Code::Blocks Dev-C++ Eclipse Falcon C++ wxDev-C++ VisualStudio Ultimate++ .... Agata Półrola Wydział Matematyki i Informatyki UŁ Wstęp do programowania Komputery, programy, języki Tworzenie programu Algorytmy Przykładowy program # include < iostream > /* dyrektywa preprocesora */ int main () // program glowny { std :: cout << " Dzien dobry ! \ n " ; std :: cout << " To ja , Twoj pierwszy program " ; return 0; } Agata Półrola Wydział Matematyki i Informatyki UŁ Wstęp do programowania Język C++ Komputery, programy, języki Tworzenie programu Algorytmy Język C++ Dyrektywy preprocesora # include < iostream > linia zaczyna się od dyrektywy preprocesora preprocesor analizuje kod źródłowy poszukując przeznaczonych dla niego poleceń (dyrektyw lub makr) celem wykonania preprocesora jest przekształcenie kodu programu zgodnie z treścią tych poleceń w przypadku dyrektywy #include przekształcenie polega na dołączeniu w danym miejscu kodu pliku podanego po dyrektywie tu dołączamy plik (bibliotekę) iostream ponieważ będziemy używać tzw. strumieni do wypisania tekstu uwaga - preprocesor nie dokonuje kontroli poprawności programu! Agata Półrola Wydział Matematyki i Informatyki UŁ Wstęp do programowania Komputery, programy, języki Tworzenie programu Algorytmy Język C++ Komentarze # include < iostream > /* dyrektywa preprocesora */ int main () // program glowny Komentarz to taki fragment zawartości pliku z kodem źródłowym programu, który nie jest brany pod uwagę przy kompilacji. W C++ istnieją dwa sposoby wstawiania komentarzy: komentarzem jest tekst zawarty między /* (otwarciem komentarza) i */ (zamknięciem komentarza) komentarzy tego typu nie można zagnieżdżać! komentarzem jest też tekst rozpoczynający się od // jest traktowany jako komentarz; końcem komentarza jest wówczas koniec linii Agata Półrola Wydział Matematyki i Informatyki UŁ Wstęp do programowania Komputery, programy, języki Tworzenie programu Algorytmy Język C++ Definicja głównej funkcji programu int main () // program glowny { ...... // tresc programu return 0; } funkcja o nazwie main jest “właściwym programem” w C++. Nazwa ta jest zastrzeżona (nie można jej zmienić) każda funkcja zwraca wartość pewnego typu; dla main jest to zawsze int wartość całkowita. Typ wyniku jest podany przed nazwą funkcji. Na końcu treści programu znajduje się instrukcja return 0; powodująca zwrócenie zera (oznaczającego zazwyczaj poprawne wykonanie programu) funkcja może przyjmować również pewne dane wejściowe - argumenty. Listę argumentów podaje się w nawiasach () następujących po nazwie funkcji. Pusta lista argumentów oznaczana jest pustymi nawiasami.. nawiasy klamrowe { i } wyznaczają początek i koniec bloku zawierającego instrukcje programu każda instrukcja programu jest zakończona średnikiem Agata Półrola Wydział Matematyki i Informatyki UŁ Wstęp do programowania Komputery, programy, języki Tworzenie programu Algorytmy Język C++ Strumień wyjścia std::cout std :: cout << " Dzien dobry ! \ n " ; std :: cout << " To ja , Twoj pierwszy program " ; użycie tzw. strumienia std::cout pozwala na przesłanie danych na standardowe wyjście (ekran) znaki << (nazywane operatorem strumienia wyjścia pozwalają “wskazać dane” które mają być przekazane do strumienia tu przekazujemy tekst (napis). Napis musi być ujęty w cudzysłowy polecenie “przesyłania danych” musi być zakończone średnikiem przekierowania można “sklejać”: std :: cout << " Dzien dobry ! \ n " Agata Półrola Wydział Matematyki i Informatyki UŁ Wstęp do programowania << " To ja " ; Komputery, programy, języki Tworzenie programu Algorytmy Znaki specjalne w tekście std :: cout << " Dzien dobry ! \ n " ; std :: cout << " To ja , \ t \ t Twoj pierwszy \" program \" " ; W tekście można umieszczać znaki specjalne. Najczęściej używane to: \n - przejście do nowej linii \t - znak tabulacji \" - znak cudzysłowu Efekt przejścia do nowej linii można uzyskać również przesyłając na standardowe wyjście znak oznaczony std::endl Agata Półrola Wydział Matematyki i Informatyki UŁ Wstęp do programowania Język C++ Komputery, programy, języki Tworzenie programu Algorytmy Przykładowy program - drobna zmiana # include < iostream > using namespace std ; // okreslenie przestrzeni nazw int main () { cout << " Dzien dobry ! " << endl ; cout << " To ja , Twoj pierwszy program " ; return 0; } Agata Półrola Wydział Matematyki i Informatyki UŁ Wstęp do programowania Język C++ Komputery, programy, języki Tworzenie programu Algorytmy Język C++ Przestrzenie nazw using namespace std ; ... cout << " Dzien dobry ! " << endl ; Powyższa linia “mówi” że w programie poniżej niej będziemy używać nazw ze standardowej przestrzeni nazw - std nie musimy zatem poprzedzać nazw cout i endl przedrostkiem std:: - kompilator “wie” gdzie poszukiwać danego elementu Agata Półrola Wydział Matematyki i Informatyki UŁ Wstęp do programowania Komputery, programy, języki Tworzenie programu Algorytmy Identyfikatory w C++ Nazwy wykorzystywane w programie, (tzw. identyfikatory) muszą być ciągami znaków złożonymi z liter, cyfr i znaków podkreślenia, zaczynającymi się od litery, przy czym znak podkreślenia traktowany jest jak litera. polskie znaki nie są traktowane jako litery! wielkie i małe litery są rozróżniane zazwyczaj rozróżniane są tylko pierwsze 32 znaki Przykłady poprawne: prog1, prog 1, moja zmienna, A123, JamesBond007, moj program niepoprawne: on&ona, 1szy program, max% Agata Półrola Wydział Matematyki i Informatyki UŁ Wstęp do programowania Język C++ Komputery, programy, języki Tworzenie programu Algorytmy Język C++ Słowa kluczowe w C++ Niektóre identyfikatory są tzw. słowami kluczowymi (zarezerwowanymi). Nie mogą one pojawiać się w programie w innym znaczeniu niż nadane w standardzie języka. Słowa kluczowe w C++ and bitor char continue dynamic cast extern goto mutable operator public signed switch try unsigned wchar t and eq bool class default else false if namespace or register sizeof template typedef using while asm break compl delete enum float inline new or eq reinterpret cast static this typeid virtual xor Agata Półrola Wydział Matematyki i Informatyki UŁ Wstęp do programowania auto case const do explicit for int not private return static cast throw typename void xor eq bitand catch const cast double export friend long not eq protected short struct true union volatile