Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.01.2013, 03:27   #1
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
Злость Массивы. Гл. диагональ на наоборот.

Доброго времени суток!

Есть матрица 3 на 3.
1 4 6
2 5 7
3 6 8

Диагонально 1 5 8 - у меня получается... :
движение идет от левого-верхнего угла к правому-нижнему
Код:
procedure TMainForm.Button2Click(Sender: TObject);
var
  iRows, iCols: Integer;
  d1, d2, x, x1: Integer;
begin
  d1 := 0;
  d2 := 0;
  x := 0;
  x1 := 0;
  for iCols := 0 to StringGrid1.ColCount - 1 do
  begin
    for iRows := 0 to StringGrid1.RowCount - 1 do
    begin
      if iCols = iRows then
      begin
        x := StrToInt(StringGrid1.Cells[iCols, iRows]);
        d1 := D1 + x; //Сумма
      end;
    end;
  end;
а вот другая диагональ: 3 5 6 я уж 30 минут и так и сяк ворочал циклы, ну ни в какую..
вот так:
Код:
  for iRows := StringGrid1.RowCount - 1 downto 0 do
  begin
    for iCols := StringGrid1.ColCount - 1 downto 0 do
    begin
      if iRows = iCols then
      begin
        x := StrToInt(StringGrid1.Cells[iCols, iRows]);
        d2 := D2 + x;
      end;
    end;
  end;
только движение идет от правого-нижнего угла к левому-верхнему

Дайте совет на что смотреть. Элементарно, но не доходит в 2 часа ночи

UPDATE
Дошло: http://programmersforum.ru/showthread.php?t=70310

...

Нет не дошло..
Код:
procedure TMainForm.Button2Click(Sender: TObject);
var
  iRows, iCols: Integer; //Ñ÷åò÷èêè
  d1, d2, x, x1: Integer;
  N: Integer;
begin
  //Ìàòðèöà êîððåêòíà è ýòî õîðîøî.
  d1 := 0;
  d2 := 0;
  //1-ÿ äèàãîíàëü
  x := 0;
  x1 := 0;
  N := StringGrid1.ColCount - 1;
  //ñëåâà  íà ïðàâî è âíèç
  for iCols := 0 to N do
  begin
    for iRows := 0 to N do
    begin
      if iCols = iRows then
      begin
        x := StrToInt(StringGrid1.Cells[iCols, iRows]);
        d1 := D1 + x;
      end;
    end;
  end;

  //ñëåâà  íà ïðàâî è ââåðõ

  for iCols := 0 to N do
  begin
    for iRows := 0 to N do
    begin
      if (iRows + iCols = N + 1) then
      begin
        x := StrToInt(StringGrid1.Cells[iCols, iRows-1]);
        d2 := D2 + x;
      end;
    end;
  end;
Почти работает!
Из 3 5 6 получает только: 5 6

Последний раз редактировалось Человек_Борща; 19.01.2013 в 03:57.
Человек_Борща вне форума Ответить с цитированием
Старый 19.01.2013, 03:59   #2
Ezhik Kihze
Форумчанин
 
Регистрация: 24.12.2012
Сообщений: 639
По умолчанию

1. Если вам нужны только диагонали, то не нужны вам два цикла, проверка условия
2. Если для главной дигонали первый индекс равен второму, то для побочной картина чуть другая
3. Давайте прикинем индексы:
первый = счетчик цикла от (размерности матрицы - 1) до 0
второй = размерность - первый - 1

П.С. Для главной тоже все в один цикл делается
ICQ: 677936656 Gmail: ekEmbed@gmail.com
Ezhik Kihze вне форума Ответить с цитированием
Старый 19.01.2013, 11:04   #3
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Проблема решена! Спасибо!

Последний раз редактировалось Человек_Борща; 19.01.2013 в 11:14.
Человек_Борща вне форума Ответить с цитированием
Старый 19.01.2013, 12:40   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Код:
массив a[1..n,1..n]

for i:=1 to n
  a[i,i] - элементы главной диагонали слева направо и сверху вниз
  a[n-i+1,n-i+1] - элементы главной диагонали справа налево и снизу вверх
  a[n-i+1,i] - элементы воторой диагонали слева направо и снизу вверх
  a[i,n-i+1] - элементы воторой диагонали справа налево и сверху вниз
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Диагональ в матрице SnS Паскаль, Turbo Pascal, PascalABC.NET 0 09.12.2012 18:32
побочная диагональ Женька Good Помощь студентам 1 27.12.2011 22:12
Главная диагональ Айдар Помощь студентам 4 09.04.2010 16:34
Диагональ матрицы Pecherni Общие вопросы C/C++ 2 16.03.2009 17:47
Диагональ монитора. Levsha100 Помощь студентам 3 08.12.2008 23:52