Модераторы: LSD

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Индексация массивов 
:(
    Опции темы
mimik
Дата 7.11.2010, 17:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


не Rohoss Я
*


Профиль
Группа: Участник
Сообщений: 69
Регистрация: 1.11.2010

Репутация: нет
Всего: 2



Не могу понять почему в ЯП так популярна индексация массивов с нуля, ведь это как-то не логично, да и преимуществ вроде нет.

 smile 
PM   Вверх
FadilMamedov
Дата 7.11.2010, 18:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 5.11.2010

Репутация: нет
Всего: нет



Видимо сказывается традиция...
PM MAIL   Вверх
bilbobagginz
Дата 7.11.2010, 18:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Naughtius Maximus
****


Профиль
Группа: Экс. модератор
Сообщений: 8813
Регистрация: 2.3.2004
Где: Israel

Репутация: 6
Всего: 317



mimik, ваше предложение не содержит вопрос.
и не понятно пример чего вы хотите: яп индексуюзего с 0 или с 1 или вообще объяснения почему это так.
можете пояснить ?
 


--------------------
Я ещё не демон. Я только учусь.
PM WWW   Вверх
mimik
Дата 7.11.2010, 18:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


не Rohoss Я
*


Профиль
Группа: Участник
Сообщений: 69
Регистрация: 1.11.2010

Репутация: нет
Всего: 2



Цитата(bilbobagginz @  7.11.2010,  18:51 Найти цитируемый пост)
mimik, ваше предложение не содержит вопрос.и не понятно пример чего вы хотите: яп индексуюзего с 0 или с 1 или вообще объяснения почему это так.можете пояснить ?

по моему логичней начинать индексацию массивов с 1, 
первый элемент - индекс 1

Добавлено через 4 минуты и 29 секунд
Цитата(bilbobagginz @  7.11.2010,  18:51 Найти цитируемый пост)
вообще объяснения почему это так

 smile 
PM   Вверх
A5uKa
  Дата 8.11.2010, 15:02 (ссылка)    | (голосов:4) Загрузка ... Загрузка ... Быстрая цитата Цитата


TЋ♥s F1rȜ iƧ BurȠiƞg
***


Профиль
Группа: Awaiting Authorisation
Сообщений: 1928
Регистрация: 30.8.2008

Репутация: 1
Всего: 16



ну положительные числа с нуля начинаются.
PM   Вверх
baldina
Дата 8.11.2010, 15:09 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: нет
Всего: 101



а это вот почему:
предположим, по адресу памяти A расположен массив.
тогда адрес первой ячейки это А, адрес второй - A+1, адрес i-й - A+i
представляя в форме доступа к элементу массива по индексу получаем
A[0], A[1]...A[i]

PM MAIL   Вверх
bars80080
Дата 8.11.2010, 15:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 3
Всего: 315



Цитата(A5uKa @  8.11.2010,  14:02 Найти цитируемый пост)
ну положительные числа с нуля начинаются. 

ноль не является ни положительным, ни отрицательным числом


Цитата(mimik @  7.11.2010,  17:56 Найти цитируемый пост)
по моему логичней начинать индексацию массивов с 1, 
первый элемент - индекс 1

это по-человечески логично, однако, говоря о ЯП надо принимать машинную логику. что такое массив? по сути, это регистр, где каждый физический элемент памяти содержит элемент массива. а элементы эти выстроены по порядку. наглядно по наиболее простым ЯП виден этот момент, так как среди функций работы с массивами могут отсутствовать многие, но функции pop() и push() будут всегда. эти функции дословно означают - положить элемент в массив или забрать. при этом массив растёт, либо уменьшается. чистое поведение регистров.

а в какой позиции регистра надо быть, чтобы получить первый элемент массива? конечно, в позиции ноль, ведь мы в него ещё не вошли. чтобы добраться до второго элемента - надо передвинуть считывающую головку на одну [1] позицию вглубь.

всё очень даже логично. сделать конвертор из системы 1,2,3... в систему 0,1,2... конечно не сложно, но когда мы говорим о машинной логике, то эффективность выходит на первое место.
PM MAIL WWW   Вверх
mimik
Дата 8.11.2010, 18:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


не Rohoss Я
*


Профиль
Группа: Участник
Сообщений: 69
Регистрация: 1.11.2010

Репутация: нет
Всего: 2



и всё-таки аргументы в пользу индексации массивов с 0, имхо, я не услышал

Цитата(bars80080 @  8.11.2010,  15:17 Найти цитируемый пост)
это по-человечески логично

 smile 

Цитата(bars80080 @  8.11.2010,  15:17 Найти цитируемый пост)
сделать конвертор из системы 1,2,3... в систему 0,1,2... конечно не сложно, но когда мы говорим о машинной логике, то эффективность выходит на первое место.

нет, это задача компилятора, я пишу array[2], а компилятор сам сделает array[1]


Это сообщение отредактировал(а) mimik - 8.11.2010, 18:54
PM   Вверх
bilbobagginz
  Дата 8.11.2010, 19:24 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Naughtius Maximus
****


Профиль
Группа: Экс. модератор
Сообщений: 8813
Регистрация: 2.3.2004
Где: Israel

Репутация: 6
Всего: 317



mimik
термин массив существует не только для языков высокаго уровня как Lisp/Java и т.д., но и для языков такого низкаго уровня как ассембли.
для того, чтобы не пояснять людям, изучающим информатику, что у одного языка индексация с 1 а у другого - 0, довольно умное решение вопроса - определить что такое массив концептуально, т.е. эстетическая причина.

Кроме того, в языках, работающих с памятью (без автоматических освободитлей мусора и т.д.), частенько удобно "шагать" через адреса посредством так называемой "арифметики указателей". Если бы первый элемент массива "A" был обозначен как "A+1" это намного некрасивее. (т.е. причина комфортабельности) 
С другой стороны можно было бы создать синтаксис, что если ты уже используешь арифметику указателей, т.е. разделитсь семантику A[i] от *(A+i), то нередко пришлось бы делать и без того уродливый синтаксис еще менее читабельным.
т.е. для единства подходов напр. в языке Си имеет смысл сделать и ту и другую нотации похожими (опять же, эстетика) 

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




--------------------
Я ещё не демон. Я только учусь.
PM WWW   Вверх
mimik
Дата 8.11.2010, 20:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


не Rohoss Я
*


Профиль
Группа: Участник
Сообщений: 69
Регистрация: 1.11.2010

Репутация: нет
Всего: 2



Цитата(bilbobagginz @  8.11.2010,  19:24 Найти цитируемый пост)
для того, чтобы не пояснять людям, изучающим информатику, что у одного языка индексация с 1 а у другого - 0

а сейчас разве не так?
открываю почти любую книгу и читаю что-то типо такого: помните что индексация массивов начинается с нуля

Цитата(bilbobagginz @  8.11.2010,  19:24 Найти цитируемый пост)
Третья причина образовательная: инженер разработчик не "просто человек", а должен помнить об адресации памяти компьютера

имхо, никак не связано


имхо, массивы это одно, а работа с памятью другое, хотя в некоторых языках это эквивалентно, что не есть гуд
PM   Вверх
baldina
Дата 8.11.2010, 20:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: нет
Всего: 101



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

Вы просто не привыкли. Операции вроде += в С/С++ тоже поначалу вызывают недоумение, неудобство, излишнее напряжение мысли. А когда втягиваешься, напрягать начинает a = a + b
Привыкнете, человек ко всему привыкает ;-)
PM MAIL   Вверх
mimik
Дата 8.11.2010, 20:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


