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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 08.06.2012, 13:18   #1
efkar
 
Регистрация: 08.06.2012
Сообщений: 7
Злость прога виснет..

txt:=memo.text; //копия текста из memo
for i:=1 to length(memo.text) do //vichislenie faktoriala
if copy(memo.Text,i,1)='!' then //как только в строке находится знак факториала выполняются действия
begin
pos:=i; //чтобы не сбился цикл для дальнейших операций копирую положение "!"
m1: //
if (copy(memo.text,pos-2,1)<>'+') or (copy(memo.text,pos-2,1)<>'-') or (copy(memo.text,pos-2,1)<>'*') or (copy(memo.text,pos-2,1)<>'/') then //если пред-предыдущий символу "!" не "+,-,/,*" значит уменьшаем позицию на 1 и переходит к метке m1
begin
pos:=pos-1;
Goto m1
end;
end;
memo.text:=txt;


ну как бы этот код не вычисляет факториал, я пытаюсь хотя бы вырезать число
efkar вне форума Ответить с цитированием
Старый 08.06.2012, 13:27   #2
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

Цитата:
Goto m1
вот поэтому и виснет
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Старый 08.06.2012, 13:31   #3
efkar
 
Регистрация: 08.06.2012
Сообщений: 7
По умолчанию

а как организовать такой цикл в цикле чтобы не висла? через while пробовал..
efkar вне форума Ответить с цитированием
Старый 08.06.2012, 14:27   #4
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,515
По умолчанию

Цитата:
Код:
if  ( copy(memo.text,pos-2,1)<>'+') 
or ( copy(memo.text,pos-2,1)<>'-') 
or ( copy(memo.text,pos-2,1)<>'*') 
or ( copy(memo.text,pos-2,1)<>'/') then //если пред-предыдущий символу "!" не "+,-,/,*" значит уменьшаем позицию на 1 и переходит к метке m1
Выделенное красным ВСЕГДА =true (потому что если он ='+' значит <>'-' ) (false or true =TRUE)
значит всегда переход (тоже и while)
значит ВИСИМ.
Надо исправить условие, но как ? не совсем понятно, что хотим проверить.
может быть так?
Код:
if not (memo.text[pos-2] in ['+','-','/','*']) then //если проверяемый символ отличен от всех перечисленных то ....
Код:
while not (memo.text[pos-2] in []) do pos:=pos-1;
P.S. И конечно проверять pos-2 >0 !
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 08.06.2012 в 14:33.
evg_m вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
виснет программа LUXEOR C++ Builder 0 27.01.2012 23:20
Виснет прога $T@LKER Помощь студентам 7 22.03.2011 09:43
прога виснет из-за goto tred Помощь студентам 8 27.06.2010 10:34
Помогите понять почему прога виснет Asira Помощь студентам 5 21.12.2009 22:57
logonui- виснет :_( steck Свободное общение 0 03.09.2007 16:38