Programowanie I
Transkrypt
Programowanie I
O czym będziemy mówili
●
●
Programowanie I
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 obiektowozdarzeniowym w przyszłym semestrze.
3
●
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
4
Środowisko programistyczne
●
Przykłady uruchamiane w terminalu systemu
operacyjnego Linux
●
Używany kompilator: gcc (GNU C Compiler)
●
Sugerowany edytor tekstowy
●
Polecana literatura
–
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”
–
...
7
Najczęściej spotykane metody:
–
język naturalny (opis „słowno-muzyczny”)
–
pewna konwencja notacyjna („pseudo-kod”)
–
schematy blokowe lub sieci działań (notacja
graficzna)
–
język programowania (C, Java, C#, PHP, ...)
8
Prosty przykład
opis
●
Kilka słów na temat przykładu
Obliczanie średniej arytmetycznej dwóch liczb:
1.
2.
3.
4.
5.
●
Rozpocznij obliczenia
Wczytaj wartości argumentów: a i b
Oblicz wartość wynik = (a+b)/2
Zapisz wynik
Zakończ obliczenia
start
początek obliczeń
schemat blokowy
●
wczytaj(a)
wczytaj(b)
operacja „wejścia”
wynik =(a+b)/2
operacja/instrukcja „prosta”
zapisz(wynik)
operacja „wyjścia”
stop
koniec obliczeń
●
Algorytm obliczania średniej arytmetycznej jest
przykładem algorytmu liniowego
–
nie zawiera rozgałęzień (punktów podejmowania
decyzji)
–
nie zawiera „nawrotów” (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”
9
Tradycyjne „Hello World!”
10
Tradycyjne „Hello World!”
hello.c:
hello.c:
/* Mój pierwszy program w C */
#include <stdio.h>
/* Mój pierwszy program w C */
#include <stdio.h>
int main() {
puts("** Hello World! **");
puts("(C bez tajemnic!)");
}
int main() {
puts("** Hello World! **");
puts("(C bez tajemnic!)");
}
komentarz – pomijany przez kompilator
11
12
Tradycyjne „Hello World!”
Tradycyjne „Hello World!”
hello.c:
hello.c:
/* Mój pierwszy program w C */
#include <stdio.h>
/* Mój pierwszy program w C */
#include <stdio.h>
int main() {
puts("** Hello World! **");
puts("(C bez tajemnic!)");
}
int main() {
puts("** Hello World! **");
puts("(C bez tajemnic!)");
}
dyrektywa preprocesora
Funkcja „main” – program główny
13
Tradycyjne „Hello World!”
14
Budujemy i uruchamiamy „HelloWorld”
●
hello.c:
kompilacja (i parę innych rzeczy...)
gcc hello.c o hello
/* Mój pierwszy program w C */
#include <stdio.h>
●
●
int main() {
puts("** Hello World! **");
puts("(C bez tajemnic!)");
}
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”, który powoduje, że
informowani jesteśmy o wszystkich ewentualnych
ostrzeżeniach
gcc Wall hello.c o hello
hello.c:
/* Mój pierwszy program w C */
#include <stdio.h>
int main() {
puts("** Hello World! **");
puts("(C bez tajemnic!)");
}
hello.c: W funkcji `main,:
hello.c: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
Kod wyjścia z programu
●
hello.c:
●
/* Mój pierwszy program w C */
#include <stdio.h>
int main() {
puts("** Hello World! **");
puts("(C bez tajemnic!)");
return 0;
}
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
●
Na ogólną strukturę programu, poza funkcjami,
składać się mogą jeszcze
–
zwanych inaczej procedurami lub podprogramami
–
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
–
dyrektywy preprocesora
–
komentarze /* ... */
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
Instrukcje (występują jedynie wewnątrz funkcji)
–
podstawienie
–
instrukcje sterujące
21
Schemat budowania programu w C
22
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)
Pliki nagłówkowe *.h
program
23
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
24