Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 5.00/18: Рейтинг темы: голосов - 18, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 17.02.2013
Сообщений: 80

Транзитивное замыкание

01.04.2013, 14:53. Показов 3682. Ответов 22
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Нужно написать программу для Транзитивного замыкания.
Я не могу сделать чтобы строка умножалась на столбец ,и все это выводилось во вторую матрицу.
Если кто знает про это, то пожалуйста напишите программу для транз. замыкания.

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Grids, StdCtrls;
 
type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Label1: TLabel;
    Button1: TButton;
    StringGrid1: TStringGrid;
    StringGrid2: TStringGrid;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
   const
Nmax=10;
Type
Mas2 = array[1..Nmax,1..Nmax] of extended;
 
 
var
  Form1: TForm1;
   A,B : Mas2;
 
 
N,i,j : integer;
implementation
 
{$R *.dfm}
 
procedure TForm1.Button1Click(Sender: TObject);
begin
  N:=StrToInt(Edit1.Text);
 
StringGrid1.ColCount:=N+1;
StringGrid1.RowCount:=N+1;
StringGrid2.RowCount:=N+1;
StringGrid2.ColCount:=N+1;
 
 
for i:=1 to N do begin
StringGrid1.Cells[0,i]:=' i= '+IntToStr(i);
StringGrid1.Cells[i,0]:=' j= '+IntToStr(i);
end;
end;
 
procedure TForm1.Button2Click(Sender: TObject);
var s: extended;
begin
for i:=1 to N do
A[i]:=StrToFloat(StringGrid1.Cells[0,i]);
for j:=1 to N do
     A[j]:=StrToFloat(StringGrid1.Cells[i,0]);
for i:=1 to N do begin
s:=0;
for j:=1 to N do
begin
s:=A[0,i]*A[i,0];
B[i,j]:=s;
 end;
StringGrid2.Cells[i,j]:=FloatToStrf(B[i,j],fffixed,6,2);
end;
end;
 
procedure TForm1.FormCreate(Sender: TObject);
begin
 N:=3;
 Edit1.Text:=FloatToStr(N);
 StringGrid1.ColCount:=N+1;
 StringGrid1.RowCount:=N+1;
 StringGrid2.ColCount:=N+1;
 StringGrid2.RowCount:=N+1;
 
 StringGrid1.Cells[0,0]:='Массив А:';
  StringGrid2.Cells[0,0]:='Массив B:';
  for i:=1 to N do begin
StringGrid1.Cells[0,i]:=' i= '+IntToStr(i);
StringGrid1.Cells[i,0]:=' j= '+IntToStr(i);
 
 
end;
 
end.
в придаче куча ошибок
[Pascal Error] Unit1.pas(61): E2010 Incompatible types: 'Array' and 'Extended'
[Pascal Error] Unit1.pas(68): E1012 Constant expression violates subrange bounds и др.
Помогите прошу

Добавлено через 20 часов 36 минут
что совсем не кто не че не знает?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
01.04.2013, 14:53
Ответы с готовыми решениями:

Анимация"замыкание ключа и включение лампочки в цепи"
Надо сделать циклическое замыкание и размыкание переключателя и включение и выключение лампочки в цепи,то есть сделать как бы анимацию.Саму...

Транзитивное замыкание
Добрый вечер! Разбираю транзитивное замыкание и насколько я поняла, выполняется перемножение матриц. Однако пример, который находится на...

Транзитивное замыкание Уоршелла
Реализовать алгоритм построения транзитивного замыкания Уоршелла и проиллюстрировать по шагам этапы его выполнения. Обязательное условие:...

22
 Аватар для Санек25
422 / 352 / 19
Регистрация: 14.05.2012
Сообщений: 1,437
01.04.2013, 15:03
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
procedure TForm1.Button2Click(Sender: TObject);
var s: extended;
begin
for i:=1 to N do
A[i]:=StrToFloat(StringGrid1.Cells[0,i]);
for j:=1 to N do
     A[j]:=StrToFloat(StringGrid1.Cells[i,0]);
