40
Programowanie strukturalne i obiektowe C++ Powtórzenie wiadomości z C++ Robert Nowak

Programowanie strukturalne i obiektowe C++

Embed Size (px)

DESCRIPTION

Programowanie strukturalne i obiektowe C++. Powtórzenie wiadomości z C++. Robert Nowak. Schemat prostego programu. Dyrektywy preprocesora. - PowerPoint PPT Presentation

Citation preview

Page 1: Programowanie strukturalne i obiektowe C++

Programowanie strukturalne i obiektowe

C++

Powtórzenie wiadomości z C++

Robert Nowak

Page 2: Programowanie strukturalne i obiektowe C++

Schemat prostego programu

#include <iostream>

using namespace std;

int main()

{

instukcje;

  return 0;

}  

Page 3: Programowanie strukturalne i obiektowe C++

Dyrektywy preprocesora

Wszystkie dyrektywy preprocesora poprzedzone są znakiem #. Wszystkie dyrektywy preprocesora są wykonywane przez specjalny program zwany preprocesorem stąd ich nazwa.

Najczęściej wykorzystywaną dyrektywą preprocesora jest dyrektywa include – służy ona do dołączania plików nagłówkowych. Każdy z tych plików rozszerza możliwości C++.

Dzięki plikowi iostream możemy wypisywać zarówno liczby jak i tekst oraz wczytywać w prosty sposób dane wprowadzane przez użytkownika programu.

Page 4: Programowanie strukturalne i obiektowe C++

Przestrzenie nazw Wraz z rozwojem języka ilość bibliotek stale rosła, a unikatowych nazw dla funkcji i zmiennych zaczynało brakować. Wymyślono wówczas przestrzenie nazw, mające zapobiegać problemowi nakładania się nazw. Dawniej, aby wyświetlić tekst wystarczyło napisać:

cout<<"napis"<<endl; 

teraz natomiast trzeba pisać

std::cout<<"napis"<<std::endl; 

lub poinformować kompilator, że chcemy używać przestrzeni nazw std bez przedrostka. Linijka, którą informujemy kompilator o takiej zmianie to:

using namespace ...; 

gdzie za wielokropek wstawiamy nazwę przestrzeni.

Page 5: Programowanie strukturalne i obiektowe C++

Główna funkcja programu - main

Kiedy uruchamiamy nasz program, zaczyna on wykonywać kod zawarty w funkcji main(). Od niej więc rozpoczyna się działanie aplikacji – a nawet więcej: na niej też to działanie

się kończy. Zatem program (konsolowy) to przede wszystkim kod zawarty w funkcji main() – determinuje on bezpośrednio jego zachowanie.

Funkcja ta musi mieć zawsze nazwę main – tak ktoś sobie wymyślił, że główna funkcja programu tak się nazywa i tak już pozostało do dzisiaj.

Page 6: Programowanie strukturalne i obiektowe C++

Najprostsza funkcja main (która nic nie robi), wygląda tak:

int main(){  return 0;}

