понеділок, 10 березня 2014 р.

ПIДПРОГРАМИ У ПАСКАЛI




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


ФУНКЦIЇ


Функцiї звичайно використовують для опису пiдпрограм, пiсля виконання яких значення результату отримує одна змiнна. Iм`я такої змiнної - iм`я функцiї, тому у заголовку функцiї через двокрапку описується тип функцiї. Формат заголовку функцiї:

Function <iм`я функцiї (<список формальних параметрiв):<тип функцiї>;

Наприклад:
 Function Summa(a,b: integer): integer;
 Function D: boolean;
Описанi функцiї: Summa, яка має два формальних параметри a, b цiлого типу i повертає результат цiлого типу; функцiя D без параметрiв, повертає в результатi логiчну величину. У будь-якiй функцiї обчислення результату повинно завершуватися оператором присвоєння, де функцiї присвоюється конкретне значення, але такий оператор у тiлi функцiї повинен бути тiльки один.
Звертання до функцiї вiдбувається у виразi, коли записується iм`я функцiї, а далi у круглих дужках перелiчуються фактичнi параметри (якщо вони є), з якими у даний момент буде обчислено функцiю. Для кожного формального параметра, що входив в список формальних параметрiв при описi функцiї, треба вказати один фактичний параметр. Порядок слiдування, кiлькiсть, тип формальних параметрiв повинен спiвпадати з порядком слiдування, кiлькiстю, типом фактичних параметрiв.
Приклад: написати програму, в якiй зчитуються початкове i кiнцеве значення аргументу, крок, з яким вiн змiнюється, коефiцiєнти a i b. Програма повинна надрукувати таблицю значень функцiї
f(x)=a+bch(x), де ch(x)=(x2–x3)/2
 Program Fn;
   var F, X, S, Fi, K, A, B: real;
      function CH(T: real): real;
         begin
             CH:=(T*T - T*T*T)/2
         end;
  begin
     read(A, B, S, Fi, K);
     X:=S;
     while X <= Fi do
         begin
           F:= A + B*CH(X);
           writeln(X:5:1, F:10:3);
           X:=X + K
        end
    end.
ПРОЦЕДУРИ.

Не завжди можна пiдпрограму реалiзувати як функцiю (наприклад,  робота з таблицями, сортування i т.д.). Якщо потрiбно  видати бiльше, нiж один результат, то, як правило, використовують пiдпрограми-процедури.
Рiзниця мiж процедурами i функцiями:
-     процедури виживаються не у виразi, а за допомогою оператора виклику процедур (це iм`я процедури з перелiченими у круглих дужках фактичними параметрами);
-     у заголовку процедури вiдсутнiй опис її типу, тому що iм`я процедури нiяким чином не пов`язане з результатами виконання;
-     для передачi результатiв виконання процедури використовуються формальнi параметри у заголовку процедури, описанi за допомогою службового слова var.
-     Формат заголовку процедури:
Procedure <iм`я процедури>(<список формальних параметрiв-даних>,var <список форм.парам.-результатiв>);
Приклад:
Procedure Pr1(D,C: byte; var FC, FD: word);
Описана процедура Pr1, яка має чотири параметри: D, C - типу byte, результат буде повернений у змiнних FC i FD, якi мають тип word.
Приклад: написати програму для обчислення N-ого члену ряду Фiббоначчi (перший i другий члени ряду мають значення 1, кожний наступний є сумою двох попереднiх).
 Program Fib;
    var i,n,x,y: integer;
    Procedure Fibo(var First, Second: integer);
         var Fi: integer;
    begin
       Fi:=First;
       First:=Second;
       Second:=First+Fi
    end;
 begin
     X:=1; Y:=1;
     write('Введiть кiлькiсть чисел: '); readln(N);
     writeln('Числа Фiббоначчi:':35);
     write(X:1,', ',Y:1);
     for i:=1 to N-2 do
        begin
           Fibo(X,Y);
           write(', ', Y:1)
        end;
 end.

Немає коментарів:

Дописати коментар