Ayuda con un trabajito en visual

Publicado por lukillo, Junio 10, 2009, 00:05:04

Tema anterior - Siguiente tema

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

lukillo

hola a todos bueno q empese a estudiar programacion con visual y tengo q hacer esto:
En una encuesta en el instituto se ingresaron los siguientes datos: apellido y nombre, edad, sexo (1=femenino, 2=masculino), estado civil (s=soltero, c=casado) se pide: (no se sabe cuantos se encuestaron)
a) Mostrar Cuantas Mujeres casadas hay.
b) Mostrar Cuantos Hombre menores de Edad Hay.
c) Mostrar la persona más grande con todos sus datos.

bueno yo hasta ahora tengo esto pero me parece q voy mal

Private Sub cmdEncuesta_Click()
Dim strNombre As String
Dim sngEdad As Single
Dim sngSexo As Single
Dim sngMasculino As Single
Dim sngFemenino As Single
Dim strCivil As String
Dim strCasado As String
Dim strSoltero As String
Dim sngMayor As Single
Dim strRespuesta As String
Dim sngMenor As Single
sngMasculino = 2
sngFemenino = 1
strCasado = "c"
strSoltero = "s"
sngMayor = 18
strRespuesta = "si"
Do While strRespuesta = "si"
strNombre = InputBox("Ingrese el nombre y appellido")
sngEdad = InputBox("Ingrese una edad")
sngSexo = InputBox("Ingrese el sexo: 1 = Femenino, 2 = Masculino")
strCivil = InputBox("Ingrese el estado civil: s = soltero, c = casado")
strRespuesta = InputBox("desea seguir agragando datos? si/no")
If sngSexo = 1 Then
    sngSexo = sngFemenino
        Else: sngSexo = sngMasculino
        End If
           If strCivil = c Then
                strCivil = strCasado
                    Else: strCivil = strSoltero
                    End If
                        If sngEdad < 18 Then
                            sngEdad = sngMenor
                                Else: sngEdad = sngMayor
                                End If
Loop
MsgBox ("Las mujeres casadas son:" & strNombre & sngFemenino & strCasado)
MsgBox ("Los menores de edad son:" & strNombre & sngMasculino & sngMenor)

elrosti

#1
lukillo:

1) El código está indentado para el oj***, imposible de leer.  :jaja:

2) En mi solución fijate porqué es mejor el uso de variables Boolean en lugar de como lo estabas haciendo tú.

3) Estabas medio perdidote, pero tampoco taaaaanto.

4) Puede ser que tenga algún error porque no lo compilé y lo escribí en NotePad, sobre todo la última linea del msgbox no se si compila, también puede haber algún error en la lógica porque obviamente no lo probé.

5) Tratá de entender linea por linea que es lo que hace y el porqué se hace así, cualquier cosa preguntá.

Private Sub cmdEncuesta_Click()
Dim strNombre As String
Dim sngEdad As Single
Dim sngSexo As Single
Dim strCivil As String
Dim esMujer As Boolean
Dim esCasado As Boolean
Dim esMayor As Boolean
Dim strRespuesta As String
sngMasculino = 2
sngFemenino = 1
strCasado = "c"
strSoltero = "s"
strRespuesta = "si"

' Variables para guardar lso datos de la mayor persona
strNombreMayor as String
strEstCivilMayor as String
sngEdadMayor as Single
strSexoMayor as String


Dim cantMenorMasculino As Single
Dim cantMujeresCasadas As Single

Do While strRespuesta = "si"
strNombre = InputBox("Ingrese el nombre y appellido")
sngEdad = InputBox("Ingrese una edad")
sngSexo = InputBox("Ingrese el sexo: 1 = Femenino, 2 = Masculino")
strCivil = InputBox("Ingrese el estado civil: s = soltero, c = casado")
strRespuesta = InputBox("desea seguir agragando datos? si/no")

If sngSexo = 1 Then
    esMujer = True
Else
    esMujer = False
End If

' Tengo en cuenta las minusculas y las mayusculas,
' igual creo que VB no toma en cuenta esto :S
If strCivil = "c" or strCivil = "C" Then
   esCasado = True
Else
   esCasado = False
End If

If sngEdad < 18 Then
   esMayor = False
Else
   esMayor = True
End If

if esCasado and esMujer then
cantMujeresCasadas = cantMujeresCasadas + 1
' Visual 6 acepta esta notación?
' cantMujeresCasadas += 1
endif

if esMujer = False and esMayor = False then
cantMenorMasculino = cantMenorMasculino + 1
endif

' Si la edad que tengo guardada en sngEdadMayor es menor que la que ingresé
' quiere decir que la persona que estoy ingresando es la mayor hasta el momento
' lo cual indica que tengo que guardar los datos
if sngEdadMayor < sngEdad
strNombreMayor = strNombre

if esCasado
strEstCivilMayor = "Casado/a"
else
strEstCivilMayor = "Soletero/a"
endif

sngEdadMayor = sngEdad

if esMujer
strSexoMayor = "Femenino"
else
strSexoMayor = "Masculino"
endif
endif
Loop

MsgBox ("Las mujeres casadas son:" & cantMujeresCasadas)
MsgBox ("Los menores de edad son:" & cantMenorMasculino)

