假设当X=1 2 3 4 5 6 7 8 9 10的时候
Y分别等于10 25 35 40 52 68 78 82 90 100
现在要求,当X为小数时,Y则平均分其中的差量。
举个例子,当X=4.5时,因为4和5之间相差了12,所以Y此时等于46。当X=9.5时,因为9和10之间相差了10,所以Y=95
依此类堆。请给出最合理最简洁的代码,因为数据有很多。
顺便要求对Y值四舍五入取整。谢谢,不胜感激!
Y分别等于10 25 35 40 52 68 78 82 90 100
现在要求,当X为小数时,Y则平均分其中的差量。
举个例子,当X=4.5时,因为4和5之间相差了12,所以Y此时等于46。当X=9.5时,因为9和10之间相差了10,所以Y=95
依此类堆。请给出最合理最简洁的代码,因为数据有很多。
顺便要求对Y值四舍五入取整。谢谢,不胜感激!
a: array[1..10] of Real = (10, 25, 35, 40, 52, 68, 78, 82, 90, 100);
var
x, y: Real;
index: Integer;
begin
x := 4.5;
index := trunc(x); //取出下标
y := a[index] + (a[index + 1] - a[index]) * (x - index);
y := Round(y); //对Y值四舍五入取整
ShowMessage(FloatToStr(y));
end;
应该用二维数组或者两个数组
分整数和小数的情况计算Y的值。整数时,Y等于下标相同的X数组中的值
小数时,Y等于对应两个相邻下标的平均值代码明天写,太困了。周末愉快。
下面是代码,要运行程序可以留个邮箱,我全部发你。
输入的有效性判断没怎么做,功能问题应该差不多了
有问题再联系,记得多给点分我哈,最好全部,嘿嘿
unit UMain;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;type
TFrmMain = class(TForm)
Label1: TLabel;
Edt_Num: TEdit;
Label2: TLabel;
Edt_SeqShow: TEdit;
Btn_CreatSeq: TButton;
Label3: TLabel;
Edt_X: TEdit;
Label4: TLabel;
Edt_Y: TEdit;
Btn_GetY: TButton;
procedure Btn_CreatSeqClick(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure Btn_GetYClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
FrmMain: TFrmMain;
Seq: array of Integer;const
EmptyStr = '';
BlankStr = ' ';
ErrInput = '输入X不合法';
implementation{$R *.dfm}procedure TFrmMain.Btn_CreatSeqClick(Sender: TObject);
var
n,i,m: integer;
TemStr: string;
begin
n := StrToInt(Trim(Edt_Num.Text));
SetLength(Seq,n); m := n*20; //构造随机数的范围,暂时将个数乘20,尽量避免重复。
for i := 0 to n - 1 do
begin
Seq[i] := random(m);
end; TemStr := EmptyStr;
for i := 0 to n - 1 do
begin
TemStr := IntToStr(Seq[n - 1-i]) + BlankStr +TemStr;
end; Edt_SeqShow.Text := TemStr;
end;procedure TFrmMain.Btn_GetYClick(Sender: TObject);
var
TemStr: String;
TemZS: string; //整数部分
IntTemZS: integer;
IntX,IntY: integer;
i: Integer;
SeqNum: Integer;
TemY: Double;
begin
TemStr := Trim(Edt_X.Text);
SeqNum := length(Seq);
i := Pos('.',TemStr); if i > 0 then
begin //有小数的情况
TemZS := Copy(TemStr,1,i-1);
IntTemZS := StrToInt(TemZS); if SeqNum > IntTemZS then
begin
TemY := (Seq[IntTemZS-1] + Seq[IntTemZS])/2;
IntY := Trunc(TemY + 0.5);
Edt_Y.Text := IntToStr(IntY);
end
else
ShowMessage(ErrInput);
end
else
begin //没有小数的情况
IntX := StrToInt(TemStr);
if SeqNum >= IntX then
begin
IntY := Seq[IntX-1];
Edt_Y.Text := IntToStr(IntY);
end
else
ShowMessage(ErrInput);
end;
end;procedure TFrmMain.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Finalize(Seq);
end;end.