Лабораторна робота №6
Тема. Складання блок-схем і програм з використанням процедур і функцій.
Мета: набуття навичок алгоритмізації і програмування задач з використанням підпрограм, навичок у виборі формальних параметрів.
Прилади та обладнання: персональні комп'ютери з операційно системою Windows та середовищем мови програмування C.
Допуск до виконання лабораторної роботи. Перевірка теоретичних знань із застосуванням тестів.
Теоретичні питання
Функції в мові Сі.
Оголошення функції
Прототипи функції
Область дії і область видимості змінних.
Короткі теоретичні відомості.
Функції в мові Сі.
Використання в програмах завершених модулів, що призначені для вирішення деяких локальних задач, дозволяє значно спростити час розробки програм і підвищити їх ефективність. Такі завершені модулі називаються підпрограмами. До них можна багаторазово звертатися за іменем, передаючи вхідні дані і одержувати результати. В мові С використовується тільки один тип підпрограм – функції. С-програма – це сукупність функцій, одна з яких – main().
Треба відрізняти оголошення функції і опис функції. Якщо функція оголошена, то інші функції можуть містити звертання до неї.
Оголошення функції.
Основна форма опису функції має вигляд :
тип <ім’я функції>(список параметрів)
{
тіло функції
}
Тип визначає тип значення, яке повертає функція за допомогою оператора return. Якщо тип не вказаний, то за замовчуванням він буде int. Список параметрів складається з переліку типів і імен параметрів, розділених комами. Функція може не мати параметрів, але круглі дужки обов’язкові.
Приклад вірного переліку параметрів:
F(int x, int y, float z)
Неправильно f(int x,x, floatz);
Прототипи функцій.
До першого виклику функції треба повідомити про тип результату і кількість та типи аргументів. Для цього в Сі використовується поняття прототипу функції, який задається так:
Тип <ім’я функції> (список параметрів);
Використання прототипу функції є оголошенням функції.
Найчастійше він співпадає з заголовком функції, але не завжди. Імена формальних параметрів у прототипі ігноруються компілятором, тому вони не грають ніякої ролі.
Область дії і область видимості змінних.
Область дії-це правила, які встановлюють, які дані доступні з даного місця програми. В мові Сі кожна функція – це окремий блок програми. Попасти в тіло функції не можна інакше, як через її виклик. З точки зору області дії відрізняють три типи змінних: глобальні, локальні і формальні параметри.
Локальні змінні - це змінні оголошені всередині блоку, або функції. У С є правило: змінна може бути оголошена всередині будь-якого блоку програми. Локальна змінна доступна всередині блоку, де вона оголошена. (область дії – блок).
Формальні параметри – це змінні оголошені при описі, як аргументи. Їх області дії – в тілі функції.
Глобальні змінні – це змінні, оголошені поза межами функції. Їх область дії – вся програма.
Самі функції завжди глобальні, бо в мові С заборонено визначати функції всередині інших функцій.
програми функції
так
нік
Програма мовою С
#include <stdio.h>
#define ROWS 4
#define COLS 5
float b[ROWS][COLS]={
{1e-1, 2e-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,int); int i;
main()
{
for(i=0;i<ROWS;i++)
printf(“d[%i]=%f\n”,i,mul(b,i));
}
float mul(int c,int k)
{
float c[ROWS][COLS]; int i; float d=1;
for(i=0;i<COLS;i++)
if (c[k][i]!=0) d*=c[k][i];
return (d);
}
d[0]=0.117600
d[1]=-3.686400
d[2]=-225.439194
d[3]=4.723200
Порядок виконання роботи:
1. Складіть алгоритм та програму згідно вашого варіанту.
2. Запустити програму на виконання.
3. Продемонструвати викладачеві.
4. Занотувати текст програми та результати виконання у звіт.
5. Дати відповіді на контрольні запитання.
Контрольні запитання
Дайте визначення Локальних змінних
Дайте визначення Формальні параметри
Дайте визначення Глобальних змінних
Варіанти завдань.
1. Дано квадратну матрицю А розміром n * n. Скласти програму нормування матриці, поділивши всі елементи кожного рядка на максимальний елемент за модулем цього рядка. Пошук максимального елемета рядка оформити у вигляді процедури.
2. Дано три одновимірні масиви різної розмірності . Скласти програму формування одновимірного вектора D, елеметами якого є відмінні від нуля мінімальні елементи за модулем заданих масивів. Пошук мінімального елемента за абсолютним значенням виконати у вигляді процедури.
3. Оформити у вигляді програми обчислення фукції ех = 1+Х+Х2 / 2!+ Х3 / 3!+. . . і порівняти одержаний результат зі значенням, отриманим при використанні стандартної функції EXP(x), для Х=2.3;8.5.
4. Дано три одновимірні масиви. Переставити числа таким чином, щоб на початку кожного масиву знаходились всі додатні числа, а в кінці від’ємні. Перестановку чисел виконати у вигляді процедури.
5. Дано два одновимірні масиви, які складаються не більше 30 елементів кожний. Використавши підрограму пошуку максимального елемента, знайти півсуму максимальних елеметів заданих масивів.
6. Дано два трикутники зі сторонами а, b, c і d, e, f. Використавши підпрограму, визначиити, чи ці трикутники є прямокуті, чи ні?
7. Дано сторони двох трикутників:a, b, c та d, e, f. Знайти, наскільки площа одого трикутника більша від другого. Площа трикутника А, В, С обчислюється за формолую Герона
де R-півпериметр трикутника АВС. Обчислення площі трикутників оформити у вигляді процедури.
8. Дано три квадратні матриці. Сформувати вектор, який складається з мінімальних елементів кожної матриці, відмінних від нуля. Пошук мінімального елемента виконати у вигляді процедури.
9. Дано прямокутна матриця. Сформувати вектор, який складається з максимальних елементів кожного стовпця (рядка) матриці. Пошук максимального елемента в стовпці (рядку) виконати у вигляді підпрограми.
10. Використовуючи підпрограму обчислення значеня однієї функції, обчислити і надрукувати таблицю значень таких функцій g=X2/(1+X)2. 2, y=(2+X)/(1+X)3. Аргумент х змінюється від початкового значення 2.8 з кроком 0.15 до кінцевого 3.7.
11 .Використовуючи підпрограму, обчислити значення функції t = sin(X+)/X. Для зачень X, які містяться в проміжку [-1.5;1.5] з кроком Х=0.5, =0 і для значень X, які містяться в проміжку [-2.5 ; 3] з кроком 0.6; =0.1. Передбачити недопустимість ділення на 0.
12. Скласти програму перестановки стовпців прямокутної матриці розміром nxn таким чином, щоб сума елементів стовпця зростала від першого стовпця до останього. Перестановку стовпців виконати в процедурі.
13. Обчислити значення перших n (n<30) елементів геометричної прогресії з допомогою процедури, якщо відомо перший елемент прогресії а та знаменник прогресії q. Кожний наступний елемент геометричої прогресії утворюється множенням попередього на знаменник прогресії. Для розміщення в пам’яті обчислених елементів їх слід оголосити як одновимірний масив.
14. Обчислити сполучення з n елементів по n (n>m)
. Обчислення факторіала використати у вигляді процедури.
15. Дано декартові координати 8 точок. Підрахувати скільки точок належить площині, обмеженій колом з радіусом R і центром в точці (0;0). Перевірку належності оформити у вигляді процедури.
16. Дано декартові координати 5 точок. Обчислити і вивести на друк полярні координати, впорядкувати за зростанням полярного радіуса (полярного кута). Полярний радіус і полярний кут обчислюється так:
;
, де х, у – декартові координати точок. Переведення в полярні координати виконати у вигляді процедури.
17. Дано декартові координати 6 точок і координати базової точки. Визначити сумарну віддаль між базовою і рештою точок, також максимальну віддаль. Обчислення віддалі між точками оформити у вигляді процедури.
18. Дано дві квадратні матриці одного порядку А і В. Показати, що для них вірний асоціативний закон, тобто А*В=В*А. У випадку стверджувальної відповіді вивести на друк повідомлення “КОМУТАТИВНИЙ ЗАКОН ВИКОНУЄТЬСЯ”, в противному випадку – “ КОМУТАТИВНИЙ ЗАКОН НЕ ВИКОНУЄТЬСЯ”. Обчислення добутку двох матриць виконати у вигляді процедури.
19. Дано експериментальні значення чотирьох випадкових величин, кожна з яких має не більше 8 значень. Обчислити дисперсію випадкової величини ri, і=1, 2, 3, 4 вважаючи її експериметальними значеннями. Математиче сподівання і дисперсія випадкової ввеличини Х обчислюються так:
;
. Обчисленя математичного сподівання оформити у вигляді процедури.
20. Дано три прямокутні матриці. Знайти слід кожної матриці і вивести а друк значення найменшого за модулем сліду. Обчислення сліду матриці оформити у вигляді процедури. Слідом матриці називається сума елементів головної діагоналі.
21. Дано три вектори. Визначити максимальний парний елемент кожного вектора і впорядкувати їх за спаданням. Пошук максимального елемента вектора виконати у вигляді процедури.
22. Дано дві прямокутні матриці. Розв’язати рівняння px + q = 0, де р – мінімальний за модулем елемент першої матриці; q – мінімальний за модулем елемент другої матриці. Пошук мінімального елемента виконати у вигляді процедури.
23. Дано координати точок х1,у1; х2,у2; х3,у3; х4,у4. Визначити і вивести на друк координати точок, для яких кут між віссю абсцис і променем, що з’єднує точку з початком координат, є максимальним. Обчислення величини кута між між віссю абсцис і променем, що з’єднює точку з початком координат, оформити у вигляді процедури.
24. Обчислити наближено площу фігури, яка обмежена віссю Х, прямими Х=а і Х=b, (a<b) і кривою
. Інтервал зміни Х поділити на 10 частин і підсумувати площі 10 прямокутників з основою 0.2; висота прямокутника дорівнює значенню функції на лівій границі його основи. Обчислення площі оформити у вигляді процедури. Для значень а=3; b=5; a=7;b=9.