Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2005.06.29;
Скачать: [xml.tar.bz2];

Вниз

Проверка значения переменной   Найти похожие ветки 

 
Motion ©   (2005-06-05 11:15) [0]

Вот часть кода:
begin
n:=5;
label11.Caption:=inttostr(n);

В метке должно выводить 5, а выводит что-то типа -1,734245
Пробую на пустой форме, всё нормально, пробую в программе - ничего не получается. Помогите пожайлуста советом, что это может быть.


 
begin...end ©   (2005-06-05 11:21) [1]

Приведите полный код, включая объявление n.


 
Motion ©   (2005-06-05 11:25) [2]

Вот часть программы:
procedure TForm1.BitBtn1Click(Sender: TObject);
var n:integer;

begin
n:=5;
label11.Caption:=inttostr(n);
end;


 
begin...end ©   (2005-06-05 11:28) [3]

> Motion ©   (05.06.05 11:25) [2]

Возможно, переопределена функция IntToStr.
Попробуйте заменить строку label11.Caption:=inttostr(n) на Label11.Caption := SysUtils.IntToStr(n).


 
Motion ©   (2005-06-05 11:29) [4]

Тоже самое


 
Motion ©   (2005-06-05 11:30) [5]

Вроде всё должно работать.... вот более полный текст программы:

procedure TForm1.BitBtn1Click(Sender: TObject);
var i,j,k,n:integer;
var arg,S,E:real;     //çíà÷åíèå àðãóìåíòà äëÿ äëÿ ïîèñêà çíà÷åíèÿ ôóíêöèè ,ïîëèíîì è ïîãðåøíîñòü
var X:array[0..12] of real;  //òàáëè÷íî çàäàííûå çíà÷åíèÿ àðãóìåíòà
var Y:array[0..12] of real;  //òàáëè÷íî çàäàííûå çíà÷åíèÿ ôóíêöèè
var h:array[0..12] of real;  //øàãè ñïëàéíà
var L:array[0..12] of real;  //êîýôèöèåíòû ìàòðèöû ÑËÀÓ
var B:array[0..12] of real;
var D:array[0..12] of real;  //âåêòîð ïðàâîé ÷àñòè
var Z:array[0..12] of real;  //ïðîãîíî÷íûå êîýôôèöèåíòû
var V:array[0..12] of real;
var M:array[0..12] of real; //ìîìåíòû ñïëàéíû â óçëàõ
var A:array[0..3]  of real;
label 1;

begin
n:=5;
//n:=spinedit1.value;
label11.Caption:=SysUtils.IntToStr(n);
if Edit1.Text="" then     //ïðîâåðêà íàëè÷èÿ íå çïîëíåíîãî çíà÷åíèÿ àðãóìåíòà
 begin
 Messagedlg("Îøèáêà! Âû íå ââåëè çíà÷åíèå àðãóìåíòà",mtwarning,[mbok],0);
 goto 1;
 end;


 
Motion ©   (2005-06-05 11:31) [6]

n дальше используется во многих циклах


 
Motion ©   (2005-06-05 11:32) [7]

То есть n - это предел всех циклов


 
Motion ©   (2005-06-05 11:33) [8]

То есть код такой:

procedure TForm1.BitBtn1Click(Sender: TObject);
var i,j,k,n:integer;
var arg,S,E:real;     //çíà÷åíèå àðãóìåíòà äëÿ äëÿ ïîèñêà çíà÷åíèÿ ôóíêöèè ,ïîëèíîì è ïîãðåøíîñòü
var X:array[0..12] of real;  //òàáëè÷íî çàäàííûå çíà÷åíèÿ àðãóìåíòà
var Y:array[0..12] of real;  //òàáëè÷íî çàäàííûå çíà÷åíèÿ ôóíêöèè
var h:array[0..12] of real;  //øàãè ñïëàéíà
var L:array[0..12] of real;  //êîýôèöèåíòû ìàòðèöû ÑËÀÓ
var B:array[0..12] of real;
var D:array[0..12] of real;  //âåêòîð ïðàâîé ÷àñòè
var Z:array[0..12] of real;  //ïðîãîíî÷íûå êîýôôèöèåíòû
var V:array[0..12] of real;
var M:array[0..12] of real; //ìîìåíòû ñïëàéíû â óçëàõ
var A:array[0..3]  of real;
label 1;

