Programowanie I O czym będziemy mówili Podstawy programowania w językach proceduralnym ANSI C obiektowym Java Uwaga! podobieństwa w podstawowej strukturze składniowej (zmienne, operatory, instrukcje sterujące...) zasadnicze różnice organizacja kodu programu procedury/funkcje klasy, obiekty sposób zarządzania pamięcią wolna amerykanka środowisko kontrolowane 2 Plan wykładu z lotu ptaka Plan wykładu nieco dokładniej Podstawowy kurs języka C połączony ze wstępem do programowania Tam, gdzie skończy się kurs C (struktury, wskaźniki) zaczniemy mówić o programowaniu obiektowym w języku Java (klasy, obiekty) Kontynuacja wykład o programowaniu obiektowo- zdarzeniowym w przyszłym semestrze. Budowanie programów w języku C Struktura programu i podstawowe typy danych Zmienne, stałe, literały Operatory i wyrażenia Sterowanie wykonaniem programu Funkcje Złożone typy danych Wskaźniki i zarządzanie pamięcią w języku C Budowanie programów w języku Java Obiektowa organizacja kodu klasy i obiekty 3 4
Środowisko programistyczne Polecana literatura Przykłady uruchamiane w terminalu systemu operacyjnego Linux Używany kompilator: gcc (GNU C Compiler) Sugerowany edytor tekstowy w trybie graficznym jedit (napisany w języku Java) w trybie tekstowym np. nano, pico, vim lub wbudowany edytor programu Midnight Commander Brian W. Kerninghan, Dennis M. Ritchie, Język ANSI C, WNT 2004 Bruce Eckel, Thinking in C++,, rozdział poświęcony językowi C, Helion 2002. Książka dostępna za darmo w wersji elektronicznej (po angielsku) Chuck Allison, Thinking in C, prezentacja flashowa dostępna do pobrania ze strony: http://mindview.net/cds/thinkinginc/beta3 W dalszej części wykładu (oraz laboratoriów) korzystać również będziemy ze zintegrowanego środowiska programistycznego Eclipse 5 6 Algorytmy Prezentacja/zapis algorytmów Algorytm to przepis postępowania prowadzący do rozwiązania konkretnego zadania; zbiór poleceń dotyczących pewnych obiektów (danych) ze wskazaniem kolejności w jakiej polecenia te mają być wykonane Algorytmy można formułować (i wykonywać) niezależnie od programowania komputerów,, np. pisemne sposoby wykonywania operacji arytmetycznych na liczbach dziesiętnych różnego rodzaju procedury administracyjne np. algorytm rejestracji samochodu... Najczęściej spotykane metody: język naturalny (opis słowno-muzyczny ) pewna konwencja notacyjna ( pseudo-kod pseudo-kod ) schematy blokowe lub sieci działań (notacja graficzna) język programowania (C, Java, C#, PHP,...) 7 8
Prosty przykład Kilka słów na temat przykładu opis schemat blokowy Obliczanie średniej arytmetycznej dwóch liczb: 1. Rozpocznij obliczenia 2. Wczytaj wartości argumentów: a i b 3. Oblicz wartość wynik = (a+b)/2 4. Zapisz wynik 5. Zakończ obliczenia start wczytaj(a) wczytaj(b) wynik =(a+b)/2 zapisz(wynik) początek obliczeń operacja wejścia operacja/instrukcja prosta operacja wyjścia Algorytm obliczania średniej arytmetycznej jest przykładem algorytmu liniowego nie zawiera rozgałęzień (punktów podejmowania decyzji) nie zawiera nawrotów (pętli( pętli) ) pozwalających na wielokrotne wykonywanie jakiegoś podciągu operacji Algorytmy liniowe to najprostsza, z punktu widzenia programisty, klasa algorytmów; w pierwszej fazie wykładu do niej się ograniczymy Mówiąc o strukturach kontrolnych w języku C, dowiemy się, jak tworzyć zarówno rozgałęzienia, jak i pętle stop koniec obliczeń 9 10 komentarz pomijany przez kompilator 11 12
dyrektywa preprocesora Funkcja main program główny 13 14 Budujemy i uruchamiamy HelloWorld kompilacja (i parę innych rzeczy...) gcc hello.c o hello opcja o ustala nazwę programu wykonywalnego będącego wynikiem działania polecenia gcc uruchomienie programu./hello Ciąg instrukcji treść programu głównego 15 16
Kompilacja z ostrzeżeniami Tradycyjne Hello World Bardzo przydatną opcją kompilatora gcc jest przełącznik Wall Wall, który powoduje, że informowani jesteśmy o wszystkich ewentualnych ostrzeżeniach gcc Wall hello.c o hello W funkcji `main,: 7: ostrzeżenie: control reaches end of non-void function Czyli po ludzku : kompilator zauważył, że funkcja main nie zwraca żadnego wyniku chociaż powinna... Funkcja main powinna zwrócić (jako wynik) liczbę całkowitą tzw. kod wyjścia 17 18 Hello World zgodne z ANSI C return 0; Kod wyjścia z programu Wartość 0 oznacza, że wykonanie programu zakończyło się sukcesem Wartość różna od 0 oznacza niepowodzenie znaczenie poszczególnych wartości błędnych nie jest ustalone przez standard ANSI C dzięki użyciu różnych kodów błędów możemy precyzyjnie poinformować otoczenie programu o przyczynie niepowodzenia Kod wyjścia może być wykorzystany przez inne programy do ustalenia jakim wynikiem zakończyło się wykonanie naszego Hello World. 19 20
Anatomia programu w C Anatomia programu w C Program w języku C (oraz innych językach proceduralnych ) jest zbiorem funkcji zwanych inaczej procedurami lub podprogramami Na ogólną strukturę programu, poza funkcjami, składać się mogą jeszcze deklaracje zmiennych i stałych oraz (opcjonalnych) zmiennych globalnych definicje typów (np. struktur) program może być zawarty w kilku plikach źródłowych Funkcja to ciąg instrukcji otoczony nawiasami {... main() jest szczególnym przypadkiem funkcji, od jej wywołania i wykonania jej instrukcji rozpoczyna się wykonanie programu dyrektywy preprocesora komentarze /*... */ Instrukcje (występują jedynie wewnątrz funkcji) podstawienie instrukcje sterujące 21 22 Schemat budowania programu w C Składniki programu pliki nagłówkowe Pliki nagłówkowe errno.h moje.h stdio.h Pliki źródłowe glowny.c menu.c Pliki obiektowe glowny.o menu.o Plik wykonywalny (program) program Pliki nagłówkowe *.h zawierają deklaracje zmiennych, stałych, funkcji, definicje typów danych, makra itp. Dwa sposoby odwoływania się przez #include: <plik.h> - plik zawierający informacje zdefiniowane w bibliotece systemowej (dostępne dla wszystkich programów); systemowe pliki nagłówkowe położone są w ustalonych katalogach np. /usr/include, /usr/local/include plik.h - plik zawierający informacje zdefiniowane na potrzeby konkretnego programu; pliki tego rodzaju najczęściej znajdują się w bieżącym katalogu 23 24