Розробка уроку — практичної роботи

Тема: використання процедур і функцій у задачах «Розв'язування трикутників».

Мета: Навчитися створювати алгоритмічні структури з використанням процедур і функцій в середовищі програмування Pascal. Після виконання роботи учень:

Обладнання: ПК з встановленою ОС і середовищем Free Pascal.

Структура уроку

  1. Організаційний момент.
  2. Актуалізація опорних знань.
  3. Теоретичний матеріал.
  4. Інструктаж з ТБ.
  5. Вироблення практичних навичок.
  6. Підбиття підсумків уроку.
  7. Домашнє завдання.

Хід уроку
1. Організаційний момент
Вітання з класом. Перевірка присутності і готовності учнів до уроку. Перевірка виконання домашнього завдання.

2. Актуалізація опорних знань
Опиcати структуру програми мовою Pascal і порівняти з поданим описом.

Програму зазвичай, але не обов'язково, починають заголовком такого вигляду:

program <назва програми>

Описова частина містить опис всього, що буде надалі використано у програмі:

uses <назва1>,<назва2> ...; — приєднання бібліотек та модулів;

label <назва1>,<назва2> ...;— оголошення (перелік) міток;

type
<назва1>=<опис1 через наявні типи>;
<назва2>=<опис2 через наявні типи>
...; — опис типів даних;

const
<назва1>[:тип]=<значення1>;
<назва2>[:тип]=<значення2>
...; — оголошення сталих (величин), значення яких не буде змінено протягом виконання програми. При спробі змінити сталу буде вказано на помилку на етапі компіляції;

var <назва1>, <назва2>... :<тип> — оголошення змінних;

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

begin <вказівка1>; <вказівка2>... end.

При виконанні завдань потрібно скористатися поданими нижче співвідношеннями.

Позначимо:
через a, b, c — сторони довільного трикутника;
через A, B, C — відповідні протилежні внутрішні кути цього трикутника.

Справджуються такі співвідношення:

 (1)      A + B + C = 180° ;

 (2)      c2 = a2 + b2 – 2ab cos С ;

(3)    sin A
a
= sin B
b
= sin C
c
·

Рівність (1) записано для градусної міри кутів. Крім неї ще є так звана радіанна міра кутів, яка відразняється від радіанної міри множником π/180°. Тут π = 3,14159 26535 89793… — (ірраціональне) число Піфагора — відношення довжини кола до його діаметра. Тригонометричні функції у середовищі програмування визначено саме для радіанної міри кутів. Тому, якщо кути у вхідних даних задано у градусній мірі, для подальших розрахунків потрібно перевести її у радіанну, помноживши на π/180°.

Рівність (2) у шкільному курсі геометрії називають теоремою косинусів, рівність (3) — теоремою синусів. Запишемо наслідки рівностей (1–3):

 (4)      A = 180° – BC ;
________________
 (5)     c2= a2 + b2 – 2ab cos С ;

 (6)     cos C a2 + b2c2
2ab
;

 (7)    sin A a · sin B
b
;

 (8)    a b · sin A
sin B
,

у яких 3 пари літер: (a; A), (b; B) і (с; С) можна переставляти місцями.

Рівності (4–8) використовують для розв'язування задач знаходження всіх кутів і сторін трикутника за відомими:

На жаль, мова Pascal серед обернених тригонометричних функцій передбачає лише використання лише функції arctg. Для виконання поставленого далі завдання практичної роботи потрібно буде скористатися такими твердженнями для кутів трикутника, що лежать строго між 0 і π:

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

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

3. Вивчення нового матеріалу

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

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

Де розташовують підпрограми у програмі? У програмі опис процедур і функцій потрібно розташувати між розділам опису типів, міток, глобальних сталих і змінних і тілом головної програми.

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

Як оформлюють підпрограму? Її оформлюють подібно основній програмі: заголовок + розділ описів + розділ операторів.

Що таке глобальні й локальні величини? Величини, назви яких подано в розділі описів основної програми, називають глобальними. Їх використовують і в основній програмі, і у підпрограмах. Величини, назви яких подано в розділі описів підпрограми, називають локальними. До них звернутися можна лише у межах підпрограми.

