Будь умным!


У вас вопросы?
У нас ответы:) SamZan.net

тематичні вирази за варіантами які наведені в таблиці 2

Работа добавлена на сайт samzan.net:


Робота № 2

Розробка та реалізація програми з лінійною структурою

Ціль роботи: закріплення знань алфавіту мови програмування C++, придбання навичок запису його констант, змінних, виразів, операторів присвоєння; оволодіння навичками складання програми з лінійною структурою та виконання її в IDE Borland C++ 5.0.

Завдання

Завдання 2.1. Записати мовою C++ математичні вирази за варіантами, які наведені в таблиці 2.1.

Таблиця 2.1

Математичні вирази

Математичні вирази

1-3

а) 3(z+1)2+2,1106

б) x+z0 0b1

4-6

а) 104 e2 f +z3

б) x+z<0 0f2

7-9

а) 3(z+3)0,5+10-3

б) x+z1 1b2

10-12

а) ln(z + 1)0,5+4,2104

б) x2 0b3

13-15

а) 5(z+1)5+106

б) 0 b1 0f0,5

16-18

а) 6(z+1)6+1,6106

б) cosx+z0 0b6

19-21

а) 7(z+1)0,5+2,7106

б) x+z0 0b7

22-24

а) 107sin3z + b0,5

б) lnx+z0 0b1

25-27

а) z+13+2105

б) lnx+z0 b9

28-31

а) (z+1)0,5+106

б) x+z0 0b 1

Прийняті позначення: – об’єднання множин, – переріз множин.

Завдання 2.2. Представити математичний запис виразу за варіантами, які наведені в таблиці 2.2, і показати порядок дій.

Таблиця 2.2

Вираз

1

x2./3./x/a+sin(x)/2sqrt(x)+1.0e6pow(x,1./7.)

2

(x7)/3.x+3sqrt(x)/2./x+1.0e71./3.pow(x,5)

3

x2./3.x/a+cos(x)/2./sqrt(x)+1.0e5pow(x,7)

4

(x4)/3./x+sqrt(abs(x))/2.x+1.0e6pow(x,1./3.)

5

x2./3./x/a+sqrt(x)/2./sin(x)+1.0e5pow(x/3.,2./7.)

6

1.4e4pow(2*x,3)+sqrt(sin(x))/2.+cos(x)/2./x

7

abs(cos(x))/2./x5./7.x/a/1.0e6pow(x/2.,1./7.)

8

x2./3./xa+sqrt(sin(x))/2/x+1.0e3pow(x/7.,2./3.)

9

(x7)/3.x+3sqrt(x)/2./x+1.0e74pow(x,b)

10

sqrt(cos(xx))/2./x5./7.x/a/1.0e6pow(x,1./8.)

11

x9./(3x/a)+cos(x)/2./sqrt(x)+1.0e5pow(x,9)

12

x4./3./x+exp(abs(x))/2.x+1.0e4pow(x,1./3.)

13

sqrt(x)/2./(x5./7.)x/a/1.0e6pow(x/2.,1./9.)/11

14

x23./xa+sin(x)/(2x+1.0e3pow(x,5./7.)

51

15

x4./3./(x+abs(x))/2.x+1.0e5pow(x,5./3.)

Завдання 2.3. Cклаcти програму обчислення наступних величин за варіантами, які наведені в таблиці 1.3, та виконати її в IDE Borland C++ 5.0.

Таблиця 2.3

Величини, які треба обчислити

1

Модуль вектора 5a+10b, якщо a={3; 2} і b={0; 1}

2

Проекція вектора a={5; 2; 5} на вісь вектора b={2; 1; 2}

3

Периметр трикутника з вершинами A(1; 1), B(4; 1), C(4; 5)

4

Модуль вектора 2a+4b, якщо a={3; 2} і b={0; 1}

5

Кути трикутника з вершинами A(0; 1,7), B(2; 1,7), C(1,5; 0,85)

6

Площа чотирикутника з вершинами A(0;0), B(1;3), C(2;4), D(3;1)

7

Модуль вектора a+b, якщо a=11, b=23, ab=30

8

Модуль вектора ab, якщо a=3, b=5, та a і b утворюють кут у 1200

9

Кут між векторами a={2; 4; 4} і b={3; 2; 6}

10

Модуль вектора a+b, якщо a={1; 2; 3} і b={4; 2; 9}

Короткі теоретичні відомості

Алфавіт мови C++ складається з сукупності символів, які наведені у додатку 3. За допомогою символів алфавіту можна складати різноманітні конструкції: константи, змінні, оператори, тощо.

Постійна величина (константа) не змінюється в процесі роботи програми. Є декілька видів констант: числові (цілі та з плаваючою крапкою), символьні, логічні.

Цілі десяткові константи складаються з послідовності десяткових цифр, перед якою немає цифри 0, а може стояти знак “+” або “”. Приклад: 15

Цілі вісімкові константи складаються з послідовності вісімкових цифр, перед якою є цифра 0 та може стояти знак “+” або “”. Приклад: 015

У мові C++ цілі константи можна зображати і в шістнадцятковій системі числення. В цьому випадку константи починаються з 0x або 0X, за якими йдуть шістнадцяткові цифри. Перед знаком 0x або 0X може бути знак “+” або “”. Приклад: 0x2A

Цілі десяткова, вісімкова та шістнадцяткова константа, значення якої перевищує найбільше машинне ціле зі знаком, є довгою константою (long); в інших випадках цілі константи вважаються int.

Цілі десяткова, вісімкова та шістнадцяткова константа, за якою безпосередньо стоїть буква l або L, є довгою константою (long).

Константа з плаваючою крапкою складається з цілої частки, десяткової крапки, дробової частки, букви е або Е та цілого показника степеня. Ціла або дробова частка (але не обидві одразу) може бути відсутньою. Десяткова точка, або е (Е) сумістно з цілим показником степеня (але не обидві частки одночасно) може бути відсутньою. Наприклад, число 0,015 можна записати як 0.015 та 0.15E01, або 1.5E02. Константа з плаваючою крапкою має тип double.

Cимвольна константа – це символ в лапках. Приклад: ’f’. Символьні константи вважаються даними типа int.

Логічні константи приймають тільки два значення: true (iстина) та false (хибність).

Коментар – це текст, обмежений символами /* і */, або текст, який починається символами // та закінчується на прикинці рядка. Коментарі /* */ не можуть бути вкладеними. Символи // можна використовувати для того, щоб закоментувати символи /* або */, а символами /* можно закоментувати //.

Змінна визначається ім’ям (ідентифікатором), типом та значенням.

Ідентифікатор є послідовністю букв і цифр, причому перший символ повинен бути буквою. Символ підкреслювання _вважається буквою. В ідентифікаторах великі та малі букви розрізнюються, букви кирилиці використовувати не можна. Не можна використовувати як ідентифікатори службові слова, список яких наведений у додатку 4.

Мова C++ є суворо типізованою мовою. Це означає, що кожна змінна повинна бути описана, тобто необхідно визначити її тип.

Обробка даних виконується в виразах. Вираз складається з операцій і операндів. Операндом може бути константа, змінна або ім’я функції (математичні функції наведені у додатку). Обчислення виконуються зліва направо з урахуванням пріоритету операцій. У мові C++ є 18 рівнів пріоритету операцій. Операції за приорітетом з описом їх позначень, назв та синтаксиса наведені у додатку.

Відзначимо, що при виконанні операції ділення “/” цілого на ціле у результаті набуваємо цілу частку. Наприклад, 5/2 дорівнює 2.

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

Логічні операції !, &&, та || здійснюють дії над операндами відповідно з таблицєю істинності (таблиця 2.7). Наприклад, при k=1 результатом виразу k0 && k4 є true.

Таблиця 2.7

Операція

Дія

Вираз

A

B

Результат

!

Логічне НI

!A

true

false

false

true

&&

Логічне I

A && B

true

true

false

false

true

false

true

false

true

false

false

false

||

Логічне АБО

A || B

true

true

false

false

true

false

true

false

true

true

true

false

Приклад виконання роботи

Завдання 2.1. Данні математичні вирази записати мовою C++:

а) 103e2x +5(z+1)3 б) b< 0  f > 1.

Розв’язання:

a) 1.0e3exp(2x)+5*pow(z+1, 3)

б) abs(b)<0 && f>1

Завдання 2.2. Представити математичний запис виразу 0.51e6sqrt(3x)+2bb і показати порядок дій.

 Розв’язання:

3 2 1 6 4 5

0,51106(3x)0,5+ 2b2 0.51e6sqrt(3x)+2bb

Завдання 2.3. Cклаcти програму обчислення скалярного добутку двох векторів а={4; 2; 4} і b={6; 3; 2} та виконати її в IDE Borland C++ 5.0.

Cклаcти програму обчислення скалярного добутку двох векторів а={4; 2; 4} і b={6; 3; 2} на мові C++.

2. Методика розв’язання задачі

Скалярний добуток двох векторів обчислюється за формулою:

ab= A1 B1 + A2 B2+ A3 B3 , (1.1)

де A1 , B1 , A2 , B2 , A3 , B3   відповідні координати векторів а і b.

3. Алгоритм розв’язання задачі

Алгоритм розв’язання задачі можна представити у вигляді такої послідовності дій:

Дія 1. Ввести координати векторів а і b;

Дія 2. Обчислити скалярний добуток за формулою (1.1);

Дія 3. Вивести значення скалярного добутку двох векторів.

Представимо алгоритм розв’язання задачі на мові C++, позначив змінні A1 , B1 , A2 , B2 , A3 , B3 і ab відповідно як a1, b1, a2, b2, a3, b3 і ab (усі типу double).

4. Текст програми

//Обчислення скалярного добутку двох векторів

#include <iostream.h>

#include <math.h>

void main(){

double a1, a2, a3, b1, b2, b3, ab;

cout<<" Введіть координати a1,a2,a3,b1,b2,b3"<<endl;

cin>>a1>>a2>>a3>>b1>>b2>>b3;

ab=a1b1+a2b2+a3b3;

cout<<" Скалярний добуток ab="<<ab<<endl;

}

5. Результати роботи програми

Введіть координати a1,a2,a3,b1,b2,b3

4. 2. 4. 6. 3. 2.

