LINUX.ORG.RU

Стандарт оказался неудобным, i j

 ,


0

1

Во всех примерах когда нужно использовать два вложенных цикла используют изначально букву «i», а во внутреннем - «j». Я поступаю также. У меня одного возникают проблемы с этими буквами в большом коде, когда перепутав буквы местами, просто не замечаю этого??? А какие буквы используете вы? И да, пишу на C++ / java , но кажется это неважно.

★★★

Последнее исправление: abs (всего исправлений: 1)
Ответ на: комментарий от amaora

Не всегда она хорошо ей описывается.

я сказал «если она описывается». С чем ты споришь? Я даже не сказал, какая.

Да и матрица ещё не означает двумерный массив.

а двумерный массив не означает «матрицу». При чём тут вообще какой-то массив? Ты про двойную индексацию говорил.

emulek
()
Ответ на: комментарий от ziemin

Переходи на отступ в два пробела.

Now, some people will claim that having 8-character indentations makes the code move too far to the right, and makes it hard to read on a 80-character terminal screen. The answer to that is that if you need more than 3 levels of indentation, you're screwed anyway, and should fix your program.

In short, 8-char indents make things easier to read, and have the added benefit of warning you when you're nesting your functions too deep. Heed that warning.

ilammy ★★★
()
Ответ на: комментарий от ilammy

In short, 8-char indents make things easier to read, and have the added benefit of warning you when you're nesting your functions too deep. Heed that warning.

короче: используй. Никто тебе не запрещает. Но смирись с тем фактом, что мне насрать на твоё ценное мнение. Я 20 лет юзаю табы из 4х пробелов, и буду юзать такие и впредь.

emulek
()
Ответ на: комментарий от NeverLoved

О чём и речь. Но к сожалению многие понимают много букв именно так.

peregrine ★★★★★
()
Ответ на: комментарий от emulek

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

ilammy ★★★
()
Ответ на: комментарий от beastie

И эти люди нам жарещают использвоат i-j! ;)

Та нет, я не просил менять стандарт, дело же субъективное и связанное с монитором, шрифтом, IDE , цветом переменных и так далее.

abs ★★★
() автор топика
Ответ на: комментарий от emulek

не мог по табам понять что во что вложено
Как это вообще к моей проблеме относится

Я все ещё не вижу связи. Пример кода.

что-то с отступом 1
--что-то с отступом 2 
----много
----много
----много
//ещё раз 10 //
----много
----много
--конец 2
конец 1
так вот, смотря на конец 2, я не мог понять где начало, 1 или 2. Но в android studio рисуются линии, и там этой проблемы нет.

abs ★★★
() автор топика

В своем говно^Wкоде использую i, ii. Перепутать невозможно.

templarrr ★★★★★
()
Ответ на: комментарий от abs

так вот, смотря на конец 2, я не мог понять где начало, 1 или 2. Но в android studio рисуются линии, и там этой проблемы нет.

а... ты про это... В vim пишешь :set foldcolumn= и получаешь твои любимые линии. В kDevelop и kate тоже такое вроде было. Сломали?

emulek
()
Ответ на: комментарий от ilammy

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

с этим согласен. Вообще, я за 20 лет вывел простое правило: если код тяжело читать, то это говно, а не код. И дело не в «плохом мониторе».

emulek
()

Ноги растут из Фортрана где индексными переменными могли быть переменные с именами i, j, k, l. Это всего лишь традиция теперь, так что можешь забить.

LongLiveUbuntu ★★★★★
()
Ответ на: комментарий от abs
что-то с отступом 1
--что-то с отступом 2 
----вызов функции
--конец 2
конец 1

функция
--много
--много
--много
//ещё раз 10 //
--много
--много
конец функции

It's magic!

ilammy ★★★
()
Ответ на: комментарий от NeverLoved

За однобуквенные переменные надо расстреливать. Называю их в зависимости от контекста.

+100. Настоящему мужчине всегда есть что сказать и он может понятно назвать переменную.

Pavval ★★★★★
()
Ответ на: комментарий от DeVliegendeHollander

Обычно m и n используются для указания размеров матриц в линейной алгебре, а i j - для номеров строки и столбца.

Автору: ШГ, смени их.

http://en.wikipedia.org/wiki/Index_notation

frozenix ★★★
()
Последнее исправление: frozenix (всего исправлений: 1)
Ответ на: комментарий от peregrine

Мсье запутался в языках?

Мсье не слышал про range-based for loop?

theNamelessOne ★★★★★
()
Ответ на: комментарий от peregrine

Это не читабельно.

Наоборот, причём такая запись должна быть интуитивно понятной любому, кто хоть раз видел квантор всеобщности.

theNamelessOne ★★★★★
()

Исподьзование таких имен для индексов допустимо только в совсем уж небольших прототипах. Для нормального кода есть нормальные имена переменных.

anonymous
()

Во первых, не так много случаев, когда нужно делать

array[j][i]
Мне с ходу вспоминаются лишь матричная алгебра и пару алгоритмов сортировки. Где в продакшене это может быть использовано, представляется мало.
Во вторых, относительно алгоритмов. Если понимаешь алгоритм — проблем с путаницей i и j не будет. Если же нет - ССЗБ.
В третьих, foreach тебе в помощь. В арифметике, он конечно, не поможет, но при простых обходах и других тривиальных действий он очень удобен.

comp00 ★★★★
()
Последнее исправление: comp00 (всего исправлений: 1)
Ответ на: комментарий от LongLiveUbuntu

Ноги растут из Фортрана где индексными переменными могли быть переменные с именами i, j, k, l

Не совсем так. В фортране тип переменной определялся именем. По умолчанию, переменные, начинающиеся на I J K L M N - целые. Сделано для удобства, т.к. в формулах эти буквы обычно обозначают либо номер элемента последовательности (ijk), либо размерность (mn).

И да, я не понимаю как можно перепутать i и j.

no-such-file ★★★★★
()
Ответ на: комментарий от theNamelessOne

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

peregrine ★★★★★
()
Ответ на: комментарий от peregrine

Не всё то, что хорошо в математике также удобно в программировании.

Но ведь это реально удобно.

И да, индексы несколько более гибкая конструкция, можно пропускать действия для некоторых индексов, притом делается это элементарно.

Вот когда тебе действительно понадобятся индексы, тогда их и надо использовать.

theNamelessOne ★★★★★
()
Ответ на: комментарий от theNamelessOne

Вот когда тебе действительно понадобятся индексы, тогда их и надо использовать.

Ну даже в моем примере нужно проверять i != j, более того, при нахождении ближайшей бактерии нужно куда-то сохранить её индекс.

abs ★★★
() автор топика
Ответ на: комментарий от peregrine

Как макрос, а не функцию. BOOST_FOREACH, Q_FOREACH. Я даже делал свой, чтобы не тянуть буст. Минут 10 на изобретение и тестирование.

но смысл

for(int i = 0; i < some_vector_name.size(); ++i) {
    auto & value = some_vector_name[i];

vs

for(auto & value : some_vector_name) {

Повышается читабельность и понижается вероятность ошибиться в ненужном и неиспользуемом индексе.

E ★★★
()
Ответ на: комментарий от theNamelessOne

Примерно в 90% всех циклов нужны индексы. Зачем для оставшихся 10% что-то сочинили ума не приложу. И так C++ перегружен функционалом чуть более, чем в 4 раза.

peregrine ★★★★★
()
Ответ на: комментарий от E

А ты сначала размер вектора посчитай перед циклом, в отдельной переменной, если в теле цикла ты его не меняешь. Зачем ты расчёты после for втыкаешь? Они же каждую итерацию будут выполняться (на оптимизацию лучше не надеяться).

peregrine ★★★★★
()
Ответ на: комментарий от peregrine

Я видел и чужие исходники, и свои программы, и у меня сложилось впечатление, что ты по меньшей мере лукавишь.

theNamelessOne ★★★★★
()
i ii iii
j jj jjj
k kk kkk

хоть 9 вложенных циклов

MyTrooName ★★★★★
()
Последнее исправление: MyTrooName (всего исправлений: 1)
Ответ на: комментарий от peregrine

Пометил тебя как тролля-дурачка, спасибо.

E ★★★
()

Специально для ТС предлагаю в качестве счетчика w (дубль-вэ маленькое) и T(тэ большое), чтобы больше не путать =)

Waterlaz ★★★★★
()
Ответ на: комментарий от Waterlaz

Специально для ТС предлагаю в качестве счетчика w (дубль-вэ маленькое) и T(тэ большое), чтобы больше не путать =)

Возьму на рассмотрение) А почему Т большое? Маленькое тоже достаточно отличается от w

abs ★★★
() автор топика
Ответ на: комментарий от abs

Возьму на рассмотрение) А почему Т большое? Маленькое тоже достаточно отличается от w

На всякий случай =) Чтобы уж совсем не перепутать)

Waterlaz ★★★★★
()
Ответ на: комментарий от frozenix

По поводу линейной алгебры спору нет, всё верно говоришь.

Но в своих программах я предпочитаю дефайнить нечто вроде MAX_ROWS и MAX_COLS, а m и n вполне и для счётчиков сойдут. Справедливости ради, мне почти не приходилось ими пользоваться, ибо циклы такой степени вложенности встречались крайне редко. Обычно хватает i, j, k.

Ещё претензии есть? :-)

DeVliegendeHollander ★★
()
Ответ на: комментарий от peregrine

<оскаленный наезд, основанный на повторяющейся аргументации к интелекту>

Ну и как там на втором курсе?

Делай вообще GNU стиль отступов

Не стоит так перенапрягаться, заучишься да совсем с катушек стронешься. Езжай куда-нибудь летом, да отдохни от души.

t184256 ★★★★★
()

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

попробуй посмотреть примеры не в методичке преподавателя

Debasher ★★★★★
()
Ответ на: комментарий от abs

Не надо обвинять буквы. Глаз замыливается в любом случае. Как человек написавший на Maxima обсчет тензора кривизны в семимерном пространстве, скажу, что даже если они будут называться A и ЗЮ перепутать всё равно легко и заметишь не сразу.

Тесты и дебаг - наше всё.

alpha ★★★★★
()

Когда учился в школе всегда называл свои переменные q, w, e, qwe, asd, zxc и тому подобным. Поэтому у преподавателей никогда не возникало вопросов об авторстве кода. Как только стал повзрослее и начал писать хоть сколько-то серьезные программы переключился на нормальные i и j.

morse ★★★★★
()

Переменные x, y, u уже предлагали?

iVS ★★★★★
()
Последнее исправление: iVS (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.