Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Решение квадратного уравнения

Тип AnsiString

Тип строк AnsiString реализован в C++Builder как класс. Это строки с нулевым символом на конце. При определении переменные типа AnsiString инициализируются нулевыми строками.

Для AnsiString определены операторы сравнения ==.!=. <, <=, >, >=, операторы присваивания = и += и оператор склеивания строк +. Определен также оператор индексации []. Индексация начинается с 1. Примеры работы с такими строками будут приведены ниже.

Для решения квадратного уравнения создадим проект, имеющий форму, показанную на рис.1.

 


Рис. 1. Элементы управления и их свойство Name

 

Здесь на форме размещены два компонента типа GroupBox (групповое окно), который используется как контейнер для других компонентов. В групповом окне GrpBxEquation помещена одна метка LblSolve, в групповом окне GrpBxEquation помещена метка Label1 и окна редактирования TEdit. Использование группового окна позволяет задать общее видимое название для группы компонентов, при перемещении группового окна компоненты, размещенные на нем, перемещаются синхронно с этим групповым окном.

В качестве значения свойства Caption метки Label1 задана строка

X^2 + X + = 0

Над пробелами этой строки располагаются компоненты Edit для ввода коэффициентов.

У всех визуальных компонентов есть свойство Font, с помощью которого можно задавать нужный вид, размер и цвет шрифта для текста, отображаемого на компоненте.

 

Обработчик события OnClick для кнопки «Вычислить»

Событие OnClick возникает при однократном щелчке мыши по компоненту, при нажатии клавиши Enter или пробел, когда активна кнопка.

В обработчике этого события следует прочитать значения коэффициентов и решить квадратное уравнение по известной формуле.

Значения коэффициентов пользователь программы набирает в окнах редактирования, причем коэффициенты будут находиться в свойстве Text, которое имеет тип
AnsiString. Коэффициенты, представленные в строковом виде, следует преобразовать в числовое значение. Это делается с помощью функции

 

Extended StrToFloat(const AnsiString s)

 

Функция StrToFloat преобразует строку s в число типа Extended и при успехе возвращает полученное значение. Если строка s не содержит число, при работе StrToFloat возникнет ошибка и будет сгенерировано исключение.

Extended – это тип чисел с плавающей точкой размером 10 байт.

В рассматриваемом обработчике вызов StrToFloat заключен в блок

 

try{ }

 

При возникновении исключения (ошибки) в этом блоке, управление будет передано в стоящий следом блок

 

catch(…){ }

 

Обработка исключения состоит в простом занулении коэффициентов.

После того как корни уравнение вычислены, формируется строка с решением St, которая присваивается свойству Caption метки LblSolve.

Вот код обработчика:

 

void __fastcall TFrmSqEq::BtnSolveClick(TObject *Sender)

{

float a, b, c, d; //Коэффициенты

float x1, x2; //Корни уравнения

AnsiString St; //Строка для решения

try{ //Пробуем

a = StrToFloat(EdA->Text); // получить коэффициент a

}

catch(...){ //Если не получилось,

a = 0; EdA->Text = "0"; //зануляем его

}

try{ //Пробуем

b = StrToFloat(EdB->Text); //получить коэффициент b

}

catch(...){ //Если не получилось,

b = 0; EdB->Text = "0"; //зануляем его

}

try{

c = StrToFloat(EdC->Text); //Коэффициент c

}

catch(...){

c = 0; EdC->Text = "0";

}

d =(b * b - 4 * a * c); //Дискриминант

if(d < 0)

St = "Действительных корней нет"; //Строка ответа

else if(a!= 0 && d > 0){

x1 = (-b - sqrt(d))/(2 * a); //Первый корень

x2 = (-b + sqrt(d))/(2 * a); //Второй корень

St = "X1 = " + FloatToStrF(x1, ffFixed, 5, 2)

+ " X2 = " + FloatToStrF(x2, ffFixed, 5, 2);

}

else if(a!= 0 && d == 0){

x1 = -b / (2 * a);

St = "X = " + FloatToStrF(x1, ffFixed, 5, 2);

}

else if(a == 0 && b!= 0){ //Уравнение линейное

x1 = -c / b;

St = "X = " + FloatToStrF(x1, ffFixed, 5, 2);

}

else

St = "Нет решений";

LblSolve->Caption = St; //Отображаем решение

EdA->SetFocus(); //Переводим фокус на коэффициент a

}

 

Для преобразование числовых значений корней в строковые, использована функция

AnsiString FloatToStrF(Extended Value, TFloatFormat Format,

int Precision, int Digits);

Здесь Value – число, Format задает тип форматирования, Digits – число цифр после десятичной точки, Precision – число цифр перед десятичной точкой. При вызове этой функции для параметра Format использовано значение ffFixed, которое задает преобразование числа к виду с фиксированной точкой.

 

<== предыдущая лекция | следующая лекция ==>
Ввод и отображение текстовой информации | Обработчик события OnChange для полей ввода коэффициентов
Поделиться с друзьями:


Дата добавления: 2014-01-07; Просмотров: 322; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.014 сек.