Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

ОТ Методичка

.pdf
Скачиваний:
7
Добавлен:
17.03.2016
Размер:
618.24 Кб
Скачать

Короткі теоретичні відомості

Масив – це сукупність даних одного типу, об’єднаних однією назвою. Приклади масивів з навколишнього світу: вулиця з будинками, де будинки є елементами масиву, колона автомобілів, шафа з книжками тощо.

Масив (структура даних) об’єднаних однією назвою, що комп’ютера та впорядковані за називають індексами.

– це сукупність даних одного типу, зберігаються в одному місці пам’яті номерами комірок. Номера комірок

Загальний опис одновимірного масиву (вектор, лінійний масив):

type

tArray=array[<п_індекс>..<к_індекс>] of <тип_елементів>;

Або

var

A : array[<п_індекс>..<к_індекс>] of <тип_елементів>;

<п_індекс> та <к_індекс> відповідно початковий індекс масиву та кінцевий індекс масиву. Початковий та кінцевий індекси масиву можуть бути любими константи будьякого порядкового типу. <тип_елементів> - будьякий тип даних, стандартний або описаний раніше. Доступ до елементів масиву можна отримати за допомогою опретаора індексу – квдратних дужок: [<індекс>], де <індекс> значення тогож типу що і межі масиву вказані при його описі, при чому значення індекса елемента повинно бути в межах від початковї до кінцевю межі включно. В прикладі наведено опис одновимірного масиву цілого типу, що заповнюється випадковими числами та вміст масиву виводиться на екран:

program vector_example;

 

uses

 

crt;

 

const

 

n=5;

{ Кількість елементів в масиві }

var

 

A : array[1..n] of integer;

{ Опис масиву }

i:integer;

{ Ііндекс елемента масиву }

BEGIN

 

clrscr;

 

randomize;

 

for i:=1 to n do

{ Заповнюємо масив }

A[i]:=random(90)+10;

 

writeln(‘Array A:’);

 

for i:=1 to n do

{ Виводимо на друк елементи масиву }

writeln(‘ A[‘,I,’]=’,A[i]);

 

readln;

 

END.

 

 

 

Turbo Pascal дозволяє описувати масиви різної розмірності. На рис 5.1 представлено геометричну інтерпритацю одно-, двота тривимірних масивів:

Одновимірний масив «Вектор»

Двовимірний масив «Матриця». Складається з сукупності векторів

Тривимірний масив. Форма паралелепіпеда.

Зрізом паралелепіпеда є матриця

Рис 5.1. Геометричне представлення масивів.

В загальному вигляді багатовимірні масиви описуються в такий спосіб:

type

tArrayN=array[<пм1>..<км1>, <пм2><км2>,…,<пмN><кмN>] of <тип_елементів>;

Або

var

A_N : array[<пм1>..<км1>, <пм2><км2>,…,<пмN><кмN>] of <тип_елементів>;

Де <пм>,<км> - початковий та кінцевий індекси відповідного виміру. Розглянемо приклад чотиривимірного масиву:

var

A_4 : array[1..3, 2..3, 4..10, -10..0] of byte; BEGIN

A_4[2, 2, 5, -5]:=5; END.

Слід зазначити, що Turbo Pascal виявляє помилку виходу індексу за межі масиву тільки, коли у якості індексу використовується константа. Якщо індексом є змінна то помилка виявлена не буде і у більшості випадків програма працюватиме далі. Така прихована помилка може призвести до неоднозначних результатів роботи програми або до «дивної поведінки» програми.

Розглянемо роботу оператора індексу масиву. В загальному випадку ім’я масиву це адреса першого елемента масиву в пам’яті. Для доступу до чергового елемента масиву використовується така формула:

<адреса_елемента>=<адреса_масиву>+<індекс>*<розмір_типу_елементів>

Де <адреса_масиву> - адреса першого елемента масиву, <індекс> - значення індексу елемента, <розмір_типу_елементів> - розмір у байтах типу елементів, наприклад, якщо елементи масиву мають тип REAL, то розмір типу буде 6 байт. Така формула працює, оскільки елементи масиву розташовуються послідовно у пам’яті. Якщо індекс елементу масиву буде за межами масиву, то за формулою буде отримана адреса комірки, котра не належить масиву і програма зможе читати і записувати дані у цю комірку, в

то й же час ця комірка може належати іншій змінній або декількох байт, що належить іншій змінній будуть змінені.

У внутрішньому представленні масиву, перший елемент має завжди індекс 0, а останній N-1, де N довжина масиву. Turbo Pascal дозволяє задавати будь які межі для зручності програміста, але в пам’яті комп’ютера завжди представляє масив з межами 0 та N-1.

Багатовимірні масиви можна індексувати багатьма способами. Наприклад способи індексації тривимірного масиву:

A[1,1,1] := 1;

A[1,1][1]:=2;

A[1][1,1]:=3;

A[1][1][1]:=4;

Масиви також можна описувати у розділі констант: масив-константа. Розглянемо приклад однота двовимірних масивів констант.

const n=5

A_1 : array[1..n] of integer=( 1, 2, 3, 4, 5 ); A_2 : array[1..n, 1..n] of integer=(

( 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 ) );

Потрібно зауважити, що елементи масиву та ідентифікатор масиву не є константами, і можуть буди змінені під час роботи програми.

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

Type

tArray=array[1..5] of integer;

Var

A : array[1..5] of integer;

B,C:array[1..5] of integer;

D,E:tArray;

F:tArray;

У даному прикладі усі змінні начебто описують однаковий масив, але

