Б С Бусигін - Прикладна інформатика - страница 40

Страницы:
1  2  3  4  5  6  7  8  9  10  11  12  13  14  15  16  17  18  19  20  21  22  23  24  25  26  27  28  29  30  31  32  33  34  35  36  37  38  39  40  41  42  43  44  45  46  47  48  49  50  51  52  53  54  55  56  57  58  59  60  61  62  63  64  65  66  67  68  69  70  71  72  73  74  75  76  77  78  79  80  81  82  83 

Program Main2 ; Var

GLOB1, GLOB2:Integer;

Begin

PP7(4, GLOB1 { GLOB1 приймає значення 36} End.

{окремо відкомпільована підпрограма РР7}

Procedure PP7(PAR1:Integer; var PAR2 : integer); Begin

PAR2   := sqr   (PAR1 + 2); End;пам'ять

Рис. 8.59. Виклик процедури, що откомпільована окремо і розташована у

модулі

Розглянемо приклад взаємодії об'єктів у програмах, процедурах та функціях при різних комбінаціях передачі до підпрограм даних у вигляді глобальних і фактичних параметрів. Для цього розглянемо таку задачу.

Реалізувати у вигляді процедури і функції обчислення за наступною

х + у2

формулою: 2 = / (х, у) =-— (8.14).

а + Ь

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

25 Модуль - програма, яка розглядається як окреме ціле у процесах збереження, трансляції та об'єднання з іншими програмними модулями при їх завантаженні у оперативну пам'ять комп'ютера

(параметр-змінна). У наступному прикладі обчислені за допомогою різних підпрограм значення вищенаведеної формули заносяться у змінні Z1, Z2, ... Z6. Зверніть увагу на процедуру P2 та функцію F5 що сконструйовані взагалі без формальних параметрів (рис. 8.60).

Program FXY;

const a=3.4, b=-7.3Q2;

var

x, y,

Zl,   Z2,   Z3,   Z4,   Z5,   Z6  : real;

{ Процедура Р1 спроектована з параметрами. Усі дані уводяться}

{ як параметри-значення, а результат виводиться через параметр-змінну yy}

Procedure Pl(xl,  yl,  al,  bl  :  real;  var yy :real); begin yy:=(xl+sqr(yl))/(a+b) end;

{ Процедура Р2  без  параметрів.  Використовуються  глобальні змінні} {програми FXY - x,y,a,b, а результат повертається через змінну Z2 }

Procedure P2;  begin Z2:=(x+sqr(y)/(a+b)); end;

{Процедура Р3 з одним параметром-змінною zz, через яку у головну програму FXY повертається обчислене за формулою значення }

Procedure P3   (var zz  : real);

begin zz  :=   (x+y*y)/(a+b); end;

{Функція F4 з чотирма параметрами-значеннями. Результат обчислення за формулою повертається через ім'я функції F4 }

Function F4(x2,y2,a2,b2   : real):real;

begin F4   :=   (x2+sqr(y2))/(a2 +b2); end;

{Функція F5 без параметрів. Використовуються глобальні змінні програми. А через які саме? }

Function F5:real;  begin F5:=(x+sqr(y))/(a+b); end;

{Функція   F6   з  двома  параметрами-значеннями,  через  котрі  до неї передаються значення змінних x та y }

Function F6(xx,  yy :real):real;

begin F6:=(xx+yy*yy)/(a+b); end;

Рис. 8.60. Програма опису функцій по різному { продовження програми рис. 8.60 на наступному листі }

{}

Begin

P1(4.1,2.56,-3.1,4.6,Z1);

Z3:=F4(3,7,2,61);

{ А} { Б}

Writeln('Vvedite x,y:'); readln(x,y);

P2;

P3(Z4); Z5:=F5;

Z6:=F6(Z4-2.5*Z5, ln(Z1/Z2)); Writeln(Z1,   Z2,   Z3,   Z4,   Z5, Z6);

Readln;

End.

Рисунок 8.60. Приклади реалізації обчислення формули (8.14) за допомогою різних варіантів конструювання підпрограм

Програма на рисунку 8.60 дозволяє відповісти на дуже цікаве запитання: Чи

можливо на початку виконання програми FXY визвати будь-яку процедуру чи функцію з вищеописаних, якщо змінні а, Ь, х, у, що визначають обчислення за формулою (8.14) ще не ініціалізовані (тобто у них не уведені початкові значення)?

Стрічки А та Б на другій частині рисунку 8.60 дають позитивну відповідь на це запитання. Так, це можливо зробити, якщо звертатися до деяких процедур і функцій фактичними параметрами за значеннями, які є константами (дивись звертання до процедури Р1 та функції Б4 у стрічках А та Б).

Вправи

1. Написати   функцію   для   обчислення   знака   числа   по формулі:

Гі,х> 0

2. Обчислити наступні вирази: БІ§п(а*Ь), ві§п(а/Ь), Бі§п(-Ь), Бі§п(-а), скориставшись функцією, що була написана для попереднього прикладу.

3. Написати функцію для обчислення суми цифр тризначного натурального числа. Обчислити суму цифр для чисел від 100 до 120.

4. Написати   функцію   для   обчислення   факторіалу п!=1*2*3*...*п.

Обчислити факторіали чисел від 1 до 7.

sign(x)

-1,x<0

5. Написати функцію для зведення числа х у ступінь т (т -натуральне число). Обчислити х3, х4, х5.

6. Написати функцію для обчислення арксинуса. Обчислити агсвіп(0.9), агсвіп(0.1), агсвіп(--0.9), агсБІп(0.99). Для обчислень скористатися формулою:

х

агсап(х) = агС§

И1 - х 1

7. Для пунктів 1-6 написати ті ж алгоритми, тільки у виді процедур.

8. Написати програму обчислення визначених інтегралів за формулою трапеції

г         Ь - а   ( у 0 + у п \ уЛс =--Г °        + Уі + У2 + ... Уп

п

для наступних виразів:

2

а)

1 + х

Ь)

1п + х)

