Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

динамический массив начинается 1 элемента


Страницы:   1 2 3

Тимофей Ю. ©   (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.


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо