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

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

Вернуться   Форум программистов > C/C++ программирование > C++ Builder
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.06.2012, 10:04   #1
HeLLiSH
Пользователь
 
Регистрация: 20.06.2012
Сообщений: 11
Радость Кодовый замок)

Есть кодовый замок 5х5, в одном ряду можно нажать лишь 1 клавишу, нужно написать программу, что бы после каждого нажатие на клавишу проверялось правильность или ложь кода.
Даже если 1 кнопка нажать та что верна, должно в Label выводи сообщение "Истина" , но если нажимается дополнительно неверная клавиша то пишет "Ложь".
Я начал делать через логические перемены но что то не получилось....
Помогите подсказать как реализовать данную программу)
Вложения
Тип файла: rar замок.rar (341.1 Кб, 21 просмотров)
HeLLiSH вне форума Ответить с цитированием
Старый 22.06.2012, 10:19   #2
nick42
Форумчанин
 
Аватар для nick42
 
Регистрация: 14.10.2011
Сообщений: 267
По умолчанию

- кому помочь подсказать?
nick42 вне форума Ответить с цитированием
Старый 22.06.2012, 10:32   #3
HeLLiSH
Пользователь
 
Регистрация: 20.06.2012
Сообщений: 11
По умолчанию

Вот полная программа, нужно сделать: то что, когда нажата например 1 правильная клавиша, и нажимаем 1 неверную оно пишет что неправильно, но после повторного нажатия на ту же клавишу должно проверять какие клавиши нажаты)
Вложения
Тип файла: rar 2.rar (791.0 Кб, 20 просмотров)
HeLLiSH вне форума Ответить с цитированием
Старый 22.06.2012, 10:42   #4
nick42
Форумчанин
 
Аватар для nick42
 
Регистрация: 14.10.2011
Сообщений: 267
По умолчанию

Я бы делал так: каждой колонке кнопок из пяти присвоил соотв. значение для Tag, т.е. каждая клавиша в первой колонке имеет Tag=1, в пятой - соотв. =5. Затем для первой кнопки написал такой обработчик нажатия:
Код:
void __fastcall TForm1::SpeedButton1Click(TObject *Sender)
{
      String kodovoeslovo = "52431";  // some other
      TSpeedButton *bt = ((TSpeedButton *)Sender);
      if ((char)('0'+bt->Tag) == kodovoeslovo[bt->GroupIndex])
        ShowMessage("TRUE");
      else ShowMessage("FALSE");
}
и в инспекторе объектов присвоил эту функцию всем остальным кнопкам (в Events OnClick). Это, конечно, только пример, - не обязательно ShowMessage, и кодовое слово может быть другим (но каждая цифра в пределах от 1 до 5).
nick42 вне форума Ответить с цитированием
Старый 22.06.2012, 10:55   #5
HeLLiSH
Пользователь
 
Регистрация: 20.06.2012
Сообщений: 11
По умолчанию

Вот смотри, нужно такой же замок как в этой программе, что бы его можно было подобрать, и что бы оно каждый раз проверялось, при нажатии на любую клавишу
Вложения
Тип файла: rar Project1.rar (978.3 Кб, 18 просмотров)
HeLLiSH вне форума Ответить с цитированием
Старый 22.06.2012, 11:23   #6
nick42
Форумчанин
 
Аватар для nick42
 
Регистрация: 14.10.2011
Сообщений: 267
По умолчанию

Ну вот вся программа (с учетом того, что я писал ранее)...
Код:
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::SpeedButton1Click(TObject *Sender)
{
    String kodovoeslovo = "52431";  // some other
    TSpeedButton *bt[25] ;
    bt[0]=SpeedButton1; bt[1]=SpeedButton2; bt[2]=SpeedButton3;
    bt[3]=SpeedButton4; bt[4]=SpeedButton5; bt[5]=SpeedButton6;
    bt[6]=SpeedButton7; bt[7]=SpeedButton8; bt[8]=SpeedButton9;
    bt[9]=SpeedButton10; bt[10]=SpeedButton11; bt[11]=SpeedButton12;
    bt[12]=SpeedButton13; bt[13]=SpeedButton14; bt[14]=SpeedButton15;
    bt[15]=SpeedButton16; bt[16]=SpeedButton17; bt[17]=SpeedButton18;
    bt[18]=SpeedButton19; bt[19]=SpeedButton20; bt[20]=SpeedButton21;
    bt[21]=SpeedButton22; bt[22]=SpeedButton23;
    bt[23]=SpeedButton24; bt[24]=SpeedButton25;
    bool otvor = true;
    for (int i=0;i<25;i++)
      if (kodovoeslovo[bt[i]->GroupIndex]!=(char)('0'+bt[i]->Tag) &&
            bt[i]->Down) otvor=false;
    if (otvor) Label1->Caption = "Ти молодець !";
    else       Label1->Caption = "Спробуй ще..";
}
//---------------------------------------------------------------------------
nick42 вне форума Ответить с цитированием
Старый 22.06.2012, 12:07   #7
HeLLiSH
Пользователь
 
