Лекції >> Програмування, комп’ютери і кібернетика >> Використання підпрограм та функцій користувача

Під основним алгоритмом будемо розуміти алгоритм,  використання якого забезпечує розв’язування даної (основної) задачі.

Іноді при повному розв’язку основної задачі можна виділити деякий її фрагмент – окрему допоміжну задачу, яка або раніше була розв’язана кори тувачем, або розв’язок якої є відомим (типова задача, чи задача розв’язана іншими користувачами). Врахуємо й те, що допоміжна задача може використовуватися декілька разів при розв’я­зуванні основної задачі. Для допоміжної задачі окремо від основного алгоритму може розроблятися новий алгоритм або використовуватися раніше описаний. Про алгоритм розв’язку допоміжної задачі говорять як про допоміжний по відношенню до алгоритму розв’язку основної задачі.

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

Таким чином, розроблені користувачем алгоритми можна використовувати для певних задачах як основні, а для інших – як допоміжні.

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

У мовах програмування розрізняють два види допоміжних алгоритмів: алгоритми – функції користувача та алгоритми – процедури користувача. Функція користувача – це незалежна іменована частина програми, яку можна викликати для виконання певних дій. Вона дозволяє знайти лише одне значення, передати його у точку виклику, і ім’я функції може бути частиною виразу (входити до виразу як операнд). Процедура аналогічна функції, але процедура не може бути частиною виразу (операндом), і після виконання процедури завжди є можливість використати у програмі не тільки один, а декілька результатів її роботи. Зауважимо, що і про програми, у залежності від того, який алгоритм вони подають, іноді говорять як про основні та допоміжні (підпрограми).

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

Навчальна алгоритмічна мова.

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

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

Навчальна алгоритмічна мова.

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

Якщо допоміжний алгоритм є процедурою, то у основному алгоритмі при посиланні на процедуру у дужках вказуються  вхідні та вихідні дані (аргументи та результат). Наприклад, якщо допоміжний алгоритм має заголовок виду алг Min2 (цел K, N, целтаб B[1:К,1:N], цел min, v, w), то у основному алгоритмі має бути окрема вказівка, подібна до такої: Min2 (KA, NA, A, b1, x2, y2).

Якщо допоміжний алгоритм є функцією користувача, то у основному алгоритмі при посиланні на функцію у дужках записуються лише вхідні дані (аргументи). При цьому у допоміжному алгоритмі використовується змінна знач, якій обов’язково присвоюється результат роботи і перед іменем заголовку такого алгоритму вказується тип вихідних даних – результатів функції. Наприклад, якщо заголовок допоміжного алгоритму  алг вещ длина (вещ x, y, x0, y0), то у основному алгоритмі звернення до функції длина має бути подібне до такого: y := длина (x2, y2, x1, y1). 

Basic.

Користувач має можливість використовувати не тільки стандартні функції мови Basic, а й нові. Перед використанням функції користувача її спочатку описують за допомогою команди DEF:

  DEF FN<літера>(аргументи) = <вираз>

де <літера> — будь-яка літера латинського алфавіту. Ім’я функції користувача складається таким чином з трьох літер, причому перші дві фіксовані — FN. Після імені в круглих дужках можуть бути вказані вхідні дані — аргументи, які відокремлюються комами; після знаку = записується арифметичний вираз, яких у вигляді формули подає алгоритм обчислення значення нової функції. Наприклад, опишемо нову функцію :

20 DEF FNF ( X, Y, X0, Y0 ) = SQR ( ( X - X0 )^2 + ( Y - Y0 )^2 )

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

30 X1=2, Y1=2, X2=1, Y2=0

40 A = FNF ( X1, Y1, X2, Y2 )

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

У тих випадках, коли для описання допоміжного алгоритму необхідно декілька операторів, використовують підпрограми. Підпрограма — це послідовність операторів, до виконання якої ЕОМ переходить з основної програми за оператором GOSUB, і яка закінчується оператором RETURN.

