|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Delphi - Головоломка |
|
Delphi - Головоломка
|
![]() Новый участник Сообщения: 3 |
Всем привет. Я сделала головоломку и приложение запускается - но не работает так как нужно. При запуску приложения просто прожимаются все чекбоксы. А нужно чтобы при нажатии 1 чекбокса - менялись другие. Помогите пожалуйста.
implementation var s: boolean; {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); begin s:=False; end; procedure TForm1.CheckBox1Click(Sender: TObject); var Index, i, num: Integer; e: Boolean; begin if s then Exit; s:=True; for Index:= 0 to 4 do if Sender=Controls[i] then break; if not (Controls[Index] as TCheckBox).Checked then (Controls[Index] as TCheckBox).Checked:=True else begin num:=Index+1; if Index=4 then num:= 0; (Controls[num] as TCheckBox).Checked:=not (Controls[num] as TCheckBox).Checked; num:=num+1; if Index=3 then num:=0; (Controls[num] as TCheckBox).Checked :=not (Controls[num] as TCheckBox).Checked; end; e:=True; for i:= 0 to 4 do e:=e and (Controls[i] as TCheckBox).Checked; if e then for i:=0 to 4 do begin (Controls[i] as TCheckBox).Caption:= 'Победа!'; (Controls[i] as TCheckBox).Enabled:=False; end; s:=False; end; end. |
|
Отправлено: 10:09, 28-03-2014 |
Пользователь Сообщения: 70
|
Профиль | Отправить PM | Цитировать Цитата Olessya88:
1. i не присвоена, но используется. 2. Index - параметр цикла, но внутри цикла не используется. 3. Цикл кончается оператором break (нет блока begin-end), но дальше используется переменная Index. Так задумано ? Возможно, конечно, но сомнительно. Вот что получилось, когда я расставил отступы для большей читабельности программы: implementation var s: boolean; {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); begin s:=False; end; procedure TForm1.CheckBox1Click(Sender: TObject); var Index, i, num: Integer; e: Boolean; begin if s then Exit; s:=True; for Index:= 0 to 4 do if Sender=Controls[i] then break; if not (Controls[Index] as TCheckBox).Checked then (Controls[Index] as TCheckBox).Checked:=True else begin num:=Index+1; if Index=4 then num:= 0; (Controls[num] as TCheckBox).Checked:=not (Controls[num] as TCheckBox).Checked; num:=num+1; if Index=3 then num:=0; (Controls[num] as TCheckBox).Checked :=not (Controls[num] as TCheckBox).Checked; end; e:=True; for i:= 0 to 4 do e:=e and (Controls[i] as TCheckBox).Checked; if e then for i:=0 to 4 do begin (Controls[i] as TCheckBox).Caption:= 'Победа!'; (Controls[i] as TCheckBox).Enabled:=False; end; s:=False; end; end. |
|
------- Последний раз редактировалось Гуллипут, 29-03-2014 в 21:28. Отправлено: 21:21, 29-03-2014 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
![]() Новый участник Сообщения: 3
|
Профиль | Отправить PM | Цитировать Я, может туплю конечно, но я не поняла где исправить, что бы заработала программа. То что ты в пример привел мой же текст, исправленный для лучшей читабельности - это понятно. Спасибо за ответ. Но мне бы поконкретнее узнать: что и как исправить....
|
Отправлено: 10:30, 01-04-2014 | #3 |
Необычный Сообщения: 4465
|
Профиль | Сайт | Отправить PM | Цитировать Olessya88, приложи пожалуйста архив с приложением или с "болванкой", что алгоритм "головоломки" остался тайной, а проблемное место - нет.
|
------- Отправлено: 20:18, 01-04-2014 | #4 |
![]() Новый участник Сообщения: 3
|
Профиль | Отправить PM | Цитировать Вот файлы проекта.
|
|
Отправлено: 22:33, 02-04-2014 | #5 |
Пользователь Сообщения: 70
|
Профиль | Отправить PM | Цитировать Цитата Гуллипут:
Параметр цикла - переменная Index. Наверно, и индексом при обращении к массиву должна быть она же, а не переменная i, которая даже не присвоена к моменту использования. Кроме того, очень похоже на то, что телом цикла должен быть не один только оператор "if Sender=Controls[i] then break", а и последующие. Но для этого надо всё тело цикла окружить "операторными скобками", то есть командами begin|end ! Я не вникал в алгоритм, тебе виднее, какие именно операторы ты предполагала использовать в качестве тела цикла, поэтому не могу сказать, где ставить "end". Но "begin" должен быть сразу после "do". Sapienti sat (умному достаточно). |
|
------- Отправлено: 23:45, 02-04-2014 | #6 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Головоломка с DNS и AD | CyberDYne | Microsoft Windows NT/2000/2003 | 3 | 09-08-2011 17:22 | |
Головоломка с str_replace | venuko | Вебмастеру | 14 | 18-01-2009 21:22 |
|