Форум: "Основная";
Текущий архив: 2004.01.23;
Скачать: [xml.tar.bz2];
ВнизНе выполняются операторы... Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.009 c