При використанні підпрограм важливим є те, що у основній програмі необхідно:

§  спочатку підготувати аргументи для передачі у підпрограму. Наприклад:

100 KK=K : NN=N

§  викликати підпрограму - записати оператор GOSUB N (де N – номер рядка програми, починаючи з якого записана підпрограма). Наприклад:

110 GOSUB  250

§  забезпечити повернення до основної програми результатів роботи підпрограми. Наприклад:

120 C1=MIN : X1=X : Y1=Y .

При цьому основна програма обов’язково має закінчуватися оператором END. 

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

Pascal.

Функція, що визначається користувачем, складається з заголовка і тіла функції. Структура функції має вигляд:

FUNCTION <ім'я> (параметри) : <тип результату> ;

   Const … ;

   Type  … ;

   Var    … ;

   BEGIN

      <оператори>                                                                                  

   END ;

Заголовок містить: зарезервоване слово FUNCTION; ім'я функції, задане користувачем; параметри - список змінних (кількість змінних необмежена і вказується користувачем), для кожної з яких вказується тип; тип результату, тобто тип значення, яке обчислює функція (такий тип має бути скалярним). Зауважимо, що типи заголовку функції можна позначати тільки іменами, тому, наприклад, тип масиву потребує попереднього опису в розділі Type основної програми.

Тіло функції є локальним блоком, за структурою аналогічним програмі, але закінчується не крапкою, а крапкою з комою. У тілі функції обов’язково має бути оператор присвоєння, у лівій частині якого записане ім’я функції. Тоді ім’я функції виступає у ролі змінної, якій присвоюється деяке значення, і таке значення є результатом роботи функції. При цьому у точку виклику функції повертається результат останнього присвоювання. Звернення до функції в основній програмі здійснюється за іменем функції з переліком списку аргументів, який є необов’язковим. Якщо аргументи вказані, то порядок запису і типи аргументів повинні бути такими ж, як у параметрів заголовку функції.

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

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

Схема заголовка процедури така:

PROCEDURE <ім'я> (параметри) ;

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

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

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

У списку параметрів заголовка процедури перед параметрами-змінними ставлять слово VAR. Наприклад,

procedure dataOUT ( Var A, B, C  : integer ) ;

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

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

У програмі може бути описано скільки завгодно блоків. Усередині цих блоків можуть бути описи інших блоків і т.д. без видимих обмежень. Важливо знати, звідки які блоки можуть бути викликані (тобто встановити видимість). Для відповіді на це питання уявіть, що блок - це будинок, у якого в вікнах одностороннє дзеркало. Зсередини через них видно усе, що знаходиться зовні, всередину ж заглянути не можна.

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

Об'єкти, описані в блоці, називаються внутрішніми, а ті, що описані в блоках, що охоплюють даний, - зовнішніми відносно блока. Зовнішні змінні дають додатковий канал зв'язку між блоками (головним каналом варто вважати параметри і параметри-змінні). Користуватися цим каналом треба обережно, тому що він посилює залежність блоків один від одного і цим ускладнює розробку програми.

Може статися, що імена різних зовнішніх змінних співпадуть. Яка з однойменних змінних буде видна з блока? Буде видна та, що описана в найближчому з зовнішніх блоків. Якщо ж конкуренція виникне між зовнішньою і внутрішньою змінними, то видима буде внутрішня.

 Приклад 1.  Дано два цілочисельних масиви С (3х2) та D (3х2). Знайти більший серед мінімальних елементів даних масивів, індекси такого елемента та ім’я відповідного масиву.

початок

 

K, N,

C, D

 

 

с1, x1, y1

 

 

d1, x2, y2

 

 

c1 > d1

 

      z := “D”                   z := “C”

      m : = d1                  m : = c1

  x:=x2   y:=y2           x := x1 y := y1

 

 

z, m, x, y

 

кінець

мал. 20

