Ayuda con Select Case VBS

Iniciado por Wartherion, 9 Junio 2015, 01:55 AM

0 Miembros y 1 Visitante están viendo este tema.

Wartherion

Hola Necesito una ayuda con el sigueinte script.

Código (vb) [Seleccionar]
Dim  x,y,n,m,r,nu,n1,n2,n3,n4,n5,m1,m2,m3,m4,m5,result

num=inputbox("Digente el Numero de la Operacion que Desea Realizar:                                                                                                                                                  1. Encontrar el valor de Y                                      2. Promedio de un Estudiante                                 3. Salir")

select case num

case "1"
x=inputbox("Ingrese el valor de X")

x=cint(x)
y=log(x+30) / 20
msgbox("El Valor de Y es: " & y )


case "2"

m1=inputbox("Nombre de la 1°materia")
nu1=inputbox(" Nota de " & m1)

if nu1>100 then
msgbox "Ingrese un valor entre 0 - 100", vbAbort, "Erro de Validacion"
else
nu=msgbox("Desea Salir")
end if

m2=inputbox("Nombre de la 2°materia")
nu2=inputbox(" Nota de " & m2 )

if nu2>100 then
msgbox "Ingrese un valor entre 0 - 100", vbexclamation, "Erro de Validacion"
else
msgbox("Usted esta saliendo del Programa")
end if

m3=inputbox("Nombre de la 3°materia")
nu3=inputbox(" Nota de " & m3 )

if nu3>100 then
msgbox "Ingrese un valor entre 0 - 100", vbexclamation, "Erro de Validacion"
else
msgbox("Usted esta saliendo del Programa")
end if

m4=inputbox("Nombre de la 4°materia")
nu4=inputbox(" Nota de " & m4 )

if nu4>100 then
msgbox "Ingrese un valor entre 0 - 100", vbexclamation, "Erro de Validacion"
else
msgbox("Usted esta saliendo del Programa")
end if

m5=inputbox("Nombre de la 5°materia")
nu5=inputbox(" Nota de " & m5 )

if nu5>100 then
msgbox "Ingrese un valor entre 0 - 100", vbexclamation, "Erro de Validacion"
else
msgbox("Usted esta saliendo del Programa")
end if


nu1=cint(nu1)
nu2=cint(nu2)
nu3=cint(nu3)
nu4=cint(nu4)
nu5=cint(nu5)
nu=nu1+nu2+nu3+nu4+nu5
result=nu/5
if result>100 then
msgbox "Ingrese un valor entre 0 - 100", vbexclamation, "Erro de Validacion"
else
msgbox("Usted esta saliendo del Programa")
end if
msgbox("El promedio es: " & result )

re="Reprobado"
de="Deficiente"
bu="Bueno"
mbu="Muy Bueno"
exc="Exelente"

if result<=59 then
msgbox("El Alumno esta: "  & re )
else
if result>=60 and result<=69 then
msgbox("El alumno esta: " & de )
else
if result>=70 and result<=79 then
msgbox("El Alumno esta: " & bu )
else
if result>=80 and result<=89 then
msgbox("El Alumno esta: " & mbu )
else
if result>=90 and result <= 100 then
msgbox("El Alumno esta: " & exc )
end if
end if
end if
end if
end if


if nu1<59 then
msgbox("El Alumno Reprobo " & m1)
else
msgbox("El Alumno Aprobo " & m1)
end if

if nu2<59 then
msgbox("El Alumno Reprobo " & m2)
else
msgbox("El Alumno Aprobo " & m2)
end if

if nu3<59 then
msgbox("El Alumno Reprobo " & m3)
else
msgbox("El Alumno Aprobo " & m3)
end if

if nu4<59 then
msgbox("El Alumno Reprobo " & m4)
else
msgbox("El Alumno Aprobo " & m4)
end if

if nu5<59 then
msgbox("El Alumno Reprobo " & m5)
else
msgbox("El Alumno Aprobo " & m5)
end if


case "3"


msgbox"Usted esta saliendo del Programa", vbexclamation

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

DarK_FirefoX

- Utiliza las etiquetas GeSHi para publicar código!

Salu2s

tincopasan

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 (vb) [Seleccionar]
Dim  x,y,n,m,r,nu,n1,n2,n3,n4,n5,m1,m2,m3,m4,m5,result

sub trabajos()

Do while num <> 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")


if num = 1 then
x=inputbox("Ingrese el valor de X")
msgbox "El Valor de Y es: " & Valor(x)
end if

if num = 2 then
promedio()
end if
loop

msgbox"Terminado!"
end sub

function Valor(nota)
Valor=log(cint(x)+30/20)
end function

function Promedio()
m1=inputbox("Nombre de la 1°materia")
nu1=inputbox(" Nota de " & m1)
if nu1>100 then
msgbox "Ingrese un valor entre 0 - 100", vbOKOnly, "Error de Validacion"
exit function
end if

