Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Пособие.doc
Скачиваний:
4
Добавлен:
23.04.2019
Размер:
964.1 Кб
Скачать

3.2 Лабораторная работа №2. Решение квадратного уравнения Задание

Разработать программу для решения уравнения вида в области действительных чисел (опорный алгоритм приведен на рисунке 2).

Решение уравнения должно быть получено при любых действительных значениях коэффициентов a, b, c (в том числе нулевых).

Обратите внимание, что в программе целесообразно изменить тип переменных с целочисленного int на float в строке float a, b, c, …;. Это тип переменной с плавающей точкой. Он позволяет хранить дробные числа. Согласитесь, что программа, работающая только с целыми данными, не так уж и полезна.

Такое изменение вызывает ряд связанных с ним изменений:

во-первых, к программе необходимо подключить библиотеку математических функций: #include < math.h>;

во-вторых, заменить в функциях ввода\вывода определения формата данных с %d на %f;

в-третьих, использовать в соответствующих выражениях присваивания имена функций извлечения квадратного корня и получения абсолютного значений подкоренного выражения, например, sqrt(fabs(d/(2*a);

и наконец, использовать общий вид условного оператора –

if ( <выражение условия> { <операторы> } else {<операторы>}

Рис. 2. Опорный алгоритм решения задачи

Методические указания

Обратите внимание на три аспекта представленного на рисунке 2 опорного алгоритма:

  1. Данная схема выполнена с некоторыми отступлениями от рекомендаций по реализации схем алгоритма. В частности, она изобилует подробностями, которые не должны присутствовать на функциональной схеме. Это связано с необходимостью представить исчерпывающий материал для разработки в одной схеме, не создавая дополнительных объяснений;

2. На схеме алгоритма символ ввода данных предполагает диалог с пользователем, включающий выдачу ему приглашения на ввод каждого значения.

3. Схема алгоритма не отражает возможность равенства нулю некоторых коэффициентов уравнения. Например, при а=0 последствия выполнения соответствующей программы становятся просто катастрофическими: деление на 0 вызывает ее грубое прерывание вместо определения корней. Вам необходимо соответственно доработать алгоритм, представленный на рис. 2.

При создании тестовых примеров необходимо заранее знать результаты правильно работающей программы. Для нашей программы мы должны задать такие значения a, b, c для которых заранее известен результат. Например, мы хотим получить корни -5 и 3. Уравнение для таких корней выглядит следующим образом: . Приведя его к форме квадратного уравнения, получаем следующее уравнение, а значит и исходные коэффициенты для нашей программы: .

При выборе исходных данных целесообразно избегать для них значений 1 и 0 вследствие того, что мы не сможем определить, не произошло ли умножение на 1 и не выполнено ли сложение с 0. Поэтому выберем, например, a = 2, b=4, c=-30.

Для полноценного тестирования программы необходимо учесть все возможные варианты развития действий, то есть все ветви алгоритма. Выполнение определенных ветвей алгоритма происходит при появлении соответствующих условий. Исходя из опорного алгоритма к работе, у нас есть 3 ветви, но при дальнейшей разработке их количество может увеличиться. В нашей программе учтена возможность вычисления уточненных значений корней. Поэтому необходимо задать такие значения коэффициентов уравнения, которые позволят убедиться в достижении заданного результата. Например, введем значения в = 1.0 E 10, a = 1.0 E-10, то есть b существенно больше 4ac.

За основу циклической части программы могут быть взяты операторы первой лабораторной работы, отвечающие за проверку повтора программы.