Скалярний добуток ab=22

Контрольні питання

1. Які дані можна вживати в мові C++?

2. З якою метою використовують директиву {$E}?

3. Назвіть порядок виконання операцій в виразі.

4. Яка структура програми на мові C++?

5. Як працює оператор присвоєння?

6. Як у C++ здійснюється введення і виведення значень змінних?


Робота №
3

Розробка та реалізація програми з розгалуженою структурою

Ціль роботи: оволодіння навичками складання програми з розгалуженою структурою за допомогою умовного оператора if або оператора вибору switch та виконання її в IDE Borland C++ 5.0.

Завдання:

Завдання 3.1. Представити математичний запис фрагмента програми за варіантами, які наведені в таблиці 3.1, і обчислити значення змінної x після його виконання. Вказівка: замість n підставити номер варіанта.

Таблиця 3.1

Фрагмент програми

Фрагмент програми

1-5

t=n; x=t;

if(t>1 && t<3)x=3;

if(t<=1) x=0;

6-10

t=n; x=0;

if(t<0)x=t;

else x=t;

11-15

a=n; b=13; c=12; x=a;

if(x<b)x=b;

if(x<c)x=c;

16-20

a=n; b=17; c=18; x=a;

if(b<x)x=b;

if(c<x)x=c;

21-25

t=n;

switch(t){

case 0: x=1; break;

default: x=0;};

26-30

t=n;

if(t0 && t28)x10;

else if(t=28)x20;

else x0;

Завдання 3.2. Cклаcти програму обчислення значень функції за варіантами, які наведені в таблиці 3.2, та виконати її в IDE Borland C++ 5.0.

Таблиця 3.2

Функція

Функція

Функція

Функція

1

y=tgx/lnx

2

y=lnx/tgx

3

y=arcsin(1/x)

4

y=ctg lnx

5

y=сtg x1/3

6

y=tgx/(1x)

7

y=tgx/ln2/3x

8

y=x0,2tgx

9

y=ln tg x

10

y=tg1/3x/(x+1)

11

y=arcctg1/3x

12

y=arccos x

13

y=arcsin x

14

y=tgx/(x 1)

15

y=lnx/(1x2)

16

y=x/(1+tgx)

17

y=lnx/(1x)

18

y=arcctg x

19

y=tgx/lnx

20

y=x1/7сtgx

21

y=arccos(1/x)

22

y= x1/3/(1x2)

23

y=arcsin1/3x

24

y=arcctg x1/3

25

y=tg2lnx

26

y=tg1/3x

27

y=tgx/(1x2)

28

y=ln tgx1/3

Короткі теоретичні відомості

Умовний оператор if призначений для виконання або невиконання деякого оператора (простого або складеного) залежно від значення виразу.

Загальні вигляди умовного оператора if:

if(вираз) оператор 1;

if(вираз) оператор 1 else оператор 2;

Виконання умовного оператора if полягає в обчисленні логічного виразу. Якщо його значення true (не дорівнює нулю), то виконується оператор 1. Якщо значення логічного виразу false (дорівнює нулю) і умовний оператор не містить слова else, то його виконання завершується. Якщо слово else є, то виконується оператор 2.

Якщо в якій-небудь вітці умовного оператора треба виконати кілька операторів, то їх слід об’єднати в складений оператор {}. Один умовний оператор може входити в інший умовний оператор. При цьому кожне слово else відповідає останньому перед ним if. Так, після виконання наступного фрагмента програми:

x3;

if (x0 && x=1)y1;

else if (x1)y10;

else y0;

змінна y має значення 10.

Оператор вибору switch призначений для виконання одного з кількох можливих операторів в залежності від збігу значення виразу-селектора та значеня константного виразу. Загальний вигляд оператора switch:

switch вираз-селектор{

case константний вираз 1 : оператор 1;

. . .

case константний вираз N : оператор N;

default: оператор;

}

Вираз-селектор повинен бути цілого типу або типу вказівника. Константний вираз повинен мати такий самий тип що і вираз-селектор. В одному операторі switch ніякі константні вирази не можуть мати однакових значень. Може також буте не більше одного префіксу default.

Виконання оператора switch починається з обчислення значення виразу-селектора. При першому збігові цього значення із значенням константного виразу (1,..., N) виконується відповідний оператор. Якщо жодного збігу не зафіксовано, а є слово default, то виконується оператор, наступний за default. У противному разі виконання оператора switch завершується.

Слід зазначити, що префікси case та default самі не змінюють потік управління. Для виходу з оператора switch застосовується оператор break.

Оператор break припиняє виконання оператора switch, в якому був виконан цей оператор. Управління передається на оператор, який стоїть одразу за цим оператором switch.

Приклад. Після виконання наступного фрагмента програми:

char latter=’A’;

switch (latter){

case 'A': cout<<"Case A"; break;

case 'B':

case 'C': cout<<"Case B or C"; break;

default: cout<<"Not A, B or C";

}

буде надруковано Case A

Приклад виконання роботи

Завдання 3.1. Представити математичний запис фрагмента програми

t=8.;

if(t>0)x=pow(t,1./3.);

else if(t<0) x=pow(abs(t),1./3.);

else x=0;

і обчислити значення змінної x після його виконання.

