Foros del Web » Programando para Internet » Javascript »

Variable multiplica en vez de sumar

Estas en el tema de Variable multiplica en vez de sumar en el foro de Javascript en Foros del Web. Hola gente de forosdelweb, llego aca porque estuve un rato largo tratando de encontrarle solución a un problema pero me seco la cabeza y decidi ...
  #1 (permalink)  
Antiguo 09/07/2012, 00:50
Avatar de goodmrN  
Fecha de Ingreso: junio-2012
Ubicación: Argentina, Viedma
Mensajes: 2
Antigüedad: 11 años, 10 meses
Puntos: 0
Variable multiplica en vez de sumar

Hola gente de forosdelweb, llego aca porque estuve un rato largo tratando de encontrarle solución a un problema pero me seco la cabeza y decidi preguntar por acá.

Estoy aprendiendo JavaScript y se me presento el siguiente problema que lo debo hacer con do while:

Se realizó un censo provincial y se desea procesar la información obtenida en dicho censo. De cada una de las personas censadas se tiene la siguiente información: número de documento, edad y sexo ('femenino' o 'masculino')
Se pide confeccionar un programa que lea los datos de cada persona censada (para finalizar ingresar el valor cero en el número de documento) e informar:

a) Cantidad total de personas censadas.
b) Cantidad de varones.
c) Cantidad de mujeres.
d) Cantidad de varones cuya edad varía entre 16 y 65 años.


Lo que yo hice fue esto:

Código:
                var varon='varon';
		var mujer='mujer';
		var varones=0;
		var mujeres=0;
		var varia=0;

		do {
			var doc=prompt('Numero de documento');
			doc=parseInt(doc);

			if (doc!=0) {
				var edad=prompt('Edad');
				var sexo=prompt('Sexo');
				edad=parseInt(edad);
			};

			if (sexo==varon) {
				varones=varones+1;
			}else {
				if (sexo==mujer) {
					mujeres=mujeres+1;
				}
			};

			if (sexo==varon && edad>=16 && edad<=65) {
					varia=varia+1;
				}
		} while (doc!=0);

		var cantidad=varones+mujeres;
		document.write('Fueron censados '+cantidad+'<br>');
		document.write('La cantidad de varones es de '+varones+'<br>');
		document.write('La cantidad de mujeres es de '+mujeres+'<br>');
		document.write('La cantidad de varones de entre 16 y 65 años es de '+varia);
Hasta ahi yo creo que el codigo deberia funcionar bien pero en vez sumarme las variables de varones, mujeres y varia, se me multiplican, por ejemplo cargo los datos de una persona y en vez de darme como resultado que fueron censados 1 persona, me da que fueron 2 y lo mismo con las demas variables. Digo que se multiplica en vez de sumar porque cambie el +1 por un +2 y de resultado me daba 4 y lo mismo con otros numeros me los multiplica en vez de sumarme 1 por cada variable con valor mujer o varon.

Espero poder haber sido claro y que alguien me pueda guiar al menos para poder hacerlo.

Desde ya muchísimas gracias a los que respondan.

Última edición por goodmrN; 09/07/2012 a las 01:15
  #2 (permalink)  
Antiguo 09/07/2012, 02:55
 
Fecha de Ingreso: enero-2012
Ubicación: Santiago de Surco, Lima - Perú
Mensajes: 266
Antigüedad: 12 años, 3 meses
Puntos: 57
Información Respuesta: Variable multiplica en vez de sumar

Hola goodmrN, que tal. Bienvenido a Foros del Web.

Verás es muy simple, te explico.
Código Javascript:
Ver original
  1. <script>
  2.     do {
  3.         //hacer esto!
  4.     } while (doc!=0);//hasta que esto sea FALSO
  5. </script>
Tu resultado no se multiplica, lo que sucede es que tu resultado se incrementa en +1; por ejemplo si registras 3 personas tu resultado será 3+1 (4). y esto sucede porque después de registrar el sexo de la la ultima persona automáticamente vuelves a entrar en el do pidiendo el número de documento al cual pones 0 (cero) y tu variable varon o mujer aun tiene el ultimo valor que le ingresaste así que entra en cualquiera de los condicionales que comparan el sexo y es ahí en donde se le adiciona +1 a tu resultado final.

