Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.05.2011, 18:08   #1
artem611
Пользователь
 
Регистрация: 21.09.2010
Сообщений: 40
По умолчанию Порядок вызова процедуры

Народ помогите разобраться.Знаю, что вопрос глупый, но никак не могу сообразить. Есть код
Код:
var
procedure xz(k:integer);
begin
while(k<>5) do
begin
xz(k+1);
inc(l);
end;
end;
begin
l:=0;
readln(k){Здесь пусть к вводим 1}
end.
Я вот не могу разобраться. Когда мы попадаем в процедуру, хаходим в цикл и снова вызываем эту же процедуру с к=к+1 мы перейдем в начало процедуры или же сначала выполниться все что стоит в процедуре после ее вызова, а уже потом перейдем в начало процедуры?


Спасибо
ЗЫ:Знаю, что вопрос тупой, но...
artem611 вне форума Ответить с цитированием
Старый 11.05.2011, 18:22   #2
artem611
Пользователь
 
Регистрация: 21.09.2010
Сообщений: 40
По умолчанию

Сейчас дебажу этот код, и получаетсчя, что если, например, к=4 вызывается процедура xz(4), заходим в цикл while, переходим в begin процедуры и получам xz(5), далее, естественно в операторы после while мы не зайдем и идем в конец процедуры. Тут вроде бы и все работа по идее должны закончитсья, но на самом деле получатся так:
после того как достигли end; процедуры, почему-то переходим в inc(l), далее вывод, увеличиваем k и получаем xz(5), дальше попытка зайти в цикл(проверка условия), inc(l), потом опять аргумент xz() становится 4 и все по новой.
Что-то я совсем перестал понимать как работает код
artem611 вне форума Ответить с цитированием
Старый 11.05.2011, 18:25   #3
malinoff
Форумчанин
 
Аватар для malinoff
 
Регистрация: 08.01.2010
Сообщений: 205
По умолчанию

Перед вызовом xz(k+1) напишите k := k + 1;
Вызывайте не xz(k+1) а xz(k)
Если помог - кликни на значок весов под аватаром.
malinoff вне форума Ответить с цитированием
Старый 11.05.2011, 18:28   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

что-там дебажить то?!!
Цикл по переменной K (пока она не равна 5 цикл будет выполняться. Так?
А внутри цикла переменная K НЕ ИЗМЕНЯЕТСЯ.
всё. получили бесконечный цикл.

p.s. а вообще, вызов процедуры/функции самой себя называется РЕКУРСИЕЙ
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Отмена вызова метода peplenko Общие вопросы C/C++ 2 12.04.2011 13:52
Метод обратного вызова? Altera Общие вопросы Delphi 20 11.08.2010 18:27
Ошибка вызова одной процедуры в другой! $T@LKER БД в Delphi 4 28.04.2010 19:50
свойство вызова OpenDialog msk11 Компоненты Delphi 3 05.04.2010 00:03
Отрисовка в окне до вызова ReleaseDC snow_max Общие вопросы C/C++ 0 15.02.2010 14:28