• Nie Znaleziono Wyników

Programowanie C++ Wykład 2 - podstawy języka C++ dr inż. Jakub Możaryn

N/A
N/A
Protected

Academic year: 2021

Share "Programowanie C++ Wykład 2 - podstawy języka C++ dr inż. Jakub Możaryn"

Copied!
22
0
0

Pełen tekst

(1)

Programowanie C++

Wykład 2 - podstawy języka C++

dr inż. Jakub Możaryn

Instytut Automatyki i Robotyki

Warszawa, 2014

(2)

Wstęp

(3)

Plan wykładu

Struktura programu. Zmienne i ich nazwy, podstawowe typy: całkowite, rzeczywiste, znakowe i napisowe. Instrukcje: czytania, pisania,

przypisania. Klasyfikacja typów. Stałe, wyrażenia. Komentarze i dokumentacja programu. Dodawanie bibliotek. Przestrzenie nazw.

(4)

Struktura programu

W oknie edycji kodu źródłowego ukazuje się standardowa zawartość pliku main.cpp z prostym programem wypisującym na konsoli napis „Hello World!”.

#include <iostream>

using namespace std;

int main() {

int a;

cout << "Podaj liczbe: " << endl;

cin >> a;

cout << "Podana liczba to: " << a << endl return 0;

}

(5)

Zmienne i ich nazwy

Zmienną nazywa się dana mogąca przyjmować różne wartości.

Każda zmienna występująca w programie ma swoją nazwę i przyjmuje wartości z określonego zbioru ( zdefiniowanego przez typ zmiennej)

Wszystkie zmienne występujące w programie muszą być zadeklarowane przed ich pierwszym użyciem

Popularne typy zmiennych całkowite: 10, -243, +78 rzeczywiste 1.5, 3.14, -2450.138 znakowe ’a’, ’w’, ’1’

napisowe ”podaj swoje imię:”

(6)

Zmienne i ich nazwy

Nazwa zmiennej

Dowolny ciąg liter i cyfr zaczynający się od litery. Znak podkreślenia też jest literą. Małe i duże litery są rozróżniane.

Definicja/deklaracja zmiennej

Definicja zmiennej informuje o typie zmiennej i przydziela na nią pamięć.

Definicja jest zarazem deklaracją, ale nie na odwrót (deklaracja polega tylko na określeniu typu zmiennej). i

Najpierw podaje się typ, a potem wymienia nazwy wszystkich zmiennych tego typu.

Zmienne tego samego typu można zgrupować w listę, oddzielając je przecinkami

Zmienne mogą być definiowane w dowolnym miejscu, jak tylko zajdzie potrzeba ich wykorzystania.

(7)

Zmienne i ich nazwy

Przykład definicji zmiennych prostych:

int i,j,k;

double x1,x2,y1,y2 ; y char w s k;

string nazwa, opis;

(8)

Podstawowe typy danych

Typ

Typ jest zdefiniowany przez zbiór przyporządkowanych mu wartości

Typy predefiniowane (najważniejsze):

int - podzbiór liczb całkowitych: -2147483648 .. 2147483647 float - podzbiór liczb rzeczywistych: 1.18 e-38 .. 3.40 e38 double - podzbiór liczb rzeczywistych: 2.23 e-308 .. 1.79 e308 bool - dwie wartości: true , false

char - zbiór znaków w kodzie ASCII

