Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: Wartherion en 9 Junio 2015, 01:55 am



Título: Ayuda con Select Case VBS
Publicado por: Wartherion en 9 Junio 2015, 01:55 am
Hola Necesito una ayuda con el sigueinte script.

Código
  1. Dim  x,y,n,m,r,nu,n1,n2,n3,n4,n5,m1,m2,m3,m4,m5,result
  2.  
  3. num=inputbox("Digente el Numero de la Operacion que Desea Realizar:                                                                                                                                                  1. Encontrar el valor de Y                                      2. Promedio de un Estudiante                                 3. Salir")
  4.  
  5. select case num
  6.  
  7. case "1"
  8. x=inputbox("Ingrese el valor de X")
  9.  
  10. x=cint(x)
  11. y=log(x+30) / 20
  12. msgbox("El Valor de Y es: " & y )
  13.  
  14.  
  15. case "2"
  16.  
  17. m1=inputbox("Nombre de la 1°materia")
  18. nu1=inputbox(" Nota de " & m1)
  19.  
  20. if nu1>100 then
  21. msgbox "Ingrese un valor entre 0 - 100", vbAbort, "Erro de Validacion"
  22. else
  23. nu=msgbox("Desea Salir")
  24. end if
  25.  
  26. m2=inputbox("Nombre de la 2°materia")
  27. nu2=inputbox(" Nota de " & m2 )
  28.  
  29. if nu2>100 then
  30. msgbox "Ingrese un valor entre 0 - 100", vbexclamation, "Erro de Validacion"
  31. else
  32. msgbox("Usted esta saliendo del Programa")
  33. end if
  34.  
  35. m3=inputbox("Nombre de la 3°materia")
  36. nu3=inputbox(" Nota de " & m3 )
  37.  
  38. if nu3>100 then
  39. msgbox "Ingrese un valor entre 0 - 100", vbexclamation, "Erro de Validacion"
  40. else
  41. msgbox("Usted esta saliendo del Programa")
  42. end if
  43.  
  44. m4=inputbox("Nombre de la 4°materia")
  45. nu4=inputbox(" Nota de " & m4 )
  46.  
  47. if nu4>100 then
  48. msgbox "Ingrese un valor entre 0 - 100", vbexclamation, "Erro de Validacion"
  49. else
  50. msgbox("Usted esta saliendo del Programa")
  51. end if
  52.  
  53. m5=inputbox("Nombre de la 5°materia")
  54. nu5=inputbox(" Nota de " & m5 )
  55.  
  56. if nu5>100 then
  57. msgbox "Ingrese un valor entre 0 - 100", vbexclamation, "Erro de Validacion"
  58. else
  59. msgbox("Usted esta saliendo del Programa")
  60. end if
  61.  
  62.  
  63. nu1=cint(nu1)
  64. nu2=cint(nu2)
  65. nu3=cint(nu3)
  66. nu4=cint(nu4)
  67. nu5=cint(nu5)
  68. nu=nu1+nu2+nu3+nu4+nu5
  69. result=nu/5
  70. if result>100 then
  71. msgbox "Ingrese un valor entre 0 - 100", vbexclamation, "Erro de Validacion"
  72. else
  73. msgbox("Usted esta saliendo del Programa")
  74. end if
  75. msgbox("El promedio es: " & result )
  76.  
  77. re="Reprobado"
  78. de="Deficiente"
  79. bu="Bueno"
  80. mbu="Muy Bueno"
  81. exc="Exelente"
  82.  
  83. if result<=59 then
  84. msgbox("El Alumno esta: "  & re )
  85. else
  86. if result>=60 and result<=69 then
  87. msgbox("El alumno esta: " & de )
  88. else
  89. if result>=70 and result<=79 then
  90. msgbox("El Alumno esta: " & bu )
  91. else
  92. if result>=80 and result<=89 then
  93. msgbox("El Alumno esta: " & mbu )
  94. else
  95. if result>=90 and result <= 100 then
  96. msgbox("El Alumno esta: " & exc )
  97. end if
  98. end if
  99. end if
  100. end if
  101. end if
  102.  
  103.  
  104. if nu1<59 then
  105. msgbox("El Alumno Reprobo " & m1)
  106. else
  107. msgbox("El Alumno Aprobo " & m1)
  108. end if
  109.  
  110. if nu2<59 then
  111. msgbox("El Alumno Reprobo " & m2)
  112. else
  113. msgbox("El Alumno Aprobo " & m2)
  114. end if
  115.  
  116. if nu3<59 then
  117. msgbox("El Alumno Reprobo " & m3)
  118. else
  119. msgbox("El Alumno Aprobo " & m3)
  120. end if
  121.  
  122. if nu4<59 then
  123. msgbox("El Alumno Reprobo " & m4)
  124. else
  125. msgbox("El Alumno Aprobo " & m4)
  126. end if
  127.  
  128. if nu5<59 then
  129. msgbox("El Alumno Reprobo " & m5)
  130. else
  131. msgbox("El Alumno Aprobo " & m5)
  132. end if
  133.  
  134.  
  135. case "3"
  136.  
  137.  
  138. msgbox"Usted esta saliendo del Programa", vbexclamation
  139.  
  140. end select