MsgBox ("Los Datos de la persona Mayor son:" & vbcrlf &_
"Nombre: " & strNombreMayor & vbcrlf &_
"Edad: " & sngEdadMayor & vbcrlf &_
"Estado Civil: " & strEstCivilMayor & vbcrlf &_
"Sexo: " & strSexoMayor)
EndSub


Saludos
Yo no lo quería creer..... pero ella me convenció.

lukillo

muchas gracias "elrosti" entendi casi todo pero un par de cosas no me quedaron muy claras (pensa q empese a estudiar hace 2 meses no mas  :P )
1- que tipo de variable es boolean???
2- hay una linea q aparece esto: cantMujeresCasadas += 1
3- despues en esto me re perdi:
MsgBox ("Los Datos de la persona Mayor son:" & vbcrlf &_
   "Nombre: " & strNombreMayor & vbcrlf &_
   "Edad: " & sngEdadMayor & vbcrlf &_
   "Estado Civil: " & strEstCivilMayor & vbcrlf &_
   "Sexo: " & strSexoMayor) osea son los msgbox del final pero no entendi  el "vbcrlf"

elrosti

Cita de: lukillo en Junio 10, 2009, 12:33:48
muchas gracias "elrosti" entendi casi todo pero un par de cosas no me quedaron muy claras (pensa q empese a estudiar hace 2 meses no mas  :P )
1- que tipo de variable es boolean???
2- hay una linea q aparece esto: cantMujeresCasadas += 1
3- despues en esto me re perdi:
MsgBox ("Los Datos de la persona Mayor son:" & vbcrlf &_
   "Nombre: " & strNombreMayor & vbcrlf &_
   "Edad: " & sngEdadMayor & vbcrlf &_
   "Estado Civil: " & strEstCivilMayor & vbcrlf &_
   "Sexo: " & strSexoMayor) osea son los msgbox del final pero no entendi  el "vbcrlf"

1) Boolean es un tipo de dato que puede tener 2 valores posibles "Verdadero" (True) o "Falso" (False), eso te sirve para guardar datos cuando tenes dos posibilidades.

En tu caso por ejemplo en sexo tenes 2 posibilidades, lo podriamos resumir en la pregunta

"¿Es Mjer o No ?"

Por eso seteo la variable esMujer a True cuando el sexo es femenino y en False cuando es Masculino, sabes que si

esMujer = False

Quiere decir que es Hombre (En la practica no es así pero vamos a darlo por supuesto  :jaja: ), si fuera "True" sabes que es Mujer.

2) Esa linea fijate que tiene una comilla siemple ( ' ) adelante, significa que es un comentario, en la mayoría de los lenguajes de programación en lugar de escribir esta linea

cantidad = cantidad + 1

se puede cambiar por esta otra linea

cantidad += 1

Que en realidad hacen lo mismo, sumar 1 a la variable "cantidad", pero la segunda forma es mas facil de entender a simple vista luego de que te acostumbras.

3) vbcrlf es un "Retorno de Carro" o sea, como si precionaras "Enter" cuando estas escribiendo, lo que hace es que el mensaje que muestra quede algo como lo siguiente:

CitarLos Datos de la persona Mayor son:
Nombre: Federico Perez
Edad: 25
Estado Civil: Soltero
Sexo: Masculino

Si no tuviera los "vbcrlf" saldria todo a lo largo y no lo haría renglón por renglon.

El guión bajo ("_") es solo una forma de decirle a Visual Basic que es todo la misma linea de código porque si no da un error al querer compilar, se hace para que quede mas prolijo y no tener una linea demasiado larga de código que despues tengo que andar con las barras de desplazamiento para aca y para alla.

Espero haber sido claro.

Saludos

PD: ¿Compiló ?
Yo no lo quería creer..... pero ella me convenció.

lukillo

muchas gracias rosti! bueno mira lo pase se a visual hubo q agregarle un par de cosas: no me tomo el "_" q estaba alado vbcrlf, después de ingresar todos los datos del 1er encuestado (edad sexo est. civil etc) me tira los datos y no me deja seguir agregando gente revise pero no pude encontrar el error fijate si lo podes ver vos q la tenes mas clara  :jaja:
gracias de nuevo y perdona q tarde en responder

elrosti

ufffff, la verdad que a simple vista no veo nada, se supone que si escribis "si" en la última pregunta no deberías tener problemas y debería volver a preguntarte los datos, pero puede ser que me este faltando algo, como no tengo el Visual Basic (Estoy en Linux) no puedo comprobar la sintaxis, pero a simple vista está bien el loop.

Saludos.

PD: el problema del "_" puede ser porque esta pegado al simbolo "&", deberías dejar un espacio entre el "&" y el "_", sinceramente no he programado mucho en Visual Basic 6 y hace tiempo que no lo hago, por eso no recuerdo bien estos detalles.

PD2: VB 6 apesta, no se si lo estas estudiando en un instituto o si lo estas haciendo por tu cuenta, pero si lo estas haciendo por tu cuenta te diría que apenas entiendas las basicas de Visual Basic 6, empieces a estudiar Visual BAsic .NET que es mucho mejor en todos los aspectos.
Yo no lo quería creer..... pero ella me convenció.