Лабораторна робота №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).