Отправляет email-рассылки с помощью сервиса Sendsay

Всё о работе в Интернет

  Все выпуски  

Занятие 25.


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

Многообразие задач на множественные ветвления чрезвычайно велико. И среди них есть чрезвычайно интересные.

ПОСТРОЕНИЕ МНОЖЕСТВЕННЫХ ВЕТВЛЕНИЙ

1. Перевод на Паскаль команды выбора.

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

Перевод на Паскаль команды выбора
в полной форме

Перевод на Паскаль команды выбора
в сокращённой форме

выбор
       при <условие_1>: <серия_1>
       при <условие_2>: <серия_2>

       
..................................................
       
при <условие_N>: <серия_N>
       
иначе <серия>
кв

выбор
       при <условие_1>: <серия_1>
       
при <условие_2>: <серия_2>
       
..................................................
       
при <условие_N>: <серия_N>
кв

If <условие_1> Then <серия_1> Else
     
If <условие_2> Then <серия_2> Else
        
...........................................................
           
If <условие_N> Then <серия_N>
              
Else <серия>;

If <условие_1> Then <серия_1> Else
     
If <условие_2> Then <серия_2> Else
        
...........................................................
           
If <условие_N> Then <серия_N>;

Обращаем ваше внимание, что в результате перевода получатеся единая команда со вложенными ветвления. Особенности перевода таковы:

-       каждая из основных ветвей команды выбора переводится оператором ветвления в сокращённой форме;

-       если в составе какой-либо серии содержится более чем одна команда, то при переводе такая серия обязательно должна быть отмечена зарезервированными словами Begin и End как составной оператор;

-       между отдельными ветвями команды выбора обязательно используется зарезервированное слово Else;

-       если в составе какой-либо из основных серий имеется команда ветвления в сокращённой форме, пусть даже единственная, то при переводе такая серия обязательно должна быть отмечена зарезервированными словами Begin и End как составной оператор.

2. Решение задачи “Вычисление сложной комбинированной функции”.

Задача V.2.1. “Вычисление сложной комбинированной функции”. Для заданного произвольного значения аргумента построить алгоритм и подпрограмму вычисления значения комбинированной функции

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

Главная особенность алгоритма решения этой задачи состоит в использовании команды выбора, предназначенной, как мы уже знаем, для построения множественных ветвлений.

На построение алгоритма существенно влияют следующие свойства рассматриваемой задачи:

-       области действия отдельных составляющих заданной комбинированной функции не пересекаются;

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

-       любая из составляющих заданной комбинированной функции может быть вычислена (определена) во всех точках своей области действия.

Сходные вопросы уже рассматривались нами при решении задачи V-1-1 “Вычисление простой комбинированной функции” (см. материалы занятия 22).

Внимательно изучив заданную комбинированную функцию нашей задачи в отношении перечисленных свойств, мы приходим к выводу, что она однозначно определена при любых значениях аргумента. Это позволяет, во-первых, построить алгоритм её вычисления в виде функции, а во-вторых, использовать для построения алгоритма команду выбора, количество ветвей которой совпадает с количеством составляющих комбинированной функции.

В материалах занятия 22 уже указывалось, что для построения множественного ветвления, состоящего из N ветвей, достаточно использовать  1 условий, определяемых поставленной задачей. В данном случае имеем три ветви, следовательно, достаточно использовать всего лишь два условия. Необходимо только выбрать наиболее удобные из них.

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

-       Рассмотрим условие x < –4, содержащееся в записи комбинированной функции. Оно разбивает всю область определения функции на две зоны: первая – соответствующая значениям x < –4, и вторая – значениям x >= –4. В первой из указанных зон функция вычисляется с помощью одной и той же формулы = –4, поэтому зона дальнейшему разбиению не подлежит. В связи с указанными обстоятельствами условие x < –4 можно принять в качестве условия первой ветви команды выбора. Учитывая же особенности правила выполнения команды выбора, можно считать, что первая зона теперь вообще исключена из рассмотрения. Последнее значит, что условие x >= –4 можно далее не рассматривать вовсе, поскольку оно выполняется автоматически.

-       Теперь все рассуждения касаются исключительно второй зоны, для которой x >= –4. Рассмотрим условие <= 4. Оно разбивает вторую зону на две подзоны: первая подзона, соответствующая значениям <= 4, и вторая – соответствующая значениям > 4. В первой подзоне функция вычисляется с помощью одной и той же формулы y = x, поэтому подзона дальнейшему разбиению не подлежит. Условие <= 4 можно принять в качестве условия второй ветви команды выбора. Таким образом, двумя ветвями команды выбора из рассмотрения исключены все значения <= 4.

-       В оставшейся подзоне, соответствующей значениям x > 4, функция вычисляется с помощью одной и той же формулы y = 4. И эта подзона дальнейшему разбиению не подлежит. Процесс образования зон и подзон окончен. Для последней подзоны указывать условие x > 4 нет необходимости, поскольку оно выполняется автоматически. Соответствующая ветвь должна быть указана как альтернативная ветвь команды выбора. 

Следуя вышеприведённым рассуждениям, алгоритм ЗначСКФ (Значение Сложной Комбинированной Функции) и его перевод на Паскаль можно записать следующим образом:

алг ЗначСКФ ( x: вещ ): вещ
нач
   выбор
      при x < –4: ЗначСкФ :=
 –4
      при <= 4: ЗначСкФ := x
      иначе ЗначСкФ := 4
   кв
кон

Function Value_Complex ( x: Real ): Real;
Begin
   If x<–4 Then Value_Complex := –4
      Else If x<=4 Then Value_Complex := x
         Else Value_Complex := 4
End;

Нами был рассмотрен последовательный процесс образования ветвей команды выбора в направлении возрастания значений аргумента x. Именно так следует поступать, чтобы не “заблудиться”. В отдельных случаях возможно отступление от этого правила. Например, в рассматриваемом алгоритме может быть использована и такая команда выбора:

выбор

при < –4ЗначСКФ := –4

при >  4: ЗначСКФ :=  4

иначе ЗначСКФ := x

кв

В приведённой команде изменён порядок следования двух последних ветвей с соответствующим изменением условия на противоположное.

Подведём итоги. При построении алгоритма решения этой простой задачи продемонстрирован подход, который условно может быть назван “последовательным делением множества значений аргументов на две части”. При этом, для достижения наиболее простой записи условий ветвей команды выбора, следует стремиться к тому, чтобы на каждом шаге одно из отделяемых множеств дальнейшему делению не подлежало.

Уважаемые подписчики! Следующее занятие также будет посвящено применению средств построения множественных ветвлений.

Уважаемые подписчики! При необходимости задать вопрос, проконсультироваться, уточнить или обсудить что-либо обращайтесь через Гостевую книгу моего персонального сайта http://a-morgun.narod.ru. При этом настоятельно рекомендую пользоваться браузером Internet Explorer.

С уважением, Александр.


В избранное