Студентам05ЗД Упр 5 Проц тип Модули Корни Интегралы Экстремумы (970917), страница 2
Текст из файла (страница 2)
begin
//будет вычислен ФУНКЦИЯ
FotX(FuncX,a,b,N,ArrFX);
myTabFunc(ComboBox1.Items[ComboBox1.ItemIndex],ArrFX);
end;
if CheckBox3.Checked then
begin
//будет вычислен ПРОИЗВОДНАЯ
dF_dX(FuncX,a,b,N,ArrFX);
myTabFunc('F ''(x)',ArrFX);
end;
if CheckBox4.Checked then
begin
//будет вычислен ПРОИЗВОДНАЯ
d2F_dX2(FuncX,a,b,N,ArrFX);
myTabFunc('F "(x)',ArrFX);
end;
end //конец if RadioGroup1.Buttons[0].Checked
else if RadioGroup1.Buttons[1].Checked then
begin
//будут вычислены КОРНИ
Form1.Label5.Caption:='ТАБЛИЦА КОРНЕЙ';
StringGrid1.colcount:=4;//+++2008
//установка ширины столбцов //++++2008
for i:=0 to 3 do StringGrid1.ColWidths[i]:=120; //++++2008
//ширина окна для отображения таблицы
StringGrid1.Width:=121*4+20;//++++2008
Form1.Width:=121*4+175;//++++2008
//вначале только строка заголовков
StringGrid1.RowCount:=1;
StringGrid1.Cells[0,0]:=' Xслева';
StringGrid1.Cells[1,0]:=' F(Xслева)';
StringGrid1.Cells[2,0]:=' Xсправа';
StringGrid1.Cells[3,0]:=' F(Xсправа)';
Korni(FuncX,a,b,N,ArrFX);
StringGrid1.RowCount:=Length(ArrFX)+1;
for i := 0 to High(ArrFX) do
begin
StringGrid1.Cells[0,i+1]:=FloatToStr(ArrFX[i]);
StringGrid1.Cells[1,i+1]:=FloatToStr(FuncX(ArrFX[i]));
StringGrid1.Cells[2,i+1]:=FloatToStr(ArrFX[i]+hx);
StringGrid1.Cells[3,i+1]:=FloatToStr(FuncX(ArrFX[i]+hx));
end;
end//конец if RadioGroup1.Buttons[1].Checked
else if RadioGroup1.Buttons[2].Checked then
begin
//будут вычислены ЭКСТРЕМУМЫ
Form1.Label5.Caption:='ТАБЛИЦА ЭКСТРЕМУМОВ';
StringGrid1.colcount:=5;//+++2008
//установка ширины столбцов //++++2008
for i:=0 to 4 do StringGrid1.ColWidths[i]:=120; //++++2008
//ширина окна для отображения таблицы
//вначале только строка заголовков
Form1.StringGrid1.RowCount:=1;
StringGrid1.Width:=121*5+20;//++++2008
Form1.Width:=121*5+175;//++++2008
StringGrid1.Cells[0,0]:=' Xслева';
StringGrid1.Cells[1,0]:=' F(Xслева)';
StringGrid1.Cells[2,0]:=' F(Xэтрем)';
StringGrid1.Cells[3,0]:=' F(Xсправа)';
StringGrid1.Cells[4,0]:=' Xсправа';
Extremumy(FuncX,a,b,N,ArrFX);
StringGrid1.RowCount:=Length(ArrFX)+1;
for i := 0 to High(ArrFX) do
begin
StringGrid1.Cells[0,i+1]:=FloatToStr(ArrFX[i]);
StringGrid1.Cells[1,i+1]:=FloatToStr(FuncX(ArrFX[i]));
StringGrid1.Cells[2,i+1]:=FloatToStr(FuncX(ArrFX[i]+hx));
StringGrid1.Cells[3,i+1]:=FloatToStr(FuncX(ArrFX[i]+2*hx));
StringGrid1.Cells[4,i+1]:=FloatToStr(ArrFX[i]+2*hx);
end;
end;//конец if RadioGroup1.Buttons[2].Checked
Рис. 6
procedure myTabFunc(const Rabota:string; ArrFX:tArrFX);
var
i:integer;
begin
//увеличить ширину окна, через которое видна таблица
//на 121 пиксел, т.е. на ширину добавляемого столбца+1
Form1.StringGrid1.Width:=Form1.StringGrid1.Width+121; //++=2008
//увеличить ширину формы на 121 пикселей, те //++=2008
//на ширину добавляемого столбца //++=2008
Form1.Width:=Form1.Width+121; //++=2008
//увеличить на 1 число столбцов таблицы
Form1.StringGrid1.ColCount:=Form1.StringGrid1.ColCount+1;
Form1.StringGrid1.ColWidths[Form1.StringGrid1.ColCount-1]:=120; //++++2008
//занести в заголовок последнего столбца название работы
Form1.StringGrid1.Cells[Form1.StringGrid1.ColCount-1,0]:=Rabota;
//копирование данных из массива ArrFX
//в последний столбец таблицы
for i:=0 to StrToInt(Form1.Edit3.Text) do begin
Form1.StringGrid1.Cells[Form1.StringGrid1.ColCount-1,i+1]
:=FloatToStr(ArrFX[i]);
end;//for i to StrToInt(Form1.Edit3.Text)
end;//procedure myTabFunc(const Rabota:string;ArrFX:tArrFX)
Рис. 7.
8.5. Обработчик (рис. 8) щелчка на строке раскрывающегося списка, в котором глобальной переменной FuncX должно присваиваться имя выбранной пользователем функции. Так как номер строки списка, на котором выполнен щелчок, представлен свойством ItemIndex списка, то к получению желаемого результата приведёт выполнение оператора FuncX:=ArrFuncX[ComboBox1.ItemIndex].
procedure TForm1.ComboBox1Click(Sender: TObject);
begin
//выбор функции, соответствующей строке
//ItemIndex компонента ComboBox1
FuncX:=ArrFuncX[ComboBox1.ItemIndex];
end;//procedure TForm1.ComboBox1Click(Sender: TObject)
Рис. 8.
8.6. Обработчик (рис. 9) двойного щелчка на ячейке первого столбца таблицы со значением аргумента, который должен скопировать значение из указанной ячейки в поле ввода X0 и в поле ввода Х1 - из следующей ячейки столбца, если выделена кнопка ФУНКЦИИ, или из ячейки третьего столбца той же стоки, выделена кнопка КОРНИ, или из пятого столбца той же стоки, если выделена кнопка ЭКСТРЕМУМЫ.
procedure TForm1.StringGrid1DblClick(Sender: TObject);
begin
if Form1.StringGrid1.Col=0 then begin
//при двойном щелчке в ячейке нулевого
//столбца из неё текст будет скопирован в
//Edit1,
Edit1.Text
:=StringGrid1.Cells[0,StringGrid1.Row];
//а в Edit2, если
if Form1.RadioGroup1.Buttons[0].Checked
then
//выделена кнопка ФУНКЦИИ
// - из ячейки под ней
Edit2.Text
:=StringGrid1.Cells[0,StringGrid1.Row+1]
else
if Form1.RadioGroup1.Buttons[1].Checked
then
//выделена кнопка КОРНИ
//- из ячейки колонки 2
Edit2.Text
:=StringGrid1.Cells[2,StringGrid1.Row]
else
if Form1.RadioGroup1.Buttons[2].Checked
then
//выделена кнопка ЭКСТРЕМУМЫ
//- из ячейки колонки 4
Edit2.Text
:=StringGrid1.Cells[4,StringGrid1.Row];
end;
end;//procedure TForm1.StringGrid1DblClick
Рис. 9.
-
Задания для самостоятельного выполнения (см. файл «к Упр 6 Задания Проц тип Корни Интегралы Экстремумы.doc»)
-
Отладить программу для функций, вычисляющих sin(x), tg(x), x+x, x*(x-2), разместив все модули в одной папке.
-
Скопировать все файлы с именем Funkcii в подчинённую папку OldFunkcii и удалить исполняемый файл программы. Убедиться, что программа не выполняется. Командой меню Project\ Remove from Project… удалить из проекта модуль . Командой меню Project\ Add to Project… добавить в проект модуль из папки, куда он был перемещен. Убедиться, что программа работает.
-
Создать в подчинённой папке NewFunkcii новый модуль Funkcii с новыми функциями (по своему варианту задания) и заменить им, используя команды меню Project, прежний модуль.