Регистрация: 20.06.2012
Сообщений: 11
По умолчанию

Что то оно вообще не работает...
Вот смотри как я делал
Код:
void __fastcall TForm1::SpeedButton6Click(TObject *Sender)
{
f1=true;
if((f1==true&&f2==true&&f3==true&&f4==true&&f5==true)||(f1==true&&f2==true&&f3==true&&f5==true)
||(f1==true&&f2==true&&f3==true&&f4==true)||(f1==true&&f4==true&&f5==true)||(f1==true&&f3==true&&f5==true)
||(f1==true&&f3==true&&f4==true)||(f1==true&&f2==true&&f5==true)
||(f1==true&&f2==true&&f4==true)||(f1==true&&f2==true&&f3==true)||(f1==true&&f5==true)
||(f1==true&&f4==true)||(f1==true&&f3==true)||(f1==true&&f2==true)||(f1==true)
||(f2==true)||(f3==true)||(f4==true)||(f5==true)||(f2==true&&f3==true)||(f2==true&&f4==true)
||(f2==true&&f3==true)||(f2==true&&f5==true)||(f3==true&&f4==true)||(f3==true&&f5==true)
||(f4==true&&f5==true)||(f2==true&&f3==true&&f4==true)||(f2==true&&f3==true&&f5==true)
||(f3==true&&f4==true&&f5==true)||(f2==true&&f3==true&&f4==true&&f5==true)||(f1==true&&f3==true&&f4==true&&f5==true)
||(f1==true&&f2==true&&f4==true&&f5==true)){Label6->Caption="True";}
else Label6->Caption="False";
}
А мне нужно что бы при втором нажатии оно повторно проверялось
HeLLiSH вне форума Ответить с цитированием
Старый 22.06.2012, 12:55   #8
nick42
Форумчанин
 
Аватар для nick42
 
Регистрация: 14.10.2011
Сообщений: 267
По умолчанию

... тебе самому такой код нравится?

Ведь смысл какой, - достаточно одного несравнения, чтобы метка однозначно сигнализировала: код ошибочный. Поэтому перед входом в цикл проверок устанавливают один флажок (true) и далее в цикле первое же несравнение сбросит его в false.
nick42 вне форума Ответить с цитированием
Старый 22.06.2012, 13:00   #9
HeLLiSH
Пользователь
 
Регистрация: 20.06.2012
Сообщений: 11
По умолчанию

Смотри например верные первая вертикаль, если нажать только первую кнопку, по уже должно выводить что код верен, если во втором ряде выбрать неверную клавишу выводит сообщение что код не верен, но если ещё раз на нее нажать, тоесть поднять её в верхнее положение по оно проверяет, и если нажата хоть одна клавиша или комбинация из нескольких правильных то выводит что верно.
Самую программу нужно построить так что бы можно было подобрать код, а не только при всех правильных значениях
HeLLiSH вне форума Ответить с цитированием
Старый 22.06.2012, 14:13   #10
nick42
Форумчанин
 
Аватар для nick42
 
Регистрация: 14.10.2011
Сообщений: 267
По умолчанию

Ну, смотри; я больше в этой теме писать не буду... - в приведенном примере все это учтено: если из нажатых кнопок хоть одна неправильная - то "плохо", если нажаты все правильные (хоть одна, хоть все пять) - то "хорошо". Что-то непонятно в коде? или он у тебя не "працюет"?
nick42 вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
На Замок - сервис мониторинга сайта от взлома Nazamok Безопасность, Шифрование 18 26.02.2013 19:32
Электронный замок на телефонных карточках Валент Компьютерное железо 13 09.11.2011 22:52