Академический Документы
Профессиональный Документы
Культура Документы
Languages
Общее задание
Разработать интерактивную программу «Quadric Equation» («Квадратное урав-
нение») для решения квадратных уравнений вида: 𝑎𝑥 2 + 𝑏𝑥 + 𝑐 = 0. Программа
должна запрашивать у пользователя соответствующие параметры a, b и с и, в
зависимости от вычисленного дискриминанта D, выдавать соответствующий
результат. В случае отрицательного дискриминанта программа должна выво-
дить сообщение о том, что действительных корней нет.
Индивидуальное задание
Согласно своему варианту необходимо реализовать на языке Python задания,
которые были даны на лабораторной работе «Разветвляющиеся алго-
ритмы» по параллельной специализированной дисциплине «Основы алго-
ритмизации и программирования» за первый семестр первого курса обучения.
Дополнительное задание
1) Напишите программу, которая бы эмулировала игру «Dice» (игра в кости). Суть
игры заключается в броске двух шестигранных кубиков (костей) и подсчёта об-
щей суммы очков, которые выпали на первой и второй костей. Для генериро-
вания случайного значения на костях воспользуйтесь функциями из стандарт-
ного модуля random.
Best of LUCK with it, and remember to HAVE FUN while you’re learning :)
Victor Ivanchenko
Продолжение таблицы 1
Решение
Перед написание основного приложения разработаем алгоритм решения за-
дания.
Вербальное описание алгоритма (словесная последовательность действий) со-
стоит из следующих шагов:
1) вводим соответствующие коэффициенты a, b и c;
2) проверяем правильности ведённых данных, в частности коэффициента a,
который не должен быть равен нулю, иначе, во-первых, у нас получиться не квад-
ратное уравнение и, во-вторых, может произойти деление на ноль. Примем, что
если коэффициент a равен нулю, то осуществляем вывод соответствующего сооб-
щения и переходим к пункту 7;
3) вычисляем дискриминант;
4) если дискриминанта больше нуля, то вычисляем 2 корня и выводим их на
экран, а затем переходим к пункту 7
5) если дискриминанта равен нулю, то вычисляем один корень и выводим его
на экран, а затем переходим к пункту 7
6) если дискриминанта меньше нуля, то выводим сообщение о том, что дей-
ствительных корней нет;
7) завершаем выполнение программы.
Блок схема работы алгоритма решения задачи была построена в Microsoft Of-
fice Visio 2013 и приведена на рисунке 1.
Программа была написана и тестировалась с использованием среды разра-
ботки JetBrains PyCharm Community Edition. Код программы представлен ниже, а те-
стирование всех случаев (условий) выполнения программы – на соответствующих
рисунках 2, 3, 4 и 5.
1
Start
Блок начала
алгоритма
Блок для ввода данных
2
a, b, c
Блок-действия 3
True False
a != 0
5 False
9 False
D>0 D == 0
True True
6 10
True
x1=(-b+sqrt(D))/(2a)
x = -b / (2a)
x2=(-b-sqrt(D))/(2a)
7 11 12 13
«"a" must be
x1, x2 x «not real roots»
nonzero»
8 Блок вывода
Блок окончания End данных
алгоритма
import math
if discriminant > 0:
x1 = (-b + math.sqrt(discriminant)) / (2 * a)
x2 = (-b - math.sqrt(discriminant)) / (2 * a)
msg = "There are two roots of equation: x1 = {}, x2 = {}".format(x1.x2)
elif discriminant == 0:
x = -b / 2 / a
msg = "There is only one root of equation: x = " + str(x)
else:
msg = "There isn't real roots of equation."
else:
msg = "Input Error: First coefficient must be nonzero!"
return msg
a = float(input("Input a: "))
b = float(input("Input b: "))
c = float(input("Input c: "))
if a != 0:
Высчитываем дискриминант в случае
верных переданных функции данных
discriminant = b ** 2 - 4 * a * c
if discriminant > 0:
Находим два корня уравнения в случае
положительного дискриминанта
x1 = (-b + math.sqrt(discriminant)) / (2 * a)
x2 = (-b - math.sqrt(discriminant)) / (2 * a)
msg = "There are two roots of equation: x1 = {}, x2 = {}".format(x1, x2)
elif discriminant == 0:
Находим единственный корень уравнения в
случае, когда дискриминант равен нулю
x = -b / 2 / a
msg = "There is only one root of equation: x = " + str(x)
else:
msg = "There isn't real roots of equation."
return msg
Возвращаем соответствующее сообщение о
неверных переданных данных
a = float(input("Input a: "))
b = float(input("Input b: ")) Ввод пользовательских данных и преоб-
c = float(input("Input c: ")) разования их к вещественному типу
result = solve_equation(a, b, c)
Вызов функции
Объявление промежуточной
переменной, которой будет
присваиваться возвращаемое
функцией значение Вывод соответствующего результата в си-
стемную консоль (терминал) с помощью
встроенной функции print()
print(result)
Контрольные вопросы
1. Перечислите основные фундаментальные конструкции,
которые используются при построении любой
компьютерной программы.
2. Зачем нужно в начале разрабатывать алгоритм решения
задачи и проектировать будущее приложение, а затем лишь преступать к
непосредственному написанию кода программы?
3. Опишите основные элементы блок-схемы для графического предоставления
алгоритма решения задачи?
4. Как в языке Python реализуется механизм истинности-ложности? Может ли
само значение выступать в качестве условия? Какое при этом используется
правило?
5. Опишите синтаксис сокращённой условной конструкции if, которая
используется для исполнения кода при определённом условии. Представьте
примерную блок-схему конструкции.
6. С помощью каких операторов (операций) можно комбинировать в одной
условной конструкции if несколько условий чтобы объединить результат?
Кратенько опишите принцип их действия. Какой механизм оптимизации
применяет интерпретатор Python для эффективного вычисления результата
комбинированных условных выражений?
7. Опишите синтаксис средней условной конструкции if-else, которая
используется для выбора вариантов продолжения выполнения кода при
определённом условии. Представьте примерную блок-схему конструкции.
8. Опишите синтаксис полной условной конструкции if-elif-else, которая
используется для множественного выбора исполнения кода на основе
нескольких условий. Представьте примерную блок-схему конструкции.
9. Чем использование полной условной конструкции if-elif-else будет
отличаться от использования вложенных конструкций if-else в случае
использования их при решении одного и того же алгоритма?
10. Как сгенерировать случайную последовательность чисел с использованием
функций randint(…) и randrange(…)? Чем они отличаются? Какие ещё есть
полезные для вас функции в модуле random?