Розв’язання

Цей фрагмент програми реалізує обчислення функції xt1/3. Після виконання цього фрагмента x2.

Завдання 3.2. Скласти програму обчислення значень функції y=ctgx і виконати її в IDE Borland C++ 5.0.

Розв’язання

1. Постановка задачі

Скласти програму обчислення значень функції y=ctgx на мові C++.

2. Методика розв’язання задачі

Функція y=ctgx обчислюється за формулою

y=cosx/sinx, (2.1)

якщо sinx 0 (2.2)

3. Алгоритм розв’язання задачі

Алгоритм розв’язання задачі можна представити у вигляді такої послідовності дій:

Дія 1. Ввести значення x.

Дія 2. Перевірити умову (2.2). Якщо умова істина, то обчислити значення функції за формулою (2.1) і вивести його, інакше вивести повідомлення: "Функція не існує".

Остаточно представимо алгоритм розв’язання задачі на мові C++, позначив змінні x і y відповідно як x і y (обидві типу double).

4. Текст програми

//програма обчислення функції y=ctg(x)

#include <iostream.h>

#include <math.h>

void main(){

double x,y;

cout<<" Введіть x="; cin>>x;

if(sin(x)!=0){

y=cos(x)/sin(x);

cout<<" y="<<y<<endl;

}

else cout<<" Функція не існує"<<endl;

}

5. Результати роботи програми

Введіть x=1.57

y=0.000796327

Контрольні питання

1. Як працюють оператори if і switch?

2. Коли в операторі if застосовують складений оператор?

3. Як виконується умовний оператор if, якщо до нього входить інший умовний оператор if?

4. Що робе оператор break у разі його виконання в операторі switch?


Робота №
4

Розробка та реалізація програми з циклічною структурою

Ціль роботи: оволодіння навичками складання програми з циклічною структурою за допомогою операторів циклу while, do while і for та виконання її в IDE Borland C++ 5.0.

Завдання:

Завдання 4.1. Представити математичний запис фрагмента програми за варіантами, які наведені в таблиці 4.1, і обчислити значення змінної x після його виконання. Вказівка: замість n підставити номер варіанта.

Таблиця 4.1

Фрагмент програми

Фрагмент програми

1-5

x=1;

for(j=n; j>n; j--)

x=xj;

x=2x;

6-10

x0; j=1;

do

x=x+j; j=j+2;

while(j<=n);

11-15

x=0;

for(j=1; j<=n; j++)

x=x+2;

x=2x;

16-20

x=1;

while(x<=n)

x=x+1;

x=2x;

21-25

x=1; j=1; x1=n % 5;

do

x=xx1; j=j+1;

if(j==4) break;

while(j<=5);

26-30

x=n;

for(k=1; k<=6; k++){

if(k<3) continue;

x=x+1;

};

Завдання 4.2. Cклаcти програму табулювання функції з завдання 4.2 при зміні значення x від 1 до 1 з кроком 0,2 та виконати її в IDE Borland C++ 5.0.

Короткі теоретичні відомості

Оператор циклу з передумовою while складається з ключового слова while, за яким йдуть вираз логічного типу у круглих дужках та виконуваний у циклі оператор (простий чи складений).

Загальний вигляд оператора циклу з передумовою:

while(вираз)оператор;

Виконання оператора циклу з передумовою починається з обчислення значення виразу. Якщо це значення false, то оператор не виконується (управління передається на оператор, який стоїть одразу за циклом). Якщо значення виразу true, оператор виконується, після чого знову обчислюється вираз. Щоб запобігти зациклюванню, слід передбачити зміну значення виразу всередині тіла циклу. Наприклад, після виконання наступного фрагмента програми:

atrue; x5;

while(a || x9){ //цикл завершиться, як тільки

a!a; xx2; //вираз набуде значення false

}

змінна x має значення 11, а змінна a  0 (false).

Оператор циклу з післяумовою do while складається з ключового слова do, за яким іде виконуваний у циклі оператор (послідовність операторів); ключового слова while і виразу логічного типу.

Загальний вигляд оператора циклу з післяумовою:

do оператор while(вираз);

Виконання цього оператора циклу відбувається так. Спочатку виконується оператор, а потім визначається значення виразу логічного типу. Якщо значення виразу false, то виконання циклу припиняється. Якщо це значення true, то виконується оператор, а потім знову обчислюється вираз. Наприклад, після виконання наступного фрагмента програми:

atrue; x5;

do

a!a; xx2; //цикл завершиться, як тільки

while(a || x9); //вираз набуде значення false

змінна x має значення 11, а змінна a  0 (false).

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

Оператор циклу з параметром for складається з ключового слова for, за яким йдуть вираз1, крапка з комою (;), вираз2, крапка з комою (;), вираз3 у круглих дужках і виконуваний у циклі оператор (простий або складений).

Загальний вигляд оператора циклу for:

for(вираз1; вираз2; вираз3)оператор;

Вираз1 – це вираз, який описує ініціалізацію циклу. Вираз2 – перевірка умови завершення циклу. Вираз3 – це вираз, який обчислюється після кожної ітерації циклу. Кожний з виразів1-3 може складатися з декількох виразів, які об’єднуються оператором кома (,).

