Первая страница
Наша команда
Контакты
О нас

    Головна сторінка



Частина 1 Лінійні алгоритми Розгалуження Цикли Функції Масиви Шаблони Структури Динамічні структури Підготував

Частина 1 Лінійні алгоритми Розгалуження Цикли Функції Масиви Шаблони Структури Динамічні структури Підготував




Сторінка5/8
Дата конвертації08.05.2017
Розмір1.09 Mb.
ТипПрограма
1   2   3   4   5   6   7   8
§11. КОМАНДА БЕЗУМОВНОГО ПЕРЕХОДУ GOTO.
Кома́нди перехо́ду або Кома́нди переда́чі керування (англ. branch instructions) - різновид команд передачі управління в архітектурах системи команд ЕОМ, які змінюють послідовний порядок виконання програми (тобто перезавантажують лічильник команд адресою, записаною в самій команді переходу, а не збільшуючи його значення на довжину поточної команди).
КОМАНДА ВИБОРУ SWITCH.

Команда безумовного переходу goto

Ця команда змінює послідовність виконання інших команд шляхом переходу до виконання команди, що має позначку (мітку).


Команда переходу має вигляд: goto<мітка >;

Мітка може розміщуватися перед довільною командою у програмі. Вона відокремлюється від команди двокрапкою, а саме: <мітка>: <команда>;


Приклад. Програма квадратного рівняння.

В


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

Введiть коефiцiенти при степенях:

a = 1

b = 2


c = 3

Рiвняння коренiв немае!

Введiть коефiцiенти при степенях:

a = 2


b = 7

c = 1


x1 = -0.149219

x2 = -3.350781

Введiть коефiцiенти при степенях:

a = 0


#include

#include

#include

void main()

{

clrscr();



begin:cout<<"Введiть коефiцiенти при степенях:"<

float a,b,c,d,x1,x2;

cout<<"a = ";cin>>a;

if (a == 0) goto finish; //Якщо а = 0, то перейти до finish

cout<<"b = ";cin>>b;

cout<<"c = ";cin>>c;

d = pow(b,2) - 4*a*c;

if (d>=0)

{

x1 = (-b sqrt(d))/(2*a);



x2 = (-b-sqrt(d))/(2*a);

cout<<"x1 = "<

cout<<"x2 = "<

}

else cout<<"Рiвняння коренiв немае!"<

goto begin; //Перейти до мітки begin

finish:getch();

}
идозмінимо програму квадратного рівняння таким чином, щоб вона могла розв’язувати довільну кількість рівнянь, поки користувач не введе значення коефіцієнта а = 0
Дана програма розв’язує яку завгодно кількість квадратних рівнянь до тих пір, поки не буде введено для змінної а значення 0.
Зауваження. Використовувати команду goto варто лише у виняткових випадках, оскільки вона змінює природну послідовність виконання команд і робить програму важкозрозумілою.

Команда вибору switch. Команда вибору має вигляд:

В
Switch (<вираз>)

{

Case<ознака1>:<Команда1>; break;



Case<ознака2>:<Команда2>; break;

……………………………………….

Case<ознакаN>:<КомандN>; break;

Default: <Команда N 1>;

}
ираз та ознаки
мають бути цілочисельні.

На місці команд 1…N може бути одна команда, декілька або не бути жодної.

Команда break слугує для виходу з команди switch (break – необов’язкова)

Default: <Команда N 1> також може бути відсутня – це коротка форма вибору.



Дія команди: Якщо значення виразу збігається зі значенням ознаки N, то виконується команда з номером N. Якщо в кінці команди, що виконалася є слово break, то відбувається вихід з switch. Якщо ж break відсутній, то розглядається наступний рядок case. Команда після слова default виконується лише тоді, коли жодна з ознак не збігається з виразом.

Приклад. Нехай населені пункти позначені номерами від 1 до 8. Вартість одного квитка cina до конкретного пункту k визначається так:



