Главная страница
    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.055 c
3-1116408719
_e_u_
2005-05-18 13:31
2005.06.29
Вредный, простой скуэль запрос:


3-1116850425
Надежда
2005-05-23 16:13
2005.06.29
Не срабатывает установка DisplayFormat полю ClientDataSet


14-1117819399
X9
2005-06-03 21:23
2005.06.29
Прошу помощи математиков ... СРОЧНО plz!


1-1118250161
Оля
2005-06-08 21:02
2005.06.29
Блочные шифры срочно!!!


14-1117181522
TUser
2005-05-27 12:12
2005.06.29
Уплотнение элементов в памяти





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