Что нового

[Математика] сложение/умножение двух чисел

Шурик

Новичок
Сообщения
17
Репутация
1
всем добрый день.
уважаемые форумчане, я новичёк в этом деле и про autoit узнал недавно. сам электрик, и вот начал немного ломать голову т.к. появилась потребность в некоторых вещах. книги и курсы уже не для меня т.к. привык осознавать всё на практике. вот и поставил небольшую задачу для написания небольшой программы что-бы немного познать смысл работы примеров. кто-то скажет читай, или ищи. да я смотрел несколько тем на основе "простой калькулятор" , "маленький калькулятор" и т.д. и могу сказать так что и сам эти примеры могу создать в екселе за пару минут.
вопрос такой - незнаю как прикрутить решение. помогите на примере.
сильно тапками не кидайтесь. заранее спасибо.
Код:
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Form1", 441, 250, 192, 114)
$Input1 = GUICtrlCreateInput("200", 32, 40, 65, 21)
$Input2 = GUICtrlCreateInput("150", 120, 40, 65, 21)
$Input3 = GUICtrlCreateInput("2,6", 208, 40, 65, 21)
$Input4 = GUICtrlCreateInput("", 304, 40, 105, 21)
$Input5 = GUICtrlCreateInput("400", 32, 104, 65, 21)
$Input6 = GUICtrlCreateInput("40", 120, 104, 65, 21)
$Label1 = GUICtrlCreateLabel("число 2", 32, 80, 42, 17)
$Label2 = GUICtrlCreateLabel("проценты", 120, 16, 53, 17)
$Label3 = GUICtrlCreateLabel("проценты", 128, 80, 53, 17)
$Label4 = GUICtrlCreateLabel("число 1", 32, 16, 42, 17)
$Label5 = GUICtrlCreateLabel("ответ", 304, 16, 32, 17)
$Label6 = GUICtrlCreateLabel("ответ", 304, 80, 32, 17)
$Label7 = GUICtrlCreateLabel("+", 104, 104, 10, 17)
$Label8 = GUICtrlCreateLabel("+", 104, 40, 10, 17)
$Button1 = GUICtrlCreateButton("ok", 32, 144, 379, 25)
$Input7 = GUICtrlCreateInput("2,4", 208, 104, 65, 21)
$Input8 = GUICtrlCreateInput("", 304, 104, 105, 21)
$Label9 = GUICtrlCreateLabel("умножить", 208, 80, 54, 17)
$Label10 = GUICtrlCreateLabel("умножить", 208, 16, 54, 17)
$Label11 = GUICtrlCreateLabel("200+150%=300   /   300*2,6=780", 56, 192, 162, 17)
$Label12 = GUICtrlCreateLabel("400+40%=560   /   560*2,4=1344", 56, 216, 162, 17)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

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

	EndSwitch
WEnd
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,670
Репутация
2,473
Код:
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>

$Form1 = GUICreate("Form1", 441, 250, 192, 114)
$Input1 = GUICtrlCreateInput("200", 32, 40, 65, 21)
$Input2 = GUICtrlCreateInput("150", 120, 40, 65, 21)
$Input3 = GUICtrlCreateInput("2,6", 208, 40, 65, 21)
$Input4 = GUICtrlCreateInput("", 304, 40, 105, 21)
$Input5 = GUICtrlCreateInput("400", 32, 104, 65, 21)
$Input6 = GUICtrlCreateInput("40", 120, 104, 65, 21)
$Label1 = GUICtrlCreateLabel("число 2", 32, 80, 42, 17)
$Label2 = GUICtrlCreateLabel("проценты", 120, 16, 53, 17)
$Label3 = GUICtrlCreateLabel("проценты", 128, 80, 53, 17)
$Label4 = GUICtrlCreateLabel("число 1", 32, 16, 42, 17)
$Label5 = GUICtrlCreateLabel("ответ", 304, 16, 32, 17)
$Label6 = GUICtrlCreateLabel("ответ", 304, 80, 32, 17)
$Label7 = GUICtrlCreateLabel("+", 104, 104, 10, 17)
$Label8 = GUICtrlCreateLabel("+", 104, 40, 10, 17)
$Button1 = GUICtrlCreateButton("ok", 32, 144, 379, 25)
$Input7 = GUICtrlCreateInput("2,4", 208, 104, 65, 21)
$Input8 = GUICtrlCreateInput("", 304, 104, 105, 21)
$Label9 = GUICtrlCreateLabel("умножить", 208, 80, 54, 17)
$Label10 = GUICtrlCreateLabel("умножить", 208, 16, 54, 17)
$Label11 = GUICtrlCreateLabel("200+150%=500  /  500*2,6=1300", 56, 192, 162, 17)
$Label12 = GUICtrlCreateLabel("400+40%=560  /  560*2,4=1344", 56, 216, 162, 17)
GUISetState(@SW_SHOW)

