Вернуться   CoderX :: Forums > Основные форумы > Программинг
Войти через OpenID

Программинг Форум для тем связанных с программированием

Чат (Новых сообщений с момента вашего последнего визита нет)
Загрузка...
Задавайте ваши вопросы на форуме. Чат предназначен для небольших разговоров.
 
Ответ
 
Опции темы Опции просмотра
Старый 26.07.2012, 12:11   #1
Местный
 
Аватар для mikser
 
Регистрация: 26.01.2009
Сообщений: 1,097
Сказал Спасибо: 178
Имеет 119 спасибок в 84 сообщенях
mikser пока неопределено
По умолчанию Длина Открытого Массива в Pax'e

Как узнать сабж?
Почемуто у меня длинна всегда равна единице и не зависит от фактической длинны в конструкторе.
А у вас как ? Пожалуйста проверьте:
DELPHI Код:
{запустите в именно паксе! а не в делфи } program tvarTest; uses SysUtils; procedure OpenArrayTest(const OpArray: array of Integer); var   i: Integer; begin   print('Длинна массива  : '+intToStr(length(OpArray)));   print('Последний индекс: '+intToStr(High(OpArray)  ));     for i := Low(OpArray) to High(OpArray) do   begin     print('Array ' +IntToStr( i )+' = '+ IntToStr( OpArray[i] ) );    endend;    begin     OpenArrayTest([11,22,33,44,55,66,77]);     end.

вот что выводит у меня
Код:
Длинна массива  : 1 //а должно быть 7
Последний индекс: 0 //а должно быть 6
Array 0 = 11
Добавлено через 52 секунды
Как узнать длинну открытого массива без передачи дополнительных параметров?
__________________
Играю по фэншую используя /allblock, созерцая красоту игрового мира, сосредоточившись на получении энергии Ци при убийстве мобов.
icq=((2*3*(19^2)*37)-1)*9

Последний раз редактировалось mikser, 26.07.2012 в 15:30. Причина: Добавлено сообщение
mikser вне форума   Ответить с цитированием
Старый 26.07.2012, 15:06   #2
Местный
 
Аватар для SeregaZ
 
Регистрация: 16.08.2009
Сообщений: 1,224
Сказал Спасибо: 4
Имеет 229 спасибок в 182 сообщенях
SeregaZ пока неопределено
По умолчанию

а не верно ли? массив содержит один элемент, с индексом 0 - массивы вроде с 0 начинаются.
__________________
хочу картинку в подпись!
SeregaZ вне форума   Ответить с цитированием
Старый 26.07.2012, 15:29   #3
Местный
 
Аватар для mikser
 
Регистрация: 26.01.2009
Сообщений: 1,097
Сказал Спасибо: 178
Имеет 119 спасибок в 84 сообщенях
mikser пока неопределено
По умолчанию

Цитата:
с индексом 0 - массивы вроде с 0 начинаются.
Да, Открытые массивы Zero-Based с этим ни кто и ни спорит.
Цитата:
массив содержит один элемент
Нет, массив содержит 7 элементов. [11,22,33,44,55,66,77]

Цитата:
а не верно ли?
Нет не верно
я передал в процеду массв из 7 элементов [11,22,33,44,55,66,77]
а внутри процедуры оказывается его длинна равна 1 (WTF)

Я попросил проверить у вас так же?
__________________
Играю по фэншую используя /allblock, созерцая красоту игрового мира, сосредоточившись на получении энергии Ци при убийстве мобов.
icq=((2*3*(19^2)*37)-1)*9

Последний раз редактировалось mikser, 26.07.2012 в 15:32.
mikser вне форума   Ответить с цитированием
Старый 26.07.2012, 16:23   #4
Местный
 
Аватар для SeregaZ
 
Регистрация: 16.08.2009
Сообщений: 1,224
Сказал Спасибо: 4
Имеет 229 спасибок в 182 сообщенях
SeregaZ пока неопределено
По умолчанию

ааа... не туда посмотрел туплю на старости лет... значит передаешь неверно. чтобы удостоверится попробуй так:
PHP код:
begin
    OpenArrayTest
([11,22,33,44,55,66,77]);
    print(
'Array 2 = 'IntToStrOpArray[2] ) ); должно по идее показать 33 
end

в случае вылета, скажет оут оф бондс или как там... значит передаешь все-таки не верно, если покажет... эээ... ну думаю оно не покажет

