Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторные по Дельфи_2011.doc
Скачиваний:
1
Добавлен:
01.05.2025
Размер:
7 Мб
Скачать
☆

Лабораторная работа № 7 Программа "Квадратное уравнение"

Цель: познакомится с приемом обработки вещественных чисел, изучить объект Images.

Результатом разработки должна стать программа решения квадратного уравнения вида:

По введенным с клавиатуры исходным данным программа должна либо находить корни квадратного уравнения, либо выдавать сообщение о том, что данное уравнение не имеет решения. Вспомним алгоритм решения данного уравнения. В начале следует вычислить дискриминант уравнения, который определяется по формуле:

d=b2-4ac.

Затем в зависимости от величины дискриминанта определяется возможность нахождения решения данного уравнения. Если дискриминант положителен или равен нулю, то уравнение имеет решение и можно найти два его корня х и х2 (в случае равенства дискриминанта нулю два корня будут равны между собой). Вычисление корней производится по следующим формулам:

В случае же, если найденный дискриминант отрицателен, уравнение вообще не имеет решения.

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

Как всегда, работу над проектом начинают с разработки интерфейса программы.

Основное окно программы должно содержать три текстовых окна: для ввода исходных данных – коэффициентов а, b и с квадратного уравнения. Слева от каждого из этих окон должна находиться надпись, которая поясняет, какой именно коэффициент вводится в то или иное окно. Таким образом, количество надписей в основном окне должно быть равно трем. Ниже текстовых окон для ввода исходных данных должны находиться два текстовых окна для вывода решения (конечно, в том случае, если такое решение имеется). Над этими текстовыми окнами также должна располагаться поясняющая надпись.

Между окнами с исходными данными и окнами с результатами в основной форме расположите две экранные кнопки. Слева должна находиться кнопка, нажатие на которую приводит к решению уравнения. Назовите эту кнопку «Найти решение». Правее расположите кнопку «Сброс», щелчок на которой должен очищать как текстовые окна с исходными данными, так и текстовые окна с результатами. Эта кнопка должна имеет двоякое предназначение. Во-первых, она может понадобиться в том случае, если пользователь допустил ошибку при вводе исходных данных. Во-вторых, решение квадратного уравнения при других значениях коэффициентах.

Для того, чтобы немного оживить программу, вставим в форму иллюстрация юмористического характера, в правой части окна. Рис 1.

1. Измените заголовок формы на «Решение квадратного уравнения». Кроме этого, измените цвет формы, сделав его бледно-зеленым.

2. Создайте три текстовых окна Edit1, Edit2 и Edit3 для ввода исходных данных. В окнах недолжно быть информации, для этого свойства Text должно быть очищено. Шрифт полужирным и равным 10 пунктам (свойство Font).

3. Создайте окна Label1, Label2 и Label3 соответствующими надписями «Введите коэффициент» (свойство Caption) расположите около текстовых окон. Шрифт (свойство Font) измените, сделав его полужирным и увеличив его размер до 10 пунктов.

4 Создайте два текстовые окна Edit4 и Edit5, которые будут использоваться для вывода корней уравнения x1 и х2. Настройте эти объекты аналогично предыдущим. Так как ответ может быть как числовой так и текстовой, то изначально эти окна необходимо спрятать. Для свойства Visible установите значение False (ложно).

5. Надпись Label4 должна содержать информацию об итогах решения уравнения (как при наличии корней, так и при их отсутствии). Поскольку эта надпись в любом случае должна появляться только после ввода исходных данных и щелчке на кнопке «Найти решение», сделайте ее изначально невидимой. (Свойство Visible данного объекта должно быть False). Заголовок данной надписи измените на «корни уравнения», а шрифт заголовка сделайте полужирным и равным 10 пунктам. При отсутствии решения заголовок надписи будет иным, но соответствующее изменение заголовка производятся при написании программного кода.

6. Между верхней и нижней группой надписей расположите две экранные кнопки: Button1 и Button2. Для кнопки Button1 измените заголовок на «найти решение». Размеры кнопки увеличьте таким образом, чтобы данный заголовок был полностью виден. Шрифт заголовка сделайте полужирным и равным 12 пунктам. Аналогичные настройки шрифта произведете и для расположенной правее кнопки Button2. Заголовок на этой кнопки «сброс».

7. Для размещения иллюстрации воспользуйтесь объектом Panel1 щелкнув на кнопке панели Standard и растяните его справа от созданных ранее объектов. Свойство Caption очистите.

8. В объект Panel1 поместите объект Image1. щелкнув на кнопке панели Additional, при этом совместите верхний левый угол объекта Image1 с левым верхним углом фоновой панели Panel

9. Выделите в окне формы объект Image1. В инспекторе объектов свойство Tор установите значение 2. Данное свойство определяет положение рисунка относительно верха панели, на которой он расположен (верх рисунка будет на два пиксела ниже верха панели, для того чтобы не закрывать фаску).

1 0. В инспекторе объектов свойство Left установите значение 2. Данное свойство определяет положение рисунка относительно левого края панели, на которой он расположен.

11. Задержать указатель мыши на панели Panel1 на несколько секунд. В появившемся небольшом окне будут отображены основными характеристиками объекта, включая и его размеры. В этом окне будет информация следующего вида:

