Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.01.23;
Скачать: CL | DM;

Вниз

Не выполняются операторы...   Найти похожие ветки 

 
alexander_ua   (2004-01-13 11:48) [0]

Вопрос скорее по паскалю, чем по делфи, но не знаю, где его могу задать. Ситуация такова - есть процедура, делающая некоторые вычисления (в данном случае, не важно, какие). Используются операторы безусловного перехода goto (да простят меня программисты, но подпрограмма переводилась с фортрана и неохота было возиться, чтобы избавиться от меток).
Так вот, запускаю на пошаговое выполнение, после перехода goto 5 по идее должны произойти действия: showmessage, присваивание res и res11 и присваивание u11:=u и т.д. Так вот, вычисление res и res11 почему то не происходит, эти строки просто "перепрыгиваются". В чем может быть проблема? Может я использую зарезервированные слова?

procedure INTRqp(U:real;N:integer;RES:real;X,Y:ar91;IER:real; VAR U11:real;N11:integer;RES11:real;X11,Y11:ar91;IER11:real);
label 2,3,1,5,6,8,9,7,4;
begin
IF(X[1]-U)<0 then goto 2 else if (X[1]-U)=0 then goto 3 else if (X[1]-U)>0 then goto 1;
1: IER:=0;
I:=2;

GOTO 5;
2: IF(X[N]-U)<0 then goto 6 else if (X[N]-U)=0 then goto 8 else if (X[N]-U)>0 then goto 3;
6: IER:=0;
9: I:=N;
GOTO 5;
8: IER:=1;
GOTO 9;
3: IER:=1;
7: for i:=1 to n do
begin
IF(X[I]-U)<0 then goto 4 else if (X[I]-U)=0 then goto 4 else if (X[I]-U)>0 then goto 5;
4: CONTINUE;
end;


5:
showmessage("!");
RES11:=Y[I-1]+(U-X[I-1])*(Y[I]-Y[I-1])/(X[I]-X[I-1]);
RES:=Y[I-1]+(U-X[I-1])*(Y[I]-Y[I-1])/(X[I]-X[I-1]);
u11:=u;n11:=n;res11:=res;x11:=x;y11:=y;ier11:=ier;

END;


 
alex_*** ©   (2004-01-13 11:52) [1]

попробуй убрать оптимизацию, перебилди посмотри еще раз


 
alexander_ua   (2004-01-13 11:56) [2]

Оптимизацию убрал, не помогло.
Еще хочу добавить, что если я делаю присваивание переменным, не являющимся параметрами этой процедуры, то все проходит нормально...


 
xli ©   (2004-01-13 11:56) [3]

Скорее всего дело именно в оптимизации.
У тебя параметры процедуры не объявлены как возвращающие значение. Включи Warnings, наверняка тебя предупредят, что значения Res11, Res, u11 нигде не используются. Может, компилятор их и не вычисляет из-за этого.


 
alex_*** ©   (2004-01-13 12:01) [4]

Билд делал? После отключения оптимизации надо билд дать.


 
alexander_ua   (2004-01-13 12:02) [5]

Вы правы, сообщения о том, что res11 и res нигде не используются. А что значит параметры не объявлены как возвращающие значение? Можно более подробно развить Вашу мысль?


 
alex_*** ©   (2004-01-13 12:04) [6]

Значит что написано (т.е. можешь их выкинуть). Если хочешь посмотреть как они работают, отключи оптимизацию, сделай Build и посмотри отладчиком.


 
pasha_golub ©   (2004-01-13 12:05) [7]

Прошу прощения, а поизящнее код низзя переписать?


 
alexander_ua   (2004-01-13 12:09) [8]

>> pasha_golub ©
поизящнее лень писать, я ж говорю, что просто перегнал прогу с фортрана

>>alex_***, xli
все, после билда заработало. спасибо.
но, честно говоря, я так и не понял, почему делфя игнорировала эти строки...


 
alex_*** ©   (2004-01-13 12:11) [9]

Если прислушаешься к [7], такие вопросы вообще не возникнут.


 
xli ©   (2004-01-13 12:12) [10]

параметры объявлены правильно, я проглядел, просто их названия немного неинформативные и глаз замыливается.

Оптимизацию отключать пробовал?


 
alex_*** ©   (2004-01-13 12:12) [11]

Оптимизация, однако...


 
alexander_ua   (2004-01-13 12:13) [12]

И непонятно, почему "Value assigned to RES never used"...


 
Плохиш_   (2004-01-13 12:18) [13]

>alexander_ua (13.01.04 12:13) [12]

> И непонятно, почему "Value assigned to RES never used"...

А ты сам подумай кому они после end; нужны?


 
default ©   (2004-01-13 12:19) [14]

alexander_ua (13.01.04 12:13) [12]
переводчик тогда откройте, а вообще [7]


 
alexander_ua   (2004-01-13 12:25) [15]

>> Плохиш_
Что значит кому они нужны? Разве я непрвильно передаю параметры в основную программу?


 
default ©   (2004-01-13 12:29) [16]

alexander_ua (13.01.04 12:25) [15]
если после присвоения переменной определённого значения эта переменная нигде не фигурирует нафиг это вообще делать?


 
alex_*** ©   (2004-01-13 12:31) [17]

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


 
default ©   (2004-01-13 12:33) [18]

alexander_ua (13.01.04 12:25) [15]
вот и брат(компилятор) говорит что в этом силы нету)


 
alexander_ua   (2004-01-13 12:49) [19]

стоп. как вернуть значение в программу? насколько я знаю объявляем procedure a(...; var b:real); далее в тексте прцедуры присваиваем b значение, разве не так? так в чем тогда проблема?


 
default ©   (2004-01-13 12:53) [20]

RES по значению у тебя передаётся


 
Palladin ©   (2004-01-13 12:53) [21]

старт. var d:integer; c:integer;
d - "вернется"
c - нет

var d,c:integer;
d - "вернется"
c - "вернется"

var d:integer; var c:real;
d - "вернется"
c - "вернется"


 
alexander_ua   (2004-01-13 13:01) [22]

>> Palladin ©
все, спасибо, я понял свои ошибки


 
Плохиш_   (2004-01-13 13:03) [23]

>alexander_ua (13.01.04 12:49) [19]

Ну Palladin © (13.01.04 12:53) [21] понятно объяснил?
И вообще пора уже занятся изучением делфи, а то так и будешь просто перегнал прогу с



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

Текущий архив: 2004.01.23;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.018 c
4-72968
DillerXX
2003-11-18 20:15
2004.01.23
Пищалка


14-72920
MYSTERYO
2004-01-01 13:14
2004.01.23
Вот, как всегда! Опохмел-пати плавно перетекает в новую пьянку


9-72620
Toni
2003-07-06 04:59
2004.01.23
dxDraw


3-72655
Алекса
2003-12-26 07:51
2004.01.23
Создание индексов в таблицах Dbase


3-72665
gandrei
2003-12-25 13:22
2004.01.23
extended stored procedures