Podstawy Programowania -...

Post on 27-Feb-2019

226 views 0 download

Transcript of Podstawy Programowania -...

Podstawy Programowania

Wykład 1

• Jerzy Grębosz Symfonia C++

• Bjarne Stroustrup Język C++

• Bruce Eckel Thinking in C++

• Tony L. Hansen C++ zadania i odpowiedzi

Jak się uczyć programowania?

Wykład i laboratorium

Literatura

Tutoriale w Internecie

Samodzielne pisanie programów!!!

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 pojęcia

Procesor zawiera dwa podstawowe elementy

• element nadzorujący i koordynujący działania

komputera (CU – control unit)

• element odpowiedzialny za operacje arytmetyczne i

logiczne (ALU – arithmetic logic unit)

Pamięć (wewnętrzna)

Przechowuje m.in. uruchamiany program, dane

niezbędne do poprawnego działania uruchamianego

programu.

Podstawowe pojęcia

Pojęcia podstawowe

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.

Komórka pamięci składa sie z pewnej liczby bitów

(zazwyczaj 8, 16, 32 lub 64).

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.

Program

Program to ciąg ciąg instrukcji

Podczas wykonywania 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. dodać dwie liczby w ALU)

Program

Program

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.

Początkowo programy były pisane tylko w kodzie

maszynowym.

Obecnie programy pisze sie w językach wysokiego

poziomu zrozumiałych dla człowieka.

Przykładowe języki: Ada, Pascal, C, C++, Cobol,

Fortran

Programy napisane w językach wysokiego poziomu

są tłumaczone na kod maszynowy za pomocą

specjalnego translatora ( kompilator).

Języki programowania

Kod maszynowy (przykład): 1100111101011000

100000011111010

1100110011001010

Język asembler: push beer

call printf

add esp,16

pop ecx

Program jest tłumaczony na kod maszynowy przy

użyciu programu – asemblera.

Język wysokiego poziomu:

int c=a+b;

cout<<”dane o uzytkownikach”;

Języki programowania

Etapy tworzenia programu

• określenie zadań programu (faza analizy wymagań i

specyfikacji)

• zaprojektowanie sposobu rozwiązania problemu

(algorytmu) (faza projektowa)

• zapis projektu w wybranym języku programowania

(faza implementacji)

• kompilacja i uruchomienie programu

• sprawdzenie czy program działa poprawnie (faza

testowania)

Etapy tworzenia programu

• zapis algorytmu w wybranym języku

programowania (faza implementacji)

• kompilacja i uruchomienie programu

• sprawdzenie czy program działa poprawnie (faza

testowania)

Na wykładzie z Podstaw Programowania interesują nas

3 ostatnie punkty:

Uczymy się programować w

języku C++

Tworzenie programu

Program piszemy posługując się edytorem tekstu

Powstaje wówczas tzw. kod źródłowy (w języku C++

plik z rozszerzeniem cpp).

Tworzenie programu

W czasie zajęć laboratoryjnych będziemy wyko-

rzystywać darmową aplikację:

Bloodshed Dev-C++

Bloodshed Dev C++

Kod źródłowy programu

Wersja źródłowa programu musi zostać

przetłumaczona na język maszyny (procesora).

Kompilacja programu

Służy do tego kompilator danego języka progra-

mowania

Kompilator sprawdza przy tym czy w programie nie

ma błędów składniowych.

Kompilacja programu – Dev C++

Informacja o błędach w składni

Wskazanie błędu

Kompilacja programu

Skompilowana wersja (zazwyczaj zapisywana w pliku

na dysku jako tzw. plik obiektowy – object file z

rozszerzeniem obj) jest zapisana w języku

maszynowym.

Nie jest to jeszcze gotowy program.

Aby tak się stało muszą zostać dołączone do niego tzw.

biblioteki.

Rezultatem linkowania jest gotowy do uruchomienia

program (plik z rozszerzeniem exe)

Linkowanie (konsolidacja) programu

Biblioteki zawierają dodatkowe instrukcje programu,

napisane wcześniej bądź przez kogoś innego i

oddzielnie skompilowane.

Proces łączenia (tzw. linkowanie, polska nazwa -

konsolidacja) programu z bibliotekami wykonywany

jest przez program zwany linkerem.

Linkowanie (konsolidacja) programu

Dołączanie bibliotek (include)

