Помощь - Поиск - Пользователи - Календарь
Полная версия: Формирование списка ребер
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
senya
Помогите пожалуйста!
Вот программа:
Uses crt;
Type
T_zap=Record
n_r: byte;
k_r: byte;
end;
T_adress=^T_elem;
T_elem=Record
info:T_zap;
adress: T_adress;
end;
Var first: T_adress; n,m:byte;
matr_incidentnosty:array[1..10,1..10] of byte;
Procedure Input_matr_incidentnosty_i_ee_vyvod;
Var f_input:text; file_name:string;
i,j:byte;
Begin
writeln('Vvedite name of file: ');
readln(file_name);
assign(f_input,file_name);
reset(f_input);
n:=0; m:=0; i:=0;
while not Eof(f_input) do
begin
inc(i); j:=0;
while not Eoln(f_input) do
begin
inc(j);
read(f_input,matr_incidentnosty[i,j]);
end;
readln(f_input);
n:=i; m:=j;
end;
writeln ('Chislo_strok = ',n,'; Chislo_stolb = ',m);
close(f_input);
write('Vershina\Rebro');
for j:=1 to m do
write(' ',j:2);
writeln;
for i:=1 to n do
begin
write(i,' ');
for j:=1 to m do
write (matr_incidentnosty[i,j]:3);
writeln;
end;
End;
Procedure Formir_spiska_reber_grafa_i_ego_vyvod;
Var p_u,t_u:T_adress; i,j,key,k:byte;
Begin
New(t_u); first:=t_u;
for j:=1 to m do
begin
for i:=1 to n do
begin
key:=0;
if matr_incidentnosty[i,j]=1 then
t_u^.info.n_r:=i;
for k:=i+1 to n do
if matr_incidentnosty[k,j]=1 then
begin
t_u^.info.k_r:=k;
key:=1;
break;
end
else if key=0 then
begin
t_u^.info.k_r:=i;
break;
end;
end;
p_u:=t_u;
New(t_u);
p_u^.adress:=t_u;
end;
p_u^.adress:=nil;
readkey;
writeln('Spisok reber grafa');
t_u:=first;
While t_u^.info.n_r<=t_u^.info.k_r do
begin
with t_u^.info do
writeln(n_r,' - ',k_r);
readkey;
t_u:=t_u^.adress;
end
End;
{ Procedure Opredelenie_step_vershin_grafa;
Var stepen:byte; p_u,t_u:T_adress;
Begin
stepen:=0;
p_u:=first;
t_u:=p_u^.adress;
while t_u<>nil do
begin
if p_u=t_u then stepen:=stepen+1;

p_u:=t_u;
t_u:=p_u^.adress;
end

End; }
Begin
clrscr;
Input_matr_incidentnosty_i_ee_vyvod;
Formir_spiska_reber_grafa_i_ego_vyvod;
readkey;
End.

Ошибка в формировании списка ребер. Выдает левые значения! Я грешу на вывод. Кто нибудь посмотрите где ошибка!
volvo
Цитата
Кто нибудь посмотрите где ошибка!
Может, лучше кто-нибудь догадается прикрепить файл из которого читаются данные? Или нам его надо самостоятельно сконструировать?
Archon
И отформатировать код.

А так, сходу, ошибок куча:
  1. Память из под списка не освобождается в конце программы.
  2. Утечка памяти:
        ...
    p_u:=t_u;
    New(t_u);
    p_u^.adress:=t_u;
    end;
    p_u^.adress:=nil;
    ...
  3. Явная путаница с индексами.
  4. Условие при выводе списка неправильное, надо как-то так:
      ...
    While t_u <> nil do
    begin
    ...
    t_u:=t_u^.adress;
    end;
    ...
  5. Цикл по k всегда выполняется только 1 раз.
  6. Там где стоят break; явно подразумевался выход из цикла по i, а происходит выход только из цикла по k.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.