📄 unit3.pas
字号:
unit Unit3;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm3 = class(TForm)
memo1: TMemo;
Button1: TButton;
Button2: TButton;
Button3: TButton;
Label1: TLabel;
Button4: TButton;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form3: TForm3;
implementation
{$R *.dfm}
procedure TForm3.Button1Click(Sender: TObject);
var
i,j,k,h,l:integer;
b:array[1..8]of integer;
a:array[1..8]of integer;
x:array[1..8,1..8]of integer;
x0:array[1..8,1..8]of integer;
y:array[1..8,1..8]of integer;
n:array[1..8]of integer;
one:array[1..8]of integer;
Myfile:TextFile;
tempstr:string;
list1:TStringList;
begin
label1.Visible:=true;
label1.caption:='i 进口进入干线,在 j 出口前仍在干线上的车辆数y[i,j]';
for i:=1 to 8 do
for j:=1 to 8 do
x[i,j]:=0;
x[1,2]:=1;x[1,3]:=1;x[1,4]:=1;x[1,5]:=1;x[1,6]:=1;x[1,7]:=1;x[1,8]:=1;
x[2,4]:=1;x[2,5]:=1;x[2,6]:=1;x[2,7]:=1;x[2,8]:=1;
x[3,4]:=1;x[3,5]:=1;x[3,6]:=1;x[3,7]:=1;x[3,8]:=1;
x[4,6]:=1;x[4,7]:=1;x[4,8]:=1;
x[5,6]:=1;x[5,7]:=1;x[5,8]:=1;
x[6,8]:=1;x[7,8]:=1;
// x[i,j]存放干线OD矩阵表的特征,用0,1,2表示
for i:=1 to 8 do
for j:=1 to 8 do
if ((x[i,j]=0) and (x[i,j+1]=1))then
x[i,j+1]:=2;
//读入数据到数组a[i],b[i]
AssignFile(Myfile,'F:\OD\od.txt');
Reset(Myfile);
while not Eof(Myfile) do
begin
Readln(Myfile,b[1],b[2],b[3],b[4],b[5],b[6],b[7],b[8]);
Readln(Myfile,a[1],a[2],a[3],a[4],a[5],a[6],a[7],a[8]);
end;
CloseFile(Myfile);
//y[i,j]存放由i口进在j口前仍留在干线上的车辆数
//首先给每行的第一列数字赋值b[i]
for i:=1 to 8 do
for j:=1 to 8 do
if (x[i,j]=2)then
y[i,j]:=b[i];
//one[i]存放每一列的不为0的行数
for i:=1 to 8 do
begin
one[i]:=0;
n[i]:=0;
end;
for i:=1 to 8 do
for j:=1 to 8 do
if (x[i,j]<>0) then
one[j]:=one[j]+1;
for i:=1 to 8 do
for j:=1 to 8 do
if x[i,j]=0 then
begin
x0[i,j]:=0;
y[i,j]:=0;
end;
l:=0;//存放第i列只有一个数据的列号
for i:=1 to 8 do
if one[i]=1 then
begin
x0[1,i]:=a[i];
//n[i]:=y[1,i];
end;
for i:=2 to 8 do //控制列号
begin
for k:=1 to 7 do
if x[k,i]=1 then //控制行号
y[k,i]:=y[k,i-1]-x0[k,i-1];
for j:=1 to 8 do //第i列的y和
n[i]:=n[i]+y[j,i];
for j:=1 to 8 do
if x[j,i]<>0 then
x0[j,i]:=round(a[i]*y[j,i]/n[i]);
end;
list1:=TstringList.create;
for i:=1 to 8 do
begin
tempstr:='';
for j:=1 to 8 do
tempstr:=tempstr+inttostr(y[i,j])+#9+'';
list1.Add(tempstr);
end;
showmessage('把修改后的OD流数据写入文本文件y[i,j].txt?');
list1.saveTofile('F:\OD\y[i,j].txt');
freeandnil(list1);
Memo1.Lines.LoadFromFile('F:\OD\y[i,j].txt');
end;
procedure TForm3.FormCreate(Sender: TObject);
begin
memo1.clear;
label1.visible:=false;
end;
procedure TForm3.Button2Click(Sender: TObject);
begin
close;
end;
procedure TForm3.Button3Click(Sender: TObject);
var
i,j,k,h,l:integer;
b:array[1..8]of integer;
a:array[1..8]of integer;
x:array[1..8,1..8]of integer;
x0:array[1..8,1..8]of integer;
y:array[1..8,1..8]of integer;
n:array[1..8]of integer;
one:array[1..8]of integer;
Myfile:TextFile;
tempstr:string;
list1:TStringList;
begin
label1.Visible:=true;
label1.caption:='i 进口进入干线,在 j 出口离开干线的车辆数x[i,j]';
for i:=1 to 8 do
for j:=1 to 8 do
x[i,j]:=0;
x[1,2]:=1;x[1,3]:=1;x[1,4]:=1;x[1,5]:=1;x[1,6]:=1;x[1,7]:=1;x[1,8]:=1;
x[2,4]:=1;x[2,5]:=1;x[2,6]:=1;x[2,7]:=1;x[2,8]:=1;
x[3,4]:=1;x[3,5]:=1;x[3,6]:=1;x[3,7]:=1;x[3,8]:=1;
x[4,6]:=1;x[4,7]:=1;x[4,8]:=1;
x[5,6]:=1;x[5,7]:=1;x[5,8]:=1;
x[6,8]:=1;x[7,8]:=1;
// x[i,j]存放干线OD矩阵表的特征,用0,1,2表示
for i:=1 to 8 do
for j:=1 to 8 do
if ((x[i,j]=0) and (x[i,j+1]=1))then
x[i,j+1]:=2;
//读入数据到数组a[i],b[i]
AssignFile(Myfile,'F:\OD\od.txt');
Reset(Myfile);
while not Eof(Myfile) do
begin
Readln(Myfile,b[1],b[2],b[3],b[4],b[5],b[6],b[7],b[8]);
Readln(Myfile,a[1],a[2],a[3],a[4],a[5],a[6],a[7],a[8]);
end;
CloseFile(Myfile);
//y[i,j]存放由i口进在j口前仍留在干线上的车辆数
//首先给每行的第一列数字赋值b[i]
for i:=1 to 8 do
for j:=1 to 8 do
if (x[i,j]=2)then
y[i,j]:=b[i];
//one[i]存放每一列的不为0的行数
for i:=1 to 8 do
begin
one[i]:=0;
n[i]:=0;
end;
for i:=1 to 8 do
for j:=1 to 8 do
if (x[i,j]<>0) then
one[j]:=one[j]+1;
for i:=1 to 8 do
for j:=1 to 8 do
if x[i,j]=0 then
begin
x0[i,j]:=0;
y[i,j]:=0;
end;
l:=0;//存放第i列只有一个数据的列号
for i:=1 to 8 do
if one[i]=1 then
begin
x0[1,i]:=a[i];
//n[i]:=y[1,i];
end;
for i:=2 to 8 do //控制列号
begin
for k:=1 to 7 do
if x[k,i]=1 then //控制行号
y[k,i]:=y[k,i-1]-x0[k,i-1];
for j:=1 to 8 do //第i列的y和
n[i]:=n[i]+y[j,i];
for j:=1 to 8 do
if x[j,i]<>0 then
x0[j,i]:=round(a[i]*y[j,i]/n[i]);
end;
list1:=TstringList.create;
for i:=1 to 8 do
begin
tempstr:='';
for j:=1 to 8 do
tempstr:=tempstr+inttostr(x0[i,j])+#9+'';
list1.Add(tempstr);
end;
showmessage('把修改后的OD流数据写入文本文件x[i,j].txt?');
list1.saveTofile('F:\OD\x[i,j].txt');
freeandnil(list1);
Memo1.Lines.LoadFromFile('F:\OD\x[i,j].txt');
end;
procedure TForm3.Button4Click(Sender: TObject);
var
i,j,k,h,l:integer;
b:array[1..8]of integer;
a:array[1..8]of integer;
x:array[1..8,1..8]of integer;
x0:array[1..8,1..8]of integer;
y:array[1..8,1..8]of integer;
n:array[1..8]of integer;
one:array[1..8]of integer;
Myfile:TextFile;
tempstr:string;
list1:TStringList;
begin
label1.Visible:=true;
label1.caption:=' j 出口前的干线断面总流量N[i],第一行表示出口编号:';
for i:=1 to 8 do
for j:=1 to 8 do
x[i,j]:=0;
x[1,2]:=1;x[1,3]:=1;x[1,4]:=1;x[1,5]:=1;x[1,6]:=1;x[1,7]:=1;x[1,8]:=1;
x[2,4]:=1;x[2,5]:=1;x[2,6]:=1;x[2,7]:=1;x[2,8]:=1;
x[3,4]:=1;x[3,5]:=1;x[3,6]:=1;x[3,7]:=1;x[3,8]:=1;
x[4,6]:=1;x[4,7]:=1;x[4,8]:=1;
x[5,6]:=1;x[5,7]:=1;x[5,8]:=1;
x[6,8]:=1;x[7,8]:=1;
// x[i,j]存放干线OD矩阵表的特征,用0,1,2表示
for i:=1 to 8 do
for j:=1 to 8 do
if ((x[i,j]=0) and (x[i,j+1]=1))then
x[i,j+1]:=2;
//读入数据到数组a[i],b[i]
AssignFile(Myfile,'F:\OD\od.txt');
Reset(Myfile);
while not Eof(Myfile) do
begin
Readln(Myfile,b[1],b[2],b[3],b[4],b[5],b[6],b[7],b[8]);
Readln(Myfile,a[1],a[2],a[3],a[4],a[5],a[6],a[7],a[8]);
end;
CloseFile(Myfile);
//y[i,j]存放由i口进在j口前仍留在干线上的车辆数
//首先给每行的第一列数字赋值b[i]
for i:=1 to 8 do
for j:=1 to 8 do
if (x[i,j]=2)then
y[i,j]:=b[i];
//one[i]存放每一列的不为0的行数
for i:=1 to 8 do
begin
one[i]:=0;
n[i]:=0;
end;
for i:=1 to 8 do
for j:=1 to 8 do
if (x[i,j]<>0) then
one[j]:=one[j]+1;
for i:=1 to 8 do
for j:=1 to 8 do
if x[i,j]=0 then
begin
x0[i,j]:=0;
y[i,j]:=0;
end;
l:=0;//存放第i列只有一个数据的列号
for i:=1 to 8 do
if one[i]=1 then
begin
x0[1,i]:=a[i];
//n[i]:=y[1,i];
end;
for i:=2 to 8 do //控制列号
begin
for k:=1 to 7 do
if x[k,i]=1 then //控制行号
y[k,i]:=y[k,i-1]-x0[k,i-1];
for j:=1 to 8 do //第i列的y和
n[i]:=n[i]+y[j,i];
for j:=1 to 8 do
if x[j,i]<>0 then
x0[j,i]:=round(a[i]*y[j,i]/n[i]);
end;
list1:=TstringList.create;
tempstr:='';
for i:=1 to 8 do
tempstr:=tempstr+inttostr(i)+#9+'';
tempstr:=tempstr+#13;
for i:=1 to 8 do
tempstr:=tempstr+inttostr(n[i])+#9+'';
list1.Add(tempstr);
showmessage('把修改后的OD流数据写入文本文件N[i].txt?');
list1.saveTofile('F:\OD\N[i].txt');
freeandnil(list1);
Memo1.Lines.LoadFromFile('F:\OD\N[i].txt');
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -