Сайт Льва Волкова
  
· В Моухейв Каунти в Аризоне вора, попавшегося на краже мыла, предписывается мыть этим мылом до тех пор, пока оно не кончится.
 
      На главную  
 Личное
  Статьи
  Задачи 
 Ссылки
 АТ-531
www.levvol.ru    
 

О решении задачи С1
— решение уравнения

Очень важные соображения о решении задач класса С ЕГЭ приведены в книге Отличник ЕГЭ. Информатика. Решение сложных задач. Крылов С.С, Ушаков Д.М_2010 -152с

О решениии задачи C1

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

Последовательно выполните три задания:

  1. Приведите пример таких чисел a,b,x, при которых программа неверно решает поставленную задачу.
  2. Укажатие, какя часть программы является лишней.
  3. Укажите, как нужно доработать программу, чтобы не было случаев её неправильной работы. (Это можно сделать несколькими си достаточно указать любой способ доработки исходной программ:

В первую очередь, рассмотрим поставленную задачу с позиций математики: возможны следующие варианты:

  • a=0 и b=0 — x — любое число;
  • a=0 и b≠0 — нет решений;
  • a≠0 — x=-b/a.

В соответствии с приведенными программами нарисуем блок-схему алгоритма

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

  • При a=0 и b=0 будет выведено "x=0", что неверно.
  • Ввод параметра x является лишним.
  • Доработка программы:
   var a,b,x:real;
	    begin
		readln(a,b);
		if a=0 then
		  if b=0 then
		   write('x-любое число')
		         else
		    write('нет решений')
			 	 else
			write('x=',-b/a);	 
		end.
	

Отметим, что else всегда относится к ближайшему if.

Теперь попробуйте самостоятельно порешать задачи C1 демоверсий ЕГЭ: Меню сайта [Статьи] [ЕГЭ по информатике] [Демоверсии].