В. А. Каймин Информатика Учебник

Вид материалаУчебник

Содержание


6.3. Проверка программ на ЭВМ
Типичными ошибками
Экзаменационные задачи ГУУ
Подобный материал:
1   ...   10   11   12   13   14   15   16   17   18

6.3. Проверка программ на ЭВМ



В экзаменационных задачах и заданиях проверка правильности составленных программ проводится на ЭВМ путем их испытания на специально подбираемых тестах. Эта работа проводится препода­вателями или экзаменаторами по завершении отладки программ на ЭВМ.

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

1) программа объявляется содержащей ошибки, если можно ука­зать тесты, при которых выполнение программы на ЭВМ приводит к отказу, сбою или получению неправильных результатов;

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

Напомним два дополнительных, но весьма существенных опре­деления допустимости исходных данных:

1) исходные данные считаются допустимыми, если для этих данных существует решение поставленных задач;

2) исходные данные недопустимы, если для этих данных постав­ленная задача не имеет решений.

Наконец правильность результатов решения регламентируется следующими двумя определениями:

1) результаты решения правильные, если они соответствуют требованиям поставленной задачи;

2) результаты решения неправильные, если они противоречат требованиям поставленной задачи.

Подбор тестов для проверки программ опирается на некоторые общие принципы, среди которых можно выделить следующие:

1) проверка частных случаев задачи;

2) проверка основных случаев задачи;

3) проверка граничных случаев.

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

Разбор этих понятий проведем на примере типичной экзамена­ционной задачи по информатике.

Задача. «Средняя зарплата».

Среди N сотрудников отдела выделить тех, кто получает зарплату выше средней по данным из следующей таблицы:


Иванов

начальник

2500

Петров

сотрудник

1800

Сидоров

секретарь

900


Типичность этой задачи заключается в том, что она является одной из задач обработки данных, представленных в нашем случае таблицей. Частным случаем в этой задаче является таблица, состо­ящая из одной строки (случай N = 1). Граничным случаем - ситу­ация, когда все сотрудники получают одинаковую зарплату и никто из них не получает зарплату выше средней.

Типичными ошибками в программах решения этой задачи может быть отсутствие обработки частного случая, когда N = 1, либо отсутст­вие ответа на граничную ситуацию, когда все получают одинаковую зарплату.

Приведем примеры тестов, применявшихся при проверке на ЭВМ правильности программ решения этой задачи:

1) тест1 (проверка основного случая):


Иванов

начальник

2500

Сидоров

секретарь

900


2) тест2 (проверка частного случая):


Иванов

начальник

2500


3) тест3 (проверка граничных ситуаций):


Иванов

начальник

2000

Петров

сотрудник

2000


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

Правильными ответами с точностью до формулировок в этой задаче являются:

ответ1 (основной случай):


Иванов

начальник

2500


ответ2 (частный случай):




«никто не получает зарплату выше средней»


ответ3 (граничный случай):




«никто не получает зарплату выше средней»


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

Сценарий




список сотрудников:




<фамилия> <долж> <з/плата> *

… … …




средняя з/плата = <среднее>

з/плата выше средней:




<фамилия> <з/плата> *

… … …




не получает никто


Программа Алгоритм

' выше средней з/платы алг «выше средней з/платы

сls нач

? «сотрудники:» вывод «сотрудники:»

do цикл

read Hn$, dl$, zp чтение fm$, dl$, zp

if fm$=«» then exit do если fm$=«» то выход

? fm$, dl$, zp вывод fm$, dl$, zp

sum = sum + zp sum = sum + zp

n = n + 1 n = n + 1

loop кцикл

sr = sum/n sr = sum/n

? «средняя з/плата=»; sr вывод («средняя 3/nлama=»;sr)

? «з/плата выше средней:» вывод(«з/плата выше средней:»)

restore zplts перезагрузка данных

ns = 0 ns = 0

for k = 1 to n от k = 1 до п

read fm$, dl$, zp чтение fm$, dl$, zp

if zp > sr then если zp > sr то

? fni$, zp вывод (fm$, zp)

ns = ns + 1 ns = ns + 1

end if кесли

next k кцикл

if ns = 0 then если ns = 0 то

? «нe получает никто» вывод («не получает никто»)

end if кесли

end кон


zplts: 'данные о зарплате:

data «Иванов», «начальник», 250000

data «Сидоров», «секретарь», 90000

data «», «», 0


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

1) хорошо организованный вывод результатов, совмещенный с выводом исходных данных (свойства, заложенные в сценарий);

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

3) удобная организация исходных данных в тексте программы, позволяющая упростить процедуру тестирования и отладки программы на ЭВМ.


Экзаменационные задачи ГУУ

(Государственный университет управления)


Задача 1

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


Задача 2

N сотрудников (известны фамилии) работают в 2 смены по инди­видуальному графику (1-й день - «утро», 2-й день - «вечер», 3-й день - «выходной»). Все они в свое нерабочее время должны пройти диспансеризацию в медпункте, который работает ежедневно в 2 смены. В день начала диспансеризации о каждом сотруднике известно в какую смену он работает или то, что он выходной. Со­ставить ежедневные списки посещения сотрудниками медпункта с указанием времени посещения («утро» и «вечер»), учитывая, что в каждой смене медпункта могут быть приняты не более М человек должен посетить медпункт один раз. Числа N и М заданы.


Задача 3

На кинофестивале 35 стран представили свои фильмы. Общее число фильмов не превышает 100. Известны названия стран - участ­ниц и фильмов, а также баллы, полученные каждым из фильмов. Определить фильм, завоевавший первый приз (максимальный балл) и страну, получившую наибольший средний балл за представленные фильмы. Считать, что фильмы в общем списке по странам не упоря­дочены, а фильм и страна, его представляющая, является единствен­ными победителями.


Задача 4

Известны очки, полученные каждым из М спортсменов-много­борцев в каждом из N видов соревнований (N и М заданы). Для каждого из спортсменов определить, в каких видах соревнований он получил результат не хуже других спортсменов и какой конкретно. Фамилия спортсменов и названия видов соревнований известны.


Задача 5

Даны сведения о соревновании N фигуристов ( N - заданное число): фамилия, наименование спортивного общества, 10 оценок за выступление. Требуется по каждому спортивному обществу опре­делить фигуриста, показавшего наивысший результат, считая его единственным. Баллы, полученные фигуристом, подсчитываются следующим образом: максимальная и минимальная оценки отбра­сываются, а из остальных формируется средняя.