bueno bueno. me reporto por aquí para pedir el análizis de los expertos.
estube creando un programita en autoit. uno básico según yo que es una simple calculadora y quiero ver que me disen.
nota. todo lo escribí yo. solo chat gpt me dio una ayudita al escribir algunas funciones y correjir algunos errores.
sin más dejo código.
Region ;**** Directives created by AutoIt3Wrapper_GUI ****
AutoIt3Wrapper_UseUpx=y
AutoIt3Wrapper_Compile_Both=y
AutoIt3Wrapper_UseX64=y
AutoIt3Wrapper_Change2CUI=y
AutoIt3Wrapper_Res_Description=una calculadora simple y fácil de usar para hacer cálculos de una forma rápida y sin complicaciones
AutoIt3Wrapper_Res_Fileversion=1.1
AutoIt3Wrapper_Res_ProductName=jg calc
AutoIt3Wrapper_Res_CompanyName=sonido web studios 2024
AutoIt3Wrapper_Res_SaveSource=y
AutoIt3Wrapper_Res_Language=14346
AutoIt3Wrapper_AU3Check_Stop_OnWarning=y
AutoIt3Wrapper_Run_Stop_OnError=y
AutoIt3Wrapper_Run_Tidy=y
AutoIt3Wrapper_Run_Au3Stripper=y
EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
include <GUIConstantsEx.au3>
include <MsgBoxConstants.au3>
; Crear la ventana principal
GUICreate("JG Calc", 250, 400)
; Crear el campo de texto
$input = GUICtrlCreateInput("", 10, 10, 230, 40)
; Crear los botones numéricos
$btn1 = GUICtrlCreateButton("1", 10, 60, 50, 50)
$btn2 = GUICtrlCreateButton("2", 70, 60, 50, 50)
$btn3 = GUICtrlCreateButton("3", 130, 60, 50, 50)
$btn4 = GUICtrlCreateButton("4", 10, 120, 50, 50)
$btn5 = GUICtrlCreateButton("5", 70, 120, 50, 50)
$btn6 = GUICtrlCreateButton("6", 130, 120, 50, 50)
$btn7 = GUICtrlCreateButton("7", 10, 180, 50, 50)
$btn8 = GUICtrlCreateButton("8", 70, 180, 50, 50)
$btn9 = GUICtrlCreateButton("9", 130, 180, 50, 50)
$btn0 = GUICtrlCreateButton("0", 70, 240, 50, 50)
$btnDec = GUICtrlCreateButton(".", 130, 240, 50, 50)
; Crear botones de operación
$btnPlus = GUICtrlCreateButton("+", 190, 60, 50, 50)
$btnMinus = GUICtrlCreateButton("-", 190, 120, 50, 50)
$btnMult = GUICtrlCreateButton("*", 190, 180, 50, 50)
$btnDiv = GUICtrlCreateButton("/", 190, 240, 50, 50)
$btnEqual = GUICtrlCreateButton("=", 190, 300, 50, 50)
$btnClear = GUICtrlCreateButton("C", 10, 240, 50, 50)
; Crear botones de funciones adicionales
$btnSin = GUICtrlCreateButton("sin", 10, 300, 50, 50)
$btnCos = GUICtrlCreateButton("cos", 70, 300, 50, 50)
$btnTan = GUICtrlCreateButton("tan", 130, 300, 50, 50)
$btnSqrt = GUICtrlCreateButton("v", 10, 360, 50, 50)
$btnExp = GUICtrlCreateButton("^", 70, 360, 50, 50)
; Crear botón para mostrar el historial
$btnHistory = GUICtrlCreateButton("Historial", 10, 400, 100, 30)
; Mostrar la ventana
GUISetState(@SW_SHOW)
; Variables globales
Global $currentInput = ""
Global $history = ""
; Bucle principal
While 1
$msg = GUIGetMsg()
Select
Case $msg = $GUI_EVENT_CLOSE
ExitLoop
Case $msg = $btn1
GUICtrlSetData($input, GUICtrlRead($input) & "1")
Case $msg = $btn2
GUICtrlSetData($input, GUICtrlRead($input) & "2")
Case $msg = $btn3
GUICtrlSetData($input, GUICtrlRead($input) & "3")
Case $msg = $btn4
GUICtrlSetData($input, GUICtrlRead($input) & "4")
Case $msg = $btn5
GUICtrlSetData($input, GUICtrlRead($input) & "5")
Case $msg = $btn6
GUICtrlSetData($input, GUICtrlRead($input) & "6")
Case $msg = $btn7
GUICtrlSetData($input, GUICtrlRead($input) & "7")
Case $msg = $btn8
GUICtrlSetData($input, GUICtrlRead($input) & "8")
Case $msg = $btn9
GUICtrlSetData($input, GUICtrlRead($input) & "9")
Case $msg = $btn0
GUICtrlSetData($input, GUICtrlRead($input) & "0")
Case $msg = $btnDec
If Not StringRight(GUICtrlRead($input), 1) = "." Then
GUICtrlSetData($input, GUICtrlRead($input) & ".")
EndIf
Case $msg = $btnPlus
AddOperator("+")
Case $msg = $btnMinus
AddOperator("-")
Case $msg = $btnMult
AddOperator("*")
Case $msg = $btnDiv
AddOperator("/")
Case $msg = $btnClear
GUICtrlSetData($input, "")
Case $msg = $btnEqual
$expression = GUICtrlRead($input)
; Validación de la entrada
If StringInStr($expression, "..") Then
MsgBox($MB_ICONERROR, "Error", "Dos puntos decimales consecutivos no son válidos.")
ElseIf StringRight($expression, 1) = "+" Or StringRight($expression, 1) = "-" Or StringRight($expression, 1) = "*" Or StringRight($expression, 1) = "/" Then
MsgBox($MB_ICONERROR, "Error", "No puedes terminar la expresión con un operador.")
ElseIf StringRegExp($expression, "^[0-9.+-*/()]+$") Then
$result = Execute($expression)
If @error Then
MsgBox($MB_ICONERROR, "Error", "Operación inválida.")
Else
GUICtrlSetData($input, $result)
$history &= $expression & " = " & $result & @CRLF
EndIf
Else
MsgBox($MB_ICONERROR, "Error", "Entrada inválida.")
EndIf
Case $msg = $btnSin
GUICtrlSetData($input, GUICtrlRead($input) & "sin(")
Case $msg = $btnCos
GUICtrlSetData($input, GUICtrlRead($input) & "cos(")
Case $msg = $btnTan
GUICtrlSetData($input, GUICtrlRead($input) & "tan(")
Case $msg = $btnSqrt
GUICtrlSetData($input, GUICtrlRead($input) & "sqrt(")
Case $msg = $btnExp
GUICtrlSetData($input, GUICtrlRead($input) & "^")
Case $msg = $btnHistory ; Mostrar historial
Local $historyGUI = GUICreate("Historial", 250, 400)
Local $historyEdit = GUICtrlCreateEdit($history, 10, 10, 230, 350)
Local $btnCloseHistory = GUICtrlCreateButton("Cerrar", 75, 370, 100, 30)
GUISetState(@SW_SHOW, $historyGUI)
While 1
Local $historyMsg = GUIGetMsg()
If $historyMsg = $GUI_EVENT_CLOSE Or $historyMsg = $btnCloseHistory Then
GUIDelete($historyGUI)
ExitLoop
EndIf
WEnd
EndSelect
WEnd
; Cerrar la ventana principal
GUIDelete()
; Función para agregar operadores evitando duplicados
Func AddOperator($operator)
Local $lastChar = StringRight(GUICtrlRead($input), 1)
If Not StringRegExp($lastChar, "[+-*/.]") Then
GUICtrlSetData($input, GUICtrlRead($input) & $operator)
EndIf
EndFunc