Виконання оператора циклу for починається з обчислення виразу1. Потім обчислюється вираз2. Якщо значення виразу2 false, то виконання циклу припиняється і управління передається наступному оператору. Якщо це значення true, то послідовно виконуються оператор і вираз3, а потім знову обчислюється вираз2.

43

Оператора циклу for еквівалентний наступній послідовності операторів:

вираз1;

while(вираз2){

оператор; вираз3;

}

Якщо немає виразу2, то вважається, що він має значення true. Оператор for(;;); представляє собою нескінченний цикл, який еквівалентний оператору while(true);.

Приклад. Після виконання наступного фрагмента програми:

for(atrue, x5; a || x9; a!a, x+2);

змінна x має значення 11, а змінна a  0 (false).

Оператор break припиняє виконання оператора циклу (while, do while або for), в якому був виконан цей оператор. Управління передається на оператор, який стоїть одразу за оператором циклу.

Оператор continue припиняє виконання поточної ітерації оператора циклу (while, do while або for), в якому був виконан цей оператор, і здійснює перехід к виконанню наступної ітерації циклу. Оператор continue по дії протележен оператору break.

Приклад виконання роботи

Завдання 4.1. Представити математичний запис фрагмента програми

for(x=1,j=1; j<5; j++, x*=j);

и обчислити значення змінної x після його виконання.

Розв’язання

Цей фрагмент програми реалізує обчислення x!=12...5. Після виконання цього фрагмента x120.

Завдання 4.2. Скласти програму табулювання функції y=ctgx при зміні значення x від a1 до b1 з кроком h0,5 і виконати її в IDE Borland C++ 5.0.

Розв’язання

1. Постановка задачі

Скласти програму табулювання функції y=ctgx при зміні значення x від a1 до b1 з кроком h0,5 на мові C++.

2. Методика розв’язання задачі

Методика розв’язання задачі збігається з методикою з приклада завдання 2.2 (при оформленні роботи треба навести методику наново).

3. Алгоритм розв’язання задачі

Алгоритм розв’язання задачі можна представити у вигляді такої послідовності дій:

Дія 1. Ввести значення a, b, h;

Дія 2. Присвоїти x значення a;

Дія 3. Повторювати наступні дії поки xb:

Дія 3.1. Перевірити умову (2.2). Якщо умова істинна, то обчислити значення функції y за формулою (2.1) і вивести x та y, інакше вивести x та повідомлення: ’не існує’;

Дія 3.2. Присвоїти x нове значення, яке дорівнює старому значенню x плюс крок h.

Запишемо алгоритм розв’язання задачі мовою C++, позначив змінні x, y, a, b, h відповідно як x, y, a, b, h (усі типу double).

4. Текст програми

#include <iostream.h>

#include <math.h>

void main(){

double a,b,h,x,y;

cout<<" Введіть a,b,h: "; cin>>a>>b>>h;

for(x=a; x<=b; x+=h)

if(sin(x)!=0){

y=cos(x)/sin(x); cout<<" x="<<x<<" y="<<y<<endl;

}

else cout<<" x="<<x<<" y="<<" не існує"<<endl;

}

5. Результати роботи програми

Введіть a,b,h: -1. 1. 0.5

x=1 y=0.642093

x=0.5 y=1.83049

x= 0 y= не існує

x=0.5 y=1.83049

x=1 y=0.642093

Контрольні питання

1. Як працюють оператори циклу while, do while і for?

2. Чим цикл do while відрізняється від циклу while?

3. Коли у циклах while та for застосовують складений оператор?

4. Якій послідовності операторів еквівалентний оператор циклу for?

5. Як працюють оператори break та continue?


Робота №
5

Розробка та реалізація програми з використанням функцій

Ціль роботи: оволодіння навичками складання програми з використанням функцій та виконання її в IDE Borland C++ 5.0.

Завдання

Завдання 5.1. Обчислити значення змінних, які будуть виведені на дісплей, після виконання фрагмента програми за варіантами наведенимі в таблиці 5.1. Вказівка: n дорівнює номеру варіанта.

Таблиця 5.1

Фрагмент програми

Фрагмент програми

1-5

void d(int &x, int &y);

void main(){

int x,y,n;

cin>>n; x=3; y=4;

d(y,x); y=nx;

cout<<x<<" "<<y;

}

void d(int &x, int &y){

x*=2; y=x+2;

}

6-10

int d(int x, y);

void main(){

int x,y,n;

cin>>n; x=3; y=4;

y=nx+d(y,x);

cout<<x<<" "<<y;

}

int d(int x, y){

return 2*x+y;

}

11-15

int d(int x, y);

void main(){

int x,y,n;

cin>>n; x=3; y=4;

y=nx+d(n,y);

cout<<x<<" "<<y;

}

int d(int x, y){

return 2*x-y;

}

16-20

void d(int &x, int &y);

void main(){

int x,y,n;

cin>>n; n-=9; x=3; y=4;

d(y,x); y=n*x+y;

cout<<x<<" "<<y;

}

void d(int &x, int &y){

x*=2; y=x+1;

}

21-25

int Fp(int x);

void main(){

int n,y; cin>>n; n-=18;

y=Fp(n); cout<<y;

}

