Показать сообщение отдельно
  #4  
Старый 29.04.2011, 22:51
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,096
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

1. Для начала завели несколько переменных, в которые положи значения из RadioGroupX.ItemIndex\
Код:
procedure TForm2.RadioGroup7Click(Sender: TObject);
var
  rb1, rb2, rb4, rb5, rb6, rb7 : Integer;
begin
  rb1 := RadioGroup1.ItemIndex;
  rb2 := RadioGroup2.ItemIndex;
  rb4 := RadioGroup4.ItemIndex;
  rb5 := RadioGroup5.ItemIndex;
  rb6 := RadioGroup6.ItemIndex;
  rb7 := RadioGroup7.ItemIndex;
  if (rb1=0) and (rb2=5) and (rb4=0) and (rb5=0) and (rb6=4) and (rb7=3) then a:=2.8;
  if (rb1=0) and (rb2=5) and (rb4=0) and (rb5=0) and (rb6=7) and (rb7=3) then a:=3.7;
  if (rb1=0) and (rb2=5) and (rb4=0) and (rb5=2) and (rb6=4) and (rb7=3) then a:=3.3;
  if (rb1=0) and (rb2=5) and (rb4=0) and (rb5=2) and (rb6=7) and (rb7=3) then a:=4.3;
  if (rb1=0) and (rb2=5) and (rb4=1) and (rb5=0) and (rb6=5) and (rb7=0) then a:=20.7;
  if (rb1=0) and (rb2=0) and (rb4=0) and (rb5=1) and (rb6=4) and (rb7=3) then a:=1;
  if (rb1=0) and (rb2=0) and (rb4=0) and (rb5=2) and (rb6=4) and (rb7=3) then a:=0.7;
  if (rb1=0) and (rb2=6) and (rb4=0) and (rb5=1) and (rb6=7) and (rb7=3) then a:=5.4;
  if (rb1=0) and (rb2=6) and (rb4=0) and (rb5=2) and (rb6=7) and (rb7=3) then a:=3.8;
end;
Уже читабельнее и быстрее, хотя и требует немного больше памяти.

2. У тебя rb1 может быть только 0. Все остальные случаи игнорируем. Соответсвенно:
Код:
procedure TForm2.RadioGroup7Click(Sender: TObject);
var
  rb1, rb2, rb4, rb5, rb6, rb7 : Integer;
begin
  rb1 := RadioGroup1.ItemIndex;
  rb2 := RadioGroup2.ItemIndex;
  rb4 := RadioGroup4.ItemIndex;
  rb5 := RadioGroup5.ItemIndex;
  rb6 := RadioGroup6.ItemIndex;
  rb7 := RadioGroup7.ItemIndex;
  if rb1=0 then
    begin
      if (rb2=5) and (rb4=0) and (rb5=0) and (rb6=4) and (rb7=3) then a:=2.8;
      if (rb2=5) and (rb4=0) and (rb5=0) and (rb6=7) and (rb7=3) then a:=3.7;
      if (rb2=5) and (rb4=0) and (rb5=2) and (rb6=4) and (rb7=3) then a:=3.3;
      if (rb2=5) and (rb4=0) and (rb5=2) and (rb6=7) and (rb7=3) then a:=4.3;
      if (rb2=5) and (rb4=1) and (rb5=0) and (rb6=5) and (rb7=0) then a:=20.7;
      if (rb2=0) and (rb4=0) and (rb5=1) and (rb6=4) and (rb7=3) then a:=1;
      if (rb2=0) and (rb4=0) and (rb5=2) and (rb6=4) and (rb7=3) then a:=0.7;
      if (rb2=6) and (rb4=0) and (rb5=1) and (rb6=7) and (rb7=3) then a:=5.4;
      if (rb2=6) and (rb4=0) and (rb5=2) and (rb6=7) and (rb7=3) then a:=3.8;
    end;
end;

3. Теперь переходим к rb4. Тут у нас 2 случая: 0 и 1
Код:
procedure TForm2.RadioGroup7Click(Sender: TObject);
var
  rb1, rb2, rb4, rb5, rb6, rb7 : Integer;
begin
  rb1 := RadioGroup1.ItemIndex;
  rb2 := RadioGroup2.ItemIndex;
  rb4 := RadioGroup4.ItemIndex;
  rb5 := RadioGroup5.ItemIndex;
  rb6 := RadioGroup6.ItemIndex;
  rb7 := RadioGroup7.ItemIndex;
  if rb1=0 then
    begin
      if rb4=1
        then
          begin		
	if (rb2=5) and (rb5=0) and (rb6=5) and (rb7=0) then a:=20.7;
          end
        else
          begin
            if (rb2=5) and (rb5=0) and (rb6=4) and (rb7=3) then a:=2.8;
            if (rb2=5) and (rb5=0) and (rb6=7) and (rb7=3) then a:=3.7;
            if (rb2=5) and (rb5=2) and (rb6=4) and (rb7=3) then a:=3.3;
            if (rb2=5) and (rb5=2) and (rb6=7) and (rb7=3) then a:=4.3;
            if (rb2=0) and (rb5=1) and (rb6=4) and (rb7=3) then a:=1;
            if (rb2=0) and (rb5=2) and (rb6=4) and (rb7=3) then a:=0.7;
            if (rb2=6) and (rb5=1) and (rb6=7) and (rb7=3) then a:=5.4;
            if (rb2=6) and (rb5=2) and (rb6=7) and (rb7=3) then a:=3.8;
         end;
    end;
end;

4. Теперь смотрим на rb7 - может быть только 3:
Код:
procedure TForm2.RadioGroup7Click(Sender: TObject);
var
  rb1, rb2, rb4, rb5, rb6, rb7 : Integer;
begin
  rb1 := RadioGroup1.ItemIndex;
  rb2 := RadioGroup2.ItemIndex;
  rb4 := RadioGroup4.ItemIndex;
  rb5 := RadioGroup5.ItemIndex;
  rb6 := RadioGroup6.ItemIndex;
  rb7 := RadioGroup7.ItemIndex;
  if rb1=0 then
    begin
      if rb4=1
        then
          begin		
	if (rb2=5) and (rb5=0) and (rb6=5) and (rb7=0) then a:=20.7;
          end
        else
          begin
	if rb7=3 then
	  begin
	    if (rb2=5) and (rb5=0) and (rb6=4) then a:=2.8;
                 if (rb2=5) and (rb5=0) and (rb6=7) then a:=3.7;
                 if (rb2=5) and (rb5=2) and (rb6=4) then a:=3.3;
                 if (rb2=5) and (rb5=2) and (rb6=7) then a:=4.3;
                 if (rb2=0) and (rb5=1) and (rb6=4) then a:=1;
                 if (rb2=0) and (rb5=2) and (rb6=4) then a:=0.7;
                 if (rb2=6) and (rb5=1) and (rb6=7) then a:=5.4;
                 if (rb2=6) and (rb5=2) and (rb6=7) then a:=3.8;
              end;
         end;
    end;
end;

Ну дальше можно не оптимизировать, уже достаточно читабельно.
А вообще, я бы скорее подумал как вообще это переделать, а то как-то странно выглядит - из кучи возможных вариантов ты рассматриваешь только 9. А с остальными что? Тут скорее надо менять интерфейс. Но условие задачи не описано.
Ответить с цитированием