Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 17.01.2016, 00:57
Graf16 Graf16 вне форума
Прохожий
 
Регистрация: 17.01.2016
Сообщения: 16
Версия Delphi: Delphi 7
Репутация: 10
Печаль Односвязный линейный список

Изучила динамические структуры и пытаюсь выполнить задание: создать односвязный линейный список,содержащий список ребер графа и вывести его на экран в стринггрид.

В стрингриде находится матрица смежности графа,а чтобы составить список ребер я прохожусь по элементам матрицы,стоящих выше главной диагонали и на ней,и если нахожу цифру 1,то в односвязный линейный список добавляю i и j.

1. Что я делаю не так,потому что список не выводится (скорее всего неправильно где-то создаю)? Может кто-нибудь указать ошибку?
2. Можно ли в одну ячейку записать одновременно два значения через пробел?

Пример:
входные данные:
5
0 0 1 0 0
0 0 1 0 1
1 1 0 0 0
0 0 0 0 0
0 1 0 0 0
выходные данные:
1 3
2 3
2 5


Код:
type 
 matr=array [1..10,1..10] of integer;
 mass=array [1..100] of integer;
 uk=^list;
 list=record
     inf:integer;
     next:uk;
    end;
var
  Form1: TForm1;
  ms:matr;
  x,y:mass;
  i,j,n:Integer;
  blist:uk;
  flag:boolean;
  str:string;

implementation

{$R *.xfm}
//Ïсоздание нового эл-та списка
procedure make(var blist:uk; inf:integer);
begin
 new(blist);
 blist^.inf:=inf;
 blist^.next:=nil;
end;

//проверка на пустоту
function pust(blist:uk):boolean;
begin
 if(blist<>nil) then
  result:=false
 else
  result:=true
end;

//вставка эл-та в конец списка
procedure incertK(blist:uk; inf:integer);
var blist1:uk;
begin
 if(pust(blist))then
  begin
   showmessage('Пустой');
   exit;
  end;
 while(blist^.next<>nil) do
  begin
   blist:=blist^.next;
  end;
 make(blist1,inf);
 blist^.Next:=blist1;
end;

//вывод на печать списка
procedure printspisok(blist:uk);
var
 str:string;
begin
 if pust(blist) then
 begin
  ShowMessage('Pustoy');
  str:='';
  Exit;
 end;
 str:='';
 while(blist<>nil)do
 begin
  str:=str+inttostr(blist^.inf)+' ';
  blist:=blist^.next;
 end;
end;

//составление списка ребер графа
procedure TForm1.Button2Click(Sender: TObject);
var
 i,j:Integer;
begin
 for i:=1 to n do
 begin
  for j:=1 to n do
  begin
   if (i<=j) and (StrToInt(sd1.Cells[j,i])=1) then
   begin
    if blist=nil then
      make(blist,i)
    else
     incertK(blist,i);
   end;
  end;
 end;
 printspisok(blist);
 Label1.Caption:=str;
end;
Ответить с цитированием
 


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 04:20.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025