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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.02.2013, 20:12   #1
Blondy
Участник клуба
 
Аватар для Blondy
 
Регистрация: 07.07.2009
Сообщений: 1,385
По умолчанию Матрица: наивный вопрос

Дорогие форумчане, вы не могли бы меня поправить, если я понимаю неправильно, а то я что-то запуталась.

Вот у нас есть стандартный цикл для создания и чтения элементов матрицы

Код:
 for (int i = 0; i < n; i++) {
            for (int j = 0; j < n; j++) {

//здесь обрабатываем элементы
x = i;
x++;


                                       }
}
Верно ли, что в данном коде:
коэфициент i отвечает за индекс текущего столбца, а коэфициент j отвечает за индекс текущей строки? То есть увеличивая x на 1 мы сдвинемся на один элемент вправо, а не на один элемент вниз? Или все-таки наоборот?

Я понимаю, что вопрос смешной, но я тут заблудилась в трех соснах и уже сомневаюсь.
"Все мы жаждем чудес. Чисто человеческое свойство." Carl Sagan
Blondy вне форума Ответить с цитированием
Старый 12.02.2013, 20:18   #2
Bugrimov
C/C++, Java
Участник клуба
 
Аватар для Bugrimov
 
Регистрация: 28.03.2012
Сообщений: 1,680
По умолчанию

Получается просто квадратная матрица n на n. Перемещение по столбцам i++, перемещения по строкам j++. x получает значение индекса i и увеличивается на 1. Вот вроде все, что делает этот кусок кода.
i++ - увеличение на 1, т.е. переход к следующему значению индекса и т.д.
"Keep it simple" - придерживайтесь простоты!
Уильям Оккам - "Не следует множить сущее без необходимости"
Сложность - враг простоты и удобства!
Bugrimov вне форума Ответить с цитированием
Старый 12.02.2013, 20:22   #3
gaw4
Форумчанин
 
Регистрация: 31.05.2010
Сообщений: 407
По умолчанию

осмелюсь предположить, что в "//здесь обрабатываем элементы"
если массив mass[j,i] то Вы правы
если mass[i,j] - то с точностью до наоборот
icq 584 308 611
gaw4 вне форума Ответить с цитированием
Старый 12.02.2013, 20:23   #4
Blondy
Участник клуба
 
Аватар для Blondy
 
Регистрация: 07.07.2009
Сообщений: 1,385
По умолчанию

Этот кусок кода для примера. Меня интересует сейчас - для X увеличится индексация строки или столбца? Это самый насущный вопрос и от верности ответа будет зависить очень многое. Я тут с отладчиком бъюсь и удивляюсь получаемым результатам...Вот я и подумала - может, у меня неверное представление об индексации?

массив [i][j]
"Все мы жаждем чудес. Чисто человеческое свойство." Carl Sagan
Blondy вне форума Ответить с цитированием
Старый 12.02.2013, 20:25   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

ну, Вы же собственно не написали, как вы обрабатываете элементы A[i][j] или A[j][i]

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

