Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2013.12.08;
Скачать: CL | DM;

Вниз

матрица инциденции 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("&#195;&#240;&#224;&#244; &#239;&#238;&#235;&#237;&#251;&#233;");
                      if f=n then
                       ShowMessage("&#195;&#240;&#224;&#244; &#239;&#238;&#235;&#237;&#251;&#233; &#241;&#232;&#236;&#236;&#229;&#242;&#240;&#232;&#247;&#229;&#241;&#234;&#232;&# 233;");
                        end
                        else
                        begin
                          ShowMessage("&#195;&#240;&#224;&#244; &#237;&#229; &#239;&#238;&#235;&#237;&#251;&#233;");
                       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("&#195;&#240;&#224;&#244; &#239;&#238;&#235;&#237;&#251;&#233;");
       if f=n then ShowMessage("&#195;&#240;&#224;&#244; &#239;&#238;&#235;&#237;&#251;&#233; &#241;&#232;&#236;&#236;&#229;&#242;&#240;&#232;&#247;&#229;&#241;&#234;&#232;&#  233;");
     end
     else ShowMessage("&#195;&#240;&#224;&#244; &#237;&#229; &#239;&#238;&#235;&#237;&#251;&#233;");
    end
 end;
end.

Наверное, так...
Кстати, выделенные курсивом reb и n нигде не объявлены ))) Они у тебя глобальные?


> shup   (25.02.13 17:06) [9]


кто на ком стоял?



Страницы: 1 вся ветка

Текущий архив: 2013.12.08;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.007 c
1-1317893740
Бездомный
2011-10-06 13:35
2013.12.08
Чтобы локальные переменные в функциях


15-1371283923
alexdn
2013-06-15 12:12
2013.12.08
Вот тоже статья на анализ


15-1371457959
Sergey Masloff
2013-06-17 12:32
2013.12.08
И опять про ЕГЭ


15-1369665361
Rouse_
2013-05-27 18:36
2013.12.08
Пакет статей по перехвату.


2-1361811947
ttt
2013-02-25 21:05
2013.12.08
Обрезать строку