Студопедия
Главная страница | Контакты | Случайная страница

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Опис типу. Масив (array) – це скінченний набір елементів одного (базового) типу, які зберігаються в послідовно розташованих комірках оперативної памя’ті і мають спільну

Масив (array) – це скінченний набір елементів одного (базового) типу, які зберігаються в послідовно розташованих комірках оперативної памя’ті і мають спільну назву.

У математиці поняттю масив відповідають поняття вектор та матриці. Розрізняють одно- та багатовимірні масиви. Двовимірний масив даних – це таблиця, що складається з декількох рядків.

Загальний вигляд конструкції опису типу масиву такий:

array [<розмір>] of <назва базового типу>;

Розмір (кількість елементів) масиву найчастіше задають у вигляді діапазону або назви деякого перерахованого типу даних, ця кількість фіксується при описі і в процесі виконання програми не міняється [1, 2].

Описати масив можна у розділі опису типів type, у розділі констант const, або у розділі оголошення змінних var. Назви типів масивів і змінних-масивів придумує користувач [2].

Доступ до кожного окремого елемента здійснюється шляхом індексациї елементів масиву. Індекси масиву рівні поняттю індекс елемента вектора [1].

Приклади опису масиву: 1) опис типу масивів (назва типу mymasyv), 2) оголошення сталого масиву (масиву-константи) vydatky типу mymasyv і 3) оголошення змінних-масивів а, а1 типу mymasyv та масивів: b (він має 7 елементів цілого типу), с (має 100 елементівсимволів,тобто даних типу char).

type mymasyv= array [ 1.. 10] of real;

day=(mon, tue, wed, the, f ri,sat, sun);

const vydatky: mymasyv =(1.2,1,1,2,18,2.4,8.97,3,7,1.3);

var a,al: mymasyv;

b: array [day] of integer;

c: array [1..100] of char; [1].

Над масивами визначена єдина команда копіювання: а:=а1 – усі значення масиву а1 будуть присвоєні відповідним елементам масиву а. Усі інші операції, наприклад, присвоєння конкретних значень, додавання, множення тощо, визначені лише над елементами масиву.

 

1.2. Дії над масивами

Для роботи з масивом як єдиним цілим використовується ідентифікатор масиву без вказівки індексу в квадратних дужках. Масив може брати участь тільки в операціях відношення "рівно", "не рівно" і в операторі присвоєння. Масиви, що беруть участь в цих діях, повинні бути ідентичні по структурі, тобто мати однакові типи індексів і однакові типи компонентів. Наприклад, якщо масиви А і В описані, як Var А, В: array [1..20] of real; то застосування до них допустимих операцій дасть наступний результат

вираз результат

А = В True, якщо значення кожного елементу масиву А рівне відповідному значенню елемента масиву В.

А < >В True, якщо хоч би одне значення елементу масиву А не рівне значенню відповідному елементу масиву В.

А:= В Всі значення елементів масиву В прирівнюються відповідним елементам масиву А. Значення елементів масиву В залишаються незмінні.

 

1.3. Дії над елементами масиву

