Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка з інформатики.doc
Скачиваний:
26
Добавлен:
20.12.2018
Размер:
1 Мб
Скачать
☆
  1. Складання програм з використанням власних процедур та функцій.

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

Б) Потрібно вміти: створювати програми, що містять процедури та функції з параметрами та без параметрів.

Література.

1) А.Ф.Верлань, н.В.Апатова. Інформатика (підручник для учнів 10-11 класів середньої загальноосвітньої школи).- Київ, «Форум», 2000.

2) В.Л.Руденко, О.М.Макарчук, М.О.Патланжоглу. Практичний курс інформатики.- Київ, «Фенікс», 1997. – 304 с.

3) В.В.Фаронов. Turbo Pascal 7.0. Начальный курс. Учебное пособие. – М.: «Нолидж», 1998. – 616 с.

4) Т.П.Караванова. Збірник задач з програмування. 750 задач з розв’язками.

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

1. Описати функції для знаходження мінімуму та максимуму з двох заданих чисел та використати їх у програмі для знаходження значення виразів:

а)

б)

в)

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

3. Описати процедуру виведення графічної заставки для вашої програми, яка виводить ваш логотип та ініціали.

4. Описати функцію та використати в програмі табулювання функції.:

а) y=logax, x€[1;10] h=0.5

b) y=ax, x€[-10;10] h=0.8

5. Описати функцію знаходження факторіалу, використати в основній програмі для обчислення виразів 3!, 5!, 10!

6. Описати функцію (-1)n, використати в програмі для знаходження випадкових від’ємних та додатніх чисел.

7. Описати Процедуру для виведення послідовності чисел 2n. Використати її в програмі для виведення степенів двійки з показниками від 0 до 10.

Опорний конспект

П Р О Ц Е Д У Р И І Ф У Н К Ц І Ї

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

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

викликати для виконання з однієї або декількох точок програми. Кожна підпрограма визначається унікальним ім'ям. У мові ПАСКАЛЬ існує два типу підпрограм - процедури і функції.

Процедура і функція - це іменована послідовність описів

і операторів. При використанні процедур або функцій ПАСКАЛЬ - програма повинна містити текст процедури або функції і звернення до процедури або функції. Тексти процедур і функцій поміщаються в розділ описів процедур і функцій.

Процедура може містити такі - ж розділи описів, що і ПАСКАЛЬ - програма, а саме: розділи опису модулів, міток, констант, типів, змінних, процедур і функцій.

ПЕРЕДАЧА ІМЕН ПРОЦЕДУР І ФУНКЦІЙ ЯК ПАРАМЕТРИ. У багатьох

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

Опис процедурних і функціональних типів проводиться в розділі

описи типів:

type

FuncType = Function(z: Real): Real;

ProcType = Procedure (а,b: Real; var x,y: Real);

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

type

Proc = Procedure;

Після оголошення процедурного або функціонального типа його можна використовувати для опису формальних параметрів - імен процедур і функцій.

Крім того, необхідно написати ті реальні процедури або функції

імена яких передаватимуться як фактичні параметри. Ці про-

цедуры і функції повинні компілюватися в режимі дальньої адресації з ключем {$F+}.

Приклад. Скласти програму для обчислення певного інтеграла

tk

2t

I= S--------------- dt

sqrt(1-sin2t)

tn

по методу Сімпсона. Обчислення підінтегральної функції реалізувати за допомогою функції, ім'я якої передається як параметр. Значення визначеного інтеграла за формулою Сімпсона обчислюється по формулі:

ISimps=2*h/3*(0.5*F(A)+2*F(A+h)+F(A+2*h)+2*F(A+3*h)+...

+2*F(B-h)+0.5*F(B))

де A і B - нижня і верхня межі інтервалу інтеграції

N - число розбиття інтервалу інтеграції

h=(B-A)/N, причому N повинне бути парним.

Program INTEGRAL;

type

Func= function(x: Real): Real;

var

I,TN,TK:Real;

N:Integer;

{$F+}

Function Q(t: Real): Real;

begin

Q:=2*t/Sqrt(1-Sin(2*t));

end;

{$F-}

Procedure Simps(F:Func; а,b:Real; N:Integer; var INT:Real);

var

sum, h: Real;

j:Integer;

begin

if Odd(N) then N:=N+1;

h:=(b-a)/N;

sum:=0.5*(F(a)+F(b));

for j:=1 to N-1 do

sum:=sum+(j mod 2+1)*F(a+j*h);

INT:=2*h*sum/3

end;

begin

WriteLn(' ВВЕДИ TN,TK,N');

Read(TN,TK,N);

Simps(Q,TN,TK,N,I);

WriteLn('I=',I:8:3) end.

{primer 1 dla chislovih metodov - zadacha obchislennya}

program f;

var

t:real; function mysin(x:real):real; var f,c,kv,z:real; i,n:integer; begin n:=3; z:=1; kv:=x*x; c:=x*kv; for i:=1 to n do z:=z*i; f:=x-c/z; c:=c*kv; z:=z*(n+1)*(n+2); f:=f+c/z; c:=c*kv; z:=z*(n+1)*(n+2); f:=f-c/z; c:=c*kv;

z:=z*(n+1)*(n+2); f:=f-c/z; c:=c*kv; z:=z*(n+1)*(n+2); f:=f+c/z; mysin:=f; end; BEGIN write('Input x='); readln(t); writeln('sin x = ',sin(t):0:8,' mysin x =',mysin(t):0:8); readln END.

Program find_v; uses crt; const m=100; type index = 1..m; vector = array [index] of integer; boolik = array [index] of boolean; var b: boolik; a: vector; n,i,x: index; i1, max, min: integer; Procedure Vvod_mas (i,n:index; var a: vector); begin for i:=1 to n do begin write ('a[',i,']='); readln (a [i] ); end; clrscr; writeln; writeln ('>-----Vvedennuy vami massiv-----<'); for i:=1 to n do write (' ',a[i],' '); end; Procedure Find_max (i,n:index; var max: integer); var max_r: integer; begin max_r:=a[1]; for i:=2 to n do if max_r < a[i] then max_r:=a[i]; max:=max_r; end; Procedure Find_min (i,n:index; var min: integer); var min_r: integer; Begin min_r:=a[1]; for i:=2 to n do if min_r > a[i] then min_r:=a[i]; min:=min_r; end; Procedure Vuch_chi (i,n: index; b: boolik; var x: index); var q,s : integer; begin for i1:=1 to n do b[i1]:=true; i1:=0; q:=0; s:=0; repeat i1:=i1+1 ; if i1 >= n+1 then i1:=1; if b[i1]=true then q:=q+1; if q=x then Begin s:=s+1; q:=0; b[i1]:=false; end; until n=s; end; Begin clrscr; writeln ('Vvedite kolichestvo chisel v masive'); readln (n); writeln ('Vvedite chislo kotoroe budet vucherkivatsa'); readln (x); writeln; writeln ('nachinaem vvod masiva'); Vvod_mas (i,n,a); Find_max (i,n,max); writeln; writeln ('>-----Max= ',max); Find_min (n,n,min); writeln ('>-----Min= ',min); Vuch_chi (i,n,b,x); writeln ('Vucherkivanie ',x,' chisla'); writeln ('>-----Ostalos chislo X=',a[i1],' v pozicue [',i1,'] '); repeat until keypressed; end.