Готовые лабы по инфе (найдены на компах в комп. классе) (Студентам05ЗД Упр 5 Проц тип Модули Корни Интегралы Экстремумы)

Посмотреть архив целиком

  1. 6

    Упр 5 2008 Проц тип Модули Корни Интегралы Экстремумы


  1. Упр 5 Проц тип Модули Корни Интегралы Экстремумы

Составьте программу, обеспечивающую для функции f(x), выбираемой из заданного набора (см. ниже), вычисление в произвольном диапазоне значений аргумента [a,b], разбиваемом на N подынтервалов, задаваемыми пользователем, и представление в табличном виде:

  1. в произвольных сочетаниях значений самой функции, приближенными значениями её первой f′(x) и второй f″(x) производных и накапливаемых значений интеграла на соответствующих значениях аргумента (пример задания исходных данных и отображения результатов представлен на рис. 1),

  2. приближения корней уравнения f(x)=0 и значений функции в них (см. рис. 2),

  3. приближений экстремумов f(x) и значений функции в них (см. рис. 3).

Р
ис. 1.

Р
ис. 2.

Селекторные кнопки с подписями ФУНКЦИИ, КОРНИ и ЭКСТРЕМУМЫ в блоке (RadioGroup1) с заголовком ВИДЫ РАБОТ представляют альтернативные варианты перечисленных выше работ (см. рис. 1, рис. 2, рис. 3). Для их размещения на форме следует:

  • В палитре инструментов щелкнуть на значке (RadioGroup) и затем – на форме.

  • В Инспекторе Объектов (Object Inspector) в поле Caption ввести текст ВИД РАБОТ.

  • В Инспекторе Объектов в поле Items щелкнуть на кнопке , в открывшемся окне диалога String List Editor ввести в трех строках тексты: ФУНКЦИИ, КОРНИ, ЭКСТРЕМУМЫ и щелкнуть на кнопке OK (в результате в блок с заголовком ВИД РАБОТ будут добавлены три селекторные кнопки с подписями ФУНКЦИИ, КОРНИ и ЭКСТРЕМУМЫ).

  • В Инспекторе Объектов в поле ItemIndex ввести число 0, чтобы по умолчанию был выбор селекторной кнопки с подписью ФУНКЦИИ.

Флажки (CheckBox1, CheckBox2, CheckBox3, CheckBox4) в блоке (GroupBox2) с заголовком ТАБЛИЦЫ позволяют выбрать любую комбинацию столбцов таблицы, представляющих вычисленные значения функции (F(X)), интеграла (Интеграл F(X)), производной (F′(X)) и второй производной (F″(X)) функции (на рис. 1 представлен выбор Интеграл F(X), F(X) и F″(X)).

Р
ис. 3.

Макет формы должен иметь вид рис. 4.

Р
ис. 4.

Раскрывающийся список (ComboBox1) с поясняющим текстом ВЫБЕРИТЕ ФУНКЦИЮ> (в компоненте Label1) позволяет выбрать функцию, для которой будут выполняться вычисления (при создании макета формы набор имён функций – строк раскрывающегося списка можно создать в редакторе раскрывающегося списка String List Editor, появляющегося при щелчке на кнопке в строке Items Инспектора объектов, но в этом задании эта работа будет выполнена в программе при создании формы), а поля ввода (Edit1, Edit2, Edit3) c поясняющими текстами X0, X1 и N (в компонентах Label2, Label3 и Label4) – задать интервал значений аргумента и число его подынтервалов, границы которых будут представлять значения аргумента, используемые в вычислениях. Над таблицей (компонент StringGrid1) разместить текст ТАБЛИЦА (в компоненте Label5).

Чтобы не был зафиксирован первый столбец таблицы (компонент StringGrid1) как заголовочный, следует её свойству FixedCols задать значение 0 в Инспектлре объектов.

Программа, помимо основного модуля (unit Form1), должна содержать модуль (unit Funkcii) с объявлениями функций, для которых должны выполняться вычисления, и модуль (unit Raboty), содержащий процедуры, выполняющие эти работы.

