- •1 Лінійні програми
- •2. Програми з розгалуженням
- •3. Циклічні програми з регулярною зміною аргумента
- •4 Циклічні програми з регулярною зміною аргумента, які містять розгалуження
- •5 Інтеграційні циклічні процеси
- •6 Одновимірні масиви
- •7 Циклічні програми з накопиченням суми або добутку
- •8 Вкладені цикли
- •9 Двовимірні масиви, сортування масивів
- •10 Процедури
- •11 Підпрограми-функції
- •12 Обробка текстів
- •13 Файли
- •14 Основи ооп. Принципи побудови класів
- •Завдання
- •Приклад розв’язання задачі
- •15. Перевантаження функцій
- •Завдання
- •Приклад розв’язання задачі
- •16. Шаблони функцій
- •Завдання
- •25. Написати функцію dob, яка шукає добуток серед двох, трьох та чотирьох цілих та дійсних чисел.
- •Приклад розв’язання задачі
10 Процедури
При складанні програм з використанням процедур необхідно:
- скласти графічний алгоритм розв’язання задачі з використанням процедури, передбачити введення вихідних даних, звертання до процедури, виведення вихідних даних задачі і результатів обчислень;
- скласти окремо графічний алгоритм процедури і навести опис формальних параметрів;
- скласти головну програму, в якій передбачити звернення до процедури. Процедуру-програму написати використавши формальні параметри;
- скласти програму самої процедури;
- розв’язати задачу а діалоговому режимі.
В умовах більшості задач не задані цифрові значення вихідних даних, студентові надається можливість самому задатися необхідними числовими значеннями для тестування складеної програми.
10.1 Дано квадратну матрицю А розміром nxn. Скласти програму нормування матриці, поділивши всі елементи кожного рядка на максимальний елемент за модулем цього рядка. Пошук максимального елемента рядка оформити у вигляді процедури.
10.2 Дано три одновимірні масиви різної розмірності. Скласти програму формування одновимірного вектора D, елементами якого є відмінні від нуля мінімальні елементи за модулем заданих масивів. Пошук мінімального елемента за абсолютним значенням виконати у вигляді процедури.
10.3 Оформити у вигляді програми обчислення функції
і порівняти одержаний результат зі значенням, отриманим при використанні стандартної функції ЕХР(Х), для х=2.3; 8.5.
10.4 Дано три одновимірні масиви. Переставити числа таким чином, щоб на початку знаходились всі додатні числа, а в кінці – від’ємні. Перестановку чисел виконати у вигляді підпрограми.
10.5 Дано два одновимірні масиви, які складаються не більш як з 30 елементів кожний. Використавши підпрограму пошуку максимального елемента, знайти півсуму максимальних елементів заданих масивів.
10.6 дано два трикутники зі сторонами a, b, c, i d, e, f. Використавши підпрограму, визначити, чи ці трикутники є прямокутні чи ні?
10.7 Дано сторони двох трикутників a, b, c, i d, e, f.. знайти, на скільки площа одного трикутника більша від другого. Площа трикутника АВС зі сторонами А, В, С обчислюється за формулою Герона:
Де R – півпериметр трикутника АВС. Обчислення площі трикутників оформити у вигляді процедури.
10.8 Дано три квадратні матриці. Сформувати вектор, який складається з мінімальних елементів кожної матриці, відмінних від нуля. Пошук мінімального елемента виконати у вигляді процедури.
10.9 Дана прямокутна матриця. Сформувати вектор, який складається з максимальних елементів кожного стовпця (рядка) матриці. Пошук максимального елемента в стовпці (рядку) виконати у вигляді підпрограми.
10.10 Використовуючи підпрограму обчислення значення однієї функції, обчислити і надрукувати таблицю значень таких функцій:
Аргумент х змінюється від початкового значення 2.8з кроком 0.15 до кінцевого 3.7.
10.11 Використовуючи підпрограму,
обчислити значення функції
Для значень х, які містяться в проміжку [-1.5;1.5] з кроком ∆х=0.5, φ=0, і для значень х, які містяться в проміжку [-2.5;3] з кроком 0.6; φ=0.1. Передбачити недопустимість ділення на 0.
10.12 Скласти програму перестановки стовпців прямокутної матриці розміром mxn таким чином, щоб сума елементів стовпця зросла від першого стовпця до останнього. Перестановку стовпців виконати в підпрограмі.
10.13 Обчислити значення перших n (n<30) елементів геометричної прогресії з допомогою підпрограми, якщо відомий перший елемент прогресії а та знаменник прогресії q. Кожний наступний елемент геометричної прогресії утворюється множенням попереднього на знаменник прогресії. Для розміщення в пам’яті обчислених елементів їх слід оголосити як одновимірний масив.
10.14 Обчислити сполучення з n елементів по m (n<m)
Обчислення факторіала виконати у вигляді підпрограми.
10.15 Дано декартові координати 8 точок. Підрахувати, скільки точок належить площині, обмеженій колом з радіусом R і центром у точці (0,0). Перевірку належності оформити у вигляді підпрограми.
10.16 Дано декартові координати 5 точок. Обчислити і вивести на друк полярні координати, впорядкувати за зростанням полярного радіуса (полярного кута). Полярний радіус і полярний кут обчислюється так:
Де х,у – декартові координати точок. Переведення в полярні координати виконати у вигляді підпрограми.
10.17 Дано декартові координати 6 точок і координати базової точки. Визначити сумарну віддаль між базовою і рештою точок, а також максимальну віддаль. Обчислення віддаль між двома точками оформити у вигляді підпрограми.
10.18 Дано дві квадратні матриці одного порядку А і В. показати, що для них вірний асоціативний закон, тобто А*В=В*А. у випадку стверджувальної відповіді вивести на друк повідомлення «АСОЦІАТИВНИЙ ЗАКОН ВИКОНУЄТЬСЯ», в противному випадку – «АСОЦІАТИВНИЙ ЗАКОН НЕ ВИКОНУЄТЬСЯ». Обчислення добутку двох матриці виконати у вигляді підпрограми.
10.19. Дано експериментальні значення чотирьох випадкових величин, кожна з яких має не більше 8 значень. Обчислити дисперсію випадкової величини ri (i=1, 2, 3, 4 ) вважаючи її експериментальними значеннями , математичне значення заданих випадкових величин. Математичне сподівання і дисперсія випадкової величини Х обчислюється так:
Обчислення математичного сподівання оформити у вигляді процедури.
10.20 Дано три прямокутні матриці. Знайти слід кожної матриці і вивести на друк значення найменшого за модулем сліду. Обчислення сліду матриці оформити у вигляді підпрограми. Слідом матриці називається сума елементів головної діагоналі.
10.21 Дано три вектори. Визначити максимальний парний елемент кожного вектора і упорядкувати їх за спаданням. Пошук максимального елемента вектора виконати у вигляді підпрограми.
10.22 Дано дві прямокутна матриці. Розв’язати рівняння px+q=0, де р – мінімальний за модулем елемент першої матриці; q – мінімальний за модулем елемент другої матриці. Пошук мінімального за модулем елемента матриці оформити у вигляді процедури.
10.23 Дано координати точок х1, у1; х2, у2; х3, у3; х4, у4. визначити і вивести на друк координати точок, для яких кут між віссю абсцис і променем, що з’єднує точку з початком координат, є максимальним. Обчислення величини кута з початком координат, оформити у вигляді підпрограми.
10.24 Обчислити наближено площу фігури, яка обмежена віссю Х, прямими Х=а і Х=b (a<b) і кривою Y=Y(X)=X2/(1+X). Інтервал зміни Х поділити на 10 частин і підсумувати площі десяти прямокутників з основою 0.2; висота прямокутника дорівнює значенню функції на лівій границі його основи. Обчислення площі оформити у вигляді підпрограми. Для значень а=3; b=5; а=7; b=9.
Приклад. Дана прямокутна матриця А розміром 4х5. Скласти програму обчислення добутку ненульових елементів кожного рядка матриці. Обчислення добутку в рядку виконати у вигляді процедури.
Розв’язання
1 Графічний алгоритм розв’язання задачі показаний на рис.10.1 – головна програма, рис.10.2 – підпрограма.
2 Програма мовою Бейсік.
2.1 З використанням внутрішньої процедури
10 REM ВИКОРИСТАННЯ ПІДПРОГРАМ
20 DIM А(4,5): OPTION BASE 1
30 DATA 1E-1, 2E-1, 1.2, 1.4, 3.5, 4E-1, -1.6, 3.2, 1.2, 1.5
40 DATA 2.1, 3.5, 1.2, -3.6, 7.1, 2.4, 1.5, 3.2, 4.1, 1E-1
50 PRINT “ВИХІДНІ ДАНІ” : PRINT
60 FOR I=1 TO 4
70 FOR J=1 TO 5
80 READ A(I,J)
90 PRINT A(I,J);
100 NEXT J%
110 PRINT
120 NEXT I%
130 PRINT : PRINT “РЕЗУЛЬТАТИ РОЗРАХУНКУ” : PRINT
140 FOR I=1 TO 4
150 GOSUB 190
160 PRINT “D(“;I;”)=”;D
170 NEXT I
180 STOP
190 REM ПІДПРОГРАМА ОБЧИСЛЕННЯ ДОБУТКУ
200 D=1
210 FOR J=1 TO 5
220 IF A(I,J)=0 THEN 240
230 D=D*A(I,J)
240 NEXT J
250 RETURN
260 END
ВИХІДНІ ДАНІ
1Е-1 2Е-1 1.2 1.4 3.5
4E-1 -1.6 3.2 1.2 1.5
2.1 3.5 1.2 -3.6 7.1
2.4 1.5 3.2 4.1 1E-1
РЕЗУЛЬТАТИ РОЗРАХУНКУ
D(1)=1.176E-1
D(2)=-3.6864
D(3)=-225.439
D(4)=4.7232
3 Програма мовою Сі
#include <stdio.h>
#define ROWS 4
#define COLS 5
main ()
{
Float b[ROWS][ COLS]={
{1е-1 2е-1 1.2 1.4 3.5},
{4e-1 -1.6 3.2 1.2 1.5},
{2.1 3.5 1.2 -3.6 7.1},
{2.4 1.5 3.2 4.1 1e-1},
}
mul();
int i;
for(i=0;i<ROWS;i++)
printf(“d[%i]=%f\n”,i,mul(b,i));
}
float mul(c,k)
float c [ROWS][ COLS];
int k;
{
int i;
float d=1;
for (i=0;i<COLS;i++)
d*=c[k][i];
return (d);
}
d[0]=0.117600
d[1]=-3.686400
d[2]=-225.439194
d[3]=4.723200
Рисунок 10.1 Рисунок 10.2
Програма мовою Паскаль з використанням підпрограми – процедури
program lab10;
type mass=array [1..4,1..5] of real;
var d:=array [1..4] of real;
i,j: integer;g:real;
a: mass;
procedure dob(k: integer; b: mass;var f:real);
var n: integer;
begin
f:=1;
for n:=1 to 5 do
if b[k,n]<>0 then f:=f*b[k,n];
end;
begin
for i:=1 to 4 do
for j:=1 to 5 do
begin
write(‘a[‘,i,’,’,j,’]=’);
read(a[i,j])
end;
for i:=1 to 4 do
begin
dob(i,a,g);d[i]:=g;
writeln(‘d[‘,i,’]=’,d[i]:12)
end;
end.
D(1)=1.17600E-01
D(2)=-3.68640E+00
D(3)=-2.25439E+02
D(4)=4.72320E+00
Пояснення до програм
На рис. 10.1 показаний алгоритм головної програми, який складається з введення матриці А, символ 2, звертання до підпрограми обчислення добутку, символ 5, яке здійснюється в тілі циклу із заголовком циклу, символ 4, і виводу заданої матриці А, символ 3, результатів обчислення, символ6. на рис. 10.2 наведений алгоритм підпрограми обчислення добутку ненульових елементів кожного рядка матриці С. формальними параметрами підпрограми є матриця С як двомірний масив.
Питання для самоперевірки
З якою метою використовуються підпрограми?
Що таке формальні і фактичні параметри в процедурах – підпрограмах?
Як оформляється процедура мовою Бейсік?
Яка різниця між глобальними і локальними параметрами?
Як формується звернення до підпрограми мовами Сі і Паскаль?
Охарактеризуйте відмінності при звертанні до програми мовою Бейсік і мовою Сі.
