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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.06.2013, 17:09   #1
calypso
Форумчанин
 
Регистрация: 02.12.2012
Сообщений: 250
По умолчанию Оптимизировать код выбора сложного условного ветвления

Думал-думал,как это замутить.Вроде и case не поможет:
Код:
//на форме выбрана комбинация чекбоксов (checkbox1...checkbox6)
if CheckBox1->Checked условие1=TRUE
и т.д.
function Func1
{
if (условие1) if ((условие 1.1) | (условие 1.2) | (условие 1.3))
   {
some code
   }
if (условие2) if ((условие 2.1) | (условие 2.2) | (условие 2.3))
   {
some code
   }
//таких будет 5-6 ветвлений
}
Как можно этот говнокод привести в красивый вид? И оптимизировать
calypso вне форума Ответить с цитированием
Старый 12.06.2013, 13:44   #2
nick42
Форумчанин
 
Аватар для nick42
 
Регистрация: 14.10.2011
Сообщений: 267
По умолчанию

Цитата:
Сообщение от calypso Посмотреть сообщение
Думал-думал,как это замутить.Вроде и case не поможет...
Отчего ж не поможет? Из-за шести боксов и напрягаться не стоит - так сойдет. Но вообще-то можно использовать битовую матрицу и ветвление делать по её значению (комбинации чекбоксов). Например:
Код:
  int kluch=0;
  for (int c=0,i=0;c<ControlCount;c++)
    if ((String)Controls[c]->Name=="CheckBox"+IntToStr(i+1))
      kluch |= ((TCheckBox*)Controls[c])->Checked ? 1<<i++ : 0<<i++ ;
  switch (kluch) {
    case 0: /*  some code */  break;
    case 2: /*  some code */  break;
    case 5: /*  some code */  break;
  }

Последний раз редактировалось nick42; 12.06.2013 в 13:46.
nick42 вне форума Ответить с цитированием
Старый 13.06.2013, 18:27   #3
calypso
Форумчанин
 
Регистрация: 02.12.2012
Сообщений: 250
По умолчанию

Ругается,что метод Controls используется неверно (Embarcadero XE2)
calypso вне форума Ответить с цитированием
Старый 13.06.2013, 19:01   #4
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Цитата:
if ((String)Controls[c]->Name
Разыменование не верное. Звёздочку нужно ставить.
Код:
if ((String*)Controls[c]->Name
А почему бы Вам вместо кучи CheckBox-ов не применить CheckLictBox. В этом случае получить значения флажков гораздо легче.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder

Последний раз редактировалось Smitt&Wesson; 13.06.2013 в 19:12.
Smitt&Wesson вне форума Ответить с цитированием
Старый 14.06.2013, 18:55   #5
calypso
Форумчанин
 
Регистрация: 02.12.2012
Сообщений: 250
По умолчанию

Не работает ни со звездочкой,ни без нее:
calypso вне форума Ответить с цитированием
Старый 14.06.2013, 19:26   #6
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Хм, а Вы этот код пишете в функции, которая является методом формы?
h:
Код:
//---------------------------------------------------------------------------

#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published:	// IDE-managed Components
	TButton *Button1;
	void __fastcall Button1Click(TObject *Sender);
private:	// User declarations
public:		// User declarations
	__fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif
cpp:
Код:
// ---------------------------------------------------------------------------

#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::Button1Click(TObject *Sender) {
	for (int c = 0; c < ControlCount; c++)
		ShowMessage(Controls[c]->Name);
}
// ---------------------------------------------------------------------------
Этот код отлично работает в C++ Builder 2010.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 14.06.2013 в 19:28.
BDA вне форума Ответить с цитированием
Старый 14.06.2013, 20:07   #7
calypso
Форумчанин
 
Регистрация: 02.12.2012
Сообщений: 250
По умолчанию

Цитата:
Вы этот код пишете в функции, которая является методом формы
Получается что нет,это "левая" функция.Например,если я в ней напишу CheckBox1->Checked ,выдаст ошибку что неизвестный оператор
calypso вне форума Ответить с цитированием
Старый 14.06.2013, 20:38   #8
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Тогда добавьте ее как метод формы
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 14.06.2013, 21:13   #9
calypso
Форумчанин
 
Регистрация: 02.12.2012
Сообщений: 250
По умолчанию

Если б я знал как это сделать) TForm9::ListFiles дает ошибку:
[bcc32 Error] Unit9.cpp(423): E2316 'TForm9::ListFiles(AnsiString,TStri ngs *,TStrings *,int)' is not a member of 'TForm9'
calypso вне форума Ответить с цитированием
Старый 14.06.2013, 21:22   #10
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Примерно:
Код:
//h
//---------------------------------------------------------------------------

#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published:	// IDE-managed Components
	TButton *Button1;
	void __fastcall Button1Click(TObject *Sender);
private:	// User declarations
	void __fastcall ListFiles(AnsiString a, TStrings *b, TStrings *c, int d);
public:		// User declarations
	__fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif

//cpp:

// ---------------------------------------------------------------------------

#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::Button1Click(TObject *Sender) {
	for (int c = 0; c < ControlCount; c++)
		ShowMessage(Controls[c]->Name);
}
// ---------------------------------------------------------------------------
void __fastcall TForm1::ListFiles(AnsiString a, TStrings *b, TStrings *c, int d) {
	for (int c = 0; c < ControlCount; c++)
		ShowMessage(Controls[c]->Name);
}
// ---------------------------------------------------------------------------
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 14.06.2013 в 21:33.
BDA вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Оптимизировать код Алексей_2012 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 58 19.02.2013 00:13
оптимизировать код destic Microsoft Office Excel 14 26.01.2013 01:12
Оптимизировать код strannick Microsoft Office Excel 9 14.11.2012 00:59
Программы с использованием условного оператора и оператора выбора. Задачи по Delphi. Не могу сделать 4 программу Bovi4 Помощь студентам 0 25.10.2011 20:15
операторы выбора и организации ветвления в программах на VBSRIPT alex Fal Помощь студентам 0 23.03.2010 22:37