Після оголошення масиву кожен його елемент можна обробити, вказавши ідентифікатор (ім'я) масиву і індекс елементу в квадратних дужках. Наприклад, запис Mas[2], vektorZ[10] дозволяє звернутися до другого елементу масиву Mas і десятого елементу масиву vectorZ. При роботі з двовимірним масивом вказуються два індекси, з n -мірним масивом - n індексів. Наприклад, запис MATRU[4,4] робить доступним для обробки значення елементу, що знаходиться в четвертому рядку четвертого стовпця масиву MATRU.

Індексовані елементи масиву називаються індексованими змінними і можуть бути використані так само, як і прості змінні. Наприклад, вони можуть знаходитися у виразах як операнди, використовуватися в операторах for, while, repeat, входити як параметри до операторів read, readln, write, writeln; їм можна присвоювати будь-які значення, відповідні їх типу.

Розглянемо типові ситуації, що виникають при роботі з даними типу array. Для цього опишемо три масиви і чотири допоміжні змінні:

Var A, D: array [1..4] of real;

B: array [1..10,1..15] of integer;

L, J: integer;

K: integer;

S: real;

Ініціалізація масиву полягає в приcвоєнні кожному елементу масиву одного і того ж значення, відповідного базовому типу, найефективніше ця операція виконується за допомогою оператора for:

for I:= 1 to 4 do A[I]:= 0;

для ініціалізації двомірного масиву зазвичай використовується вкладений оператор for:

for I:= 1 to 10 do; for J:= 1 to 15 do B[I, J]:= 0;

Мова Паскаль не має засобів введення-виведення елементів масиву відразу, тому введення і виведення значень проводиться поелементно.

Значення елементам масиву можна присвоїти за допомогою оператора присвоєння, як показано в прикладі ініціалізації, проте найчастіше вони вводяться з екрану за допомогою оператора read або readln з використанням оператора організації циклу for:

for І:=1 to 4 do readln (A[I]);

Значення двомірного масиву вводяться за допомогою вкладеного оператора for:

for I:= 1 to 10 do

for J:= 1 to 15 do readln (B[I, J]);

Аналогічним чином здійснюються вивід значень елементів масиву.

Копіювання масивів називається присвоєнням значення всіх елементів одного масиву всім відповідним елементам другого масиву (аналог операції присвоєння масиву).

Інколи необхідно здійснювати пошук в масиві деяких елементів, що задовільняють певні умови. Наприклад треба з’ясувати скільки елементів масиву А мають нульове значення:

K:=0;

For I:=1 to 4 do

If A[I]=0 then K:=K+1;

Перестановка значень елементів масива відбувається за допомогою змінної тогож типу, що і базовий тип масива. Наприклад треба помінятизначення першого та п’ятого елементів масиву A:

Vs:=A[5];

A[5]:=A[1];

A[1]:=Vs; [1].

 

1.4. Підпрограми

Підпрограми призначені для реалізації алгоритмів опрацювання окремих частин деякої складної задачі. Вони дають змогу реалізовувати концепцію структурного програмування, суть якого полягає в розкладанні складної задачі на послідовність простих підзадач і в складанні для алгоритмів розв'язування кожної підзадачі відповідних підпрограм. Розрізняють два види підпрограм — підпрограми-процедури та підпрограми-функції. Підпрограми поділяються на стандартні та підпрограми користувача. Стандартні підпрограми створювати не потрібно — вони містяться у стандартних модулях System, Crt, Dos, Graph тощо. Підпрограмакористувача — це пойменована група команд, яку створюють і описують в основній програмі в розділах procedure або function і до якої звертаються з будь-якого місця програми потрібну кількість разів.

1.5. Процедури (procedure).

Загальний опис процедури:

procedure <назва> (<список формальних параметрів>);
<розділи описів і оголошень процедури>;
begin

<розділ команд процедури>
end;

У списку формальних параметрів перераховують змінні разом із зазначенням їхніх типів. Розрізняють параметри-аргументи (інший термін: параметри-значення) — вхідні дані для процедури, і параметри-результати (інший термін: параметри-змінні), через які можна повертати результати роботи процедури в основну програму. Перед списками параметрів-результатів кожного типу записують слово var. Зауважимо, що масиви фіксованих розмірів у списках формальних параметрів не можна описувати за допомогою слова array.

Розділи описів і оголошень у підпрограмах мають таку саму структуру як і в основній програмі.

Приклад. Розглянемо процедуру з назвою Сіnа, яка визначає с — вартість k хвилин телефонної розмови з похвилинною оплатою 0.6 грн. + 20% ПДВ.

procedure Cina(k:integer; var c:real);
begin

c:=k*0.6; c:=c+0.2*c;
end;

У наведеному прикладі k є формальним параметром-аргументом, с — формальним параметром-результатом.

До процедури звертаються з розділу команд основної програми або іншої підпрограми. Процедуру викликають за допомогою команди виклику:

<назва процедури> (<список фактичних параметрів>);

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

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

Команда виклику функціонує так: значення фактичних параметрів присвоюються відповідним формальним параметрам процедури, виконується процедура, визначаються параметри-результати, значення яких надаються (повертаються) відповідним фактичним параметрам у команді виклику.

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

Процедури можуть отримувати і повертати значення не тільки через параметри-результати, але й через глобальні змінні. Тому списків параметрів у процедурі може і не бути.

Приклад. Розв'язати задачу про кількість викликів на АТС з попереднього параграфа, використовуючи три процедури: 1) для визначення кількості викликів за кожну секунду (надамо їй назву Kilvykl); 2) для обчислення суми викликів за перші 10 секунд (Sumavykl); 3) для визначення найбільшої кількості викликів за деяку секунду (Maxkilvykl). Використати функцію random.

program ATS1;

uses Crt;

type vyklyk= array [1..10] of integer;

var y:vyklyk; max,s:integer;

procedure Kilvykl(var y:vyklyk); {Процедура Kilvykl визначає}

var i:integer; {кількість викликів кожної секунди}

Begin

for i:=1 to 10 do
begin

y[i]:=random(i);
writeln('y(',i,')=',y[i]:5);
end;
end;
procedure Sumavykl(y:vyklyk; var s:integer); {Процедура

обчислює суму викликів за перші 10 секунд}
var i:integer;
begin

s:=0; for i:=1 to 10 do s:=s+y[i];
writeln('CyMa викликів B=’,s:3);
end;

procedure Maxkilvykl(y:vyklyk; var max:integer);
var irinteger; {Процедура Maxkilvykl визначає}

begin {найбільшу кількість викликів}

max:=y[l]; {за деяку секунду}

for і:=2 to 10 do

if max<y[i] then max:=y[i];

write('Максимальна кількість викликів за одну '};

writeln('секунду дорівнює’тах:3)
end;
begin

clrscr;

randomize;

Kilvykl(y); {Виклик процедури Kilvykl}

Sumavykl(y,s); {Виклик процедури Sumavykl}

Maxkilvykl(y.max); {Виклик процедури Maxkilvykl}

readln
end.

1.6 Функції (function).

Функція, на відміну від процедури, може повертати в місце виклику лише один результат простого стандартного типу.

Загальний опис функції:

function <назва>(<список формальних параметрів>): <тип функції>;

<розділи описів і оголошень функції>;
begin

<розділ команд функції, де має бути така команда:

назва: =вираз>
end;

У розділі команд функції має бути команда присвоєння значення деякого виразу назві функції. Результат функції повертається в основну програму через її назву (як і випадку використання стандартних функцій, таких як sin, cos). Виклик функції здійснюється лише з виразів так:

<назва> (<список фактичних параметрів>).

Приклад. Створимо функцію для обчислення tg(x) та обчислимо значення виразу tg(x)+ctg(x)+tg2(x).
program Myfunc;
uses Crt;
var x,y:real;
function tg(x:real):real;
begin

tg:=sin(x)/cos(x)
end;
begin clrscr;

writeln('Введіть х');
readln(x);

y:=tg(x)+l/tg(x)+sqr(tg(x));
writeln('y=', y:5:2); readln
end.

 

 

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

Частина 1:

1. Обчислити елементи матриці за формулою ­­­­­­­­­­­­­­ ,

(i = 1,2,…,5; j = 1,2,…,5).

 

2. Сформувати вектор Х (х123,…,х5), визначивши суму елементів другого та третього

стовпців матриці.

3. Обчислити значення функції G за формулою.

 

 

Частина 2:

.


3. Алгоритм розв’язання задачі

Частина 1:

 

1 Складемо блок-схему підпрограми обчислення елементів матриці за формулою

, (i = 1,2,…,5; j = 1,2,…,5).

 

 

Вхід

       
   
 
 


і:=1

 


ні так

і >5

j:=1 Вихід

 
 


так ні

j >5

 

i:=i+1 a[i,j]:= ((4+j)/(2+i))*exp((1/4)*ln(i*j))+exp(i-j)

       
 
   
 

 


Вивести a[i,j]

 
 


 

j:=j+1

 

 

 

2. Складемо блок-схему підпрограми формування вектора Х (х123,…,х5), визначити

суму елементів другого та третього стовпців матриці.

 

 

 

Вхід

 
 


і:=1

 
 


ні так

і >5

 

x [i]:=0 Вихід

 
 

 


j:=2

 
 

 


так ні

j >3

 

Вивести(‘Suma x [‘,i,’]=’,x [i]) x [i]:= x [i]+a[i,j]

       
 
   

 


j: = j+1

 
 

 

3. Складемо блок-схему підпрограми обчислення значення функції G за формулою

.

Вхід

 

G: =1

 
 


i: =1

 
 


ні так

i >5

P: =1 Вивести (‘G=’,G)

 
 


k: =1 Вихід

 
 

 


так ні

k>i

G:=G*(x [i] – i *i *i / P) P: = P +x [k]*k

       
   


i:=i+1 k: =k+1

 

       
   

 

 

4. Загальний алгоритм масиву

 

Початок

 
 


Використовую

підпрограму-процедуру:

Masiv(a)

 
 

 


Використовую

підпрограму-процедуру:

Suma (A,X)

 
 


Використовую

підпрограму-процедуру:

Funk (X,G)

Кінець


4. Програмні реалізації алгоритму

Частина 1:

Текст підпрограм:

1. Підпрограма – процедура обчислення елементів матриці за формулою

, (i = 1,2,…,5; j = 1,2,…,5).

 

PROCEDURE MASIV (VAR A: ARR);

VAR I, J: INTEGER;

BEGIN

FOR I: = 1 TO 5 DO

BEGIN

FOR J: = 1 TO 5 DO

BEGIN

A [I, J]: =((4 + J) / (2 + I)) * ((1 / 4) * LN (I * J)) + EXP (I – J);

write (‘ A [‘, I, ’, ’, J, ‘] = ‘, A [ I, J]: 5: 2, ‘ ‘);

END;

WRITELN;

END;

END;

 

2. Підпрограма – процедура обчислення вектора Х (х123,…,х5), визначити

суму елементів другого та третього стовпців матриці.

 

PROCEDURE SUMA (A: ARR, VAR X: XRR);

VAR I, J: INTEGER;

BEGIN

FOR I: = 1 TO 5 DO

BEGIN

X [ I ]: = A [ I, 2 ] + A [ I, 3 ];

WRITELN (‘ SUMA X [ ‘, I, ‘ ] = ‘, X [ I ]);

END;

END;

 

3. Підпрограма – процедура обчислення функції G за формулою

.

 

PROCEDURE FUNC (X: XRR, VAR G: REAL);

VAR I, K: INTEGER; P: REAL;

BEGIN

G: =1;

FOR I: = 1 TO 5 DO

BEGIN

P: = 0;

FOR K: = 1 TO I DO

P: = P + X [ K ] * K;

G: = G * (X [ I ] – I * I * I / P);

END;

WRITELN (‘ G = ‘, G);

END;


Текст програми:

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

PROGRAM KURSOVA;

USES CRT;

TYPE ARR = ARRAY [ 1.. 5, 1.. 5] OF REAL; опис типу для матриці

XRR = ARRAY [ 1.. 5 ] OF REAL;

 
 


VAR A: ARR;

X: XRR; опис глобальних змінних програми

P, G: REAL;

K, I, J: INTEGER;

 
 


PROCEDURE MASIV (VAR A: ARR); Процедура формування

VAR I, J: INTEGER; матриці елементи, якої

BEGIN визначається за

FOR I: = 1 TO 5 DO формулою

BEGIN

FOR J: = 1 TO 5 DO

BEGIN

A [I, J]: =((4 + J) / (2 + I)) * ((1 / 4) * LN (I * J)) + EXP (I – J);

write (‘ A [‘, I, ’, ’, J, ‘] = ‘, A [ I, J]: 5: 2, ‘ ‘);

END;

WRITELN;

END;

END;

 
 


PROCEDURE SUMA (A: ARR, VAR X: XRR);

VAR I, J: INTEGER;

BEGIN Процедура

FOR I: = 1 TO 5 DO формування

BEGIN вектора

X [ I ]: = A [ I,2 ] + A [ I,3 ];

WRITELN (‘ SUMA X [ ‘, I, ‘ ] = ‘, X [ I ]);

END;

END;

 
 


PROCEDURE FUNC (X: XRR, VAR G: REAL);

VAR I, K: INTEGER; P: REAL;

BEGIN

G: =1;

FOR I: = 1 TO 5 DO Процедура

BEGIN обчислення

P: = 0; функції G

FOR K: = 1 TO I DO

P: = P + X [ K ] * K;

G: = G * (X [ I ] – I * I * I / P);

END;

WRITELN (‘ G = ‘, G);

END;

 

 

BEGIN

CLRSCR;

MASIV (A); Виконавча

SUMA (A, X); частина

FUNC (X, G); програми

END.

 

 




Дата добавления: 2015-01-29; просмотров: 123 | Поможем написать вашу работу | Нарушение авторских прав




lektsii.net - Лекции.Нет - 2014-2025 год. (0.071 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав