Что нового

Присвоение переменной математического действия

Ivan4310

Новичок
Сообщения
16
Репутация
0
Версия AutoIt: 3.3.8.1

Описание:

Столкнулся с проблемой,не могу присвоить переменной математическое действие!
к примеру
Код:
$a = 3
$b = 4
$x = *

$otvet=$a&$x&$b

То есть в ответе я хочу получить 3*4=12!
Но это не работает!
Переменные все будут меняться,и умножение может быть делением,сложением и тд. Как сделать присвоить переменной знак математического действия и что бы в переменной $otvet произошло вычисление а не просто написался пример?Если это нельзя сделать простым способом,то может есть какие то более сложные приемы?
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
Предупреждение За нарушение правил форума (пункт В.11):
Любые отрывки AutoIt кода необходимо заключать в тег [autoit]
autoit.gif
(подробнее), а обычный код соответственно в тег [code]
code.gif
(подробнее). Также большие выдержки текста помещайте под тег [spoiler]
spoiler.gif
(подробнее), там где это поддерживается естественно. Как в случае с названием темы, также короткое и эргономичное сообщение привлекает больше внимания, и шансы на получение конкретного ответа увеличиваются.


С уважением, ваш Глобальный модератор.






Добавлено:
Сообщение автоматически объединено:

Еще один ответ до отсутствия реакции на предупреждение и ответивший попадет под наблюдение, а тему закрою. :mad:
 

firex

AutoIT Гуру
Сообщения
943
Репутация
208
Код:
$a = 3
$b = 4
$x = "*"

$otvet = Execute( $a & $x & $b )
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
Ivan4310,
Код:
Local $iFirst = 6, $iSecond = 2, $aSign[4] = ['+', '-', '*', '/'], $iRes, $iRound = 2
;~ первый вариант
For $i = 0 To 3
	$iRes = Execute($iFirst & $aSign[$i] & $iSecond)
	ConsoleWrite(StringFormat('%d %s %d = %d\n', $iFirst, $aSign[$i], $iSecond, $iRes))
Next
ConsoleWrite('---' & @LF)
;~ но я бы сделал примерно так:
For $i = 0 To 3
	$iRes = _Calculation($iFirst, $iSecond, $i, $iRound)
	ConsoleWrite(StringFormat('%.' & Abs($iRound) & 'f %s %.' & Abs($iRound) & 'f = %.' & Abs($iRound) & 'f\n', $iFirst, $aSign[$i], $iSecond, $iRes))
Next
ConsoleWrite('---' & @LF)
$iRound = 0
For $i = 0 To 3
	$iRes = _Calculation($iFirst, $iSecond, $aSign[$i], $iRound)
	ConsoleWrite(StringFormat('%.' & Abs($iRound) & 'f %s %.' & Abs($iRound) & 'f = %.' & Abs($iRound) & 'f\n', $iFirst, $aSign[$i], $iSecond, $iRes))
Next

#cs
	$v_Sign = :
	0 or +	- $i_First + $i_Second
	1 or -	- $i_First - $i_Second
	2 or *	- $i_First * $i_Second
	3 or /	- $i_First / $i_Second
	$i_Round = :
	см. описание к функции Round()
#ce
Func _Calculation($i_First, $i_Second, $v_Sign, $i_Round = 0)
	Local $i_Res

	Switch $v_Sign
		Case 0, '+'
			$i_Res = $i_First + $i_Second
		Case 1, '-'
			$i_Res = $i_First - $i_Second
		Case 2, '*'
			$i_Res = $i_First * $i_Second
		Case 3, '/'
			$i_Res = $i_First / $i_Second
		Case Else
			Return SetError(1)
	EndSwitch
	If $i_Round Then $i_Res = Round($i_Res, Abs($i_Round))
	Return $i_Res
EndFunc   ;==>_Calculation
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
madmasles
вы как всегда в своем репертуаре, наваять непонятный код на простую задачу :whistle:
 

Viktor1703

AutoIT Гуру
Сообщения
1,535
Репутация
413
madmasles [?]
Еще один ответ до отсутствия реакции на предупреждение и ответивший попадет под наблюдение, а тему закрою.

Видимо я ответил до того как вы вынесли предупреждение :-X
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
inververs [?]
непонятный код на простую задачу
Что не понятно?


Добавлено:
Сообщение автоматически объединено:

OffTopic:
Viktor1703 [?]
Видимо я ответил до того как вы вынесли предупреждение
Предупреждение появилось в 20:25:45, а Ваш ответ, который я удалил, в 20:25:57.
 

firex

AutoIT Гуру
Сообщения
943
Репутация
208
madmasles [?]
Почему не так? :smile:
Накрутили непонятно для чего конструкций...

Код:
Func _Calculation( $i_First, $i_Second, $s_Operation, $i_Round = 0 )
	Switch $s_Operation
		Case "+"
			$i_First += $i_Second
		Case "-"
			$i_First -= $i_Second
		Case "*"
			$i_First *= $i_Second
		Case "/"
			$i_First /= $i_Second
		Case Else
			Return SetError( 1, 0, 0 )
	EndSwitch
	If $i_Round Then _
		$i_First = Round( $i_First, Abs( $i_Round ) )
		
	Return $i_First
EndFunc
 

Viktor1703

AutoIT Гуру
Сообщения
1,535
Репутация
413
madmasles

Хорошо, модератор всегда прав.... не буду спорить..
 
Верх