Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

матрица инциденции 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 поменяли? может я не в курсе?


Наверх

Титульная страница Поиск, карта сайта Написать письмо