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

Поиск:

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


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

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



Цитата(Фантом @ 12.1.2011,  23:18)
Цитата(mes @  12.1.2011,  22:55 Найти цитируемый пост)

ну как тут спорить, если сам Никлаус Вирт, в своем стремлении довести Оберон до идеала, проголосовал за нуль в качестве нижней границы диапазона индексов массива.. 

И тем не менее во многих случаях это чрезвычайно неудобно. Хотя язык и его компиляцию, конечно, упрощает.

интересно, в каких случаях?

мощно выглядят массивы вместе с хэшами и наоборот, например, массивы-хэшей (список пар хэшей)
где массив - это просто набор значений, а хэши как индексы...

для работы над элементами массивов, есть разные операторы: cross-, hyper-, reduce-, meta-operators
(где индексация не важна...)

Это сообщение отредактировал(а) gcc - 13.1.2011, 06:00
PM WWW ICQ Skype GTalk Jabber   Вверх
mimik
Дата 13.1.2011, 12:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


не Rohoss Я
*


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

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



Цитата(bems @  12.1.2011,  22:07 Найти цитируемый пост)
Ничего не мешает указыввать при этом и стартовый индекс.

это не очень удобно, ведь массив мы можем получить и из функций, или надо перед использованием надо смотреть на объявление
Цитата(mes @  12.1.2011,  22:55 Найти цитируемый пост)
ну как тут спорить, если сам Никлаус Вирт, поклонник и прародитель всего человеку-удобного,  в своем стремлении довести Оберон до идеала, проголосовал за нуль в качестве нижней границы диапазона индексов массива.. 

к его мнению я прислушиваюсь, но не более
Цитата(bems @  12.1.2011,  22:07 Найти цитируемый пост)
mimik, ты всегда указываешь размерность

Код

a = [2, 4, 6, 1, 7, 9]


Это сообщение отредактировал(а) mimik - 13.1.2011, 12:52
PM   Вверх
Фантом
Дата 13.1.2011, 14:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(gcc @  13.1.2011,  05:44 Найти цитируемый пост)
интересно, в каких случаях?

Ну, лично для меня это вычислительные задачи, в которых индексация может быть достаточно причудливой, а ее смещение - громадной работой, чреватой ошибками.
PM   Вверх
baldina
Дата 13.1.2011, 16:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



если
a[b] === *(a+b) === *(b+a) === b[a],
то алгебраически мы должны иметь моноид. для данной структуры операцией является операция сложения указателя с числом, а единицей - 0
поэтому индексация должна вестись с 0.

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

как говорит А.Степанов, "depends on the definition"  smile 

PM MAIL   Вверх
Romper
Дата 21.1.2015, 13:53 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Индексация с нуля — техническая оптимизация С, который складывал указатели, но она распространилась везде.

Если подумать, это совсем не естественно. Нужно постоянно держать в памяти этот −1. Почему, чтобы взять пятый элемент, я пишу arr[4]? Разве это удобно? Почему, если в списке 10 элементов, то взять десятый (arr[10]) — ошибка? Если беспокоитесь о производительности, храните указатель на начало массива−1.
PM MAIL   Вверх
Ilya81
Дата 21.1.2015, 16:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 105
Регистрация: 18.4.2014
Где: ЛО, Всеволожский р-н

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



Не исключаю, что неестественны нумерация с нуля, указания сначала адреса назначения, потом источника (функция CopyMemory), 1024 байта в килобайте и многое другое. Но неужели удаётся так прямо и думать об этом годами? Мне как-то всё это как-то стало привычным, и "неестественность" давным давно не замечаю.
PM MAIL ICQ Skype   Вверх
bems
Дата 22.1.2015, 00:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

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



Цитата(Ilya81 @  21.1.2015,  16:27 Найти цитируемый пост)
указания сначала адреса назначения, потом источника (функция CopyMemory)

тот же порядок что в операторе присваивания



--------------------
Обижено школьников: 8
PM MAIL   Вверх
Ilya81
Дата 22.1.2015, 09:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 105
Регистрация: 18.4.2014
Где: ЛО, Всеволожский р-н

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



