Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.07.30;
Скачать: CL | DM;

Вниз

Самопроизвольно меняется массив?   Найти похожие ветки 

 
Pavor ©   (2006-07-12 14:14) [0]

Уважаемые профессионалы!
Сам бы не поверил, но происходит вот что.
Есть программка небольшая, на ТрубоПаскале еще написана...
Короче говоря, данные выводит в текстовый файл прямо по ходу расчета:

//Начало цикла
//......
//Вычисления
//......
writeln(out,"¦ ",m:3," ¦ ",fwm:6:3," ¦ ",(em*100):8:3,
           " ¦ ",(ed[ng].fi*180/pi):7:2," ¦ ",(ff*m):4:0,
           " ¦ ",kv:6:4," ¦ ");
//Конец цикла

Я её в Delphi переделал, не вопрос. Решил потом экспорт в Word сделать, а для этого массив создал(небольшой - 16 элементов), чтобы всю таблицу данных накопить и из него сразу и вывести в таблицу в вордовском шаблоне. Вот так:

//Это тип для элемента моего массива
type result_record=record
 fwm, em, ed, f, kv: real;
end;

var y1,m,j,y0,p,ng,nc,q:integer;
   al,fa,famin,famax,fam,em,DT,Bp,U,bet,alfa,am,t2,tau,fwm,
   kv,kg,fw1,ff,cndt,dx,dy,w,ktp,bs:real;
   ed:array [1..5] of Eds;
//Это объявление моего массива
   results2export: array [1..nt] of result_record;

//....

Заполняется массив так:
writeln(out,"¦ ",m:3," ¦ ",fwm:6:3," ¦ ",(em*100):8:3,
           " ¦ ",(ed[ng].fi*180/pi):7:2," ¦ ",(ff*m):4:0,
           " ¦ ",kv:6:4," ¦ ");
//Заполняем таблицу с результатами для последующего
// экспорта в Word
   results2export[i].fwm:=fwm;
   results2export[i].em:=em*100;
   results2export[i].ed:=(ed[ng].fi*180/pi);
   results2export[i].f:=ff*m;
   results2export[i].kv:=kv;
//Конец цикла

В Word массив передается корректно, но дело все в том, что к моменту завершения цикла данные в нем не соответствую действительности. То есть - в файле, записанном с помощью WriteLn и в массиве таблицы разные.
До 7-го элемента все как надо, а потом начинаются чудеса.
Самое интересное, что даже при полностью закомментированных строках эффект сохраняется.
Вот отрывок из моего отладочного лога:
//До 7-й итерации массив полностью заполнен нулями
// (а чего в общем-то ждать?) Но вот дольше:
i: 7
Добавлены данные: [7]: 0.000    0.000    0.00    0 0.0000
Изменение массива в целом:
01:  0.000    0.000    0.00    1 0.0000
02: -0.000    0.000    1.32    0 0.0000
03:  0.000    0.000    0.00    0 0.0000
04:  0.000    0.000    0.00    0 0.0000
05:  0.000    0.000    0.00    0 0.0000
06:  0.000    0.000    0.00    0 0.0000
07:  0.000    0.000    0.00    0 0.0000
08:  0.000    0.000    0.00    0 0.0000
09:  0.000    0.000    0.00    0 0.0000
10:  0.000    0.000    0.00    0 0.0000
11:  0.000    0.000    0.00    0 0.0000
12:  0.000    0.000    0.00    0 0.0000
13:  0.000    0.000    0.00    0 0.0000
14:  0.000    0.000    0.00    0 0.0000
15:  0.000    0.000    0.00    0 0.0000
16:  0.000    0.000    0.00    0 0.0000
--------------------------------------
i: 8
Добавлены данные: [8]: 0.000    0.000    0.00    0 0.0000
Изменение массива в целом:
01:  0.000    0.000    0.00    1 0.0000
02: -0.000    0.000    1.32    0 -0.0011
03:  0.000    1.490    0.00    0 0.0000
04:  0.000    0.000    0.00    0 0.0000
05:  0.000    0.000    0.00    0 0.0000
06:  0.000    0.000    0.00    0 0.0000
07:  0.000    0.000    0.00    0 0.0000
08:  0.000    0.000    0.00    0 0.0000
09:  0.000    0.000    0.00    0 0.0000
10:  0.000    0.000    0.00    0 0.0000
11:  0.000    0.000    0.00    0 0.0000
12:  0.000    0.000    0.00    0 0.0000
13:  0.000    0.000    0.00    0 0.0000
14:  0.000    0.000    0.00    0 0.0000
15:  0.000    0.000    0.00    0 0.0000
16:  0.000    0.000    0.00    0 0.0000
-------------------------------------


