Привет всем.
При написании проги к диплому столкнулся со следующей проблемой:
procedure PodborTempGazov(Qprih : Real);
var
i, j : Integer;
HSO2, HN2, HO2, Qsumm, GSO2, GN2, GO2, HSO2m, HO2m, HN2m : Real;
Delta1, Delta2, Delta3, QSumMin, Temp : Real;
label 1;
begin
GSO2 := StrToFloat(MainForm.PosleSPStringGrid.Cells[1,1]);
GO2 := StrToFloat(MainForm.PosleSPStringGrid.Cells[1,2]);
GN2 := StrToFloat(MainForm.PosleSPStringGrid.Cells[1,3]);
j := 10;
for i:=1 to 120 do
begin
PoiskHSO2 (j,HSO2);
PoiskHN2 (j, HN2);
PoiskHO2 (j,HO2);
Qsumm := HSO2*GSO2+HO2*GO2+HN2*GN2;
if Qsumm>Qprih then
Goto 1 else
begin
HSO2m := HSO2;
HO2m := HO2;
HN2m := HN2;
end;
j:=j+10;
end;
1:
QSumMin := HSO2m*GSO2+HO2m*GO2+HN2m*GN2;
Delna1 := (QSumm-QSumMin)/10;
Delta2 := Qprih-QSumMin;
Delta3 := Delta2/Delta1;
Temp := J+Delta3;
end;
1: при компиляции не моявляются точки (слева от команд) после метки 1- не компилируется?
2: при пошаговой прогонке программы, после выполнения команды GoTo 1 перепрыгиваешь сразу на End, минуя команды между 1: и End;
3: при пошаговой прокрутке программы если смотреть значения после оператора присваивания - они верны, при просмотре значений пременных QSumMin = 1200, Delta1 = 1190... Temp = 1160, если вставить между 1: и End; любую другую переменную, то её значение будет уменьшаться на 10 начиная с 1160. Я думаю, понятно, что значения после вычислений совершенно не верные.
Глобальных меток в проге нет, глобальных переменных - тоже, всё описано локально. Процедур много. Пробовал переименовывать переменные, процедуру - не помогло...
Разбивал одну процедуру на несколько, вот что получилось:
procedure proc2 (QSumm, Qprih, SummaMin : real);
var
asgdfghh : real;
begin
asgdfghh := QSumm-SummaMin;
end;
procedure PodborTempGazov(Qprih : Real);
var
i, j : Integer;
HSO2, HN2, HO2, Qsumm, GSO2, GN2, GO2 : Real;
label 1;
begin
GSO2 := StrToFloat(MainForm.PosleSPStringGrid.Cells[1,1]);
GO2 := StrToFloat(MainForm.PosleSPStringGrid.Cells[1,2]);
GN2 := StrToFloat(MainForm.PosleSPStringGrid.Cells[1,3]);
j := 980;
for i:=98 to 120 do
begin
PoiskHSO2 (j,HSO2);
PoiskHN2 (j, HN2);
PoiskHO2 (j,HO2);
Qsumm := HSO2*GSO2+HO2*GO2+HN2*GN2;
if Qsumm>Qprih then
Goto 1 else
j := j+10;
end;
1:
Proc(QSumm, GSO2, GO2, GN2, Qprih, j);
end;
всё работает правильно, до proc2 там значение asgdfghh должно быть несколько сотен, а в реале 2,33*10в-307степени. пробовал делать asgdfghh:=0, в результате значение всё равно остаётся =2,33*... глобальных константы только 3, и у них совершенно другие значения.
перепробовал всё, что знал, может Вы поможете?
Advanced member
Статус: Не в сети Регистрация: 09.06.2003 Откуда: USSR
<Ikar> писал(а):
1: при компиляции не моявляются точки (слева от команд) после метки 1- не компилируется?
Ну и обьясни ка мне, зачем ты присваиваеш переменным (ЛОКАЛЬНЫМ!) значения вконце процедуры и потом их нигде не используеш? Компилятор не дурак, он такие куски кода сразу вырезает
Esp, отступы использую, как использовать тег код?
перед else точка с запятой не ставится...
Ray Adams, мне нужна для дальнейших расчётов и на вывод переменная Temp. не выводил, т.к. запустил прогу в пошаговом режиме, дабы убедиться, что всё считается правильно, и столкнулся с описанним траблом. щас пропишу вывод и попробую, надеюсь всё получится. страно, знал, что компилятор выбрасывает не используемые куски кода, но как то даже не подумал об этом.
всем спасибо за советы.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения