Лабораторна робота №3
(модуль 1)
Тема: Програмування розгалужень. (2 години)
Мета: Сформувати навички і вміння застосовувати оператори розгалуження мови Pascal для розв’язування задач. Розвивати логічне мислення при складанні алгоритмів.
Література:
Архангельский А.Я. Язык Pascal и основы программирования в Delphi
Ахо А., Хопкрофт Дж., Ульман Дж. Построение и анализ вычислительных алгоритмов.– М.: Мир, 1979.– 536 с.
Венц А. Н. Профессия – программист.– Ростов: Изд-во «Феникс», 1999.– 384 с.
Виноградов И.М. Основы теории чисел.– М.: Наука, 1972.– 167 с.
Вирт Н.. Алгоритмы + структуры данных = программы. Москва, Мир, 1985 г. 406 с.
Вирт Н.. Алгоритмы и структуры данных. Москва, Мир, 1989 г. 420 с.
Гусева А.И. Учимся информатике: задачи и методы решения.– М.: «Диалог – МИФИ», 1998.– 320 с.
Кормен Т., Лейзерсон Ч., Ривест Р. Алгоритмы. Построение и анализ.– М.: МЦНМО, 1999.– 960 с.
Короткі теоретичні відомості.
Умови використовуються в програмах для організації розгалужень і дій, що повторюються. Умовою в мові є логічний вираз - вираз типу Boolean. Булеві значення – це логічні істинностні значення: True (істина) і False (хибність).
Цей тип даних, як і інші прості типи даних, упорядкований. На ньому визначені функції Ord, Succ, Pred.
Таким чином, мають місце наступні співвідношення:
False < True,
Ord (False)=0, Ord (True)=1,
Succ (False)=True, Pred (True)=False.
На множині < False, True > визначені логічні операції.
Операції:
And - логічна кон’юнкція ( і )
Or - логічна диз’юнкція ( або )
Not - логічне заперечення ( ні )
Ці операції визначаються наступними таблицями істинності:
Відношення, що були визначені раніше для простих стандартних типів, є операціями, результат яких має логічний тип. Іншими словами, булеве значення дає будь-яка з операцій відношень : =, < > , <= , < , > , >= , in.
Для типу Boolean визначені стандартні функції, які приймають значення цього типу (логічні значення):
Odd(Х) { Odd(Х) = True, якщо Х - ціле непарне число; Odd(Х) = False, якщо Х - ціле парне число}
Eoln(F) { кінець рядка в текстовому файлі}
Eof(F) { кінець файла}
Функції Eoln(F) і Eof(F) ми розглянемо при вивченні файлів.
Умови можна класифікувати як прості і складені. Прості умови визначені діаграмою:
Складені умови конструюються з простих за допомогою логічних операцій.
Логічні вирази перетворюються за законами логіки висловлювань. Наприклад,
Not((A > 0) And (B <> 0)) <==> Not(A > 0) Or Not(B <> 0) <==> (A <= 0) Or (B = 0)
Перетворення логічних виразів часто призводять до зменшення їх складності і, тим самим, оптимізації програми за часом.
Декілька операторів, які виконуються послідовно, можна об’єднувати в один складений оператор.
Складений оператор передбачає виконання операторів, які в нього входять (компоненти) у порядку їх написання. Службові слова Begin і End грають роль дужок операторів – вони виділяють тіло складеного оператора.
Складений оператор означається діаграмою:
Оператори вибору призначені для виділення зі списку компонент одного-єдиного оператора, який і виконується. Таким чином, оператори вибору реалізують керівну структуру “розгалуження”. У якості оператора вибору у мові визначені умовний оператор і оператор варіанта.
Існують дві форми умовного оператора:
If < умова > Then < оператор >
If < умова > Then < оператор > Else < оператор >
Вони відповідають базовим керівним структурам короткого і повного розгалуження. Умова – це вираз типу Boolean.
Синтаксична діаграма умовного оператора має вигляд:
Відзначимо, що наступна конструкція мови, яка складається із вкладених розгалужень, синтаксично двозначна (допускає два різних варіанти синтаксичного аналізу).
If <умова 1> Then If <умова 2> Then <оператор 1> Else <оператор 2>
Для того, щоб усунути цю двозначність, у мові обрано 1-ий варіант інтерпретації у відповідності до правила: роздільнику else відповідає найближчий попередній роздільник then.
Приклад. Скласти програму розв’язання квадратного рівняння, заданого своїми коефіцієнтами a, b, c.
Program SquareEquation; Var a, b, c, Root1, Root2: Real; Solution: Integer; Procedure SolutionEquation ( a, b, c : Real; Var Solution: Integer; VarRoot1,Root2: Real );Var Discriminant: Real;Begin Discriminant :=b*b - 4*a*c; If Discriminant < 0 Then Solution := 0 Else If Discriminant = 0 Then Begin Solution := 1; Root1 := -b/a; End Else Begin Solution := 2; Root1 := (-b + Sqrt(Discriminant))/(2*a); Root2 := -b/a - Root1; End;End; Begin SolutionEquation ( a, b, c, Solution, Root1, Root2);End.
Задачі для самостійного розв’язування
Розробити програму перевірки, чи є дане чотиризначне число паліндромом. Число називається паліндромом, якщо його запис читається однаково зліва направо і справа наліво. (Наприклад, 2442, 3883, 5115).
Натуральне число із n цифр називається числом Армстронга, якщо сума його цифр, піднесена до n–го степеня, дорівнює самому числу (наприклад, 153=13+53+33). Скласти програму, яка перевіряє, чи є дане дво або тризначне число k числом Армстронга.
Розробити алгоритм і реалізувати програму розв’язування квадратної нерівності ax2 + bx + c < 0.
Розробити алгоритм і реалізувати програму розв’язування системи лінійних рівнянь:
a11x + a12y = b1;
a21x + a22y = b2.
Скласти програму обчислення внутрішніх кутів трикутника, з вершинами A(x1, y1), B(x2, y2), C(x3, y3).
Написати програму знаходження максимума і мінімума із трьох цілих чисел.
Скласти програму знаходження найкоротшої сторони трикутника з вершинами A(x1,y1), B(x2, y2), C(x3, y3).
Написати програму обчислення значення функції:
( 1, якщо x > 0;
Sign(x) = ( 0, якщо x = 0;
(-1, якщо x < 0 .
Скласти програму обчислення найбільшого і найменшого значення функції Y=ax2 +bx+c на відрізку [p ; q].
Написати програму знаходження області визначення функції:y=1/(x2 + px + q).