UkrReferat.com
найбільша колекція україномовних рефератів

Всього в базі: 75843
останнє поновлення: 2016-12-04
за 7 днів додано 10

Реферати на українській
Реферати на російській
Українські підручники

$ Робота на замовлення
Реклама на сайті
Зворотній зв'язок

 

ПОШУК:   

реферати, курсові, дипломні:

Українські рефератиРусские рефератыКниги
НазваПроцедури, підпрограми та параметри (реферат)
Авторdimich
РозділІнформатика, компютерні науки
ФорматWord Doc
Тип документуРеферат
Продивилось1977
Скачало416
Опис
ЗАКАЧКА
Замовити оригінальну роботу

Реферат на тему:

 

Процедури, підпрограми та параметри

 

Розглянемо задачу: довільні значення трьох змінних a, b, c переставити

за необхідності так, щоб вони були упорядковані за неспаданням, тобто

щоб мали місце нерівності a? b? c. Алгоритм розв'язання цієї задачі

простий:

 

якщо a>b, то обміняти значення змінних a і b;

 

{гарантовано, що a? b}

 

якщо b>c, то обміняти значення змінних b і c;

 

{гарантовано, що b? c і a? c; але нерівність a? b не гарантована, тому:}

 

якщо a>b, то обміняти значення змінних a і b.

 

Обмін значень двох змінних, наприклад, a і b, задається трьома

операторами з допоміжною змінною: t:=a; a:=b; b:=t. Мовою Паскаль

алгоритм записується так:

 

program sort3(input, output);

 

var a, b, c, t : integer;

 

begin

 

writeln('задайте три цілих'); readln(a, b, c);

 

if a>b then begin t:=a; a:=b; b:=t end;

 

if b>c then begin t:=b; b:=c; c:=t end;

 

if a>b then begin t:=a; a:=b; b:=t end;

 

writeln('упорядкування: ', a, ' ', b, ' ', c)

 

end.

 

Проте три майже однакові складені оператори, що задають ті самі дії,

тільки з різними змінними – це нудно. Аналогічно функціям,

 

можна один раз описати обмін значень двох змінних, представлених

параметрами, дати ім'я цьому опису, а потім тільки позначати його, тобто

вказувати ім'я опису й змінні, чиї значення повинні обмінятися.

 

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

одного значення, а змінюється стан пам'яті програми (недарма обмін

заданий складеним оператором). Тому такий опис оформляється й

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

являє собою окремий оператор.

 

Процедура має загальний вигляд

 

procedure ім'я(означення параметрів);

 

означення імен

 

begin

 

послідовність операторів

 

end;

 

Процедура, як і функція, є означенням імені і записується серед означень

програми.

 

На відміну від функції, в її заголовку немає імені типу для значень,

породжуваних у результаті виклику, тому що ніякі значення не

породжуються. За цією ж причиною в тілі процедури не може бути

операторів присвоювання з її ім'ям у лівій частині. Виклик процедури

складається з імені й аргументів у дужках і записується як окремий

оператор, наприклад, readln(x, y).

 

Отже, напишемо інший варіант програми упорядкування трьох значень:

 

program sort31(input, output);

 

var a, b, c : integer;

 

procedure swap(xx, yy : integer);

 

var t : integer;

 

begin t:=xx; xx:=yy; yy:=t end;

 

begin

 

writeln('задайте три цілих:'); readln(a, b, c);

 

if a>b then swap(a, b);

 

if b>c then swap(b, c);

 

if a>b then swap(a, b);

 

writeln('упорядкування: ', a, ' ', b, ' ', c)

 

end.

 

КРАСИВО, АЛЕ НЕПРАВИЛЬНО!

 

Справа в тім, що при виконанні виклику, наприклад, swap(a, b), змінні xx

і yy одержать значення змінних a і b, потім ці значення поміняються

місцями, виконання виклику закінчиться, а в змінних a і b залишаться ті

ж самі значення, що були перед викликом. Наприклад, якщо змінним a, b, c

присвоїти "з зовнішнього світу" значення відповідно 3, 1, 2, то буде

надруковано упорядкування: 3 1 2. Слушність цього напису дуже сумнівна.

-----> Page:

0 [1] [2]

ЗАМОВИТИ ОРИГІНАЛЬНУ РОБОТУ