Foros del Web » Programando para Internet » Python »

Otro ejercicio sencillo con el while.

Estas en el tema de Otro ejercicio sencillo con el while. en el foro de Python en Foros del Web. Un vector en un espacio tridimensional es una tripleta de valores reales (x, y, z). Deseamos confeccionar un programa que permita operar con dos vectores. ...
  #1 (permalink)  
Antiguo 29/10/2011, 14:56
 
Fecha de Ingreso: octubre-2011
Ubicación: Canarias
Mensajes: 13
Antigüedad: 13 años, 1 mes
Puntos: 1
Otro ejercicio sencillo con el while.

Un vector en un espacio tridimensional es una tripleta de valores reales (x, y, z). Deseamos confeccionar un programa que permita operar con dos vectores. El usuario verá en pantalla un menú con las siguientes opciones:
1. Introducir el primer vector
2. Introducir el segundo vector
3. Calcular la suma
4. Calcular la diferencia
5. Calcular el producto escalar
6. Calcular el producto vectorial
7. Calcular el ángulo (en grados) entre ellos
8. Calcular la longitud
9. Finalizar

Es el ejercicio 116 del libro que figura en el siguiente enlace.
http://wwwisis.ufg.edu.sv/wwwisis/documentos/EB/005.133-M393i/005.133-M393i-Un%20ultimo%20problema%20menus%20de%20usuario.pdf

No pongan el ejercicio desarrollado. Es sólo comentarlo.
  #2 (permalink)  
Antiguo 29/10/2011, 19:23
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 9 meses
Puntos: 1360
Respuesta: Otro ejercicio sencillo con el while.

Y la duda es?

Enserio cual es la duda.

Creo que lo verías mejor si tuvieras una clase vector.
  #3 (permalink)  
Antiguo 30/10/2011, 17:45
Avatar de _cronos2
Colaborador
 
Fecha de Ingreso: junio-2010
Mensajes: 2.062
Antigüedad: 14 años, 6 meses
Puntos: 310
Respuesta: Otro ejercicio sencillo con el while.

