帮帮小妹!300分!大家帮忙看看这个程序如何编? ( 积分: 300 )

  • 主题发起人 主题发起人 彤心依旧
  • 开始时间 开始时间

彤心依旧

Unregistered / Unconfirmed
GUEST, unregistred user!
目的:给出一个电路板的网络图(给出所有连接在一起的管脚)
所有管脚:U1 U2 U3 U4 U5 U6 U7
其中U1要和其它所有脚测试是否短接,如果连接就是1,如果不短接就是0,这样得出数据:1 0 0 1 1 0,即U1和U2 U5 U6连接。U2和U3 U4 U5 U6 U7测试结果是0 0 1 1 0。依此类推,U3的是1 0 0 0,U4的是0 0 0,U5的是1 0,U6的是0。为了便于观看,把这些数字连接起来
管脚 连接情况
U1 1
0
0
1
1
0
U2 0
0
1
1
0
U3 1
0
0
0
U4 0
0
0
U5 1
0
U6 0
请编写一个程序,把这个网络表给出来,写到文本文件中去,每个网络一行
格式如下:
U1 U2 U5 U6
U3 U4
U7
注意:如果U1和U2连接,U1又和U5连接,则U2和U5必连接,就不要再处理U2和其它管脚连接的情况了。
 
看不懂,u2,3,4,5,6的数组是表示和谁连接?
 
怎么报答我啊
 
不知道我说明白了没有,现解释如下:
U1的数据是1 0 0 1 1 0,表示U1和U2连接,U1和U3不连,U1和U4不连,U1和U5相连,U1和U6相连,U1和U7不连。
U2的数据是:0 0 1 1 0,表示U2和U3不连,U2和U4不连,U2和U5相连,U2和U6相连,U2和U7不连
以此类推...
其实就是测试U1和U2、U3、...等所有的连接情况,再测试U2和U3、U4、...的连接情况,再测试U3和U4、U5、...的连接情况,。。。。,如果有N个点,即UN,共测试N(N-1)/2次,所有的连接就可以测试出来了。如何编写程序得出网络表呢?网络表格式就是每个网络占一行,每个网络由所有连接在一起的管教组成,每个管脚之间用空格分开,如下:
U1 U2 U5 U6
U3 U4
U7
该如何编写呢?
 
这段代码可以这样编写:

VAR S,S0,S1:string;
i ,j: integer;
AList : TStringList;
begin

Memo1.Clear;
AList := TStringList.Create;
//添加一次测量的结果 ,本例子暂时使用具体的值
AList.Add('100110'); //U1的测量结果 100110'
AList.Add('00110'); //U2的测量结果
AList.Add('1000'); //U3的测量结果
AList.Add('000'); //U4的测量结果
AList.Add('10'); //U5的测量结果
AList.Add('0'); //U6的测量结果

S0 := '0000000'; //程序处理的标志,初始化为全0,处理后置1
for j := 0 to 5 do
begin
if S0[j+1] = '0' then //'0':未处理的话就执行下面的代码
begin
S := 'U'+inttostr(j+1);
S1 := AList[j];
for i := 1 to 6-j do
begin
if S1 = '1' then
begin
S := S+' U'+inttostr(i+j+1);
S0[i+j+1] := '1'; //'1': 处理后置1,下次循环就不处理了
end;
end;
Memo1.Lines.Add(S);
end;
end;
if S0[7] = '0' then //表明U7不与任何脚相连
Memo1.Lines.Add('U7');
AList.Free;
Memo1.Lines.SaveToFile('A.txt');
end;
 
不错,谢谢
S0[i+j+1] := '1'; //'1': 处理后置1,下次循环就不处理了
这句应为S0[i+j]
 
不对吧,改为S0[i+j] := '1'后得到的结果是:
U1 U2 U5 U6
U2 U5 U6
U3 U4
U6
U7
而不是你要求的结果:
U1 U2 U5 U6
U3 U4
U7
 
挺无聊的题目
 
这个题目是我从实际的问题抽象出来的,用来解决实际的问题,怎么会无聊呢?
谢谢hehanyang!
 
后退
顶部