Quiero que haga lo sigueinte:

1. Cuando se ingrese una Nota con Valor Mayor a 100 El programa mande una alvertencia de que la nota es Invalida y ya no continue, con el ingreso de la siguiente nota y a si sucesivamente.

Agradecesiria que me indicaran el error en el codigo del case 2 que es para calcular el promedio de 5 notas, para poder solucionarlo.

Gracias.

Mod: Los códigos deben ir en etiquetas GeSHi


Título: Re: Ayuda con Select Case VBS
Publicado por: DarK_FirefoX en 9 Junio 2015, 02:06 am
- Utiliza las etiquetas GeSHi para publicar código!

Salu2s


Título: Re: Ayuda con Select Case VBS
Publicado por: tincopasan en 9 Junio 2015, 06:36 am
lo haría así, espero que te oriente, aunque seguro hay muchas formas mejores!!! y por supuesto te toca terminar lo que falte.
Código
  1. Dim  x,y,n,m,r,nu,n1,n2,n3,n4,n5,m1,m2,m3,m4,m5,result
  2.  
  3. sub trabajos()
  4.  
  5. Do while num <> 3
  6. num=inputbox("Digente el Numero de la Operacion que Desea Realizar:                                                                                                                                                  1. Encontrar el valor de Y                                      2. Promedio de un Estudiante                                 3. Salir")
  7.  
  8.  
  9. if num = 1 then
  10. x=inputbox("Ingrese el valor de X")
  11. msgbox "El Valor de Y es: " & Valor(x)
  12. end if
  13.  
  14. if num = 2 then
  15. promedio()
  16. end if
  17. loop
  18.  
  19. msgbox"Terminado!"
  20. end sub
  21.  
  22. function Valor(nota)
  23. Valor=log(cint(x)+30/20)
  24. end function
  25.  
  26. function Promedio()
  27. m1=inputbox("Nombre de la 1°materia")
  28. nu1=inputbox(" Nota de " & m1)
  29. if nu1>100 then
  30. msgbox "Ingrese un valor entre 0 - 100", vbOKOnly, "Error de Validacion"
  31. exit function
  32. end if
  33.  
  34. m2=inputbox("Nombre de la 2°materia")
  35. nu2=inputbox(" Nota de " & m2 )
  36. if nu2>100 then
  37. msgbox "Ingrese un valor entre 0 - 100", vbexclamation, "Erro de Validacion"
  38. exit function
  39. end if
  40.  
  41. nu=cint(nu1)+ cint(nu2) + cint(nu3) + cint(nu4) + cint(nu5)
  42. msgbox "el promedio es: " & nu/5
  43. end function
  44.  
  45. trabajos()


