Форум: "Начинающим";
Текущий архив: 2013.12.08;
Скачать: [xml.tar.bz2];
Внизматрица инциденции Delphi Найти похожие ветки
← →
shup (2013-02-21 22:06) [0]Здравствуйте. Одна из задач - задать матрицу инцидентности путём введения количества вершин и количества рёбер.
В каждом столбце матрицы должны быть либо две единицы со знаком+, т. е. 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-21 22:56) [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 ГДЕ 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 поменяли? может я не в курсе?
← →
oldman © (2013-02-21 22:59) [2]и еще вопрос:
Зачем для каждого столбца генерировать N значений и потом проверять их,
если можно сгенерировать 2 значения для каждого столбца?
← →
oldman © (2013-02-21 23:03) [3]и еще вопрос:
с каких пор матрица инцидентности строится random?
← →
oldman © (2013-02-21 23:13) [4]получишь ведь для трех вершин и трех ребер
1 1 1
1 1 1
0 0 0
офигенная матрица!!!
← →
shup (2013-02-21 23:41) [5]
> Зачем для каждого столбца генерировать N значений и потом
> проверять их,
> если можно сгенерировать 2 значения для каждого столбца?
>
Как понять сгенерировать 2 значения для каждого столбца?
> и еще вопрос:
>
> с каких пор матрица инцидентности строится random?
>
>
Мне нужно по условию задачи задать её рандом, введя только количество вершин и количество рёбер.
С бегинами и эндами разобрался, за это спасибо!!! Да и вообще спасибо, что хоть кто-то смотрит форум!
Как мне можно исключить такой вариант?
> получишь ведь для трех вершин и трех ребер
>
> 1 1 1
> 1 1 1
> 0 0 0
>
> офигенная матрица!!!
← →
shup (2013-02-21 23:57) [6]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
>
> офигенная матрица!!!
← →
oldman © (2013-02-22 01:36) [7]
> Как понять сгенерировать 2 значения для каждого столбца?
>
У тебя столбец длиной... предположим 7
генерируем два числа от 1 до 7
это будут адреса ячеек (а и b)
генерируем число от 1 до 2 (если 2, меняем на -1)
заносим их в ячейки a и b
повторяем для каждого столбца
все
остается проверить на корректность графа (типа возможен ли такой граф)
← →
shup (2013-02-25 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 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<2*(n-1)) then
d:=d+1;
if s=2*(n-1) then
f:=f+1;
if d=n then
ShowMessage("Ãðàô ïîëíûé");
if f=n then
ShowMessage("Ãðàô ïîëíûé ñèììåòðè÷åñêè&# 233;");
end
else
begin
ShowMessage("Ãðàô íå ïîëíûé");
end;
end;
end.
← →
shup (2013-02-25 17:06) [9]Вобщем тут задача в том, что я иду по матрице Grid2. Сначала по строке, считаю, сколько единиц в ней. Если единиц больше, чем количество введённых вершин(n) -1, и меньше чем 2(n-1) то считаем сумму(то есть количество строк). И так должно пройти по всем строкам. Если равна 2(n-1) то тоже сумму считаем таких совпадений(то есть количество строк). И потом выводим сообщения трёх видов, последнее выводим, если d не равно n и f не равно n.
Очень надеюсь на вашу помощь!
← →
oldman © (2013-02-27 12:27) [10]
> 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 reb do begin
for j:=1 to n do begin
if Abs(StrToInt(Grid2.Cells[i,j]))=1 then begin
s:=s+1;
if (s>(n-1)) and (s<2*(n-1)) then d:=d+1;
if s=2*(n-1) then f:=f+1;
if d=n then ShowMessage("Ãðàô ïîëíûé");
if f=n then ShowMessage("Ãðàô ïîëíûé ñèììåòðè÷åñêè&# 233;");
end
else ShowMessage("Ãðàô íå ïîëíûé");
end
end;
end.
Наверное, так...
Кстати, выделенные курсивом reb и n нигде не объявлены ))) Они у тебя глобальные?
> shup (25.02.13 17:06) [9]
кто на ком стоял?
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2013.12.08;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.003 c