int Fp(int x){

if(x>2)return x*Fp(x-1);

else return x;

}

26-30

int Fs(int x);

void main(){

int n,y; cin>>n; n-=21;

y=Fp(n); cout<<y;

}

int Fs(int x){

if(x>1)return x+Fp(x-1);

else return x;

}

Завдання 5.2. Скласти програму обчислення величин із завдання 4.2 з використанням функцій і виконати її в IDE Borland C++ 5.0.

Короткі теоретичні відомості

У мові C++ передбачено засоби, завдяки яким можна об’єднувати послідовність операторів під одним іменем та звертатися до неї як до одного цілого. Це можна робити за допомогою функцій – іменованих часток програми, до яких можна звертатися стільки разів, скількі потрібно.

У програмах C++ усі функції повинні бути обявлені та визначені. Об’ява функції (function declaration) – це оператор, який складається з типа повертаємого функцієй значення, імені функції, круглих дужек та крапки з комою ;. У круглих дужках можуть бути записані формальні параметри функцiї, які один від одного вітділяються комами. Окрім того, перед типом повертаємого функцієй значення може стояти спеціфікатор функції. Об’ява функції в загальній формі має такий вигляд:

{спеціфікатор} тип_повертаємого_значення ім’я_функції(

{тип_парам1 ім’я_парам1, тип_парам2 ім’я_парам2,});

Фігурні дужки {} вказують на те, що спеціфікатор та формальні параметри функцiї не обовязкові, а три крапки позначають, що кількість параметрів може бути довільною. Приклад об’яви функції: long Fact(long x);

Визначення функцiї (function definition) складається з її об’яви (виключаючи крапку з комою ;”) та тіла функції у фігурних дужках. Загальний вигляд визначення функцiї:

{спеціфікатор} тип_повертаємого_значення ім’я_функції(

{тип_парам1 ім’я_парам1, тип_парам2 ім’я_парам2,})

{

тіло функції

}

Якщо функція має відмінний від void тип повертаємого значення, то оператор return у тілі функції повинен повертати значення данного типу.

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

кількість формальних і фактичних параметрів повинна бути однаковою;

перший фактичний параметр відповідає першому формальному, другий другому і т.д.;

кожний фактичний параметр повинен мати той самий тип, що й відповідний йому формальний параметр.

Параметри у функцію можна передавати за значенням і за посиланням. Зміна формальних параметрів, які передаються за значенням, всередині функцiї не викликає зміни відповідних фактичних параметрів. І навпаки, будь-яка змінна формального параметра, який передається за посиланням, викликає зміну фактичного параметра. Передачу параметра за посиланням використовуються тоді, коли цей параметр призначений для передачі деякого значення у місце виклику функції. Приклад:

#include <iostream.h>

void swaparg(int &x, int &y);

void main(){

int i=5, j=7;

cout<<"i="<<i<<" j="<<j<<endl;

swaparg(i, j);

cout<<"Після перестановки: i="<<i<<" j="<<j<<endl;

}

void swaparg(int &x, int &y){

int t;

t = x; x = y; y = t;

}

Якщо функція викликає сама себе, то вона називається рекурсивною. Глибина рекурсії, тобто кількість викликів, у C++ не обмежується. Реально вона залежить від ресурсів пам’яті (розміру стека). Максимальний розмір стека при роботі з Borland C++ 5 складає 1Mb.

В загальному випадку рекурсивність – це не властивість самої функції, а властивість її опису. Рекурсивна функція, як правило, коротша і наочніша за нерекурсивну, але при виконанні вимагає більше часу і пам’яті за рахунок повторних звертань до самої себе і дублювання локальних змінних. Необхідно добре розуміти, що кожний черговий рекурсивний виклик приводить до утворення нової копії локальних об’єктів функції і усі ці копії, що відповідають ланцюжкові активізованих і незавершених рекурсивних викликів, існують незалежно один від одного та зберігаються у стекі. Це може привести до так званого вибуху” стека. Вибух” стека означає, що для запису локальних змінних функції не вистачає пам’яті, яка відводиться під стек.

У C++ можна задати функцію, яка насправді не викликається, а її тіло вбудовується в програму в місці її виклика. Перевагою вбудованих (in-line) функцій є те, що вони не звязані з механізмом виклика функції та повернення ними свого значення. Це позначає, що вбудовані функції можуть виконуватися скоріше звичайних. Недоліком вбудованих функцій є те, що, якщо вони великі та викликаються часто, то обсяг програми зростає. Тому застосування вбудованих функцій звичайно обмежується короткими функціями. Для об’яви вбудованої функції використовують спеціфікатор inline.

Приклад.

#include <iostream.h>

inline int even(int x) {

return !(x%2);

}

void main(){

if(even(10))cout<<”парне”<<endl;

}

Приклад виконання роботи

Завдання 5.1. Обчислити значення змінних, які будуть виведені на дісплей, після виконання наступного фрагмента програми:

long Fact(long x);

void main(){

long n,x,y; n=40; n-=36;

y=Fact(n); x=n; cout<<x<<" "<<y;

}

long Fact(long x){

return x>2 ? x*Fact(x-1):x;

}

Розв’язання

