Добавил:
Меня зовут Катунин Виктор, на данный момент являюсь абитуриентом в СГЭУ, пытаюсь рассортировать все файлы СГЭУ, преобразовать, улучшить и добавить что-то от себя Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Информатика / Ответы / ответы по программам ГИА.doc
Скачиваний:
13
Добавлен:
02.08.2023
Размер:
161.28 Кб
Скачать

1.

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

Сформировать список ошибок, которые могут быть выявлены этими тестами.

Задача: написать программу, вычисляющую значения выражения , где

Значения переменных k, z вводятся с клавиатуры. Результат выводится на экран.

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

Эталон ответа: 

Текст программы:

program func;

Uses Crt;

var

k, z, x, y : real;

procedure Header;

begin

WriteLn ('Нахождение значения функции Y=Ln^k(1+X),');

WriteLn ('где X=k*z^3 при k<1');

WriteLn (' X=z*(z+1) при k>=1');

WriteLn;

end; {procedure Header}

procedure XValue(k,z:real; var x:real);

begin

if k < 1 then x := k*(z*z*z)+1

else x := z*(z+1)+1;

end; {procedure XValue}

procedure OutCount;

begin

if x <= 0 then

begin

WriteLn ('X = ',x,': функция в этой точке не определена');

Exit;

end

else if k = 0 then

begin

WriteLn ('Y = 1');

Exit;

end

else

begin

y := exp(ln(ln(x))*k);

Write ('Y= ',y);

end;

end; {procedure OutCount}

begin

ClrScr;

Header;

Write ('Введите значение k: ');

ReadLn (k);

Write ('Введите значение z: ');

ReadLn (z);

XValue(k,z,x);

OutCount;

ReadKey;

end.

Набор тестов (тестирование):

Метод покрытия операторов

Очевидно, что выполнить все операторы можно, подобрав тестовые значения, при которых будут выполнены все ветви функции Valid, где происходит сравнение с нулем переменной a и функции Dis. Остальные части программы имеют линейную структуру и при выполнении программы будут выполнены в любом случае. Таким образом, подобрав значения переменных, при которых истинны пары условий a = 0, Dis < 0

a = 0, Dis > 0

a ≠ 0, Dis < 0

a ≠ 0, Dis > 0, выполним каждый оператор программы. Первую пару можно не рассматривать, т.к. при a = 0 нет смысла переходить к проверке значения дискриминанта, т. е. необходимо провести три теста:

Тест 1

Определяет, будет ли выполнен оператор вывода на экран сообщения «Уравнение линейное», когда a = 0

Входные данные: a=0, b=2, c=3

Тест 2

Определяет, будет ли выполнен оператор вывода на экран сообщения «Уравнение не имеет действительных корней», когда a ≠ 0, dis < 0

Входные данные: a=3, b=2, c=4

Тест 3

Определяет, будет ли выполнена функция Results, когда a ≠ 0, dis > 0

Входные данные: a=2, b=5, c=3

Метод покрытия решений

Для того, чтобы каждое решение приняло значение ИСТИНА либо ЛОЖЬ хотя бы один раз, достаточно трех тестов, когда a = 0; a ≠ 0, Dis < 0; a ≠ 0, Dis > 0:

Тест 4

Определяет, будет ли выполнен оператор вывода на экран сообщения «Уравнение линейное», когда a = 0

Входные данные: a=0, b=3, c=-2

Тест 5

Определяет, будет ли выполнен оператор вывода на экран сообщения «Уравнение не имеет действительных корней», когда a ≠ 0, dis < 0

Входные данные: a=3, b=2, c=1

Тест 6

Определяет, будет ли выполнена функция Results, когда a ≠ 0, dis > 0

Входные данные: a=2, b=4, c=1

  1. Ошибки:

Тест 1: выявляет ошибку, когда при введенном a=0 вычисления производятся далее.

Тест 2: выявляет ошибку, когда при значении Dis < 0 вычисления производятся далее.

Тест 3: выявляет ошибку, когда при значениях a≠0, Dis > 0 вычисления далее не производятся.

Тест 4: выявляет ошибку, когда при введенном a=0 вычисления производятся далее.

Тест 5: выявляет ошибку, когда при значении Dis < 0 вычисления производятся далее.

Тест 6: выявляет ошибку, когда при значениях a≠0, Dis > 0 функция Valid не возвращает значение true и вычисления далее не производятся.

2 Задание.

Составить блок-схему алгоритма программы, в которой создается случайным образом двумерный массив A[3][3], вычисляется сумма элементов, на экран выводится созданный массив в виде таблицы и значение суммы.

Текст программы:

program massiv3;

uses crt;

var

a :array [1..3,1..3] of Byte ;

s, j : Byte;

i : Word;

begin

ClrScr;

Randomize;

s := 0;

for i := 1 to 3 do

begin

WriteLn;

for j := 1 to 3 do

begin

a[i,j] := round(random(100));

s := s+a[i,j];

Write (a[i,j]:3);

end;

end;

WriteLn;

Write ('Сумма элементов = ',s);

ReadLn;

end.

Эталон ответа: Блок-схема программы:

4

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

Задача

Даны координаты точки М (х, у). Определите, принадлежит ли данная точка замкнутому множеству D (a>0; b>0).

Y

b

D

0 а X

Эталон ответа: 

Нет Нет

Да Да

Нет

Да

Нет

Да

Рис. Схема программы

В данном варианте в каждом блоке «решение» проверяется простое условие (вычисляется булевское выражение), имеющее вид «арифметическое выражение» «знак сравнения» «арифметическое выражение», которое может принимать одно из двух значений: «истина» (true) или «ложь» (false).

Текст программы

program lr1_2_1;

{ Даны координаты точки М(х,у). Определите, принадлежит ли данная точка замкнутому множеству D. D – прямоугольник с координатами вершин (0;0), (a;0), (a;b), (0;b) (a>0; b>0).

Исходные данные: a, b, x, y.

Результат: сообщение на экране «Точка не принадлежит» или «Точка принадлежит»}

uses

crt;

var

a,b,x,y:real;

begin

clrscr; {очистка экрана}

{Ввод исходных данных}

write(‘Введите через пробел значения a,b,x,y’);

readln(a,b,x,y);

{Определение принадлежности точки множеству}

if x0 then

if xa then

if y0 then

if yb then

writeln(‘Точка принадлежит’)

else

writeln(‘Точка не принадлежит’)

else

writeln(‘Точка не принадлежит’)

else

writeln(‘Точка не принадлежит’)

else

writeln(‘Точка не принадлежит’);

readkey; {ожидание нажатия клавиши}

end.

Соседние файлы в папке Ответы