Объявления функций, для которых выполняются вычисления, вынесены в отдельный модуль Funkcii, чтобы можно было менять состав этих функций, не редактируя всей программы, или просто заменяя этот модуль другим подобным.

Объявления процедур, выполняющих работы над функциями, вынесены в отдельный модуль, чтобы в случае изменения этих процедур (например, при смене реализуемых ими методов) не затрагивать другие части программы.

    1. МОДУЛЬ Funkcii, содержащий объявления функций, для которых, по выбору пользователя программы, будут выполняться вычисления, должен иметь следующую организацию.

  1. в интерфейсной части обязательно должны быть

    1. объявлены типы
      tFuncX=function(x:extended):extended;//тип функций

    2. объявлены переменные
      ArrFuncX:array[0..3] of tFuncX;//массив имён объявляемых функций
      ArrNameFuncX:array[0..3] of string;//массив текстов, отображаемых для
      //выбора функции пользователем

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

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

  2. в части реализации должны быть

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

    2. даны описания функций.

  3. в части инициализации следует

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

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

    1. МОДУЛЬ Raboty, содержит объявления процедур, выполняющих вычисления и сохранение в массиве значений заданной параметром функции, приближенных значений интеграла, первой и второй производных, корней уравнения, экстремумов.

  1. в интерфейсной части должны быть

    1. предложение использования модуля Funkcii

    2. объявление типа
      tArrFX=array of extended;//тип массива для хранения результатов вычислений

    3. объявления заголовков процедур, вычисляющих на границах N подынтервалов интервала [a,b]
      - значений аргумента
      x и сохраняющие в массиве ArrFX: tArrFX
      - значения функции f(x)
      procedure FotX(f1:tFuncX;a,b:extended;N:integer;out ArrFX:tArrFX)

      - приближенные значения определённого онтеграла
      , x≤b
      procedure Integtal(f1:tFuncX;a,b:extended;N:integer;out ArrFX:tArrFX)
      - приближенные значения первой производной f’(
      x)
      procedure dF_dX(f1:tFuncX;a,b:extended;N:integer;out ArrFX:tArrFX)
      - приближенные значений второй производной f″(x)
      procedure d2F_dX2(f1:tFuncX;a,b:extended;N:integer;out ArrFX:tArrFX)
      - приближенные значений корней уравнения f(x) =0
      procedure Korni(f1:tFuncX;a,b:extended;N:integer;out ArrFX:tArrFX)

      - приближенные значений экстремумов функции f(
      x)
      procedure Extremumy(f1:tFuncX;a,b:extended;N:integer;out ArrFX:tArrFX)

  2. В части реализации должны быть описания процедур и, при необходимости – предложение использования других модулей, необходимых для их выполнения.

МОДУЛЬ Form1 в разделе реализации должен содержать.

  1. Предложение использования, включающие имена Raboty и Funkcii. составленных модулей

  2. Объявление глобальной переменной FuncX типа tFuncX, предназначенной для хранения имени функции, выбранной пользователем в раскрывающемся списке (ComboBox).

  3. Подпрограммы

    1. Обработчик создания формы, в котором следует скопировать в раскрывающийся список (компонент ComboBox) строки из массива ArrNameFuncX (см. модуль Funkcii), представляющие выбираемые пользователем функции, а также присвоить ComboBox1.ItemIndex значение 0 и переменной FuncX значение ArrFuncX[0], которые будет использоваться по умолчанию в начале работы программы (см. рис 5).

procedure TForm1.FormCreate(Sender: TObject);

var i:integer;

begin

Form1.Width:=783;//+++2008

Stringgrid1.ColCount:=5;

Stringgrid1.Width:=625;//+++2008

for i:=0 to 4 do //+++2008

Stringgrid1.ColWidths[i]:=121; //+++2008

//добавить в раскрывающийся список тексты с именами,

//представляющими функции, используемые в вычислениях,

//из массива ArrNameFunc, заполненного в модуле Funkcii

//в разделе initialization

for i:=0 to high(ArrNameFuncX) do

Form1.ComboBox1.AddItem(ArrNameFuncX[i],Sender);

//выбор функции, соответствующей строке

//с индексом 0 компонента ComboBox1

FuncX:=ArrFuncX[0];

//и вывод соответствующего ему текста

ComboBox1.SelText:=ArrNameFuncX[0];

ComboBox1.ItemIndex:=0; //+++++++2008

end;//procedure TForm1.FormCreate(Sender: TObject)end;

Рис. 5.

    1. Обработчик щелчка на кнопке ВЫХОД с единственным оператором close.

    2. Обработчик щелчков на селекторных кнопках группы ВИД РАБОТ: используя свойство Visible блока ТАБЛИЦЫ группы флажков, сделать так, чтобы блок становиться невидимым после щелчка на кнопке КОРНИ или ЭКСТРЕМУМЫ, и вновь появляться при щелчке на кнопке ФУНКЦИИ (см procedure Tform1.RadioGroup1Click(Sender: TObject)).

    3. Обработчик щелчка на кнопке ВЫПОЛНИТЬ, который должен, в зависимости от сделанных установок в блоках ВИД РАБОТ и ТАБЛИЦЫ выполнять следующие работы.

Если выделена селекторная кнопка ФУНКЦИИ, то должна строиться таблица, в первой колонке которой будут выведенны N+1 значений аргумента, а следующие колонки (с накапливаемыми значениями интеграла, значениями функции и её производных) должны быть в таблице только если установлены соответствующие флажки в блоке ТАБЛИЦЫ (см. рис 1).

Если выделена селекторная кнопка КОРНИ, то должна строиться таблица, в колонках которой будут выведенны значения аргумента на границах подынтервалов, на которых функция имеет разные знаки, и соответствующие им значения функции (см. рис 2).

Если выделена селекторная кнопка ЭКСТРЕМУМЫ, то должна строиться таблица, в колонках которой будут выведенны значения аргумента на несмежных границах двух соседних подынтервалов, внутри которых функция достигает экстремума, и соответствующие им и смежной границе значения функции (см. рис 3).

Обработчик щелчка на кнопке ВЫПОЛНИТЬ представлен на рис. 6. Вызываемая из него процедура myTabFunc (см. Рис. 7) используется для сокращения текста программы, выполняя работы, одинаковые при добавлении в таблицу столбцов со значениями функции, приближенных значений производных и накапливаемых значений интеграла функции.


procedure TForm1.Button1Click(Sender: TObject);

var i,N:Integer; a,b,hX:Extended;

begin

a:=StrToFloat(Edit1.Text);

b:=StrToFloat(Edit2.Text);

N:=StrToInt(Edit3.Text);

hX:=(b-a)/N;

if RadioGroup1.Buttons[0].Checked then

begin

Form1.Label5.Caption:='ТАБЛИЦА ФУНКЦИЙ';

/ //начальная ширина окна для отображения таблицы

Form1.Width:=298; //2008

StringGrid1.Width:=141; //2008

StringGrid1.ColCount:=1;

StringGrid1.RowCount:=N+2;

StringGrid1.Cells[0,0]:=' X';

hX:=(b-a)/N;

for i := 0 to N do

StringGrid1.Cells[0,i+1]:=FloatToStr(a+i*hX);

if CheckBox1.Checked then

begin

//будет вычислен ИНТЕГРАЛ

Integral(FuncX,a,b,N,ArrFX);

myTabFunc('Интеграл',ArrFX);

end;

if CheckBox2.Checked then

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.



Случайные файлы

Файл
110222.doc
OTC_L199.DOC
70819-1.rtf
3636.rtf
138765.rtf




Чтобы не видеть здесь видео-рекламу достаточно стать зарегистрированным пользователем.
Чтобы не видеть никакую рекламу на сайте, нужно стать VIP-пользователем.
Это можно сделать совершенно бесплатно. Читайте подробности тут.