Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Значения дин.массива обнуляются 
:(
    Опции темы
cholesky
Дата 10.11.2006, 22:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Ситуация следующая: имеется двумерный динамический массив - почти матрица, за тем исключением, что количество элементов в строках разное. В цикле она заполняется, никаких проблем. После цикла оказывается, что ненулевые только элементы с индексом (*,1), а также элементы последней строки.  Как такое получается? 

Заранее спасибо за помощь.
PM MAIL   Вверх
Kuvaldis
Дата 10.11.2006, 22:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


механик-вредитель
***


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

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



cholesky, 
Цитата

 После цикла оказывается, что ненулевые только элементы с индексом (*,1), а также элементы последней строки.

К сожалению,  многие из форумчан вряд ли являются экстрасенсами, поэтому "код в студию". smile 
Иначе тяжело что-то сказать...


--------------------
Помни - когда ты спишь, враг не дремлет
Спи чаще и дольше, изматывай врага бессоницей
PM MAIL ICQ   Вверх
cholesky
Дата 10.11.2006, 22:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Код

program sparse4;

{$APPTYPE CONSOLE}
type Tdns = array of array of real;
var

  k,m:integer;
  key: char;

  ncol: integer;
  nrow: integer;
  dns: Tdns;

//Ellpack-Itpack
procedure dnsell;
type Iarr = array of array of integer;
type Rarr = array of array of real;
var
i,j: integer;
next: integer;
ia: Iarr;
a: Rarr;
ival: integer;
rval: real;

strln: integer;

begin
  setLength(ia,1,1);
  setLength(a,1,1);
  for i:= 1 to nrow do
    begin
    next:=1;
    for j:= 1 to ncol do
    begin
        if dns[i,j]<>0 then
        begin
            setLength(ia,i+1,next+1);
            setLength(a,i+1,next+1);
            ia[i,next]:=j;
            a[i,next] := dns[i,j];
            //rval :=  a[i,next];
            //WriteLn(rval:7:3);
            next := next +1;

        end;
   end;

  end;



//Здесь часть значений теряется



WriteLn('Ellpack-Itpack format:');
WriteLn('ia=');
  for i:=1 to nrow do
  begin
    strln := High(ia[i]);
    WriteLn ('strln=',strln);
    for j:=1 to  strln do
    begin
      
      ival :=  ia[i,j];
      Write(ival);
      Write(' ');
    end;
    WriteLn;
  end;
WriteLn('');

WriteLn('a=');
  for i:=1 to nrow do
  begin
    strln := High(a[i]);
    WriteLn ('strln=',strln);
    for j:=1 to strln do
    begin
      rval :=  a[i,j];
      Write(rval:7:3);
      Write(' ');
    end;
    WriteLn;
  end;
  WriteLn;

end;

begin
  
   ncol := 5;
   nrow:= 5;
   SetLength(dns,ncol+1, nrow+1);
    for k:=1 to ncol do
      begin
        for m:=1 to nrow do
          begin
            dns[m,k]:= 0;
          end;
      end;
    dns[1,1]:=1.21;
    dns[2,1]:=3.21;
    dns[2,2]:=3.7;
    dns[3,3]:=4.3;
    dns[3,1]:=4.5;
    dns[3,2]:=4.689;
    dns[4,5]:=-12.235;
    dns[5,5]:=46.46;
    dns[5,4]:=-15.589;
    dns[5,3]:=-15.589;
 
    dnsell;

    readln(key);
    


end.

PM MAIL   Вверх
Albinos_x
Дата 11.11.2006, 10:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Evil Skynet
****


Профиль
Группа: Комодератор
Сообщений: 3288
Регистрация: 28.5.2004
Где: X-6120400 Y-1 4624650

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



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


--------------------
"Кто владеет информацией, тот владеет миром"    
Уинстон Черчилль
PM MAIL ICQ   Вверх
Alexeis
Дата 11.11.2006, 22:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

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



Цитата(Albinos_x @  11.11.2006,  10:26 Найти цитируемый пост)
вообще у тебя это должно ошибки при работе выдавать...
 
Это случайность если он выходит не далеко, то ошибок может и не быть, но алгоритм, конечно будет работать неверно. Ошибки возникают, если сразу за массивом расположена область с доступом только для чтения, а так происходит затирание чужой области. Если она (память) используется где-то дальше, то ошибка может проявится совсем в другом месте, если же свободная то вообще никак не скажется.



--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

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


 




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


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

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