Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


Программирование алгоритмов разветвляющейся структуры




Цель работы: Разработка алгоритмов и кодирование приложений разветвляющейся структуры.

Разветвляющиеся алгоритмы реализуются с помощью двух операторов: условного оператора    и оператора выбора. Условный оператор имеет следующую форму:

            if <условие> then <оператор1> else <оператор2>;

Эта конструкция позволяет выполнить один из операторов в зависимости от условия. Если условие истинно (True), то выполняется < оператор1>, в противном случае (False)- <оператор2 >. Условный оператор может иметь сокращенную форму записи:

                                       if <условие> then <оператор>;

В этом случае, если условие ложно (False), то выполняется следующий за ifоператор кода.

Условие может быть простым или сложным. Простое условие создается с использованием шести операций отношения: = (равно), <> (не равно), > (больше), < (меньше), >= (больше или равно), <=(меньше или равно). Сложное условие получается из простых с использованием логических операций И (and), ИЛИ (or), НЕ (no t). Сложное условие возвращает значение True или False в зависимости от логического отношения между их операндами. Операция and возвращает значение True, когда истинны оба ее операнда, а во всех остальных случаях – значение False. Операция or  возвращает False, когда ложны оба ее операнда, а во всех остальных случаях – True. Операция not инвертирует значение своего операнда с True на False и наоборот.

Пример 2. Из двух заданных значений A и B определить минимальное:

                         if a < b then min: = a else min: = b;

Пример 3. Написать условие того, что значение X находится на отрезке [ a, b] или [ c, d]:

                          (x >= a) and (x<=b) or (x >= c) and (x<=d)

Условные операторы могут быть многократно вложены друг в друга. Если <оператор1 > и <оператор2> в свою очередь являются операторамиif, то такой оператор называют вложенным. При этом ключевое слово else принадлежит ближайшему предшествующему слову if. Если после слов then или else необходимо выполнить группу операторов, то эту группу размещают внутри операторных скобок begin.. end.Такая конструкция begin <группа операторов> end называется составным оператором.

Пример 4. Задан отрезок [ a, b].  Вывести информацию о том, где находится Х: на отрезке [ a, b], слева от [ a, b] или справа от [ a, b]:

                        if (x >= a) and (x<=b) then write(‘х на отрезке ’)

                        else if x > b then write(‘ x справа от отрезка’)

                                 else write(‘ x слева от отрезка’);

Пример 5. Добавить к коду линейного приложения (Пример 1) возможность анализа вида заданного своими целочисленными координатами треугольника: вырожденный, равносторонний, прямоугольный, равнобедренный, произвольный. 

Алгоритм дополнительного фрагмента приложения представляет собой ярко выраженное ветвление, поскольку предполагает всесторонний анализ соотношений сторон. Кроме того возникнет необходимость сравнения на равенство действительных чисел. Как известно, такие числа представляются в компьютере не точно. Поэтому вместо строгого равенства проверяется степень расхождения сравниваемых величин. Для этого нужно в раздел Var добавить переменную, оценивающую точность сравнения:

    Var eps: real48 = 0.1; // точность сравнения действительных на равенство

Код дополнительного фрагмента (к Example_1) может выглядеть так:

// Анализ вида треугольника

if (abs(a12+a23-a31)<eps)or

(abs(a12+a31-a23)<eps)or

(abs(a23+a31-a12)<eps) then

writeln('Треугольник вырожденный ')

Else

begin

if (abs(a12-a23)<eps)and(abs(a12-a31)<eps) then

writeln('Треугольник равносторонний ')

else

begin

if ((abs(a12*a12+a23*a23-a31*a31)<eps) or

   (abs(a12*a12+a31*a31-a23*a23)<eps) or

   (abs(a23*a23+a31*a31-a12*a12)<eps)) then

  begin

  writeln('Треугольник прямоугольный ');

  if (abs(a12-a23)<eps)or

        (abs(a12-a31)<eps)or

     (abs(a31-a23)<eps) then

    writeln('Треугольник равнобедренный ');

  end

else if (a12=a31)or(a12=a23)or(a31=a23) then

   writeln('Треугольник равнобедренный')

     else writeln('Треугольник произвольный');

end;

 end;

Результаты работы приложения (Пример 5) представлены в окне вывода (рис.2):

Рис.2. Результат работы приложения (Пример 5)

       Для организации множественного ветвления можно использовать оператор выбора (или варианта), который имеет следующий вид:

                         Case <селектор> of

              m1: begin <группа операторов> end;

              m2: begin <группа операторов> end;

              .......

              mn: begin <группа операторов> end

                          else <группа операторов>

                          end;

В этой структуре:

- селектор – арифметическое или логическое выражение (порядкового типа);

- m1, m2, … mn - метки вариантов (или константы выбора), не описываются в разделе label и должны совпадать с типом селектора.

Действие оператора: в данный момент может быть активна только одна группа операторов, метка которой совпадает с текущим значением селектора или выполняется еlse-часть (если не произошло совпадения). Еlse-часть может отсутствовать, но это часто приводит к ошибочным ситуациям.

       Пример 6. Фрагмент приложения, анализирующий заданное число num.

Var num: integer;

Begin