string - określa napis jako dowolny ciąg znaków (aby można było korzystać z umownego typu string, trzeba dołączyć odpowiednią bibliotekę: # include <string>)

(9)

Podstawowe typy danych

Typy niestandardowe (definiowane przez użytkownika, do przechowania wielu wartości pod jedną nazwą):

typ tablicowy typ strukturalny

typ plikowy typy nieprzeliczalne

typ obiektowy (w programowaniu obiektowym) typ wskaźnikowy i referencyjny

typ wyliczeniowy

(10)

Instrukcje: czytania, pisania, przypisania

Instrukcje

Polecenia dla komputera - „zmuszają” go do przetwarzania danych podczas procesu obliczeniowego. W języku C++ każda instrukcja kończy się średnikiem

Instrukcje pisania i czytania - plik z bibliotekami

Instrukcje pisania i czytania wymagają dołączenia pliku nagłówkowego biblioteki iostream. Instrukcja czytania cin>> domyślnie czyta dane z klawiatury, instrukcja pisania cout<< domyślnie wyświetla dane na monitorze.

Przestrzenie nazw

Jeśli używa się wielu bibliotek z licznymi deklaracjami, można w końcu natknąć się na problem konfliktu nazw. Rozwiązaniem jest zastosowanie przestrzeni nazw, która jest zatem zbiorem obiektów, która ogranicza dostęp do nich - oprócz nazwy obiektu niezbędne jest też wspomnienie, z której przestrzeni nazw chcemy go użyć, obchodząc tym samym problem konfliktu nazw.

(11)

Instrukcje: czytania, pisania, przypisania

Zastosowanie instrukcji pisania i czytania - określenie przestrzeni nazw

#include <iostream>

int main() {

int a;

std::cin >> a;

std::cout << a;

return 0;

}

(12)

Instrukcje: czytania, pisania, przypisania

Używając using namespace PrzestrzenNazw, podpowiadamy kompilatorowi, w którym miejscu może szukać używanych przez nas obiektów i funkcji, abyśmy mogli swobodnie używać wszystkiego co się znajduje w danej przestrzeni nazw

Zastosowanie instrukcji pisania i czytania - ominięcie przestrzeni nazw

#include <iostream>

using namespace std;

int main() {

int a;

cin >> a;

cout << a;

return 0;

}

(13)

Instrukcje: czytania, pisania, przypisania

Instrukcja przypisania - podstawienia

Instrukcja przypisania służy do nadawania zmiennej nowej wartości

Zastosowanie instrukcji przypisania

int a;

a = 10; // zmienna powinna być wcześniej zdefiniowana int b=-20; //definicja i przypisanie wartości

int k = 3;

double x = k-4.5; //zmniejsz wartość k - 4.5 k = k+1; // zwiększ wartość k o 1

double y = 2.5*(x+3)/2;

char z = ’a’;

string imie = "Witold ";

(14)

Definiowanie stałych

Stałe

Stałe definiujemy, jeśli chcemy je nazwać i używać ich nazw w programie.

Definicja stałej musi zawierać jej inicjalizację, bo wartości stałych nie można zmieniać.

Przykłady definicji stałych

const n = 5;

const int k = 2*(n+1);

const double xmin = 0.001;

const char Esc = ’ \33’;

const string pytanie = "Czy wykonac ponownie - t/n";

(15)

Podstawowe wyrażenia

Operatory arytmetyczne

+ : dodawanie / zachowanie znaku,

? : odejmowanie / zmiana znaku,

* : mnożenie, / : dzielenie,

% : reszta z dzielenia (modulo), nie może być stosowany do liczb rzeczywistych.

Operatory relacji

>, >=, <, <=

Operatory porównania

==, !=

Operatory logiczne

(16)

Podstawowe wyrażenia

Uwagi 1

Wyrażenia połączone operatorami relacji, porównania i logicznymi oblicza się od lewej do prawej

Koniec obliczeń następuje natychmiast po określeniu wartości logicznej wyrażenia

Operatory relacji mają wyższy priorytet niż operatory porównania Priorytet operatora && jest wyższy niż —— a oba są niższe niż operatorów relacji i porównania.

Uwagi 2

Dla większości operatorów dwuargumentowych, można wykorzystywać specjalne operatory przypisania, pozwalające skrócić zapis często wykorzystywanych konstrukcji.

(17)

Podstawowe wyrażenia

Wersja pełna

i = i + 2;

y = y * 2;

x = x << 1;

j = j * ( k + 1 );

flag = flag >> k;

(18)

Podstawowe wyrażenia

Operatory bitowe

& : bitowa koniunkcja (and), k : bitowa alternatywa (or), ˆ: bitowa różnica symetryczna (xor)

<< : przesunięcie w lewo

>> : przesunięcie w prawo,

˜: dopełnienie jedynkowe

(19)

Podstawowe wyrażenia

Wersja skrócona

i += 2;

y *= 2;

x <<= 1;

j *= k + 1;

flag >>= k;

(20)

Komentarze i dokumentacja programu

Komentarze są ignorowane przez kompilator, służą wyłącznie osobie czytającej tekst programu.

Komentarze zapisuje się wewnątrz par znaków /*...*/ (typ 1), co pozwala tworzyć komentarze złożone z wielu linii, lub pomiędzy znakami // (typ 2) a końcem linii.

Dwa różne typy komentarzy pozwalają tworzyć komentarze zagnieżdżone

W praktyce komentarze są bardzo przydatne. Istnieją tzw. generatory dokumentacji, które na podstawie odpowiednio ustawionych komentarzy, zgodnie z określoną konwencją, potrafią stworzyć automatycznie

dokumentację pisanego oprogramowania. Przykłady narzędzi tego typu to np. Doxygen, ApiGen, EpyDoc.

(21)

Komentarze i dokumentacja programu

Przykład komentarzy i komentarzy zagnieżdżonych:

#include <conio> // ten plik nagłówkowy należy //dołączyć, jeśli chcemy używać instrukcji // getch( );

/* Zobaczymy, co się stanie, jeśli w programie // nie będzie instrukcji getch( );na końcu.

getch( ); // to oznacza: poczekaj, aż użytkownik // wciśnie jakiś przycisk;

// ta instrukcja zatrzymuje więc działanie programu, //dzięki czemu wyniki pozostają na ekranie,

dopóki nie wciśniemy jakiegoś przycisku

*/

(22)

Dodawanie bibliotek - biblioteki i pliki nagłówkowe

Plik nagłówkowy

plik zawierający deklaracje zmiennych i funkcji tworzących bibliotekę.

Powinien być określony na początku pliku z programem.

Format dołączania plików nagłówkowych

# include <iostream> - sposób standardowy. iostream jest nazwą dołączanej biblioteki języka C++

# include <iostream.h> - starszy sposób.

Uwaga

Dołączane standardowe biblioteki i pliki nagłówkowe mogą pochodzić z języka C (stdio, stdlib, math), lub z języka C++ (cstdio, cstdlib, cmath)

Cytaty

Powiązane dokumenty

Takie układy przekaźnikowe nazywają się układami mostkowymi albo układami klasy H. Przykładem układu mostkowego

Do tworzenia algebraicznego zapisu dowolnie złożonych funkcji logicznych niezbędny jest odpowiedni zestaw elementarnych operacji logicznych, tzw. system

Do realizacji dowolnie złożonych układów logicznych niezbędny jest zestaw elementów realizujących funkcje logiczne tworzące system funkcjonalnie pełny... Układy z

Automaty, których postać funkcji przejść i wyjść nie zmienia się w czasie, nazywają się automatami o stałej strukturze; automaty, których postać funkcji przejść i wyjść

Ze względu na sposób przejmowania przez układ informacji o stanie wejść, wśród układów sekwencyjnych rozróżnia się.. układy asynchroniczne

Ponieważ w automatyce rozważa się zachowanie układów w otoczeniu okre- ślonego punktu pracy, w dalszych rozważaniach przydatna jest linearyzacja metodą stycznej...

Układy ekstremalne - układy regulacji, których zadaniem jest utrzymywanie wielkości wyjściowej obiektu regulacji na wartości ekstremalnej (minimum lub maksimum). Przykład:

wzmacniania sygnałów dostarczanych przez przekaźniki wejściowe, przekaźniki wyjściowe (wykonawcze), zwane także stycznikami, przystosowane pod względem mocy do sterowania