1 + х2

с)

БІП X

СІ)

Є

9. Написати підпрограми обчислення визначених інтегралів за допомогою формули трапеції для функцій а-сі з точністю близько є = 0.00001.

1

2

X

8.23. Робота з масивами. Приклади багатовимірних масивів

У лінійній алгебрі та інших розділах математики існує велика кількість задач, пов'язаних з використанням матриць. Як Ви знаєте, матрицею називається  сукупність  чисел аі]-,  розташованих у вигляді прямокутної

ґа~п аі2  ■  ■  ■ аіт~^\

таблиці26:

де аіу- - елементи матриці.

Індекси і та і означають, що елемент а у розташований на перетинанні (рос. - пересечении) і-го рядку тау-го стовпця матриці. Якщо матриця має п рядків та т стовпців, то вона називається матрицею розміру пх т. Матриця називається квадратною матрицею порядку п , якщо п= т. При т матриця називається прямокутною. Прямокутна матриця розміру пх 1, яка складається з одного стовпця

СС2

ап1

називається вектор-стовпцем. А прямокутна матриця розміру 1х т, яка складається з одного рядка

в в '-0т

називається вектор-рядком. Для роботи з матрицями у Турбо Паскалі існує структура даних під назвою масив.

8.23.1. Опис масивів у програмі

Масив - це регулярна структура (послідовність) однотипних даних, що оголошується спеціальною конструкцією мови ТП:

Воеводин В.В., Кузнецов Ю.А. Матрицы и вычисления. - М.: Наука. Главная редакция физико-математической литературы, 1984. - 320 с.

Array  [<ДіапазониІндексів>]  of <ТипКомпонентів>;

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

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

Var

Vector  : Array  [1..3]  of Real; {одномірний масив Vector,

аналог вектор-стовпців та вектор-рядків}