write ('Введите число = ');

Readln (num);

Case num of

0,2,4,6,8: writeln ('Четное число ');

1,3,5,7,9: writeln ('Нечетное число');

10..100: writeln ('Число между 10 и 100')

Else

writeln ('Число отрицательное или большее 100')

End;             как убрать?????

Варианты заданий

1. Найти действительные корни биквадратного уравнения. Предусмотреть выдачу нужных сообщений.

2. Координаты заданных четырех точек на плоскости соединяются последовательно в порядке перечисления. Вычислить площадь получившейся фигуры.

3. Корабль может двигаться четырьмя курсами: на север, на юг, на восток и на запад. Капитан может дать команду на изменение курса: влево, вправо, вперед, назад. Определить новый курс корабля.

4. Решить систему двух линейных уравнений с двумя неизвестными. Предусмотреть выдачу сообщений: «нет решения», «бесконечное множество решений», «одно решение», «прямые параллельны или перпендикулярны».

5. Найти координаты точки пересечения прямой y = k* x + b и окружности заданного радиуса r с центром в начале координат. В каких координатных четвертях находятся точки пересечения? Если точки пересечения нет, или прямая только касается окружности, выдать соответствующее сообщение.

6. Поле шахматной доски задается парой натуральных чисел, первое из которых задает номер вертикали, а второе – номер горизонтали. Конь расположен на позиции

(a, b), а ладья – на (c, d). Определить, угрожает ли конь ладье? Определить также, угрожает ли ладья коню?

7. Задаются координаты трех точек на плоскости, которые последовательно соединяются между собой. Определить тип получаемого треугольника: прямоугольный, остроугольный, тупоугольный. Если треугольник построить нельзя, то сообщить, что точки лежат на одной прямой.

8. Задаются четыре различных числа a, b, c, d. Выбрать из них три таких числа, которые составляют стороны треугольника наибольшей площади.

9. Координаты заданных четырех точек на плоскости соединяются последовательно в порядке их перечисления. Определить вид полученной геометрической фигуры - квадрат, прямоугольник, параллелограмм, трапеция, ромб или  четырехугольник.

10. Координаты четырех заданных точек на плоскости соединяются последовательно в порядке их перечисления. Определить, является ли полученная фигура выпуклой?

11. Можно ли из прямоугольного металлического листа размером a* b вырезать две прямоугольные заготовки размерами c* d и k* p? Заготовки можно вырезать только параллельно сторонам листа.

12. С клавиатуры вводится номера года. Напечатать римскими цифрами век, к которому относится данный год.

13. Координаты заданных трех точек на плоскости соединяются последовательно в порядке перечисления. Определить площадь получаемого треугольника. Вычислить высоты и вывести их на экран в порядке возрастания.

14. Два прямоугольника, расположенные в первом квадранте, задаются координатами левого верхнего и правого нижнего углов. Вычислить площадь пересечения этих прямоугольников.

15. Образуют ли прогрессию цифры заданного четырехзначного числа? Определить вид и тип прогрессии.

16. Два отрезка на плоскости заданы координатами своих концов. Определить, имеют ли эти отрезки общие точки. Отрезки могут располагаться на одной прямой, на параллельных или пересекающихся прямых.

       17. Заданы координаты вершин треугольника на плоскости. Вывести их значения в порядке обхода по часовой стрелке, начиная отсчет угла с оси OY.

18. Четырехугольник задается координатами своих вершин на плоскости. Определить, является ли он выпуклым.

19. Определить, лежат ли на одной прямой точки с координатами: (x1, y1 ), (x2, y2 ), (x3, y3). Если точки лежат на одной прямой, то указать координаты точки, попавшей внутрь отрезка.

20. Заданы координаты трех вершин треугольника. Вводятся координаты четвертой точки. Определить, внутри или вне треугольника находится эта точка.

21. Заданы координаты вершин треугольника. Вывести расстояния от начала координат до вершин в порядке обхода против часовой стрелки, ведя отсчет от оси ординат.

22. Для двух окружностей одинакового радиуса задаются координаты их центров. Определить, пересекаются ли они? Если пересекаются, то вычислить площадь четырехугольника, образуемого центрами окружностей и точками их пересечения.

23. Координаты двух точек на плоскости задают прямую, которая делит плоскость на две полуплоскости. Вводятся координаты еще двух точек. Определить, принадлежат ли эти точки разным полуплоскостям, или они лежат на той же самой прямой?

24. Поле шахматной доски задается парой натуральных чисел, первое из которых задает номер вертикали, а второе – номер горизонтали. Ферзь расположен на позиции

(a, b). Можно ли за один ход попасть на позицию (c, d)? Если попасть нельзя, то определить, как это сделать за два хода?

25. Определить, является ли палиндромом дробная часть действительного числа, имеющего до четырех значащих цифр?





Поделиться с друзьями:


Дата добавления: 2018-10-15; Мы поможем в написании ваших работ!; просмотров: 857 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Начинать всегда стоит с того, что сеет сомнения. © Борис Стругацкий
==> читать все изречения...

4398 - | 4194 -


© 2015-2026 lektsii.org - Контакты - Последнее добавление

Ген: 0.009 с.