І етап. Спочатку у кожному масиві визначимо мінімальний елемент та його індекси: для цього двічі скористаємося допоміжним алгоритмом, що забезпечує пошук мінімального елемента масиву. Знайдені мінімальні елементи порівняємо та визначимо більший.

a)                   алг БЗМ (целтаб С[1:3,1:2], D[1:3,1:2], цел х,        y, m, K, N,  лит z)

b)        арг K, N, С, D = 3, 2,  0,-5,1,4,2,1,   0,-2,-3,4,3,1

c)        рез z, m, x, y

d)    нач  цел x1, x2, y1, y2, с1, d1

e)            Min2 (K, N, C, с1, x1, y1)

f)             Min2 (K, N, D, d1, x2, y2)

g)           если с1>d1

h)              то z :=”С”

i)                   m := c1

j)                   x := x1

k)                  y := y1

l)                 иначе  z := “D”

m)                m := d1

n)                 x := x2

o)                 y := y2

p)            все

q)       z := z

r)         m := m

s)        x := x

t)         y := y     

u)     кон

v)     - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

w)    алг Min2(цел KK, NN, целтаб B [1:KK,1:NN], цел min, v, w)

x)        арг KK, NN, B

y)        рез min, v, w

z)     нач  цел i, j

aa)        min :=B [1,1]

bb)        v := 1

cc)        w := 1 

dd)       нц для i от 1 до KK

ee)        .     нц для j от 1 до NN

ff)           .     .  если min > B [ i , j ]

gg)          .     .     то     min := B [ i , j ]

hh)       .     .            v := I

ii)           .     .            w := j

jj)           .     .     все

kk)        .     кц

ll)           кц

mm)кон

НАМ-програма 12

ІІ етап. Блок-схема (мал. 20).

ІІІ етап. Запишемо програму.

 

 

 

 

 

 

 

 

nn) 10   REM Більший серед менших

oo) 20   INPUT “Розмірн. масивів K, N” ; K, N

pp) 30   DIM C(K, N):DIM D(K, N):DIM B(K, N)

qq) 40   FOR i=1 TO K

rr)    50   FOR j=1 TO N

ss)  60   INPUT “Елемент масиву С” ; C(i, j)

tt)     70   B(i, j)=C(i, j)

uu)  80   NEXT j

vv)  90   NEXT i

ww)100 KK=K : NN=N

xx)  110 GOSUB  250

yy)  120 C1=MIN : X1=X : Y1=Y  

zz)   130 FOR i=1 TO K

aaa)140 FOR j=1 TO N

bbb)150 INPUT “Елемент масиву D” ;  D(i, j)

ccc)160 B(i, j)=D(i, j)

ddd)170 NEXT j

eee)180 NEXT i

fff)  190 KK=K : NN=N

ggg)200 GOSUB 250

hhh)210 D1=MIN : X2=X : Y2=Y 

iii)   220 IF C1>D1 THEN Z$=“C”:M=C1:X=X1: Y=Y1 ELSE Z$=“D”:M=D1:X=X2:Y=Y2

jjj)   230 PRINT Z$, M, X, Y

kkk)240 END

lll)   250 REM - - - - - - - Мінімальне - - - - - - -

mmm)260 MIN=B(1,1): X=1: Y=1

nnn)270 FOR i = 1 TO KK

ooo)280 FOR j = 1 TO NN

ppp)290 IF MIN > B( i, j) THEN MIN= B(i,j) : X=i : Y=1

qqq)300 NEXT j

rrr)  310 NEXT i

sss)320 RETURN 

Basic-програма 12

ttt)    

uuu)Program Big_small ;

vvv)  Const

www)      K=3 ; N=2 ;

xxx)  Var

yyy)     x1,y1,x2,y2,x,y, i, j, c1,d1,min : integer ;

zzz)      kk, nn, M : integer ;

aaaa)      c, d, b : array[1..K,1..N] of integer ;

bbbb)      z : string ;

cccc)   Procedure Minimum ;

dddd)     Begin

eeee)         Min := B [1,1] ; X :=1 ; Y :=1 ;

ffff)               For i := 1 to KK do

gggg)              For j := 1 to NN do

hhhh)                  If Min > B [i, j] Then

iiii)                     begin

jjjj)                        Min := B [i, j] ; X := i ; Y := j

kkkk)                   end       

llll)        End;

mmmm)Begin

nnnn)   For i := 1 to K do   {введення масиву С}

oooo)        For j := 1 to N do ReadLn ( C[i, j] ) ;

pppp){пошук мін. елементу у масиві С}

qqqq)  KK :=K ; NN := N ; B := C ;

rrrr)   Minimum ;

ssss)   C1 := Min ; X1 :=X ; Y1 :=Y ;

tttt)  For i := 1 to K do         {введення масиву D}

uuuu)          For j := 1 to N do ReadLn ( D [i, j] ) ;

vvvv){пошук мін. елементу у масиві D} 

wwww) KK :=K ; NN := N ; B := D ;

xxxx)   Minimum ;

yyyy)   D1 := Min ; X2 := X ; Y2 := Y ;

zzzz) If C1 > D1 Then

aaaaa)      begin

bbbbb)           z := ‘C’ ; M := C1 ; X := X1 ; Y := Y1

ccccc)      end

ddddd)      Else

eeeee)    begin

fffff)         z := ‘D’ ; M := D1 ; X := X2 ; Y := Y2

ggggg)      end ;

hhhhh)   WriteLn ( z, ‘  M=’, M :4, X :4, Y :4)

iiiii)End.

 

jjjjj) 

Pascal-програма 12

Тест1. K=3, N=2, масив С:, масив D:. Елемент D(3,1)= –3.

Тест2. K=3, N=2, масив С:, масив D:. Елемент C(2,1)= –1.

 Приклад 2.  Обчислити площу трикутника, який задано координатами своїх вершин.

І етап. Визначимо довжину кожної із сторін трикутника: скористаємося функцією ко­ристу­вача, яка за координатами двох точок знаходить довжину від­різка. Площу визначимо за формулою Герона.

початок

 

x1,y1,x2,

y2,x3,y3

 

а

 

 

b

 

 

c

 

p, S

 

 

S

 

кінець

мал. 21

ІІ етап. Блок-схема (мал. 21).

kkkkk)алг Герон (вещ x1, y1, x2, y2, x3, y3, S)

lllll)   арг x1, y1, x2, y2, x3, y3

mmmmm)   рез S

nnnnn)нач вещ a, b, c, p

ooooo)      a := длина (x2, y2, x1, y1)

ppppp)      b := длина (x2, y2, x3, y3)

qqqqq)      с := длина (x3, y3, x1, y1)

rrrrr)     p := (a + b +с ) / 2

sssss)    S := (p*(p-a)*(p-b)*(p-c))**(1/2)

ttttt)      S := S

uuuuu)кон

vvvvv)- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 

wwwww)алг цел длина (вещ x, y, x0, y0)

xxxxx) арг x, y, x0, y0

yyyyy) рез

zzzzz)нач  

aaaaaa)     знач :=((x-x0)**2+(y-y0)**2)**(1/2)

bbbbbb)кон

НАМ-програма 13

ІІІ етап. Запишемо текст програми.

cccccc) 

dddddd)10 REM Герон

eeeeee)20 DEF FNF (X,Y,X0,Y0)=SQR((X-X0)^2+(Y-Y0)^2)

ffffff)30 INPUT “Введіть координати точок” ; X1, Y1, X2, Y2, X3, Y3

gggggg)40 A = FNF (X1,Y1,X2,Y2)

hhhhhh)50 B = FNF (X2,Y2,X3,Y3)

iiiiii)60 C = FNF (X1,Y1,X3,Y3)

jjjjjj)70 P = (A + B + C) / 2

kkkkkk)80 S = SQR (P*(P-A)*(P-B)*(P-C))

