Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
posobie.doc
Скачиваний:
27
Добавлен:
31.03.2015
Размер:
1.43 Mб
Скачать

2.4. Разработка алгоритма и программы для примера

Уровень 1

1. Задача А0.2. Условие то же, что для А0.

Координатами x,yзаданыnточек плоскости.

Найти:

  • процент точек, удаление которых от начала координат больше заданной величины rи притом обе координаты положительны;

  • среднее удаление всех точек от начала координат.

2. Входные данные

целn– число точек; простая переменная;

вещ r– критическое удаление; простая переменная;

вещ x– абсциссы точек; одномерный массив;

вещy– ординаты точек; одномерный массив.

3. Выходные данные

вещp – искомый процент точек; простая переменная;

вещ sa– среднее удаление точек от начала координат; простая переменная.

4. Аномалии. В данной подзадаче отсутствуют.

5. Функциональные тесты

Это понятие рассматривается применительно к программе в целом. Для подзадач не используется.

6. Метод

● Пусть np - число точек, удовлетворяющих условию; тогда

p=(np/n)100. (1)

Чтобы найти p, надо найти np.

● Пусть s- сумма расстояний всех точек от начала координат; тогда

sa=s/n.(2)

Чтобы найти sa, надо найтиs.

● Для поиска npиsнеобходимо просмотреть все точки. При этом суммировать расстояния следует для всех точек, а считать число удовлетворяющих условию – после проверки условия.

● Пусть i- текущий номер точки,si- ее расстояние от начала координат; тогда

si=sqrt(x[i]x[i]+y[i]y[i]) (3)

Просмотру точек соответствует процесс изменения iот 1 до n.

● Запишем сформулированное в виде некоторой полуформальной схемы, полностью соответствующей нужной последовательности действий.

Положим сначала np:=0;s:=0 (суммирование начинается с 0).

Повторяем, меняяiот 1 доn:

- определить si:

si:=sqrt(x[i]*x[i]+y[i]*y[i]);

- прибавить si к s:

s:=s+si;

- если si>r и x[i]>0 и y[i]>0, то

- увеличитьnpна 1:

np:=np+1;

конец.

Найти p:

p:=(np/n)*100;

Найти sa:

sa :=s/n;

7. Алгоритм

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

Так как этот алгоритм не является самостоятельным, он не требует собственного заголовка и описаний переменных. Описания используемых в нем промежуточных данных, а именно: цел np; вещ s,si; надо добавить в соответствующий раздел описаний основного алгоритма.

Этот фрагмент надо просто подставить вместо соответствующей абстракции.

8. Программа на паскале

{А0.2 - обработка}

np:=0; s:=0;

for i := 1 to n do

begin

si:=sqrt(x[i]*x[i]+y[i]*y[i]);

s:=s+si;

if (si>r) and (x[i]>0) and (y[i]>0) then

np:=np+1;

end;

p=(real(np)/n)*100;

sa=s/n;

9. Структурные тесты

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

В алгоритме один цикл, внутри которого – последовательность операторов и ветвление. Любой из функциональных тестов удовлетворяет условиям тестирования цикла.

Условие в ветвлениивыполняется на тесте 1.

Функциональные тесты покрывают структурные.

2.5. Отладка полной программы

Заменим в тексте последнего отлаженного варианта программы заглушку полным текстом программы подзадачи. Отладим программу, сначала исправив ошибки синтаксиса, а затем – пропуская тесты 1 и 2.

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]