Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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 : А ведь ты прав! Точно ведь, а!

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

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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.01 c
11-1130966214
NORDmen
2005-11-03 00:16
2006.07.30
run-time packages&kol


1-1150811878
Zilog
2006-06-20 17:57
2006.07.30
использование внешней библиотеки


2-1152682196
Yegorchic
2006-07-12 09:29
2006.07.30
DLL и форма


1-1150872127
verybadbug
2006-06-21 10:42
2006.07.30
работа с DockTabSet


2-1152688859
kyn66
2006-07-12 11:20
2006.07.30
Свой WinMessenger





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский