Студопедия
Новини освіти і науки:
МАРК РЕГНЕРУС ДОСЛІДЖЕННЯ: Наскільки відрізняються діти, які виросли в одностатевих союзах


РЕЗОЛЮЦІЯ: Громадського обговорення навчальної програми статевого виховання


ЧОМУ ФОНД ОЛЕНИ ПІНЧУК І МОЗ УКРАЇНИ ПРОПАГУЮТЬ "СЕКСУАЛЬНІ УРОКИ"


ЕКЗИСТЕНЦІЙНО-ПСИХОЛОГІЧНІ ОСНОВИ ПОРУШЕННЯ СТАТЕВОЇ ІДЕНТИЧНОСТІ ПІДЛІТКІВ


Батьківський, громадянський рух в Україні закликає МОН зупинити тотальну сексуалізацію дітей і підлітків


Відкрите звернення Міністру освіти й науки України - Гриневич Лілії Михайлівні


Представництво українського жіноцтва в ООН: низький рівень культури спілкування в соціальних мережах


Гендерна антидискримінаційна експертиза може зробити нас моральними рабами


ЛІВИЙ МАРКСИЗМ У НОВИХ ПІДРУЧНИКАХ ДЛЯ ШКОЛЯРІВ


ВІДКРИТА ЗАЯВА на підтримку позиції Ганни Турчинової та права кожної людини на свободу думки, світогляду та вираження поглядів



Інструкція If... Then... Else...

 

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

Задача 53. Використовуючи команду розгалуження скласти програму знаходження модуля числа.

То наш розв’язок мав би вигляд:

program module;

var а : real;

begin

readln (a);

if а < 0 then а := –a;

writeln (‘ Модуль введеного числа ’, a);

readln

end.

В загальному вигляді конструкція розгалуження має вигляд:

if < умова > then < дія1 >

else < дія2 >;

В загальному випадку після слова then, так само як і після слова else може стояти не одна дія, а декілька. В цьому випадку всі команди, що йдуть після відповідного слова слід брати в операторні дужки begin ... end. Якщо в деякому розгалуженні має місце нове розгалуження, то кажуть, що таке розгалуження є складним або вкладеним. Необхідно пам’ятати ще два правила:

n перед командою else крапку з комою ні в якому випадку ставити не можна;

n команда else завжди стосується останнього оператора if, для якого немає команди else.

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

Для прикладу розв’яжемо повністю класичну задачу з шкільного курсу інформатики, яку ми вже згадували раніше.

Задача 54. Скласти програму розв’язання квадратного рівняння.

Розв’язання : В загальному вигляді квадратне рівняння має вигляд:

ax2 + bx + c = 0

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

program kwur;

label 10,20,30;

var a,b,c,d,x1,x2 : real;

begin

writeln( ‘ Програма розв’’язує квадратнi рiвняння! ’);

writeln(‘ Загальний вигляд квадратного рiвняння: ’);

writeln( ‘ Ax*x + B*x + C = 0 ’);

writeln( ‘ Введiть коефiцiєнти: ’);

10: write( ‘A = ’);readln(a);

if a = 0 then begin

writeln( ‘Цей випадок роз’’вяжiть самi. ’);

goto 10;

end;

20: write( ‘B = ’);readln(b);

if b = 0 then begin

writeln( ‘ Цей випадок розв’’яжiть самi. ’);

goto 20;

end;

30: write( ‘C = ’);readln(c);

if c = 0 then begin

writeln( ‘ Цей випадок розв’’яжiть самi. ’);

goto 30;

end;

d := b*b - 4*a*c;

if d > 0 then begin

writeln( ‘ Рiвняння має два коренi: ’);

x1 := (-b-sqrt(d))/(2*a);

x2 := (-b+sqrt(d))/(2*a);

writeln( ‘x1 = ’,x1:2:2, ‘ x2 = ’,x2:2:2);

end

else if d = 0 then begin

writeln( ‘ Рiвняння має один корiнь: ’);

x1 := -b/(2*a);

writeln( ‘x = ’,x1:2:2);

end

else writeln( ‘ Дане рiвняння коренiв не має. ’);

readln;

end.

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

Задача 55. На площині задано три точки своїми координатами. Чи лежать точки на одній прямій.

Розв’язання:Розв’язок здається напрошується: знайти відстань між всіма трьома точками і якщо сума двох з них дорівнює третій, то точки лежать на одній прямій, в противному випадку – ні. Що ж , перевіряємо:

program pixel3;

var x1,x2,x3,y1,y2,y3 : integer;

d1,d2,d3 : real;

begin

writeln('Координати точки А:');

write('Ха = ');readln(x1);

write('Ya = ');readln(y1);

writeln('Координати точки B:');

write('Хb = ');readln(x1);

write('Yb = ');readln(y1);

writeln('Координати точки C:');

write('Хc = ');readln(x1);

write('Yc = ');readln(y1);

{ Перевірка на підставі описаного вище способу }

d1 := sqrt(sqr(x1-x2)+sqr(y1-y2));

d2 := sqrt(sqr(x1-x3)+sqr(y1-y3));

d3 := sqrt(sqr(x2-x3)+sqr(y3-y3));

if (d1 = d2 + d3) or (d2 = d1 + d3) or (d3 = d1+d2)

then writeln('На однiй прямiй.')

else writeln('Не на однiй прямiй.');

readln

end.

Але давайте подумаємо, чи не можна розв’язати задачу іншим способом? Виявляється можна, для цього потрібно просто пам’ятати рівняння прямої, що проходить через дві точки виражене через координати, яке вивчалось на уроках геометрії. Ви можете сказати: так то через дві точки, а в нас їх аж три! Вірно, тим краще! Чому – спробуйте здогадатись самі і лише після цього приступайте до самостійної реалізації запропонованого способу. Якщо ж ні – то вам пропонується другий варіант розв’язання, детально розібравшись з яким ви, мабуть, вже не забудете рівняння прямої. Отже, спосіб другий:

program pixel3а;

var x1,x2,x3,y1,y2,y3 : integer;

begin

writeln('Координати точки А:');

write('Ха = ');readln(x1);

write('Ya = ');readln(y1);

writeln('Координати точки B:');

write('Хb = ');readln(x2);

write('Yb = ');readln(y2);

writeln('Координати точки C:');

write('Хc = ');readln(x3);

write('Yc = ');readln(y3);

{ Перевірка на підставі рівняння прямої }

if (х1 – х2)*(х3 – х2) – (у1 – у2) * (у3 – у2) = 0

then writeln('На однiй прямiй.')

else writeln('Не на однiй прямiй.');

readln

end.

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

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

Дану просту задачу ми привели з однією метою: відмітити той важливий момент, що очевидне не завжди найкраще. Крім того, потрібно завжди дотримуватись правила (і не тільки при програмуванні): рішив поставлену задачу – добре, але пошукай інший спосіб – практично завжди він є! Знайшовши декілька способів розв’язання постав себе перед вибором – а який з них кращий? Ось вам ще одна демонстрація необхідності робити вибір в реальному житті. А якщо дотримуватись цього правила при вирішенні життєвих проблем, то запевняємо – успіх вам гарантовано!

Розглянемо ще одну цікаву задачу, яка також легко розв’язується з застосуванням рівняння прямої.

Задача 56. Два відрізки задано координатами своїх кінців. Визначити, чи перетинаються дані відрізки.

Розв’язання: Згадайте те, про що ми говорили раніше: очевидне не завжди найкраще! А це значить, що нам не потрібно шукати точку перетину відрізків, ми поступимо іншим чином. Будемо розглядати точки кінців одного відрізку відносно іншого відрізку. З геометрії відомо, що два відрізки перетинаються тоді і тільки тоді, коли кінці одного відрізку лежать в різних півплощинах відносно прямої, що проходить через інший відрізок. Причому потрібно розглядати обидва відрізка. Той факт, що дві точки лежать відносно прямої в різних півплощинах можна записати з використанням рівняння прямої таким чином:

Для точок С і D відносно прямої АВ:

((Xc-Xa)(Xb-Xa) - (Yc-Ya)(Yb-Ya))Ч((Xd-Xa)(Xb-Xa) - (Yd-Ya)(Yb-Ya))<0

Для точок A і B відносно прямої CD:

((Xa-Xc)(Xd-Xc) - (Ya-Yc)(Yd-Yc))Ч((Xb-Xc)(Xd-Xc) - (Yb-Yc)(Yd-Yb))<0

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

program line2;

var x1,x2,x3,x4,y1,y2,y3,y4 : integer;

begin

writeln('Координати точки А:');

write('Ха = ');readln(x1);

write('Ya = ');readln(y1);

writeln('Координати точки B:');

write('Хb = ');readln(x2);

write('Yb = ');readln(y2);

writeln('Координати точки C:');

write('Хc = ');readln(x3);

write('Yc = ');readln(y3);

writeln('Координати точки D:');

write('Хd = ');readln(x4);

write('Yd = ');readln(y4);

if (((x3-x1)*(x2-x1)-(y3-y1)*(y2-y1))*((x4-x1)*(x2-x1)-(y4-y1)*(y2-y1))<=0) and

(((x1-x3)*(x4-x3)-(y1-y3)*(y4-y3))*((x2-x3)*(x4-x3)-(y2-y3)*(y4-y3))<=0)

then writeln('Перетинаються.')

else writeln('Не перетинаються');

readln

end.


Читайте також:

  1. Інструкція
  2. Інструкція Case
  3. Інструкція з діловодства
  4. Інструкція з організації інкасації коштів та перевезення валютних цінностей у банківських установах в Україні
  5. ІНСТРУКЦІЯ З ОРГАНІЗАЦІЇ ТА ВПРОВАДЖЕННЯ СИСТЕМИ ІНФЕКЦІЙНОГО КОНТРОЛЮ В АКУШЕРСЬКИХ СТАЦІОНАРАХ
  6. Інструкція по використанню графічного інтерфейсу прикладу
  7. Інструкція та пояснювальна записка
  8. Інструкція щодо використання засобів аптечки індивідуального медичного захисту (АІМЗ)
  9. Посадова інструкція




Переглядів: 1002

<== попередня сторінка | наступна сторінка ==>
Поняття розгалуження і вибору. | Інструкція Case

Не знайшли потрібну інформацію? Скористайтесь пошуком google:

  

© studopedia.com.ua При використанні або копіюванні матеріалів пряме посилання на сайт обов'язкове.


Генерація сторінки за: 0.093 сек.