Uruchomienie programu – Dev C++

Debugger

W tworzeniu programów pomocnym narzędziem jest

tzw. debugger (po polsku - odpluskiwacz).

Debugger umożliwia śledzenie działania programu i

usuwanie w nim błędów (ang. bug).

Debugger – Dev C++

Jak stworzyć program?

1. Znajdź odpowiedni algorytm.

2. Stwórz wersje źródłową programu.

3. Uruchom kompilację.

4. Jeśli są błędy (kompilacji), wróć do punktu 2

(ewentualnie uruchom Debugger).

5. Uruchom program.

6. Jeśli są błędy (wykonania), wróć do punktu 2.

5. Sprzedaj program za ogromne pieniądze .

Język programowania

Każdy język programowania ma swoją składnię:

o nazwy

o słowa kluczowe

o instrukcje

o struktura programu

o operatory

o znaki specjalne

Operacje wejścia/wyjścia, nie są częścią definicji języka

C++.

Operacje wejścia/wyjścia (obiektowo)

cout<<...

Wyjście

cin>>...

Wejście

Strumienie cin i cout są zdefiniowane w bibliotece

iostream (InputOutputStream)

Operacje wejścia/wyjścia -

#include <iostream>

using namespace std;

int main()

{

cout<<"Niedziela-wyklad z Programowania"<<endl;

system("PAUSE");

return 0;

}

Operacje wejścia/wyjścia (obiektowo)

#include <iostream>

using namespace std;

int main()

{

cout<<"Niedziela - "<<"wyklad z"<<

"Programowania"<<endl;

system("PAUSE");

return 0;

}

Operacje wejścia/wyjścia (obiektowo)

#include <iostream>

using namespace std;

int main()

{

cout<<"Niedziela - ";

cout<<"wyklad z"<<" Programowania"<<endl;

system("PAUSE");

return 0;

}

Język C++ rozróżnia rozmiar liter w nazwach (ale np.

język Pascal nie rozróżnia).

Nazwy

Nazwy (identyfikatory, ang. identifiers) mogą odnosić

się do (pod)programów, zmiennych, stałych etc.

Zwykle nazwą może być dowolnie długi ciąg liter (bez

polskich!), cyfr i znaków podkreślenia zaczynający sie

od litery.

Nazwy poprawne: a_1, liczba1, y, dom1

Nazwy niepoprawne: 1a, 1_a, zm_1/2,

Słowa kluczowe są zwykle wyróżnione przez Edytor

przystosowany do pracy z danym językiem.

Słowa kluczowe

W każdym języku programowania występują tzw.

słowa kluczowe.

Słowa takie mają specjalne znaczenie. Mogą być

np. elementem instrukcji, nazwami predefi-

niowanego typu itp.

Słów kluczowych nie można użyć jako nazw.

Słowami kluczowymi w języku w C++ są np.: int,

if, else, float, typedef, using ...

Słowa kluczowe

Słowa kluczowe są

pogrubione

Znaki specjalne

Przykład

#include <iostream>

using namespace std;

int main()

{

cout<<"Nie\tdzie\nla"<<endl;

system("PAUSE");

return 0;

}

Struktura programu

W każdym języku program ma pewną ustalona

strukturę:

W języku C++ struktura ta jest następująca:

#include <iostream>

int main()

{

}

Zwykle układ tekstu w linii czy też fakt rozłożenia go

na kilka linii nie ma znaczenia.

Struktura programu

W języku C++ poszczególne instrukcje programu

kończymy zazwyczaj średnikami.

Program 1

#include <iostream>

using namespace std;

int main()

{

cout<<"Wyklad z programowania";

system("PAUSE");

return 0;

}

Program 1

#include <iostream>

using namespace std;

int main()

{

cout <<

"Wyklad z programowania"

;

system("PAUSE");

return 0;

}

Definicje zmiennych

Zwykle na początku programu musimy określić, jakiego

typu będą używane przez nas zmienne oraz

spowodować, żeby została zarezerwowana pamięć na

ich przechowanie.

Zmienna to symboliczne oznaczenie identyfikujące

określone miejsce w pamięci komputera.

W miejscu tym przechowywana jest wartość zmiennej.

Deklaracje zmiennych C++

typ_zmiennej nazwa_zmienej;

W języku C++ definicja zmiennej ma postać:

Aby móc definiować zmienne musimy poznać tzw. typy

