IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> Найти ошибку в задачке
Xandr
сообщение 7.12.2003 19:55
Сообщение #1


Гость






Доброе время суток. Если у кого время есть - то у меня такая трабла.
Цитата

Var
   i :integer;
Procedure p1;
 Procedure p2;
 var i : real;
 begin
   i:=2;
 end;
Begin
i:=99;
p2;
end;
function f: integer;
begin
i:=0;
f:=i;
end;

BEGIN
 p1;
{*}  Writeln(i+f);
{**}  Writeln(f+i);
END.

по условию * должно выводить "99", а ** - "0".
Но writeln(i+f) выдает тоже "0", т.е в строке * сначала  высчитывается значение функции f, в лишь затем выполняется сама строка.
А по условию writeln(i+f) должно выводить "99".
Надо объяснить, почему компилятор просматривает программу в таком порядке и предложить вариант исправления программы.
Весь прикол в том, что у меня паскаль эту программу даже трассировать отказывается - пишет "Error 202: Stack overflow error." - с чего бы это?
Надеюсь кто-нибудь разберется. Заранее благодарю.
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 18.07.2025 17:07
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"