While 1
	Switch GUIGetMsg()
		Case $GUI_EVENT_CLOSE
			Exit
		Case $Button1
			$iNum = GUICtrlRead($Input1)
			$iPrec = GUICtrlRead($Input2)
			$iMultip = GUICtrlRead($Input3)
			
			$sResult = ($iNum + ($iNum * $iPrec / 100)) * StringReplace($iMultip, ',', '.')
			GUICtrlSetData($Input4, $sResult)
			
			$iNum = GUICtrlRead($Input5)
			$iPrec = GUICtrlRead($Input6)
			$iMultip = GUICtrlRead($Input7)
			
			$sResult = ($iNum + ($iNum * $iPrec / 100)) * StringReplace($iMultip, ',', '.')
			GUICtrlSetData($Input8, $sResult)
	EndSwitch
WEnd


У вас была небольшая ошибка в шаблоне внизу (200 + 150% это 500 а не 300 :smile:).
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,320
Шурик,

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


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

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,670
Репутация
2,473
А ещё вот так можно (чтобы уменьшить число строк кода):

Код:
...

		Case $Button1
			For $i = 1 To 8 Step 4
				$iNum = GUICtrlRead(Eval('Input' & $i))
				$iPrec = GUICtrlRead(Eval('Input' & $i + 1))
				$iMultip = GUICtrlRead(Eval('Input' & $i + 2))
				
				$sResult = ($iNum + ($iNum * $iPrec / 100)) * StringReplace($iMultip, ',', '.')
				GUICtrlSetData(Eval('Input' & $i + 3), $sResult)
			Next

...
 
Автор
Ш

Шурик

Новичок
Сообщения
17
Репутация
1
CreatoR сказал(а):
А ещё вот так можно (чтобы уменьшить число строк кода):

Код:
...

		Case $Button1
			For $i = 1 To 8 Step 4
				$iNum = GUICtrlRead(Eval('Input' & $i))
				$iPrec = GUICtrlRead(Eval('Input' & $i + 1))
				$iMultip = GUICtrlRead(Eval('Input' & $i + 2))
				
				$sResult = ($iNum + ($iNum * $iPrec / 100)) * StringReplace($iMultip, ',', '.')
				GUICtrlSetData(Eval('Input' & $i + 3), $sResult)
			Next

...
огромное спасибо. пойду на этом примере начинать познавать Autoit.


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

на примере выше пытаюсь закрыть input строкой
Код:
$Input4 = GUICtrlCreateInput("", 304, 40, 105, 21)
GUICtrlSetState(-1, $GUI_DISABLE)

и ответ в нём еле виден. подскажите что не так?
21-11-2015%2014-56-55.jpg
 

Dm666

Осваивающий
Сообщения
221
Репутация
48
Использовать
Код:
GUICtrlCreateLabel("", 304, 40, 105, 21, $SS_SUNKEN)
вместо Input. И не надо будет делать GUI_DISABLE.
 
Автор
Ш

Шурик

Новичок
Сообщения
17
Репутация
1
Dm666 сказал(а):
Использовать
Код:
GUICtrlCreateLabel("", 304, 40, 105, 21, $SS_SUNKEN)
вместо Input. И не надо будет делать GUI_DISABLE.
спасибо. тогда второй вариант решения не подходит. или придётся все поля ввода на Label переделывать (не пробовал).
 

joiner

Модератор
Локальный модератор
Сообщения
3,465
Репутация
609
Код:
GUICtrlCreateInput("", 304, 40, 105, 21, $ES_READONLY)
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,670
Репутация
2,473
Шурик [?]
второй вариант решения не подходит
Подходит, просто нужно имена переменных поменять.

[?]
спасибо. то что надо.
А ещё можно сделать его белым, тогда будет выглядеть также:
Код:
GUICtrlSetBkColor($Input4, 0xFFFFFF)


Я бы вообще делал так (массивы):
Код:
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>

;--------- Данные задаются в этом блоке -------------

Global $aNums[2] = [200, 400] 			;Числа
Global $aPrecents[2] = [150, 40] 		;Проценты
Global $aMultipliers[2] = [2.6, 2.4] 	;Множители

;----------------------------------------------------

Global $aiInputs[8]
Global $iTop = 20

Global $hForm = GUICreate('Form', 440, 250)

For $i = 0 To 1
	GUICtrlCreateLabel('Число ' & $i + 1 & ':', 30, $iTop)
	$aiInputs[$i * 4] = GUICtrlCreateInput($aNums[$i], 30, $iTop + 20, 65, 20)
	GUICtrlCreateLabel('+', 105, $iTop + 22)
	GUICtrlCreateLabel('Проценты:', 120, $iTop, 53, 17)
	$aiInputs[$i * 4 + 1] = GUICtrlCreateInput($aPrecents[$i], 120, $iTop + 20, 65, 20)
	GUICtrlCreateLabel('*', 195, $iTop + 25)
	GUICtrlCreateLabel('Множитель:', 210, $iTop)
	$aiInputs[$i * 4 + 2] = GUICtrlCreateInput($aMultipliers[$i], 208, $iTop + 20, 65, 20)
	GUICtrlCreateLabel('Результат:', 300, $iTop + 20)
	$aiInputs[$i * 4 + 3] = GUICtrlCreateInput('', 300, $iTop + 20, 105, 20, BitOR($GUI_SS_DEFAULT_INPUT, $ES_READONLY))
	GUICtrlSetBkColor(-1, 0xFFFFF0)
	
	$iTop += 60
Next

$OK_Button = GUICtrlCreateButton('ОК', 30, $iTop + 5, 375, 25, $BS_DEFPUSHBUTTON)
GUICtrlSetState(-1, $GUI_FOCUS)

GUICtrlCreateLabel('200+150%=500  /  500*2,6=1300', 20, 190, 400, 20, $SS_CENTER)
GUICtrlCreateLabel('400+40%=560  /  560*2,4=1344', 20, 210, 400, 20, $SS_CENTER)

GUISetState(@SW_SHOW, $hForm)

While 1
    Switch GUIGetMsg()
        Case $GUI_EVENT_CLOSE
            Exit
		Case $OK_Button
			For $i = 0 To 1
				$iNum = Number(GUICtrlRead($aiInputs[$i * 4]))
				$iPrec = Number(GUICtrlRead($aiInputs[$i * 4 + 1]))
				$iMultip = Number(StringReplace(GUICtrlRead($aiInputs[$i * 4 + 2]), ',', '.'))
				$sResult = ($iNum + ($iNum * $iPrec / 100)) * $iMultip
				
				GUICtrlSetData($aiInputs[$i * 4 + 3], $sResult)
			Next
    EndSwitch
WEnd
 
Верх