Proyecto Final del Seminario de Programación en Python.

Codigo

   1 #!/usr/bin/python
   2 # -*- coding: iso-8859-15 -*-
   3 
   4 """
   5 Calculadora Multifuncional
   6 Autor: Diana Insuasty
   7 Docente: Rodrigo A. Carreño V. (rocarreno)
   8 """
   9 
  10 ################## funciones.py
  11 
  12 import math
  13 class Calculador: #clase Calculador
  14     def suma(self,a,b):
  15         return a+b  #funcion que realiza la suma 
  16     def resta(self,a,b):
  17         return a-b  #funcion que realiza la resta
  18     def multiplica(self,a,b):
  19         return a*b  #funcion que realiza la multiplicacion  
  20     def division(self,a,b):
  21         return a/b  #funcion que realiza la division
  22     def raiz(self,a):
  23         return math.sqrt(a) #funcion que realiza la raiz
  24     def coseno(self,a):
  25         return math.cos(a) #funcion que realiza el coseno 
  26     def seno(self,a):
  27         return math.sin(a) #funcion que realiza la seno 
  28     def senhh(self,a):
  29         return math.sinh(a)#funcion que retorna la hiperbolica de un numero x 
  30     def cosa(self,a):
  31         return math.acos(a)#funcion que realiza el arco coseno de un numero x 
  32     def senoa(self,a):
  33         return math.asin(a)#funcion que realiza el arco seno de un numero x  
  34     def tangente(self,a):
  35         return math.tan(a)#funcion que realiza la tangente de un numero x 
  36     def tangh(self,a):
  37         return math.tanh(a)#funcion que realiza la hiperbolica de un numero x 
  38     def cotangente(self,a):
  39         return math.atan(a)#funcion que realiza el arco tangente de un numero x 
  40     def hipotenusa(self,x,y):
  41         return math.hypot(x,y)#funcion que realiza la hipotenusa de un numero x 
  42     def hiperco(self,a):
  43         return math.acosh(a)#funcion que realiza la hiperbolica de arco coseno de un numero x 
  44     def hipesen(self,a):
  45         return math.asinh(a)#funcion que realiza la hiperbolica de arco seno de un numero x 
  46     def hipetan(self,a):
  47         return math.atanh(a)#funcion que realiza la hiperbolica de arco tangente de un numero x 
  48     def coshh(self,a):
  49         return math.cosh(a)#funcion que realiza la hiperbolica de coseno de un numero x 
  50     def exponencial(self,a):
  51         return math.exp(a)#funcion que retorna el valor exponencial e**x de un numero x 
  52     def logaritmobaseten(self,a):
  53         return math.log10(a)#funcion que realiza el logaritmo en base 10  de un numero x 
  54     def loga(self,a,b):
  55         return math.log(a,b)#funcion que realiza el logaritmo de un numero x 
  56     def valorabsoluto(self,a):
  57         return math.fabs(a) #realiza el valor absoluto de x numero 
  58     def algoceil(self,a):
  59         return math.ceil10(a)#Return the ceiling of x as a float, the smallest integer value greater than or equal to x. 
  60     def valorfloor(self,a):
  61         return math.floor(a)#Return the floor of x as a float, the largest integer value less than or equal to x.
  62     def valorfmod(self,a,b):
  63         return math.fmod(a,b)#retorna el modulo de una division 
  64     def valorfrexp(self,a):
  65         return math.frexp(a)#retorna la mantiza y el exponente de un numero x 
  66     def valorldexp(self,a,b):
  67         return math.ldexp(a,b)#retorna x*(2**i). inverso de la funcion frexp()
  68     def vmodf(self,a):
  69         return math.modf(a)#retorna la parte fraccionaria y entera de un numero x
  70     def potencia (self,x,y):
  71         return math.pow(x,y)#realiza la potencia 
  72     def atann2 (self,x,y):
  73         return math.atan2(x,y)#retorna arcotangente entre (y/x), in radianes
  74     def fce(self,x):
  75         return math.ceil(x)#Return the ceiling of x as a float, the smallest integer value greater than or equal to x.
  76 #######funcion que convierte un angulo x de radianes a grados
  77     def radgra(self,x):
  78         return math.degrees(x)
  79 ########################################################
  80 ########funcion que convierte un angulo x de grados a radianes
  81     def grarad(self,x):
  82         return math.radians(x)
  83 ########################################################
  84 
  85 ################## menuventana.py
  86 
  87 from Tkinter import * #llamo las librerias graficas Tk
  88 import tkSimpleDialog #libreria de almacenamiento de dialogos
  89 import tkMessageBox   #libreria de mensajes
  90 import funciones  #incluyendo el modulo funciones
  91 import math  #libreria matematica
  92 d=funciones.Calculador() #creando objeto para utilizar la Clase Calculador en el modulo funciones
  93 root=Tk()#llamo el constructor de Tk y se lo asigno al objeto root
  94 #funciones
  95 def suma():
  96     a=int(tkSimpleDialog.askstring('Realizando Suma:','Digite un Numero'))#almacena enteros
  97     b=int(tkSimpleDialog.askstring('Realizando Suma:','Digite un Numero'))#almacena enteros
  98     c=d.suma(a,b)#llama a suma y le envia dos paramentros
  99     tkMessageBox.showinfo("Resultado  ",c)
 100 def resta():
 101     a=int(tkSimpleDialog.askstring('Realizando Resta:','Digite un Numero'))#almacena enteros
 102     b=int(tkSimpleDialog.askstring('Realizando Resta:','Digite un Numero'))#almacena enteros
 103     c=d.resta(a,b)#llama a resta y le envia dos paramentros
 104     tkMessageBox.showinfo("Resultado",c)
 105 def division():
 106     a=float(tkSimpleDialog.askstring('Realizando Division:','Digite un Numero'))#almacena float
 107     b=float(tkSimpleDialog.askstring('Realizando Division:','Digite un Numero'))#almacena float
 108     if b==0:    #si b==0 se ejecutara un mensaje de error 
 109         tkMessageBox.showwarning('precaucion:','La Division Sobre Cero no esta Definida')#mensaje de precaucion   print 'Almaceno la cadena: ',a
 110     else:
 111         c=d.division(a,b)#llama a division  y le envia dos paramentros, siempre y cuando b!=0
 112         tkMessageBox.showinfo("Resultado",c)
 113 def multiplicacion():
 114     a=int (tkSimpleDialog.askstring('Realizando Multiplicacion:','Digite un Numero'))#almacena enteros
 115     b=int(tkSimpleDialog.askstring('Realizando Multiplicacion:','Digite un Numero'))#almacena enteros
 116     c=d.multiplica(a,b)#llama a multiplicacion  y le envia dos paramentros
 117     tkMessageBox.showinfo("Resultado",c)
 118 def potenciacion():
 119     a=int(tkSimpleDialog.askstring('Potencia:','Por Favor Digite la base'))#Almacena enteros
 120     b=int(tkSimpleDialog.askstring('Potencia:','Por Favor Digite el exponente'))#Almacena enteros
 121     c=d.potencia(a,b)#llama a potencia y le envia dos paramentros
 122     tkMessageBox.showinfo("Resultado",c)#muestra el resultado en una caja de informacion
 123 def raiz():
 124     a=int(tkSimpleDialog.askstring('Raiz:','Por Favor Digite un Numero'))#almacena enteros
 125     if a<0:
 126         tkMessageBox.showwarning('precaucion:','La Raiz Negativa no esta Definida')#mensaje de precaucion   print 'Almaceno la cadena: ',a
 127     else:
 128         c=d.raiz(a)#llama a raiz y le envia un paramentro
 129         tkMessageBox.showinfo("Resultado",c)
 130 def exponencial():
 131     a=int(tkSimpleDialog.askstring('Exponencial:','Por Favor Digite un Numero'))
 132     c=d.exponencial(a)#llama a exponencial y le envia un paramentro
 133     tkMessageBox.showinfo("Resultado",c)
 134 def coseno():
 135     a=float(tkSimpleDialog.askstring('Coseno:','Por Favor Digite un Numero'))#almacena float
 136     c=d.coseno(a)#llama a coseno y le envia un paramentro
 137     tkMessageBox.showinfo("Resultado",c)
 138 def seno():
 139     a=float(tkSimpleDialog.askstring('Seno:','Por Favor Digite un Numero'))#almacena float
 140     c=d.seno(a)#llama a seno y le envia un paramentro
 141     tkMessageBox.showinfo("Resultado",c)
 142 def tangente():
 143     a=float(tkSimpleDialog.askstring('Tangente:','Por Favor Digite un Numero'))#almacena float
 144     c=d.tangente(a)#llama a tangente y le envia un paramentro
 145     tkMessageBox.showinfo("Resultado",c)
 146 def tangenteh():
 147     a=float(tkSimpleDialog.askstring('Tangente:','Por Favor Digite un Numero'))#almacena float
 148     c=d.tangh(a)#llama a tangh y le envia un paramentro
 149     tkMessageBox.showinfo("Resultado",c)
 150 def cotangente():
 151     a=float(tkSimpleDialog.askstring('Cotangente:','Por Favor Digite un Numero'))#almacena float
 152     c=d.cotangente(a)#llama a cotangente y le envia un paramentro
 153     tkMessageBox.showinfo("Resultado",c)
 154 def arcoseno():
 155     a=float(tkSimpleDialog.askstring('Arcoseno:','Por Favor Digite un Numero'))#almacena float
 156     if(a>1 or a<-1):  #evalua el rango de valores que acepta la funcion cosa
 157         tkMessageBox.showwarning('precaucion:','Digite solo valores entre -1 y 1')#mensaje de precaucion
 158     else:
 159         c=d.cosa(a)#llama a cosa y le envia un paramentro
 160         tkMessageBox.showinfo("Resultado",c)
 161 def arcseno():
 162     a=float(tkSimpleDialog.askstring('Arcoseno:','Por Favor Digite un Numero'))#almacena float
 163     if(a>1 or a<-1):#evalua el rango de valores que acepta la funcion senoa
 164         tkMessageBox.showwarning('precaucion:','Digite solo valores entre -1 y 1')#mensaje de precaucion
 165     else:
 166         c=d.senoa(a)#llama a senoa y le envia un parametro
 167         tkMessageBox.showinfo("Resultado",c)
 168 def hipoten():
 169     a=int(tkSimpleDialog.askstring('','Digite un Numero'))#almacena enteros
 170     b=int(tkSimpleDialog.askstring('','Digite un Numero'))#almacena enteros
 171     c=d.hipotenusa(a,b)#llama a hipotenusa y le envia dos parametros
 172     tkMessageBox.showinfo("Resultado",c)
 173 def pip():
 174     c=math.pi  #llama la funcion pi
 175     tkMessageBox.showinfo("Resultado",c)#muestra el resultado de pi 
 176 def atann2():
 177     a=float(tkSimpleDialog.askstring('','Digite un Numero'))#almacena float
 178     b=float(tkSimpleDialog.askstring('','Digite un Numero'))#almacena float
 179     c=d.atann2(a,b)#llama  atann2 y le envia dos parametros
 180     tkMessageBox.showinfo("Resultado",c)
 181 def funceil():
 182     a=int(tkSimpleDialog.askstring('','Digite un Numero'))#almacena enteros
 183     c=math.ceil(a)#llama a ceil y le envia un parametro
 184     tkMessageBox.showinfo("Resultado",c)
 185 def absoluto():
 186     a=float(tkSimpleDialog.askstring('','Digite un Numero'))#almacena float
 187     c=d.valorabsoluto(a)#llama a valorabsoluto y le envia un parametro
 188     tkMessageBox.showinfo("Resultado",c)
 189 def coseh():
 190     a=float(tkSimpleDialog.askstring('','Digite un Numero'))#almacena float
 191     c=d.coshh(a)#llama a coshh y le envia un parametro
 192     tkMessageBox.showinfo("Resultado",c)
 193 def angrad():
 194     a=float(tkSimpleDialog.askstring('','Digite un Numero'))#almacena enteros
 195     c=d.radgra(a)#llama a radgra y le envia un parametro
 196     tkMessageBox.showinfo("Resultado",c)
 197 def ex():
 198     c=math.e #busca funcion e 
 199     tkMessageBox.showinfo("Resultado",c)#muestra el valor de e 
 200 def vfloor():
 201     a=float(tkSimpleDialog.askstring('','Digite un Numero'))#almacena float
 202     c=d.valorfloor(a)
 203     tkMessageBox.showinfo("Resultado",c)
 204 def vfmod():
 205     a=float(tkSimpleDialog.askstring('','Digite un Numero'))#almacena float
 206     b=float(tkSimpleDialog.askstring('','Digite un Numero'))
 207     c=d.valorfmod(a,b)#llama a valorfmod y le envia dos parametros
 208     tkMessageBox.showinfo("Resultado",c)
 209 def vfrexp():
 210     a=float(tkSimpleDialog.askstring('','Digite un Numero'))#almacena float
 211     c=d.valorfrexp(a)#llama a valorfrexp y le envia un parametro
 212     tkMessageBox.showinfo("Resultado",c)
 213 def vledxp():
 214     a=int(tkSimpleDialog.askstring('','Digite un Numero'))#almacena enteros
 215     b=int(tkSimpleDialog.askstring('','Digite un Numero'))
 216     c=d.valorldexp(a,b)
 217     tkMessageBox.showinfo("Resultado",c)
 218 def logg():
 219     a=int(tkSimpleDialog.askstring('','Digite un Numero'))#almacena enteros
 220     b=int(tkSimpleDialog.askstring('','Digite un Numero'))#almacena enteros
 221     c=d.loga(a,b)#llama a loga y le envia dos parametros
 222     tkMessageBox.showinfo("Resultado",c)
 223 def logg1():
 224     a=int(tkSimpleDialog.askstring('','Digite un Numero'))#almacena enteros
 225     c=d.logaritmobaseten(a)#llama a logaritmoten y le envia un parametro
 226     tkMessageBox.showinfo("Resultado",c)
 227 def vmodff():
 228     a=int(tkSimpleDialog.askstring('','Digite un Numero'))#almacena enteros
 229     c=d.vmodf(a)#llama a vmodf y le envia un parametro
 230     tkMessageBox.showinfo("Resultado",c)
 231 def gradrad():
 232     a=float(tkSimpleDialog.askstring('','Digite un Numero'))#almacena float
 233     c=d.grarad(a)#llama a grarad y le envia un parametro
 234     tkMessageBox.showinfo("Resultado",c)
 235 def sinhh():
 236     a=float(tkSimpleDialog.askstring('','Digite un Numero'))#almacena float
 237     c=d.senhh(a)#llama a senhh y le envia un parametro
 238     tkMessageBox.showinfo("Resultado",c)
 239 #dimensiones de la ventana
 240 root.minsize(300,200)
 241 #barra de herramientas
 242 toolbar=Frame(root)
 243 #botones
 244 b=Button(toolbar, text="Suma", command=suma, foreground="yellow", background="black")#crea un button con fondo negro y texto amarillo 
 245 b.pack(side=LEFT, padx=1, pady=1)
 246 b=Button(toolbar, text="Resta", width=6, command=resta, foreground="yellow", background="black")
 247 b.pack(side=LEFT, padx=1, pady=1)
 248 b=Button(toolbar, text="Multiplicacion", width=10, command=multiplicacion, foreground="yellow", background="black")
 249 b.pack(side=LEFT, padx=1, pady=1)
 250 b=Button(toolbar, text="Division", width=6, command=division, foreground="yellow", background="black")
 251 b.pack(side=LEFT, padx=1, pady=1)
 252 b=Button(toolbar, text="Potencia", width=10, command=potenciacion, foreground="yellow", background="black")
 253 b.pack(side=LEFT, padx=1, pady=1)
 254 b=Button(toolbar, text="Exponencial", width=15, command=exponencial, foreground="yellow", background="black")
 255 b.pack(side=LEFT, padx=1, pady=1)
 256 b=Button(toolbar, text="Raiz", width=6, command=raiz, foreground="yellow", background="black")
 257 b.pack(side=LEFT, padx=1, pady=1)
 258 b=Button(text="Coseno", width=10, command=coseno, foreground="yellow", background="black")
 259 b.pack(side=BOTTOM, padx=1, pady=1)
 260 b=Button(text="Seno", width=10, command=seno, foreground="yellow", background="black")
 261 b.pack(side=TOP, padx=1, pady=1)
 262 b=Button(text="Log", width=10, command=logg, foreground="yellow", background="black")
 263 b.pack(side=TOP, padx=1, pady=1)
 264 b=Button(text="Log10", width=10, command=logg1, foreground="yellow", background="black")
 265 b.pack(side=TOP, padx=1, pady=1)
 266 b=Button(text="Tangente", width=10, command=tangente, foreground="yellow", background="black")
 267 b.pack(side=BOTTOM, padx=1, pady=1)
 268 b=Button(text="Pi", width=10, command=pip, foreground="yellow", background="black")
 269 b.pack(side=TOP, padx=1, pady=1)
 270 b=Button(text="Tanh", width=10, command=tangenteh, foreground="yellow", background="black")
 271 b.pack(side=TOP, padx=1, pady=1)
 272 b=Button(text="Arcoseno", width=10, command=arcoseno, foreground="yellow", background="black")
 273 b.pack(side=TOP, padx=1, pady=1)
 274 b=Button(text="Arcseno", width=10, command=arcseno, foreground="yellow", background="black")
 275 b.pack(side=TOP, padx=1, pady=1 )
 276 b=Button(text="Cotangente", width=10, command=cotangente, foreground="yellow", background="black")
 277 b.pack(side=BOTTOM, padx=1, pady=1)
 278 b=Button(text="Hipotenusa",  width=10, command=hipoten, foreground="yellow", background="black")
 279 b.pack(side=BOTTOM ,padx=1,pady=1)
 280 b=Button(text="Sinh",  width=10, command=sinhh, foreground="yellow", background="black")
 281 b.pack(side=BOTTOM ,padx=1,pady=1)
 282 b=Button(text="Atan2", width=10, command=atann2, foreground="yellow", background="black")
 283 b.pack(side=TOP, padx=1, pady=1)
 284 b=Button(text="Valor Absoluto", width=10, command=absoluto, foreground="yellow", background="black")
 285 b.pack(side=TOP, padx=1, pady=1)
 286 b=Button(text="Floor", width=10, command=vfloor, foreground="yellow", background="black")
 287 b.pack(side=TOP, padx=1, pady=1)
 288 b=Button(text="Radians", width=10, command=gradrad, foreground="yellow", background="black")
 289 b.pack(side=TOP, padx=1, pady=1)
 290 b=Button(text="Fmod", width=10, command=vfmod, foreground="yellow", background="black")
 291 b.pack(side=TOP, padx=1, pady=1)
 292 b=Button(text="Ceil", width=10, command=funceil, foreground="yellow", background="black")
 293 b.pack(side=BOTTOM, padx=1, pady=1)
 294 b=Button(text="Cosh",  width=10, command=coseh, foreground="yellow", background="black")
 295 b.pack(side=BOTTOM ,padx=1,pady=1)
 296 b=Button(text="Frexp",  width=10, command=vfrexp, foreground="yellow", background="black")
 297 b.pack(side=BOTTOM ,padx=1,pady=1)
 298 b=Button(text="Degrees", width=10, command=angrad, foreground="yellow", background="black")
 299 b.pack(side=BOTTOM, padx=1, pady=1)
 300 b=Button(text="e",  width=10, command=ex, foreground="yellow", background="black")
 301 b.pack(side=BOTTOM ,padx=1,pady=1)
 302 b=Button(text="Modf",  width=10, command=vmodff, foreground="yellow", background="black")
 303 b.pack(side=TOP ,padx=1,pady=1)
 304 b=Button(toolbar, foreground="red", text="Salir", background="black", width=6, command='exit')#crea el boton salir con fondo negro y texto rojo
 305 b.pack(side=BOTTOM, padx=1, pady=1)
 306 toolbar.pack(side=TOP, fill=Y)
 307 #creo un menu
 308 menu=Menu(root)
 309 root.config(menu=menu)
 310 filemenu=Menu(menu)
 311 menu.add_cascade(label="Operaciones Básicas", menu=filemenu, )#opciones de menu desplegables
 312 filemenu.add_command(label="Suma", command=suma, foreground="green", background="black")
 313 filemenu.add_command(label="Resta", command=resta,foreground="green", background="black" )
 314 filemenu.add_command(label="Multiplicacion", command=multiplicacion, foreground="green", background="black")
 315 filemenu.add_command(label="Division", command=division, foreground="green", background="black")
 316 filemenu.add_command(label="Raiz", command=raiz, foreground="green", background="black")
 317 filemenu.add_command(label="Potenciacion", command=potenciacion, foreground="green", background="black")
 318 filemenu.add_command(label="Exponenciacion", command=exponencial, foreground="green", background="black")
 319 filemenu.add_separator()
 320 filemenu.add_command(label="Salir", command='exit',foreground="red", background="black")
 321 ########################################Menu 2 ############
 322 men=Menu(root)
 323 root.config(men=menu)
 324 filemenu=Menu(men)
 325 menu.add_cascade(label="Trigonometricas", men=filemenu)#opciones de menu desplegables
 326 filemenu.add_command(label="Coseno", command=coseno, foreground="green", background="black")
 327 filemenu.add_command(label="Seno", command=seno, foreground="green", background="black")
 328 filemenu.add_command(label="Pi", command=pip, foreground="green", background="black")
 329 filemenu.add_command(label="Arcoseno", command=arcoseno, foreground="green", background="black")
 330 filemenu.add_command(label="Arcseno", command=arcseno, foreground="green", background="black")
 331 filemenu.add_command(label="Tangente", command=tangente, foreground="green", background="black")
 332 filemenu.add_command(label="Cotangente", command=cotangente, foreground="green", background="black")
 333 filemenu.add_command(label="Hipotenusa", command=hipoten, foreground="green", background="black")
 334 filemenu.add_command(label="Sinh", command=sinhh, foreground="green", background="black")
 335 filemenu.add_command(label="Tanh", command=tangenteh, foreground="green", background="black")
 336 ##############################
 337 men=Menu(root)
 338 root.config(men=menu)
 339 filemenu=Menu(men)
 340 menu.add_cascade(label="Mas Operaciones", men=filemenu)#opciones de menu desplegable
 341 filemenu.add_command(label="Atan2", command=atann2, foreground="green", background="black")
 342 filemenu.add_command(label="Valor Absoluto", command=absoluto, foreground="green", background="black")
 343 filemenu.add_command(label="Ceil", command=funceil, foreground="green", background="black")
 344 filemenu.add_command(label="Cosh", command=coseh, foreground="green", background="black")
 345 filemenu.add_command(label="Degrees", command=angrad, foreground="green", background="black")
 346 filemenu.add_command(label="e", command=ex, foreground="green", background="black")
 347 filemenu.add_command(label="Floor", command=vfloor, foreground="green", background="black")
 348 filemenu.add_command(label="Fmod", command=vfmod, foreground="green", background="black")
 349 
 350 ##############################
 351 men=Menu(root)
 352 root.config(men=menu)
 353 filemenu=Menu(men)
 354 menu.add_cascade(label="Mas Operaciones2", men=filemenu)#opciones de menu desplegables
 355 filemenu.add_command(label="Radians", command=gradrad, foreground="green", background="black")
 356 filemenu.add_command(label="Frexp", command=vfrexp, foreground="green", background="black")
 357 filemenu.add_command(label="Ldexp", command=vledxp, foreground="green", background="black")
 358 filemenu.add_command(label="Log", command=logg, foreground="green", background="black")
 359 filemenu.add_command(label="Log10", command=logg1, foreground="green", background="black")
 360 filemenu.add_command(label="Modf", command=vmodff, foreground="green", background="black")
 361 
 362 root.mainloop()

Python/Code/Calculadora (last edited 2010-09-20 20:39:54 by Kmilo)