Помощь - Поиск - Пользователи - Календарь
Полная версия: Порядок выполнения команд
Форум «Всё о Паскале» > Современный Паскаль и другие языки > Делфи
nonpascaler
Имеется следующий фрагмент кода на кнопке:

Код
procedure TForm1.Button2Click(Sender: TObject);
begin

if flag=1 then
  begin
    flag:=0;
    button2.Caption := 'Начать игру';
    kredit:=0;
  end;

if flag=0 then
  begin
    flag:=1;{игра началась}
    button2.Caption := 'Остановить';
    kredit:=100;
  end;
Label1.Caption := 'Кредит: '+IntToStr(kredit);
end;

end.


Задумывалось так: изначально при старте флаг сброшен. При нажатии на кнопку "типа игра пошла", флаг устанавливается, выводится текст, инициализируются переменные. При повторном нажатии (значение флага-то сменилось и по идее дельфя должна проигнорировать условие if flag=0, а на if flag=1 обратить внимание) флаг сбрасывается и выводятся сообщения.

Что-то слабо верится в то, что пример корректно работает.
:(
Считал, что дэльфя выполняет строки одна за другой, т.е.:
Код
if flag=1 then действие1
if flag=2 then действие2
if flag=3 then действие3
if flag=n then действие n


Чтобы уж точно отделиться от других операторов, даже заключил выполнение в кармашек
Код
begin-end


В реальности выполняется тока первая команда, а как быть с остальным содержимым проверочного блока?. Блин, даже на асме такого глюка нет.
:)))
Смех-смехом, а курсовик надо как-то сделать, жаль что прогу нельзя сдать на асме.
:(
мисс_граффити
во-первых, что за странная конструкция?
if flag=0 then

это условие будет выполняться всегда? (flag может быть равен только 0 или 1?)

Что получается у тебя:
заходим в процедуру. flag=1
идем в соотв. условие.
делаем
flag:=0;

как думаешь, что после этого произойдет на
if flag=0 then
?

если не хочешь такого, вместо 2 if-ов делай if... then ... else...
Malice
Цитата(nonpascaler @ 9.01.2007 20:33) *

Имеется следующий фрагмент кода на кнопке:

Вот ты молодец..
Если flag=1, то пишется "Начать игру", сбрасывается flag в 0 и следующие условие (if flag=0) тоже выполняется ! Поставь между условиями else.

Цитата
Блин, даже на асме такого глюка нет.
smile.gif))

nea.gif
nonpascaler
Цитата(мисс_граффити @ 9.01.2007 21:19) *

....делаем
flag:=0;

как думаешь, что после этого произойдет на
if flag=0 then
?


А-ха-ха-ха! Дошло!!!
:)))
В самом деле, по условию, он выполнил код и пошел далее неся свежие даные.
заменил на ELSE все ок!, спасибы.

После бэйсика и ассемблера не так просто перейти в паскаль. Скорее всего из-за того, что в обоих языках (хоть и разных) присутствует своеобразная конструкция GoTo, а в паскале нужно поток программы представить как-то иначе, чем и хочу заняться.

Насчет асма имел в виду примерно следующее:
Код
LD H,2;допустим, где-то регистр "Н" схватил двойку
...
LD A,H;подгружаем в аккумулятор для проверки
CP 1;сравнить со значением 1
JR Z,metka1; если равняется единице, то идем в направлении МЕТКА1
CP 2;ну и так далее
JR Z,metka2
CP 3
JR Z,metka3
JP metka;полностью перейти куда-нибудь


Полагаю Вам это все и так понятно, асм простой язык. Искал в паскале этот переход и потому заволновался.
:)

Всем спасибо.
(жду не дождусь своих 20Мб для скачивания "DRKB" :)
мисс_граффити
в паскале есть GoTo. Другое дело, что использование его стараются свести к минимуму...
Bokul
Цитата
(жду не дождусь своих 20Мб для скачивания "DRKB" smile.gif


А почему 20, у меня только 10. Или вышла новая версия?
Ozzя
Цитата(Bokul @ 10.01.2007 2:37) *

А почему 20, у меня только 10. Или вышла новая версия?

Нет. Идет набор статей в ДРКБ 3.
С оф. сайта.
Цитата
Последняя версия DRKB 2.3 (2005 год). Размер файла: ~10 Мб. Формат chm.
nonpascaler
Цитата(мисс_граффити @ 10.01.2007 1:20) *
в паскале есть GoTo...

Сначала ГоуТу поставил, потом разобрался с текстом и убрал (и без него работает:)
Если в асме используется своеобразное GoTo вместо применения макрокоманд, то код выполняется быстрее, но для сегодняшних мощностей этого видимо не отследить, на 80286 может и заметно.
(с паскалем отвыкнешь тут от экономии байтов и подсчета тактов :)))

Цитата
А почему 20, у меня только 10. Или вышла новая версия?

Нет, это админ нам столько выдает, с просьбой ни в чем себе не отказывать.
:)
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.