![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
динамический массив начинается 1 элемента
Тимофей Ю. © (2011-06-22 19:35:00)всем привет, использую динамические массивы и очень не удобно что у массива созданного динамически, первый элемент начинается с 0,
можно ли создать динамический массив чтобы первый элемент начинался с 1 ?
чтото типо mass:array[1..10] of integer; ?? только для динамического
sniknik (2011-06-23 17:18:00) [21]> В VB строки с 0 начинаются.
ну, на самом VB не пишу, но Jet поддерживает функции VB, т.что сужу по нему...
-
SELECT *, Mid(Name, 1, 1)AS Ch FROM [Action]
дает столбец с 1 буквой имени (строка, VarChar(50))
а SELECT *, Mid(Name, 0, 1) AS Ch FROM [Action]
дает
EOleException : Поставщик данных или другая служба вернули состояние E_FAIL
после проверяю блоб
SELECT *,Mid(RResp, 1, 1) FROM Resp WHERE ID = 2
< (там xml)
SELECT *,Mid(RResp, 0, 1) FROM Resp WHERE ID = 2
... ну, вы поняли
делаю вывод, что все таки с 1-цы. (и вряд ли меня кто переубедит просто сказав "нет с 0-я!")
Игорь Шевченко (2011-06-23 16:51:00) [22]
> Это общепринятая практика. Индексация всех массивов, списков
> и т.п. начинается с нуля и идёт до "количество элементов
> минус один".
еще один сказочник.
Фортран учить до полного и окончательного просветления!
SQLEXPRESS (2011-06-23 16:38:00) [23]а с 0 все это просто объясняется и логично, если думать так:
A: array of type;
первый элемент лежит по адресу А + 0 байт сместиться надо. A[0]
второй A + размер элемента, т.е. А + 1. A[1]
меня ms excel и word убивает - у них с 1 почти все.
иногда, написав процедурку, вдруг на секунду порываешься "исправить" ошибку..
Ega23 (2011-06-23 16:27:00) [24]
> и очень не удобно что у массива созданного динамически,
> первый элемент начинается с 0
Это общепринятая практика. Индексация всех массивов, списков и т.п. начинается с нуля и идёт до "количество элементов минус один".
Единственное исключение, которое очень сильно напрягло и реально вывихнуло мне мозг - это то, что в TTreeView.StateImages нумерация реально начиналась с единицы. Точнее, в TTreeNode.StateIndex надо было писать что-то, большее нуля. Тогда картинка отображалась. А в StateImages приходилось добавлять первым пустую картинку.
sniknik (2011-06-23 15:36:00) [25]> Вот такие методы и порождают тупые ошибки.
http://www.delphimaster.ru/cgi-bin/forum.pl?id=1307429189&n=0
sniknik (2011-06-23 15:35:00) [26]> А где освобождение памяти, выделенной под массив ?
end.
Leon-Z (2011-06-23 15:25:00) [27]
> sniknik © (22.06.11 22:58) [15]
А где освобождение памяти, выделенной под массив ?
Вот такие методы и порождают тупые ошибки.
Плохиш (2011-06-23 11:24:00) [28]
> sniknik © (22.06.11 21:55) [12]
> > Нумерация массива с нуля является общепринятым и наиболее
> удобным способом нумерации.
> а строки? а если нужно "совмещать"? пусть лучше с неправильной
> нумерацией и лишним элементом но я при нужде, пройдусь по
> ним за 1 цикл, и без всяких вычислений индексов, усложнении
> кода.
>
> но в общем да, счет у программистов начинается с 0 (команда
> на первый второй расчитайсь ставит в тупик...). если не
> считать 1С-ников, и Base-ников(?) как те кто на VB пишут
> называются?
В VB строки с 0 начинаются.
Palladin (2011-06-23 10:28:00) [29]то что string начинается с 1 - не вызывает никаких дискомфортов, у тех кто достаточно долго работает с паскалем
Омлет (2011-06-23 09:38:00) [30]Вот stringначинается с 1 - это вызывает дискомфорт.
Тут, видимо, обратная проблема )
Anatoly Podgoretsky (2011-06-23 09:20:00) [31]> Полвторого (23.06.2011 02:22:20) [20]
Не надо нам вражеских методов, привнесеных с СИ [1..1].
Этим много вреда нанесли.
Вирт создавал язык как учебный, а не как средство издевательства.
Очень злой (2011-06-23 09:20:00) [32]
> Тимофей Ю. (22.06.11 19:35)
>
> всем привет, использую динамические массивы и очень не удобно
> что у массива созданного динамически, первый элемент начинается
> с 0,
> можно ли создать динамический массив чтобы первый элемент
> начинался с 1 ?
> чтото типо mass:array[1..10] of integer; ?? только для динамического
Ну так используй его, как будто первый элемент начинается с индекса 1.
Потерями памяти на неиспользуемый элемент с индексом 0 думаю можно пренебречь...
Anatoly Podgoretsky (2011-06-23 09:17:00) [33]> Rouse_ (23.06.2011 00:33:17) [17]
Классики обяснили на примере, сам Вирт
Array [1900..2000] of Integer
и
Array [0..100] of Integer
Это постоянное приведение 0 к 1900 и обратно
Германн (2011-06-23 02:38:00) [34]
> А, кстати, чем не устраивает вот такой подход:
Современную "молодеж" не устраивают методы прошлого века. :)
Они их просто не знают. Они вообще почти ничего не знают о способах работы с динамически выделяемой памятью.
Полвторого (2011-06-23 02:22:00) [35]А, кстати, чем не устраивает вот такой подход:
program dynarr;
{$R-}
type
arr = array [1..1] of longint;
var
N, I: integer;
A: ^arr;
begin
read(N);
getmem(A, N*sizeof(longint));
for I := 1 to N do A^[I] := 1; // что-то делаем с массивом
freemem(A);
end.
Правда, сложновато будет инициализировать и освобождать многомерные массивы, но о них речь вроде как и не шла.
KilkennyCat (2011-06-23 01:21:00) [36]не работали вы с массивами в ActionScript... вот там охреневаешь после делфи.
Юрий Зотов (2011-06-23 00:48:00) [37]
> Тимофей Ю. (22.06.11 19:35)
> очень не удобно что у массива созданного динамически,
> первый элемент начинается с 0
Просто непривычно. А на самом деле очень удобно, надо только привыкнуть.
Rouse_ (2011-06-23 00:33:00) [38]
> очень не удобно что у массива созданного динамически, первый
> элемент начинается с 0
Чем именно не удобно?
Anatoly Podgoretsky (2011-06-22 23:17:00) [39]> Игорь Шевченко (22.06.2011 22:03:13) [13]
В дауне
sniknik (2011-06-22 22:58:00) [40]> Но мое решение более элегантное
ну, что сказать... разные у нас понятия об элегантности... ты кстати с громоздкостью не путаешь?
program DynMass;
{$APPTYPE CONSOLE}
uses
SysUtils;
const
MAX_LEN = 10;
var
Mass: array of integer;
i: integer;
begin
SetLength(Mass, MAX_LEN + 1);
for i:= 1 to MAX_LEN do
Mass[i]:= i;
for i:= 1 to MAX_LEN do
WriteLn(Mass[i]);
ReadLn;
end.