Título: Re: Ayuda con Select Case VBS
Publicado por: Eleкtro en 9 Junio 2015, 10:40 am
Ni siquiera utilizas la indentación para que el código sea minimamente legible para ti y para los demás, MUY MAL, te lo digo seriamente, la indentación es una cosa muy importante, aprende a usarla, por que la mayoría de personas que vean ese código ni siquiera se van a molestar en leerlo/analizarlo.

Esto es simplemente horrible de ver:
Citar
Código
  1. if result<=59 then
  2. msgbox("El Alumno esta: "  & re )
  3. else
  4. if result>=60 and result<=69 then
  5. msgbox("El alumno esta: " & de )
  6. else
  7. if result>=70 and result<=79 then
  8. msgbox("El Alumno esta: " & bu )
  9. else
  10. if result>=80 and result<=89 then
  11. msgbox("El Alumno esta: " & mbu )
  12. else
  13. if result>=90 and result <= 100 then
  14. msgbox("El Alumno esta: " & exc )
  15. end if
  16. end if
  17. end if
  18. end if
  19. end if

Aparte, una cosa importante que también deberías tener en cuenta es que no es necesario anidar las condicionales (en este caso), ya que puedes usar la sentencia ElseIf.

También deberías hacer uso de las características que el lenguaje te proporciona, cómo Arrays, ElseIf, y funciones built-in, aparte, deberías estructurar el código para trasladar la lógica que has escrito en el bloque del select case, a métodos/funciones adicionales.

Aquí te dejo un código funcional:

Código
  1. Option Explicit : Dim appTitle, boxMsg, result
  2.  
  3. ' ***************************************************************
  4. '                           Main
  5. ' ***************************************************************
  6.  
  7. appTitle = "Título del programa."
  8.  
  9. boxMsg   = "Introduzca el numero de la operacion a realizar:" & _
  10.           vbNewLine & _
  11.           vbNewLine & _
  12.           "1. Encontrar el valor de Y" & _
  13.           vbNewLine & _
  14.           "2. Promedio de un Estudiante" & _
  15.           vbNewLine & _
  16.           "3. Salir"
  17.  
  18. Do While ( result <> 3 )
  19.  
  20.    result = Cint( InputBox(boxMsg, appTitle) )
  21.  
  22.    Select Case result
  23.  
  24.        Case 1 ' Encontrar el valor de Y
  25.            EncontrarElValorDeY()
  26.  
  27.        Case 2 ' Promedio de un Estudiante
  28.            PromedioDeUnEstudiante()
  29.  
  30.        Case 3 ' Salir
  31.            Salir()
  32.  
  33.    End Select
  34.  
  35. Loop
  36.  
  37. ' ***************************************************************
  38. '                           Methods
  39. ' ***************************************************************
  40.  
  41. ' Encontrar el valor de Y
  42. Sub EncontrarElValorDeY()
  43.    Dim x, y
  44.    x = CDbl( InputBox("Introduzca el valor de 'X'.", appTitle) )
  45.    y = GetValue(x)
  46.    Call MsgBox("El Valor de 'Y' es: " & CStr(y), vbInformation, appTitle)
  47. End Sub
  48.  
  49. ' Promedio de un Estudiante
  50. Sub PromedioDeUnEstudiante()
  51.    Dim matters, notes, average, _
  52.        sentences, curSentence,  _
  53.        index, alumnInfo
  54.  
  55.    matters = Array(Null, Null, Null, Null, Null)
  56.    notes   = Array(Null, Null, Null, Null, Null)
  57.    average = Null
  58.  
  59.    sentences   = Array("Reprobado", "Deficiente", "Bueno", "Muy Bueno", "Excelente")
  60.    curSentence = Null
  61.    alumnInfo   = Null
  62.  
  63.    For index = 0 To UBound(matters)
  64.        matters(index) = InputBox("Nombre de la" & CStr(index + 1) & "° materia", appTitle)
  65.  
  66.        Do Until ( notes(index) <= 100 )
  67.            notes(index) = CInt( InputBox("Nota de '" & matters(index) & "' (entre 0 y 100)", appTitle) )
  68.        Loop
  69.    Next
  70.  
  71.    average = GetAverage(notes)
  72.  
  73.    If (average <= 59) Then
  74.        curSentence = sentences(0)
  75.  
  76.    ElseIf (average >= 60) And (average <= 69) Then
  77.        curSentence = sentences(1)
  78.  
  79.    ElseIf (average >= 70) And (average <= 79) Then
  80.        curSentence = sentences(2)
  81.  
  82.    ElseIf (average >= 80) And (average <= 89) Then
  83.        curSentence = sentences(3)
  84.  
  85.    Else ' average >= 90
  86.        curSentence = sentences(4)
  87.  
  88.    End If
  89.  
  90.    alumnInfo = alumnInfo & "El promedio es: "  & CStr(average) & vbNewLine
  91.    alumnInfo = alumnInfo & "El alumno esta: "  & curSentence & vbNewLine
  92.  
  93.    For index = 0 To UBound(notes)
  94.  
  95.        If notes(index) <= 59 Then
  96.            alumnInfo = alumnInfo & "El alumno reprobo " & matters(index) & vbNewLine
  97.  
  98.        Else
  99.            alumnInfo = alumnInfo & "El alumno aprobo " & matters(index) & vbNewLine
  100.  
  101.        End If
  102.  
  103.    Next
  104.  
  105.    Call MsgBox(alumnInfo, vbInformation, appTitle)
  106. End Sub
  107.  
  108. ' Salir
  109. Sub Salir()
  110.    Call MsgBox("Usted esta saliendo del programa...", vbExclamation, appTitle)
  111.    WScript.Quit(0)
  112. End Sub
  113.  
  114. ' ***************************************************************
  115. '                           Functions
  116. ' ***************************************************************
  117.  
  118. ' valor de X
  119. Function GetValue(value)
  120.    GetValue = CDbl( Log(value + 30) / 20 )
  121. End Function
  122.  
  123. ' Promedio de X
  124. Function GetAverage(values)
  125.    Dim value
  126.  
  127.    For Each value In values
  128.        GetAverage = GetAverage + value
  129.    Next
  130.  
  131.    GetAverage = CDbl( GetAverage / 5 )
  132. End Function