begin
n:=5;
//n:=spinedit1.value;
label11.Caption:=SysUtils.IntToStr(n);
if Edit1.Text="" then     //ïðîâåðêà íàëè÷èÿ íå çïîëíåíîãî çíà÷åíèÿ àðãóìåíòà
 begin
 Messagedlg("Îøèáêà! Âû íå ââåëè çíà÷åíèå àðãóìåíòà",mtwarning,[mbok],0);
 goto 1;
 end;

for i:=0 to n do
begin
X[i]:=strtofloat(stringgrid1.Cells[i,0]);
Y[i]:=strtofloat(stringgrid1.Cells[i,1]);
end;

for i:=0 to n-1 do
begin
h[i]:=X[i+1]-X[i];
end;

for i:=1 to n-1 do
begin
L[i]:=h[i-1]/(h[i]+h[i-1]);
B[i]:=h[i]/(h[i]+h[i-1]);
end;


 
Motion ©   (2005-06-05 11:34) [9]

И так далее


 
begin...end ©   (2005-06-05 11:46) [10]

> Motion

А что отладчик говорит? Чему равно n?
Установите контрольную точку на строке n := 5, запустите код, наведите курсор на n и просмотрите значение переменной. Проходя код по F8, наблюдайте за значением n.


 
Motion ©   (2005-06-05 11:48) [11]

А как установить контрольную точку?


 
Anatoly Podgoretsky ©   (2005-06-05 11:48) [12]

Ctrl+F5


 
Motion ©   (2005-06-05 11:49) [13]

Вот написал тоже самое, только для частного случая:

procedure TForm1.Button1Click(Sender: TObject);
var n,i:integer;
begin
n:=5;
label1.Caption:=inttostr(n);
end;
for i:=0 to n do
begin
label2.caption:=inttostr(i);
end;
end.

И тоже не работает


 
Motion ©   (2005-06-05 11:51) [14]

Мне немного не понятно, что нужно зделать. Поставил курсор на строку n:=5, нажал Ctrl+F5, а дальше что?


 
lookin ©   (2005-06-05 11:52) [15]

procedure TForm1.Button1Click(Sender: TObject);
var n,i:integer;
begin
n:=5;
label1.Caption:=inttostr(n);
end; это зачем?
for i:=0 to n do
begin
label2.caption:=inttostr(i);
end;
end.


 
Motion ©   (2005-06-05 11:55) [16]

To lookin : Теперь работает


 
begin...end ©   (2005-06-05 11:55) [17]

> Motion ©   (05.06.05 11:51) [14]

Теперь запустите программу и наблюдайте за значением n в окне Watch List.


 
lookin ©   (2005-06-05 11:56) [18]

[16] Motion ©   (05.06.05 11:55)

В смысле? После того, как убрали end лишний? Так вроде компилироваться сним не должно было...


 
Motion ©   (2005-06-05 11:59) [19]

Его убрал - всё пошло.


 
Motion ©   (2005-06-05 12:00) [20]

В стоке Value пишет - process not accessible


 
lookin ©   (2005-06-05 12:01) [21]

[19] Motion ©   (05.06.05 11:59)

Бред какой. С этим end не компилируется ничего! Как это Вы умудрились запустить программу при такой компиляции?


 
Motion ©   (2005-06-05 12:02) [22]

Я убрал end; и всё нормально пошло


 
lookin ©   (2005-06-05 12:02) [23]

[22] Motion ©   (05.06.05 12:02)

Т.е. компиляция прошла? Или что? А результат работы самой программы тоже удовлетворяет?


 
Motion ©   (2005-06-05 12:03) [24]

То есть мне написало - что нет доступа к процессу


 
Motion ©   (2005-06-05 12:03) [25]

Интерестно почему?


 
begin...end ©   (2005-06-05 12:09) [26]

> Motion ©   (05.06.05 12:03) [25]

Потому что программа ещё не запущена?


 
Motion ©   (2005-06-05 12:12) [27]

Я сначала нажимаю F9, потом смотрю значение


 
Motion ©   (2005-06-05 12:14) [28]

Вот дальше тоже проверяю значения:
for i:=0 to 5 do
begin
X[i]:=strtofloat(stringgrid1.Cells[i,0]);
Y[i]:=strtofloat(stringgrid1.Cells[i,1]);
end;
label11.Caption:=IntToStr(i);

Вместо 5 пишет - -1,734324(тоже самое, что и при n)


 
lookin ©   (2005-06-05 12:22) [29]

for i:=0 to 5 do
begin
X[i]:=strtofloat(stringgrid1.Cells[i,0]);
Y[i]:=strtofloat(stringgrid1.Cells[i,1]);
end;
label11.Caption:=IntToStr(i);

А разве в этом примере i после завершения цикла не является неопределенной?


 
ferr ©   (2005-06-05 12:23) [30]

Бред. В i не должно быть пяти, но и -1,7... тоже.


 
lookin ©   (2005-06-05 12:26) [31]

[30] ferr ©   (05.06.05 12:23)

Кстати, точно! С чего бы это после IntToStr появилось 1,7343....?


 
Motion ©   (2005-06-05 12:29) [32]

А почему не 5?


 
Motion ©   (2005-06-05 12:31) [33]

lookin, ты прав


 
lookin ©   (2005-06-05 12:32) [34]

[33] Motion ©   (05.06.05 12:31)

Интересно, в чем? ////


 
Motion ©   (2005-06-05 12:33) [35]

"i после завершения цикла является неопределенной"


 
Motion ©   (2005-06-05 12:35) [36]

А если n определить как константу?


 
Anatoly Podgoretsky ©   (2005-06-05 12:36) [37]

Ну и что, какое это отношение имеет к 1,7343


 
Motion ©   (2005-06-05 12:38) [38]

Может как-то по другому можно оприделить n для цикла

for i:=0 to n do


 
Motion ©   (2005-06-05 12:39) [39]

Сначала я брал его со SpinEdit, но программа работала неправильно, решил проверить все значения. И обнаружил такую ошибку.


 
lookin ©   (2005-06-05 12:39) [40]

[38] Motion ©   (05.06.05 12:38)

Смысл? Все и так должно работать вроде бы...


 
Motion ©   (2005-06-05 12:44) [41]

Я могу прислать всю программу, чтобы могли посмотреть. Может я там что-то другое не так зделал...кстати процедура выполняется при нажатии не на обычную кнопку, а на Bitbtn


 
Motion ©   (2005-06-05 12:44) [42]

Может это влияет? Сейчас проверю.


 
Motion ©   (2005-06-05 12:47) [43]

Нет, никак не влияет


 
Motion ©   (2005-06-05 12:48) [44]

Бред какой-то ...


 
lookin ©   (2005-06-05 12:54) [45]

Ну присылай, если там нет ничего криминального или необычных компонент...


 
Motion ©   (2005-06-05 12:56) [46]

Я нашёл в чём проблема - там в конце программы было ещё одно присваивание метке, оно и присваивало расчитаное значение. Я забыл закоментировать.


 
Motion ©   (2005-06-05 12:57) [47]

Спасибо всем за помощь! Тему считаю закрытой.


 
iskatel ©   (2005-06-05 12:59) [48]


> А разве в этом примере i после завершения цикла не является
> неопределенной?


я конечно по дельфям не спец, но ведь переменная объявлена вне цикла, значит ее область видимости шире цикла, т.е. значение должно сохраняться и после завершения. разве нет?


 
Motion ©   (2005-06-05 13:06) [49]

Переменная - да. Но в самой метке выводилось не значение переменной n, а вообще другой переменной M. То есть было так :
n:=5;
label1.caption:=inttostr(n);
............
............
............
M:=.....;
label1.caption:=floattostr(M);


 
Motion ©   (2005-06-05 13:08) [50]

Просто забыл закоментировать последнюю строчку


 
iskatel ©   (2005-06-05 13:14) [51]

кстати, ты конечно извини, но что ты от народа то хотел? при таком глюке это может быть только одно из двух:
1 - кривой код
2 - глючит компилятор (что маловероятно)

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



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

Форум: "Основная";
Текущий архив: 2005.06.29;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.58 MB
Время: 0.038 c
4-1113469919
Pa5ha
2005-04-14 13:11
2005.06.29
Menu & OpenDialog runTime


10-1094805884
Ragazor
2004-09-10 12:44
2005.06.29
Как в Excel после работы с файлом закрыть без сохранения


3-1116501692
Bogdan
2005-05-19 15:21
2005.06.29
Создания исталяции с BDE Paradox


8-1109699665
Руслана
2005-03-01 20:54
2005.06.29
Где можно почитать о создании собственного кодека (аудио)


11-1101251566
XProger
2004-11-24 02:12
2005.06.29
Прокрутка в Memo





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский