![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Помоги gj;fkeqcnf Freeker
VanDet © (2006-02-20 10:43:00)unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, Spin, ExtCtrls, Grids;
type
TForm1 = class(TForm)
Label1: TLabel;
SpinEdit1: TSpinEdit;
StringGrid1: TStringGrid;
Panel1: TPanel;
Panel2: TPanel;
Panel5: TPanel;
Panel4: TPanel;
Label2: TLabel;
Label3: TLabel;
Button1: TButton;
Label4: TLabel;
Edit1: TEdit;
Label5: TLabel;
Edit2: TEdit;
procedure FormShow(Sender: TObject);
procedure SpinEdit1Change(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
{Объявление типа члена и указателя на него}
PX = ^TX;
TX = record
K: Real; {коэффициент преред X}
9
P: Integer; {Степень X}
next: PX; {Указатель на следующий член}
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.FormShow(Sender: TObject);
begin
Application.MessageBox ('Выполнил студент ОмГТУ,факультета АСОИиУ группы АС-115,Тихонов И.Ю.,Проверил Цыганенко В. Н.,Задача 4');
end;
procedure TForm1.SpinEdit1Change(Sender: TObject);
Var
I: Integer;
begin
With StringGrid1 do
Begin
ColCount := SpinEdit1.Value + 2;
For I:=0 to SpinEdit1.Value do
Begin
Cells[ColCount-I-1, 0]:=IntToStr(I); {Присвоение I ,в строковом виде к Cells[ColCount-I-1, 0]}
If Cells[ColCount-I-1, 1] = ''
Then
Cells[ColCount-I-1, 1] := '0';
End;
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
SpinEdit1Change (Sender);
With StringGrid1 do
10
Begin
ColWidths[0]:=50;
Cells[0,0]:='Степень';
Cells[0,1]:='Коэфф.';
End;
end;
procedure TForm1.Button1Click(Sender: TObject);
Var
P, {многочлен P(x)}
Q {Многочлен (sx+t)P(x)+P'(x)}
: PX;
I: Integer;
K: Real;
S, T: Real;
{Добавляем к многочлену член степени P с коэффициентом K}
procedure Add (var Q: PX; K: Real; P: Integer);
var
W, R: PX;
begin
{If K = 0 Then Exit;}
if Q <> nil then
begin
W:=Q;
{Ищем член со степенью P}
While (W.next <> nil) and (W.next.P >= P) do
W:=W.next;
{если найден член степени P}
If W.P = P Then
Begin
{Увеличиваем значение коэффициента}
W.K:=W.K + K;
end else
Begin
R:=W.next;
New(W.next);
W:=W.next;
11
W.K:=K;
W.P:=P;
W.next:=R;
End;
end else
begin
{Создаём первый элемент многочлена}
New(Q);
Q.K:=K;
Q.P:=P;
Q.next:=nil;
end;
end;
{построение записи многочлена}
function PRecord (Q: PX): String;
Var
K: Real;
P: Integer;
S: String;
Begin
S:='';
While Q <> nil do
begin
K:=Q.K;
P:=Q.P;
f K <> 0 Then
Begin
If K < 0 Then
S:=S + ' - ' else
If (K > 0) and (S <> '') Then
S:=S + ' + ';
If (Abs(K) <> 1) or (P = 0) Then
S:=S + FloatToStr (Abs(K)); {Преобразование из вещественных чисел в строковые}
If P > 0 Then
Begin
12
S:=S + 'x';
If P > 1 Then
S:=S + '^' + IntToStr(P);
End;
end;
Q:=Q.next;
end;
If S = '' Then
S:='0';
PRecord:=S;
end;
begin
P:=nil;
Q:=nil;
Add (P, 0, SpinEdit1.Value+1);
Add (P, 0, SpinEdit1.Value+1);
S:=StrToFloat (Edit1.Text);
T:=StrToFloat (Edit2.Text);
{Получаем многочлены P и Q}
With StringGrid1 do
Begin
For I: =0 to ColCount-2 do
Begin
K:=StrToFloat(Cells[ColCount-I-1, 1]);
Add (P, K, I);
Add (Q, S*K, I+1);
Add (Q, T*K, I);
Add (Q, I*K, I-1);
End;
End;
Label2.Caption:=PRecord(P);
Label3.Caption:=PRecord(Q);
end;
end.
Гаврила (2006-02-20 17:19:00) [1]"gj;fkeqcnf" переводится как "пожалуйста"
clickmaker (2006-02-20 17:11:00) [2]gj;fkeqcnf Freeker наверно в отпуске...
Amoeba (2006-02-20 16:13:00) [3]Ну, и в чем, собственно, проблема?