Цикл лабораторных работ первого семестра
3.1 Лабораторная работа №1. Программа определения суммы чисел
Задание
Разработать программу для определения суммы трёх чисел a+b+c.
Методическое указание
Внимательно изучите простейший пример из раздела 2. Третья программа этого раздела будет служить вам заготовкой для проектирования последующих своих программ.
С самого начала беритесь за дело грамотно. Составьте проект в среде Borland C 3.1 (смотрите раздел 5.1), откомпилируйте и выполните программу (смотрите раздел 5.2), установите точку останова на выделенную строку и проинспектируйте в пошаговом режиме значения переменных a, b, c. Это позволит вам на практике ознакомится с простейшими способами отладки программ в среде Borland C 3.1.
Попробуйте что-нибудь изменить в программе. Введите какую-нибудь ошибку и наблюдайте за реакцией компилятора. Встав на строку сообщения об ошибке, нажмите клавишу [Enter] – компилятор автоматически найдет соответствующую строку в исходном тексте.
При разработке любой программы необходимо четко представлять допустимый диапазон значений исходных, промежуточных и результирующих данных. Каждая программы имеет свои границы таких данных. Границы данных должны согласовываться с заказчиком программного продукта и указываться как в техническом задании на проект, так и документах сопровождающих разработанный проект. При разработке, а затем и при тестировании программ необходимо проверять поведение программы при выходе данных за заданные границы. В рассматриваемой задаче введите, например, значение числа a большее 33000 и проверьте, какой результат будет получен. Такая проверка называется проверкой исключительных ситуаций. Другой проверкой исключительных ситуаций будет проверка сложения двух чисел, сумма которых превышает допустимый диапазон представления данных типа INTEGER (а именно от -32 768 до 32 767).
Результаты проверки исключительных ситуаций должны приводиться в документации на разработанную программу. В нашем случае это отчет о лабораторной работе № 1.
Попробуйте самостоятельно модифицировать программу таким образом, чтобы она предупреждала пользователя о допустимых границах сначала для вводимого значения числа a, а затем для значения второго слагаемого – числа b. Другая модификация программы может заключаться в том, чтобы получать сумму трех чисел.
Лабораторная работа №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.
За основу циклической части программы могут быть взяты операторы первой лабораторной работы, отвечающие за проверку повтора программы.