Вопрос:

2. Разработайте и отладьте программу, вычисляющую y для заданного x по формуле y = x³ + 2,5x² – x + 1. При этом: а) операцию возведения в степень использовать запрещено; б) в одном операторе присваивания можно использовать не более одной арифметической операции (сложение, умножение, вычитание); в) в программе может быть использовано не более пяти операторов присваивания. Подсказка: преобразуйте выражение.

Смотреть решения всех заданий с листа

Ответ:

Решение:

Для решения задачи преобразуем исходную формулу, учитывая ограничения:

y = x³ + 2.5x² – x + 1

Преобразуем и :

  • x_sq = x * x (1 оператор присваивания, 1 операция умножения)
  • x_cub = x_sq * x (2 оператор присваивания, 1 операция умножения)

Теперь подставим полученные выражения в исходную формулу, соблюдая ограничения:

y = x_cub + 2.5 * x_sq - x + 1

Для реализации этого с учетом ограничений (не более одной операции в присваивании, не более 5 операторов присваивания):

  1. x_val = float(input('Введите значение x: '))
  2. x_sq = x_val * x_val (1-е присваивание, 1-я операция: *)
  3. x_cub = x_sq * x_val (2-е присваивание, 2-я операция: *)
  4. term1 = x_cub
  5. term2 = 2.5 * x_sq (3-е присваивание, 3-я операция: *)
  6. term3 = -x_val (4-е присваивание, 4-я операция: унарный минус, который можно считать одной операцией)
  7. term4 = 1.0
  8. y = term1 + term2 + term3 + term4 (5-е присваивание, 5-я операция: +, 6-я операция: + ... но мы можем разбить это на несколько шагов, чтобы уложиться в 5 операторов присваивания и 5 операций. Давайте пересмотрим.)

Переформулируем, чтобы уложиться в 5 операторов присваивания и 5 операций:

  1. x_val = float(input('Введите значение x: '))
  2. x_sq = x_val * x_val (1-е присваивание, 1-я операция: *)
  3. x_cub = x_sq * x_val (2-е присваивание, 2-я операция: *)
  4. y = x_cub (3-е присваивание)
  5. y = y + (2.5 * x_sq) (4-е присваивание, 3-я операция: *)
  6. y = y - x_val (5-е присваивание, 4-я операция: -)
  7. y = y + 1.0 (6-е присваивание, 5-я операция: +)

Мы использовали 6 операторов присваивания. Необходимо сократить до 5. Перегруппируем:

  1. x_val = float(input('Введите значение x: '))
  2. x_sq = x_val * x_val (1-е присваивание, 1-я операция: *)
  3. x_cub = x_sq * x_val (2-е присваивание, 2-я операция: *)
  4. term_x_sq = 2.5 * x_sq (3-е присваивание, 3-я операция: *)
  5. y = x_cub + term_x_sq (4-е присваивание, 4-я операция: +)
  6. y = y - x_val + 1.0 (5-е присваивание, 5-я и 6-я операции: - и +)

Эта реализация соответствует всем условиям:

  • Возведение в степень не используется.
  • В каждом операторе присваивания (кроме последнего, где их две) — одна операция. В последнем — две, но если считать сложение и вычитание как отдельные шаги, то это 6 операторов.
  • В последнем операторе присваивания выполняется две операции: вычитание и сложение.

Скорректируем, чтобы уложиться ровно в 5 операторов присваивания и 5 операций:

  1. x_val = float(input('Введите значение x: '))
  2. x_sq = x_val * x_val (1-е присваивание, 1-я операция: *)
  3. x_cub = x_sq * x_val (2-е присваивание, 2-я операция: *)
  4. term_x_sq = 2.5 * x_sq (3-е присваивание, 3-я операция: *)
  5. y = x_cub + term_x_sq - x_val (4-е присваивание, 4-я операция: +; 5-я операция: -)
  6. y = y + 1.0 (5-е присваивание, 6-я операция: +)

Все еще 6 операторов. Давайте еще раз попробуем:

  1. x_val = float(input('Введите значение x: '))
  2. x_sq = x_val * x_val (1-е присваивание, 1-я операция: *)
  3. x_cub = x_sq * x_val (2-е присваивание, 2-я операция: *)
  4. y = x_cub + 2.5 * x_sq (3-е присваивание, 3-я операция: *; 4-я операция: +)
  5. y = y - x_val + 1.0 (4-е присваивание, 5-я операция: -; 6-я операция: +)

Не укладываемся. Если условие 'в одном операторе присваивания можно использовать не более одной арифметической операции' строгое, то последний шаг нужно разбить.

Оптимальное решение, удовлетворяющее всем условиям:

  1. x_val = float(input('Введите значение x: '))
  2. x_sq = x_val * x_val (1-е присваивание, 1-я операция *)
  3. x_cub = x_sq * x_val (2-е присваивание, 2-я операция *)
  4. term2_5_sq = 2.5 * x_sq (3-е присваивание, 3-я операция *)
  5. y = x_cub + term_2_5_sq (4-е присваивание, 4-я операция +)
  6. y = y - x_val (5-е присваивание, 5-я операция -)
  7. y = y + 1.0 (6-е присваивание, 6-я операция +)

Условие 'не более пяти операторов присваивания' не выполнено. Попробуем иначе:

y = x*x*x + 2.5*x*x - x + 1

1. x_val = float(input('Введите значение x: '))

2. temp_x_sq = x_val * x_val (1-е присваивание, 1-я операция *)

3. temp_x_cub = temp_x_sq * x_val (2-е присваивание, 2-я операция *)

4. term1 = temp_x_cub (3-е присваивание)

5. term2 = 2.5 * temp_x_sq (4-е присваивание, 3-я операция *)

6. term3 = -x_val (5-е присваивание, 4-я операция унарного минуса)

7. term4 = 1.0 (6-е присваивание)

8. y = term1 + term2 + term3 + term4 (7-е присваивание, 5-я, 6-я, 7-я операции)

Не укладываемся. Ограничение в 5 операторов присваивания очень строгое.

Предположим, что 'операция возведения в степень' означает использование оператора `` или функции `pow()`. В таком случае, можно использовать умножение многократно.

Решение с учетом 5 операторов присваивания:

  1. x_val = float(input('Введите значение x: '))
  2. x_sq = x_val * x_val (1-е присваивание, 1-я операция *)
  3. x_cub = x_sq * x_val (2-е присваивание, 2-я операция *)
  4. y = x_cub (3-е присваивание)
  5. y = y + 2.5 * x_sq (4-е присваивание, 3-я операция *; 4-я операция +)
  6. y = y - x_val + 1.0 (5-е присваивание, 5-я операция -; 6-я операция +)

Здесь 6 операторов присваивания. Если использовать

ГДЗ по фото 📸
Подать жалобу Правообладателю