
- •Скорочений if
- •2.Повний if
- •15. Вкладені цикли. Оператори дочасного завершення циклу.
- •17.Поясніть операції з вказівниками і способи ініціалізації вказівників.
- •Посилання та правила їхнього використання.
- •19. Масиви статичні і динамічні, Правила опису і використання одно та дво вимірних масивів.
- •20. Визначений інтеграл. Метод центральних прямокутників.
- •26. Об'єднання. Синтаксис опису та сфери їхнього використання.
1. Порівняйте синтаксис мов програмування С++ і Delphi.
C++ |
Delphi |
#include< назва бібліотеки > |
|
|
|
|
|
Printf/Scanf Puts/Gets Cout<</Cin>> |
Readln/Writeln Read/Write |
|
|
. ; , ;’ ( ) [ ] { } < > # + ^ - * / &,?,!,|,\,~,% - в Делфі відсутні |
. ; , ;’ ( ) [ ] { } < > # + ^ - * /
|
/* багаторядковий */ //однорядковий |
{ багаторядковий } //однорядковий |
|
|
|
|
Загальна структура програми мовою С++.
//коментарі
#include <назва бібліотечного файлу №1 >
…………
#include < назва бібліотечного файлу №1>
< інші директиви препроцесора>
…………
< оголошення глобальних змінних>
< оголошення глобальних сталих>
< оголошення та створення функцій користувача>
………
<тип результату функції > main(опис формальних параметрів)
{
< оголошення локальних змінних>
< оголошення локальних сталих>
< команди>
}
3.Символи, керуючі послідовності та основні ключові слова мови С++.
Алфавіт:
Великі і малі літери латинського алфавіту A-Z , a-z
Цифри 0-9
Спеціальні символи “ ‘ ( ) { } [ ] < > . , ; : ? ! ~ * + - = / \ | # % $ & ^ @ _
Програми складають із синтаксичних конструкцій, які назив-ть командами. Команди будуються з лексем – неподільних елементів мови: слів, чисел, символів операцій.
Слова поділяються на ключові слова і ідентифікатори. Ідентифікатор – це назва (ім'я ), яку користувач надає об'єктам(напр. змінним,сталим , функціям). Ідентифікатор може починатися з нижньго підчеркування або букви.
Зарезервовані ідентифікатори називаються ключовими словами. Вони використовуються для написання команд. Змінити призначення ключового слова у програмі не можна.
Основні ключові слова мови С++:
Asm auto bool double else enum mutable new operator switch template this Break case catch char class const continue default delete do explicit extern float for friend goto if inline int long private protected public register return short signed sizeof static struct throw try typedef typename union unsigned virtual void volatile while
Керуючі послідовності:
\0 – пуста літера
\a – звуковий сигнал
\b – повернення на крок
\f – перейти на нову сторінку
\n – перейти на новий рядок
\r – повернути курсор на початок ряка
\t – горизонтальне табулювання
\v – вертикальне табулювання
\\ - зворотна коса риска
\’ - апостроф
\” - лапки
\? –знак питання
4. Порівняння скалярних типів даних С++ і Delphi.
Скалярні типи даних налічують: цілий, дійсний, символьний, логічний, рядковий, вказівники.
Цілі:
-
Делфі
С++
К-ть байт
Byte
Unsigned char
1
ShortInt
Char
1
Word
Unsigned ShortInt
2
SmallInt
ShortInt
2
Integer
Int
4
Cardinal
Unsigned Int
4
Int_64
8
-
Unsigned Long
8
Дійсні
-
Делфі
С++
Кіл-ть байт
Single
Float
4
Double
Double
8
Extended
Long double
10
Логічні
-
Делфі
С++
Кіл-ть байт
Boolean
Bool
1
void - Відсутність типу
5.Арифметичні операції мови С++.
В мові програмування вирази складаються з операндів (змінних, Констант, викликів функцій) з’єднаних знаком операції і дужками. Знак операції – це символ, або група символів . які повідомляють компілятору про необхідність виконання певних арифметичних операцій (або логічних, чи ін.).
Пріорітет |
Операції |
Зміст Операції |
1 |
+,- |
Присвоєння знака |
2 |
*, /, % |
Множення, ділення, остача від ділення |
3 |
+,- |
Додавання, віднімання |
4 |
==,!=,<,<=,>=,> |
Порівняння (відношення)(логічні операції) |
Розглянемо операції порівняння.
Операція == означає дорівнює, != -не дорівнює, <= -менше або дорівнює, >= -більше або дорівнює.
Операції виконуються у суворій послідовності. Фактор, що визначає перважне право на виконання назив. Пріоритетом.
Розрізняють унарні та бінарні операції. У перших з них 1 операнд, а у других 2.
Унарні :
- арифметичні
- логічні операції і операції відношення
- операції з бітами
Приклад: а=а+5 це те саме що й а+=5
Операції інкременту (++) ти декременту (--).
Операції інкременту ти декременту існують у двох формах – префіксній та постфіксній. Якщо символи ++ (--) записані перед змінною, то це інкремент (декремент) у префіксній формі, а якщо після змінної – то в постфіксній. Операція інкременту має такий вигляд:
++<змінна> або <змінна>++
Значення змінної збільшується на одиницю. Команди а++ та ++а –рівносильні команді а=а+1. Форма інкременту (декременту) впливає тільки на порядок виконання операції у виразах. (тобто - чи спочатку збільшується значення а на 1, А потім обчислюється вираз. Чи спочатку обчислюється вираз. А потім змінюється значення змінної а).
Аналогічно операція декременту має такий вигляд :
--<змінна> або <змінна>--
Значення змінної зменшується на одиницю.
Для вказівників:
&- взяття адреси
*- звернення за адресою
6. Логічні операції мови С++.
В мові програмування вирази складаються з операндів (змінних, Констант, викликів функцій) з’єднаних знаком операції і дужками. Знак операції – це символ, або група символів . які повідомляють компілятору про необхідність виконання певних арифметичних операцій (або логічних, чи ін.).
Операції виконуються у суворій послідовності. Фактор, що визначає перважне право на виконання назив. Пріоритетом. Логічні операції мають 4 пріорітет.
Розглянемо операції порівняння.
Операція == означає дорівнює, != -не дорівнює, <= -менше або дорівнює, >= -більше або дорівнює, < -менше, > -більше.
7. Побітові операції мови С++.
Ці операції можна застосувати до змінних, що мають тип int, char, та їхніх варіантів (long int і т.д.).
Їх не можна застосовувати до змінних типу float, double, void (до складніших типів).
Ці операції задаються наступними чинами : ~,<<,>>,&,^,|
~ - порозрядне заперечення:
Якщо а=0000 1111, то ~а=1111 0000
^ - заперечне лог. АБО: а=0000 1111 і b =1000 1000 , то а^ b =1000 0111
& -порозрядне лог. І: якщо а=0000 1111 і b =1000 1000, то а& b =0000 1000
| - АБО: якщо а=0000 1111, b =1000 1000, то а| b =1000 1111
<< - зсув ліворуч: а=0000 1111, то а<<1=0001 1110
>> - зсув праворуч: якщо а=0000 1111, то а>>1=0000 0111
! – лог. Заперечення
х |
х!у |
0 |
1 |
1 |
0 |
&& - лог. I
Х |
У |
х&&у |
0 |
0 |
0 |
0 |
1 |
0 |
1 |
0 |
0 |
1 |
1 |
1 |
|| - лог. АБО
х |
у |
x||y |
0 |
0 |
0 |
0 |
1 |
1 |
1 |
0 |
1 |
1 |
1 |
1 |
= - присвоєння (х=1, х=а=у=100)
?: - умовна (тернарна) операція
У виразі у=х?а: b
У=а, якщо х не дорівнює (істинно), У= b, якщо х дорівнює (хибно).
Вираз у=х?а: b дозволяє присвоїти змінній у значення більшої змінної (а або b), тобто у=max(a,b)
8.Перетворення типів даних у мові С++.
Змінна та вираз не обов’язково повинні бути одного і того ж типу. Крім того, і виразі можуть бути дані різних числових типів (змішаний вираз). Якщо тип змінної не збігається з типом виразу, то відбувається автоматичне перетворення (узгодження) типів. Розрізняють явне і неявне узгодження типів.
Наприклад:
Int b,a; float c;
b=c*a;
якщо ввести a=2 c=3,8 , то b=7 (спочатку відбилося множення c*a=3.8*2=7.6,але оскільки змінна b цілого типу то дробова частина була відкинута і в результаті ми отримали 7) – неявне перетворення типу(за замовчуванням).
Для явного перетворення типів новий тип задають у круглих дужках перед змінною або виразом. Якщо записати b=(int)c*a, то підчас обчислення виразу спочатку відбудеться перетворення змінної c до цілого типу(c=3,8->3), а потім множення c*a=3*2 = 6. Якщо ж написати так b=(int)(c*a), то спочатку відбудеться множення(c*a=3.8*2=7.6), а потім перетворення до цілого типу і ми отримаємо 7.
Отже, у випадку використання явного перетворення типів , потрібно стежити до яких елементів виразу воно застосовується. Узгодження типів у виразах відбувається з урахуванням пріоритетів типів. Пріоритет типів за їхнім спаданням: double, float, long, int, short. За замовчуванням результат перетворюється до старшого типу.
9. Функції у С++. Прототипи функцій. Функція main().
В мові С++ програма складається з набору функцій , які відносяться до одної з двох категорій:
Функції, які не мають результуючого значення. Їх називають функціями типу void.
Void <ім’я функції>([<тип параметру 1><ім’я параметру1>,
<тип параметру 2><ім’я параметру2>…])
<-заголовок функції
{ <тіло функції>;
Return;
}
Функції, які таке значення мають. Ця категорія повинна мати в своєму описі тип значення, яке ця функція повертає.
<тип результату><ім’я функції>([<тип параметру 1><ім’я параметру1>,
<тип параметру 2><ім’я параметру2>…])
<-заголовок функції
{ <тіло функції>;
Return;
}
Обидві категорії крім цього використовують вихідні параметри, які можуть повертати в точку їхнього виклику одне чи декілька значень, які формуються під час виконання операторів тіла функції.
Можна стверджувати, що функції типу void є аналогами процедур мови Паскаль. Оскільки їх виклик подібний до виклику процедур.
Мова С++ дозволяє мати декілька функцій з одним і тим же іменем, тому що функції розрізняються не тільки за іменами, але й за типами аргументів.
Напр.-д:
double sum (double a, double b, double c)
{ double result;
Result=a+b+c;
Return result;}
int sum (int a, int b, int c)
{ double result;
Result=a+b+c;
Return result;}
Прототипи функцій
Якщо опис нашої функції ми розмістили вище опису головної функції main(), яка її викликає, то виклик пройде успішно.
Якщо опис нашої функції ми розмістили нижче опису головної функції main(), яка її викликає, то для успішного виконання необхідно вище опису
функції main(), розмістити так званий прототип нашої функції – це її заголовок, який завершується символом “;” Прри цьому якщо функція має параметри, то достатньо через кому вказати тільки типи кожного з них:
int sum(int,int,int);
Функція main()
З неї починається виконання кожної програми. Вона може мати або не мати параметри.
Форми її заголовку:
int main() або main() – ці записи рівносильні
int main(int argс, char*argv[])
Тоді argс містить кількість параметрів, які передаються у програму з командного рядка. Самі ж параметри складають символьний масив char*argv[]. Імена argс і argv є загально прийнятими, але не обов’язковими. Параметр argс має тип int його значення формується на основі аналізу командного рядкаі приблизно дорівнює кількості слів у цьому рядку, включно з іменем самої програми (під словами розуміється текст без пробілу).
Параметр argv – це масив вказівників на рядки кожен з яких містить одне слово з командного рядка.
Функція main() може мати ще й 3-й параметр argp, який служить для передачі в функцію main() параметрів операційної системи.
int main(int argс, char*argv[], char*argр[])
Головна функція консольних проектів С++ Bulder 2010 має вигляд:
int_tmain (int argc, _TCHAR*argv[])
Рекурсивні функції.
В С++ описи функцій не можуть бути вкладеними, тобто в середині однієї функції не можна описати іншу функції. При цьому одна функція може викликати іншу. В тому числі і саму себе. Такі виклики називаються Рекурсією. Наприклад факторіал:
Int factor(int n)
{
Int (n=1);
Return 1;
Else
Return n*factor(n-1);
}
Оператори С++. Присвоєння. Безумовний перехід.
Оператори бувають прості і складені. В кінці кожного оператора ставиться “;” Складені оператори- це декілька простих операторів оточених символами { } наприклад:
{
<набір простих операторів>
}
ПРИсвоєння
<ім’я змінної>=<вираз або виклик функції, або константа>
Спочатку обчислюється значення виразу, потім результат заноситься в комірку пам'яті, яка належить змінній . що стоїть ліворуч символу =.
Якщо змінна ї вираз належать до різних типів, то тип значення виразу перетворюється до типу змінної. При цьому можна втратити інформацію або тримати інше значення.
Символом = позначають також початкову ініціалізацію змінної при її оголошенні.
Правила мови С++ дозволяють присвоювати декільком змінним одне і те ж значення. Таку операцію називають множиним присвоєнням. a=b=c=2;
Операції +=, -=, *=, /= … називають складеним присвоєнням, тут при обчисленні виразу , що стоїть ліворуч символу =, використовують значення змінної з лівої частини.
Нап-д: a=a+4; це те саме що й a+=4
Оператори безумовного переходу
- Оператор goto<мітка>
Мітка – це будь-який ідентифікатор із двокрапкою. В С++ мітки не описуються.
Оператор goto вказує, що виконання програми потрібно продовжити з оператора, перед яким стоїть мітка.
Мітку можна поставити перед будь-яким оператором в тілі функції де є оператор goto, що вказує на цю мітку:
goto m1; …… m1:x=8;
- Оператор виклику функції типу void
Напр.-д: gauss(A,b,N,X)
11.Умовні оператори С++.
Умовний оператор if має 2 форми запису:
Скорочений if
if (<вираз>)
<набір операторів>
Якщо логічний <вираз> true – тоді виконується <набір операторів>(простий чи складений) далі виконується оператор, що є наступним.
Якщо логічний <вираз> false – тоді <набір операторів> оминається.
Якщо <вираз> є присвоєнням, то аналогом false є його значення=0, а true якщо воно не дорівнює 0.
2.Повний if
if (<вираз>)
<набір операторів 1>
else
<набір операторів 2>
Тобто обов’язково виконується один із двох <наборів операторів>
switch
умовний оператор switch дозволяє розгалужувати програму на кількість варіантів, яка є більша за 2. Це є найближчий аналог оператора CASE в Делфі.
Switch(<вираз>)
{
Case<мітка 1>:<1-й набір операторів>;break;
Case<мітка 2>:<2-й набір операторів>;break;
……….
Case<мітка n>:<n-й набір операторів>;break;
[default:<оператори>]
ПРИмІТКА:
Правила використання <вираз>-у в операторі switch є аналогічними до правила if.
У Делфі ми <вираз> -и назив. Селекторами
У Делфі в ролі мітки ми можемо ставити діапазон значень (в С++ цього не має)
Break який стоїть праворуч кожного з варіантів, призначений для припинення роботи switch після того як відповідний набір операторів виконано.
Якщо ж Break прибрати, то будуть виконуватися всі варіанти починаючи з обраного і до кінця.
У Делфі замість default стоїть else
12. Порівняйте синтаксис опису умовних операторів у С++ і в Delphi.
Delphi
Оператор безумовного переходу.
Є 2 типи безумовних переходів:
GoTo<мітка>
оператор виклику процедури
Умовні оператори (розгалудження):
скорочений if
if <логічний вираз> then
<набір операторів>;
якщо <логічний вираз>= true, тоді <набір операторів>,
якщо <логічний вираз>= false, тоді <набір операторів> оминається.
повний if
if <логічний вираз> then
<1 набір операторів>
Else <2 набір операторів>;
оператор вибору Case
Він дозволяє вибрати 1-у із багатьох альтернатив
Case <перемикач> of
<діапазон вибору 1>:<набір операторів 1>;
<діапазон вибору 2>:<набір операторів 2>;
…………….
<діапазон вибору n>:<набір операторів n>;
Else
{оператори}
End;
вкладені умовні оператори
if <логічний вираз1> then
<1 набір операторів>
Else if <логічний вираз2> then
<2 набір операторів>
Else <3 набір операторів>;
C++
Умовний оператор if має 2 форми запису:
скорочений if
if (<вираз>)
<набір операторів>
Якщо логічний <вираз> true – тоді виконується <набір операторів>(простий чи складений) далі виконується оператор, що є наступним.
Якщо логічний <вираз> false – тоді <набір операторів> оминається.
Якщо <вираз> є присвоєнням, то аналогом false є його значення=0, а true якщо воно не дорівнює 0.
2.повний if
if (<вираз>)
<набір операторів 1>
else
<набір операторів 2>
Тобто обов’язково виконується один із двох <наборів операторів>
switch
умовний оператор switch дозволяє розгалужувати програму на кількість варіантів, яка є більша за 2. Це є найближчий аналог оператора CASE в Делфі.
Switch(<вираз>)
{
Case<мітка 1>:<1-й набір операторів>;break;
Case<мітка 2>:<2-й набір операторів>;break;
……….
Case<мітка n>:<n-й набір операторів>;break;
[default:<оператори>]
ПРИмІТКА:
Правила використання <вираз>-у в операторі switch є аналогічними до правила if.
У Делфі ми <вираз> -и назив. Селекторами
У Делфі в ролі мітки ми можемо ставити діапазон значень (в С++ цього не має)
Break який стоїть праворуч кожного з варіантів, призначений для припинення роботи switch після того як відповідний набір операторів виконано.
Якщо ж Break прибрати, то будуть виконуватися всі варіанти починаючи з обраного і до кінця.
У Делфі замість default стоїть else
13. Оператори циклів у мові С++.
Цикл – це багаторазове виконання одного оператора або групи операторів. Якщо на момент початку багаторазового виконання потрібного фрагменту програми кількість його повторень відома, то використовують цикл з відомою кількістю повторень.
Опис циклу з відомою кіл-ю повторень:
(з параментром)
For (<ініціалізація>;<вираз-умова>; <модифікування>)
{<тіло циклу>;}
* * * * * * * * *
<ініціалізація> - виконується один раз перед початком циклу
<вираз-умова> - перевіряється перед кожним витком циклу
<модифікування>- відбувається після кожного виконання тіла циклу.
* * * * * * * * ** *
ОСОБЛИВОТІ For :
кожна з цих частин може бути пустою, наприклад:
int i;
for (i=1;i<=N; i++){…};
або
for ( ;i<=N; i++){…};
або
for ( ; ; i++){…};
або
for ( ; ; ){…};
* * * *
Параметир i можна описати в дужках
for (int i=1;i<=N; i++){…};
(поза тілом циклу зманна і буде не описана)
Цикл for може мати декілька параметрів циклу:
int i,j;
for(i=1,j=N; i<=N,j>0; i++,j--){…}
ПАрамети р циклу можна змінювати з кроком відмінним від 1:
int i;
for(i=1; i<=N; i+=2+){…}
Параметир циклу може бути дійсним числом:
Float x;
For (x=1.2; x<=N; x+=0.2)
В інших випадках застосовують один з ітераційних циклів:
Цикл з перед умовою
while (<вираз-умова>)
{<тіло циклу>;}
Цикл з після умовою
do
{<тіло циклу>;}
while (<вираз-умова>)
має 2 відміни від Repeat – Until :
в Делфі <тіло циклу> не оточується begin-end
і завершення роботи циклу відбувається по true , а не по false
Оператори передчасного завершення циклу
Break – завершує роботу циклу;
Continue – завершує роботу одного витка циклу;
Return [<значення>] – завершує роботу функції, в якій він знаходиться. Якщо це функція main() , то завершується робота програми. Якщо функція має тип void, то цей оператор <значення> не повертає.
14. Порівняйте синтаксис опису циклів у С++ і в Delphi
-
Delphi
С++
цикл з відомою кіл-тю повторень
For <параметр>:=<нижня межа> to <верхня межа> do <тіло циклу>;
For < параметр >:=<верхня межа> downto < нижня межа > do < тіло циклу >;
(з параментром)
For (<ініціалізація>;<вираз-умова>; <модифікування>)
{<тіло циклу>;}
* * * * * * * * *
<ініціалізація> - виконується один раз перед початком циклу
<вираз-умова> - перевіряється перед кожним витком циклу
<модифікування>- відбувається після кожного виконання тіла циклу.
* * * * * * * * ** *
ОСОБЛИВОТІ For :
кожна з цих частин може бути пустою, наприклад:
int i;
for (i=1;i<=N; i++){…};
або
for ( ;i<=N; i++){…};
або
for ( ; ; i++){…};
або
for ( ; ; ){…};
* * * *
Параметир i можна описати в дужках
for (int i=1;i<=N; i++){…};
(поза тілом циклу зманна і буде не описана)
Цикл for може мати декілька параметрів циклу:
int i,j;
for(i=1,j=N; i<=N,j>0; i++,j--){…}
ПАрамети р циклу можна змінювати з кроком відмінним від 1:
int i;
for(i=1; i<=N; i+=2+){…}
Параметир циклу може бути дійсним числом:
Float x;
For (x=1.2; x<=N; x+=0.2)
цикл з передумовою(ітераційний)
While <логічний вираз> do <тіло циклу>;
цей цикл виконується доти, доки значення виразу не стане false
while (<вираз-умова>)
{<тіло циклу>;}
цикл з після умовою (ітераційний)
Repeat <тіло циклу>
Until <логічний вираз>;
цей цикл виконується доти, доки значення виразу не стане true
do
{<тіло циклу>;}
while (<вираз-умова>)
має 2 відміни від Repeat – Until :
в Делфі <тіло циклу> не оточується begin-end
і завершення роботи циклу відбувається по true , а не по false
Оператори передчасного завершення циклу
Break , Continue , Halt , Abort
Break – завершує роботу циклу;
Continue – завершує роботу одного витка циклу;
Return [<значення>] – завершує роботу функції, в якій він знаходиться. Якщо це функція main() , то завершується робота програми. Якщо функція має тип void, то цей оператор <значення> не повертає