Два види підпрограм:

Тут <…> — обов'язкова складова, […] — необов'язкова складова. Дужки <, >, [ і ] у самому описі відсутні.

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

var ag,ar: real;
function gr(a: real): real;
begin
  gr:=a*pi/180;
end;
BEGIN
  write('Ввести градусну міру кута ');
  readln(ag);
  ar:=gr(ag);
  writeln('Радіанна міра кута ', ar:0:8)
END.

Подамо приклад програми з використанням процедури, що робить те саме.

var ag,ar: real;
procedure gr(a: real; var b: real);
begin
  b:=a*pi/180;
end;
BEGIN
  write('Ввести градусну міру кута ');
  readln(ag);
  gr(ag,ar);
  writeln('Радіанна міра кута ', ar:0:8)
END.

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

Програма може містити багато процедур і функцій. У кожній з них можна описати типи, сталі й змінні. Але кожний опис має строго окреслену сферу дії.

Якщо опис процедури (функції) А розташовано всередині опису процедури (функції) В, то процедуру (функцію) А називають внутрішньою відносно В. Якщо з двох процедур (функцій) жодна не є внутрішньою відносно іншої, то ці процедури (функції) називають зовнішніми одна відносно іншої. Сфера дії опису будь-якого об'єкта включає ту процедуру, де його описано (починаючи з місця опису) і всі внутрішні процедури (функції), якщо там даний ідентифікатор не описано. Це дає можливість передавати інформацію у процедури і функції, минаючи параметри, тобто користуватися у внутрішній процедурі (функції) змінними, описаними зовні. Такий стиль програмування вважають ненадійним. Намагайтеся, якщо це можливо, всі змінні, використані у процедурі (функції), описувати саме в цій процедурі.

Багато програмістів-початківців уникають процедур і функцій, стверджуючи, що «без них простіше». Насправді, обійтися без функцій і процедур легко лише в найпростіших програмах. Складна програма, записана «одним шматком», зазвичий вимагає при налагодженні від програміста величезних зусиль, які часто все одно пропадають марно. Обов'язково використовуйте у своїх програмах процедури і функції! Ідеальна (з точки зору викладача інформатики) програма має містити лише звернення до процедур і функцій. Звичайно, не існує ніяких жорстких правил, що визначають, коли використовувати функції, а коли ні. Подамо кілька корисних порад:

Мета використання процедур і функційструктурувати текст програми, зробити його доступнішим для сприйняття. Це надзвичайно важливо при створенні і впровадженні колективних (корпоративних) проектів, коли не одна людина створює, використовує або пристосовує до нових умов програму.

4. Інструктаж з ТБ
5. Вироблення практичних навичок

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

Завдання 1. Ознайомитися з текстом програми:

var a ,b ,c,     {сторони трикутника}
    A_,B_,C_: real; {кути трикутника}
       { Сюди вставляти описи функцій і процедур }
BEGIN
write('Ввести довжини сторін, а потім - градусні '
 'міри відповідних внутрішніх кутів трикутника ');
readln(a,b,c,A_,B_,C_);
A_:=A_*Pi/180;
B_:=B_*Pi/180;
C_:=C_*Pi/180;
writeln('Сторони:           ', a:9:3, b:9:3, c:9:3);
writeln('Кути (у радіанах): ',A_:9:3,B_:9:3,C_:9:3);
       { Сюди вставляти виклики функцій і процедур }
A_:=A_*180/Pi;
B_:=B_*180/Pi;
C_:=C_*180/Pi;
writeln('Сторони:           ', a:9:3, b:9:3, c:9:3);
writeln('Кути (у градусах): ',A_:9:3,B_:9:3,C_:9:3);
END.

Ця програма виводить запрошення ввести довжини сторін і градусні мірі внутрішніх кутів трикутника, а виводить (у форматі :9:3) ті самі довжини сторін і радіанні мірі внутрішніх кутів трикутника, а потім — довжини сторін і градусні мірі внутрішніх кутів трикутника.

