- •Оглавление Оглавление
- •Теоретические основы Визуального программирования.
- •Лабораторная работа №1 Знакомство со средой Dеlphi.
- •Лабораторная работа №2. Объекты: Кнопка. Label
- •Лабораторная работа № 3. Свойства Объектов.
- •Лабораторная работа № 4. Программирование линейной структуры
- •Лабораторная работа №5. Оператор ветвление в дельфи..
- •Лабораторная работа №6. Оператор ветвление в дельфи.
- •Лабораторная работа № 7 Программа "Квадратное уравнение"
- •Лабораторная работа № 8 «Программы с циклами в Delphi»
- •Лабораторная работа № 9 «Программа "Вклад"»
- •Лабораторная работа № 10 «Целочисленный Калькулятор».
- •Лабораторная работа № 11 «Графика в Дельфи».
- •Вывод текста
- •Лабораторная работа № 1? «Графика в цикле».
- •Лабораторная работа № 1? «Графика в цикле». ?????????
- •Лаб работа . Дополнительный материал по теме графика.
- •Лабораторная работа №12. Обработка событий в графике.
- •Лабораторная работа № 13 «Графика в Дельфи».
- •Лабораторная работа № 14 «Графика в Дельфи». Продолжение
- •Лабораторная работа № Светофор
- •Лабораторная работа № Летающий шарик.
- •Лабораторная работа Вывод графиков функций в Delphi
- •Лабораторная работа Построение графиков в среде Delphi.
- •Лабораторная работа № Метод базовой точки. Кораблик
- •Лабораторная работа № Метод базовой точки. Машина
- •Лабораторная работа Битовые образы
- •Самостоятельные программы
- •1. События и обработка событий
- •14. Работа с графикой в окне формы
Лабораторная работа № 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.