#include

#include

void main()

{

clrscr();



int k,m,cina;

begin: cout<<"Введiть номер населеного пункту (1..8) - "; cin>>k;

cout<<"Введiть кiлькiсть квиткiв - ";cin>>m;

switch (k)

{

case 1:cina = 22;break;



case 2: case 3: case 4: cina = 25;break;

case 5: case 6: cina = 30;break;

case 7: case 8: cina = 35;

default:


{

cout<<"Помилка при введеннi!"<

goto begin;

}

}



cout<<"Цiна "<

getch();


}

Скільки коштує m квитків до населеного пункту, номер k якого вводиться з клавіатури?

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




Підсумок

  1. Команда goto слугує для переходу в довільну точку програми

  2. Команда goto змінює природну послідовність виконання команд і робить програму важкозрозумілою.

  3. Вираз та ознаки у команді swidch мають бути цілочисельні.

ХОЧЕШ ЗНАТИ БІЛЬШЕ? ПРОЧИТАЙ!



ПЕРЕРАХОВАНИЙ ТИП ENUM.

Перерахований тип enum.

Тип enum утворюють із перерахування констант цілого типу:




Enum <назва типу> ={<стала 1>=<значення 1>, < стала 2>=< значення 2>,…,<стала N>=< значення N>};

При оголошення перерахованого типу enum значення можна не вказувати (не ініціалізувати сталих). В цьому випадку першій сталій автоматично буде присвоєно значення 0 (перша константа утотожнюється з нулем, кожна наступна – зі значенням на 1 більшим).


Enum <назва типу> ={<стала 1, < стала 2>,…,<стала N>};

Ініціалізувати також можна лише деякі сталі у списку констант. Неініціалізованим сталим автоматично буде присвоєно значення на одиницю більше від значення попередньої сталої із списку.

Приклад 1


Enum week = {mon, tue, wed, the, fri, sat, sun}; //mon = 0, tue = 1, wed = 2, …, sun = 6

Enum color = {red = 1, green, yellow = 6, white}; //red = 1, green = 2, yellow = 6, white = 7



Оголосити змінну перерахованого типу можна так само як і змінну довільного зарезервованого типу.

Н


#include

void main()

{

enum svet {mon=1,tue,wed,the,fri,sat,sun};



svet dey;

dey = the;

cout<

}


#include

void main()

{

enum svet {mon=1,tue,wed,the,fri,sat,sun};



svet dey;

dey = 4;


cout<}
априклад, weеk dey; (змінна dey типу weеk)

Результати роботи обох програм ідентичні, а саме на екрані буде число 4 (змінна dey отримає значення 4 не лише в другому випадку, а і в першому). Змінна dey може приймати значення mon,tue,wed,the,fri,sat,sun. Але компілятор мови С розглідає змінні перечисленого типу як цілі числа (тобто компілятор розглядає значення змінної dey рівними 1..7, а не mon ..sun).

До змінних переліченого типу можна крім оператора присвоєння застосовувати оператори порівняння:




#include

void main()

