русс | укр

Мови програмуванняВідео уроки php mysqlПаскальСіАсемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование


Linux Unix Алгоритмічні мови Архітектура мікроконтролерів Введення в розробку розподілених інформаційних систем Дискретна математика Інформаційне обслуговування користувачів Інформація та моделювання в управлінні виробництвом Комп'ютерна графіка Лекції


procedure OutputDate.


Дата додавання: 2014-04-05; переглядів: 917.


Задача 2. Зобразити рух Сонця на блакитному небі в горизонтальному напрямку.

program Sun;

uses crt,graph;

var driver,mode,i :integer;

begin clrscr;

driver:=detect;

initgraph(driver,mode,’’);

i:=0;

while i<=750 do

begin

setcolor(14); setbkcolor(3);

setfillstyle(1,14);

circle(i,100,50);

floodfill(I,100,14);

delay(200); {пауза 0,2с}

setfillstyle(1,3); setcolor(3);

circle(i,100,50);

floodfill(I,100,3);

i:=i+5

end;

end.

Параметри-значення і параметри-змінні у процедурах

Функції .

1. Поняття процедури, її структура та опис.

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

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

Процедура складається із заголовка і тіла. Це нібито програма в мініатюрі. Коли процедура виконає своє завдання, програма продовжить виконуватися з вказівки, яка слідує безпосередньо за вказівкою виклику про­цедури. Використання імені процедури в програмі називається вказівкою процедури або викликом процедури. Формат запису процедури:

procedure <ім'я процедури>;

<тіло процедури>;

Процедури без параметрів

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

Так, наприклад, програму знаходження об'єму конуса можна розбити на декілька процедур:

Procedure InputDate;

Procedure Vkazivka;

procedure OutputDate.

Procedure InputDate виконує введення даних в програму.

Procedure Vkazivka виконує вказівки для знаходження об'єму конуса. Procedure OutputDate виконує виведення даних на дисплей.

Всі змінні, які використовуються в процедурах без параметрів, описуються в основній програмі.

Задача. Скласти програму знаходження об'єму конуса.

ProgramVkonus;

Const P=3.14;

Var R,H,V:real;

procedureInputDate;

beginwrite('r=');

readln(R);

write('h=');

readln(H);

end;

procedureVkazivka;

begin

V:=P*Sqr(R)*H/3;

end;

procedureOutputDate;

begin

writeln('V=',V);

end;

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

InputDate;

Vkazivka;

OutputDate;

end.

Процедури з параметрами

У процедурі можна оголошувати константи, змінні, інші процедури і функції. Розділ опису в процедурах має таку саму структуру, як і в основній програмі.

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

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

Приклад програми, в якій використовується принцип локалізації.

Program LOKALIZACIA;

Var A,B: integer;

procedure LOKAL;

var A,X:char;

begin

А:='!';

Х:='?';

В:=В+1;

end;

begin

А:=0;

В:=100;

LOKAL;

writeln('a=',A,' b=',B);

end.

 

Змінна X — локальна для процедури LOKAL, тому головна програма не може змінити її значення або звернутись до неї.

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

Змінна А в основній програмі належить до цілого типу, але в процедурі LOKAL є своя власна змінна А, яка належить до типу char. Змінна А з голов­ної програми недоступна в процедурі LOKAL. Всі зміни, які відбуваються зі значенням А в процедурі, втрачають свій зміст при виході з неї.

Отже, в результаті виконання програми LOKAL на екран будуть виведені два числа: а=0 і b= 101.

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

ім'я програми. ім'я змінної

ім'я програми — ім'я програми, яке вказано в заголовку програми "program ..."

ім'я змінної— ідентифікатор змінної, вказаний в розділі опису змінних — "var ...."

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

Звернення до процедур і функцій

Program LOKALIZACIA 1;

Var A,B: integer;

procedure LOKAL;

var A,X: char;

begin

A:= '!';

X:= '?';

B:=B+1;

LOKALIZACIAl.A:=LOKALIZACIA1.A+12;

end;

begin

A:=0;

B:=100;

LOKAL;

writeln('a=‘,A,‘b=‘,b);

end.

В результаті виконання програми Lokalizacial на екрані появляться такі значення змінних: а=12 і b=101.

2. Параметри-значення і параметри-змінні у процедурах

1.Параметри-значення

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

Формат запису процедури:

ім'я процедури (ім'я змінної:тип змінної);