ну и третье и последнее, общепринято так
допустим есть матрица n X m
читаем - есть n строк и m столбцов.
Код:
 for (int i = 0; i < n; i++) {
            for (int j = 0; j < m; j++) {
            A[i][j]
внешний цикл по i - это по строчкам, сверху вниз от 0 до n-1
внутренний цикл по j - это по столбцам - слева направо
т.е. элементы будут обрабатываться в порядке чисел:
1 2 3 4
5 6 7 8
9 10 11 12
...

p.s. учитывайте, что в отладчике Вы можете видеть код, полученный в результате оптимизации - тут уже как оптимизатор решил,
так и будет обрабатывать, следите в отладчике за индексами!

Последний раз редактировалось Serge_Bliznykov; 12.02.2013 в 20:27.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 12.02.2013, 20:33   #6
Blondy
Участник клуба
 
Аватар для Blondy
 
Регистрация: 07.07.2009
Сообщений: 1,385
По умолчанию

Сереж, спасибо. Вот я и слежу в отладчике за индексами и вижу, что по моим расчетам должен быть один результат, а получаю непонятно что...Вот я и спросила про индексацию - у меня просто в матрице только два числа 0 и 1, трудно отследить происходящее.

То есть Х++ это мы спускаемся на строку ниже, да?
"Все мы жаждем чудес. Чисто человеческое свойство." Carl Sagan

Последний раз редактировалось Blondy; 12.02.2013 в 20:40.
Blondy вне форума Ответить с цитированием
Старый 12.02.2013, 20:44   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
То есть Х++ это мы спускаемся на строку ниже, да?
если Вы используете переменную X для первого индекса массива - то да, Вы берёте СЛЕДУЮЩУЮ строчку!

p.s. по хорошему это потенциально опасный код - нужно ещё проверять, что i не равно (n-1) == последней строке, иначе будет выход за пределы массива..
Serge_Bliznykov вне форума Ответить с цитированием
Старый 12.02.2013, 20:47   #8
Bugrimov
C/C++, Java
Участник клуба
 
Аватар для Bugrimov
 
Регистрация: 28.03.2012
Сообщений: 1,680
По умолчанию

x не влияет на перемещение по строкам. За перемещение по строкам отвечает цикл. (j++ - j увеличивается пока выполняется условие). Судя по контексту кода.
"Keep it simple" - придерживайтесь простоты!
Уильям Оккам - "Не следует множить сущее без необходимости"
Сложность - враг простоты и удобства!
Bugrimov вне форума Ответить с цитированием
Старый 12.02.2013, 20:53   #9
Blondy
Участник клуба
 
Аватар для Blondy
 
Регистрация: 07.07.2009
Сообщений: 1,385
По умолчанию

Цитата:
p.s. по хорошему это потенциально опасный код - нужно ещё проверять, что i не равно (n-1) == последней строке, иначе будет выход за пределы массива..
Ага, у меня эта проверка сделана, я тут привела в качестве примера болванку-шаблон, чтобы убедиться в правильности (вернее, неправильности) представлений об индексации.

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

Сереж, плюсануть не могу - не пускают. Поэтому еще раз спасибо и большой респект. В который раз выручаете!
"Все мы жаждем чудес. Чисто человеческое свойство." Carl Sagan

Последний раз редактировалось Blondy; 12.02.2013 в 20:56.
Blondy вне форума Ответить с цитированием
Старый 12.02.2013, 21:16   #10
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Вопроса здесь на самом деле два, а не один. Первый решается Эйнштейном и его теорией относительности. Вкратце - все в мире относительно. Вы правильно запутались так как в Вашем примере нет привязки ни к строкам ни к столбцам. Лично компьютеру и мне пофигу где там строки и столбцы и зависит это, как правило, от формата вывода матрицы в результирующее устройство, например на экран или в мозг преподавателя, не суть важно. Главное, то что пока нет явной привязки адресации элементов матрицы к интерфейсу - нет никакой разницы между строками и столбцами.
И второй вопрос заключается в n. Даже если матрица в дюпель квадратная она все равно должна задаваться m x n. Во-первых, это обобщает алгоритм, во-вторых, здорово помогает решать (а главное понять) первый вопрос .

Цитата:
внутренний цикл по j - это по столбцам - слева направо
Для студентов задача прямо противоположная . Выгодно в одном цикле сразу выводить результат. Естественно по строчно
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика

Последний раз редактировалось Utkin; 12.02.2013 в 21:37.
Utkin вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Наивный вопрос - протокол Polling в сетевых технологиях. Blondy Свободное общение 6 26.12.2012 22:32
Паскаль. Матрица NxN -> текстовый файл -> Матрица NxN - найти max по диагоналям -> типизированный файл Лунатик13 Помощь студентам 1 20.02.2012 15:54
Двухмерная матрица в Delphi!! ВОПРОС!!! halo Помощь студентам 0 21.11.2010 18:38
Непонятки с DirectX (матрица поворота, камера, матрица проекции) ROD Общие вопросы C/C++ 2 17.09.2010 17:00
TurboPascal: граф, матрица смежности и матрица инцидентности. ulala Помощь студентам 0 02.12.2009 10:11