Форум «Всё о Паскале» _ Делфи _ Порядок выполнения команд
Автор: nonpascaler 10.01.2007 0:33
Имеется следующий фрагмент кода на кнопке:
Код
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
В реальности выполняется тока первая команда, а как быть с остальным содержимым проверочного блока?. Блин, даже на асме такого глюка нет. :))) Смех-смехом, а курсовик надо как-то сделать, жаль что прогу нельзя сдать на асме. :(
Автор: мисс_граффити 10.01.2007 1:19
во-первых, что за странная конструкция?
if flag=0 then
это условие будет выполняться всегда? (flag может быть равен только 0 или 1?)
Что получается у тебя: заходим в процедуру. flag=1 идем в соотв. условие. делаем
flag:=0;
как думаешь, что после этого произойдет на
if flag=0 then
?
если не хочешь такого, вместо 2 if-ов делай if... then ... else...
Автор: Malice 10.01.2007 1:24
Цитата(nonpascaler @ 9.01.2007 20:33)
Имеется следующий фрагмент кода на кнопке:
Вот ты молодец.. Если flag=1, то пишется "Начать игру", сбрасывается flag в 0 и следующие условие (if flag=0) тоже выполняется ! Поставь между условиями else.
Цитата
Блин, даже на асме такого глюка нет. ))
Автор: nonpascaler 10.01.2007 4:59
Цитата(мисс_граффити @ 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" :)
Автор: мисс_граффити 10.01.2007 5:20
в паскале есть GoTo. Другое дело, что использование его стараются свести к минимуму...
Автор: Bokul 10.01.2007 5:37
Цитата
(жду не дождусь своих 20Мб для скачивания "DRKB"
А почему 20, у меня только 10. Или вышла новая версия?
Автор: Ozzя 10.01.2007 19:18
Цитата(Bokul @ 10.01.2007 2:37)
А почему 20, у меня только 10. Или вышла новая версия?
Нет. Идет набор статей в ДРКБ 3. С оф. сайта.
Цитата
Последняя версия DRKB 2.3 (2005 год). Размер файла: ~10 Мб. Формат chm.
Автор: nonpascaler 11.01.2007 5:04
Цитата(мисс_граффити @ 10.01.2007 1:20)
в паскале есть GoTo...
Сначала ГоуТу поставил, потом разобрался с текстом и убрал (и без него работает:) Если в асме используется своеобразное GoTo вместо применения макрокоманд, то код выполняется быстрее, но для сегодняшних мощностей этого видимо не отследить, на 80286 может и заметно. (с паскалем отвыкнешь тут от экономии байтов и подсчета тактов :)))
Цитата
А почему 20, у меня только 10. Или вышла новая версия?
Нет, это админ нам столько выдает, с просьбой ни в чем себе не отказывать. :)