![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
матрица инциденции Delphi
shup © (2013-02-21 22:06:00)Здравствуйте. Одна из задач - задать матрицу инцидентности путём введения количества вершин и количества рёбер.
В каждом столбце матрицы должны быть либо две единицы со знаком+, т. е. 1 и 1, либо -1 и -1, либо -1 1, остальные нули. Тоесть не больше двух единиц в столбце. Столбцов с одной единицей или полностью с нулями быть не должно.
Написал код, вроде логически правильно, но чёто не работает) Подскажите что не так:
procedure TForm1.Button1Click(Sender: TObject);
begin
s:=0;
Str:=StrToInt(edit1.Text);
Stlb:=StrToInt(edit2.Text);
StringGrid1.ColCount:=Str+1;
StringGrid1.RowCount:=Stlb+1;
for i:=1 to Str do
for j:=1 to Stlb do
StringGrid1.Cells[i,j]:=IntToStr(random(3)-1);
begin
for i:=1 to Str do
for j:=1 to Stlb do
begin
if Abs(StrToInt(StringGrid1.Cells[i,j]))=1 then
begin
s:=s+1;
end;
if s=2 then
begin
for m:=i+1 to Str do
begin
StringGrid1.Cells[m,j]:='0';
end;
end;
end;
end;
end;
end.
oldman (2013-02-27 12:27:00) [1]
> shup (25.02.13 17:02) [8]
МАМА!!!!!!!!!!
procedure TForm1.Button5Click(Sender: TObject);
var i, j, f, s, d:integer;
begin
s:=0;
d:=0;
f:=0;
for i:=1 to rebdo begin
for j:=1 to ndo begin
if Abs(StrToInt(Grid2.Cells[i,j]))=1 then begin
s:=s+1;
if (s>(n-1)) and (s shup (25.02.13 17:06) [9]
кто на ком стоял?
shup (2013-02-25 17:06:00) [2]Вобщем тут задача в том, что я иду по матрице Grid2. Сначала по строке, считаю, сколько единиц в ней. Если единиц больше, чем количество введённых вершин(n) -1, и меньше чем 2(n-1) то считаем сумму(то есть количество строк). И так должно пройти по всем строкам. Если равна 2(n-1) то тоже сумму считаем таких совпадений(то есть количество строк). И потом выводим сообщения трёх видов, последнее выводим, если d не равно n и f не равно n.
Очень надеюсь на вашу помощь!
shup (2013-02-25 17:02:00) [3]Спасибо, а можете, если вам не трудно, ещё тут посмотреть с бегинами и эндами. Или может не в них проблема. Благодарю заранее.
procedure TForm1.Button5Click(Sender: TObject);
var i, j, f, s, d:integer;
begin
s:=0;
d:=0;
f:=0;
for i:=1 to reb do
for j:=1 to n do
begin
if Abs(StrToInt(Grid2.Cells[i,j]))=1 then
s:=s+1;
if (s>(n-1)) and (s
oldman (2013-02-22 01:36:00) [4]
> Как понять сгенерировать 2 значения для каждого столбца?
>
У тебя столбец длиной... предположим 7
генерируем два числа от 1 до 7
это будут адреса ячеек (а и b)
генерируем число от 1 до 2 (если 2, меняем на -1)
заносим их в ячейки a и b
повторяем для каждого столбца
все
остается проверить на корректность графа (типа возможен ли такой граф)
shup (2013-02-21 23:57:00) [5]for i:=1 to Str do
for j:=1 to Stlb do
begin
if StrToInt(StringGrid1.Cells[i,j])=StrToInt(StringGrid1.Cells[i,j+1]
then
for j:=j+1 to Stlb do
StringGrid1.Cells[i,j]:='0';
Так, или не правильно?
> получишь ведь для трех вершин и трех ребер
>
> 1 1 1
> 1 1 1
> 0 0 0
>
> офигенная матрица!!!
shup (2013-02-21 23:41:00) [6]
> Зачем для каждого столбца генерировать N значений и потом
> проверять их,
> если можно сгенерировать 2 значения для каждого столбца?
>
Как понять сгенерировать 2 значения для каждого столбца?
> и еще вопрос:
>
> с каких пор матрица инцидентности строится random?
>
>
Мне нужно по условию задачи задать её рандом, введя только количество вершин и количество рёбер.
С бегинами и эндами разобрался, за это спасибо!!! Да и вообще спасибо, что хоть кто-то смотрит форум!
Как мне можно исключить такой вариант?
> получишь ведь для трех вершин и трех ребер
>
> 1 1 1
> 1 1 1
> 0 0 0
>
> офигенная матрица!!!
oldman (2013-02-21 23:13:00) [7]получишь ведь для трех вершин и трех ребер
1 1 1
1 1 1
0 0 0
офигенная матрица!!!
oldman (2013-02-21 23:03:00) [8]и еще вопрос:
с каких пор матрица инцидентности строится random?
oldman (2013-02-21 22:59:00) [9]и еще вопрос:
Зачем для каждого столбца генерировать N значений и потом проверять их,
если можно сгенерировать 2 значения для каждого столбца?
oldman (2013-02-21 22:56:00) [10]
> но чёто не работает
немудрено...
лог ошибок можно. так просто. переведу.
А... Да и без перевода:
procedure TForm1.Button1Click(Sender: TObject);
begin
s:=0;
Str:=StrToInt(edit1.Text);
Stlb:=StrToInt(edit2.Text);
StringGrid1.ColCount:=Str+1;
StringGrid1.RowCount:=Stlb+1;
for i:=1 to Str do ГДЕ begin?
for j:=1 to Stlb do ГДЕ begin?
StringGrid1.Cells[i,j]:=IntToStr(random(3)-1);
begin ЭТО К ЧЕМУ?
for i:=1 to Str do ГДЕ begin?
for j:=1 to Stlb do begin
if Abs(StrToInt(StringGrid1.Cells[i,j]))=1 then begin
s:=s+1;
end;
if s=2 then begin
for m:=i+1 to Str do begin
StringGrid1.Cells[m,j]:='0';
end;
end;
end;
end;
end; ЭТО ОТКУДА?
end.
Или чего-то в синтаксисе for и begin-end поменяли? может я не в курсе?