- 02.10.2020
- 411
- 2
Рабочие листы
к вашим урокам
Скачать
Формулировка. Даны вещественные числа a, b и c, причем a отлично от 0. Решить квадратное уравнение ax2 + bx + c = 0 или сообщить о том, что действительных решений нет.
Решение. Из алгебры известно, что:
Квадратное уравнение ax2 + bx + c = 0, выражение D = b2 – 4ac – дискриминант:
– если D > 0, имеет два решения: , ;
– если D = 0, имеет единственное решение: ;
– если D < 0, не имеет действительных решений.
Следовательно, нам необходимо вычислить дискриминант (заведем для него вещественную переменную d типа real) и в зависимости от его значения организовать ветвления. Сначала нужно проверить, имеет ли уравнение действительные решения (для решений заведем переменные x1 и x2 типа real). Если да, и если дискриминант не равен нулю, то вычисляем оба решения по формулам, а если дискриминант равен нулю, то вычисляем единственное решение. Если же действительных решений нет, выводим текстовое сообщение об этом. Основной алгоритм можно проиллюстрировать следующей блок-схемой:
Три нерасшифрованных блока представляют собой стандартные операторы вывода. Разберем их подробнее:
1) При выводе двух корней выражение будет выглядеть следующим образом:
x1 := (-b + sqrt(d)) / 2 * a;
x2 := (-b - sqrt(d)) / 2 * a;
writeln('x1 = ', x1:4:2, ', x2 = ', x2:4:2);
При этом выводимое выражение будет выглядеть так: 'x1 = m, x2 = n', где синим цветом выделены однозначные текстовые константы, которые берутся из списка аргументов writeln, красным – вычисленные значения x1 и x2. Причем корни выведены в форматированном виде: число после первого двоеточия задает ширину поля вывода для переменной вместе с точкой (при нехватке поля она будет расширено программой), а число после второго двоеточия – количество выводимых дробных знаков (его при работе программы изменить нельзя);
2) При выводе одного корня – все то же самое, только выводится один корень:
x1 := -(b / 2 * a);
writeln('x = ', x1:4:2);
3) При отсутствии действительных корней выводим сообщение:
writeln('No real solutions!');
В итоге внутренний условный оператор с телом включительно будет выглядеть так:
if d <> 0 then begin
x1 := (-b + sqrt(d)) / 2 * a;
x2 := (-b - sqrt(d)) / 2 * a;
writeln('x1 = ', x1:4:2, ', x2 = ', x2:4:2)
end
else begin
x1 := -(b / 2 * a);
writeln('x = ', x1:4:2)
end;
Код:
6 655 003 материала в базе
Настоящий материал опубликован пользователем Юсупов Зиявдин Абдулкеримович. Инфоурок является информационным посредником и предоставляет пользователям возможность размещать на сайте методические материалы. Всю ответственность за опубликованные материалы, содержащиеся в них сведения, а также за соблюдение авторских прав несут пользователи, загрузившие материал на сайт
Если Вы считаете, что материал нарушает авторские права либо по каким-то другим причинам должен быть удален с сайта, Вы можете оставить жалобу на материал.
Удалить материалВаша скидка на курсы
40%Курс повышения квалификации
72 ч. — 180 ч.
Курс профессиональной переподготовки
600 ч.
Курс профессиональной переподготовки
300 ч. — 1200 ч.
Мини-курс
10 ч.
Оставьте свой комментарий
Авторизуйтесь, чтобы задавать вопросы.