
9 Задание.
Эталон ответа:
Составить тесты для проверки программы, используя метод покрытия операторов и метод покрытия решений. Сформировать список ошибок, которые могут быть выявлены этими тестами.
Спецификация программы:
Название задачи: квадратное уравнение
Название программы: quadrur
Система программирования: Turbo Pascal 7.0
Системные требования: IBM PC/AT 286 и выше
Входные данные: Три действительных числа – коэффициенты.
Выходные данные: Вычисленные корни уравнения.
Постановка задачи:
Нужно составить программу, которая бы вычисляла решения квадратного уравнения, если уравнение действительно является квадратными и если имеются действительные корни уравнения. Используя методы покрытия операторов и покрытия решений необходимо составить набор тестов, направленных на обнаружение возможных ошибок. Также необходимо сформировать список ошибок.
Спецификация переменных:
Имя переменной в программе |
Назначение переменной в программе |
Тип переменной |
Диапазон типа |
a |
Первый коэффициент уравнения |
Real |
2.9e-39..1.7e38 |
b |
Второй коэффициент уравнения |
Real |
2.9e-39..1.7e38 |
c |
Третий коэффициент уравнения |
Real |
2.9e-39..1.7e38 |
Текст программы:
program quadrur;
Uses Crt;
var
a, b, c: real;
procedure Entering;
begin
Write ('Введите значение a: ');
ReadLn (a);
Write ('Введите значение b: ');
ReadLn (b);
Write ('Введите значение c: ');
ReadLn (c);
end; {procedure Entering}
function Dis:real;
begin
dis := b*b-4*a*c;
end; {function Dis}
function Valid:boolean;
begin
Valid := true;
if a = 0 then
begin
Writeln ('Уравнение линейное');
Valid := false;
end
else if Dis < 0 then
begin
Writeln ('Уравнение не имеет действительных корней');
Valid := false;
end;
end; {function Valid}
function Results:real;
begin
WriteLn ('x1 = ',(-b-SQRT(dis))/(2*a):3:6);
WriteLn ('x2 = ',(-b+SQRT(dis))/(2*a):3:6);
end; {function Results}
begin
ClrScr;
Write ('Решение квадратного уравнения');
WriteLn (' вида ax^2+bx+c=0');
WriteLn;
Entering;
if Valid = true then
Results;
ReadKey;
end.
10. Вычислить значение функции Y для любого, заданного пользователем, значения аргумента X
1. y= a= b=
Эталон ответа: program quadrur;
Uses Crt;
var
a, b, c: real;
procedure Entering;
begin
Write ('Введите значение a: ');
ReadLn (a);
Write ('Введите значение b: ');
ReadLn (b);
Write ('Введите значение c: ');
ReadLn (c);
end; {procedure Entering}
function Dis:real;
begin
dis := b*b-4*a*c;
end; {function Dis}
function Valid:boolean;
begin
Valid := true;
if a = 0 then
begin
Writeln ('Уравнение линейное');
Valid := false;
end
else if Dis < 0 then
begin
Writeln ('Уравнение не имеет действительных корней');
Valid := false;
end;
end; {function Valid}
function Results:real;
begin
WriteLn ('x1 = ',(-b-SQRT(dis))/(2*a):3:6);
WriteLn ('x2 = ',(-b+SQRT(dis))/(2*a):3:6);
end; {function Results}
begin
ClrScr;
Write ('Решение квадратного уравнения');
WriteLn (' вида ax^2+bx+c=0');
WriteLn;
Entering;
if Valid = true then
Results;
ReadKey;
end.
12.Составить тесты для проверки программы, используя методы покрытия операторов и покрытия условий. Сформировать список ошибок, которые могут быть выявлены этими тестами.
Задача: вычислить значение функции:
Эталон ответа:
Спецификация переменных:
Имя переменной в программе |
Назначение переменной в программе |
Тип переменной |
Диапазон типа |
x |
Значение аргумента функции |
Real |
0..1 |
Good |
Булева переменная, сигнализирующая об успешном преобразовании введенного с клавиатуры значения |
Boolean |
2.9e-39..1.7e38 |
Текст программы:
program func1;
Uses Crt;
var
x : real;
Good : boolean;
procedure Header;
begin
WriteLn ('Вычислим значение функции');
WriteLn (' Y = x^3, при x < 0, затем x = x + 1');
WriteLn (' Y = √2x+1, при 0 <= x <= 2');
WriteLn (' 3x-1');
WriteLn (' Y = ─────, при x > 2');
WriteLn (' Cos x');
WriteLn;
end; {procedure Header}
procedure ClrPlace;
var
i : byte;
begin
WriteLn;
WriteLn ('Нажмите для выхода любую клавишу...');
ReadKey;
GotoXY(1,8);
for i := 1 to 5 do
begin
ClrEol;
Writeln;
end;
GotoXY(1,8);
end; {procedure ClrPlace}
procedure Entering;
var
XStr : string;
Code : integer;
begin
Write ('Введите значение X: ');
Read (XStr);
Val (XStr,x,Code);
if Code <> 0 then
begin
Good := false;
WriteLn ('Ошибка в ',Code,' позиции');
ClrPlace;
end
else Good := true;
end; {procedure Entering}
procedure OutCount(x:real);
var
i : byte;
begin
i := 0;
if x < 0 then
begin {x < 0}
WriteLn ('X = ',x);
WriteLn ('Y = ',x*x*x+1);
end
else
if ((x >= 0) AND (x <= 2)) then
begin {0<=x<2}
WriteLn ('X = ',x);
WriteLn ('Y = ',SQRT(2*x+1));
end
else if x > 2 then
begin {x > 2}
WriteLn ('X = ',x);
if Cos(x)=0 then WriteLn ('Ф-ция в этой точке не определена')
else WriteLn ('Y = ',(3*x-1)/Cos(x));
end;
ReadKey;
end;{procedure OutCount}
begin
ClrScr;
Header;
Entering;
if Good = true then OutCount(x);
end.