На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! правила раздела Алгоритмы
1. Помните, что название темы должно хоть как-то отражать ее содержимое (не создавайте темы с заголовком ПОМОГИТЕ, HELP и т.д.). Злоупотребление заглавными буквами в заголовках тем ЗАПРЕЩЕНО.
2. При создании темы постарайтесь, как можно более точно описать проблему, а не ограничиваться общими понятиями и определениями.
3. Приводимые фрагменты исходного кода старайтесь выделять тегами code.../code
4. Помните, чем подробнее Вы опишете свою проблему, тем быстрее получите вразумительный совет
5. Запрещено поднимать неактуальные темы (ПРИМЕР: запрещено отвечать на вопрос из серии "срочно надо", заданный в 2003 году)
6. И не забывайте о кнопочках TRANSLIT и РУССКАЯ КЛАВИАТУРА, если не можете писать в русской раскладке :)
Модераторы: Akina, shadeofgray
  
> Обход диагоналей матрицы , Как пройти каждую диагональ матрицы?
    Здравствуйте.

    Возник простейший вопрос обхода матрицы по диагоналям. То есть, нужно пройти каждую диагональ по отдельности и, допустим, осуществить в оных поиск какого-нибудь элемента с определенным значением или, например, суммирование элементов диагонали.

    Спасибо.
      Заводишь цикл по i и элемент главной диагонали будет иметь координаты a[i,i],
      а элемент побочной диагонали соответственно a[i,m-i], где m - это размерность матрицы.
        Что приходит на ум...

        a - матрица, индексация: [строка от 0,столбец от 0]
        m - число строк
        n - число столбцов


        ExpandedWrap disabled
          /* Диагонали, параллельные главной */
          for dx in 0..n-1 // каждая диагональ (1 из 2)
          {
           y = 0
           for x in dx..n-1
           {
            break when y>=m
            обрабатываем элемент a[x,y]
            y++
           }
          }
          for dy in 1..m-1 // каждая диагональ (2 из 2) (от 1, чтобы не повторяться насчёт главной диагонали)
          {
           x = 0
           for y in dy..m-1
           {
            break when x>=n
            обрабатываем элемент a[x,y]
            x++
           }
          }
          /* Диагонали, перпендикулярные главной */
          for dx in 0..n-1 // каждая диагональ (1 из 2)
          {
           y = 0
           for x in n-1..dx
           {
            break when y>=m
            обрабатываем элемент a[x,y]
            y++
           }
          }
          for dy in 1..m-1 // каждая диагональ (2 из 2) (от 1, чтобы не повторяться насчёт главной диагонали)
          {
           x = 0
           for y in m-1..dy
           {
            break when x>=n
            обрабатываем элемент a[x,y]
            x++
           }
          }

        Чё-то много получилось! :)
        На всякий случай писал не для квадратных матриц, хотя не уверен, что термин "диагональ" для них применим.
          Цитата
          На всякий случай писал не для квадратных матриц

          Любую матрицу можно привести к квадратной, дополнив недостающие столбцы/строки нулями.
            PAVНу действительные числа тоже частный случай комплексных, но это не значит, что квадратный корень можно извлечь из любого действительного числа :P Т.е., что любая матрица приводится ко квадратной, это здорово, но в моём понимании диагональ всегда ассоциировалась лишь как a[i,i] и a[i,m-i], то бишь существующее только для квадратных, опять же, матриц, но чем дальше в лес, тем больше вижу, что диагональ - для матриц - имеет более общий смысл....
            1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
            0 пользователей:


            Рейтинг@Mail.ru
            [ Script execution time: 0,0706 ]   [ 14 queries used ]   [ Generated: 18.07.25, 02:16 GMT ]