Завдання 2. Вставити у текст програми опис функцій:

Результат записати у з назвою номер Вашого прізвища у класному журналі_2.pas у вказану вчителем теку.

Завдання 3. Порівняти отримане з демонстраційним розв'язанням завдання 2.

Завдання 4. Доповнити код програми описом 4 процедур p1, p2, p3 i p4 з трьома параметрами-значеннями і трьома параметрами-змінними для визначення трьох невідомих елементів трикутника за трьома відомими:

Результат записати у з назвою номер Вашого прізвища у класному журналі_4.pas у вказану вчителем теку.

Завдання 5. Порівняти отримане з демонстраційним розв'язанням завдання 4.

Завдання 6.

  1. Використовуючи можливості текстового редактора, скопіювати у текст головної програми текст.

  2. Замінити у цьому тексті три крапки … на виклик процедури: p1, p2 або p3 залежно від того, за якими елементами потрібно здійснити пошук інших:

    • за двома сторонами і кутом між ними;
    • за двома сторонами і кутом, що не лежить між ними;
    • за стороною і прилеглими до неї кутам.
  3. Результат записати у файл з назвою номер Вашого прізвища у класному журналі_6.pas у вказану вчителем теку.

Завдання 7. Порівняти отримане з демонстраційним розв'язанням завдання 6.

6. Підбиття підсумків уроку
Виставлення оцінок.

7. Домашнє завдання

  1. У разі потреби завершити виконання практичної роботи.
  2. Провести тестування програми для таких вхідних і вихідних даних.
Вхідні дані
a, b, c, A, B, C
Вихідні дані
a, b, c, A, B, C
5 0 0 0 30 45 5.000 2.588 3.660 105.000 30.000 45.000
20 0 0 75 60 0 20.000 17.932 14.641 75.000 60.000 45.000
35 0 0 0 40 12035.000 65.778 88.623 20.000 40.000 120.000
0 12 0 36 25 0 16.690 12.000 24.834 36.000 25.000 119.000
0 0 14 64 48 0 13.571 11.221 14.000 64.000 48.000 68.000
12 8 0 0 0 60 12.000 8.000 10.583 79.107 40.893 60.000
7 23 0 0 0 130 7.000 23.000 28.017 11.034 38.966 130.000
0 9 17 95 0 0 19.917 9.000 17.000 95.000 26.754 58.246
0 14 10 145 0 022.921 14.000 10.000 145.000 20.508 14.492
32 0 23 0 152 032.000 53.411 23.000 16.336 152.000 11.664
24 0 18 0 15 0 24.000 8.090 18.000 129.837 15.000 35.163
2 3 4 0 0 0 2.000 3.000 4.000 28.995 46.567 104.478
7 2 8 0 0 0 7.000 2.000 8.000 53.576 13.291 113.132
4 5 7 0 0 0 4.000 5.000 7.000 34.048 44.415 101.537
15 24 18 0 0 0 15.000 24.000 18.000 38.625 92.866 48.509
23 17 39 0 0 0 23.000 17.000 39.000 14.970 11.007 154.024
55 21 38 0 0 0 55.000 21.000 38.000 135.585 15.499 28.917
12 5 0 120 0 0 12.000 5.000 8.692 120.000 21.152 38.848
27 9 0 138 0 0 27.000 9.000 19.632 138.000 12.888 29.112
34 12 0 164 0 034.000 12.000 22.304 164.000 5.583 10.417
2 4 0 60 0 0 Розв'язку немає
6 8 0 30 0 0 6.000 8.000 11.400 30.000 41.810 108.190
6 8 0 30 0 0 6.000 8.000 2.456 30.000 138.190 11.810

Двома останніми рядками подано випадок двох різних розв'язків для значень 1 і 2 парамента i демонстраційного розв'язання.


Текст упорядкувал Олег Миракбарович Мирфайзиєв, вчитель Русанівського ліцею Дніпровського району міста Києва, під час виконання випускної роботи на курсах підвищення кваліфікації з 24.11.2014 по 12.12.2014.