|  | 
 
 | 
| 
 | |||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны | 
|  | 
|  | Опции темы | Поиск в этой теме | Опции просмотра | 
|  | 
| 
			 
			#1  
			
			
			
			
		 | |||
| 
 | |||
|  Как написать короче и оптимальнее А можно ли сократить данный код? Код: procedure TForm2.RadioGroup7Click(Sender: TObject); begin if (RadioGroup1.ItemIndex=0) and (RadioGroup2.ItemIndex=5) and (RadioGroup4.ItemIndex=0) and (RadioGroup5.ItemIndex=0) and (RadioGroup6.ItemIndex=4) and (RadioGroup7.ItemIndex=3) then a:=2.8; if (RadioGroup1.ItemIndex=0) and (RadioGroup2.ItemIndex=5) and (RadioGroup4.ItemIndex=0) and (RadioGroup5.ItemIndex=0) and (RadioGroup6.ItemIndex=7) and (RadioGroup7.ItemIndex=3) then a:=3.7; if (RadioGroup1.ItemIndex=0) and (RadioGroup2.ItemIndex=5) and (RadioGroup4.ItemIndex=0) and (RadioGroup5.ItemIndex=2) and (RadioGroup6.ItemIndex=4) and (RadioGroup7.ItemIndex=3) then a:=3.3; if (RadioGroup1.ItemIndex=0) and (RadioGroup2.ItemIndex=5) and (RadioGroup4.ItemIndex=0) and (RadioGroup5.ItemIndex=2) and (RadioGroup6.ItemIndex=7) and (RadioGroup7.ItemIndex=3) then a:=4.3; if (RadioGroup1.ItemIndex=0) and (RadioGroup2.ItemIndex=5) and (RadioGroup4.ItemIndex=1) and (RadioGroup5.ItemIndex=0) and (RadioGroup6.ItemIndex=5) and (RadioGroup7.ItemIndex=0) then a:=20.7; if (RadioGroup1.ItemIndex=0) and (RadioGroup2.ItemIndex=0) and (RadioGroup4.ItemIndex=0) and (RadioGroup5.ItemIndex=1) and (RadioGroup6.ItemIndex=4) and (RadioGroup7.ItemIndex=3) then a:=1; if (RadioGroup1.ItemIndex=0) and (RadioGroup2.ItemIndex=0) and (RadioGroup4.ItemIndex=0) and (RadioGroup5.ItemIndex=2) and (RadioGroup6.ItemIndex=4) and (RadioGroup7.ItemIndex=3) then a:=0.7; if (RadioGroup1.ItemIndex=0) and (RadioGroup2.ItemIndex=6) and (RadioGroup4.ItemIndex=0) and (RadioGroup5.ItemIndex=1) and (RadioGroup6.ItemIndex=7) and (RadioGroup7.ItemIndex=3) then a:=5.4; if (RadioGroup1.ItemIndex=0) and (RadioGroup2.ItemIndex=6) and (RadioGroup4.ItemIndex=0) and (RadioGroup5.ItemIndex=2) and (RadioGroup6.ItemIndex=7) and (RadioGroup7.ItemIndex=3) then a:=3.8; end; | 
| 
			 
			#2  
			
			
			
			
		 | ||||
| 
 | ||||
|   Да. Можно. | 
| 
			 
			#3  
			
			
			
			
		 | |||
| 
 | |||
|   А как можно? | 
| 
			 
			#4  
			
			
			
			
		 | |||
| 
 | |||
|   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. А с остальными что? Тут скорее надо менять интерфейс. Но условие задачи не описано. | 
| 
			 
			#5  
			
			
			
			
		 | |||
| 
 | |||
|   ну у меня 7 RadioGroup, в каждой от 4 до 20 строк значений.... и выложил я лишь маленькую часть там куча всевозможных выборов((( да еще и ошибки выводятся если не так выбрал....или скрываются те строки которые нельзя выбрать... но гдет допустил ошибку и пересматривать 400 строк не оч, хочу написать по новой, и вот думаю как это все сократить можно... | 
| 
			 
			#6  
			
			
			
			
		 | ||||
| 
 | ||||
|   Может просто функцию сделать и всех делов?  Код: function ProstoFunction(Idx1,Idx2,Idx4,Idx5,Idx6,Idx7: Integer): Boolean;
begin
 Result := (RadioGroup1.ItemIndex=Idx1)  and (RadioGroup2.ItemIndex=Idx2) and
    (RadioGroup4.ItemIndex=Idx4) and (RadioGroup5.ItemIndex=Idx5) and
    (RadioGroup6.ItemIndex=Idx6) and (RadioGroup7.ItemIndex=Idx7) 
end;Код: If ProstoFunction(0,5,0,0,4,3) then a := 2.8; If ProstoFunction(0,5,0,0,7,3) then a := 3.7; If ProstoFunction(0,5,0,2,4,3) then a := 3.3; If ProstoFunction(0,5,0,2,7,3) then a := 4.3; if ProstoFunction(0,5,1,0,5,0) then a := 20.7; if ProstoFunction(0,0,0,1,4,3) then a := 1; if ProstoFunction(0,0,0,2,4,3) then a := 0.7; if ProstoFunction(0,6,0,1,7,3) then a := 5.4; if ProstoFunction(0,6,0,2,7,3) then a := 3.8; Последний раз редактировалось Страдалецъ, 30.04.2011 в 13:48. |