Требовалось
написать программу, которая решает уравнение «a|x|=b» относительно x
для любых чисел a и b, введенных с клавиатуры. Все числа считаются
действительными. Программист торопился и написал программу неправильно.
ПРОГРАММА НА ПАСКАЛЕ | ПРОГРАММА НА БЕЙСИКЕ | ПРОГРАММА НА СИ |
var a,b,x: real; begin readln(a,b,x); if a = 0 then if b = 0 then write ('любое число') else write ('нет решений') else if b = 0 then write('x = 0') else write('x =',b/a,' или x =',-b/a); end. | INPUT a, b, x IF a = 0 THEN IF b = 0 THEN PRINT "любое число" ELSE PRINT "нет решений" ENDIF ELSE IF b = 0 THEN PRINT "x = 0" ELSE PRINT "x =",b/a, " или x =",-b/a END IF END IF END | void main(void) {float a,b,x; scanf("%f%f%f", &a,&b,&x); if (a==0) if (b==0) printf("любое число"); else printf ("нет решений"); else if (b==0) printf("x = 0"); else printf("x=%f или x=%f", b/a,-b/a); } |
Последовательно выполните три задания:
1) Приведите пример таких чисел a, b, x, при которых программа неверно решает поставленную задачу.
2) Укажите, какая часть программы является лишней.3)
Укажите, как нужно доработать программу, чтобы не было случаев ее
неправильной работы. (Это можно сделать несколькими способами, поэтому
можно указать любой способ доработки исходной программы).
Решение задачи №8.
1) a = 1, b= –1, x =0 (Значение x может быть не указано. Значения a и bмогут быть любыми ненулевыми числами с разными знаками. Также допустим ответ, что программа работает неправильно при любых ненулевых a и b, имеющих разные знаки)
2) Лишняя часть: не нужно вводить x с клавиатуры верно: readln(a,b);3) Возможная доработка:
readln(a,b);
if a = 0 then
if b = 0 then write('любое число')
else write('нет решений')
else
if b/a > 0 then
write('x=',b/a, ' или x=',-b/a)
else
if b=0 then write('x=0')
else write('нет решений');

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