Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Ответы на вопросы1.docx
Скачиваний:
2
Добавлен:
01.05.2025
Размер:
476.99 Кб
Скачать

5.5 Переход по метке

Выполняется оператором

Перейти метка;

где метка - это имя, начинающееся с тильды (знака ~),

например

~М1.

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

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

// Процедура, выводящая группы непериодических констант. Завершается либо при обнаружении

// непериодической константы типа Календарь, либо после вывода всех групп.

процедура Выполнить()

перем всегоКонстант, ин, номерГруппы, иден;

ОчиститьОкноСообщений();

номерГруппы = 0;

всегоКонстант = Метаданные.Константа();

ин = 1; // Номер константы

пока ин <= всегоКонстант цикл

если Метаданные.Константа(ин).Периодический = 0 тогда

номерГруппы = номерГруппы + 1;

Сообщить("Выводится группа с номером " + номерГруппы);

// Вложенный цикл Пока

пока Метаданные.Константа(ин).Периодический = 0 цикл

если Метаданные.Константа(ин).Тип = "Календарь" тогда

перейти ~М1; // Выход из всех циклов

конецЕсли;

иден = Метаданные.Константа(ин).Идентификатор; Сообщить(иден + " " + Константа.ПолучитьАтрибут(иден)); ин = ин + 1; // перейти к следующей константе

если ин > всегоКонстант тогда

прервать; // Досрочный выход из вложенного цикла конецЕсли;

конецЦикла; // пока Метаданные.Константа(ин).Периодический = 0 иначе // Имеем периодическую константу

ин = ин + 1; // перейти к следующей константе

конецЕсли;

конецЦикла; // пока ин <= всегоКонстант

// Располагаем после метки ~М1 двоеточие

~М1: // Сюда передается управление оператором Перейти ~М1;

если номерГруппы = 0 тогда

Сообщить("В конфигураторе нет непериодических констант.");

конецЕсли;

конецПроцедуры // Выполнить

В данной задаче метку ~М1 нельзя расположить перед оператором конецЦикла:

~М1:

конецЦикла; // пока ин <= всегоКонстант

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

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

51. Программирование "сверху вниз"

Разработка алгоритмов и программ осуществляется, как правило, по принципу "сверху вниз".

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

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

  1. Проанализировать задачу и выделить в ней фрагменты.

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

  3. Установить между выделенными фрагментами связи: для каждого фрагмента определить, какие данные он получает (входные данные) и какие данные возвращает (выходные данные). Связи между фрагментами называются интерфейсом.

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

  5. Оформить выделенные фрагменты в виде программных компонентов или БОК.

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

Составляемые для фрагментов линейные схемы алгоритмов (разд. 2.8) сопровождаются заголовком и описанием интерфейса, отражающим состав входных и выходных данных.

В 1С для реализации фрагментов можно использовать программные компоненты:

  • основную программу модуля;

  • процедуры и функции модуля.

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