Программирование и алгоритмические языки

Міністерство освіти і науки України

Сумський державний університет

Кафедра «Моделювання складних систем»

КУРСОВА РОБОТА

з предмету «Програмування

і алгоритмічні мови»

на тему «Використання підпрограм»

Виконав студент

Коваль Є.В.

Група

ЕСЗТ-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)     зменшити об`єм використовуваної пам`яті ЕОМ;
3)     скоротити час налагодження, тому що програмування і налагодження основної програми і підпрограми можуть виконувати паралельно різні програмісти.

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

1)     розташований безпосередньо в розділі опису основної програми;

2)     записаний у окремий файл і вставлений в розділ описів основної програми за допомогою директиви компілятору:

{$I ім`я_файлу}

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

unit ім`я модуля

interface

uses список_використовуваних_модулів

  {Відкриті оголошення}

implementation

uses список_використовуваних_модулів

  {Власні оголошення}

  {Процедури та функції}

begin … end.

ЗАВДАННЯ 1

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

Обчислити суми елементів нижніх трикутних матриць для матриць А(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

те ж, що і попередній оператор, тільки після введення даних відбувається перехід на нову строку (тобто наступний оператор введення буде вводити дані з нової строки), а якщо оператор записується без вказування перемінної, то відбувається перехід на наступну строку без вводу даних, достатньо тільки натиснути клавішу <Enter>.

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.    Довідкова система по мовам програмування – електронна версія.