Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > Pascal Таблицы маршрутизации


Автор: nastyat1996 29.12.2015, 22:51
Помогите, пожалуйста, разобраться, нужно написать код, чтобы ответ был как в MTABLE.EXE, а у меня получается только то, что выведено в data.exe(то есть не правильный второй столбец), понимаю, что нужно исправлять procedure FU, но не понимаю как, подскажите как можно исправить чтобы программа работала правильно?

Код

uses crt;
const MaxN = 5;
INF = 1000; 
type Matrix = array[1..MaxN,1..MaxN] of longint;

var
b:array[1..MaxN] of integer; byk:array[1..MaxN] of char; p,a : Matrix; n: integer;
f: text;

{ввод данных из файла в переменные и вывод матрицы на экран}
procedure Input_Table(var A : Matrix; N : longint; var T : Text); 
var i, j : longint;
begin
 writeln('Matritsa svjazei:');
 while not eof(f) do
  begin
    for i := 1 to N do
    begin
        for j := 1 to N do
        begin
         read(f,a[i,j]);
          write(' ',a[i,j]);
            if (a[i,j] = 0) and (i <> j) then
             a[i,j] := INF;
        end;
        writeln;
        readln(T);
    end;
 end;
end;

{алгоритм Флойда-Уоршелла}
Procedure FU(D: matrix; V: integer);
var i,j,k: integer;
begin
for i:=1 to V do 
 D[i, i]:=0;
for k:=1 to V do 
for i:=1 to V do
for j:=1 to V do 
 if (D[i, k]<>0) and (D[k, j]<>0) and (i<>j) then 
  if (D[i, k]+D[k, j]<D[i, j]) or (D[i, j]=0) then
  D[i, j]:=D[i, k]+D[k, j]; 
for i:=1 to V do
begin
for j:=1 to V do
begin
  byk[i]:=chr(64+i);
  
  if i=j then b[i]:=0;
  
  write(byk[i]:2,b[i]:2,D[i, j]:3,'|   ');
end;
  writeln; 
   
end;
end;

{основная программа}
BEGIN
clrscr;
writeln;
    assign(f,'data.txt');
    reset(f);
    readln(f,n);
writeln('Kolichestvo yzlov - ',n);
writeln;
    Input_Table(a,n,f);
    close(f);
writeln;
writeln('Rezyltat:');
FU(a, n);
 readln;
END.


В файле data.txt записаны следующие данные:
5
0 9 0 5 0
9 0 5 3 2
0 5 0 0 4
5 3 0 0 7
0 2 4 7 0

Автор: ElenHikari 30.12.2015, 11:53
Как я понимаю там форматируется через пробел.
Т.е. 
Код

 write(byk[i],' ',b[i],' ',D[i, j],' |   ');

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)