До цього моменту часу ми використовували з розділу описів
тільки опис змінних і типів. На цьому занятті ми почнемо вивчати процедури.
Структура процедури повторює структуру програми.
Зразок структурного програмування процедури(підпрограми)
procedure <имя процедуры> (<параметри>);
label
<розділ опису міток>;
const
< розділ опису констант>;
type
< розділ опису типів даних>;
var
< розділ опису змінних>;
begin
<основное тело процедуры>;
end;
Напишемо для прикладу просту
програму з процедурою, що додає два числа.
Кодування мовою програмування Pascal;
program pr1;
var
a, b, c: integer;
procedure sum(x, y: integer; var z: integer);
begin
z := x + y;
end;
begin
write('Введіть
два числа: ');
readln(a, b);
sum(a, b, c); {процедура викликається своїм іменем, яке ви написали після зарезервованого слова procedure в описі}
writeln(c);
end.
Звернемося до прикладу, наведеного на малюнку вище. Зліва
наведено фрагмент тексту основної програми, праворуч - процедура. Як тільки в
тілі програми оголошується ім'я процедури з параметрами, виконання «головного»
тіла припиняється, і управління обчислювальними процесами передається
процедурі. Після виконання процедури здійснюється повернення на оператор
основної програми, наступний за викликом процедури.
При описуванні процедури вказується
список формальних параметрів. Кожен параметр є локальним по відношенню до
описуваної процедури, до нього можна звертатися тільки в межах даної процедури
(в нашому прикладі х, у, z - формальні параметри). Фактичні параметри - це
параметри, які передаються процедурі при зверненні до неї (а, b, с - фактичні
параметри). Число і тип формальних і фактичних параметрів повинні збігатися з
точністю до їх слідування.
Іншими словами, передача параметрів за
значенням. Копія фактичного параметра стає значенням відповідного формального
параметра. Усередині процедури можна проводити будь-які дії з даними формальним
параметром (допустимі для його типу), але ці зміни ніяк не відбиваються на
значенні фактичного параметра, тобто яким він був до виклику процедури, то
таким же і залишиться після завершення її роботи (х, у - параметри-значення).
Іншими словами, передача параметрів по
посиланню. Це ті формальні параметри, перед якими стоїть ідентифікатор var.
Передається адреса фактичного параметра (обов'язково змінної), після цього
формальний параметр стає його синонімом. Будь-які операції з формальним
параметром виконуються безпосередньо над фактичним параметром.
Функція
виглядає майже так само, як і процедура. Єдина відмінність в тому, що заголовок
функції починається з ключового слова Function і закінчується типом
повертаємого цією функцією значення.
Крім
того, в тілі функції обов'язково повинен бути хоча б один оператор присвоювання,
де в лівій частині стоїть ім'я функції або змінна result, а в правій - її
значення.
Приклади кодування допоміжної функції мовою програмування Pascal:
Program Zad1;
var
a,
b, c: integer;
function sum(x, y: integer): integer;
begin
sum
:= x + y;
end;
begin
readln(a, b);
writeln(sum(a, b));
end.
Або так:
Program Zad2;
var
a, b, c: integer;
function sum(x, y: integer): integer;
begin
result := x + y;
end;
begin
readln(a, b);
writeln(sum(a, b));
end.
Завдання А для самостійного опрацювання
Завдання 1. Закодувати процедуру PowerA3(A, B),
що обчислює третю степінь(куб) числа А і
повертає її в змінній В(А - вхідні дані; В - вихідні дані, обидва змінні
є дійсними числами). За допомогою цієї процедури знайти третю степінь для шести
даних чисел.
Завдання 2. Закодувати процедуру Mean(X, Y,
AMean, GMean), що обчислює середнє арифметичне
AMean = (X+Y)/2 і середнє
геометричне GMean = (X * Y)^0.5 двох додатних чисел Х та У повертає її
змінним AMean і GMean відповідно,(Х, У - вхідні дані; Amean,GMean -
вихідні дані, обидва змінні є дійсними числами). За допомогою цієї процедури
знайти середнє арифметичне і середнє геометричне для пари даних чисел(А;В),
(А;С), (А;К), якщо дані А,В,С,К.
Завдання 3. Закодувати процедуру TrianglePS(a,
P, S), що по даній стороні рівностороннього трикутника обчислює його периметр P
= 3*a, площу a*a *(3)^0.5, повертає її змінним P та S відповідно,(а - вхідні дані; P
та S - вихідні дані, обидва змінні є дійсними числами). За допомогою цієї
процедури знайти площу та периметр трикутників для трійки сторін(А;А;А),
(С;С;С), (В;В;В), якщо дані А,В,С.
Завдання 4. Закодувати процедуру
AddRightDigit(Р, K), що доповнює до цілого додатного числа К праворуч цифру Р,
повертає її змінним P та S
відповідно,(К, Р (від 0 до 9)- вхідні цілі дані; К - вихідні дані, обидва змінні
є цілими числами). За допомогою цієї процедури доповнити до даного числа К
праворуч спочатку цифру Р1 а потім доповнити праворуч цифру Р2. Вивести
результат кожного обновлення даного
числа.
Завдання 5. Закодувати процедуру
AddRightDigit(Р, K), що доповнює до цілого додатного числа К ліворуч цифру Р,
повертає її змінним P та S
відповідно,(К, Р (від 0 до 9)- вхідні цілі дані; К - вихідні дані, обидва
змінні є цілими числами). За допомогою цієї процедури доповнити до даного числа
К ліворуч спочатку цифру Р1 а потім доповнити ліворуч цифру Р2. Вивести
результат кожного обновлення даного
числа.
Завдання Б для самостійного опрацювання
Func 21 °. Описати функцію SumRange (A, B) цілого типу, яка знаходить суму всіх цілих чисел від A до B включно (A і B - цілі). Якщо A> B, то функція повертає 0. З допомогою цієї функції знайти суми чисел від A до B і від B до C, якщо дано числа A, B, C.
Func 22. Описати функцію Calc (A, B, Op) дійсного типу, що виконує над ненульовими дійсними числами A та B одну з арифметичних операцій і повертає її результат. Вид операції визначається цілим параметром Op: 1 - віднімання, 2 - множення, 3 - розподіл, інші значення - складання. За допомогою Calc виконати для даних A і B операції, які визначаються даними цілими N 1 , N 2 , N 3 .
Func 13. Описати функцію SortDec3 (A, B, C), яка міняє вміст змінних A, B, C таким чином, щоб їх значення виявилися впорядкованими по спаданню (A, B, C - речові параметри, які є одночасно вхідними та вихідними). За допомогою цієї процедури впорядкувати по спадаючій два даних набору з трьох чисел:
(A 1 , B 1 , C 1 ) і (A 2 , B 2 , C 2 ).
Func 15. Описати процедуру ShiftLeft3 (A, B, C), що виконує лівий циклічний зсув: значення A переходить в C, значення C - в B, значення B - в A (A, B, C - речові параметри, які є одночасно вхідними та вихідними). За допомогою цієї процедури виконати лівий циклічний зсув для двох даних наборів з трьох чисел: (A 1 , B 1 , C 1 ) і (A 2 , B 2 , C 2 ). Func 17. Описати функцію RootCount (A, B, C) цілого типу, яка визначає кількість коренів квадратного рівняння A · x 2 + B · x + C = 0 (A, B, C - речові параметри, A <> 0). З її допомогою знайти кількість коренів для кожного з трьох квадратних рівнянь з даними коефіцієнтами. Кількість коренів визначати за значенням дискримінанта: D = B 2 - 4 * A * C.
В даному розділі розглянуто набір реалізацій А.Нікітін на мові Pascal стандартних алгоритмів, застосовуваних при вирішенні завдань олімпіадного програмування.
- Підрахунок різних букв в слові
- Перестановка букв в слові (циклічний зсув вправо)
- Перевірка рядки на "паліндромний"
- Друк всіх дільників натурального числа A
- Друк всіх скоєних чисел до 10000
- Друк всіх простих чисел до 500
- Підрахунок суми цифр числа
- Підрахунок суми елементів одновимірного масиву
- Підрахунок суми елементів двомірного масиву
- Пошук максимального елемента в масиві
- Пошук мінімального елемента в масиві
- Пошук середнього арифметичного в масиві
- Друк всіх елементів масиву з інтервалу C..D
- Циклічний зсув елементів масиву вправо
- Друк самого часто зустрічається елемента з масиву
- Чи всі елементи масиву різні?
- Сортування масиву "бульбашкою"
- Рішення рівняння: A * x ^ 2 + B * x + C = 0
- Обчислення довжини відрізка | AB |
- Яка точка (A або B) ближче до початку координат
- Обчислення площі трикутника по 3 вершин
- Чи потрапляє точка M (x, y) в коло з центром O (Xc, Yc) і радіусом R
- Перекладу десяткового числа в двійкове
- Перекладу двійкового числа в десяткове
- Перекладу десяткового числа в шістнадцяткове
- Перекладу шістнадцятирічного числа в десяткове
- Рекурсивні алгоритми: знаходження НСД і НСК двох чисел
- Рекурсивні алгоритми: обчислення факторіала
- Рекурсивні алгоритми: генерація перестановок
- Рекурсивні алгоритми: швидке сортування
- Рішення системи 2-х рівнянь з двома невідомими
- Рішення системи 3-х рівнянь з трьома невідомими
- Визначення перетину двох відрізків
- Визначення положення точки відносно сектора
- Положення точки щодо вектора
- Положення точки щодо трикутника (варіант 1)
- Положення точки щодо трикутника (варіант 2)
- Моделювання додавання двійкових чисел
- Моделювання віднімання двійкових чисел
- Зведення цілого числа в натуральну ступінь (варіант 1)
- Зведення цілого числа в натуральну ступінь (варіант 2)
- Множення довгих натуральних десяткових чисел
- Кодування: приклад простий кодування (зрушення по ключу)
- Обробка тексту: підрахунок кількості слів в тексті
- Обробка тексту: виділення слів з тексту
- Обробка тексту: виділення чисел з тексту
- Обробка тексту: дозвіл введення тільки цифр
- Обробка тексту: переклад в маленькі букви (нижній регістр)
- Обробка тексту: переклад в заголовні букви (верхній регістр)
- Обробка тексту: видалення з тексту Комметаріі типу {...}
- Бек-трекінг: Міста
- Бек-трекінг: Прохід по лабіринту
- Бек-трекінг: Доміно
- Бек-трекінг: Послідовність
- Бек-трекінг: Магічний квадрат
Немає коментарів:
Дописати коментар