тіло процедури;

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

фактичними параметрами.

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

Program PARAMETR;

Var C,D:integer;

procedure PARAM(A,B: integer);

var S: integer;

begin

S:=0;

S:=A+B;

writeln('s=',S)

end;

begin

С:=10;

D:=100;

param(C,D); { 1-ий спосіб }

param( 10,100) { 2-ий спосіб }

end.

Змінні А і В — це формальні параметри. Змінні С і D — фактичні пара­метри. Значення фактичних параметрів С=10 і D=100 передаються формальним параметрам А і В.

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

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

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

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

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

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

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

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

Знайти значення сум:

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

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

Звернення до процедур і функцій

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

Program PRIKLAD;

Var Al,Bl,Cl,A2,B2,C2,MІNl,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 МIN>С 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(A 1 ,B 1 ,C 1 ,MIN 1 ,MAX 1);

MinMax(A2,B2,C2,MIN2,MAX2);

S1:=MIN1+MIN2;

S2:=MAX1+MAX2;

Writeln('Sl=',Sl);

Writeln('S2=',S2);

end.

3. Функції

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

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

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

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

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

 

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

Program KOMBINACIJ;

var N,M,C:integer;

function FACT(K:integer):integer;

var i,F:integer;

begin

F:=l;

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,' no ',m,' = ',C);

end.

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

Задача 1. Знайти площу п’ятикутника, у якого сторони дорівнють:

AB = 2м, BC =a м, CD = b м, DE = cм, AE = d м, AC =4 м, AD = 5 м.

 

 

Program Pyatukytnuk;
Var

a,b,c,d,f,g,h: integer;
S,S1,S2,S3 : real;

Function ploscha(x,y,z:integer):real;

Var

p,S:real;

begin

If (x+y>z) and (x+z>y) and (y+z>x) Then

begin

P:=(x+y+z)/2;

S:=sqrt(p*(p-x)*(p-y)*(p-z));

end

Else

begin

Writeln(‘Такий трикутник не існує’);

S:=0

end;

ploscha:=S

End;
Begin

Write (‘Введіть сторону=BC> ‘);
ReadLn(a);
Write (‘Введіть сторону=CD> ‘);
ReadLn(b);
Write (‘Введіть сторону=DE> ‘);
ReadLn(c);
Write (‘Введіть сторону=AE> ‘);
ReadLn(d);

f:=2;

g:=4;

h:=5;

S1:=ploscha(f,a,g);

S2:=ploscha(g,b,h);

S3:=ploscha(h,c,d);

if (S1<>0) and (S2<>0) and (S3<>0) then

begin

S:=S1+S2+S3;

Writeln(‘S=’,s:5:2)

end

else

begin

Writeln(‘Пятикутника не існує’);

Writeln(‘уведіть іншу величину сторін)’;

end;

ReadLn;

End.

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

 

Program max_4chucla;

Uses crt;

Var

a,b,c,d,max:real;

 

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

begin

Max:=a;

If max<b then max:=b;

Maximym:=max;

end;

 

Begin

clrscr;

write('a=>');

readln(a);

write('b=>');

readln(b);

write('c=>');

readln(c);

write('d=>');

readln(d);

max:=maximym(maximym(maximym(a,b,max),c,max),d,max);

writeln('max=',max:4:2);

readln;

End.

 

Запитання для самоконтролю:

  1. Для чого призначені процедури ?
  2. Як описується заголовок процедури ?
  3. Чим відрізняються формальні і фактичні параметри ?
  4. Чим відрізняються локальні і формальні змінні ?
  5. Для чого призначені функції ?
  6. Як описується заголовок функції ?
  7. Яка різниця між процедурою і функцією ?
  8. Як викликаються процедури і функції ?

Завдання

Знайти довжину сторін трикутника АВС, якщо відомі координати його вершин А(х1,y1,z1), B(х2,y2,z2), C(х3,y3,z3). Необхідно скористатись формулою:

 

 


<== попередня лекція | наступна лекція ==>
кольором фону EmptyFill | Нормальні форми


Онлайн система числення Калькулятор онлайн звичайний Науковий калькулятор онлайн