не Rohoss Я
*


Профиль
Группа: Участник
Сообщений: 69
Регистрация: 1.11.2010

Репутация: нет
Всего: 2



Цитата(baldina @  8.11.2010,  20:26 Найти цитируемый пост)
mimik, Вам уже описали и преимущества, и логику

почему это так работает я понял, а преимущества я не увидел

Цитата(baldina @  8.11.2010,  20:26 Найти цитируемый пост)
не надо делать лишних усилий компилятору

(index - 1) вроде ничего сложного

я уже привык к этому синтаксису, но хочется писать для людей, а не для компилятора  smile 


Это сообщение отредактировал(а) mimik - 8.11.2010, 20:38
PM   Вверх
bilbobagginz
Дата 8.11.2010, 21:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Naughtius Maximus
****


Профиль
Группа: Экс. модератор
Сообщений: 8813
Регистрация: 2.3.2004
Где: Israel

Репутация: 6
Всего: 317



Цитата(mimik @  8.11.2010,  19:11 Найти цитируемый пост)
имхо, массивы это одно, а работа с памятью другое, хотя в некоторых языках это эквивалентно, что не есть гуд 

если вам это настолько мешает, и считаете что это имеет смысл, напишите свой ЯП, свой компилятор и отладчик.
А потом посмотрите как хорошо он "пойдет", если пойдет - флаг в руки, респект, и т.д.

Удачи.




--------------------
Я ещё не демон. Я только учусь.
PM WWW   Вверх
Фантом
Дата 8.11.2010, 23:05 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вы это прекратите!
***


Профиль
Группа: Участник Клуба
Сообщений: 1516
Регистрация: 23.3.2008

Репутация: нет
Всего: 49



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

Фиксированное начало индексации есть в тех языках, где есть не столько массивы, сколько области памяти с указателями на них. Там - именно из-за адресной арифметики - действительно проще начинать с нуля.
PM   Вверх
skyboy
Дата 9.11.2010, 00:46 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 1
Всего: 260



Цитата(Фантом @  8.11.2010,  22:05 Найти цитируемый пост)
индекс нередко вообще может быть и не целым числом

мы по-прежнему говорим о массивах? Или о мапах/хешах/гридах с синтаксисом таким же, как и у массивов?
Цитата(mimik @  8.11.2010,  19:35 Найти цитируемый пост)
а преимущества я не увидел

преимуществ чего? одной записи над другой?
я вот не вижу преимуществ использования знака "+" для операции сложения. 
нашел, в чем искать просто оптимизации.
я понимаю ещё - протестовать против неопределенностей вроде "++n++". 
забудь, прими как данность.
в Pascal/Delphi - вон с единицы нумерация. 
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила ведения Религиозных войн
Smartov
1. Уважайте собеседника
2. Собеседник != враг
3. Старайтесь воздерживаться от тем вида "Windows Rulez" или "Linux Rulez"

С уважением, Smartov.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Религиозные войны | Следующая тема »


 




[ Время генерации скрипта: 0.1623 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.