for i:=1 to N do begin
s:=0;
for j:=1 to N do
begin
s:=A[0,i]*A[i,0];
B[i,j]:=s;
 end;
StringGrid2.Cells[i,j]:=FloatToStrf(B[i,j],fffixed,6,2);
end;
end;
эта часть не правильно сделана

Добавлено через 2 минуты
вот смотри
A[i]:=StrToFloat(StringGrid1.Cells[0,i]); в массив типа extended ты хочешь записать строку 'j=1'???

Добавлено через 1 минуту
и непонятно что с чем хочешь перемножить? как данные в таблицу в носишь?
0
0 / 0 / 0
Регистрация: 17.02.2013
Сообщений: 80
02.04.2013, 18:33  [ТС]
Цитата Сообщение от Санек25 Посмотреть сообщение
'j=1'???
вот от этого я и не могу избавиться.
а мне нужно перемножить поочерёдно строку на столбец
0
 Аватар для Санек25
422 / 352 / 19
Регистрация: 14.05.2012
Сообщений: 1,437
03.04.2013, 11:35
Проверять неначем было, так что ошибки сам исправишь. Примерно так должно быть.
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
Type
Mas2 = array[1..10,1..10] of strimg;
 
var
  Form1: TForm1;
   A,B : Mas2;
 
 
i,j : integer;
implementation
 
{$R *.dfm}
 
procedure TForm1.Button1Click(Sender: TObject);
begin
  if Edit1.Text<=10 then begin
StringGrid1.ColCount:=StrToInt(Edit1.Text)+1;
StringGrid1.RowCount:=StrToInt(Edit1.Text)+1;
StringGrid2.RowCount:=StrToInt(Edit1.Text)+1;
StringGrid2.ColCount:=StrToInt(Edit1.Text)+1;
 
 
          for i:=1 to StrToInt(Edit1.Text) do begin
 
          StringGrid1.Cells[0,i]:=' i= '+IntToStr(i);
          StringGrid1.Cells[i,0]:=' j= '+IntToStr(i);
           end;
                                           end else showmessage('Недопустимое число');
end;
 
procedure TForm1.FormCreate(Sender: TObject);
begin
 StringGrid1.ColCount:=4;
 StringGrid1.RowCount:=4;
 StringGrid2.ColCount:=4;
 StringGrid2.RowCount:=4;
 
 StringGrid1.Cells[0,0]:='Массив А:';
 StringGrid2.Cells[0,0]:='Массив B:';
 
          for i:=1 to 3 do begin
          StringGrid1.Cells[0,i]:=' i= '+IntToStr(i);
          StringGrid1.Cells[i,0]:=' j= '+IntToStr(i);
           end;
end;
 
 
procedure TForm1.Button2Click(Sender: TObject);
begin
for i:=1 to StringGrid1.RowCount-1 do
A[i]:=StringGrid1.Cells[0,i];
for j:=1 to StringGrid1.ColCount-1 do
     A[j]:=StringGrid1.Cells[i,0];
 
for i:=1 to StringGrid1.RowCount-1 do begin
 
for j:=1 to StringGrid1.ColCount-1 do
begin
 