1 2. На форме объект image1 свойства width (ширина) устанавите значение 237 (на 4 меньше чем окно Panel1), а для свойства Height (высота) –значение 341.

13. Свойство stretch (растянуть) – установите TRUE. При данном значении произойдет автоматическая подгонка рисунка под размеры Panel1.

14 Нажмите на слово Image1 свойств Name. В открывшемся диалоговом окне Picture Editor нажми кнопу Load и выберите картинку.

15. Нажмите 2 раза на объекте «Найти решение» (кнопка Buttonl). В процедуре TForml.Buttonlciick. опишите следующие переменные: а, b и с, для дискриминанта d, и для хранения полученных корней уравнения xl и х2. Исходные данные и результаты имеют вещественные значения тип real:

var a,b,c,d,xl,x2:real;

16. В основной части процедуры произведите преобразование вводимых в текстовые окна исходных данных – строковых величин в соответствующие им числовые величины вещественного типа. Это преобразование осуществляется с помощью стандартной функции StrtoFloat:

a:=StrtoFloat(Edit1.Text);

b:=StrtoFloat(Edit2.Text);

c:=StrtoFloat(Edit3.Text);

17. Вычислите дискриминанта с помощью полученных в результате преобразования вещественных величин:

d:=sqr(b)-4*a*c;

Дальнейший ход решения задачи зависит от вычисленного значения дискриминанта. Если дискриминант неотрицателен, то необходимо произвести следующие действия:

1. Вычислить по известным формулам корни уравнения X1 и X2.

2. Сделать видимыми текстовые окна Edit4 и Edits, в которых будут выведены вычисленные корни.

3 . Преобразовать полученные вещественные корни с помощью стандартной функции Fioattostr в текстовые величины, годные для вывода в текстовых окнах.

4. Вывести надпись, поясняющую полученные результаты, предварительно сделав ее видимой.

Вся перечисленная последовательность действий может быть реализована в программе с помощью следующих операторов:

x1:=(-b-sqrt(d))/(2*a);

x2:=(-b+sqrt(d))/(2*а);

Edit4.Text:= FloattoStr (xl);

Edit4.Visible:=True;

Edit5.Text:=FloattoStr(x2);

Edit5.Visible:=True;

Label4.Visible:=True;

Label4.Caption:='Kopни уравнения'

В том случае если найденный дискриминант отрицателен, требуемые действия сводятся к тому, чтобы:

1. Вывести на экран надпись, говорящую об отсутствии решения уравнения, сделав надпись перед этим видимой.

2. Сделать невидимыми текстовые окна для вывода результатов, т. к. в этом случае необходимость в них отсутствует.

Перечисленные действия реализуются с помощью операторов:

Label4.Visible:=True;

Label4.Caption:='ypaвнение не имеет решения';

Edit4.Visible:=False;

Edit5.Visible:=False

В целом условный оператор будет выглядеть следующим образом:

if d>=0 then

begin

xl:=(-b-sqrt(d))/(2*a);

x2:=(-b+sqrt(d))/(2*a);

Edit4.Text:=FloattoStr(xl);

Edit4.Visible:=True;

Edit5.Text:=FloattoStr(x2);

E dit5.Visible:=True;

Label4.Visible:=True;

Label4.Caption:='Корни уравнения'

end

else

begin

Label4.Visible:=True;

Label4.Caption:='Уравнение не имеет решения';

Edit4.Visible:=False;

Edit5.Visible:=False

end

Процедура в целом будет выглядеть так:

procedure TForml.ButtonlClick(Sender: TObject);

var a,b,c,d,xl,x2:real;

begin

a:=StrtoFloat(Editl.Text);

b:=StrtoFloat(Edit2.Text);

c:=StrtoFloat(Edit3.Text);

d:=sqr(b)-4*a*c;

if d>=0 then

begin

xl:=(-b-sqrt(d))/(2*a);

x2:=(-b+sqrt(d))/(2*a);

Edit4.Text:=FloattoStr(xl);

Edit4.Visible:=True;

Edit5.Text:=FloattoStr(x2);

Edit5.Visible:=True;

Label4.Visible:=True;

Labe14.Capti on: ='Корни уравнения'

end

else

begin

Label4.Visible:=True;

Label4.Caption:='Уравнение не имеет решения';

Edit4.Visible:=False;

Edit5.Visible:=False

end

end;

18. В процедуре Сброс (кнопка Button2), опишите реакцию на нажатие этой экранной кнопки. Двойное нажатие приведет к открытию TFormi.Button2ciick в которой должны быть выполнены следующие действия:

1. Очистка текстовых окон, в которые вводятся исходные данные.

2. Превращение окон с результатами и поясняющей надписи в невидимые окна.

В итоге процедура будет выглядеть следующим образом:

procedure TForml.Button2Click(Sender: TObject);

begin

Edit1.Text:='';

Edit2.Text:=" ;

Edit3.Text:='';

Edit4.Visible:=False;

Edit5.Visible:=False;

Label4.Visible:=False

end;

19. Двойное нажатие на клавишу «Выход» откроет процедуру TForml.Button3Click(Sender: TObject).

В которой следует записать только одну команду Close.