Скорее это аналогия с
Код

MOV EBX, EAX

который повторяет структуру команды процессоров Intel. Но слышал, что в своё время были процессоры с противоположным порядком операндов. Да и в обычной речи мы скорее скажем из пункта A в пункт B, чем в пункт B из пункта A. Но подобные особенности современных процессоров для меня слишком привычны, чтоб замечать, что где-то присутствует такая неестественность.
PM MAIL ICQ Skype   Вверх
_zorn_
Дата 22.1.2015, 17:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата(Ilya81 @  22.1.2015,  16:26 Найти цитируемый пост)
который повторяет структуру команды процессоров Intel. Но слышал, что в своё время были процессоры с противоположным порядком операндов.

Ну ёпта. Вы действительно думаете, что ПРОЦЕССОР видит команды в таком виде ? А АМД процессоры в каком виде команды видят ?  smile 
Открою для тебя страшную тайну. Процессоры видят команды в виде битов, а ассемблерные мнемоники как раз для людей.
И кстати есть еще AT&T-синтаксис и процессор тут совсем не причем.
А слышали вы скорей всего о порядке байтов. И это не "в свое время", а есть и сейчас (little/big endian). 
Процессоров много и они не только в вашем системном блоке...

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

Это сообщение отредактировал(а) _zorn_ - 22.1.2015, 17:17
PM MAIL   Вверх
Ilya81
Дата 23.1.2015, 09:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 105
Регистрация: 18.4.2014
Где: ЛО, Всеволожский р-н

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



Цитата(_zorn_ @  22.1.2015,  17:08 Найти цитируемый пост)
Ну ёпта. Вы действительно думаете, что ПРОЦЕССОР видит команды в таком виде ? А АМД процессоры в каком виде команды видят ?

Ну если я ничего не путаю, то команды процессоров - префиксный битовый код, в котором после кода команды следуют операнды во вполне определённой последовательности. И в процессорах Intel, насколько знаю, в команде копирования данных идёт сначала код/адрес (в зависимости от того, это регистр процессора, RAM или ещё там что) адресата, потом код/адрес источника. Более того, насколько я знаю, в виду того, что коды команд тоже придумываются людьми, то разница между кодами команд и операндами условна, т. е. предопределённые команды для соседних регистров имеют похожий битовый код.

И ещё, насколько я знаю, хоть нынче структура самих логических элементов внутри кристалла не имеет полного дискретного аналога, всё ж сами триггеры расположены в определённой последовательности (как и конденсаторы RAM и прочее), поэтому можно вполне чётко сказать о порядке расположения битового кода внутри процессора.
Цитата(_zorn_ @  22.1.2015,  17:08 Найти цитируемый пост)
И это не "в свое время", а есть и сейчас (little/big endian). 
Процессоров много и они не только в вашем системном блоке...

Это вполне вероятно, я просто подразумевал доминирующие нынче процессоры. А Intel, насколько знаю, нынче не слабо потеснил конкурентов, притом и в desktop/серверах, и в мобильных устройствах, и много ещё где.

Цитата(_zorn_ @  22.1.2015,  17:08 Найти цитируемый пост)
А по части нумерации - при чем тут какие то оптимизации ? В си массив - это просто указатель на область памяти, индекс смещение. Хотите создавайте массивы с размером на 1 элемент больше и индексируйте с 1, кто вам запрещает ?
Все таки си это язык с самыми большими возможностями выстрелить себе в ногу 

Но в C# и Java вольностей поменьше будет. Про Objective-C/Swift сказать затрудняюсь.

Это сообщение отредактировал(а) Ilya81 - 23.1.2015, 10:04
PM MAIL ICQ Skype   Вверх
Romper
Дата 23.1.2015, 11:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(_zorn_ @  22.1.2015,  17:08 Найти цитируемый пост)
В си массив - это просто указатель на область памяти

а что, кроме Си ЯП больше нет?