LOL, calcular el producto vectorial no es tan sencillo, lo más fácil es usar determinantes y no veo una manera fácil de implementarlos en código. Lo que puedes hacer es calcular el módulo, que es relativamente sencillo.
Respecto al código, como dice @razpeitia deberías empezar a crear una clase Vector e ir agregándole métodos hasta tener todas las partes.
Saludos (:
__________________
" Getting older’s not been on my plans
but it’s never late, it’s never late enough for me to stay. "
Cigarettes - Russian Red
  #4 (permalink)  
Antiguo 30/10/2011, 19:39
Avatar de Carlangueitor
Moderador ლ(ಠ益ಠლ)
 
Fecha de Ingreso: marzo-2008
Ubicación: México
Mensajes: 10.037
Antigüedad: 16 años, 9 meses
Puntos: 1329
Respuesta: Otro ejercicio sencillo con el while.

Pues no se, no se me hace tan difícil aplicar determinantes en código, una matriz común y corriente sería lo más fácil. Una opción sería usar la regla de Sarrus.

PD: No he cursado matemáticas para saber esto, así que igual me equivoco.

Saludos
__________________
Grupo Telegram Docker en Español
  #5 (permalink)  
Antiguo 30/10/2011, 19:55
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 9 meses
Puntos: 1360
Respuesta: Otro ejercicio sencillo con el while.

Es simplemente un vector de 3 dimensiones.

Vas a tener (x1, y1, z1) como vector1 y (x2, y2, z2) como vector2.

Simplemente haces cálculos como indica en el link que nos diste y listo obtienes la respuesta.
Obviamente el resultado son 3 números o un vector, (x3, y3, z3).

Ojo vectores de 2 dimensiones (x, y) no tienen producto vectorial (o producto cruz).
  #6 (permalink)  
Antiguo 31/10/2011, 09:25
Avatar de _cronos2
Colaborador
 
Fecha de Ingreso: junio-2010
Mensajes: 2.062
Antigüedad: 14 años, 6 meses
Puntos: 310
Respuesta: Otro ejercicio sencillo con el while.

Esto es lo más sencillo que se me ocurre:
Código Python:
Ver original
  1. def producto_vectorial(v1, v2):
  2.     vector = []
  3.     vector.extend([
  4.         v1[1] * v2[2] - v1[2] * v2[1],
  5.         v1[0] * v2[2] - v1[2] * v2[0],
  6.         v1[0] * v2[1] - v1[1] * v2[0]
  7.     ])
  8.     return vector
Pero me sigue pareciendo demasiado sucio en comparación a cómo es sobre el papel
Saludos (:
__________________
" Getting older’s not been on my plans
but it’s never late, it’s never late enough for me to stay. "
Cigarettes - Russian Red
  #7 (permalink)  
Antiguo 02/11/2011, 07:13
 
Fecha de Ingreso: octubre-2011
Ubicación: Canarias
Mensajes: 13
Antigüedad: 13 años, 1 mes
Puntos: 1
Respuesta: Otro ejercicio sencillo con el while.

Mi solución:
Código Python:
Ver original
  1. from math import sqrt,pi,cos
  2. print 'Vamos a realizar las siguientes operaciones con los datos introducidos.'
  3. print 'Teclea el nº que figura en el menú para realizar las operaciones.'
  4. print ''
  5. print '1. Introducir el primer vector.'
  6. print '2. Introducir el segundo vector.'
  7. print '3. Calcular la suma.'
  8. print '4. Calcular la diferencia.'
  9. print '5. Calcular el producto escalar.'
  10. print '6. Calcular el producto vectorial.'
  11. print '7. Calcular el ángulo ( en grados ) entre ellos.'
  12. print '8. Calcular la longitud.'
  13. print '9. Finalizar.'
  14. print ''
  15.  
  16. opcion=''
  17. while opcion !='9':
  18.   opcion=raw_input('Introduzca su elección:')
  19.  
  20.   # Sentencias de las operaciones.
  21.   if opcion=='1':
  22.     print'Introducimos el primer vector:'
  23.     x1=raw_input('Introducimos el valor de x:')
  24.     y1=raw_input('Introducimos el valor de y:')
  25.     z1=raw_input('Introducimos el valor de z:')
  26.   elif opcion == '2':
  27.     x2=raw_input('Introducimos el valor de x:')
  28.     y2=raw_input('Introducimos el valor de y:')
  29.     z2=raw_input('Introducimos el valor de z:')
  30.   elif opcion =='3':
  31.     print 'Calculamos la suma'
  32.     print 'La suma vectorial es igual a : (',x1+x2,',',y1+y2,',',z1+z2,')'
  33.   elif opcion =='4':
  34.     print 'Calculamos la diferencia'
  35.     print 'La diferencia vectorial es igual a : (',x1-x2,',',y1-y2,',',z1-z2,')'
  36.   elif opcion =='5':
  37.     print 'Calculamos el producto escalar'
  38.     print 'El producto escalar es igual a : (',x1*2+y1*y2+z1*z2,')'
  39.   elif opcion =='6':
  40.     print 'Calculamos el producto vectorial'
  41.     print 'El producto vectorial es igual a : (',y1*z2-z1*y2,',',z1*x2-x1*z2,',',x1*y2-y1*x2,')'
  42.   elif opcion =='7':
  43.     print 'Calculamos el ángulo entre ellos'
  44.     #Desglosamos la formula
  45.     numerador=(x1*x2)+(y1*y2)+(z1*z2)
  46.     denominador=sqrt(x1**2+y1**2+z1**2)*sqrt(x2**2+y2**2+z2**2)
  47.     angulo=180/pi*1/cos(numerador/denominador)
  48.     print 'El ángulo que forman entre ellos es igual a %2.2f:'%angulo
  49.   elif opcion =='8':
  50.     print 'Calculamos la longitud'
  51.     print 'La longitud del primer vector es igual %2.2f'%sqrt(x1**2+y1**2+z1**3)
  52.     print 'y la del segundo es %2.2f'%sqrt(x2**2+y2**2+z2**3)
  53.   elif opcion =='9':
  54.     print 'Programa finalizado. Muchas gracias'
  55.   else:
  56.     print 'Opción no válida. Debe estar comprendida entre el 1 y el 9'

Tiene algún que otro fallo.

Última edición por razpeitia; 02/11/2011 a las 10:07 Razón: resaltado de sintaxis
  #8 (permalink)  
Antiguo 02/11/2011, 08:28
Avatar de _cronos2
Colaborador
 
Fecha de Ingreso: junio-2010
Mensajes: 2.062
Antigüedad: 14 años, 6 meses
Puntos: 310
Respuesta: Otro ejercicio sencillo con el while.

Como práctica está bien, ¿pero no quedaría mucho más organizado con una clase? Hay varias veces que calculas su módulo o su producto escalar, eso es código repetido para nada que podrías evitarte usando métodos en una clase.
Saludos (:
Edit: Revísalo, falta convertir a int los strings recibidos en raw_input, si no no funcionará.
__________________
" Getting older’s not been on my plans
but it’s never late, it’s never late enough for me to stay. "
Cigarettes - Russian Red

Última edición por _cronos2; 02/11/2011 a las 08:36
  #9 (permalink)  
Antiguo 07/05/2012, 02:37
 
Fecha de Ingreso: mayo-2012
Mensajes: 6
Antigüedad: 12 años, 7 meses
Puntos: 0
Respuesta: Otro ejercicio sencillo con el while.

Cita:
Iniciado por jgalveg Ver Mensaje
Mi solución:
Código Python:
Ver original
  1. from math import sqrt,pi,cos
  2. print 'Vamos a realizar las siguientes operaciones con los datos introducidos.'
  3. print 'Teclea el nº que figura en el menú para realizar las operaciones.'
  4. print ''
  5. print '1. Introducir el primer vector.'
  6. print '2. Introducir el segundo vector.'
  7. print '3. Calcular la suma.'
  8. print '4. Calcular la diferencia.'
  9. print '5. Calcular el producto escalar.'
  10. print '6. Calcular el producto vectorial.'
  11. print '7. Calcular el ángulo ( en grados ) entre ellos.'
  12. print '8. Calcular la longitud.'
  13. print '9. Finalizar.'
  14. print ''
  15.  
  16. opcion=''
  17. while opcion !='9':
  18.   opcion=raw_input('Introduzca su elección:')
  19.  
  20.   # Sentencias de las operaciones.
  21.   if opcion=='1':
  22.     print'Introducimos el primer vector:'
  23.     x1=raw_input('Introducimos el valor de x:')
  24.     y1=raw_input('Introducimos el valor de y:')
  25.     z1=raw_input('Introducimos el valor de z:')
  26.   elif opcion == '2':
  27.     x2=raw_input('Introducimos el valor de x:')
  28.     y2=raw_input('Introducimos el valor de y:')
  29.     z2=raw_input('Introducimos el valor de z:')
  30.   elif opcion =='3':
  31.     print 'Calculamos la suma'
  32.     print 'La suma vectorial es igual a : (',x1+x2,',',y1+y2,',',z1+z2,')'
  33.   elif opcion =='4':
  34.     print 'Calculamos la diferencia'
  35.     print 'La diferencia vectorial es igual a : (',x1-x2,',',y1-y2,',',z1-z2,')'
  36.   elif opcion =='5':
  37.     print 'Calculamos el producto escalar'
  38.     print 'El producto escalar es igual a : (',x1*2+y1*y2+z1*z2,')'
  39.   elif opcion =='6':
  40.     print 'Calculamos el producto vectorial'
  41.     print 'El producto vectorial es igual a : (',y1*z2-z1*y2,',',z1*x2-x1*z2,',',x1*y2-y1*x2,')'
  42.   elif opcion =='7':
  43.     print 'Calculamos el ángulo entre ellos'
  44.     #Desglosamos la formula
  45.     numerador=(x1*x2)+(y1*y2)+(z1*z2)
  46.     denominador=sqrt(x1**2+y1**2+z1**2)*sqrt(x2**2+y2**2+z2**2)
  47.     angulo=180/pi*1/cos(numerador/denominador)
  48.     print 'El ángulo que forman entre ellos es igual a %2.2f:'%angulo
  49.   elif opcion =='8':
  50.     print 'Calculamos la longitud'
  51.     print 'La longitud del primer vector es igual %2.2f'%sqrt(x1**2+y1**2+z1**3)
  52.     print 'y la del segundo es %2.2f'%sqrt(x2**2+y2**2+z2**3)
  53.   elif opcion =='9':
  54.     print 'Programa finalizado. Muchas gracias'
  55.   else:
  56.     print 'Opción no válida. Debe estar comprendida entre el 1 y el 9'

Tiene algún que otro fallo.
brother nada mas una duda , que pasa si le pones como opcion el numero 10? te tira el mensaje opcion no valida del else?? creo que no
  #10 (permalink)  
Antiguo 07/05/2012, 07:56
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Otro ejercicio sencillo con el while.

¿Por qué revives un mensaje del año pasado para escribir algo cuya respuesta obtienes simplemente probando el código?

Por favor no revivas temas viejos. Si tienes alguna duda, abre un tema nuevo dejando un enlace hacia este.

Etiquetas: ejercicio, sencillo
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Tema Cerrado




La zona horaria es GMT -6. Ahora son las 11:46.