Saludos!


Título: Re: Ayuda con Select Case VBS
Publicado por: tincopasan en 12 Junio 2015, 10:20 am
Elektro le hiciste toda la tarea! Espero que te mencione en los créditos por lo menos. Es increible como piden ayuda, y no dan las gracias ni por casualidad!


Título: Re: Ayuda con Select Case VBS
Publicado por: Eleкtro en 12 Junio 2015, 11:28 am
Es increible como piden ayuda, y no dan las gracias ni por casualidad!

Suele pasar...

Pero bueno, a esto es a lo que nos arriesgamos la mayoría de las veces al ayudar desinteresadamente, podemos acabar haciendo el trabajo de otra persona sin tan siquiera recibir un humilde GRACIAS por el esfuerzo que hayamos invertido.

...¿Créditos?, las personas que ni siquiera se paran a agradecer, mucho menos van a ser capaces de reconocer que su código/trabajo lo ha hecho otra persona o que al menos les han ayudado a hacerlo, aunque personalmente el reconocimiento me da igual, yo me conformo con un gesto amable de agradecimiento, la misma amabilidad que nosotros solemos tener cuando ayudamos a los demás sin esperar recibir nada a cambio, pero siempre sienta bien que al menos te agradezcan la ayuda que les has ofrecido.

Generalizando, ese tipo de personas luego volverán por que no son capaces de explicar o entender ni la mitad del código que le hemos dado, y ahí ya se darán cuenta ellos solitos de los favores que han perdido por ser tan desconsiderados con las personas que estuvieron dispuestas a ayudarle.

En fín, a mi también me indigna un poquito, pero que le vamos a hacer.

PD: Tampoco es que este sea un caso extremo ...es un código sin complejidad, en un lenguaje sencillo y apenas 100 lineas de códigio.

Saludos!