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