Что нового

[Математика] простейший калькулятор с неограниченным кол-вом повторов(нужна помощь)

Trans

Знающий
Сообщения
257
Репутация
6
Ребят, помогите сделать такой калькулятор, который будет выполнять функцию определённое кол-во раз (значение записывается в GUICtrlCreateInput)

Вот сделал наброски:

Код:
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <StaticConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Form1", 172, 120, 192, 124)
$Input1 = GUICtrlCreateInput("Первое число", 32, 16, 105, 21)
$Input2 = GUICtrlCreateInput("Второе число", 32, 40, 105, 21)
$Input3 = GUICtrlCreateInput("Кол-Во", 32, 80, 49, 21)
$Button1 = GUICtrlCreateButton("Button1", 88, 80, 49, 25)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
		Case $Button1
			_Calc()
			_GUI()
	EndSwitch
WEnd

Func _Calc()
	$Inputcacl1 = GUICtrlRead($Input1)/2+GUICtrlRead($Input1)
	$Inputcacl2 = GUICtrlRead($Input2)/5+GUICtrlRead($Input2)
        $cacl_Input1 = GUICtrlRead($Input1)/2
Global $iSumma
	$iSumma = $cacl_Input1 & @LF & $Inputcacl1 & @LF & $Inputcacl2
EndFunc

Func _GUI()
$Form2 = GUICreate("Form1", 380, 185, 192, 124)
$Label1 = GUICtrlCreateLabel("Label1", 0, 0, 380, 185, BitOR($SS_SUNKEN,$WS_VSCROLL))
GUICtrlSetData ($Label1, $iSumma)
GUISetState(@SW_SHOW)
EndFunc


Примечания:
1 - Надо чтоб он работал с целыми числами (округлял до целого числа)
2 - Если в поле $Input3 введено число (любое число от 1 до 100), то скрипт должен выполнять ту же самую функцию, только из новых значений
 

Crafter

Новичок
Сообщения
6
Репутация
3
Непонятно по какому алгоритму функция _Calc считает, опиши подробней.
Функцию округления выполняют Round() - стандартно, Floor() - до меньшего, Ceiling() - до большего.
2 - Если в поле $Input3 введено число (любое число от 1 до 100), то скрипт должен выполнять ту же самую функцию, только из новых значений
Что имеется ввиду под новыми значениями?
 
Автор
T

Trans

Знающий
Сообщения
257
Репутация
6
Функция Calc считает так:
Первое число ($Inputcacl1): прибавляет 50% к значению (100*1.5=150)
Второе число ($Inputcacl2): прибавляет 20% к значению (100*1.2=120)
Третье число ($cacl_Input1): вычитает 50% от значения (100/2=50)


Crafter [?]
Что имеется ввиду под новыми значениями?

пример:
в $Input1 введём 50
в $Input2 введём 7
в $Input3 введём значение 5

и скрипт должен выдать такой результат:

Ответ ($cacl_Input1): 25
Ответ ($Inputcacl1): 75
Ответ ($Inputcacl2): 8

Следующий ответ ($calc_Input1): 38
Следующий ответ ($Inputcacl1): 113
Следующий ответ ($Inputcacl2): 10

Следующий ответ ($calc_Input1): 57
Следующий ответ ($Inputcacl1): 170
Следующий ответ ($Inputcacl2): 12

Следующий ответ ($calc_Input1): 85
Следующий ответ ($Inputcacl1): 255
Следующий ответ ($Inputcacl2): 14

Следующий ответ ($calc_Input1): 128
Следующий ответ ($Inputcacl1): 383
Следующий ответ ($Inputcacl2): 17

и тд...
 

Crafter

Новичок
Сообщения
6
Репутация
3
Если:
Третье число ($cacl_Input1): вычитает 50% от значения (100/2=50)
то как?:
Ответ ($cacl_Input1): 25
...
Следующий ответ ($calc_Input1): 38
....
Следующий ответ ($calc_Input1): 57

А вообще под твой запрос:
Код:
Func _Calc()
	$InputVar1=Round(GUICtrlRead($Input1))
	$InputVar2=Round(GUICtrlRead($Input2))
    $Inputcacl1 = Round($InputVar1/2+$InputVar1)
    $Inputcacl2 = Round($InputVar2/5+$InputVar2)
	$cacl_Input1 = Round(GUICtrlRead($Input1)/2)
    $iSumma = $cacl_Input1 & @LF & $Inputcacl1 & @LF & $Inputcacl2
	MsgBox(0,"",$iSumma)
	$Var=GUICtrlRead($Input3)
	if $var>1 then 
		For $i=1 to $var
			$Inputcacl1 =Round($Inputcacl1/2+$Inputcacl1)
			$Inputcacl2 = Round($Inputcacl2/5+$Inputcacl2)
			$cacl_Input1 = Round($cacl_Input1/2)
			$iSumma = $cacl_Input1 & @LF & $Inputcacl1 & @LF & $Inputcacl2
			MsgBox(0,$var,$iSumma)
		Next
	EndIf