Matrix   :  Array   [1..3,1..3]   of  Real; {двовимірний масив

Matrix, аналог матриці}

Таким чином, ми оголошуємо дві структури: Vector - з трьох значень типу Real, проіндексованих заданим діапазоном цілих чисел:

Vector[1], Vector[2], Vector[3]

та Matrix - з дев'яти значень типу Real, проіндексованих заданим діапазоном цілих чисел (так вони і зберігаються у пам'яті комп'ютера):

Matrix[1,1], Matrix[1,2],Matrix[1,3], Matrix[2,1], Matrix[2,2],Matrix[2,3], Matrix[3,1], Matrix[3,2],Matrix[3,3],

що відповідає матриці виду:

a2l

^a3l a33

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

Цей факт дозволяє використовувати масиви для проведення обчислень з використанням матриць і не тільки. Але Ви повинні знати деякі тонкощі роботи з масивами у ТП.

Якщо індексація елементів задається числовим діапазоном, то необхідно дотримуватись лише двох вимог:

- <ДіапазониІндексів> не може мати тип LongInt. Тобто він повинен "уміщатися" максимум у типі Word і таким чином мати значення не більше 65535;

- добуток кількості компонентів масиву на розмір компонентів у байтах не може перевищувати 65520 байт « 64Кбайт.

У рамках можливостей опису структур даних ТП можна використати такі конструкції:

Var

A і Array  [9..99]  of Char; {Масив A з 91-го символьного елемента} B і Array  [1..100]  of Boolean; {Масив B зі 100-а елементів

булівського типу} C і Array  [-10..10]  of LongInt; {Масив C з 21 -го числового

елемента, тому ж не вимагає приведення індексів до діапазону 1..N (як у мові Фортран) або 0..N (як у мові С)}

Більш того, аби який зі структурованих типів (до яких у ТП відносяться: масиви, записи, множини (рос.-множества) і файли) може бути описаний за допомогою службового слова Type. Наприклад, попередній опис трьох масивів за його допомогою може бути виконано так.

Typ

e

 

 

R і

Array

[9..

99] of Char;

S і

Array

[1..

100] of Boolean;

T і

Array

[-10

..10]  of LongInt;

U і

Array

[0..

20]   of LongInt;

Var

 

 

 

А : R; {Масив А з 91-го символьного елемента)

В :  S; {Масив B зі 100-а елементів булівського типу)

C : T; {Масив C з 21-го числового елемента)

D : T of S; {Двовимірний масив D з 21 х 21 числових елементів) E : Array [-10..10] of Array [1..100] of Array [-10..10]  of Real; {Тривимірний масив Е (самі уявіть собі його структуру!)

У цьому опису у змінних (R, S, T і U) уявляються "форми" завдання існування тих чи інших структур даних (тобто набори послідовностей

299компонентів різних типів). А потім у операторі Var вони використовуються для визначення ідентифікаторів масивів для обробки їх у програмі. Треба чітко розуміти різницю поміж цими двома службовими словами (Type і Var). Отже, Type завдає тільки форму уявлення послідовностей компонентів різних типів даних у майбутніх структурах масивів. А службове слово Var призводить до розміщення описаних у ньому масивів даних у пам'яті комп'ютера. Це значить, що після обробки середовищем ТП першого рядку (Var A і R;) у пам'яті ПК буде виділено рівно 90 байтів для розміщення 90 компонентів (змінних) типу Char (тобто символів).

Страницы:
1  2  3  4  5  6  7  8  9  10  11  12  13  14  15  16  17  18  19  20  21  22  23  24  25  26  27  28  29  30  31  32  33  34  35  36  37  38  39  40  41  42  43  44  45  46  47  48  49  50  51  52  53  54  55  56  57  58  59  60  61  62  63  64  65  66  67  68  69  70  71  72  73  74  75  76  77  78  79  80  81  82  83 


Похожие статьи

Б С Бусигін - Прикладна інформатика