Jeśli chcemy, aby nasz program cokolwiek wykonał, musimy umieścić dodatkowy kod pomiędzy { oraz return 0;

Page 7: Programowanie strukturalne i obiektowe C++

Operacje Wejścia/Wyjścia

Do wypisywania i wczytywania danych używamy tzw. strumieni.

cout - obsługuje wyprowadzanie danych na standardowe wyjście, czyli ekran.cin - obsługuje wprowadzanie danych ze standardowego wejścia, czyli klawiatury.

Używamy do tego dodatkowo operatorów wstawiania << i pobrania >> danych do i ze strumienia.

Page 8: Programowanie strukturalne i obiektowe C++

Zatrzymanie wykonywania programu

Aby obejrzeć wyniki wykonania programu używaliśmy funkcji getchar(), która służy do wczytywania znaków z klawiatury. W naszym przypadku zatrzymywała wykonywanie programu do naciśnięcia dowolnego klawisza

Page 9: Programowanie strukturalne i obiektowe C++

Określenie typu zmiennej

W języku C++ musimy jawnie określić typ zmiennej. Określenie typu zmiennej jest bardzo proste. Symbolicznie, robi się to następująco:

nazwa_typu nazwa_zmiennej;

Określenie nazwa_typu to typ, jaki będziemy chcieli, aby miała nasza zmienna. Tutaj nie możemy wpisać dowolnego słowa. Typy w języku C++ są określone i musimy użyć jednego ze specjalnych słów. Z kolei nazwa_zmiennej to nazwa, jaką wymyślimy dla zmiennej. Nazwa zmiennej to tzw. identyfikator.

Page 10: Programowanie strukturalne i obiektowe C++

Podstawowe typy liczbowe

Podstawowe typy liczbowe występujące w języku C++ to:

int - typ całkowity, zakres wartości: -2147483648 ÷ 2147483647, zajmuje 4 bajty pamięci

float - typ zmiennopozycyjny (ułamkowy), zakres wartości: 1,2 10-38 ÷ 3,4 1038 dokładność 7 cyfr, zajmuje 4 bajty pamięci

double - typ zmiennopozycyjny podwójnej precyzji (dokładniejszy niż typ float), zakres wartości: 2,2 10-308 ÷ 1,8 10308 dokładność 15 cyfr, zajmuje 8 bajty pamięci

Page 11: Programowanie strukturalne i obiektowe C++

Typ znakowy

Typ znakowy umożliwia przechowywanie jednego znaku. Typ znakowy w języku C++ to:

char - typ znakowy

Znaki zapisujemy w pojedynczych cudzysłowach ' (apostrofach). Na przykład poniższa instrukcja spowoduje wypisanie litery a, spacji, a następnie litery b.

cout <<'a'<<' '<<'b';

Page 12: Programowanie strukturalne i obiektowe C++

Czym są operatory

Operatory w C++ pełnią funkcję podobną jak operatory w matematyce. Umożliwiają one po prostu przeprowadzanie różnych działań na zmiennych. Samych grup operatorów jest co najmniej kilka, dlatego czas je poznać, bowiem bez nich dalsza nauka języka nie będzie możliwa.

Page 13: Programowanie strukturalne i obiektowe C++

Najważniejszy operator – operator przypisania

Jednym z najważniejszych operatorów w języku C++ jest operator przypisania. Operator ten umożliwia przypisywanie wartości danej zmiennej.

=   operator przypisania (to nie jest operator równości!)

Aby dokonać przypisania, po lewej stronie operatora musimy mieć nazwę zmiennej, a po prawej stronie wyrażenie którego wartość chcemy przypisać zmiennej.

zmienna = wyrażenie;

Page 14: Programowanie strukturalne i obiektowe C++

Operatory arytmetyczne

Kolejną grupę stanowią operatory arytmetyczne. Operatory te działają jak znane z matematyki operatory. Oto lista dostępnych operatorów arytmetycznych:

+  operator dodawania,

-   operator odejmowania,

* operator mnożenia,

/   operator dzielenia,

%  operator reszty z dzielenia (zwany operatorem modulo)

+ operator znaku liczby (np. +3), liczba domyślnie jest zawsze dodatnia

- operator znaku liczby (np. -45, -5.678).

Page 15: Programowanie strukturalne i obiektowe C++

Instrukcja złożona

Instrukcją złożoną nazywa się sekwencję instrukcji ujętą w parę nawiasów klamrowych:

{instrukcja-1;instrukcja-2;...instrukcja-n;}

W składni języka taka sekwencja jest traktowana jako jedna instrukcja. Instrukcje złożone mogą być zagnieżdżane.

Page 16: Programowanie strukturalne i obiektowe C++

Instrukcja warunkowa „jeśli”

Ogólna postać instrukcji „jeśli” jest następująca:

if (wyrażenie) instrukcja

lub

if (wyrażenie) instrukcja1;

else instrukcja2;

gdzie wyrażenie musi wystąpić w nawiasach okrągłych, zaś żadna z instrukcji nie może być instrukcją deklaracji.

Page 17: Programowanie strukturalne i obiektowe C++

Opis działania instrukcji „jeśli”

Wykonanie instrukcji if zaczyna się od obliczenia wartości wyrażenia. Jeżeli wyrażenie ma wartość różną od zera (prawda), to będzie wykonana instrukcja (lub instrukcja1); jeżeli wyrażenie ma wartość zero (fałsz), to w pierwszym przypadku instrukcja jest pomijana, a w drugim przypadku wykonywana jest instrukcja2. Każda z występujących tutaj instrukcji może być instrukcją prostą lub złożoną, bądź instrukcją pustą.

Pierwsza postać instrukcji „jeśli” nazywana jest instrukcją warunkową „jeśli” prostą, a druga instrukcją warunkową „jeśli” z alternatywą.

Page 18: Programowanie strukturalne i obiektowe C++

Operatory relacyjneOperatory relacyjne (dwuargumentowe) służą do konstrukcji wyrażeń porównania. Operatorami tymi są:

== „równy”!= „nierówny”< „mniejszy”> „większy”<= „niewiększy” lub „jest zawarty”>= „nie mniejszy” lub „zawiera”

Wynik wyrażenia porównania jest typu bool i posiada wartość 0, gdy relacja jest prawdziwa oraz wartość 1, gdy relacja jest fałszywa.

Page 19: Programowanie strukturalne i obiektowe C++

Operatory logiczne

Operatory logiczne służą do wykonywania operacji logicznych na wartościach typu bool. Operatorami tymi są:

&& i

! nie

|| lub

Page 20: Programowanie strukturalne i obiektowe C++

Instrukcje iteracyjne

Instrukcje iteracyjne umożliwiają wielokrotne wykonywanie pewnych sekwencji instrukcji, czyli pętli, które są podstawą programowania. W języku C++ są trzy instrukcje iteracyjne:

instrukcja „dla” (for),

instrukcja „dopóki” (while),

instrukcja „wykonuj dopóki” (do… while)

Page 21: Programowanie strukturalne i obiektowe C++

Instrukcja „dla” (for)

W porównaniu z analogiczną instrukcją pascalową, instrukcja „dla” języka C++ ma szersze możliwości i jest bardziej elastyczna. Jej ogólna postać przedstawia się następująco:

for (w.-inicjujące; w.-warunkowe; w.-zwiększające)instrukcja

Wyrażenie inicjujące może być dowolnego rodzaju, najczęściej jest ono wyrażeniem wyliczeniowym, zawierającym listę inicjacji liczników pętli. Język C++ dopuszcza w wyrażeniu inicjującym również deklaracje zmiennych.

Page 22: Programowanie strukturalne i obiektowe C++

Wartość wyrażenia warunkowego musi być typu skalarnego, zaś wyrażenia zwiększające mogą być dowolnymi poprawnymi wyrażeniami języka C++. Każde z wyrażeń występujących w instrukcji „dla” może zostać pominięte.

Page 23: Programowanie strukturalne i obiektowe C++

Wykonywanie pętli „dla”

Wykonywanie pętli „dla” odbywa się w następujący sposób:

1. Obliczane są wyrażenia inicjujące, co najczęściej powoduje zainicjowanie liczników pętli.

2. Obliczane jest wyrażenie warunkowe, jeśli jest ono niezerowe (prawda) wykonywana jest instrukcja związana z instrukcją for.

3. Obliczane są wyrażenia zwiększające, co powoduje zwykle zwiększenie lub zmniejszenie liczników pętli.

4. Ponownie obliczane jest wyrażenie warunkowe, jeżeli jego wartość jest różna od 0 – wykonywane są ponownie czynności z punktu 2.

Page 24: Programowanie strukturalne i obiektowe C++

Instrukcja „dopóki” (while)

Ogólna postać instrukcji „dopóki” (while):

while (wyrażenie-warunkowe) instrukcja

Instrukcja instrukcja jest wykonywana do momentu, kiedy wyrażenie warunkowe osiągnie wartość 0 (fałsz), czyli instrukcję while można by przetłumaczyć: dopóki wyrażenie warunkowe ma wartość oznaczającą prawdę (różne od zera), wykonuj instrukcję instrukcja.

Page 25: Programowanie strukturalne i obiektowe C++

Instrukcja „wykonuj dopóki” (do… while)

Ogólna postać instrukcji „wykonuj dopóki” (do… while) przedstawia się następująco:

do

instrukcja

while (wyrażenie-warunkowe);

Page 26: Programowanie strukturalne i obiektowe C++

Instrukcja instrukcja jest wykonywana do momentu, gdy wyrażenie warunkowe osiągnie wartość zero (fałsz). Instrukcję do…while można więc przetłumaczyć jako: wykonuj instrukcję instrukcja, dopóki wartość wyrażenia warunkowego oznacza prawdę. Instrukcje tę stosujemy zamiast instrukcji while wówczas, gdy zależy nam, aby wykonana została przynajmniej jedna iteracja.

Page 27: Programowanie strukturalne i obiektowe C++

Postać instrukcji wyboru

Instrukcja wyboru ma następującą postać ogólną:

switch (wyrażenie-sterujące) instrukcja

Instrukcja switch działa podobnie (ale nie tak samo), jak instrukcja case znana z Pascala. Na podstawie wartości wyrażenia sterującego pozwala ona przenieść wykonywanie programu do wskazanego miejsca. Wyrażenie sterujące musi być typu całkowitego, zaś instrukcja instrukcja jest dowolną instrukcją języka C++.

Page 28: Programowanie strukturalne i obiektowe C++

Zwykle jednak instrukcja wyboru przybiera postać:

switch (wyrażenie-sterujące) { etykieta-wyboru instrukcje … etykieta-wyboru instrukcje}

Etykieta wyboru może przyjąć jedną z postaci:

case wyrażenie-stałe-typu-całkowitego:default:

Etykieta default jest nazywana domyślna etykietą wyboru. W obrębie jednej instrukcji wyboru nie wolno stosować etykiet zawierających wyrażenia stałe o tej samej wartości.

Page 29: Programowanie strukturalne i obiektowe C++

Wykonanie instrukcji wyboru

Wykonanie instrukcji wyboru polega na obliczeniu wartości wyrażenia sterującego i kontynuowaniu wykonywania programu począwszy od etykiety wyboru, której wyrażenie stałe ma wartość równą obliczonej wcześniej wartości wyrażenia sterującego. Jeśli żadne z wyrażeń stałych nie spełnia tej równości, wówczas wykonywany jest skok do miejsca określonego domyślną (default) etykietą wyboru lub jeśli jej nie ma – wykonywanie instrukcji wyboru ulega zakończeniu.

Page 30: Programowanie strukturalne i obiektowe C++

Uwaga

Po wykonaniu skoku do etykiety wyboru wykonywane są kolejno instrukcje programu bez względu na występujące po drodze etykiety wyboru. Jeśli więc skok nastąpił do pierwszej z dziesięciu etykiet wyboru, wykonane zostaną również instrukcje związane z pozostałymi etykietami. Za pomocą instrukcji break można wymusić zakończenie wykonywania instrukcji wyboru np. W momencie zakończenia wykonywania instrukcji dla danego przypadku.

Page 31: Programowanie strukturalne i obiektowe C++

Przykład 1switch (miesiac){ case 1 : dni=31; break; case 2 : dni=28; break; case 3 : dni=31; break; case 4 : dni=30; break; case 5 : dni=31; break; case 6 : dni=30; break; case 7 : dni=31; break; case 8 : dni=31; break; case 9 : dni=30; break; case 10 : dni=31; break; case 11 : dni=30; break; case 12 : dni=31; break;}

Page 32: Programowanie strukturalne i obiektowe C++

… char z;…switch (z){ case ‘w’ : cout<<"wysoki" break; case ‘n’ : cout<<"niski"; break; default : cout<<"nijaki"}

Przykład 2

Page 33: Programowanie strukturalne i obiektowe C++

Pojęcie tablicy

Tablica jest złożoną strukturą danych, składającą się z określonej liczby elementów tego samego typu.

Dostęp do elementów jest możliwy za pośrednictwem indeksu(ów) – liczby (liczb) określającej położenie elementu w tablicy.

Page 34: Programowanie strukturalne i obiektowe C++

Deklaracja tablicy

Deklaracja tablicy N-wymiarowej (zwanej także zmienną tablicową) o wymiarach wymiar1, wymiar2,…, wymiarN wygląda następująco

typ-elemetu-tablicy ident-tablicy[wymiar1][wymiar2]…[wymiarN]

Wymiar tablicy, który określa liczbę elementów zawartych w tablicy, jest ujęty w parę nawiasów prostokątnych i musi być większy lub równy jedności. Jego wartość musi być wyrażeniem stałym typu całkowitego, możliwym do obliczenia w fazie kompilacji; oznacza to, że nie wolno używać zmiennej dla określenia wymiaru tablicy.

Page 35: Programowanie strukturalne i obiektowe C++

Dostęp do elementów tablicy

Najprostszym sposobem dostępu do elementu tablicy jest podanie jego pozycji (indeksu(ów)) w nawiasach kwadratowych, np. tablica [20][11] .

Należy pamiętać, że w języku C++ pierwszy element tablicy ma wszystkie indeksy równe zero – dostęp do pierwszego elementu tablicy wygląda następująco:

tablica[0]…[0].

W ten sposób pozycję ostatniego elementu tablicy określają indeksy

[wymiar1-1]…[wymiarN-1]

Page 36: Programowanie strukturalne i obiektowe C++

Funkcje

Funkcją nazywamy wyodrębnioną część programu, stanowiącą pewną całość, posiadającą jednoznaczną nazwę i ustalony sposób wymiany informacji z pozostałymi częściami programu. Funkcje są stosowane do wykonania czynności, które mogą być wykorzystane w różnych programach lub i wykonania czynności wielokrotnie powtarzanych przez dany program. W przypadku programów rozwiązujących obszerne problemy, w których wyróżnić można kilka podprogramów, zastosowanie funkcji umożliwia opracowanie każdego z tych podproblemów oddzielnie. Wystarczy wówczas dla zbudowania programu zestawić funkcje oraz odpowiednio je połączyć.

Page 37: Programowanie strukturalne i obiektowe C++

Definicja funkcji

Składnia definicji funkcji jest następująca:

<typ> identyfikator-funkcji (lista-deklaracji-parametrów){ instrukcje}

Definicja funkcji składa się z nagłówka funkcji oraz z jej ciała. Nagłówek przypomina prototyp funkcji, w którym wszystkie parametry muszą być nazwane a na końcu nagłówka nie występuje średnik. Ciało funkcji jest ujętym w nawiasy klamrowe zestawem instrukcji. Ostatnią instrukcją przed nawiasem klamrowym zamykającym blok funkcji musi być instrukcja return.

Page 38: Programowanie strukturalne i obiektowe C++

Instrukcja return

Instrukcja return występuje często w postaci:

return wyrażenie;

gdzie wyrażenie określa wartość zwracaną przez funkcję. Jeżeli typ tego wyrażenia nie jest identyczny z typem funkcji, to kompilator będzie próbował osiągnąć zgodność typów drogą niejawnych konwersji. Jeżeli okaże się to niemożliwe, to kompilacja zostanie zaniechana. Zgodność typu zwracanego z zadeklarowanym typem funkcji można również wymusić drogą konwersji jawnej.

Page 39: Programowanie strukturalne i obiektowe C++

Funkcja typu void

Jeżeli funkcja jest typu void to nie zwraca ona żadnej wartości i odnosząc się do języka programowania Pascal możemy ja nazwać procedurą, chociaż zawodowi programiści języka C++ nie stosują tej nazwy tylko taką funkcję nazywają funkcją nie zwracającą wyniku (wartości).

Page 40: Programowanie strukturalne i obiektowe C++

Zmienne w programie i funkcjach

Zmienne zadeklarowane na zewnątrz funkcji nazywamy zmiennymi globalnymi, a zmienne opisane wewnątrz funkcji – zmiennymi lokalnymi.

Rozróżnienie to wynika ze sposobu przydziału pamięci. Wszystkie zmienne globalne umieszczane są w tzw. segmencie danych, dla którego pamięć przydzielana jest raz, w chwili rozpoczęcia wykonywania programu. Zmienne lokalne umieszczane są w tzw. segmencie stosowym. Przy każdorazowym wywołaniu procedury lub funkcji zmiennym lokalnym przydzielana jest w stosie pamięć, a po zakończeniu wykonywania procedury lub funkcji, pamięć jest zwalniana.