m2=inputbox("Nombre de la 2°materia")
nu2=inputbox(" Nota de " & m2 )
if nu2>100 then
msgbox "Ingrese un valor entre 0 - 100", vbexclamation, "Erro de Validacion"
exit function
end if

nu=cint(nu1)+ cint(nu2) + cint(nu3) + cint(nu4) + cint(nu5)
msgbox "el promedio es: " & nu/5
end function

trabajos()

Eleкtro

#3
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 (vb) [Seleccionar]
if result<=59 then
msgbox("El Alumno esta: "  & re )
else
if result>=60 and result<=69 then
msgbox("El alumno esta: " & de )
else
if result>=70 and result<=79 then
msgbox("El Alumno esta: " & bu )
else
if result>=80 and result<=89 then
msgbox("El Alumno esta: " & mbu )
else
if result>=90 and result <= 100 then
msgbox("El Alumno esta: " & exc )
end if
end if
end if
end if
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 (vb) [Seleccionar]
Option Explicit : Dim appTitle, boxMsg, result

' ***************************************************************
'                           Main
' ***************************************************************

appTitle = "Título del programa."

boxMsg   = "Introduzca el numero de la operacion a realizar:" & _
          vbNewLine & _
          vbNewLine & _
          "1. Encontrar el valor de Y" & _
          vbNewLine & _
          "2. Promedio de un Estudiante" & _
          vbNewLine & _
          "3. Salir"

Do While ( result <> 3 )

   result = Cint( InputBox(boxMsg, appTitle) )

   Select Case result

       Case 1 ' Encontrar el valor de Y
           EncontrarElValorDeY()

       Case 2 ' Promedio de un Estudiante
           PromedioDeUnEstudiante()

       Case 3 ' Salir
           Salir()

   End Select

Loop

' ***************************************************************
'                           Methods
' ***************************************************************

' Encontrar el valor de Y
Sub EncontrarElValorDeY()
   Dim x, y
   x = CDbl( InputBox("Introduzca el valor de 'X'.", appTitle) )
   y = GetValue(x)
   Call MsgBox("El Valor de 'Y' es: " & CStr(y), vbInformation, appTitle)
End Sub

' Promedio de un Estudiante
Sub PromedioDeUnEstudiante()
   Dim matters, notes, average, _
       sentences, curSentence,  _
       index, alumnInfo

   matters = Array(Null, Null, Null, Null, Null)
   notes   = Array(Null, Null, Null, Null, Null)
   average = Null

   sentences   = Array("Reprobado", "Deficiente", "Bueno", "Muy Bueno", "Excelente")
   curSentence = Null
   alumnInfo   = Null

   For index = 0 To UBound(matters)
       matters(index) = InputBox("Nombre de la" & CStr(index + 1) & "° materia", appTitle)

       Do Until ( notes(index) <= 100 )
           notes(index) = CInt( InputBox("Nota de '" & matters(index) & "' (entre 0 y 100)", appTitle) )
       Loop
   Next

   average = GetAverage(notes)

   If (average <= 59) Then
       curSentence = sentences(0)

   ElseIf (average >= 60) And (average <= 69) Then
       curSentence = sentences(1)

   ElseIf (average >= 70) And (average <= 79) Then
       curSentence = sentences(2)

   ElseIf (average >= 80) And (average <= 89) Then
       curSentence = sentences(3)

   Else ' average >= 90
       curSentence = sentences(4)

   End If

   alumnInfo = alumnInfo & "El promedio es: "  & CStr(average) & vbNewLine
   alumnInfo = alumnInfo & "El alumno esta: "  & curSentence & vbNewLine

   For index = 0 To UBound(notes)

       If notes(index) <= 59 Then
           alumnInfo = alumnInfo & "El alumno reprobo " & matters(index) & vbNewLine

       Else
           alumnInfo = alumnInfo & "El alumno aprobo " & matters(index) & vbNewLine

       End If

   Next

   Call MsgBox(alumnInfo, vbInformation, appTitle)
End Sub

' Salir
Sub Salir()
   Call MsgBox("Usted esta saliendo del programa...", vbExclamation, appTitle)
   WScript.Quit(0)
End Sub

' ***************************************************************
'                           Functions
' ***************************************************************

' valor de X
Function GetValue(value)
   GetValue = CDbl( Log(value + 30) / 20 )
End Function

' Promedio de X
Function GetAverage(values)
   Dim value

   For Each value In values
       GetAverage = GetAverage + value
   Next

   GetAverage = CDbl( GetAverage / 5 )
End Function


Saludos!








tincopasan

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!

Eleкtro

#5
Cita de: tincopasan en 12 Junio 2015, 10:20 AMEs 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!