predefiniowane w języku C++.

Typy predefiniowane

Zwykle w każdym języku programowania istnieją

pewne predefiniowane typy np.:

liczbowe

logiczne

znakowe

Przyjmujemy, że zmienne całkowite są ze znakiem. Domyślne traktowanie typu char zależy od

kompilatora.

Typy predefiniowane – C++

Do przechowywania liczb całkowitych:

short int

int

long int

Do przechowywania znaków alfanumerycznych:

char

Wszystkie powyższe typy mogą występować w dwóch

wersjach: ze znakiem (signed) i bez znaku (unsigned).

Do przechowywania liczb zmiennoprzecinkowych:

Typy predefiniowane – C++

float

double

long double

Zakresy poszczególnych typów mogą być albo ściśle

określone, albo zależeć od implementacji (czyli od

kompilatora)

Typy predefiniowane – C++

Program 2

#include <iostream>

using namespace std;

int main()

{

int a,b,xyz,LiczbaOsob;

float wsp;

system("PAUSE");

return 0;

}

Operatory

W każdym języku zdefiniowane są pewne operatory,

których można używać do konstruowania różnych

wyrażeń np. arytmetycznych, logicznych.

Operatory arytmetyczne: + - * /

Specyficzne operatory arytmetyczne: % (reszta z

dzielenia, zdefiniowany dla liczb całkowitych)

Typ zwracanego wyniku zależy zazwyczaj od typu

argumentów operacji.

Operatory

Operatory porównywania: <, <=, =<, >

Operatory logiczne koniunkcji i alternatywy:

&& - i

|| - lub

Operator przypisania

Do przypisania zmiennej wartości innej zmiennej lub

wyrażenia służy operator przypisania:

=

#include <iostream>

using namespace std;

int main()

{

int a,b,xyz;

a=5;

xyz=a+6;

system("PAUSE");

return 0;

}

Program 3

Komentarze w programie

Tekst ujęty w znaki komentarza nie jest

kompilowany/wykonywany

tekst od znaku // do końca linii (komentarze tego

typu można zagnieżdżać, w tym również w

komentarzach /* .... */

tekst ujęty w znaki /* .... */

(uwaga - komentarzy tego typu nie można zagnie-

żdżać)

Program 4

#include <iostream>

using namespace std;

int main()

{

//int a,b,xyz;

/*a=5;

xyz=z+6;*/

system("PAUSE");

return 0;

}

Biblioteki

Pewne operacje, np. związane z wprowadzaniem i

wyprowadzaniem informacji na urządzenia takie jak

np. ekran, mogą nie być częścią definicji języka

programowania.

Podprogramy odpowiedzialne za te czynności mogą

znajdować sie w jednej ze standardowych bibliotek,

w które zwykle wyposażane są kompilatory.

Aby można było skorzystać z zawartości biblioteki,

należy ją dołączyć do programu:

#include <nazwa_biblioteki>

Program 5

#include <iostream>

#include <cmath>

using namespace std;

int main()

{

cout<<sqrt(4)<<endl;

system("PAUSE");

return 0;

}

Funkcja sqrt jest

zdefiniowana w biblio-tece cmath.

Instrukcje sterujące

Instrukcji sterujące umożliwiają warunkowe

lub iteracyjne wykonywanie pewnych

fragmentów kodu.

Instrukcja warunkowa

jeżeli warunek to instrukcje Wersja 1

jeżeli warunek to

instrukcje1

w_przeciwnym_wypadku

instrukcje2

Wersja 2

jeżeli warunek1 to

instrukcje1

jeżeli warunek2 to

instrukcje2

.......

w_przeciwnym_wypadku

instrukcje3

Wersja 3

Instrukcja warunkowa – C++

if(warunek) then instrukcje Wersja 1

If(warunek) then

instrukcje1

else

instrukcje2

Wersja 2

if(warunek1) then

instrukcje1

else if(warunek2) then

instrukcje2

.......

else

instrukcje3

Wersja 3

Program 6 #include <iostream>

using namespace std;

int main()

{

int a;

cin>>a;

if(a>0)

cout<<"liczba dodatnia"<<endl;

system("PAUSE");

return 0;

}

Program 7 #include <iostream>

using namespace std;

int main()

{

int a;

cin>>a;

if(a>0)

cout<<"liczba ";

cout<<"dodatnia"<<endl;

system("PAUSE");

return 0;

}

