Задание EGEINF8D5EEF: Самостоятельное написание алгоритма

ФИПИ · ЕГЭ · все форматы ответа · 2475 заданий

Открыть решение ↓ Ошибка или пожелание

Тип задачи: Самостоятельное написание алгоритма.

Учебные темы: Язык программирования (Паскаль, Python, Java, C++, C#). Типы данных: целочисленные, вещественные, символьные, логические. Ветвления. Сложные условия. Циклы с условием. Циклы по переменной. Обработка данных, хранящихся в файлах. Текстовые и двоичные файлы. Файловые переменные (файловые указатели). Чтение из файла. Запись в файл. Разбиение задачи на подзадачи. Подпрограммы (процедуры и функции). Использование стандартной библиотеки языка программирования.

Дайте развернутый ответ.

Требовалось написать программу, которая решает уравнение «ax+b=0» относительно x для любых чисел a и b, введенных с клавиатуры. Все числа считаются действительными. Программист торопился и написал программу неправильно.

 

ПРОГРАММА НА ПАСКАЛЕ

ПРОГРАММА НА БЕЙСИКЕ

ПРОГРАММА НА СИ

var a, b, x: real;
begin
readln(a,b,x);
if b = 0 then
write('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
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) Укажите, как нужно доработать программу, чтобы не было случаев ее неправильной работы. (Это можно сделать несколькими способами, поэтому можно указать любой способ доработки исходной программы).


 

i
СВОЙСТВА ЗАДАНИЯ
КЭС:
3.2 Оценка сложности вычислений. Время работы и объём используемой памяти, их зависимость от размера исходных данных. Оценка асимптотической сложности алгоритмов. Алгоритмы полиномиальной сложности. Переборные алгоритмы. Примеры различных алгоритмов решения одной задачи, которые имеют различную сложность
3.6 Язык программирования (Паскаль, Python, Java, C++, C#). Типы данных: целочисленные, вещественные, символьные, логические. Ветвления. Сложные условия. Циклы с условием. Циклы по переменной. Обработка данных, хранящихся в файлах. Текстовые и двоичные файлы. Файловые переменные (файловые указатели). Чтение из файла. Запись в файл. Разбиение задачи на подзадачи. Подпрограммы (процедуры и функции). Использование стандартной библиотеки языка программирования
Тип ответа:Развернутый ответ
Номер: 8D5EEF
НЕ РЕШЕНО Изменить статус

Решение задания EGEINF8D5EEF

Ответ: Контрпример a = 0, b = 0, x = 1; убрать ввод и объявление x; при a = b = 0 вывести любое число

Решение.
1) Контрпример: a = 0, b = 0, x = 1. Первая проверка исходной программы b = 0 истинна, поэтому она печатает только x = 0. В действительности уравнение превращается в 0 · x + 0 = 0 и выполняется при любом действительном x, в частности при x = 1. Сообщённое множество корней неполно.
2) Переменная x не нужна в исходных данных: её значения следует найти по коэффициентам a и b. Убираем её объявление и ввод. Для Pascal остаются var a, b: real и readln(a, b); для Бейсика — ввод только a и b, для Си — две переменные и два соответствующих спецификатора с адресами в scanf.
3) Сначала различаем a = 0 и a ≠ 0. При a = 0 исходное равенство равносильно b = 0. Если одновременно b = 0, подходят все действительные числа; если b ≠ 0, решений нет. При a ≠ 0 переносим b: ax = −b, затем получаем единственный корень x = −ba. Отдельная ветвь для b = 0 здесь не нужна: формула сама даёт нулевой корень.
Такой порядок проверок полностью разбирает возможные коэффициенты и исключает деление на ноль. В программе Python 3 функция truediv из стандартного модуля operator выполняет обычное деление; a и b вводятся через пробел в одной строке.

from operator import truediv
a, b = map(float, input().split())
if a == 0:
    if b == 0:
        print('любое число')
    else:
        print('нет решений')
else:
    print('x =', truediv(-b, a))

Проверка. При a = 0, b = 0 выводится «любое число». При a = 0, b = 5 получается «нет решений», потому что равенство 5 = 0 ложно. При a = 2, b = −6 корень равен 3, и 2 · 3 − 6 = 0. При a = −2, b = 4 корень равен 2, и −2 · 2 + 4 = 0. При ненулевом a и b = 0 единственный корень действительно нулевой.
Ответ: Контрпример a = 0, b = 0, x = 1; убрать ввод и объявление x; при a = b = 0 вывести любое число.

Помочь улучшить сайт

Напишите пожелание к сайту или решению либо сообщите о найденной неточности в задании EGEINF8D5EEF.

Сообщение увидит только команда сайта: на странице оно не публикуется.

Комментарии к решению

Комментарии видны всем посетителям сайта.

Комментариев пока нет. Будьте первым.

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