Последняя итерация:
i: 16
Добавлены данные: [16]: 0.000    0.000    0.00    0 0.0000
Изменение массива в целом:
01:  0.000    0.000    0.00    1 0.0000
02: -0.000    0.000    1.32    0 -0.0011
03:  0.000    1.490    0.00    0 0.0000
04:  1.530    0.000   -0.00    0 1.6000
05:  0.000    0.001    0.00    2 0.0000
06: -0.001    0.000    1.70    0 0.0007
07:  0.000    1.720    0.00   -0 0.0000
08:  1.790    0.000    0.00    0 1.9700
09:  0.000    0.001    0.00    2 0.0000
10:  0.000    0.000    0.00    0 0.0000
11:  0.000    0.000    0.00    0 0.0000
12:  0.000    0.000    0.00    0 0.0000
13:  0.000    0.000    0.00    0 0.0000
14:  0.000    0.000    0.00    0 0.0000
15:  0.000    0.000    0.00    0 0.0000
16:  0.000    0.000    0.00    0 0.0000


Спасибо, если дочиталь до этого места. Вопрос - что это может быть? Больше в тексте нигде обращений к этому массиву нет ( и откуда? но -проверял). Спасибо за внимание.


 
StriderMan ©   (2006-07-12 14:22) [1]

попробуй забить массив некими константными значениями, что получится?


 
Pavor ©   (2006-07-12 14:28) [2]

Перед началом расчета:
for i:=1 to 16 do begin
   results2export[i].fwm:=255.0;
   results2export[i].em:=255.0;
   results2export[i].ed:=255.0;
   results2export[i].f:=255.0;
   results2export[i].kv:=255.0;
end;


Последняя итерация:

i: 16
Добавлены данные: [16]:255.000  255.000  255.00  255 255.0000
Изменение массива в целом:
01: 255.000    0.000    0.00    1 255.0000
02: -0.000    0.000    1.32  255 -0.0011
03:  0.000    1.490  255.00    0 0.0000
04:  1.530  255.000   -0.00    0 1.6000
05: 255.000    0.001    0.00    2 255.0000
06: -0.001    0.000    1.70  255 0.0007
07:  0.000    1.720  255.00   -0 0.0000
08:  1.790  255.000    0.00    0 1.9700
09: 255.000    0.001    0.00    2 255.0000
10: 255.000  255.000  255.00  255 255.0000
11: 255.000  255.000  255.00  255 255.0000
12: 255.000  255.000  255.00  255 255.0000
13: 255.000  255.000  255.00  255 255.0000
14: 255.000  255.000  255.00  255 255.0000
15: 255.000  255.000  255.00  255 255.0000
16: 255.000  255.000  255.00  255 255.0000


То есть, насколько я вижу - "вторжение" тех же самых чисел.


 
StriderMan ©   (2006-07-12 15:25) [3]


> Перед началом расчета:
> for i:=1 to 16 do begin
>    results2export[i].fwm:=255.0;
>    results2export[i].em:=255.0;
>    results2export[i].ed:=255.0;
>    results2export[i].f:=255.0;
>    results2export[i].kv:=255.0;
> end;

после этого момента цикл корректно заполнен?


 
StriderMan ©   (2006-07-12 15:25) [4]


> цикл

массив


 
Desdechado ©   (2006-07-12 16:01) [5]

а есть уверенность, что в массив пишется то, что надо?
а то может там стоит какое-нибудь условие?
ведь по твоему псевдокоду это не понятно


 
han_malign ©   (2006-07-12 18:00) [6]

сдается мне у тебя переполнение массива ed


 
Ketmar ©   (2006-07-12 20:12) [7]

17-я строка.

какой цикл? граничные значения. что есть nt? Вы вычистили из примера не тот мусор. %-)


 
Pavor ©   (2006-07-13 07:10) [8]

2 han_malign : А ведь ты прав! Точно ведь, а!

Сейчас только внимание обратил - цикл:

nt

for i:=1 to nt do begin
//Здесь вычисления
// А потом:
   inc(Ng);//Вот оно!!!
//И так 16 раз по массиву из 5-и элементов:
  ed[ng].e:=em;
   ed[ng].m:=m;
   ed[ng].fi:=0.0;
   ed[ng].kvp:=kv;
   writeln(out,"¦ ",m:3," ¦ ",fwm:6:3," ¦ ",(em*100):8:3,
           " ¦ ",(ed[ng].fi*180/pi):7:2," ¦ ",(ff*m):4:0,
           " ¦ ",kv:6:4," ¦ ");

Да-с, нелегко, все же, разбираться с чужими программами... Но будем учиться. Всем спасибо, проблема решена.


 
Pavor ©   (2006-07-13 07:11) [9]

дополнение: nt=16, определено в константах



Страницы: 1 вся ветка

Текущий архив: 2006.07.30;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.029 c
2-1152532623
SergeyG
2006-07-10 15:57
2006.07.30
Как сделать, чтобы форма и расположенные на ней компоненты


9-1132487732
Kobik
2005-11-20 14:55
2006.07.30
Большая картинка в DX


2-1152326876
Der Nechk@ssoff
2006-07-08 06:47
2006.07.30
кол-во дней между числами


15-1151659362
Layner
2006-06-30 13:22
2006.07.30
Сервис сам останавливается в W2003R2, хотя в 2000 стабильно


15-1151912318
Александр Иванов
2006-07-03 11:38
2006.07.30
500 ГГц