Раздел C • Категория C1 (демонстрационный вариант-2012)

 
 
 

Условие задачи

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


 

Последовательно выполните следующее:

  1. перерисуйте и заполните таблицу (таблица показана ниже по тексту), которая показывает, как работает программа при аргументах, принадлежащих различным областям (A, B, C, D, E, F, G и H).
    Точки, лежащие на границах областей, отдельно не рассматривать.
    В столбцах условий укажите «да», если условие выполнится, «нет» если условие не выполнится, «» (прочерк), если условие не будет проверяться, «не изв.», если программа ведет себя по-разному для разных значений, принадлежащих данной области. В столбце «Программа выведет» укажите, что программа выведет на экран. Если программа ничего не выводит, напишите «» (прочерк). Если для разных значений, принадлежащих области, будут выведены разные тексты, напишите «не изв». В последнем столбце укажите «да» или «нет»;

  2. укажите, как нужно доработать программу, чтобы не было случаев её неправильной работы. (Это можно сделать несколькими способами, достаточно указать любой способ доработки исходной программы).

ОбластьУсловие 1
(y >= x)
Условие 2
(y >= 0)
Условие 3
(y <= 2 - x * x)
Программа
выведет
Область
обрабатывается
верно
A     
B     
C     
D     
E     
F     
G     
H     

 

 

Теоретические сведения

Язык программирования – специальная кодовая система для записи компьютерных программ. Каждый язык программирования обладает определенной семантикой, лексикой и синтаксисом. В мире придумано и реализовано свыше 8000 тысяч языков программирования, но востребованными являются не более 20 – 30 различных языков.

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

Наиболее популярные языки программирования:

  • C;

  • C++;

  • C#;

  • Java;

  • Basic;

  • Pascal;

  • Delphi;

  • Oberon;

  • Ada;

  • Fortran;

  • Assembler.

 

Решение

В самую первую очередь нужно выбрать язык программирования, на основе которого пойдет весь последующий анализ. Селективность высока, так как предлагается на выбор один из четырех языков (Turbo Pascal, Basic, C, Алгоритмический язык).

Среди всех приведенных для выбора языков, я свое предпочтение, безусловно, отдаю языку Turbo Pascal, так как:

  • данный язык имеет прекрасную внутреннюю группировку по разделам (раздел описания констант, раздел описания переменных, раздел описания собственных типов данных и т. д.);

  • хорошо понятная лексика;

  • перед использованием переменной она обязана быть описана выше (в отличие от языка программирования Basic);

  • большое количество встроенных структур, позволяющих наиболее эффективно решать поставленные задачи (например, имеется встроенный тип данных "Множество", в отличие от любого другого представленного здесь языка).

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

Промежуточный вывод: мой субъективный выбор - замечательный язык программирования Pascal.

 

 

Определим общее количество различных областей на графике: A, B, C, D, E, F, G, H - 8[различных областей].
Следовательно, чтобы заполнить приведенную выше таблицу, необходимо 8 раз делать аналитическую обработку. Будем последовательно перебирать все заданные области от A до H.

Небольшие подсказки, связанные с графической интерпретацией графиков функций:

  1. условие y >= x, выделяет область, расположенную левее и выше биссектрисы для I и III квадранта;

  2. условие y >= 0, выделяет область, расположенную выше оси Ох, то есть происходит выделение полностью I и II квадранта;

  3. условие y <= 2 - x2, выделяет область, расположенную во внутренней части параболы.

 

Анализ области А:

 

Анализ области B:

 

Анализ области C:

 

Анализ области D:

 

Анализ области E:

 

Анализ области F:

 

Анализ области G:

 

Анализ области H:

 

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




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

Очевидно, что заштрихованная область, имеет довольно сложную конфигурацию и составить оперативно условие для проверки попадания точки с указанными координатами в данную область тоже достаточно проблематично. Вспомним фундаментальное правило - Разделяй и властвуй! То есть, необходимо стремится к тому, чтобы разбить приведенную область на подфрагменты, которые достаточно легко будет верифицировать. Поэтому, я предлагаю дифференцировать заштрихованный регион на две упрощенных части.

 

 

 

Выделяем две части у заштрихованной области.

 

Определим условия попадания точки с заданными координатами в область I:

  • x < 0;

  • y <= 2 - x * x;

  • y >= x;

Определим условия попадания точки с заданными координатами в область II:

  • x >= 0;

  • y >= 0;

  • y <= 2 - x * x;

 

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

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

Как видно в исправленном варианте присутствует всего одна условная конструкция if-then-else, что значительно упрощает восприятие и разбор программного кода. Условия, относящиеся к проверке попадания точки в одну из 2-х областей, объединены логической операцией and (так как координаты точки должны удовлетворять каждому из ограничений), а между собой совокупности условий, объединены логической операцией or (так как достаточно, чтобы точка принадлежала хотя бы одной рассматриваемой области).

 

В завершении рассмотрим полную реализацию программы (со всеми выкладками и комментариями) на языке программирования высокого уровня Turbo Pascal 7.0:

 

Вывод:

  • заданная в условии задания процессинговая таблица попадания точки с указанными координатами успешно заполнена;

  • был проанализирован исходный неправильный фрагмент программного кода и произведены доработки и устранение ошибок в программе.

 
Рейтинг:
 
Проголосовало: 0
Количество просмотров: 2230
 
 
 

Раздел C • Категория C1 (демонстрационный вариант-2012)

 

Комментарии

Для комментирования или зарегистрируйтесь
 
 
© 2011-2024 ООО "СтадиМен". Все права сохранены.
Перепечатка и использование материалов с данного сайта, разрешена только по согласию с владельцем.
Владелец оставляет за собой право воспользоваться 146 статьей УК РФ при нарушении авторских и смежных прав.
 
 
 
 
Авторизация на сайте
 
 
 
Обнаружили
ошибку на сайте?