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

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

Вернуться   Форум программистов > IT форум > Общие вопросы по программированию, компьютерный форум
Регистрация

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

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

Результаты опроса: От чего нумеровать данные?
Использовать 0 17 68.00%
использовать 1 5 20.00%
Без разницы 3 12.00%
Голосовавшие: 25. Вы ещё не голосовали в этом опросе

Ответ
 
Опции темы Поиск в этой теме
Старый 29.04.2015, 12:44   #21
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
на самом массовом VBA или VB6 можно указать, с какого элемента считать массив.
На паскале тоже можно регулировать размерность массива. Исключая такой тип как строка, который вообще особняком держится.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 29.04.2015, 12:46   #22
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Цитата:
Сообщение от pu4koff Посмотреть сообщение
Шо не так?
С нулём, на один элемент больше не получается. Если следовать по его логике, то начиная счёт с тройки, получится на три элемента больше .
Собственно, с какой цифры ни начинай счёт, конечное число элементов массива не изменится.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Старый 29.04.2015, 12:58   #23
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

Цитата:
Сообщение от Smitt&Wesson Посмотреть сообщение
С нулём, на один элемент больше не получается. Если следовать по его логике, то начиная счёт с тройки, получится на три элемента больше .
Собственно, с какой цифры ни начинай счёт, конечное число элементов массива не изменится.
Изменится, ибо для адресации пользуется обычно int, который как ни крути, а 32/64 бита. Начинаем с нуля, значит сможем адресовать 0,1,2,3,..,max_int. Начинаем с единицы: 1,2,3,...,max_int. Имеем минус один элемент, т.к. к отсеченным отрицательным элементам добавляется и незадействованный теперь нолик.
Это по расходу памяти разницы нет и технически разницы нет, а появляется скорее эдакое ограничение языка.
pu4koff вне форума Ответить с цитированием
Старый 29.04.2015, 19:04   #24
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,551
По умолчанию

Технически есть разница. Если рассмотреть статический целочисленный (32 бита) массив, где i - индекс, а p - указатель на начало массива, то для вычисления адреса i-го элемента надо проделать следующее:
1. Для нумерации с нуля: pi = p + i * 4 или поразрядный сдвиг влево на 2 разряда.
2. Для нумерации с единицы: pi = p + (i - 1) * 4, то есть добавляется операция вычитания. Для обхода такого недостатка вводят неявный нулевой элемент, который как бы есть, но не используется. Или он задействуется под технические нужны, типа как в паскалевский строках, где символы нумеруются от 1, но существует нулевой элемент строки, в котором сохраняют длину строки.
Arigato вне форума Ответить с цитированием
Старый 29.04.2015, 19:13   #25
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Цитата:
Или он задействуется под технические нужны, типа как в паскалевский строках, где символы нумеруются от 1, но существует нулевой элемент строки, в котором сохраняют длину строки.
Ну и чудно. Аналогично можно хранить информацию о длине массива (количество элементов) для быстрого определения или там RTTI какое.
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 29.04.2015, 19:33   #26
Вадим Мошев

Старожил
 
Аватар для Вадим Мошев
 
Регистрация: 12.11.2010
Сообщений: 8,568
По умолчанию

Цитата:
Сообщение от Utkin Посмотреть сообщение
Не знаю как сейчас, а раньше в бейсиках был оператор Option Base указывающий от чего считать нижнюю границу . Так что бейсик в этом плане самый демократичный и толерантный.
По аналогии с этим в MathCAD есть возможность самостоятельно выбрать, с чего нумеровать элементы массива. Для этого зарезервированной переменной ORIGIN присваивается соответствующее значение.
Вадим Мошев вне форума Ответить с цитированием
Старый 29.04.2015, 19:35   #27
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Цитата:
Utkin, чУдно или чуднО? Твоя фрза имеет два смысла . Уточни.
Читай - Ну и замечательно .
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 29.04.2015, 20:01   #28
MihalNik
МегаМодератор
СуперМодератор
 
Регистрация: 27.11.2012
Сообщений: 5,657
По умолчанию

Цитата:
Сообщение от Arigato Посмотреть сообщение
Технически есть разница. Если рассмотреть статический целочисленный (32 бита) массив, где i - индекс, а p - указатель на начало массива, то для вычисления адреса i-го элемента надо проделать следующее:
1. Для нумерации с нуля: pi = p + i * 4 или поразрядный сдвиг влево на 2 разряда.
2. Для нумерации с единицы: pi = p + (i - 1) * 4, то есть добавляется операция вычитания. Для обхода такого недостатка вводят неявный нулевой элемент, который как бы есть, но не используется. Или он задействуется под технические нужны, типа как в паскалевский строках, где символы нумеруются от 1, но существует нулевой элемент строки, в котором сохраняют длину строки.
Необязательно. Можно выкрутиться, храня вместо адреса массива уже его смещенное значение, реализовав все операции соответствующим образом (т.е. дополнительное смещение будет, например, при взятии адреса, а не доступе к элементу).
Благими намерениями устлана дорога на programmersforum.ru

Последний раз редактировалось MihalNik; 29.04.2015 в 20:09.
MihalNik вне форума Ответить с цитированием
Старый 29.04.2015, 21:56   #29
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

Цитата:
Сообщение от MihalNik Посмотреть сообщение
Необязательно. Можно выкрутиться, храня вместо адреса массива уже его смещенное значение, реализовав все операции соответствующим образом (т.е. дополнительное смещение будет, например, при взятии адреса, а не доступе к элементу).
Из-за одного элемента получите в итоге столько головняка, что лучше его потерять, чем всем этим заниматься при разработке компилятора/транслятора.

Последний раз редактировалось pu4koff; 30.04.2015 в 05:29.
pu4koff вне форума Ответить с цитированием
Старый 29.04.2015, 22:05   #30
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,551
По умолчанию

Цитата:
Сообщение от Utkin Посмотреть сообщение
Ну и чудно. Аналогично можно хранить информацию о длине массива (количество элементов) для быстрого определения или там RTTI какое.
В статическом массиве длину хранить не обязательно, если только он не имеет структуру типа паскалевских строк, что длина реальная может быть меньше фактически выделенной под него памяти.

Цитата:
Сообщение от MihalNik Посмотреть сообщение
Необязательно. Можно выкрутиться, храня вместо адреса массива уже его смещенное значение, реализовав все операции соответствующим образом (т.е. дополнительное смещение будет, например, при взятии адреса, а не доступе к элементу).
Ну как альтернативный вариант извращений сойдет и так
Только и правда можно получить неожиданные ошибки, если, скажем, будем передавать массив по ссылке или еще чего с указателями замутим.
Arigato вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
вести/вывести запись или массив pascal1992 Общие вопросы Delphi 2 07.04.2013 18:54
вести 5 целых чисел viknik Помощь студентам 1 14.12.2011 20:37
Вести в edit1 из *.txt foxes Общие вопросы Delphi 6 15.10.2010 19:31
Вести учет форматирования... Busine2009 Microsoft Office Word 1 28.06.2009 18:05