llllll)90 PRINT “Площа дорівнює ”; S

mmmmmm)100 END

Basic-програма 13

nnnnnn) 

oooooo)Program Geron;

pppppp)    Var

qqqqqq)       a, b, c, p, s,   x1, y1, x2, y2, x3, y3 : real ;

rrrrrr)   Function D (x, y, x0, y0 : real) : real ;

ssssss)      begin

tttttt)            d := Sqrt ( Sqr (x-x0)+Sqr (y-y0) ) ;

uuuuuu)      end;

vvvvvv)Begin

wwwwww)  Write ( ‘ Введіть координати точок ’ ) ;

xxxxxx)      ReadLn (x1, y1, x2, y2, x3, y3) ;

yyyyyy)  a := d (x1, y1, x2, y2) ; b := d (x3, y3, x2, y2) ;

zzzzzz) c := d (x1, y1, x3, y3) ; p := ( a + b +c ) / 2 ;

aaaaaaa)    s := Sqrt ( p* (p-a) * (p-b) * (p-c) ) ;

bbbbbbb)    Writeln ( ‘ s= ’, s :10 :4 )

ccccccc) End.

 

ddddddd) 

Pascal-програма 13

ІV етап.      Тест. Вхідні дані: x1=0 , y1=0 , x2=3 , y2=3 , x3=7 , y3= -1 .

        Результат: S=12. n

Схожі матеріали
05.10.2012 Введення та виведення даних, розробки та опису лінійних програм.
20.12.2011 Pascal - лабораторні роботи - для студентів III-го курсу (лекції Ляшенко Б.М.)
12.12.2010 Робота з підпрограмами
12.12.2010 Робота з рядковими та символьними величинами.
12.12.2010 Робота з циклічними програмами
12.12.2010 Робота з масивами даних.
12.12.2010 Розробка та описання програм з розгалуженнями
12.12.2010 Початки програмування
12.12.2010 Етапи розв’язання задач з використанням ЕОМ
12.12.2010 Поняття про алгоритм

Тести даної категорії
12.12.2010 ПОЧАТКИ АЛГОРИТМІЗАЦІЇ. ВСТУП ДО ПРОГРАМУВАННЯ

Останні створені тести
16.11.2015 Олімпійські ігри Стародавньої Греції. Відродження олімпійських ігор. Олімпійський рух сучасності.
28.10.2015 British Writers. Тест для студентів 4 курсу ННІ педагогіки
27.10.2015 The Passive Voice. Тест для студентів 2 курсу ННІ педагогіки
27.10.2015 Articles. Тест для студентів 1 курсу неспеціальних факультетів
27.10.2015 The Active Voice. Тест для студентів 2 курсу ННІ педагогіки
08.10.2014 INTEL
22.10.2012 Цивільний захист
26.09.2012 Мовнокомунікативна компетентність. Орфографічна складова
21.09.2012 OC Windows
31.05.2012 Lexikalisch-grammatischer Test. Тест для студентів 1 курсу неспеціальних факультетів.
Рекомендовані лекції
05.04.2016 ОС та СП. Тема 7. Міжпроцесова та міжпотокова взаємодія. Слайди
12.12.2010 Робота з рядковими та символьними величинами
12.12.2010 Порядковий тип даних
12.12.2010 Різні способи задання циклічних процесів
22.02.2016 ОС та СП. Тема 1. Початкові відомості про операційні системи. Тези
13.11.2014 MICROSOFT OFFICE. СКЛАД, ПРИЗНАЧЕННЯ, ОСНОВНІ ПРОГРАМИ-ДОДАТКА
12.12.2010 Множини
22.02.2016 ОС та СП. Тема 1. Початкові відомості про операційні системи. Слайди
27.09.2012 Літературознавство як наука
28.09.2014 Лекції з курсу "Основи психологічної практики (практична психологія)" для студентів ІV курсу спеціальності 6.030102 Психологія