Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Паскаль.doc
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
825.34 Кб
Скачать

2. Параметри-змінні

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

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

Змінні, перед якими записане службове слово Var, називаються параметрами-змінними.

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

Задача.

Дано дві трійки чисел: А1, В1, СІ і А2, В2, С2. Знайти значення сум:

S1:= min(Al, В1, СІ) + min(A2, В2, С2),

S2:= max(А1, В1, СІ) + max(А2, В2, С2).

Для знаходження min і max з трьох чисел використаємо процедуру МіпМах.

Program PRIKLAD;

Var Al,Bl,Cl,A2,B2,C2,MINl,MIN2,MAXl,MAX2,Sl,S2:real;

procedure MinMax(A,B,C:real; var MIN,MAX:real); begin

MAX:=A;

If MAX<B then MAX:=B;

if MAX<C then MAX:=C;

MIN:=A;

If MIN>B then min:=B;

If MIN>C then MIN:=C;

end;

begin

write('Al='); readln(Al);

write('Bl='); readln(Bl);

write('Cl='); readln(Cl);

write('A2='); readln(A2);

write('B2='); readln(B2);

write('C2='); readln(C2);

MinMax(Al,Bl,Cl,MINl,MAXl); MinMax(A2,B2,C2,MIN2,MAX2); S1:=MIN1+MIN2; S2:=MAX1+MAX2;

Writeln('Sl=',Sl); Writeln('S2=',S2); end.

Функції

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

Формат опису функції:

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

результату>;

Звернення до функції (обов'язково повинно бути включене у вираз як операнд) має такий вигляд :

<ім'я функції> (список фактичних параметрів).

Кількість формальних і фактичних параметрів при використанні процедури чи функції повинна співпадати.

Формальні і фактичні параметри повинні співпадати за типом.

Процедура може мати багато результатів, функція—один.

Задача.

Знайти значення числа комбінацій N!

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

Program KOMBINACIJ; var N,M,C:integer;

function FACT(K:integer):integer;

var i,F: integer;

begin

F:=1;

For i:=l to K do F:=F*i;

FACT:=F;

end;

begin

write('n='); readln(N);

write('m='); readln(M);

C:=FACT(N)Div(FACT(M)*FACT(N-M));

writeln('Кількість комбінацій з ‘ ,n, ’ пo ‘,m,’ = ‘,C); end.

Примітка.

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

Завдання з розв'язками до тематичного оцінювання з теми " Процедури і функції."

  1. Як описується функція мовою Паскаль?

Відповідь: FUNCTION назва(список формальних параметрів): тип;

  1. Як називаються змінні в процедурі?

Відповідь: формальні параметри.

  1. Скільки результатів має функція?

Відповідь: один.

  1. Виправити помилки в опису процедури.

Procedure energia;

Var e:real;

E:=m*g*h;

Відповідь:

Procedure energia(m,g,h:real;var e:real);

Begin

E:=m*g*h;

End;

  1. Написати функцію знаходження більшого з двох чисел.

Відповідь:

Function max(a,b:real):real;

Var m1:real;

Begin

If a>= b then m1:=a else m1:=b;

Max:=m1;

End;

  1. Як викликається функція?

Відповідь: a:=назва(список фактичних параметрів);

  1. Що може бути формальним параметром?

Відповідь: змінна.

  1. В яке місце програми відбувається повернення з процедури?

Відповідь: оператор після виклику процедури;

  1. Виправити помилки в описі функції.

Function SUM(integer):integer;

Var s:integer;

Begin

S:=0;

For i:= 1 to n do s:=s+n;

End;

Відповідь:

Function SUM(n:integer):integer;

Var s:integer;

Begin

S:=0;

For i:= 1 to n do s:=s+n;

SUM:=s;

End;

  1. Записати процедуру знаходження периметра та площі прямокутника за заданими довжинами сторін.

Відповідь:

Procedure PS(a,b:real; var p,s:real);

Begin

P:=(a+b)*2;

S:=a*b;

End;

  1. Скласти програму обчислення виразу, використовуючи процедуру або функцію: , де a,c,x [1..7].

Відповідь:

Program Minimin;

Var m1,m2,m3, y:real;

Procedure MIN(var m: real);

Var b:array[1..7] of real;

I:integer;

Begin

Writeln(‘введіть 7 елементів’);

For I:=1 to 7 do readln(b[i]);

m:=b[1];

For I :=1 to 7 do if b[i]<m then m:=b[i];

End;

Begin

min(m1) ; min(m2) ; min(m3) ;

Y:= (m1+m2)/(1+m3);

Writeln(‘y=’,y:6:2);

End.

  1. Куплено 10 мішків капусти. В одному М1 кг, у другому М2 кг М3 г, а у всіх інших М4 кг М5 г. Визначити скільки куплено тонн капусти. В програмі використати підпрограму, що переводить кілограми і грами в кілограми.

Відповідь:

Program kapusta;

Var m1,m2,m3,m4,m5, Vsego,KG:real;

Procedure Perevod(Kg,G:real; Var Rez:real); {процедура переведення кг і г в begin кг, вхідні параметри вага в кг і

Rez:=kg+g/1000; г, вихідний Rez — вага в кг}

End;

Begin

Writeln(‘Введіть вагу першого мішка’);

Readln(M1);

Vsego=:=m1; { Vsego—змінна для накопичення загальної ваги}

Writeln(‘Введіть вагу другого мішка (кг, г)’);

Readln(M2,M3);

Perevod(m2,m3,KG);

Vsego:=Vsego+KG;

Writeln(‘Введіть вагу інших мішків (кг, г)’);

Readln(M4,M5);

Perevod(m4,m5,KG);

Vsego:=Vsego+KG*8; {Загальна вага в кг}

Vsego:=Vsego/1000; {Загальна вага в тоннах}

Writeln(‘Вага всієї капусти ’, Vsego, ‘тонн’);

End.

  1. У продавця N ящиків, у кожному з яких по В кг бананів. Визначити, який штраф він сплатить комітету із захисту прав споживачів, якщо він продає банани по С гривень за кілограм і при цьому обважує покупців на G грам при зважуванні кожного кілограма, а сума штрафу дорівнює п’ятикратному розміру прибутку , отриманого за рахунок обважування покупців. Скласти функцію для визначення результату задачі.

Відповідь:

Program Banan;

Var c,n,b,g,prib,st;real;

Function Shtraf(a:real):real;

Var ss:real;

Begin

Ss:=a*5;

Shtraf:=ss;

End;

Begin

Writeln(‘введіть n, b, c і g’);

Readln(n,b,c,g);

Prib:=n*b*g/1000*c; {прибуток за рахунок обважування}

St:=Straf(prib); {функція обчислює суму штрафу}

Writeln(‘Сума штрафу становить ’, St:6:2, ‘ грн.’);

End.