Слайд 1© Autors: V. Vagale 2004-2016
Ievadlekcija
Слайд 2Literatūra
https://en.wikibooks.org/wiki/C%2B%2B_Programming
https://en.wikibooks.org/wiki/C%2B%2B_Programming/Examples
http://www.cplusplus.com/doc/tutorial
http://www.tutorialspoint.com/cplusplus/cpp_overview.htm
http://en.cppreference.com/w/Main_Page
https://isocpp.org/images/uploads/2-Tour-Basics.pdf
http://www.engin.umd.umich.edu/CIS/course.des/cis400/ - visas valodas
http://home.lu.lv/~janiszu/courses/ecpp/cpp01.introduction.pdf
https://www.gamedev.lv/article/c_pamati
Слайд 3Literatūra
Уильям Топп, Уильям Форд, Структуры данных в C++, "Бином" · 1999
г. · 816 стр.
Шмидский Я.К. Программирование на языке C++. Самоучитель, 2004. 368 стр.
Страуструп Б.: Язык программирования C++. Спец. изд.
BINOM 1999. 1104 стр.
Харбисон C.П., Стил Г.Л. Язык программирования C, 528 стр.
Крупник А.Б. Изучаем C++
СПб.: Питер, 2003. — 251 с.: ил
Крупник А. Изучаем Си СПб.: Питер, 2002.— 256 с.: ил.
Слайд 4Literatūra
Роберт Седжвик Фундаментальные алгоритмы на C++. Части 1-4. Анализ. Структуры данных.
Сортировка. Поиск: ДиаСофт, 2002 г. Твердый переплет, 688 стр.
Роберт Седжвик, Фундаментальные алгоритмы на С. Части 1-4. Анализ. Структуры данных. Сортировка. Поиск "ДиаСофт ЮП" · 2003 г. · 672 стр.
Майкл Мейн, Уолтер Савитч Структуры данных и другие объекты в C++ 2-е издание: Вильямс 2002, 832 стр.
Слайд 5Literatūra
Пол И. Объектно-ориентированное программирование с использованием С++. - К: ДиаСофт, 1995
Шилдт
Г. Теория и практика С++. - СПб.: BHV, 1996
Подбельский В.В. Язык Си++: Учебное пособие. - М.: ФиC, 1996
Р. Лафоре. Объектно-ориентированное программирование в С++. — СПб: ПИТЕР, 2003 г. — 928 с.
Мейерс С. Эффективное использование С++. - М: ДМК, 2000
Элджер Д. С++: Библиотека программиста. - CПб.: Питер, 1999
Голуб А.И. С и С++. Правила программирования. М: БИНОМ, 1996
Аммерааль Л. STL для программистов на С++. - М: ДМК, 2000.
Дж. Коплиен. Программирование на С++ . — СПб: ПИТЕР, 2005 г. — 479 с.
Слайд 6Literatūra
Павловская Т.А. C/C++. Программирование на языке
высокого уровня. — CПб.: Питер,
2001, 2003.
Павловская Т.А., Щупак Ю.А. С/С++. Структурное программирование: Практикум. — СПб: ПИТЕР, 2002.
Павловская Т.А., Щупак Ю.А. С++. Объектно-ориентированное программирование: Практикум. — СПб: ПИТЕР, 2004.
Саттер Г. Решение сложных задач на C++. Серия C++ In-Depth, т.4. — Москва: Издательский дом «Вильямс», 2002 г. — 400 с.
Александреску А. Современное проектирование на С++. Серия C++ In-Depth, т.3. — Москва: Издательский дом «Вильямс», 2002 г. — 336 с.
Кениг Э., Му Б. Эффективное программирование на С++. Серия C++ In-Depth, т.2. — Москва: Издательский дом «Вильямс», 2002 г. — 384 с.
Слайд 7Literatūra
Гамма Э., Хелм Р., Джонсон Р., Влиссидес Дж. Приемы объектно-ориентированного проектирования.
Паттерны проектирования. — СПб: ПИТЕР, 2001 г. — 368 с.
Влиссидес Дж. Применение шаблонов проектирования. Дополнительные штрихи. — Москва: Издательский дом «Вильямс», 2003 г. — 144 с.
Шаллоуей А., Тротт Д. Шаблоны проектирования. Новый подход к объектно-ориентированному анализу и проектированию. — Москва: Издательский дом «Вильямс», 2002 г. — 288 с.
Штерн В. Основы С++. Методы программной инженерии. — Москва: ЛОРИ, 2003 г. — 860 с.
В. Лаптев. С++. Экспресс-курс. — СПб: БХВ-Петербург, 2004 г. — 512 с.
Б. Эккель. Философия С++. — СПб: ПИТЕР, 2004 г. — 572 с.
Слайд 8Literatūra
К. Бек. Экстремальное программирование. — СПб: ПИТЕР, 2002.
К. Бек, М. Фаулер.
Экстремальное программирование. Планирование. — СПб: ПИТЕР, 2003 г. — 144 с.
К. Ауэр, Р. Миллер. Экстремальное программирование. Постановка процесса. — СПб: ПИТЕР, 2003 г. — 368 с.
К. Лоудон. С++. Краткий справочник. — СПб: ПИТЕР, 2004 г. — 220 с.
С. Уэллин. Как не надо программировать на С++. — СПб: ПИТЕР, 2004 г. — 240 с.
С. Макконнелл. Совершенный код. — СПб: «Питер», 2005. — 896 с.
Стандарт С++: INTERNATIONAL ISO/IEC STANDARD 14882 1998-09-01, 2003
Слайд 10Saturs
C++ rašanās vēsture;
Komentāri;
Piešķire;
Datu izvads.
Слайд 11Programmēšanas valodas
www.tiobe.com
https://en.wikipedia.org/wiki/List_of_C-family_programming_languages
https://www.levenez.com/lang/
Слайд 14C valoda
Valoda C++ ir izcēlusies no valodas C, kuru (1970) 1972.
gadā izstrādājis AT&A Bell Laboratories līdzstrādnieks Deniss Ričijs (Dennis Ritchie).
C valodai par pamatu tika izmantotas B, BCPL, ALGOL 68 prog. val.
Dennis Ritchie (right) with Ken Thompson
Valodas C sākotnējais uzdevums bija operētājsistēmas UNIX veidošanai un uzturēšanai.
Tomēr šī valoda kļuva ļoti populāra un to sāka izmantot lietojumprogrammu izstrādei, kā arī citās operētājsistēmās.
Valoda C uzskatāma par kaut ko, kas ir pa vidu starp ļoti augsta un zema līmeņa programmēšanas valodām.
Kaut arī sistēmprogrammu rakstīšanai C uzskatāms par ļoti piemērotu, tomēr lietojumprogrammatūras izstrādē valodai C piemīt vairāki trūkumi – tajā rakstītās programmas nav tik viegli uztveramas un saprotamas kā citu augsta līmeņa programmēšanas valodu programmas, turklāt tajā nav daudzu iebūvētu automātiskās pārbaudes iespēju (resp.,augsta līmeņa konstrukciju) kā pierasts daudzās citās valodās.
https://lv.wikipedia.org/wiki/Deniss_Ri%C4%8Dijs
Слайд 15C++ vēsture
Lai kompensētu valodas C nepilnības, 20. gs. 70. gadu beigās
– 80. gadu sākumā AT&A Bell Laboratories līdzstrādnieks Bjerns Stroustrups (Bjarne Stroustrup) izstrādāja programmēšanas valodu C++, kas daudzos gadījumos ir izrādījusies labāka par savu priekšteci.
1983 C++1983 C++ Stroustrup C with Classes
Tajā ieviestas daudzas augsta līmeņa konstrukcijas, kas atvieglo programmētāja darbu.
Bez tam C++ ir saglabājis savietojamību ar valodu C (lielākā daļa C programmu ir arī C++ programmas), kas savulaik visticamāk bija izšķiroši, lai C++ iegūtu savu plašo pielietojumu un popularitāti.
https://en.wikipedia.org/wiki/Bjarne_Stroustrup
Слайд 16Standartizēšana
ISO International Standard ISO/IEC 14882:2014(E) – Programming Language C++
https://isocpp.org/std/the-standard
Слайд 17OS platformu atbalsts
http://ithare.com/mmog-server-side-programming-languages/
Слайд 18C++ ievads
C++ improves on many of C’s features.
C++ provides object-oriented programming
(OOP).
C++ is a superset to C.
No ANSI standard exists yet (in 1994).
Слайд 19C++ programmas failu struktūra
Programma valodā C++ sastāv:
no viena vai vairākiem C++
failiem (faila paplašinājums parasti .cpp vai .cc),
kā arī iespējami no citiem failiem, no kuriem tipiskākie ir t.s. hedera (jeb galvas) faili (faila paplašinājums .h).
Tātad, triviālā C++ programma sastāv no viena C++ faila.
Слайд 20C++ programmas kompilēšana un palaišana
Programmas rakstīšanas mērķis parasti ir iegūt izpildāmu
moduli (piemēram .exe failu), kas veic noteiktas darbības.
Lai no programmas iegūtu izpildāmo moduli, nepieciešams kompilators.
Слайд 21Kompilators
Kompilators (compiler) ir datorprogramma, kas pārveido noteiktā programmēšanas valodā uzrakstītu programmu
par izpildāmu moduli (vispārīgā gadījumā – par programmu mašīnkodā, tādu, kuru dators var tiešā veidā izpildīt).
Слайд 22Izpildāma moduļa iegūšana no C++ programmas vispārīgā gadījumā
Слайд 23Izpildāmā moduļa iegūšanas fāzes
1. fāze. Kompilēšana. Katram C++ failam tiek uzbūvēts
atbilstošs objektu fails (faila paplašinājums parasti .obj vai .o), kopumā veidojot objektu kodu;
2. fāze. Linkošana. No iegūtā objektu koda, kā arī citu programmu, t.sk. standarta bibliotēku objektu koda tiek izveidots gala produkts – izpildāmais kods (izpildāmais modulis vai moduļi).
Pilnu izpildāmā koda iegūšanas procesu mēdz saukt arī par uzbūvēšanu (build), tomēr sarunu valodā, tiek lietots termins kompilēšana.
Abas izpildāmā koda uzbūvēšanas fāzes parasti tomēr veic viens un tas pats kompilators.
Слайд 24Izstrādes vides
Programmas failu organizāciju, kā arī pareizu kompilatora un citu palīgprogrammu
izsaukšanas secību izpildāmā koda iegūšanai parasti nodrošina izstrādes vide, piemēram:
wxDev-C++ (http://wxdsgn.sourceforge.net/),
Microsoft Visual C++,
Borland C++,
Anjuta,
C++ Editor 1.7 (free),
Eclipse IDE for C/C++ Developers (http://www.eclipse.org/downloads/moreinfo/c.php),
NetBeans IDE 6.9 (http://netbeans.org/features/cpp/),
Izmantojot projektu (project) mehānismu, tādējādi programmētājs var abstrahēties no šīs shēmas un “ar vienas pogas spiedienu” nonākt no programmas līdz rezultātam.
Otrs bieži lietots variants programmas izpildāmā koda uzbūvēšanai, kas īpaši izplatīts Unix/Linux platformās, ir t.s. make mehānisms.
https://isocpp.org/get-started
Слайд 30Valoda ir reģistrjūtīga
Very important: The C++ language is "case sensitive", that
means that an identifier written in capital letters is not equivalent to another one with the same name but written in small letters.
Thus, for example the variable RESULT is not the same as the variable result nor the variable Result.
Слайд 31C++ programmas vienkāršota struktūra
Слайд 32Programmas struktūra
#include
using namespace std;
int main ()
{
cout
endl;
return 0;
}
Слайд 33Bibliotēku piesaiste
1. #include
2. #include
using namespace std;
3. #include
std::cout << "Hello, world!" << endl;
4. #include vai #include
Слайд 35Komentāri
In C,
/* This is a single-line comment. */
In C++,
// This is
a single-line comment.
Слайд 36Komentāra piemērs
/********************************************************
**
** Programma “Hello, World”
** Izveidota 2007.04.05.
** Labota 2007.04.09.
** Autors Mr.
X
**
********************************************************/
Слайд 37Programma 1
// mana pirmaa programma C++
#include
using namespace std;
int main ()
{
cout
<< "Hello World!";
return 0;
}
Слайд 38Programma 1
// mana pirmaa programma C++
#include
using namespace std;
int main ()
{
cout << "Hello World!";
system("Pause");
return 0;
}
Слайд 39Programma 1
// mana pirmaa programma C++
#include
using namespace std;
int main ()
{
cout << "Hello World!";
system("Pause>>nul");
return 0;
}
Слайд 40Programma ar komentārijiem I
/* my second program in C++ with more
comments */
#include
using namespace std;
int main ()
{
cout << "Hello World! "; // says Hello World!
cout << "I'm a C++ program"; // says I'm a C++ program
system("Pause>>nul");
return 0;
}
Слайд 41Programma ar komentārijiem II
/* my second program in C++
with more
comments */
#include
using namespace std;
int main ()
{
cout << "Hello World! “<cout << "I'm a C++ program\n"; // says I'm a C++ program
cout << “Two lines”;
system("Pause>>nul");
return 0;
}
Слайд 43Mainīgo deklarēšana
Mainīgā deklarācija ietver šādas informācijas uzrādīšanu par mainīgo:
mainīgā tips,
mainīgā vārds,
sākuma
vērtība (neobligāti).
Mainīgā deklarēšanu veic deklarators.
Ar vienu šādu konstrukciju var deklarēt vienu vai vairākus viena tipa mainīgos.
Mainīgo deklarēšanu var veikt jebkurā programmas vietā, galvenais, lai tas notiktu pirms pirmās šo mainīgo izmantošanas.
Слайд 46Datu tipi
vienkāršie
(pamattipi jeb elementārie)
saliktie
(sarežģītie jeb struktūras)
veselie skaitļi
daļskaitļi
simboli
statiskie
dinamiskie
ieraksts
masīvs
kopa
saraksts
koks
masīvs
(int)
(float)
(char)
Datu tipu iedalījums
Слайд 47C valodas 4 datu tipu specifikatori
Слайд 500
+
32 bitu procesoram
Datu tipu vērtību diapazons
Слайд 520
+
signed char = char
-
unsigned char
byte
1 = sizeof(char) ≤ sizeof(short) ≤ sizeof(int)
≤ sizeof(long) ≤ sizeof(float) ≤ sizeof(double) ≤ sizeof(long double)
ANSI C
Datu tipu vērtību diapazons
Слайд 53Deklarators
Deklarators (declarator) ir konstrukcija, kas paziņo, ka noteikts programmas elements (visbiežāk
mainīgais) tiks izmantots programmā.
Слайд 54Piešķiršanas priekšraksts
Piešķiršana (assignment) ir vērtības ierakstīšana mainīgajā.
Piešķiršanu veic piešķiršanas priekšraksts (assignment
statement), kas ietver sevī piešķiršanas operatoru (vienlīdzības zīmi).
Piemēri:
x = 5;
x = y = z;
x = (y + z) * 5;
arr[x] = sqrt(y);
Слайд 55Mainīgo deklarēšanas piemēri
int x;
int x1, x2;
double d;
double e=2007;
int m=7, n=5;
int p=-1,
q, r=89;
string s = "Hello, World!";
char v, w='X';
Слайд 56Programma 2
// operating with variables
#include
int main ()
{
// declaring variables:
int a, b;
int result;
// process:
a = 5;
b = 2;
a = a + 1;
result = a - b;
// print out the result:
cout << result;
system("pause>>nul");
// terminate the program:
return 0;
}
Слайд 57Programma 3
// i/o example
#include
int main ()
{
int i;
cout
"Please enter an integer value: ";
cin >> i;
cout << "The value you entered is " << i;
cout << " and its double is " << i*2 << ".\n";
return 0;
}
Слайд 58Mainīgā izmēra noteikšana
int x;
cout
Слайд 59Tipu pārveidošana
int i=66;
char c;
c = 65;
cout
(char)i << endl;
Слайд 60Papildus operatori tipa pārveidošanai
const_cast
dynamic_cast
reinterpret_cast
static_cast
Nodrošina dažādas pārbaudes.
Tipa pārveidošanas operators const_cast domāts, lai
pārdefinētu modifikatorus const vai volatile, bet citādi tips paliktu tāds pats.
Operators dynamic_cast pārbauda, vai ir iespējama norādītā tipa pārveidošana.
Operators reinterpret_cast domāts viena tipa pārveidošanai par pilnīgi citu un būtu uzskatāms par vistuvāko klasiskajam variantam. Parasti šo operatoru lieto, lai pārveidotu savstarpēji nesaderīgus norādes tipus.
Слайд 61Piemērs pārveidošana tipā char
(char)i
reinterpret_cast (i)
Слайд 63Darbības (operācijas)
Aritmētiskās
+ - * / %
Bitu līmeņa (bitwise) operācijas
, |,
&, ^, ~
Слайд 64Skaitliskās funkcijas
pow()
float pow (float base, float p);
Funkcija pow() atgriež vērtību,
ko iegūst, argumentu base kāpinot pakāpē p.
ceil()
float ceil (float num);
Funkcija ceil() atgriež mazāko veselo skaitli, kas lielāks vai vienāds par argumentu num
(noapaļošana uz augšu). Jāievēro, ka atgriežamā vērtība ir ar tipu “ar peldošo komatu”, tāpēc, lai noapaļoto vērtību piešķirtu mainīgajam ar vesela skaitļa tipu, papildus jāveic tipa
pārveidošana, piemēram, a = (int)ceil
Слайд 65
floor()
float floor (float num);
Funkcija floor() atgriež lielāko veselo skaitli, kas mazāks
vai vienāds par argumentu num
(noapaļošana uz apakšu). Papildus īpašības sk. pie funkcijas ceil apraksta.
round()
float round (float num);
Funkcija round() atgriež noapaļotu argumenta num vērtību. Papildus īpašības sk. pie funkcijas
ceil apraksta.
sin, cos, tan, asin, acos, atan, sinh, cosh, tanh
float sin (float arg);
Funkcijas sin() u.c. realizē attiecīgās trigonometriskās funkcijas vai to hiperboliskos variantus. Argumenta vērtība tiek mērīta radiānos.
Слайд 66
exp()
float exp (float arg);
Funkcija exp() atgriež argumenta arg eksponenti (skaitļa e
kāpinājumu pakāpē arg).
log()
float log (float arg);
Funkcija log() atgriež argumenta arg naturālo logaritmu.
log10()
float log10 (float arg);
Funkcija log10() atgriež argumenta arg logaritmu pie bāzes 10.
sqrt()
float sqrt (float arg);
Funkcija sqrt() atgriež argumenta arg kvadrātsakni.
fabs()
float fabs (float arg);
Funkcija fabs() atgriež argumenta arg absolūto vērtību.
Слайд 67Piemēri
pow(4, 0.5) // 2 kāpināšana 4 pakāpē 0.5
ceil(4.5) // 5 noapaļošana
uz augšu
ceil(-4.5) // -4 noapaļošana uz augšu
floor(4.5) // 4 noapaļošana uz apakšu
floor(-4.5) // -5 noapaļošana uz apakšu
round(4.5) // 5 noapaļošana matemātiski
round(-4.5) // -5 noapaļošana matemātiski
fabs(4.5) // 4.5 absolūtā vērtība (bez zīmes)
fabs(-4.5) // 4.5 absolūtā vērtība (bez zīmes)
Слайд 68Piešķiršanas operatori ar izrēķināšanu
+= -= *= /=
%=
<<= >>= ^= &= |=
i++ // i = i + 1
++i // i = i + 1
i-- // i = i - 1
--i // i = i - 1
i+=k // i = i + k
i-=k // i = i - k
i*=k // i = i * k
i/=k // i = i / k
i%=k // i = i % k
Слайд 69Piešķires operatora savienojumi
(+=, -=, *=, /=, %=, >>=,
|=)
value += increase; is equivalent to value = value + increase;
a -= 5; is equivalent to a = a - 5;
a /= b; is equivalent to a = a / b;
and the same for all other operations.
Слайд 70Piešķires aritmētiskās operācijas
Слайд 71Inkrementa un dekrementa operācijas
Слайд 72Mainīgā vērtības palielināšanas par 1 pieraksts
a++;
a+=1;
a=a+1;
are all equivalent in its
functionality: the three increase by 1 the value of a.
Слайд 73Inkrementa piemērs
In Example 1, B is increased before its value is
copied to A. While in Example 2, the value of B is copied to A and B is later increased.
Слайд 74Attieksmes operators
==, !=, >, =,
Слайд 75Attieksmes operāciju rezultāti
(7 == 5) would return false.
(5 > 4)
would return true.
(3 != 2) would return true.
(6 >= 6) would return true.
(5 < 5) would return false.
Слайд 76Loģiskās operācijas
!, &&, ||
!(5 == 5) returns false
!(6
4) returns true
!true returns false.
!false returns true.
Слайд 77Loģisko operāciju vērtību tabula
( (5 == 5) && (3 > 6)
) returns false ( true && false ).
( (5 == 5) || (3 > 6)) returns true ( true || false ).
Слайд 80Konstanšu definēšana (#define) I
#define identifier value
#define PI 3.14159265
#define NEWLINE '\n‘
#define WIDTH
100
Слайд 81Konstanšu definēšana (const) II
const int width = 100;
const char tab =
'\t';
const zip = 12440;
In case that the type was not specified (as in the last example) the compiler assumes that it is type int.
Слайд 82Nosacījuma operators
condition ? result1 : result2
if condition is true the expression
will return result1, if not it will return result2.
Слайд 83Kontroles jeb sazarošanās struktūra nepilnā
if (condition) statement
if (x == 100) cout
<< "x is 100";
if (x == 100)
{
cout << "x is ";
cout << x;
}
Слайд 84Sazarošanās pilnā
if (condition) statement1 else statement2
if (x == 100) cout
"x is 100";
else cout << "x is not 100";
if (x > 0) cout << "x is positive";
else
if (x < 0) cout << "x is negative";
else cout << "x is 0";
Слайд 85Atkārtošanās struktūras jeb cikli I
while (expression) statement
while (n>0)
{
cout
n << ", ";
--n;
}
Слайд 86Programma
// custom countdown using while
#include
int main ()
{
int n;
cout << "Enter the starting number > ";
cin >> n;
while (n>0)
{
cout << n << ", ";
--n;
}
cout << "FIRE!";
return 0;
}
Слайд 87Cikli II
do statement while (condition);
do
{
cout
to end): ";
cin >> n;
cout << "You entered: " << n << "\n";
}
while (n != 0);
Слайд 88Programma
#include
int main ()
{
unsigned long n;
do
{
cout
<< "Enter number (0 to end): ";
cin >> n;
cout << "You entered: " << n << "\n";
} while (n != 0);
return 0;
}
Слайд 89Cikli III
for (initialization; condition; increase) statement;
for (int n=10; n>0; n--)
{
cout
<< n << ", ";
}
Слайд 90Programma
// countdown using a for loop
#include
int main ()
{
for (int
n=10; n>0; n--)
{
cout << n << ", ";
}
cout << "FIRE!";
return 0;
}
Слайд 91Izvēles struktūra
switch (expression)
{
case constant1: block of instructions 1;
break;
case constant2: block of instructions 2;
break;
.
.
.
default: default block of instructions;
}
Слайд 93Izvēles struktūras piemērs II
switch (x)
{
case 1:
case 2:
case 3:
cout << "x is 1, 2 or 3";
break;
default: cout << "x is not 1, 2 nor 3";
}