Цитата(_zorn_ @  22.1.2015,  17:08 Найти цитируемый пост)
Хотите создавайте массивы с размером на 1 элемент больше и индексируйте с 1

Цитата(Romper @  21.1.2015,  13:53 Найти цитируемый пост)
Если беспокоитесь о производительности, храните указатель на начало массива−1. 


PM MAIL   Вверх
_zorn_
Дата 25.1.2015, 05:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата(Ilya81 @  23.1.2015,  16:59 Найти цитируемый пост)
 А Intel, насколько знаю, нынче не слабо потеснил конкурентов, притом и в desktop/серверах, и в мобильных устройствах, и много ещё где.

Про RISC процессоры я думаю нету смысла вам говорить. Но AMD же ? У них что все по другому ? При чем тут интел ? Вы про архитектуру х86 сейчас говорите, а не про процессоры интел. Кстати 64 битную архитектуру первыми замутили АМД, и набор инструкций сейчас называются AMD64  smile

Еще раз - типов процессоров намного больше чем в вашем системном блоке...

Цитата(Ilya81 @  23.1.2015,  16:59 Найти цитируемый пост)
И ещё, насколько я знаю, хоть нынче структура самих логических элементов внутри кристалла не имеет полного дискретного аналога, всё ж сами триггеры расположены в определённой последовательности (как и конденсаторы RAM и прочее), поэтому можно вполне чётко сказать о порядке расположения битового кода внутри процессора.

Вы о чем сейчас вообще ? О том что у программистов конденсаторы в мозгу расположены так же как в процессоре ?  smile 

Цитата(Romper @  23.1.2015,  18:51 Найти цитируемый пост)
а что, кроме Си ЯП больше нет?

Есть, но большинство поглядывает на си хотя бы по синтаксису )
Ну и он самый кросплатформенный  smile 


Цитата(Romper @  23.1.2015,  18:51 Найти цитируемый пост)
Цитата(_zorn_ @  22.1.2015,  17:08 Найти цитируемый пост)
Хотите создавайте массивы с размером на 1 элемент больше и индексируйте с 1
Цитата(Romper @  21.1.2015,  13:53 Найти цитируемый пост)
Если беспокоитесь о производительности, храните указатель на начало массива−1. 

Мой вариант предпочтительней. В вашем еще лишние телодвижения придется делать типа
Код

TYPE var[10];
var -= sizeof(TYPE);

Да и чревато последствиями если ваш код будет потом кто то дописывать. Ваши привычки он не знает, и будет мусорить перед массивами )
А если вы еще макросов налепите, или стандартные переопределите, то вообще ужас...

Это сообщение отредактировал(а) _zorn_ - 25.1.2015, 06:21
PM MAIL   Вверх
bems
Дата 25.1.2015, 15:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

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



Цитата(_zorn_ @  25.1.2015,  05:52 Найти цитируемый пост)
Ну и он самый кросплатформенный

чо правда?


--------------------
Обижено школьников: 8
PM MAIL   Вверх
ТоляМБА
Дата 25.1.2015, 16:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Котэ
***


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

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



Цитата(_zorn_ @  25.1.2015,  07:52 Найти цитируемый пост)
 стандартные переопределите, то вообще ужас

Цитата
<******> к вопросу о вчерашних скриптостраданиях. Только что кодер знакомый прислал, нашёл в коде программы, написанной уволенным коллегой незадолго до ухода:
<******> #define TRUE FALSE //счастливой отладки суки
* ****** такого извращённого юмора ещё не встречал
 http://bash.im/quote/268036

PM   Вверх
_zorn_
Дата 26.1.2015, 04:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата(bems @  25.1.2015,  22:22 Найти цитируемый пост)
чо правда? 

А чо нет ? Линупс например в какие устройства только не пихают...
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила ведения Религиозных войн
Smartov
1. Уважайте собеседника
2. Собеседник != враг
3. Старайтесь воздерживаться от тем вида "Windows Rulez" или "Linux Rulez"

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

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


 




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


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

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