Ця програма обчислює x!=4321 з використанням рекурсивної функції. У результаті її виконання x=4, а y=24.

Завдання 5.2. Скласти програму перестановки елементів масиву a в зворотному порядку з використанням функції і виконати її в IDE Borland C++ 5.0. Елементи масиву a визначаються за формулою ai+1=(37ai+3) mod 64. Значення a0=40; i змінюється від 0 до 16.

1. Постановка задачі

Скласти програму перестановки елементів масиву a в зворотному порядку на мові C++ з використанням функції, якщо елементи масиву визначаються за формулою ai+1=(37ai+3) mod 64. Значення a0=40; i змінюється від 0 до 16. Виконати програму в IDE Borland C++ 5.0.

2. Алгоритм розв’язання задачі

Алгоритм наведений у прикладі розв’язання завдання 4.2 (при оформленні роботи алгоритм необхідно навести наново).

3. Текст програми

//програма перестановки елементів масиву a[n]

#include <iostream.h>

void Rev(int n, int a[]);

void main(){

int i,j,m,x,n=18;

int a[18];

cout<<” Вводимо масив a[”<<n<<”]”<<endl;

a[0]=40;

for(i=0; i<=n-2; i++)a[i+1]=(37a[i]+3) % 64;

for(i=0; i<=n-1; i++)cout<<a[i]<<” ”;

cout<<endl;

Rev(n, a);

cout<<” Масив a[”<<n<<”] після перестановки”<<endl;

for(i=0; i<=n-1; i++)cout<<a[i]<<” ”;

cout<<endl;

}

//функція перестановки елементів масиву int a[n]

void Rev(int n, int a[]){

int m,i,j,x;

m=n/2; j=n-1;

for(i=0; i<=m-1; i++){

x=a[i]; a[i]=a[j]; a[j]=x; j-=1;

}

}

4. Результати роботи програми

Вводимо масив a[18]

40 11 26 5 60 47 14 9 16 19 2 13 36 55 54 17 56 27

Масив a[n] пiсля перестановки

27 56 17 54 55 36 13 2 19 16 9 14 47 60 5 26 11 40

Контрольні питання

1. Що таке функція?

2. Яка різниця між фактичними і формальними параметрами?

3. Коли використовують передачу параметрів за значення, а коли за посиланням?

4. Що таке вибух” стека?

5. Що приводе до вибуху” стека?

Робота № 6

Розробка та реалізація програми з масивами

Ціль роботи: оволодіння навичками складання програми з масивами та виконання її в IDE Borland C++ 5.0.

Завдання

Завдання 6.1. Визначити дію фрагмента програми за варіантами, які наведені в таблиці 6.1, якщо char sName[20]="Hello World!"; char *p=sName; int n,i; (Вказівка: n дорівнює номеру варіанта)

Таблиця 6.1

Фрагмент програми

Фрагмент програми

1-5

for(p+=n; *p; p++)

cout<<*p<<" ";

6-10

for(p+=n; *p; p--)

cout<<*p<<" ";

11-15

for(p+=n-9; *p; p++)

cout<<*p<<endl;

16-20

for(p+=n-11; *p; p--)

cout<<*p<<endl;

21-25

for(i=n-21; i<5; i++)

cout<<sName[i];

26-30

for(i=n-21; i>2; i--)

cout<<sName[i];

Завдання 6.2. Cклаcти програму обчислення наступних величин за варіантами, які наведені в таблиці 6.2, та виконати її в IDE Borland C++ 5.0, якщо елементи масиву визначаються за формулою ai+1=(37ai+3) mod 64. Значення a0 дорівнює номеру варіанта; i змінюється від 0 до 18.

Таблиця 6.2

Величини, які потрібно обчислити

1-3

Найбільший елемент масиву а і його порядковий номер

4-6

Cуми елементів масиву а, значення яких кратні номеру варіанта

7-9

Cуми елементів масиву а, значення яких парні числа

10-12

Середнє арифметичне додатних елементів масиву а

13-15

Cуми елементів масиву а, значення яких непарні числа

16-18

Середнє геометричне додатних елементів масиву а

19-21

Cуми елементів масиву а, значення яких двозначні парні числа

22-24

Добуток найбільшого і найменшого елементів масиву а

25-27

Cуми елементів масиву а, значення яких двозначні непарні числа

28-30

Модуль вектора а/3

Короткі теоретичні відомості

Масив – це упорядкована послідовність однойменних елементів, кожен з яких має один і той самий тип. Елементи масиву можуть мати любий стандартний тип або тип, введений користувачем. Елементи масиву розміщені впорядковано, кожен має свій номер, який називається індексом. Доступ до елементів масиву відбувається шляхом вказування імені масиву та порядкового номера елемента (індексу).

Масив визначається за модифікатором типа []. Загальний вигляд опису масиву:

тип_елементів ім’я_масиву[кількість_елементів];

Наприклад:

char sName[20];

визначає масив з двадцяти елементів типа char. Ім’я масиву sName містить адресу першого елементу масива. Це ім’я може бути використоване в операциях арифметики вказівників для доступу до елементів масиву.

Оператор [] дає більш короткий вираз для доступу до елементів масиву. Вираз sName[k] є еквівалентним *(sName+k).

