Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
колоквіум_2.docx
Скачиваний:
0
Добавлен:
09.12.2019
Размер:
258.55 Кб
Скачать

1. Порівняйте синтаксис мов програмування С++ і Delphi.

Символи С++

  • 26 малих і 26 великих латинських літер + _

  • 10 арабських цифр

  • Символи: , . ; : ? ! | / \ ~ ) * + - ) ( { } [ ] < > # % & ^ = “

(Більшими буквами виділено ті, що відсутні у Delphi)

Ключові слова С++ (жирним шрифтом – ті, котрі відсутні в Delphi)

asm auto break case catch char class const continue default do double else enum extern float for friend goto if inline int long new operator private protected public register return short signed sizeof static struct switch template this throw try typedef typeid union unsigned virtual void volatile while.

(Підкреслено ті слова, яких немає в Delphi)

Керуючі послідовності

\0 \x00 null пуста літера

\a \x07 bel звуковий сигнал

\b \x08 bs повернення на крок

\f \x0C ff переведення сторінки

\n \x0A lf переведення рядка

\r \x0D cr повернення каретки

\t \x09 ht горизонтальне табулювання

\v \x0B vt вертикальне табулювання

\\ \x5C \ зворотна коса риска

\' \x27 ' апостроф

\" \x22 " лапки

\? \x3F ? знак запитання

2. Загальна структура програми мовою С++.

Загальна структура програми С++

#include <директиви>

Описи глобальних змінних

тип_результату_tmain(параметри)

{оператори головних функцій

тип_результату ім’я1(параметр 1)

{ оператори 1;}

тип_результату ім’я2(параметр 2)

{ оператори 2;}

3.

Порівняльна таблиця типів даних:

Цілочисельні

Delphi C++ кількість байт

Byte unsigned char 1

ShortInt char 1

Word unsigned short int 2

SmallInt short int 2

Integer int 4

Cardinal unsigned int 4

Int64 (зі знаком) 8

(відсутній тип) unsigned long 8

Дійсні

Single float 4

Double double 8

Extended long double 10

Логічний тип

Boolean bool 1

Відсутність типу

Відсутнє поняття void

Cинтаксис опису змінних

Delphi C++

Var <назва змінної>: <ім’я типу> <ім’я типу> <назва змінної>

Наприклад:

Var Value : Integer; int Value;

5.

6.

7.

8. Перетворення типів

Якщо у виразі з'являються операнди різних типів, то вони перетворяться до деякого загального типу, при цьому до кожного арифметичного операнда застосовується така послідовність правил:

1. Якщо один з операндів у виразі має тип long double, то останні теж перетворяться до типу long double.

2. Інакше, якщо один з операндів у виразі має тип double, то останні теж перетворяться до типу double.

3. Інакше, якщо один з операндів у виразі має тип float, то останні теж перетворяться до типу float.

4. Інакше, якщо один з операндів у виразі має тип unsigned long, то останні теж перетворяться до типу unsigned long.

5. Інакше, якщо один з операндів у виразі має тип long, то останні теж перетворяться до типу long.

5. Інакше, якщо один з операндів у виразі має тип unsigned, то останні теж перетворяться. до типу unsigned.

7. Інакше всі операнди перетворяться до типу int. При цьому тип char перетвориться в int із знаком; тип unsigned char в int, у якого старший байт завжди нульовий; тип signed char в int, у якого в знаковий розряд передається знак з сhar; тип short в int (знаковий або беззнаковий).

Припустимо, що обчислене значення деякого виразу в правій частині оператора присвоєння. У лівій частині оператора присвоєння стоїть деяка змінна, причому її тип відрізняється від типу результату в правій частині. Тут правила перетворення дуже прості: значення праворуч від оператора присвоєння перетвориться до типу змінної зліва від оператора присвоєння. Якщо розмір результату в правій частині більше розміру операнда в лівій частині, то старша частина цього результату буде втрачена.

У мові С++ можна явно вказати тип будь-якого виразу. Для цього використовується операція перетворення ("приведення") типу. Вона застосовується таким чином:

(тип) вираз

(тут можна вказати будь-який допустимий в мові С++ тип).

Розглянемо приклад:

int а = 30000;

float b;

........

b = (float) а * 12;

(змінна а цілого типу явно перетворена до типу float; якщо цього не зробити, то результат буде втрачений, оскільки а * 12 > 32767). Перетворення типу також може використовуватися для перетворення типів аргументів при виклику функцій.

9. Функції у С++. Прототипи функцій. Функція main().

Кожна функція повинна мати оголошення і визначення. Оголошення функції називається її прототипом. Загальний вид прототипу виглядає в такий спосіб.

тип_значення_що_повертається ім'я_функції(тип_параметра1,

... , тип_параметра N);

Будь-яку функцію можна подати у вигляді “чорної шухляди”, у який передається список фактичних

аргументів, можливо порожній, а у відповідь повертається обчислене значення зазначеного типу. У мові С++ функція може повернути тільки одне значення. Список типів, зазначений у прототипі функції, являє собою перерахування типів її формальних параметрів, розділених комами. Якщо функція нічого не одержує ззовні, цей список порожній. Імена параметрів у прототипі вказувати необов'язково. Крім того, типи параметрів можна модифікувати ключовим словом const. Іноді ім'я змінної допомагає швидше знайти помилку, що виникла при компіляції програми. Зверніть увагу на те, що кожний формальний параметр функції повинний бути оголошений окремо. Кількість, порядок і типи формальних параметрів утворять профіль параметрів функції. У свою чергу профіль і тип значення, що повертається, є протоколом функції. Не забувайте: прототип завжди повинний завершуватися точкою з комою! Ім’я і профіль функції утворюють її сігнатуру.

Для реалізації функції необхідно виконати її визначення, що має наступний вид.

тип_значення_що_повертається ім'я_функції

( тип_параметра1 ім'я_параметра1,

... ,

тип_параметра ім'я_параметра)

{

тіло функції

}

Тип значення, що повертається, ім'я функції і список формальних параметрів утворюють заголовок функції. Прототип і заголовок функції повинні збігатися.

Фігурні дужки обмежують тіло функції, що складає з операторів, що розв’язують поставлену задачу. Крім того, фігурні дужки є межами області видимості всіх змінних, оголошених усередині тіла функції (такі змінні називаються локальними). Ця область закрита від зовнішнього світу, і доступ до неї з інших функцій неможливий. Вся інформація може надходити ззовні лише по двох каналах: через фактичні параметри, чи аргументи, що представляють собою значення формальних параметрів, і через глобальні змінні, які є видимими в будь-якій точці програми. Локальні змінні існують лише під час виконання функції. Вони створюються при її виклику і знищуються при поверненні керування в модуль, звідки зроблено виклик. Однак існує можливість зберегти значення локальних змінних між викликами функцій — оголосити такі змінні статичними (див. лекцію 3, розділ 3.3.1).

У мові С++, на відміну від мови Pascal, вкладені функції не допускаються. Виклик функції виконується оператором (). Для цього необхідно перед дужками вказати ім'я функції, а усередині дужок — список аргументів. Як уже відзначалося вище, змінні, оголошені в заголовку функції, називаються параметрами функції. Вони призначені для того, щоб приймати значення аргументів. Як і локальні змінні, вони створюються при виклику функції і знищуються при виході з неї. Розглянемо приклад, що ілюструє поняття виклику, параметрів іаргументів.

Функція main()

Розглянемо тепер дуже важливу функцію main(), що служить диспетчером і організує взаємодію між усіма функціями. Будучи головною, ця функція має усі властивості звичайних функцій. Зокрема, вона має заголовок, список формальних параметрів, тіло, значення, що повертається, — практично всі атрибути функції, за винятком прототипу. Список формальних параметрів функції main() фіксований. Він може складатися лише з зазначених

параметрів, кількість яких обмежується можливостями операційної системи (як правило, це число дорівнює 32767). Аргументи функції main() повинні вказуватися в командному рядку слідом за ім'ям модуля, що виконується. Для витягу аргументів командного рядка використовуються убудовані параметри argv, argc і env. (У деяких компіляторах останній параметр називається envp.) Параметр argc є цілочисельним. Він задає кількість аргументів, зазначених у командному рядку. Ім'я програми вважається першим аргументом. Отже, якщо користувач не задав жодного власного аргументу, значення змінної argc буде дорівнювати 1. Параметр argv є вказівником на масив символьних вказівників, що посилаються на аргументи командного рядка. Варто мати на увазі, що всі аргументи командного рядка є рядками і за необхідності повинні перетворюватися в числа за допомогою відповідних функцій. Спробуємо переробити попередню програму, використовуючи аргументи

командного рядка.

Аргументи командного рядка

#include <iostream.h>

#include <stdlib.h>

int maxint(int, int);

int main(int argc, char* argv[], char* env[])

{

if(argc != 3) { cout << "Помилка"; return 1;}

cout << maxint(atoi(argv[1]),atoi(argv[2]));

return 0;

} Лекція 6 Функції 3

int maxint(int var1, int var2)

{

return var1>=var2 ? var1 : var2;

}

Тепер для обчислення максимального з двох цілих чисел досить набрати в командному рядку ім'я програми maxint і вказати два цілочисельних параметри, розділених пробілами чи знаками табуляції (інші роздільники не допускаються). Зверніть увагу на те, що argv допускає два види оголошення: char *argv[]; чи char** argv;. Обидва способи еквівалентні, оскільки змінна argv є вказівником на масив вказівників. На закінчення зауважимо, що передача параметрів з командного рядка використовується досить рідко. Як правило, функція main() має порожній список параметрів: main().

Параметр env являє собою масив вказівників на рядки оточення операційної системи. Природно, його реалізація залежить від конкретного середовища. Одержати вказівники на рядки оточення можна за допомогою функції getenv(), а задати їх — за допомогою функції putenv(). Їхні оголошення знаходяться в заголовному файлі stdlib.h.

10.

11. Умовні оператори С++.

Умовний оператор

if (умова)

{блок з одного чи більше операторів}

Якщо умова вірна, то виконується блок з одного чи більше операторів

Другий, розширений варіант:

if (умова)

{ блок 1 з одного чи більше операторів }

else

{ блок 2 з одного чи більше операторів }

Якщо умова вірна, то виконується блок з одного чи більше операторів, а якщо не вірна, то блок 2.

Приклад 1.

if (a>b)

ans=10;

else

ans=25;

Якщо а>b, то змінна ans отримує значення 10, інакше - значення 25.

Приклад 2.

if ( age <18)

{

cout <<"Ви неповнолітній. \n";

cout <<"Введіть ваш вік";

cin>> grade;

}

Якщо змінна age<18 , то запитується вік і заноситься в змінну grade. ( Примітка: «\n» - керівний символ який здійснює перехід курсору на новий рядок)

Оператор switch

Оператор switch - оператор выбора.

Формат:

switch (вираз)

case (вираз 1):

блок з одного чи декількох операторів 1;

break;

case (вираз 2):

блок з одного чи декількох операторів 2;

break;

case (вираз З):

блок з одного чи декількох операторів 3;

break;

default:

блок з одного чи декількох операторів n;

break;

}

Оператор switch використовується замість деяких операторів if else.

Якщо вираз приймає значення виразу 1, то виконується блок з одного чи декількох операторов 1, Якщо вираз приймає значення виразу 2 , то виконується блок з одного чи декількох операторов 2, и т.д. Если вираз не співпадає ні з оди дим з виразів під номером, то виконується блок з одного чи декількох операторів операторів n.

Строка default – є неообов’язковою! І може бути відсутньою.

Приклад 1.

// нарахування відсотків,

// kat – категорія рахунку, якщо категорія рахунку =1, то нараховується 20 %,

// якщо категорія рахунку =2, то - 17.5 %,

// в інших випадках нараховується 10 %

#include < iostream.h >

main()

{

int kat;

float s, proz;

cout <<"\nВведіть категорію рахунку ";

cin>> kat;

coot <<"\n Введіть суму "

cin>> s;

switch (kat)

{

case 1:

s*=1.2;

proz = s*.2;

break;

case 2:

s*=1.175;

proz =s*. 175;

break;

default:

s*=l.l;

proz= s*.l;

break;

}

cout <<"\n Нараховано " << proz ;

cout <<"\n В сумі " << s;

return 0;

}

12. Порівняйте синтаксис опису умовних операторів у С++ і в Delphi.

Синтаксис делфі:

if (умова) then begin

{блок з одного чи більше операторів}

end else begin

{блок з одного чи більше операторів}

end;

//Норм інфи в неті не знайшов тому пишу то шо було в конспекті і то шо знаю я ( з любов’ю Хама )

Відмінності: 1. В С++ умову обов’язково потрібно брати в душки.

2. В Делфі рівність двох елементів позначається «=», а в С++ «==». Або – в делфі «or» в С++ « || », і в делфі «and» в С++ «&&» . Не – «not» , «!» .

3. В С++ немає операторів Then, Begin, End. Замість цього там виступають фігурні душки { } Оператор вибору в делфі виглядає так:

case <змінна> of

<значення змінної 1>: {блок з одного чи більше операторів};

<значення змінної 2>:{блок з одного чи більше операторів};

<значення змінної n>:{блок з одного чи більше операторів};

else {блок з одного чи більше операторів};

end;

В делфі після обрання варіанту виконається тільки набір операторів, який цьому варіанту відповідає. У С++ обравши і-тий варіант будуть виконуватися всі наступні варіанти, якщо це не зупинить brake.

13. Оператори циклів у мові С++.

Оператор while

Цикл while - цикл с невідомим числом повторений ( цикл з передумовою )

while (умова)

{блок з одного чи декількох операторів}

Якщо умова правдива (приймає не нульове значення), то виконується блок з одного чи декількох операторів і відбувається повернення на перевірку умови. Якщо умова хибна, відбувається вихід з циклу. Умова може бути складена з декількох виразів, з використанням логічних виразів || ("або") та &&( "і")

Приклад 1.

char ans ='Y';

longint a==l;

while ( (ans ='Y') || (ans='y') )

{a*=a+l;

cout <<"\n"<< a;

cout <<"\n\t" <<" Для продовження введіть Y, для завершення N ";

cin >> ans;

}

ans описується як символ, а – як ціле довге. Якщо користувач вводить 'Y' або 'у', то виконується блок операторів в фігурних дужках.

Оператор while зручно використовувати для перевірки вводу користувача.

Оператор do...while

do...while – це цикл з післяумовою.

Цикл do ... while - цикл с невідомим числом повторень. На відміну від циклу while умова перевіряється в кінці циклу. Тому тіло циклу виконується хоча б один раз.

do

{ блок з одного чи декількох операторів }

while (условие)

Приклад 1.

char ans 'Y';

longint a=l;

do

{a*=a+l;

cout <<"\n" << a;

cout << "\n\t" <<" Для продовження введіть Y, для завершення N " ;

cin>> ans;

}

while ((ans ='Y') || (ans='y') ) ;

Оператор for

for - оператор циклу з відомим числом повторень.

Формат:

for (початковий вираз; контрольний вираз ; лічильник)

{ блок з одного чи декількох операторів }

Оператор for працює наступним чином:

1. Перед виконанням циклу рахується початковий вираз.

2. Перевіряється контрольний вираз.

3. Якщо контрольний вираз правдивий, то блок з одного чи декількох операторів, вираховується значення лічильника, повернення до пункту 2.

А якщо хибне, то оператор for закінчує свою роботу.

Приклад 1.

// Програма видає на екран числа від 1 до 10

#include <iostream.h>

main()

{

int i;

for (i=l; i<=10, i++)

{ cout << i <<"\n"; }

}

Приклад 2.

// додавання чисел від а до b

#include <iostream.h>

main()

{ int a,b,i;

long int s=0;

cout <<”Введіть a \n";

cin>> a;

cout <<"Введіть b \n";

cin>> b;

if(a>b)

{ cout <<"a>b"; }

else

{

for (i=a; i<=b; i++)

s+=i;

cout <<"\nСума=" << s;

}

return 0;

}

Якщо b виявиться більшим за а, програма вирахує сумму всіх чисел на проміжку [a,b].

В якості початкового виразу можна використовувати декілька операторів, їх потрібно розділяти комами. Для прикладу занесемо s=0 в початковий вираз:

for (i=a, s=0; i>=b; i++)

s+=i;

14. Порівняйте синтаксис опису циклів у С++ і в Delphi

В делфі:

while умова do

begin

оператор_1;

оператор_2;

оператор_n;

end;

Відмінностей з С++ не має, окрім самого синтаксису ( див. 1,3 пункт в відмінностях IF ) repeat

оператор_1;

оператор_2;

.............

оператор_N;

until вираз; Аналог do...while в С++ Основною відмінністю є те, що в repeat…unitl якщо умова хибна, то оператори тіла циклу повторюються знову, а в do…while повторення відбувається поки умова правдива.

for i:= i to n do оператор; або

for i:= i downto n do оператор;

Різниця в синтаксисі. В С++ замість to ( downto ) використовується i++ ( i-- ) відповідно.