Program 7

Program 8 #include <iostream>

using namespace std;

int main()

{

int a;

cin>>a;

if(a>0)

{

cout<<"liczba ";

cout<<"dodatnia"<<endl;

}

system("PAUSE");

return 0;

}

Program 9

int a;

cin>>a;

if(a>0)

{

cout<<"liczba dodatnia"<<endl;

}

else

{

cout<<"liczba nie jest dodatnia"<<endl;

}

Program 10

int a;

cin>>a;

if(a>0)

{

cout<<"liczba dodatnia"<<endl;

}

else if(a<0)

{

cout<<"liczba ujemna"<<endl;

}

else

{

cout<<"zero"<<endl;

}

Instrukcje pętli

Pętle służą do iteracyjnego wykonywania pewnych

kroków.

Istnieją dwa rodzaje pętli:

• pętle wykonujące się określoną liczbę razy

• pętle wykonujące się wtedy gdy jest

spełniony pewien warunek

Pętle wykonujące się określoną liczbę razy

Liczba powtórzeń pętli jest z góry zadana.

W pętli funkcjonuje pewna zmienna, zwana licznikiem

pętli, „pamiętająca” ile razy pętla została wykonana.

for(instr_incjalizujaca;warunek;instr_kroku)

{

zawartosc_petli;

}

Pętle wykonujące się określoną liczbę razy

„licznik pętli” należy wcześniej zadeklarować.

Zawartość pętli jest wykonywana tylko gdy warunek jest

spełniony.

Instrukcji inicjalizujących może być kilka (wtedy są

oddzielone przecinkami), podobnie jest w przypadku

instrukcji kroku.

Jeżeli zawartość pętli to kilka instrukcji, to grupujemy je

za pomocą nawiasów klamrowych.

Program 11

#include <iostream>

using namespace std;

int main()

{

for(int i=0;i<4;i++)

{

cout<<"X";

}

system("PAUSE");

return 0;

}

Program 12

#include <iostream>

using namespace std;

int main()

{

for(int i=4;i>0;i--)

{

cout<<"X";

}

system("PAUSE");

return 0;

}

Program 13 #include <iostream>

using namespace std;

int main()

{

int a;

cin>>a;

for(int i=4;(i>0)&&(a>0);i--)

{

cout<<"X";

}

system("PAUSE");

return 0;

}

Program 14 #include <iostream>

using namespace std;

int main()

{

int a;

cin>>a;

for(int i=4;i>0,a>0;i--)

{

cout<<"X";

}

system("PAUSE");

return 0;

}

Pętle których wykonanie zależy od warunku

W pętlach wykonujących się dopóki zachodzi pewien

warunek:

warunek sprawdzamy PRZED pierwszym wykonaniem

instrukcji wewnątrz pętli, a wiec pętla może nie być

wykonana ani razu.

while(warunek)

{

zawartosc_petli;

}

Program 15 #include <iostream>

using namespace std;

int main()

{

int a=5;

while(a>1)

{

cout<<"X";

a--;

}

system("PAUSE");

return 0;

}

Program 16 #include <iostream>

using namespace std;

int main()

{

int a=5;

while(a>1)

{

cout<<"X";

}

system("PAUSE");

return 0;

}

Program 17 #include <iostream>

using namespace std;

int main()

{

int a=5;

while(a>1)

{

cout<<"X";

}

a--;

system("PAUSE");

return 0;

}

Pętle których wykonanie zależy od warunku

W pętli do..while warunek sprawdzamy PO

pierwszym wykonaniu instrukcji wewnątrz pętli, a wiec

pętla będzie wykonana przynajmniej raz.

do

{

zawartosc_petli;

}

while(warunek);

Program 18 #include <iostream>

using namespace std;

int main()

{

int a=5;

do

{

cout<<"X";

}

while(a<0);

system("PAUSE");

return 0;

}

Program 18 #include <iostream>

using namespace std;

int main()

{

int a=5;

do

{

cout<<"X";

a--;

}

while(a>1);

system("PAUSE");

return 0;

}

Wyjście z pętli

Wyjście z pętli umożliwiają nam instrukcje break i

continue.

break - przerywa wykonanie pętli w której jest

bezpośrednio umieszczone.

contimue - przerywa dany obieg pętli, przechodząc

do wykonywania następnego obiegu.