EndFunc

Твою функцию gui я не задействовал, и переменную $iSumma обьявил глобально вне функции
 
Автор
T

Trans

Знающий
Сообщения
257
Репутация
6
Crafter [?]
А вообще под твой запрос:
считает почти как надо, только есть 2 проблемы:
Первая: если в поле *кол-во* указать значение больше 1, то у $cacl_Input1 результат будет не верный, (как я понял число каджый раз уменьшается)
Вторая: надо чтоб все результаты выводились на GUI, а не один так, как это сейчас:(


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




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

С одной проблемой разобрался, теперь осталось решить другую проблему, как бы заставить окно расписывать каждое вычесление, чтоб было таким вариантом:
Ответ ($cacl_Input1): 25
Ответ ($Inputcacl1): 75
Ответ ($Inputcacl2): 8

Следующий ответ ($calc_Input1): 38
Следующий ответ ($Inputcacl1): 113
Следующий ответ ($Inputcacl2): 10

Следующий ответ ($calc_Input1): 57
Следующий ответ ($Inputcacl1): 170
Следующий ответ ($Inputcacl2): 12

Следующий ответ ($calc_Input1): 85
Следующий ответ ($Inputcacl1): 255
Следующий ответ ($Inputcacl2): 14

Следующий ответ ($calc_Input1): 128
Следующий ответ ($Inputcacl1): 383
Следующий ответ ($Inputcacl2): 17


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

Crafter
Не могу понять, почему у вас всё нормально, а у меня нет...

Код:
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <StaticConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Form1", 240, 190, 192, 124)
$Input1 = GUICtrlCreateInput("Первое число", 130, 10, 105, 21)
$Input2 = GUICtrlCreateInput("Второе число", 130, 34, 105, 21)
$Input3 = GUICtrlCreateInput("Кол-Во", 130, 58, 49, 21)
$Button1 = GUICtrlCreateButton("Посчитать", 130, 87, 107, 23)
$Label1 = GUICtrlCreateLabel("", 0, 110, 242, 180, BitOR($SS_SUNKEN,$WS_VSCROLL))
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
		Case $Button1
			_Calc()

	EndSwitch
WEnd

Func _Calc()
	Global $iSumma
    $InputVar1=Round(GUICtrlRead($Input1))
    $InputVar2=Round(GUICtrlRead($Input2))
    $Inputcacl1 = Round($InputVar1/2+$InputVar1)
    $Inputcacl2 = Round($InputVar2/5+$InputVar2)
    $cacl_Input1 = Round(GUICtrlRead($Input1)/2)
    $Var=GUICtrlRead($Input3)
            $iSumma = $cacl_Input1 & @LF & $Inputcacl1 & @LF & $Inputcacl2
    if $var>1 then
        For $i=1 to $var
            $Inputcacl1 =Round($Inputcacl1/2+$Inputcacl1)
            $Inputcacl2 = Round($Inputcacl2/5+$Inputcacl2)
            $cacl_Input1 = Round($cacl_Input1/2+$cacl_Input1)
             $iSumma = $cacl_Input1 & @LF & $Inputcacl1 & @LF & $Inputcacl2
        Next
    EndIf
EndFunc
 

Crafter

Новичок
Сообщения
6
Репутация
3
1: Что именно тебе нужно делать с числом $CaclInput? здесь заявлено уменьшение:
Третье число ($cacl_Input1): вычитает 50% от значения (100/2=50)
а в примере:
Ответ ($cacl_Input1): 25
Ответ ($Inputcacl1): 75
Ответ ($Inputcacl2): 8

Следующий ответ ($calc_Input1): 38
Следующий ответ ($Inputcacl1): 113
Следующий ответ ($Inputcacl2): 10

Следующий ответ ($calc_Input1): 57
Следующий ответ ($Inputcacl1): 170
Следующий ответ ($Inputcacl2): 12

Следующий ответ ($calc_Input1): 85
Следующий ответ ($Inputcacl1): 255
Следующий ответ ($Inputcacl2): 14

Следующий ответ ($calc_Input1): 128
Следующий ответ ($Inputcacl1): 383
Следующий ответ ($Inputcacl2): 17
это число увеличивается на 50%.
2:
Код:
Func _Calc()
    Global $iSumma
    $InputVar1=Round(GUICtrlRead($Input1))
    $InputVar2=Round(GUICtrlRead($Input2))
    $Inputcacl1 = Round($InputVar1/2+$InputVar1)
    $Inputcacl2 = Round($InputVar2/5+$InputVar2)
    $cacl_Input1 = Round(GUICtrlRead($Input1)/2)  ; <== ЗДесь одно выражение
    $Var=GUICtrlRead($Input3)
            $iSumma = $cacl_Input1 & @LF & $Inputcacl1 & @LF & $Inputcacl2
    if $var>1 then
        For $i=1 to $var
            $Inputcacl1 =Round($Inputcacl1/2+$Inputcacl1)
            $Inputcacl2 = Round($Inputcacl2/5+$Inputcacl2)
            $cacl_Input1 = Round($cacl_Input1/2+$cacl_Input1) ;<= а здесь другое!
             $iSumma = $cacl_Input1 & @LF & $Inputcacl1 & @LF & $Inputcacl2
        Next
    EndIf
EndFunc
 

Crafter

Новичок
Сообщения
6
Репутация
3
3: Вариант корявенький , но пробуй и допиливай под себя :smile: :
Код:
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <StaticConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Form1", 172, 120, 192, 124)
$Input1 = GUICtrlCreateInput("Первое число", 32, 16, 105, 21)
$Input2 = GUICtrlCreateInput("Второе число", 32, 40, 105, 21)
$Input3 = GUICtrlCreateInput("Кол-Во", 32, 80, 49, 21)
$Button1 = GUICtrlCreateButton("Button1", 88, 80, 49, 25)
GUICtrlSetState($Button1, $GUI_DEFBUTTON)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

Global $iSumma[32][4]
While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit
        Case $Button1
            _Gui(_Calc())
            ;_GUI()
    EndSwitch
WEnd

Func _Calc()
	$InputVar1=Round(GUICtrlRead($Input1))
	$InputVar2=Round(GUICtrlRead($Input2))
    $Inputcacl1 = Round($InputVar1/2+$InputVar1)
    $Inputcacl2 = Round($InputVar2/5+$InputVar2)
	$cacl_Input1 = Round(GUICtrlRead($Input1)/2)
    $iSumma[0][0] = $cacl_Input1
	$ISumma[0][1] = $Inputcacl1
	$iSumma[0][2] = $Inputcacl2
	;MsgBox(0,"",$iSumma)
	$iKol=GUICtrlRead($Input3)
	if $iKol>1 then 
		For $i=1 to $iKol
			$Inputcacl1 =Round($Inputcacl1/2+$Inputcacl1)
			$Inputcacl2 = Round($Inputcacl2/5+$Inputcacl2)
			$cacl_Input1 = Round($cacl_Input1/2)
			$iSumma[$i][0] = $cacl_Input1
			$ISumma[$i][1] = $Inputcacl1
			$iSumma[$i][2] = $Inputcacl2
			;MsgBox(0,$var,$iSumma)
		Next
	EndIf
	Return $iKol
EndFunc

Func _GUI($iKOl)
$Form2 = GUICreate("Form1")
$Label1 = GUICtrlCreateLabel("Label1", 0, 0, 400, 600, BitOR($SS_SUNKEN,$WS_VSCROLL))
$Result="Ответ ($cacl_Input1): " & $Isumma[0][0] & @CRLF & "Ответ ($Inputcacl1): " & $Isumma[0][1] & @CRLF & "Ответ ($Inputcacl2): " & $Isumma[0][2] & @CRLF
For $i=1 to $IKol
	$Result=$Result & @CRLF & "Следующий ответ ($cacl_Input1): " & $Isumma[$i][0] & @CRLF & "Следующий ответ ($Inputcacl1): " & $Isumma[$i][1] & @CRLF & "Следующий ответ ($Inputcacl2): " & $Isumma[$i][2] & @CRLF
Next
GUICtrlSetData ($Label1, $Result)
GUISetState(@SW_SHOW)
EndFunc
 
Автор
T

Trans

Знающий
Сообщения
257
Репутация
6
Crafter [?]
: Вариант корявенький , но пробуй и допиливай под себя :

Не много поковырял его, и довёл до нужно мне результата:smile: Тема решина, держи плюс:smile:
 
Верх