{

enum svet {mon=1,tue,wed,the,fri,sat,sun};



svet dey1,dey2;

dey1 = tue;

dey2 = fri;

if (dey1

else cout<<"dey1>dey2"<

}

Резудьтат роботи програми

dey1
#include

void main()

{

enum svet {mon=1,tue,wed,the,fri,sat,sun};



svet dey1,dey2;

dey2 = tue;

dey1 = fri;

if (dey1

else cout<<"dey1>dey2"<

}

Резудьтат роботи програми

dey1>dey2

Оскільки транслятор мови С може розглядати значення змінних типу enum як цілі дані, то на місці виразу та ознак команди вибору swtch окрім сталих цілого типу можеть бути присутні значення перерахованого типу.


Наприклад Програма виведення на екран розкладу роботи на тиждень:


#include

#include

void main()

{

clrscr();



enum svet {mon,tue,wed,the,fri,sat,sun};

int day;


cout<<"Розклад на тиждень:\n";

for (day=mon; day

switch (day)

{

case mon: cout<<"Понедiлок. Зустрiч акцiонерiв.\n"; break;



case tue: cout<<"Вiвторок. Вiдрядження.\n";break;

case wed: cout<<"Середа. Вiдрядження.\n";break;

case the: cout<<"Четвер. Вiдрядження.\n";break;

case fri: cout<<"П'ятниця. Вiдрядження.\n";break;

case sat: cout<<"Субота. Вихiдний.\n";break;

case sun: cout<<"Недiля. Вихiдний.\n";

}

getch();


}

Результат роботи програми
Розклад на тиждень:

Понедiлок. Зустрiч акцiонерiв.

Вiвторок. Вiдрядження.

Середа. Вiдрядження.

Четвер. Вiдрядження.

П'ятниця. Вiдрядження.

Субота. Вихiдний.

В тексті програми використовується цик for (див. наступний параграф). Тіло циклу (команда switch) виконується сім разів: при першому разі змінній day присвоюється значення mon, при кожному наступному виконанні тіла циклу day збільшується на 1 (day ), до тих пір, поки day

Зверніть увагу, що тут в якості ознак у команді switch використовуються не цілі цисла, а їх позначення: mon, tue, …, sun.


РОЗДІЛ 3. ЦИКЛИ

ВСТУП

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

В мові С циклічні обчислення реалізуються за допомогою інструкцій FOR, WHILE і DO-WHILE
§12. ЦИКЛ З ПАРАМЕТРОМ FOR

В


Команда FOR має вигляд: for (<вираз1>; <логічний вираз2>; <вираз3>) <команда1>;
ираз1 призначений для підготовки циклу і виконується один раз. Переважно у виразі1 задаються початкові значення змінних циклу (підготовлюють цикл). У логічному виразі2 записують умову виходу із циклу. У виразі3 – команди зміни параметрів циклу. Якщо за допомогою одного із виразів необхідно виконати декілька дій, то використовують команду «кома». Вирази 1 і 3 або один із них у команді
for можуть бути відсутні. Але символ «;» в цьому випадку опускати неможна. <Команду1> ще називають тілом циклу

П
void main()

{

int n = 1, sum = 0;



for (;n<=15;n ) sum =n;

}


void main()

{

for (int n = 1,sum = 0;n<=15;n ) sum =n;



}

void main()

{

for (int n = 1,sum = 0;n<=15;sum =n );



}
риклад
1. Розглянемо декілька варіантів обчислення суми цілих чисел з проміжку від 1 до 15.

В результаті виконання усіх варіантів програми n = 16 sum = 120


Дія команди.

  1. Обчислюється значення виразів 1 та 2.

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

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


Приклад2. Кілька варіантів знаходження кількісті та добутку лише парних чисел з діапазону 4..11


void main() //варіант1

{

for (int n=4,prod=1,k=0;n<=11;prod*=n,n =2,k );



}

void main() //варіант2

{

for (int n=4,prod=1,k=0;n<=11;n =2) (prod*=n,k );



}

У


void main() //варіант3

{

for (int n=4,prod=1,k=0;n<=11;n =2)



{

prod*=n; k ;

}

}
першому варіанті у виразі1 та у виразі3 використовується кома як команда. Тіло циклу взагалі відсутнє.


У другому варіанті тіло складається з двох команд, яка розглядається як одна (використовується кома як командиа)

У третьому варіанті тілом циклу є складена команда.




§13. ТАБУЛЮВАННЯ ФУНКЦІЙ.

Приклад 1. Побудувати таблицю відповідності температур по шкалі Цельсія та по шкалі Кельвіна в межах
від -200С до 200С з кроком 20С.
Абсолю́тна температу́рна шкала́, шкала́ Ке́львіна (лат. scala - сходи) - температурна шкала, в якій початковою точкою є абсолютний нуль, а одиницею температури - Кельвін, що дорівнює градусові за шкалою Цельсія (дивіться Термометри).



//Табулювання температу

#include

#include

void main()

{

clrscr();



cout<<"------------------------\n"

<<"Цельсiя\t\tКельвiна\n"

<<"------------------------\n";

for (int C=-10,K=C 273;C<=10;C =2,K=C 273)

cout<

getch();


}

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

–––––––––––––––––––

Цельсiя Кельвiна

–––––––––––––––––––

-10 263

-8 265


-6 267

-4 269


-2 271

0 273


2 275

4 277


6 279

8 281


10 283



Зверніть увагу!

В програмі ми використали керуючі послідовності \t для переведення курсора на нове положення табуляції.




Приклад 2. Протабулювати функцію y = 2sinx на проміжку [0; 1.5] з кроком h = 0.1 та обчислити середнє арифметичне значень функції більших 0.
Арифмети́чне сере́днє (в математиці і статистиці) - сума всіх зафіксованих значень набору, поділена на кількість елементів набору. Якщо з контексту зрозуміло, про яке значення йде мова, тоді просто кажуть середнє.
5, але менших 1.5.


#include

#include

#include

void main()

{

clrscr();



cout<<"--------------\n"

<<"x\t2sin(x)\n"

<<"----------------\n";

float sum=0, h=0.1; int n=0;

for (float x=0.0,y=2*sin(x);x<=1.5 h/2;y=2*sin(x),x =h)

{

cout<

if ((y>=0.5)&&(y<=1.5),sum =y,n );

}

sum/=n;



cout<<"Середне = "<

getch();


}

––––––––––––

x 2sin(x)

––––––––––––

0 0


0.1 0

0.2 0.199667

0.3 0.397339

0.4 0.59104

0.5 0.778837

0.6 0.958851

0.7 1.129285

0.8 1.288435

0.9 1.434712

1 1.566654

1.1 1.682942

1.2 1.782415

1.3 1.864078

1.4 1.927117

1.5 1.9709

Середне = 1.098267





Зверніть увагу!

В циклі замість логічного виразу x<=1.5 ми записали умову x<=1.5 h/2.

Це пов’язано з специфікою комп’ютерної арифметики. Справа в тому, що значення дійсних змінних співпроцесором комп’ютера хоч обчислюються і з великою точністю, але все ж наближено. Тому щоб не втратити останнього значення х = 1.5 ми і записали умову у вигляді x<=1.5 h/2 – додали зміщення h/2.

Взагалі кажучи в логічних виразах бажано уникати порівнянь змінних дійсних типів. Але якщо все ж таки порівняння дійсних типів неминуче, то необхідно додавати деяке зміщення.


§14. ЦИКЛ WHILE. НАБЛИЖЕНІ ОБЧИСЛЕННЯ.


Цикл WHILE має вигляд: While (<логічний вираз>)<команда1>;




команда1 – тіло циклу



Дія циклу While:

  1. Спочатку обчислюється значення логічного виразу

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

  3. Процес виконується доти, доки логічний вираз істиний.

Приклад 1. Знайти суму цифр числа 1234

Д


void main()//варіант 1

{

int a =1234,s=0;



while (a>0)

{

s =a;



a/=10;

}

}



void main() //варіант 2

{

int a =1234,s=0;



while (a>0,s =a,a/=10);

}
еяке ціле а = 1234.

Операція а%=10 дасть результат 4. Після виконання команди а/=10 змінна а отримає ціле значення 123. Повторне виконання операції а%=10 дасть результат 3, а команди
а/=10 – результат а = 12. Очевидно описаний процес слід повторювати до тих пір поки а>0.
Результати роботи програми в обох варіантах ідентичні:

s = 10, a = 0


В другому варіанті тіло циклу відсутнє. Зате в якості логічного виразу виступає три вирази розділені комою (кома як команда інтерпретує ці вирази як єдиний).
Приклад2. Визначення обсягу вільного місця в динамічній пам’яті оперативної пам’яті в даний момент часу


#include

#include

void main()

{

clrscr(); int n=0;



while (new char) n ;

cout<<"Вiльноi пам'ятi - "<

getch();

}


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

Вiльноi пам'ятi - 3780


Логічний вираз (new char) має істине значення якщо вдається виділити під динамічну змінну типу char місце в динамічній пам’яті (в купі). Як тільки вільного місця в динамічній пам’яті немає вираз (new char) отримує хибне значення. Тілом циклу є звичайний лічильник, оскільки змінна типу char займає один байт.



Типовими прикладами використання циклу WHILE є обчислення із заданою точністю.

Приклад3. Нехай х деяке число, яке необхідно ввести з клавіатури. З клавіатури вводиться також точність е (дуже мале число). Обчислити суму елементів: з точністю е.


#include

#include

void main()

{

clrscr();



float sum=0,e;

long int fact=1; int n = 1;

cout<<"Похибка е = "; cin>>e;

while (1.0/fact>=e)

{

sum =1.0/fact;



fact*= n;

}

cout<<"Summa = "<

cout<<"Просумовано елементiв - "<

getch();


}

N! = 1*2*3*…*N.

Наприклад 5! = 1*2*3*4*5 =120, а 1/5!<0.01

Тобто 5-й елемент 1/5! уточнює значення суми величини, яка менша 0.01


Похибка е = 0.00001

Summa = 1.718279

Просумовано елементiв – 9

Для введеної похибки е = 0.00001 знаходиться значення Summa з точністю до 4-го знака після коми Summa = 1.7182




Похибка е = 0.00000000001

Summa = 1.718282

Просумовано елементiв - 17

Тут значення суми знайдено набагато точніше.



Зауваження! В умові циклу замість 1/fact>e ми записали 1.0/fact>e, так як компілятор С значення виразу 1/fact буде трактувати як ціле (тобто рівне нулю для всіх fact більших 1)
Приклад4. Знайти значення числа  із заданою точністю е.

Обчислення значення засновано на тому, що сума ряду 1 – 1/3 1/5 – 1/7 1/9 ... наближається до значення /4 при достатньо великій кількості членів ряду.




#include

#include

void main()

{

clrscr(); float e;



cout<<"Введiть точнiсть е = "; cin>>e;

float pi = 0; int n = 1,k = 1;

while (1.0/n>e/4)

{

pi =k*1.0/n;n =2;k*=-1;



}

pi*=4;


cout<

}


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

Введiть точнiсть е = 0.0001

3.141538



§15. КОМАНДА ЦИКЛУ З ПІСЛЯУМОВОЮ DO-WHILE

Команда DO-WHILE, як і команда WHILE, використовується в програмі, якщо треба провести деякі обчислення (цикл), що повторюються, і як для WHILE число повторів наперед не відоме і визначається самим ходом обчислення.



В загальному вигляді команда циклу з післяумовою DO-WHILE має вигляд:

Do

{

<Команда 1>

}

while (<логічний вираз>);

П
#include

#include

void main()

{

clrscr(); float a,sum;



do

{

cout<<"Число (для завершення 0) = "; cin>>a;



sum =a;

}

while (a!=0);



cout<<"Сума введених чисел = "<

getch();


}
риклад
1: Знайти суму чисел, що вводяться з клавіатури.

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

Число (для завершення 0) = 2

Число (для завершення 0) = 3

Число (для завершення 0) = 4

Число (для завершення 0) = 1

Число (для завершення 0) = 0

Сума введених чисел = 10



Команда виконується таким чином:


  1. Виконуються команди наступні за словом Do.

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

Таким чином, команди, що знаходяться між Do і While виконуються, до тих пір, поки логічний вираз має істине значення.

Приклад 2. Розкласти на прості множники число введене з клавіатури.

Варіатн 1

#include

#include

void main()

{

clrscr();



int n,i=2;

cout<<"Цiле число = ";

cin>>n;

cout<

do {for (;n%i==0;n/=i) cout<<" * "<

i ; }


while (i<=n);

cout<

getch();

}
Варіант 2

#include

#include

void main()

{

clrscr();



int n,i=2;

cout<<"Цiле число = ";

cin>>n;

cout<

do {while (n%i==0) {cout<<" * "<

n/=i;}


i ;

}

while (i<=n);



cout<

getch();


}



РОЗДІЛ 4. ПІДПРОГРАМИ.

§16. ІНКАПСУЛЯЦІЯ. ПОНЯТТЯ ПІДПРОГРАМИ.



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

Інкапсуляція в програмуванні – це процес, в результаті виконання якого частина програми, що розв’язує під задачу агрегується в незалежну структуру, утворюючи капсулу. Капсули можуть використовуватися в програмі, як єдині закінчені частини програми.

Приклад. Нехай ділянка кола, що складається з чотирьох резисторів (див мал) споживає різницю потенціалів U.
Різниця потенціалів - характеристика електричного поля, різниця електростатичних потенціалів у двох точках простору.
Визначити силу струму I, яка протікає через дане коло.


Якби нам був відомий загальний опір R усієї ділянки, то струм в колі ми знайшли б за законом Ома :



Якщо ми уважно подивимося на наше коло, то помітимо, що воно складається з двох паралельно з’єднаних ділянок R12 та R34. А з курсу фізики відомо, що:



  • опір двох послідовно з’єднаних провідників визначається за формулою:

R12 = R1 R2; R34 = R3 R4

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


Для розв’язання задачі, можна попередньо створити дві незалежні структури:

  • структуру, що обчислює опір послідовно з’єднаних провідників

  • та структуру, що обчислює опір паралельно з’єднаних провідників.

Тоді, використовуючи першу структуру, можна знайти опори R12 та R34, а використовуючи другу – опір R.

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



  1. З головної програми капсулі можна було б передати значення двох опорів (наприклад R1 та R2).

  2. Капсула повинна передавати головній програмі значення загального опору (а саме опору R12).

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

Програміст створивши підпрограмну капсулу має можливість багаторазового використання капсули. Так одну підпрограмну капсулу призначену, наприклад, для знаходження опору двох послідовно з’єднаних провідників можна використати двічі: для знаходження опору R12 та опору R34.

Підпрограмні капсули будемо називати підпрограмами.

ПІДПРОГРАМА

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



Процес використання підпрограм розділяється на 2 етапи:

  • опис підпрограми (підпрограма утворює незалежну капсулу);

  • виклик підпрограми з головної програми (передача управління від головної програми до під програмної капсули).

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

На основі підпрограм будується програмні конструкції, що називаються функціями та процедурами.

Механізми процедури та функції є обов’язковими для мов високого рівня.

Для мови С суттєвої відмінності між процедурами та функціями немає. Процедура виступає як різновид функції.



ОПИС ПІДПРОГРАМИ

Опис підпрограми розглянемо на прикладі опису підпрограмної капсули (функції) знаходження опору провідників:



  1. Послідовно з’єднаних (successive – в перекладі з англ. послідовне)

  2. Паралельно з’єднаних (parallel – в перекладі з англ. паралельне)



float parallel (float R1,float R2) //заголовок функції

{ //тіло функції

Float R;

R := (R1*R2)/(R1 R2);

Return R;

}


float successive(float R1,float R2) //заголовок функції

{ //тіло функції

Float R;

R = R1 R2;

Return R;

}

Послідовне з’єднання Паралельне з’єднання

С
Структура заголовку функції: <тип функції><назва функції> (<список формальних параметрів>)
писок формальних параметрів забезпечують взаємодію процедури з головною програмою, а саме:


  • передачу значень з головної програми в процедуру. В наведеному прикладі це параметри R1 та R2. Вони дійсного типу. Це означає, що функція може отримати від головної програми два дійсні значення для їх обробки. Значення, які отримує підпрограма від головної програми називають фактичними параметрами.

Передача значень від функції головній програмі.

В наведеному прикладі передача відбувається через дійсну R.



Return R означає передати гловній програмі обчислене в підпрограмній капсулі значення R.

Т
Перший варіант цієї програми:

#include

#include

//---------------------------------------------

float succesive(float r1,float r2)

{ //Опис функції succesive

float r; r = r1 r2;

return r;

}

//---------------------------------------------



float parallel(float r1,float r2)

{ //Опис функції parallel

float r; r = r1*r2/(r1 r2);

return r;

}

void main() //Головна програма



{

clrscr();

float R1,R2,R3,R4;

cout<<"R1 = ";cin>>R1;

cout<<"R2 = ";cin>>R2;

cout<<"R3 = ";cin>>R3;

cout<<"R4 = ";cin>>R4;

float R;


R = parallel(succesive(R1,R2),succesive(R3,R4));

cout<<"R = "<

}

#include // Другий варіант цієї програми:

#include

float succesive(float,float); //Оголошення функції succesive

float parallel(float,float); // Оголошення функції parallel

void main() //Головна програма

{

clrscr();



float R1,R2,R3,R4;

cout<<"R1 = ";cin>>R1;

cout<<"R2 = ";cin>>R2;

cout<<"R3 = ";cin>>R3;

cout<<"R4 = ";cin>>R4;

float R;


R = parallel(succesive(R1,R2),succesive(R3,R4));

cout<<"R = "<

}

//---------------------------------------------



float succesive(float r1,float r2) //Опис функції succesive

{

float r; r = r1 r2;



return r;

}

//---------------------------------------------



float parallel(float r1,float r2) //Опис функції parallel

{

float r; r = r1*r2/(r1 r2);



return r;

}
екст програми вцілому:

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

ХОЧЕШ ЗНАТИ БІЛЬШЕ? ПРОЧИТАЙ!



РІВНІ ІНКАПСУЛЯЦІЇ.

Капсули в програмуванні утворюють не лише сукупність операторів (команд), утворюючи незалежну структуру – підпрограму. Це лише один із рівнів інкапсуляції, який носить назву підпрограмного рівня інкапсуляції. В даний час у структурному представленні програми можна розрізняти 6 рівнів інкапсуляції.



  1. Лексичний рівень інкапсуляції

  2. Операторний рівень інкапсуляції

  3. Підпрограмний рівень інкапсуляції

  4. Модульний рівень інкапсуляції

  5. Класний рівень інкапсуляції

  6. Мегамодульний рівень інкапсуляції

Лексичний рівень інкапсуляції

Інкапсулюють символи алфавіту мови і утворюються капсули, які називаються лексемами.



Лексеми – позначення та зображення об’єктів програми.

Операторний рівень інкапсуляції

Інкапсулюють лексеми та будуються з них вирази, утворюючи капсули, що називаються операторами, командами.


Підпрограмний рівень інкапсуляції

Інкапсулюють оператори. Утворюється підпрограма (функція, процедура), макрос.


Модульний рівень інкапсуляції

Інкапсулють оператори опису, макроси, процедури, функції і утворюють капсулу. Такі капсули – модулі або пакети.


Класний рівень інкапсуляції

Інкапсулють оператори опису, макроси, процедури, функції і утворюють капсулу – клас.


Мегамодульний рівень інкапсуляції

Інкапсулють оператори опису, макроси, процедури, функції і утворюють капсулу – мегамодуль.



1   2   3   4   5   6   7   8