Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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("&#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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.002 c
15-1371318845
Пит
2013-06-15 21:54
2013.12.08
Управление пользователями Firebird


15-1371203547
Дмитрий СС
2013-06-14 13:52
2013.12.08
Logitech и Apple работают над джойстиком для iPhone и iPad


2-1361414339
ixen
2013-02-21 06:38
2013.12.08
dataset не фильтрует время


15-1371501002
Юрий
2013-06-18 00:30
2013.12.08
С днем рождения ! 18 июня 2013 вторник


15-1371668899
Jeer
2013-06-19 23:08
2013.12.08
Памяти наших Учителей посвящается..





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский