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

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

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

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

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

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

Требовалось написать программу, которая решает неравенство «ax+b>0» относительно 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
write('x>',-b/a);
end.

INPUT a, b, x
IF a = 0 THEN
IF b > 0 THEN
PRINT "любое число"
ELSE
PRINT "нет решений"
ENDIF
ELSE
PRINT "x>", -b/a
ENDIF
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
printf("x>%f",-b/a);
}

 

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


 

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

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

Ответ: Контрпример a = −2, b = 4, x = 0; убрать ввод и объявление x; при отрицательном a изменить направление неравенства

Решение.
1) Контрпример: a = −2, b = 4, x = 0. Исходная программа выводит x > 2. Но неравенство имеет вид −2x + 4 > 0, откуда −2x > −4 и x < 2: при делении на отрицательное число знак меняется. Например, x = 0 удовлетворяет исходному неравенству, а x = 3 — нет. Программа сообщает противоположный луч.
2) Лишние действия — объявление и ввод x. Искомую переменную не надо получать от пользователя: программа должна вывести множество всех подходящих x по заданным a и b. В исходном Pascal достаточно var a, b: real и readln(a, b). Аналогично в Бейсике убирается x из INPUT, а в Си — третий спецификатор и третий адрес из scanf и лишняя переменная x из объявления.
3) Разбираем все случаи. При a = 0 неравенство превращается в b > 0: если b положительно, подходит любое действительное x, иначе решений нет. При a > 0 получаем x > −ba. При a < 0 получаем x < −ba. Других случаев для действительного a нет. Строгая граница не входит в решение.
В исправленной программе сначала проверяем a = 0, поэтому никогда не делим на ноль. В ненулевых ветвях оператор truediv из стандартного модуля operator вычисляет обычное деление двух чисел. Программа на Python 3 читает только a и b, записанные через пробел в одной строке.

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

Проверка. Для a = −2, b = 4 программа выводит x < 2.0. Для a = 2, b = −4 выводится x > 2.0; при x = 2 левая часть равна нулю, поэтому граница исключена. При a = 0, b = 1 подходит любое число; при a = 0, b = 0 или b = −1 решений нет. Все ветви проверяются прямой подстановкой в ax + b > 0.
Ответ: Контрпример a = −2, b = 4, x = 0; убрать ввод и объявление x; при отрицательном a изменить направление неравенства.

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

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

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

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

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

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

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