Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
на захист / informatika1.doc
Скачиваний:
53
Добавлен:
22.02.2016
Размер:
1.14 Mб
Скачать

2. Функції.

В мові Pascal крім процедур використовуються підпрограми-функції. Звернення до функції призводить до обчислення її значення - об’єкту типу real, integer або char. Тип значення функції фіксується в описі функції.

Якщо значення деякої функції має тип real або integer, то спосіб її застосування аналогічний способу застосування стандартних функцій (sin, cos, ln та iн.). Якщо ж значення деякої функції має тип char, то ця функція може бути використана у програмі нарівні з конкретним символом, узятим в апострофи.

Заголовок функції починається службовим словом function i має вигляд:

function <ім’я функції> (список параметрiв): <тип значення>;.

Ім'я функції - це ідентифікатор. У списку формальних параметрів перераховуються імена формальних параметрів, що є аргументами, та зазначаються їх типи. Список може містити декілька груп параметрів. Якщо груп декілька, то вони відмежовуються між собою крапкою з комою ';'.

Наприклад :

function f (x:real;y:integer) : integer;

function log (var a, x : real) : real;

function litera (p : integer) : char;

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

Відмінною особливістю виконавчої частини функції є те, що в ній обов'язково повинен входити оператор присвоєння, в якому ліворуч від знаку присвоєння ':=' стоїть ім'я функції, тобто:

<iмя функцiї>:=<вираз>;.

Це присвоєння визначає значення функції.

Щодо параметрів функції існує повна аналогія з параметрами процедур. Описи функцій розташуються в програмі після опису всіх змінних основної програми.

Приклад 2. Послідовно з’єднані резистор із металевого дроту та напівпровідниковий резистор. Температурні залежності їх опорів задані законами:

k =1,38⋅10−23 Дж/К. Покажіть залежність загального опору резисторів від температури. При якій температурі загальний опір буде мінімальним?

Розв'язок. Загальний опір буде рівний сумі: R=RM+RH.

program resistor;

uses crt;

const N=20; {кількість елементів масиву}

R0=125; {Ом}

R01=5.86E-2; {Ом}

alf=4E-3; {К-1}

W=4.8E-20; {Дж}

k=1.38E-23; {Дж/К}

dT=20; {крок по температурі}

T0=300; {початкова температура в К}

type Mas=array[1..N] of real;

var R,T,Rm,Rp,minR,tt:real;

a,b:Mas;

i,ind:integer;

function MinZn(x:Mas):real; {функція для визначення мінімального елементу масиву}

var tmp:real;

begin

tmp:=x[1];

for i:=2 to N do

if (x[i]<tmp) then

begin

tmp:=x[i];

ind:=i;

end;

minzn:=tmp;

end;

Begin {основна програма}

clrscr;

writeln(Знаходження залежності опору від температури:');

writeln('-----------------------------------------------------------------');

T:=T0;

i:=1;

while T<700 do

begin

Rm:=R0*alf*T;

Rp:=R01*exp(W/(k*T));

R:=Rm+Rp;

a[i]:=R; {заповнення масивів значеннями}

b[i]:=T;

writeln('R=',a[i]:2:2,'T=':3,b[i]:2:1,'K':2);

T:=T+dT;

inc(i);

end;

minr:=minzn(a);

i:=ind;

tt:=b[i];

write('Мінімальний опір ',minr:2:2,'Ом':3);

write('При температурі ':20,tt:2:2,'K':2);

readln;

End.

В цій програмі глобальними змінними є i та ind – індекси номерів масивів. Локальною змінною в функції MinZn є x - параметр-значення.

На завершення зазначимо, що в мові Pascal прийнята домовленість, що якщо

формальний параметр-значення позначений тим самим ідентифікатором, що й деяка змінна основної програми, то при виконанні програми для цього формального параметра обирається інший ідентифікатор i ніяких непорозумінь не виникає.__

V. Формування вмінь та навичок

Так як, ви мене уважно слухали, саме час застосувати ваші теоретичні знання на практиці. Спочатку ми зробимо (напишемо) задачу для тренування, а далі за списком ,кожен буде робити свої задачі. Отже, умова задачі:

Розв'язок. Для знаходження значень многочлена P(x) скористаємось процедурою

gorner, що реалізує схему Горнера. Тоді програма буде мати вигляд:

program roots;

const K=10;

var x, y, a, b, c, d, x1, x2 : real;

Z: array[0..K] of real;

N, i: integer;

procedure gorner(x:real;var g:real); {процедура знаходження значення многочлена}

begin

g:=z[N];

for i:=n-1 downto 0 do

g:=g*x+z[i];

end;

begin {основна програма}

clrscr;

writeln('розв'язок рiвняння ax^2 +bx+c=0');

write('введiть порядок многочлена N=');

readln(N);

for i:=N downto 0 do

begin

write('a[',i,']=');

readln(Z[i]);

end;

write('введiть числа x, y - ');

readln(x,y);

gorner(x,a);

gorner(y,b);

gorner(x-y,c);

d:=sqr(b)-4*a*c;

if d<0 then writeln('дiйсних коренiв немає!')

else

begin

x1:=(-b+sqrt(d))/(2*a);

x2:=(-b-sqrt(d))/(2*a);

write('коренi рiвняння:');

write('x1=',x1,'x2=',x2)

end

end.

VI. Підбиття підсумків заняття

1) Прийняття у студентів лабораторних робіт.

2) Аналіз досягнення мети пари

VIІ. Домашнє завдання

1.Доробити попередні лабораторні та зробити сьогоднішню.

Соседние файлы в папке на захист