Я готуюсь до курсу інформатики. Алгоритмізація та програмування



Сторінка9/9
Дата конвертації19.02.2016
Розмір1.47 Mb.
1   2   3   4   5   6   7   8   9

УРОК 34. ДОПОМІЖНІ АЛГОРИТМИ

Мета уроку Дати поняття про допоміжні алгоритми, типи допоміжних алгоритмів, оформлення підпрограм мовою Паскаль, поняття про формальні та фактичні параметри, області дії змінних.


Теоретичний матеріал
Підпрограмою називається іменована, логічно закінчена група операторів мови, яку можна викликати для виконання будь-яку кількість разів із різних місць програми. У мові Паскаль для організації підпрограм використовуються процедури і функції.
Процедура - це незалежна пойменована частина програми, призначена для виконання певних дій. Вона складається з тіла і заголовка. За структурою її можна розглядати як програму в мініатюрі. Після однократного опису процедуру дозволяється викликати за іменем з наступних частин програми. Використання імені процедури в програмі називається викликом процедури. Ім’я процедури не може знаходитися у виразі у якості операнду.
Функція відрізняється від процедури тим, що, по-перше, передає в точку виклику скалярне значення (результат своєї роботи), а по-друге, ім’я функції може входити до виразів, як операнд. Усі процедури і функції мови Паскаль підрозділяються на дві групи вбудовані; визначені користувачем.
Вбудовані (стандартні) процедури і функції є частиною мови і можуть викликатися за іменем без попереднього опису в розділі описового блоку. З багатьма з них ви вже ознайомилися в попередніх розділах.
Процедури і функції користувача організовуються самим програмістом відповідно до синтаксису мови і являють собою локальні блоки. Попередній опис процедур і функцій користувача є обов’язковим.
Функція, визначена користувачем, складається із заголовка і тіла функції. Заголовок містить зарезервоване слово Function, ідентифікатор (ім’я) функції та вміщений у круглих дужках необов’язковий список формальних параметрів і тип значення, що повертається функцією.
Формат опису
Function <ім’я> [ (формальні параметри) ] <тип результату>;
Ім’я функції - унікальний у межах блоку ідентифікатор. Результат, що повертається, може мати будь-який простий тип і тип string.
Тіло функції являє собою локальний блок, за структурою аналогічний програмі
Function <ім’я> [ (формальні параметри) ] <тип результату;»;
[<розділи описів>;]
begin
<розділ операторів>
end;
У розділі операторів повинен перебувати хоча б один оператор, що присвоює ідентифікатору функції значення. Якщо таких операторів декілька, то результатом виконання функції буде значення останнього оператора присвоювання.
Звертання до функції здійснюється за іменем з необов’язковою вказівкою списку аргументів. Кожен аргумент повинен відповідати формальним параметрам, зазначеним у заголовку, і мати той самий тип.
Формат звертання
Y <ідентифікатор функції > [(фактичні параметри)];
Функції можуть повертати значення цілих, дійсних, булівских, літерних і рядкових типів.
Опис процедури включає заголовок (ім’я) і тіло процедури. Заголовок складається з зарезервованого слова Procedure, ідентифікатора (імені) процедури і необов’язкового списку формальних параметрів із вказівкою їх типу, який укладається в круглі дужки.
Формат опису
Procedure <ім’я> [(формальні параметри)];
Приклад
Procedure Korrekt;
Procedure Sort (Abyte);
Ім’я процедури - ідентифікатор, унікальний у межах програми. Тіло процедури являє собою локальний блок, за структурою аналогічний програмі
Procedure <ім’я> [(формальні параметри)];
[<розділи описів>;]
begin <розділи операторів>
end;
Зверніть увагу, що як формальні параметри, так і розділ описів у процедурі може бути відсутній. Щоб звернутися до процедури, треба використати оператор виклику процедури. Він складається з ідентифікатора (імені) процедури і списку фактичних параметрів, що відділені один від одного комами і знаходяться у круглих дужках. Якщо процедурі не передається ніяких параметрів, то фактичні параметри не вказуються.
Формат виклику процедури
<ідентифікатор> [(фактичні параметри)];
Параметри забезпечують механізм заміни, який дає змогу виконувати процедуру з різними початковими даними. Між фактичними параметрами в операторі виклику процедури і формальними параметрами у заголовку опису процедури встановлюється взаємо-однозначна відповідність у результаті їхнього перебору зліва направо. Фактичні параметри за кількістю і типами повинні дорівнювати кількості і типам формальних параметрів.
Параметри, за допомогою яких здійснюється обмін значеннями змінних між підпрограмами та програмою, що їх викликає, можуть мати будь-який тип, зокрема структурований. Існують два типи параметрів
• параметр-значения;
• параметр-змінна.
Група параметрів, перед якими відсутнє зарезервоване слово Var, називається параметрами-значениями. Наприклад, в описі Procedure Korrect (S, К real) S і К - параметри-значення. Формальний параметр-значения обробляється як локальна стосовно процедури або функції змінна. Зміни формальних параметрів-значень не впливають на відповідні значення фактичних параметрів.
Група параметрів, перед якими знаходиться ключове слово Var, називається параметрами-змінними. Наприклад, в описі Procedure Obr(Var А, В integer) А та В - парам етри-змінні. Параметр-змінна використовується в тому випадку, коли значення повинно бути передане з процедури в блок, що її викликає. При активізації процедури або функції формальний параметр-змінна заміщується фактичною змінною, а тому будь-які зміни в значенні формального параметру-змінної відбиваються на фактичному параметрі.
І в тому, і в іншому випадку тип фактичного параметру повинен збігатися з типом формального параметру. Якщо формальний параметр має рядковий тип, йому надається атрибут довжини, рівний 255, а тому й фактичний параметр у цьому випадку повинен також мати рядковий тип з атрибутом довжини, що дорівнює 255. У якості параметра-змінної може використовуватися будь-який тип, зокрема файловий.
Область дії ідентифікаторів.
Для правильного визначення області дії ідентифікаторів під час використання в програмі процедур і функцій необхідно дотримуватися наступних правил Кожний ідентифікатор повинен бути описаний перед тим, як він буде використаний. Ідентифікатор діє у межах блоку, в якому він описаний. Всі ідентифікатори в одному блоці повинні бути унікальними, тобто не повторюватися. Однакові ідентифікатори можуть бути по-різному визначені у кожному окремому блоці, але це вважається поганим стилем програмування і тому не рекомендується в різних блоках програми використовувати змінні з однаковими іменами. Якщо ідентифікатор підпрограми користувача збігається з ім’ям стандартної процедури або функції, то вони стають недоступними в межах області дії підпрограми, оголошеної користувачем, тобто стандартна функція ігнорується, а виконується програма користувача.
Наприкінці уроку рекомендуємо перевірити засвоєння матеріалу на запитаннях для самоконтролю. Крім того, можна запропонувати учням деякі тестові завдання, наприклад, такого типу.
ЗАДАЧА №415
Умова Нехай в програмі описано такі процедури
Procedure Р(х,уinteger);
Begin y=x+l; End;
Procedure Q(xinteger; var у integer);
Begin y=x+1; End;
Procedure R(var x,yinteger);
Begin y=x+1; End;
Визначити, що буде надруковано в результаті виконання таких операторів
Очікувана відповідь
с=2; d=1; P(c,d); writeln(d); — на екрані буде 1
с=2; d=l; Q(c,d); writeln(d); — на екрані буде 3
с=2; d=1; R(c,d); writeln(d); —на екрані буде 3
Чи припустиме таке звертання до вищезазначених процедур?
Очікувана відповідь
P(sqrt(c),d) — так
Р(с,2) — так
Q(sqrt(c),d) — так
R(1,d) — ні
R(c,2) — ні
Пояснення до відповідей наступні фактичне значення параметру-значення може бути константою, змінною або виразом, а параметру-змінної - тільки іменем змінної.
ЗАДАЧА №416 (1)
Умова Знайдіть і поясніть помилки в записі функцій
Function max(ninteger)rea
Var a,maxreal;
Begin
Read (max) ;
For i=1 to n-1 do
Begin Read(a); If a>max then max=a; End;
End;
Очікувана відповідь учнів
• У функції описана внутрішня локальна змінна max, ім’я якоїзбігається з іменем функції, а це неприпустимо, тому що вони обидві єлокальними для даної функції та не можуть мати однакові імена.
• Якщо все ж таки ім’я функції max, то неможливе використання його в операторах read(max) та if a>max, тому що ми отримуємо самовиклик функції, а це може призвести до помилки.
• В операторах readfmax) та if a>max помилка, якщо max - ім’я функції,тому що після імені функції в момент її виклику повинні знаходитись удужках фактичні параметри, кількість та тип яких мають збігатися зкількістю та типом фактичних параметрів даної функції (в даному випадкуфактичний параметр повинен бути один).
• Якщо в програмі не існує глобальна змінна і, то вона залишаєтьсянеописаною в підпрограмі.
Домашнє завдання
• прочитати сторінки 148-155 запропонованого підручника,
• задачі №413, №414, №415(2), № 416(2).

УРОК 35. ВИКОРИСТАННЯ ПРОЦЕДУР

Мета уроку Дати поняття про допоміжні алгоритми, типи допоміжних алгоритмів, оформлення підпрограм (процедур) мовою Паскаль.


На початку уроку рекомендується провести опитування у письмовому чи усному вигляді для закріплення теоретичного матеріалу попереднього уроку (поняття допоміжного алгоритму, типи допоміжних алгоритмів, передача параметрів у допоміжний алгоритм, локальні та глобальні, фактичні та формальні параметри тощо).
Після цього рекомендується розв’язати з учнями кілька задач.
ЗАДАЧА № 417
Умова Баба-Яга записалася на курси водіїв літальних апаратів. Але справи в неї були кепські, бо вона ніяк не могла запам’ятати, яким чином визначається тривалість польоту, якщо відомі швидкість і відстань. Довелося їй звернутися по допомогу до Хлопчика-Мізинчика, який швиденько написав їй шпаргалку, куди Бабі-Язі треба було лише підставити свої значення. Як виглядала послідовність дій у цій шпаргалці і як нею користувалася Баба-Яга?
Розв’язування Очевидно, що «шпаргалку» Хлопчика-Мізинчика можна оформити як допоміжний алгоритм. Параметрами, що передаються у цей алгоритм, будуть швидкість літального апарату та відстань, яку необхідно подолати, а вихідним параметром - шукана тривалість польоту. Вхідні параметри процедури повинні бути параметрами-значениями, а вихідний параметр - параметром-змінною. Позначимо у підпрограмі формальні параметри наступним чином V - швидкість літального апарату; S -відстань, що необхідно подолати; Т - тривалість польоту.
В основній програмі ті самі змінні будуть мати відповідно імена X, Y та М (імена змінних у основній програмі бажано, щоб не збігалися з іменами локальних параметрів підпрограми, тому їх вибір є випадковим).
Спробуємо на цьому уроці оформити допоміжний алгоритм як процедуру. Тоді вихідна програма буде мати наступний вигляд
Program Example_417;
Uses crt; (Підключення бібліотеки}
Procedure Solution (V,S - real; var T - time);
Begin T=S/V; End;
Var X,Y,Mreal;
Begin
Clrscr;
Write(‘Введіть швидкість літального апарату ‘);
Readln(X);
Write(‘Введіть відстань між населеними пунктами ‘);
Readln(Y);
If (X<=0) or (Y<0) then writeln(‘He коректні вхідні дані.’)
else
begin
Solution(X,Y,M); {Виклик процедури}
Writeln(‘Тривалість польоту -> ‘,М62);
end;
Readkey;
End.
ЗАДАЧА № 463
Умова Створити підпрограму, яка б із тексту S вилучала вказаний символ х і обчислювала кількість вилучень. У програмі організувати виклик цієї підпрограми.
Розв’язування Очевидно, що підпрограма, яка виконує дану задачу, повинна мати три формальних параметри. Позначимо їх наступним чином S - заданий текст (змінна рядкового типу string); x - символ, що підлягає вилученню (змінна символьного типу char); count - кількість вилучень (числова змінна цілого типу, наприклад byte).
Параметр х повинен бути параметром-значенням (вхідний параметр), а параметри 5 та соип/параметрами-змінними (вихідні параметри). Рядок 5 фактично є і вхідним, і вихідним, тому що за умовою задачі саме в ньому необхідно здійснити вилучення заданих символів.
Для виконання поставленої задачі, на наш погляд, зручніше використовувати цикл з передумовою, тому що після вилучення символів з рядку він змінює свою довжину, і використання циклу з параметром (for) може призвести до помилки. Крім того, зверніть увагу на те, що зміна індексу і (номер поточної позиції рядка) виконується тільки у випадку, якщо шуканий символ не знайдено. Це пов’язано з тим, що рядок може містити цей символ у сусідніх позиціях, і після вилучення поточного символу на ту саму позицію попадає знову шуканий символ.
Оформлення основної програми, на наш погляд, не повинно викликати сумнівів. Зазначимо лише, що відповідні фактичні параметри у запропонованій програмі будуть називатися Л (заданий текст), ch (символ, що підлягає вилученню), ^(кількість вилучень). Програма, що виконує запропонований алгоритм, має наступний вигляд
Program Example_463;
Uses crt; (Підключення бібліотеки}
Procedure Solution (xchar; var Sstring; var countbyte);
var іbyte; (локальна змінна для організації циклу}
Begin
count=0; і=1;
while i<=length(S) do
begin
if S[i]=x
then
begin
count=count+l;
delete(S,i,l);
end
else i=i+1;
end;
End;
Var Astring; chchar; Nbyte;
Begin
clrscr;
writeln(‘Введіть текст ‘);
readln(A);
write(‘Введіть шуканий символ ‘);
readln(ch);
Solution(ch,A,N);
writeln(‘Результуючий текст ‘,A);
writeln(‘Кількість виконаних вилучень ‘,N);
readkey;
End.
Домашнє завдання
• повторити теоретичний матеріал за попередні уроки;
• задачі з запропонованого підручника №419, №424, №426, №430.
1   2   3   4   5   6   7   8   9


База даних захищена авторським правом ©refs.in.ua 2016
звернутися до адміністрації

    Головна сторінка