змінні A, B, D матимуть різний тип даних і тому не можна бути виконати між ними операцію присвоєння. Наприклад:

A:=B;

{Помилка! A та B мають різний тип даних}

D:=A;

{Помилка! D та A мають різний тип даних}

 

 

Змінні B і C матимуть один тип даних. Змінні D, E та F також будуть одного типу.

Контрольні питання

1.Що таке масив?

2.Наведіть приклад масиву.

3.Що таке індекс масиву?

4.Яким чином задається розмірність масиву?

5.Як масив представляється у пам’яті комп’ютера?

6.Наведіть приклад об’явлення одно-, дво-, троьхвимірного масивів.

7.Якими способами можливо виконати індексацію троьх-вимірного масиву?

8.Як можна геометрично представити одно-, дво-, троьхвимірні масиви?

9.Як роздрукувати масив на екран?

10.Чи можна змінну типу масив присвоїти іншій змінній того ж типу? 11.Чи може бути елементом масиву інший масив?

12.Яка різниця між масивом-вектором і масивом-матрицею?

13.Що буде, якщо програма випадково вийде за межі масиву? 14.Як задати масив-константу? Наведіть приклад.

15.Написати програму. Умову і вимоги до задачі надає викладач.

Лабораторна робота №6

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

Мета

Мати поняття функції та процедури. Розрізняти функції та процедури між собою. Мати поняття про область видимості змінних, про локальні та глобальні змінні. Вміти використовувати процедури та функції для вирішення задач.

Хід роботи

Розв’язати задачу з обов’язковим використанням як мінімум двох процедур та двох функцій в межах програми. Заборонено використовувати функції exp та ln, окрім випадків зазначених в завданні.

1. Обчислити значення функції:

Для значень х, розташованих на інтервалі [a;b] з кроком s,

,

.

Роздрукувати таблицю значень x та y. Передбачити ділення,

на 0.

Кількість інтервалів, межі інтервалів та крок для кожного інтервалу задає користувач.

2.Визначити максимальний елемент серед трьох масивів розмірами NxN

3.Обчислити значення виразу:

Де

– кількість нульових елементів в одновимірних масивах

довжиною, ,

N.

4. Обчислити значення виразу:

Де

,

,

– максимальні елементи в масивів A, B, C.

,– мінімальні елементи масивів A,C.

5.Визначити середнє арифметичне масивів A,B,C розміром NxN.

6.Обчислити значення виразу:

!

! ! √ !

7.Зробити дзеркальне відображення одновимірних масивів A,B,C. Масиви різної довжини.

8.Зробити дзеркальне відображення відносно побічної діагоналі в масивах A, B, C. Розмір масивів NxN.

9.Поміняти місцями мінімальний та максимальний елементи в одновимірних масивах A, B, C. Розмір масивів різний.

10.Обчислити значення виразу:

! !

11.Знайти перших десять членів послідовності, яка задана формулою. :

,

12.Знайти максимальне значення серед елементів трьох одновимірних масивів. Масиви різної довжини.

13.Обчислити значення виразу:

!,

14.Визначити суму усіх елементів, суму елементів побічної діагоналі, суму елементів головної діагоналі матриць A,B,C,D. Розмір масивів різний.

Відшукати значення функції для всіх

 

: , .

, .

, . , ,

,

15.якщо початкова інформація задана таблицею.

 

 

x

 

0

2

4

6

 

 

8

10

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

y

 

1.76

4.89

10.21

8.43

 

15.6

21.09

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Відомо, що:

 

 

 

 

 

,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

16.Дана множина точок координатної площини у вигляді двох одновимірних масивів X та Y. Віднайти найдовший та найкоротший відрізок.

17.Обчислити значення виразу:

!

,

,

18.Визначити середнє геометричне трьох одновимірних масивів. Вибрати з отриманих значень найменше.

19.Відшукати кількість входжень заданого числа до масиву. Підрахунок потрібно виконати для трьох двовимірних масивів. Результати роздрукувати у вигляді таблиці. Передбачити можливість підрахунку входжень нового числа по вже заданим масивам.

20.Розкласти задане ціле число на прості множники. Множники зберегти у масиві.

21.Обчислити значення виразу:

, ,

22.Дана множина точок координатної площини у вигляді двох одновимірних масивів. Віднайти усі точки, які утворюють

прямокутний трикутник. Роздрукувати координати точок для кожного трикутника окремо.

23.Дано три одновимірних масиви однакової довжини. Замінити всі нульові елементи у масивах на найбільший за модулем елемент серед трьох масивів.

24.Дано три масиви цілих чисел однакової довжини. Для кожного масиву підрахувати кількість чисел-перевертишів. Роздрукувати ці числа та їх позиції у масиві.

25.Обчислити значення виразу:

!, ,

Короткі теоретичні відомості

Контрольні питання

1.Що таке функція?

2.Що таке процедура?

3.Які розділи можна використовувати в процедурах та функціях?

4.Яка різниця між процедурою та функцією?

5.Для чого використовуються процедури та функції?

6.Який оператор обов’язково повинен бути в тілі функції?

7.Чи можна використовувати назву функцію у тілі функції у якості змінної? Якщо можливо то як саме?

8.Що таке формальні параметри?

9.Що таке фактичні параметри?

10.Яка відмінність між формальними та фактичними параметрами?

11.Що таке область видимості змінних?

12.Що таке глобальні і локальні змінні?

13.Які змінні є глобальними відносно блоку програмного коду? 14.Які змінні є локальними відносно блоку програмного коду?