Требовалось написать программу, которая решает уравнение «a |x| = b» относительно х для любых чисел а и b, введенных с клавиатуры. Все числа считаются действительными. Программист торопился и написал программу неправильно.
| Бейсик | Python |
|---|---|
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 ENDIF ENDIF END
| a = float(input()) b = float(input()) x = float(input()) if a == 0: if b == 0: print('любое число') else: print('нет решений') else: if b == 0: print('x = 0') else: print('x =', b/a, 'или x =',-b/a)
|
| Паскаль | Алгоритмический язык |
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.
| алг нач вещ a,b,x если a = 0 то если b = 0 то вывод "любое число" иначе вывод "нет решений" все иначе если b = 0 то вывод "x = 0" иначе вывод "x =", b/a, "или x =",-b/a все кон |
| Си++ | |
#include <iostream> using namespace std; int main(void) {float a,b,x; cin >> a >> b >> x; if (a==0) if (b==0) cout << "любое число"; else cout << "нет решений"; else if (b==0) cout << "x = 0"; else cout << "x=" << b/a << "или x=" << -b/a << endl; }
| |
Последовательно выполните три задания:
1) Приведите пример таких чисел a, b, x, при которых программа неверно решает поставленную задачу.
2) Укажите, какая часть программы является лишней.
3) Укажите, как нужно доработать программу, чтобы не было случаев ее неправильной работы. (Это можно сделать несколькими способами, поэтому можно указать любой способ доработки исходной программы).
1) a = 1, b = −1, x = 0.
Значение x может быть не указано. Значения а и b могут быть любыми ненулевыми числами с разными знаками. Ошибка программиста состоит в том, что программа работает неправильно при любых ненулевых а и Ь, имеющих разные знаки.
2) Лишняя часть:
не нужно вводить х с клавиатуры; верно: readln(a, Ь).
3) Возможная доработка:
readln(а, b); if а = 0 then
if b = 0 then write('любое число')
else write('нет решений')
else
if b/а > 0 then
write('х =', Ь/а, ' или х =', -Ь/а)
else
if b = 0 then
write('х =0')
else
write('нет решений');
(могут быть и другие способы доработки)