Lo que puedes hacer es limpiar las variables después de cada registro o como también finalizar inmediatamente el bucle cuando agregas 0 al documento y así evitar que continúe en los condicionales de sexo.

Coméntanos tus cambios.
  #3 (permalink)  
Antiguo 09/07/2012, 06:12
 
Fecha de Ingreso: marzo-2012
Ubicación: Madrid
Mensajes: 74
Antigüedad: 12 años, 1 mes
Puntos: 12
Respuesta: Variable multiplica en vez de sumar

Muy bien diagnosticado/descrito por gebremswar.


Si no quieres "romper el bucle", simplemente mueve los if donde evaluas sexo y edad dentro del cuerpo del if (doc!=0), y ya te funcionaria correctamente.
  #4 (permalink)  
Antiguo 09/07/2012, 11:42
Avatar de goodmrN  
Fecha de Ingreso: junio-2012
Ubicación: Argentina, Viedma
Mensajes: 2
Antigüedad: 11 años, 10 meses
Puntos: 0
Respuesta: Variable multiplica en vez de sumar

Hola, gracias por la bienvenida y por responder, termine solucionando el problema agregándole el doc!=0 a la condición de los if y funciona correctamente, el codigo quedo así.

Código Javascript:
Ver original
  1. <script type="text/javascript">
  2.  
  3.         var varon='varon';
  4.         var mujer='mujer';
  5.         var varones=0;
  6.         var mujeres=0;
  7.         var varia=0;
  8.  
  9.         do {
  10.             var doc=prompt('Numero de documento');
  11.             doc=parseInt(doc);
  12.  
  13.             if (doc!=0) {
  14.                 var edad=prompt('Edad');
  15.                 var sexo=prompt('Sexo');
  16.                 edad=parseInt(edad);
  17.             }
  18.  
  19.             if (doc!=0 && sexo==varon) {
  20.                 varones=varones+1;
  21.             }else {
  22.                 if (doc!=0 && sexo==mujer) {
  23.                     mujeres=mujeres+1;
  24.                 }
  25.             }
  26.  
  27.             if (doc!=0 && sexo==varon && edad>=16 && edad<=65) {
  28.                     varia=varia+1;
  29.                 }
  30.         } while (doc!=0);
  31.  
  32.         var cantidad=varones+mujeres;
  33.         document.write('Fueron censados '+cantidad+'<br>');
  34.         document.write('La cantidad de varones es de '+varones+'<br>');
  35.         document.write('La cantidad de mujeres es de '+mujeres+'<br>');
  36.         document.write('La cantidad de varones de entre 16 y 65 años es de '+varia);
  37.  
  38.     </script>

De nuevo gracias gente de forosdelweb.
  #5 (permalink)  
Antiguo 09/07/2012, 19:02
 
Fecha de Ingreso: enero-2012
Ubicación: Santiago de Surco, Lima - Perú
Mensajes: 266
Antigüedad: 12 años, 3 meses
Puntos: 57
Respuesta: Variable multiplica en vez de sumar

Hay muchas maneras de solucionarlo, que bueno que lo solucionaste y por compartir tu código
  #6 (permalink)  
Antiguo 10/07/2012, 05:29
 
Fecha de Ingreso: marzo-2012
Ubicación: Madrid
Mensajes: 74
Antigüedad: 12 años, 1 mes
Puntos: 12
Respuesta: Variable multiplica en vez de sumar

Hombre, la solucion es valida, funciona.
Pero un poco "rara" ¿no?
Añadir una clausula, la misma, a todas las condicionales no es normal. Lo suyo es anidar las condicionales.

if (a & b)
if (a & C)
if (a & d)
if (a & e)

Es lo mismo que:

if (a) {
if (b)
if (C)
if (d)
if (e)
}

Y lo segundo es mas optimo en ejecucion, y yo creo que se lee mejor.

Etiquetas: funcion, vez, variables
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.
Respuesta




La zona horaria es GMT -6. Ahora son las 19:24.