Масиви в C++, як і в С, нумеруються з нуля. Тому найбільший елемент – це кількість_елементів минус одиниця. Так, в масиві з 20 елементів індекси змінюються від 0 до 19. Перехід через максимум приводить до використання чужої області памяті.

Елементи масиву розміщуються у пам’яті послідовно. Елементи з меншими значеннями індексу зберігаються в більш низьких адресах пам’яті. Елементи багатовимірних масивів розміщуються таким чином, що самий правий індекс зростає самим першим. Так, для двумірного масиву int d[2][2] елементи масиву розміщуються у пам’яті за зростанням адресів: d[0][0], d[0][1], d[1][0], d[1][1].

Приклад виконання роботи

Завдання 6.1. Визначити дію фрагмента програми

char sName[20]="Hello!"; char *p=sName; int n,i;

for(i=1; i<5; i++) cout<<sName[i];

Розв’язання:

Цей фрагмент програми виводить на екран рядок: ello

Завдання 6.2. Скласти програму перестановки елементів масиву a в зворотному порядку і виконати її в IDE Borland C++ 5.0, якщо елементи масиву визначаються за формулою ai+1=(37ai+3) mod 64. Значення a0=40; i змінюється від 0 до 16.

Розв’язання

1. Постановка задачі

Скласти програму перестановки елементів масиву a в зворотному порядку на мові C++, якщо елементи масиву визначаються за формулою ai+1=(37ai+3) mod 64. Значення a0=40; i змінюється від 0 до 16.

2. Алгоритм розв’язання задачі

Алгоритм розв’язання задачі можна представити у вигляді такої послідовності дій:

Дія 1. Ввести елементи масиву a;

Дія 2. Вивести елементи масиву a;

Дія 3. Визначити m (кількість перестановок елементів масиву a), як результат цілочислового ділення числа елементів масиву n на 2;

Дія 4. Присвоїти j (номеру поточного елемента масиву, який переставляється на місце елемента з меншим номером) значення n-1;

Дія 5. Повторювати m разів наступні дії (i= 0, 1, ..., m-1):

Дія 5.1. Присвоїти x (змінній для тимчасового зберігання елемента з меншим номером) значення i-го елемента масиву a;

Дія 5.2. Присвоїти i-му елементу масиву a значення j-го елемента;

Дія 5.3. Присвоїти j-му елементу масиву a значення x;

Дія 5.4. Зменшити значення j на 1;

Дія 6. Вивести елементи масиву a після перестановки.

Запишемо алгоритм розв’язання задачі мовою C++, позначив масив a через a, елементи якого мають тип int. Змінні i, j, n, m, x позначимо відповідно як i, j, n, m, x (усі мають тип int).

3. Текст програми

//програма перестановки елементів масиву a[n]

#include <iostream.h>

#include <math.h>

void main(){

int i,j,m,x,n=18;

int a[18];

cout<<” Вводимо масив a[”<<n<<”]”<<endl;

a[0]=40;

for(i=0; i<=n-2; i++)a[i+1]=(37a[i]+3) % 64;

for(i=0; i<=n-1; i++)cout<<a[i]<<” ”;

cout<<endl;

m=n/2; j=n-1;

for(i=0; i<=m-1; i++){

x=a[i]; a[i]=a[j]; a[j]=x; j-=1;

};

cout<<” Масив a[”<<n<<”] після перестановки”<<endl;

for(i=0; i<=n-1; i++)cout<<a[i]<<” ”;

cout<<endl;

}

4. Результати роботи програми

Вводимо масив a[18]

40 11 26 5 60 47 14 9 16 19 2 13 36 55 54 17 56 27

Масив a[n] пiсля перестановки

27 56 17 54 55 36 13 2 19 16 9 14 47 60 5 26 11 40

Контрольні питання

1. Який тип можуть мати елементи масиву?

2. Як розміщуються в пам’яті елементи масиву?




1. Лекция 12 Основные принципы построения и применения стандартов на статистический приемочный контроль по ко
2. х гг стали дискуссии по проблеме соотношения общения и деятельности [8] [13] [18] [19] [21] [23]
3. Реферат- Психология способностей
4. интеллектуальная собственность означает закрепленные законом временное исключительное право на результ
5. doc N N N 2 2 2
6. Реферат Операции при ЯБЖ и двенадцатиперстной кишки- резекция желудка стволовая и селективная ваготомия
7. Дактилоскопия история и перспективы развития1
8. Информационные технологии в современном образовании и науке Направление подготовки 030100 Философия
9. тематике специальность ~Прикладная геодезияrdquo; группа 1281
10.  scnt скудный недостаточный He slept scnt five hours nd only one with constitution of iron could hve held himsel
11. Ланка Малайзия о
12.  В друзьях обман в любви разуверенье И яд во всем чем сердц
13. Создание мануфактурной промышленности при Петре I
14. Тема- Хвороби системи крові План 1
15. Этико-деонтологические аспекты фармации
16. Понятие виды система и общие условия проведения и оформления следственных действий
17. Социальная защищенность различных слоев населения в России
18. Предпринимательская деятельность и правовые основы собственности
19. Покрытосеменные растения
20. тематический подход к экономической теории.