Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 18.08.2012, 02:36
gebs gebs вне форума
Прохожий
 
Регистрация: 03.08.2010
Сообщения: 48
Репутация: 10
По умолчанию Массив в массиве

Здравствуйте. В связи со своими скудными знаниями в программировании, у меня не получается решить одну задачу.

Будьте добры помогите советом или наведите на путь истинный. Попытаюсь обрисовать что есть и что нужно получить в итоге.

Есть Memo в нём в каждой строке есть числа от 1 до 10

Есть глобальная переменная X, зависящая от t, стоит задача пройти по строкам в мемо поле и выполнить код в зависимости от переменной X, X не может быть равно 2, если X не равно 2 то продолжить выполнение программы, если X =2, то подождать 1 секунду, если результат X будет равен 2 то подождать ещё 1 сек и так до тех пор по X примет значение, отличное от 2, после чего продолжить выполнение цикла мемо. Известно, при начале обработки цикла мемо, X не равен 2. Ниже приведён код, который я смог родить. Поправьте чтоли меня.


Код:
 for i:=0 to mmo1.Lines.Count - 1 do begin
   s:=mmo1.Lines[i];
   mmo1.Lines[i]:=s;

    if X <> 2 then
      begin
       t:=2;
       1 * t: = X
      end
    else
    begin
      if X = 2 then
      begin
       repeat
         begin
         Sleep(1000);
         end;
       until X <> 2;
     end;
    end;


 end;

При таком раскладе программа выполняется 1 раз, хотя по идее должная была повторять 1 секундное ожидание пока X не примет значение отличное от 2 и продолжить выполнение цикла.
Заранее спасибо за Ваши отзывы, очень надеюсь на ваши наставления!

Последний раз редактировалось gebs, 18.08.2012 в 03:26.
Ответить с цитированием
  #2  
Старый 18.08.2012, 03:29
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Цитата:
Сообщение от gebs
Код:
...
  if X = 2 then
  begin
    repeat
      begin
        Sleep(1000);
      end;
    until X <> 2;
  end;
А как X изменится, если здесь крутится бесконечный цикл? Да и не исполняется эта часть кода никогда.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #3  
Старый 18.08.2012, 04:06
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от gebs
Код:
       1 * t: = X
А компилятор в этом месте разве не ругается?
Цитата:
Сообщение от gebs
При таком раскладе программа выполняется 1 раз,
Даже компилируется и запускается? А какая версия Delphi?
Ответить с цитированием
  #4  
Старый 18.08.2012, 12:52
gebs gebs вне форума
Прохожий
 
Регистрация: 03.08.2010
Сообщения: 48
Репутация: 10
По умолчанию

Цитата:
Сообщение от angvelem
А как X изменится, если здесь крутится бесконечный цикл? Да и не исполняется эта часть кода никогда.
Спасибо за ответ, пауза 1 сек это ожидание того, что переменная X изменится.
Ответить с цитированием
  #5  
Старый 18.08.2012, 12:54
gebs gebs вне форума
Прохожий
 
Регистрация: 03.08.2010
Сообщения: 48
Репутация: 10
По умолчанию

Цитата:
Сообщение от poli-smen
А компилятор в этом месте разве не ругается?

Даже компилируется и запускается? А какая версия Delphi?
Спасибо за ответ, за ранее извиняюсь, писал без компилятора, вообщем смысл таков что при первом исполнения, X не равен 2, но со 100% вероятностью принимает значение 2 при каждом последующем прохождении цикла и меняется только со временем.
Ответить с цитированием
  #6  
Старый 18.08.2012, 16:29
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от gebs
если X =2, то подождать 1 секунду, если результат X будет равен 2 то подождать ещё 1 сек и так до тех пор по X примет значение, отличное от 2, после чего продолжить выполнение цикла мемо.
Мне вот в этом месте что-то не сильно понятно, а где меняется значение X?
Если в цикле проверять не стало ли X равным 2, но при этом нигде в коде не устанавливать значение этой переменной в 2, то так бесконечно можно ждать...
Ответить с цитированием
  #7  
Старый 18.08.2012, 16:50
ART ART вне форума
Продвинутый
 
Регистрация: 13.02.2006
Адрес: Магнитогорск
Сообщения: 669
Репутация: 14745
По умолчанию

Вы не понимаете сути. X не изменится, потому что программа ждет, а не выполняется дальше. Если в коде встречается sleep, то он sleep для всей программы.
Ответить с цитированием
  #8  
Старый 19.08.2012, 10:55
gebs gebs вне форума
Прохожий
 
Регистрация: 03.08.2010
Сообщения: 48
Репутация: 10
По умолчанию

Цитата:
Сообщение от ART
Вы не понимаете сути. X не изменится, потому что программа ждет, а не выполняется дальше. Если в коде встречается sleep, то он sleep для всей программы.

Хорошо, а какой вариант можете предложить?
Ответить с цитированием
  #9  
Старый 19.08.2012, 12:56
Аватар для YVitaliy
YVitaliy YVitaliy вне форума
Местный
 
Регистрация: 14.12.2011
Сообщения: 481
Версия Delphi: Borland Delphi7
Репутация: 17
По умолчанию

Можно просто ввести рассчет Х в цикл. Если расчет Х ведется в таймере, то использовать
Код:
Application.ProcessMessages;
(без sleep). Можно использовать вычисление Х в отдельном потоке, тогда и этот код в коей мере покатит.
Ответить с цитированием
Ответ


Delphi Sources

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

Расширенный поиск
Опции просмотра

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

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 14:56.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter