Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для мобильных телефонов > MidletPascal > Основной форум

Основной форум Сюда все проблемы связанные с программированием.

Ответ
 
Опции темы
Старый 01.09.2010, 14:31   #1
Ksanatos
ПроЭктировщик
 
Аватар для Ksanatos
 
Регистрация: 31.01.2010
Адрес: Россия, респ. Башкортостан, г. Бирск
Сообщений: 137
Написано 12 полезных сообщений
(для 17 пользователей)
if break=2012 then ...

Вопрос собственно не затейлевый.
  1. Что может прирвать оператор break?
    1. Может ли он прекратить выполнение подпрограммы и перейти в место её вызова?
      1. Если нет, то как это сделать?
__________________



(Offline)
 
Ответить с цитированием
Старый 01.09.2010, 15:37   #2
ViNT
Модератор
 
Регистрация: 03.04.2007
Сообщений: 2,252
Написано 597 полезных сообщений
(для 817 пользователей)
Ответ: if break=2012 then ...

break - это безусловный выход из цикла (любого).
while true do //Бесконечный цикл
 
begin
  I
:=I+1;
  if 
I>100 then 
   
break;//Выход из цикла
 
end
Поскольку в MP нет так всеми нелюбимого GOTO, и Exit тоже нет, придется для возврата на точку входа делать что-то в роде:

var
 
Flag:Boolean;// Флаг возврата

procedure proc1;
begin
 
....
 
Flag:=False;//По умолчанию предполагаем, что нужно будет вернуться
 
if not(I<10then //Под NOT - условие, при котором нужно выйти
 
begin 
 
// Код процедуры после точки возврата
 
Flag:=True;//Если мы попали сюда, значит условие возврата не отработало, отменяем возврат
 
end;
end;

//В основном коде
...

while 
not flag do proc1// Крутимся, пока флаг возврата не равен true 
Изврат, конечно, но других вариантов вроде бы нет.


Мне в одном проекте из-за отсутствия goto и exit пришлось навертеть такую рекурсию на переходах по меню, что если долго лазить по меню, можно запросто словить переполнение стека. А по другому никак.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Ksanatos (01.09.2010)
Старый 01.09.2010, 21:19   #3
Ksanatos
ПроЭктировщик
 
Аватар для Ksanatos
 
Регистрация: 31.01.2010
Адрес: Россия, респ. Башкортостан, г. Бирск
Сообщений: 137
Написано 12 полезных сообщений
(для 17 пользователей)
Ответ: if break=2012 then ...

Спасибо.
Всегда смотрю на твою подпись с горечью. Каждый раз, когда начинаешь новый проект с такими широкими планами и задумками, все мечты рушаться от первого взгляда на шаблон:
program NewProject;
begin

end;
__________________



(Offline)
 
Ответить с цитированием
Старый 01.09.2010, 22:36   #4
ffinder
Дэвелопер
 
Аватар для ffinder
 
Регистрация: 10.09.2007
Сообщений: 1,442
Написано 793 полезных сообщений
(для 1,460 пользователей)
Ответ: if break=2012 then ...

Сообщение от ViNT Посмотреть сообщение

Мне в одном проекте из-за отсутствия goto и exit пришлось навертеть такую рекурсию на переходах по меню, что если долго лазить по меню, можно запросто словить переполнение стека. А по другому никак.
стрелять-колотить, открой же для себя конечные автоматы, стек состояний и прекрати такое писать в общественных местах.
фейспалм.jpg
(Offline)
 
Ответить с цитированием
Старый 01.09.2010, 22:54   #5
ViNT
Модератор
 
Регистрация: 03.04.2007
Сообщений: 2,252
Написано 597 полезных сообщений
(для 817 пользователей)
Ответ: if break=2012 then ...

Сообщение от ffinder Посмотреть сообщение
стрелять-колотить, открой же для себя конечные автоматы, стек состояний и прекрати такое писать в общественных местах.
фейспалм.jpg

Более-менее знаком с конечными автоматами, но не очень представляю, как его туда прикрутить. К тому же, когда писал сбжевую программу, о конечных автоматах еще знал только понаслышке. На счет стека состояний - сознаюсь, не сталкивался. Возможно, его реализация на MP будет не так тривиальна, как в других языках.
(Offline)
 
Ответить с цитированием
Старый 21.09.2010, 19:15   #6
Ksanatos
ПроЭктировщик
 
Аватар для Ksanatos
 
Регистрация: 31.01.2010
Адрес: Россия, респ. Башкортостан, г. Бирск
Сообщений: 137
Написано 12 полезных сообщений
(для 17 пользователей)
Ответ: if break=2012 then ...

если чесно википедия и др. источники маво небольшого знания не помогли мне понять что есть автоматное программирование и стек состояний.
Но я сам реализовал по другому:
в некой переменной(what_i_must_do хи-хи) храним значение следующем запускаемой программы.
При запуске(да кому где угодно) мидлета запускаем процу(в отделльном модуле). В которой в соответствии со значением what_i_must_do запускается та или иная процедура.
Во время исполнения what_i_must_do присваивается новое значение, возвращаемся в "запускательную" процу с новым значением. Естественно "запускательная" проца с бесконечным циклом.
Но есть проблема: Надо зделать так чтобы what_i_must_do не менялась до конца переменной. Т.к. Это поможет только в определённых случаях, например походам по меню)
__________________



(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +4, время: 04:44.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com