Разделы | Программирование, Базы данных |
Тип | |
Формат | Microsoft Word |
Язык | Украинский |
Загрузить архив: | |
Файл: kursach.zip (22kb [zip], Скачиваний: 40) скачать |
Міністерство освіти і науки України
Кафедра «Моделювання складних систем»
з предмету «Програмування
і алгоритмічні мови»
на тему «Використання підпрограм»
Виконав студент |
Коваль Є.В. |
Група |
ЕСЗТ-81с |
Факультет |
заочний |
Перевірив викладач |
Андрієнко В.І. |
Варіант роботи |
14 |
Суми – 2001
Зміст |
2 |
|
Вступ |
3 |
|
1. |
Завдання 1 |
4 |
1.1 |
Постановка задачі |
4 |
1.2 |
Вирішення задачі (програма) |
4 |
1.3 |
Отриманий результат після виконання програми |
5 |
1.4 |
Аналіз отриманого результату |
5 |
1.5 |
Опис формату підпрограми функції |
6 |
1.6 |
Формальні та фактичні параметри функції |
6 |
2. |
Завдання 2 |
7 |
2.1 |
Постановка задачі |
7 |
2.2 |
Вирішення задачі (програма) |
7 |
2.3 |
Отриманий результат після виконання програми |
|
2.4 |
Аналіз отриманого результату |
|
2.5 |
Опис формату підпрограми процедури |
|
2.6 |
Формальні та фактичні параметри процедури |
|
3. |
Опис використаних в програмах операторів |
|
Використана література |
В Турбо-Паскалі виділяють два види програм: процедури і функції. Структура процедур і функцій така ж, як і структура основної програми, тобто включає заголовок і блок. В свою чергу блок складається із розділу описів і розділу операторів. Текст процедури або функції може бути розташований в основній програмі одним з нижчевикладених способів:
1) розташований безпосередньо в розділі опису основної програми;
2) записаний у окремий файл і вставлений в розділ описів основної програми за допомогою директиви компілятору:
{$I ім`я_файлу}
3) оформлений у вигляді зовнішнього модуля (це можуть бути або стандартні модулі, або поряд з використанням стандартних модулів кожний програміст має можливість організації власних модулів). Структура любого модуля має вигляд:
unit ім`я модуля
interface
uses список_використовуваних_модулів
{Відкриті оголошення}
implementation
uses список_використовуваних_модулів
{Власні оголошення}
{Процедури та функції}
begin … end.
Постановка задачі
Обчислити суми елементів нижніх трикутних матриць для матриць А(15,15) і В(20,20).
Виконати з використанням підпрограми функції.
Program Kurs_Task1;
Uses Crt;
Const n=4; m=6;
Type Mas=Array[1..m,1..m] of Real;
Var a,b : Mas;
Sa,Sb : Real;
{-= Пpоцедуpа встановлення кольоpу шpифта =-}
Procedure Tc (p:Integer);
Begin
TextColor(p);
End;
{-= Пpоцедуpа введення числових елементiв матpиць =-}
Procedure InT (k:String; x:Integer; Var m:Mas);
Var i,j : Integer;
Begin
For i:=1 To x Do
Begin
For j:=1 To x Do
Begin
Write('Масив '); TC(15); Write(k); TC(7);
Write(' строка '); TC(15); Write(i); TC(7);
Write(' елемент '); TC(15); Write(j); TC(7);
Write(' > '); TC(15); ReadLn(m[i,j]); TC(7);
End;
End;
End;
{-= Функцiя обчислення суми елементiв нижньої тpикутної матpицi =-}
Function Sum (k:String; x:Integer; Var m:Mas):Real;
Var i,j,t : Integer;
s : Real;
Begin
t:=0; s:=0;
For i:=1 To x Do
Begin
t:=t+1;
For j:=1 To t Do
Begin
s:=s+m[i,j];
End;
End;
Sum:=s;
End;
{-= Основна пpогpама =-}
Begin
ClrScr;
InT('A',n,a);
InT('B',m,b);
Sa:=Sum('A',n,a);
Write('Сума елементiв нижньої тpикутної матpицi '); TC(15);
Write('A'); TC(7); Write(' доpiвнює '); TC(15); WriteLn(Sa:5:2); TC(7);
Sb:=Sum('B',m,b);
Write('Сума елементiв нижньої тpикутної матpицi '); TC(15);
Write('B'); TC(7); Write(' доpiвнює '); TC(15); WriteLn(Sb:5:2); TC(7);
ReadKey;
End.
Масив A строка 1 елемент 1 > -5
Масив A строка 1 елемент 2 > -4
Масив A строка 1 елемент 3 > -3
Масив A строка 1 елемент 4 > -2
* * * *
Масив B строка 6 елемент 1 > 10
Масив B строка 6 елемент 2 > 11
Масив B строка 6 елемент 3 > 12
Масив B строка 6 елемент 4 > 13
Масив B строка 6 елемент 5 > 14
Масив B строка 6 елемент 6 > 15
Сума елементiв нижньої тpикутної матpицi A дорiвнює 40.00
Сума елементiв нижньої тpикутної матpицi B доpiвнює 35.00
Для зручності побудови програми замість параметрів (15,15) та (20,20) матриць А і В відповідно, були використані розміри (4,4) та (6,6), які можуть змінюватися шляхом зміни чисельних значень констант n та m.
Вище приведено результат, обчислений програмою. При введенні обох матриць, вводяться всі числові значення, а потім із створених матриць виділяється нижня трикутна матриця (за даними завдання):
Матриця А |
Матриця В |
||||||||||
-20 |
-19 |
-18 |
-17 |
-16 |
-15 |
||||||
-5 |
-4 |
-3 |
-2 |
-14 |
-13 |
-12 |
-11 |
-10 |
-9 |
||
-1 |
0 |
1 |
2 |
-8 |
-7 |
-6 |
-5 |
-4 |
-3 |
||
3 |
4 |
5 |
6 |
-2 |
-1 |
0 |
1 |
2 |
3 |
||
7 |
8 |
9 |
10 |
4 |
5 |
6 |
7 |
8 |
9 |
||
10 |
11 |
12 |
13 |
14 |
15 |
Для перевірки вірності обчислення програмою суми елементів нижньої трикутної матриці виконаємо підрахунок для матриці (масиву) А:
перевірочне обчислення:
(–5) + (–1) + 0 + 3 + 4 + 5 + 7 + 8 + 9 + 10 = 40
результат обчислення програми:
Сума елементiв нижньої тpикутної матpицi A дорiвнює 40.00
Як ми можемо бачити, результати ідентичні, а це свідчить про те, що програма обробила вхідні дані вірно і видала вірну відповідь.
Вищевикладене може обгрунтовано свідчити про те, що програма виконана вірно.
Опис формату підпрограми функції
Підпрограма функція використовується, якщо в програмі виявляються однотипні ділянки, які виконують ті ж самі обчислення, але з різними даними.
Структура функції така ж, як і структура основної програми, тобто включає заголовок і блок. В свою чергу блок складається з розділу операторів.
Загальний вигляд функції: function ім`я (формальні_параметри) : тип;
Особливості підпрограми-функції:
1)функція має тільки один результат виконання (але може мати декілька вхідних параметрів);
2)результат позначається іменем функції, тому в розділі операторів функції обов`язково повинен бути присутнім оператор присвоювання, в лівій частині якого стоїть ім`я цієї функції;
3)в заголовку функції обов`язково повинен бути вказаний тип функції;
4)виклик функції в основній програмі здійснюється безпосередньо усередині вираження по її імені із вказуванням фактичних параметрів.
Формальні і фактичні параметри функції
Формальні параметри представляють собою список перемінних із вказуванням їх типу, які відділяються один від одного крапкою з комою.
В представленій вище програмі використовувані формальні параметри функції – перемінна, яка вказує ім`я масиву, який обробляється усередині цієї функції (m:Mas); перемінна, яка вказує розмірність масиву (x:Integer); та символьне значення (А або В) – ім`я матриці (k:String):
Function Sum (k:String; x:Integer; Var m:Mas):Real;
Фактичні параметри указуються безпосередньо усередині тіла основної програми при виклику функції – після її імені в дужках.
ЗАВДАННЯ 2
Постановка задачі
Обчислити суми і кількість елементів, які знаходяться в інтервалі від a до b для матриць X(10,8) і Y(10,12).
Виконати з використанням підпрограми процедури.
Вирішення задачі
Program Kurs_Task2;
Uses Crt;
Const h=5; m=4; n=6;
Type Mas=Array[1..h,1..n] of Real;
Var x,y : Mas;
a1,b1,a2,b2 : Integer;
v1,v2 : Integer;
Sx,Sy : Real;
{-= Пpоцедуpа встановлення кольоpу шpифта =-}
Procedure Tc (p:Integer);
Begin
TextColor(p);
End;
{-= Пpоцедуpа введення числових елементiв матpиць =-}
Procedure InT (k:String; x:Integer; Var m:Mas);
Var i,j : Integer;
Begin
For i:=1 To h Do
Begin
For j:=1 To x Do
Begin
Write('Масив '); TC(15); Write(k); TC(7);
Write(' строка '); TC(15); Write(i); TC(7);
Write(' елемент '); TC(15); Write(j); TC(7);
Write(' > '); TC(15); ReadLn(m[i,j]); TC(7);
End;
End;
End;
Procedure Out (k:String; a,b,v:Integer; s:Real);
Begin
Write('Сума елементiв матpицi ',k,' в iнтеpвалi вiд ');
WriteLn(a,' до ',b,' доpiвнює ',s:5:2);
WriteLn('Кiлькiсть обчислених елементiв доpiвнює ',v);
End;
{-= Пpоцедуpа обчислення суми елементiв та їх кiлькостi =-}
Procedure Sum (x:Integer; a,b: Integer; m:Mas; Var s:Real; Var v:Integer);
Var i,j,p : Integer;
Begin
p:=0; s:=0; v:=0;
For i:=1 To h Do
Begin
For j:=1 To x Do
Begin
p:=p+1;
If (p>=a)and(p<=b) Then
Begin
s:=s+m[i,j];
v:=v+1;
End;
End;
End;
End;
{-= Основна пpогpама =-}
Begin
ClrScr;
InT('X',m,x);
InT('Y',n,y);
WriteLn('Задайте iнтеpвал для матpицi X:');
Write(' вiд > '); ReadLn(a1);
Write(' до > '); ReadLn(b1);
Sum(m,a1,b1,x,Sx,v1);
WriteLn('Задайте iнтеpвал для матpицi Y:');
Write(' вiд > '); ReadLn(a2);
Write(' до > '); ReadLn(b2);
Sum(n,a2,b2,y,Sy,v2);
Out('X',a1,b1,v1,Sx);
Out('Y',a2,b2,v2,Sy);
ReadKey;
End.
Отриманий результат після виконання програми
Масив X строка 1 елемент 1 > -10
Масив X строка 1 елемент 2 > -9
Масив X строка 1 елемент 3 > -8
Масив X строка 1 елемент 4 > -7
* * * *
Масив Y строка 5 елемент 3 > 16
Масив Y строка 5 елемент 4 > 17
Масив Y строка 5 елемент 5 > 18
Масив Y строка 5 елемент 6 > 19
Задайте iнтеpвал для матpицi X:
вiд > 5
до > 12
Задайте iнтеpвал для матpицi Y:
вiд > 7
до > 15
Сума елементiв матpицi X в iнтеpвалi вiд 5 до 12 доpiвнює -20.00
Кiлькiсть обчислених елементiв доpiвнює 8
Сума елементiв матpицi Y в iнтеpвалi вiд 7 до 15 доpiвнює0.00
Кiлькiсть обчислених елементiв доpiвнює 9
Аналіз отриманого результату
Для зручності побудови програми замість параметрів (10,8) та (10,12) матриць X та Y відповідно, були використані розміри (5,4) та (5,6), які можуть змінюватися шляхом зміни чисельних значень констант m та n.
Вище приведено результат, обчислений програмою. При введенні обох матриць, вводяться всі числові значення, потім користувач позначає інтервал для обох матриць окремо, в якому потрібно виконати підсумовування та підрахунок кількості підсумованих елементів (в даному випадку для матриці X від 5 до 12, а в матриці Y від 7 до 15 елементу матриці):
Матриця X |
Матриця Y |
||||||||||
-10 |
-9 |
-8 |
-7 |
-10 |
-9 |
-8 |
-7 |
-6 |
-5 |
||
-6 |
-5 |
-4 |
-3 |
-4 |
-3 |
-2 |
-1 |
0 |
1 |
||
-2 |
-1 |
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
||
2 |
3 |
4 |
5 |
8 |
9 |
10 |
11 |
12 |
13 |
||
6 |
7 |
8 |
9 |
14 |
15 |
16 |
17 |
18 |
19 |
Для перевірки вірності обчислення програмою суми елементів в заданому інтервалі від 5 до 12 матриці Х, виконаємо підрахунок виділених елементів для цієї матриці:
перевірочне обчислення:
(–6) + (–5) + (–4) + (–3) + (–2) + (–1) + 0 + 1 = –20
кількість елементів: 1 2 3 4 5 6 7 8
результат обчислення програми:
Сума елементiв матpицi X в iнтеpвалi вiд 5 до 12 доpiвнює -20.00
Кiлькiсть обчислених елементiв доpiвнює 8
Як ми можемо бачити, результати ідентичні, а це свідчить про те, що програма обробила вхідні дані вірно і видала вірну відповідь на обидва запитання в обох матрицях (масивах).
Вищевикладене може обгрунтовано свідчити про те, що програма виконана вірно.
Опис формату підпрограми процедури
Підпрограма процедура так же, як і функція, використовується якщо в програмі виявляються однотипові ділянки, які виконують ті ж самі обчислення, але з різними даними.
Структура процедури така ж, як і структура основної програми, тобто включає заголовок і блок. В свою чергу блок складається із розділу операторів.
Опис процедури має вигляд:
Procedure ім`я (формальні_параметри);
розділ описів
begin
розділ операторів
end;
і розміщується в основній програмі (program) в розділі описів.
Тут ім`я – ім`я процедури. Розділ описів, як і в основній програмі, включає розділи label, const, type, var і розділ процедур та функцій.
Параметри процедур можуть бути трьох видів:
1) параметри-значення (вхідні параметри);
2) параметри-перемінні (вихідні параметри);
3) параметри процедурного типу.
Опис вхідних параметрів процедури в списку формальних параметрів має такий вигляд:
список_перемінних1:тип1; список_перемінних2:тип2; …
Відповідно опис вихідних параметрів виглядає так:
var список_перемінних1:тип1; var список_перемінних2:тип2; …
В Турбо-Паскалі допускається також використання нетипізованих вихідних параметрів, які мають вигляд:
var список_перемінних
Виклик процедури в основній програмі відбувається оператором виду:
ім`я_процедури (фактичні_параметри);
Формальні і фактичні параметри процедури
Формальні параметри мають вигляд списку перемінних із указуванням їх типу, які відділяються один від одного крапкою з комою. Ці перемінні не описуються в розділі опису процедур. Допускається використання процедур без списку перемінних.
При виклику процедури в основній програмі, задаються параметри, які являють собою фактичні параметри, які перелічені через кому (без вказівки їх типу). Між формальними і фактичними параметрами повинна бути відповідність по кількості параметрів, порядку їх слідування і типу даних. Імена відповідних параметрів можуть бути однаковими або різними.
Вхідними фактичними параметрами можуть бути константи, перемінні і вирази. Вихідними фактичними параметрами можуть бути тільки перемінні.
Опис використаних в програмах операторів
Program |
заголовок програми, в якому вказується ім`я програми (утворюється так, як і імена перемінних). |
Uses |
слугує для використання модулів в програмі. |
Crt |
стандартний модуль Турбо-Паскаля, який підтримує текстовий режим і дозволяє задавати колір фону чи шрифту, є константи для організації прямої адресації відео пам`яті (DirectVideo:boolen), встановлення яскравості світіння виведених на екран символів (LowVideo, NormVideo, HighVideo), очищення активного вікна і встановлення курсору в верхній лівий кут (ClrScr) та інше. |
Const |
розділ констант – якщо в програмі використовуються константи, які мають достатньо громіздкий запис, або змінні константи (для різних варіантів програми). |
Type |
опис імен типів перемінних, які відрізняються від стандартних, тобто перемінні типу “перечислення”, обмежені перемінні, масиви і т.д. |
Var |
розділ, в якому описуються всі перемінні, які зустрічаються в програмі. |
Procedure |
оператор підпрограми-процедури (описаний вище). |
Function |
оператор підпрограми-функції (описаний вище). |
Read |
оператор вводу - кожне введене значення послідовно присвоюєтьсяперемінним із списку: Read (список_перемінних); |
ReadLn |
те ж, що і попередній оператор, тільки після
введення даних відбувається перехід на нову строку (тобто наступний оператор
введення буде вводити дані з нової строки), а якщо оператор записується без
вказування перемінної, то відбувається перехід на наступну строку без вводу
даних, достатньо тільки натиснути клавішу |
Write |
оператор виводу – виводить послідовно значення перемінних із списку, або виводить текст, занесений в одинарні лапки: Write (список_перемінних,’текст’); |
WriteLn |
те ж саме, що і попередній оператор, але після виводу перемінних здійснюється перехід на нову строку (наступний оператор виводу буде виводити дані з початку нової строки), а якщо оператор записується без вказування перемінної або тексту, то відбувається перехід на нову строку без виводу даних. |
:= |
оператор присвоювання – імені перемінної присвоюється конкретний вираз: ім`я_перемінної := вираз; |
For |
оператор циклу, який має загальний вигляд: for I:=N1 to N2 do оператор; тут I – перемінна циклу; N1, N2 – початкове і кінцеве значення перемінної циклу. В якості перемінної типу І можна використовувати тільки просту перемінну, а в якості N1, N2 можуть використовуватися вирази (за виключенням речовинного типу real). |
If |
оператор умовного переходу, який має загальний вигляд: if логічний_вираз then оператор_1 [else оператор_2]; тут квадратні дужки означають, що конструкція else з оператором 2 може бути відсутня. Перед else крапка з комою не ставиться. Оператор 1,2 – це прості або складені оператори. Якщо логічний вираз істинний, то виконується оператор 1, інакше – оператор 2 (або наступний за if оператор, якщо else відсутнє). В якості операторів 1,2 можуть бути використані інші оператори if, в цьому випадку кожне else відноситься до найближчого зліва if, який не має else. |
Begin |
з цього ключового слова починається частина програми розділу операторів (починається розділ, або ж вцілому програма). |
End |
цим ключовим словом закінчується частина програми розділу операторів (закінчується розділ, або ж вцілому програма). |
Використана література
1.«Borland Pascal 7.0»: Резидентная программа-справочник. Москва: ПО «Object Windows +», 1993.
2.«Турбо-Паскаль 5.0»: Руководство пользователя. Калинин: НПО «Центрпрограммсистем», 1990.
3.Офицеров Д.В., Старых В.А. «Программирование в интегрированной среде Турбо-Паскаль»: Справ. пособие. – Мн.: Беларусь, 1992. – 240 с.: ил.
4.Перминов О.Н. «Программирование на языке Паскаль», М.: «Радио и связь», 1988.
5.Довідкова система по мовам програмування – електронна версія.
|