B[i,j]:=floattostr(strtofloat( delete(A[0,i],0,pos('=',A[0,i])) * strtofloat( delete(A[i,0],0,pos('=',A[i,0])));
StringGrid2.Cells[i,j]:=B[i,j];
 end;
          end;
 
end.
0
0 / 0 / 0
Регистрация: 17.02.2013
Сообщений: 80
06.04.2013, 17:44  [ТС]
в этих строках
Delphi
1
2
3
4
 for i:=1 to StringGrid1.RowCount-1 do
A[i]:=StringGrid1.Cells[0,i];
for j:=1 to StringGrid1.ColCount-1 do
     A[j]:=StringGrid1.Cells[i,0];
пишет
[Pascal Error] Unit1.pas(55): E2010 Incompatible types: 'Array' and 'string'
[Pascal Error] Unit1.pas(57): E2010 Incompatible types: 'Array' and 'string'

не пойму что надо сделать

Добавлено через 3 минуты
тут нельзя организовать цикл, а тогда как
0
 Аватар для Одиночка
3944 / 1869 / 337
Регистрация: 16.03.2012
Сообщений: 3,880
06.04.2013, 21:07
Не могу пока связать транзитивное замыкание с умножением строки на столбец, но умножение матриц, в котором перемножается каждая строка на каждый столбец - здесь:
Немного подправил и дополнил код:
Кликните здесь для просмотра всего текста
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Grids, StdCtrls;
 
type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Label1: TLabel;
    Button1: TButton;
    Button2: TButton;
    StringGrid1: TStringGrid;
    StringGrid2: TStringGrid;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Edit1KeyPress(Sender: TObject; var Key: Char);
    procedure StringGrid1KeyPress(Sender: TObject; var Key: Char);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
//const
//  Nmax=10;
//Type
//  Mas2 = array[1..Nmax,1..Nmax] of extended;
 
var
  Form1: TForm1;
//  A,B : Mas2;
  N : integer;
 
implementation
 
{$R *.dfm}
 
procedure TForm1.Button1Click(Sender: TObject);
Var
  i : Integer;
begin
  N:=StrToIntDef(Edit1.Text,3);
 
  StringGrid1.ColCount:=N+1;
  StringGrid1.RowCount:=N+1;
  StringGrid2.RowCount:=N+1;
  StringGrid2.ColCount:=N+1;
 
  for i:=1 to N do
  begin
    StringGrid1.Cells[0,i]:=' i= '+IntToStr(i);
    StringGrid1.Cells[i,0]:=' j= '+IntToStr(i);
  end;
end;
 
procedure TForm1.Button2Click(Sender: TObject);
var
//  s : extended;
  i,j : Integer;
begin
  For i:=1 To N Do
  For j:=1 To N Do
  StringGrid2.Cells[i,j]:=FloatToStr(
  StrToFloat(StringGrid1.Cells[i,j])*StrToFloat(StringGrid1.Cells[j,i]));
 
{  for i:=1 to N do
  A[i]:=StrToFloat(StringGrid1.Cells[0,i]);
  for j:=1 to N do
  A[j]:=StrToFloat(StringGrid1.Cells[i,0]);
  for i:=1 to N do
  begin
    s:=0;
    for j:=1 to N do
    begin
      s:=A[1,i]*A[i,1];
      B[i,j]:=s;
    end;
    StringGrid2.Cells[i,j]:=FloatToStrf(B[i,j],fffixed,6,2);
  end;
}
end;
 
procedure TForm1.FormCreate(Sender: TObject);
Var
  i : Integer;
begin
  N:=3;
  Edit1.Text:=IntToStr(N);
  StringGrid1.ColCount:=N+1;
  StringGrid1.RowCount:=N+1;
  StringGrid2.ColCount:=N+1;
  StringGrid2.RowCount:=N+1;
 
  StringGrid1.Cells[0,0]:='Массив А:';
  StringGrid2.Cells[0,0]:='Массив B:';
  for i:=1 to N do
  begin
    StringGrid1.Cells[0,i]:=' i= '+IntToStr(i);
    StringGrid1.Cells[i,0]:=' j= '+IntToStr(i);
  end;
end;
 
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
  If Not (Key In ['0'..'9',#8]) Then Key:=#0;
end;
 
procedure TForm1.StringGrid1KeyPress(Sender: TObject; var Key: Char);
begin
  If Not (Key In ['0'..'9',#8,'-','.',',']) Then Key:=#0;
  If Key In ['.',','] Then
  Begin
    Key:=DecimalSeparator;
    With StringGrid1 Do
    If Pos(DecimalSeparator,Cells[Col,Row])<>0 Then
    Key:=#0;
  End;
  If Key='-' Then
  With StringGrid1 Do
  If Pos('-',Cells[Col,Row])<>0 Then Key:=#0;
end;
 
end.
Вложения
Тип файла: rar Транзитивное замыкание_.rar (1.9 Кб, 9 просмотров)
1
 Аватар для Одиночка
3944 / 1869 / 337
Регистрация: 16.03.2012
Сообщений: 3,880
07.04.2013, 13:34
Вот разобрался, вроде, с транзитивным замыканием. Сделал решение с помощью алгоритма Флойда-Уоршелла:
Кликните здесь для просмотра всего текста
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
//Транзитивное замыкание
//Алгоритм Флойда-Уоршелла
procedure TForm1.Button2Click(Sender: TObject);
var
  A0,B0 : Mas1;
  A,B : Mas2;
  i,j,k : Integer;
begin
  for i:=1 To N do
  for j:=1 To N do
  begin
    A[i,j]:=StrToFloat(StringGrid1.Cells[j,i]);
    A0[i,j]:=(A[i,j]=0); //Признак отсутствия пути
  end;
  B0:=A0;
 
  for k:=1 To N do
  begin
    for i:=1 To N do
    for j:=1 To N do
    begin
      if i=j then
      //Диагональ
      B[i,j]:=A[i,j] //Оставляем значение 0
      Else
      if A0[i,j] then //Путь отсутствует
      if not (A0[i,k] Or A0[k,j]) then
      //Оба пути есть
      begin
        B[i,j]:=A[i,k]+A[k,j];
        B0[i,j]:=False; //Расчитанное значение пути есть
      end Else
      //Один или оба пути отсутствуют
      begin
        B[i,j]:=A[i,j]; //Оставляем предыдущее значение
        B0[i,j]:=True;  //Путь отсутствует
      end Else
      //В текущей ячейке уже расчётный путь
      if A0[i,k] Or A0[k,j] then
      //Один или оба пути отсутствуют
      begin
        B[i,j]:=A[i,j]; //Оставляем предыдущее значение
        B0[i,j]:=False; //Расчитанное значение пути есть
      end Else
      //Оба пути есть
      begin
        //Выбирам минимальный путь между рассчитанным ранее и новым
        B[i,j]:=Min(A[i,j],A[i,k]+A[k,j]);
        B0[i,j]:=False;
      end;
    end;
    A:=B; //Результат итерации - берём как исходный
    A0:=B0; //Признаки отсутствия путей тоже
  end;
 
  //Выводим результаты в StringGrid2
  for i:=1 To N do
  for j:=1 To N do
  StringGrid2.Cells[i,j]:=Format('%9.3f',[B[j,i]]);
end;
Вложения
Тип файла: rar Транзитивное замыкание_.rar (2.3 Кб, 28 просмотров)
1
0 / 0 / 0
Регистрация: 17.02.2013
Сообщений: 80
07.04.2013, 14:35  [ТС]
Одиночка,
сейчас попробую сам доделать, по вашему первому алгоритму, если не чего не выйдет, то погляжу 2

Добавлено через 39 минут
Одиночка,
транзитивное замыкание, R=R*R2*R3*Rn... и до тех пор пока матрицы R2, R3 не обнулится, где R - это матрица
потом заносим результаты в общую матрицу, методом наложения друг на друга R*R2*R3*Rn... (или путем добавления единиц)
и еще нужно количество прохождений, то есть умножений
0
 Аватар для Одиночка
3944 / 1869 / 337
Регистрация: 16.03.2012
Сообщений: 3,880
07.04.2013, 14:42
Т.е. так:
R2=R*R;
R3=R2*R;
R4=R3*R;
...
Rn=Rn-1*R;
Пока очередное Rn не станет равной полностью 0 (все элементы 0). n будет количество прохождений.
А как делать наложение?

Не по теме:

Чтобы увидеть ответ - обновляй страницу. Или укажи в своём профиле E-mail и в настройках - "Моментальное уведомление по e-mail"

0
0 / 0 / 0
Регистрация: 17.02.2013
Сообщений: 80
07.04.2013, 14:52  [ТС]
Одиночка,
а наложение, берёш R и на него просто сверху R2 , типо дописываем единицы из R2 в R,
ох не так просто эту дискретку объяснить)
0
 Аватар для Одиночка
3944 / 1869 / 337
Регистрация: 16.03.2012
Сообщений: 3,880
07.04.2013, 14:53
Покажи на примере двух матриц.
0
0 / 0 / 0
Регистрация: 17.02.2013
Сообщений: 80
07.04.2013, 14:54  [ТС]
Цитата Сообщение от Одиночка Посмотреть сообщение
n будет количество прохождений.
нет , количество прохождений в R*R2*R3*Rn берется *

Добавлено через 34 секунды
Цитата Сообщение от Одиночка Посмотреть сообщение
Покажи на примере двух матриц
ща фотку скину
0
0 / 0 / 0
Регистрация: 17.02.2013
Сообщений: 80
07.04.2013, 15:03  [ТС]
вот,
и вот такая матрица почему то не правильно считается,
100
110
000
Миниатюры
Транзитивное замыкание  
0
 Аватар для Одиночка
3944 / 1869 / 337
Регистрация: 16.03.2012
Сообщений: 3,880
07.04.2013, 15:10
У тебя в примере не правильно считается. Потому что умножение второй строки на второй столбец даёт первый ноль.
И при таких значениях останутся единицы только на главной диагонали. И они нолём никогда не станут.
0
0 / 0 / 0
Регистрация: 17.02.2013
Сообщений: 80
07.04.2013, 15:14  [ТС]
мож я и не так сформулировал,
нужно из 2 матрицы все столбцы умножить на 1 строку 1 матрицы, и если есть 1 единица, то запишем в матрицу 11=1

понятно
0
 Аватар для Одиночка
3944 / 1869 / 337
Регистрация: 16.03.2012
Сообщений: 3,880
07.04.2013, 15:17
Сделать можно как угодно. Но я пока не понимаю сути.
Сейчас попытаюсь через Википедию разобраться.
0
0 / 0 / 0
Регистрация: 17.02.2013
Сообщений: 80
07.04.2013, 15:19  [ТС]
я понимать , понимаю, на листочке считаю все хорошо, а на ЯП перевести не могу,
0
 Аватар для Одиночка
3944 / 1869 / 337
Регистрация: 16.03.2012
Сообщений: 3,880
07.04.2013, 16:22
Если как ты пишешь - нужно умножать первую строку на каждый из столбцов - то у тебя в результате должна остаться 1 только в самой первой ячейке. Значит ты не умножаешь, а делаешь чего-то другое. Может логичесое Or? Но так у тебя нолей не прибавится. Вот я и не понимаю.

Добавлено через 59 минут
Вот. Разобрался. Полностью замени код. Фориа остаётся такая же.
Кликните здесь для просмотра всего текста
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Grids, StdCtrls, Math;
 
type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Label1: TLabel;
    Button1: TButton;
    Button2: TButton;
    StringGrid1: TStringGrid;
    StringGrid2: TStringGrid;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Edit1KeyPress(Sender: TObject; var Key: Char);
    procedure StringGrid1KeyPress(Sender: TObject; var Key: Char);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
const
  Nmax=10;
Type
  Mas2 = array[1..Nmax,1..Nmax] of Byte;
 
var
  Form1: TForm1;
  N : integer;
 
implementation
 
{$R *.dfm}
 
procedure TForm1.Button1Click(Sender: TObject);
var
  i : Integer;
begin
  N:=StrToIntDef(Edit1.Text,3);
 
  StringGrid1.ColCount:=N+1;
  StringGrid1.RowCount:=N+1;
  StringGrid2.RowCount:=N+1;
  StringGrid2.ColCount:=N+1;
 
  for i:=1 to N do
  begin
    StringGrid1.Cells[0,i]:=' i= '+IntToStr(i);
    StringGrid1.Cells[i,0]:=' j= '+IntToStr(i);
    StringGrid2.Cells[0,i]:=' i= '+IntToStr(i);
    StringGrid2.Cells[i,0]:=' j= '+IntToStr(i);
  end;
end;
 
//Кнопка "Считать"
procedure TForm1.Button2Click(Sender: TObject);
var
  A : Mas2;
  i,j,k,m,it : Integer;
begin
  for i:=1 To N do
  for j:=1 To N do
  A[i,j]:=StrToIntDef(StringGrid1.Cells[j,i],0);
 
  it:=0;
  //Транзитивное замыкание
  for k:=1 to N do
  Begin
    for i:=1 to N do
    for j:=1 to N do
    Begin
      m:=A[i,j] or (A[i,k] and A[k,j]);
      If m<>A[i,j] then it:=k; //Количество итераций
      A[i,j]:=m;
    End;
    If it<>k Then Break; //Изменений небыло - выход из цикла
  End;
 
  //Выводим результаты в StringGrid2
  for i:=1 To N do
  for j:=1 To N do
  StringGrid2.Cells[i,j]:=Format('%d',[A[j,i]]);
  ShowMessage('Количество итераций: '+IntToStr(it));
end;
 
procedure TForm1.FormCreate(Sender: TObject);
var
  i : Integer;
begin
  N:=3;
  Edit1.Text:=IntToStr(N);
  StringGrid1.ColCount:=N+1;
  StringGrid1.RowCount:=N+1;
  StringGrid2.ColCount:=N+1;
  StringGrid2.RowCount:=N+1;
 
  StringGrid1.Cells[0,0]:='Массив А:';
  StringGrid2.Cells[0,0]:='Массив B:';
  for i:=1 to N do
  begin
    StringGrid1.Cells[0,i]:=' i= '+IntToStr(i);
    StringGrid1.Cells[i,0]:=' j= '+IntToStr(i);
  end;
end;
 
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
  if not (Key in ['0'..'9',#8]) then Key:=#0;
end;
 
procedure TForm1.StringGrid1KeyPress(Sender: TObject; var Key: Char);
begin
  if not (Key in ['0'..'1',#8]) then Key:=#0;
end;
 
end.

Вот ссылка на описание:
http://neerc.ifmo.ru/wiki/inde... 0%BB%D0%B0
0
0 / 0 / 0
Регистрация: 17.02.2013
Сообщений: 80
07.04.2013, 17:47  [ТС]
столбец из второй матрицы умножаю на строку из первой
/100/ /100 /
/110/*/110 / =вот 100*на 110, потом 100*на 010, потом на 100*000 и получается в первой строке /100/
/000/ /000/

Добавлено через 18 минут
Delphi
1
m:=A[i,j] or (A[i,k] and A[k,j]);
вот
[Pascal Error] Unit1.pas(78): E2015 Operator not applicable to this operand type

какой оператор поменять
0
 Аватар для Одиночка
3944 / 1869 / 337
Регистрация: 16.03.2012
Сообщений: 3,880
07.04.2013, 18:17
У меня код был полностью отлажен и проверен и на твоём примере тоже. Ты, наверное, не весь код скопировал. Покажи, что у тебя получилось (код).
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
07.04.2013, 18:17
Помогаю со студенческими работами здесь

Транзитивное замыкание бинарного отношения
Подскажите пожалуйста как на заданном графе R= ((1 3) (1 4) (2 1) (3 2) (4 1) (4 5) (5 3) (5 6) ) найти транзитивное замыкание бинарного...

Транзитивное замыкание неор графа
Имеется задача : построить транзитивное замыкание для неориентир графа(метод Уоршала не предлагать) , помогите с этим делом ,хотя бы...

Что такое транзитивное замыкание?
Можете привести парочку простых примеров, а то не очень понял что это такое и как применяется.

Как задать транзитивное замыкание?
M=\begin{Bmatrix}1,3,5,7\end{Bmatrix} Отношение R= \begin{Bmatrix}(a,b):b=a+2\end{Bmatrix} Если его задать списком то получится:...

Транзитивное замыкание для бинарного соотношения (тройной цикл...)
Приветствую. Что то не пойму никак, как реализовать данный алгоритм. С программированием в маткаде не сталкивался никогда. На ум приходит...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru