Writeln ('точка лежит внутри области')
Ответы на задачи 24 (С1): 1) Программа работает неправильно, если a и b не равны нулю и имеют разные знаки: в этом случае уравнение не имеет решений (поскольку модуль – неотрицательная величина), а программа выдаст два решения. Хотя в задании сказано «Приведите пример таких чисел a, b, x,…», значение x ни на что не влияет (см. далее), в ответе можно указать любое число x. Например, Лишняя часть программы – ввод x, поскольку это не исходные данные, а результат. Поэтому вместо оператора readln(a,b,x); правильнее написать readln(a,b); Переменная x далее не используется, поэтому ее не нужно объявлять: var a,b: real; Возможная доработка программы – добавить еще один условный оператор, обрабатывающий неучтенный случай (a и b не равны нулю и имеют разные знаки), при котором нет решений: var a,b: real;
Begin
readln(a,b);
if a = 0 then
if b = 0 then
Write ('любое число')
Else write ('нет решений')
Else
if b = 0 then
write('x = 0')
Else
if a*b < 0 then
Write('нет решений')
else write('x =',b/a,' или x =',-b/a);
End.
обратите внимание, что для проверки условия «a и b имеют разные знаки» использовано произведение a*b, которое больше нуля, когда два значения имеют одинаковые знаки, и меньше нуля – когда разные
2) Программа работает неправильно, если a и b равны нулю: в этом случае решением уравнения является любое число x, а программа выдаст только решение . Хотя в задании сказано «Приведите пример таких чисел a, b, x,…», значение x ни на что не влияет (см. далее), в ответе можно указать любое число x. Например,
Лишняя часть программы – ввод x, поскольку это не исходные данные, а результат. Поэтому вместо оператора
|
|
readln(a,b,x);
правильнее написать
readln(a,b);
Переменная x далее не используется, поэтому ее не нужно объявлять:
var a,b: real;
Возможная доработка программы – добавить еще один условный оператор, обрабатывающий неучтенный случай (a и b равны нулю), при котором решением является любое число:
var a,b: real;
Begin
Readln(a,b);
if b = 0 then
if a = 0 then
Write('любое число')
else write('x = 0')
Else
if a = 0 then
Write('нет решений')
else write('x =',-b/a);
End.
можно еще немного оптимизировать программу: заметим, что в обеих частях первого условного оператора встречается оператор if a = 0 then; его можно «вынести» наверх, сделать внешним, а не вложенным:
if a = 0 then
if b = 0 then
Write('любое число')
Else write('нет решений')
Else
write('x=',-b/a);
если вы боитесь запутаться во вложенных условных операторах, можно использовать сложные условия и рассмотреть три возможных варианта (важно не забыть ни один!):
if (a=0) and (b=0)then
write('любое число');
if (a=0) and (b<>0)then
write('нет решений');
if a <> 0 then
write('x=',-b/a);
здесь нужно убедиться, что для каждого варианта входных данных сработает один и только один условный оператор
|
|
3) Согласно условию, нас интересует область, закрашенная на рисунке серым цветом. Если рассмотреть границы области по осям координат, получим четыре условия:
по оси X:
по оси Y:
В программе не учитывается условие , причем оно не перекрывается другими условиями. Поэтому программа работает неправильно в том случае, когда и (область красного цвета на рисунке). Одна из таких точек:
Для доработки программы нужно добавить еще один условный оператор с недостающим условием и соответствующий ему else-блок, выдающий сообщение в случае невыполнения этого условия:
var x0, у0, у: real;
Begin
readln (x0, y0);
if (x0 < 2)then begin
if (x0 > 0)then begin
if (y0 > 0)then begin
у := 2 – х0;
if (y0 < у) then
writeln ('точка лежит внутри области')
else writein ('точка не лежит внутри области');
End
else writeln ('точка не лежит внутри области');
End
else writeln ('точка не лежит внутри области');
End
else writeln ('точка не лежит внутри области');
End.
Это решение работает, но громоздко и некрасиво. Заметим, что два условия и автоматически обеспечивают выполнение условия , которое становится лишним:
if (x0 > 0)then begin
if (y0 > 0)then begin
|
|
у := 2 – х0;
if (y0 < у) then
Дата добавления: 2018-06-01; просмотров: 284; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!