и еще момент! у меня в пьюр бейсике для организации массива сначала требуется указать его размер. типа Dim Array(10), а уже после этого забивать данные. нет ли чего подобного в твоем языке?
__________________
хочу картинку в подпись!
SeregaZ вне форума   Ответить с цитированием
Старый 26.07.2012, 16:40   #5
Местный
 
Аватар для mikser
 
Регистрация: 26.01.2009
Сообщений: 1,097
Сказал Спасибо: 178
Имеет 119 спасибок в 84 сообщенях
mikser пока неопределено
По умолчанию

SeregaZ,
1. покажет 33.
2. есть array[0..10] of тип.

а как насчет ответа на сабжевый вопрос?
__________________
Играю по фэншую используя /allblock, созерцая красоту игрового мира, сосредоточившись на получении энергии Ци при убийстве мобов.
icq=((2*3*(19^2)*37)-1)*9
mikser вне форума   Ответить с цитированием
Старый 26.07.2012, 16:54   #6
Местный
 
Аватар для supernewbie
 
Регистрация: 23.09.2009
Сообщений: 1,232
Сказал Спасибо: 119
Имеет 172 спасибок в 134 сообщенях
supernewbie пока неопределено
По умолчанию

mikser, попробуй print('Длинна массива : '+intToStr(SizeOf(OpArray) div SizeOf(Integer)));
__________________
Начало.
supernewbie вне форума   Ответить с цитированием
Старый 26.07.2012, 18:04   #7
Местный
 
Аватар для mikser
 
Регистрация: 26.01.2009
Сообщений: 1,097
Сказал Спасибо: 178
Имеет 119 спасибок в 84 сообщенях
mikser пока неопределено
По умолчанию

Цитата:
Сообщение от supernewbie Посмотреть сообщение
mikser, попробуй print('Длинна массива : '+intToStr(SizeOf(OpArray) div SizeOf(Integer)));
тоже самое получается:
PHP код:
{запустите в именно паксеа не в делфи }
program tvarTest;
uses SysUtils;


procedure OpenArrayTest(const OpArray: array of Integer);
var
  
iInteger;
  
Len:Integer;
begin
  
  
  Len
:=SizeOf(OpArraydiv SizeOf(Integer) ;
  
  print(
'Длинна массива  : '+intToStr(Len));
  print(
'Последний индекс: '+intToStrLen-1  ));
  
  
  for 
:= Low(OpArrayto Len-do
  
begin
    
print('Array ' +IntToStr)+' = 'IntToStrOpArray[i] ) );  
  
end;  
end;  
 

begin
    OpenArrayTest
([11,22,33,44,55,66,77]);
    
end
SizeOf(OpArray)=4
видимо это указатель

Добавлено через 28 минут
Уря победил!!!
Помогло старое-доброе насилие - преобразование типов
обявляем какойнить тип вроде MyType=array of Integer;
что по существу есть описание динамического массива
а потом преобразуем нашь массив к нему MyType(mass)
Но полученый код будет работать только с массивом из целых чисел
Потому было принято решение юазть Array of Const для универсальности

Вот рабочий код:
DELPHI Код:
{запустите в именно паксе! а не в делфи } program tvarTest; uses SysUtils; type TDAoC=array of const; procedure OpenArrayTest(const OpArray: array of Integer); var   i: Integer; begin   print('Длинна массива  : '+intToStr(length(TDAoC(opArray))));   print('Последний индекс: '+intToStr( High(TDAoC(opArray)) ));     for i := Low(TDAoC(opArray)) to High(TDAoC(opArray)) do   begin     print('Array ' +IntToStr( i )+' = '+ IntToStr( OpArray[i] ) );    endend;    begin     OpenArrayTest([11,22,33,44,55,66,77]);     end.

Код:
Print: Длинна массива  : 7
Print: Последний индекс: 6
Print: Array 0 = 11
Print: Array 1 = 22
Print: Array 2 = 33
Print: Array 3 = 44
Print: Array 4 = 55
Print: Array 5 = 66
Print: Array 6 = 77
__________________
Играю по фэншую используя /allblock, созерцая красоту игрового мира, сосредоточившись на получении энергии Ци при убийстве мобов.
icq=((2*3*(19^2)*37)-1)*9

Последний раз редактировалось mikser, 26.07.2012 в 18:33. Причина: Добавлено сообщение
mikser вне форума   Ответить с цитированием
Ответ

  CoderX :: Forums > Основные форумы > Программинг



Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +4, время: 03:59.

vBulletin style designed by MSC Team.
Powered by vBulletin® Version 3.6.11
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Locations of visitors to this page
Rambler's Top100

Вы хотите чувствовать себя в безопасности? чоп Белган обеспечит её!