Форум: "Начинающим";
Текущий архив: 2006.07.30;
Скачать: [xml.tar.bz2];
ВнизСамопроизвольно меняется массив? Найти похожие ветки
← →
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 : А ведь ты прав! Точно ведь, а!
Сейчас только внимание обратил - цикл:
ntfor 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;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.012 c