Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Duda con el código fuente

Estas en el tema de Duda con el código fuente en el foro de C/C++ en Foros del Web. Buenas, como veran tengo un problema con el siguiente codigo; Código: #include <stdio.h> main() { int H,M, CANT_A ; float PORC_H,PORC_M; printf("Ingrese, cantidad de hombres ...
  #1 (permalink)  
Antiguo 20/02/2016, 19:19
Avatar de Zaitons  
Fecha de Ingreso: febrero-2016
Mensajes: 1
Antigüedad: 8 años, 1 mes
Puntos: 0
Busqueda Duda con el código fuente

Buenas, como veran tengo un problema con el siguiente codigo;

Código:
#include <stdio.h>
main()
{
	int H,M,CANT_A;
	float PORC_H,PORC_M;
	
	printf("Ingrese, cantidad de hombres en la asignatura de matematicas:\n");
	
	scanf("%i",&H);
	
	printf("\nIngrese, cantidad de muejeres en la asignatura de matematicas:\n");
	
	scanf("%i",&M);
	
	CANT_A=H+M;
	
	PORC_H=(H/CANT_A)*100;
	
	PORC_M=(M/CANT_A)*100;
	
	
	printf("\n(%f) porciento representa (%i) mujeres en la seccion de matematicas, por\notra parte un (%f) porciento representa (%i) hombres siendo la cantidad\nfaltante para tener un valor de (%i) alumnos.\n", PORC_M,M,PORC_H,H,CANT_A);
	
}
lo hice por mi mismo ya que fue una tarea asignada para comenzar en programacion pero cuando quiero que me muestre el porcentaje en cualquiera de los casos me arroja como resultado (0) el cual es un valor errado:




luego de mover un poco el codigo hice estos ajustes y corrio de maravilla pero no creo que debería ser ya que quiero que me de valores enteros en la parte de CANT_A = cantidad de alumnos y en la parte de de PORC_H Y PORC_M quiero valores reales por ser un porcentaje quien pueda ayudarme con el codigo se lo agradeceria un monton

el cambio que hice en el codigo fuente fue el siguiente, tome mi variable CANT_A y la pase de ser entera a real;

Código:
int H,M;
	float PORC_H,PORC_M,CANT_A;
Código:
printf("\n(%f) porciento representa (%i) mujeres en la seccion de matematicas, por\notra parte un (%f) porciento representa (%i) hombres siendo la cantidad\nfaltante para tener un valor de (%f) alumnos.\n", PORC_M,M,PORC_H,H,CANT_A);
  #2 (permalink)  
Antiguo 20/02/2016, 20:20
Avatar de carlillos  
Fecha de Ingreso: febrero-2007
Ubicación: México
Mensajes: 245
Antigüedad: 17 años, 2 meses
Puntos: 21
Respuesta: Duda con el código fuente

Tal vez si haces una conversión (int)CANT_A.
Código C:
Ver original
  1. #include <stdio.h>
  2. main()
  3. {
  4.     int H,M;
  5.     float PORC_H,PORC_M, CANT_A;
  6.    
  7.     printf("Ingrese, cantidad de hombres en la asignatura de matematicas:\n");
  8.    
  9.     scanf("%i",&H);
  10.    
  11.     printf("\nIngrese, cantidad de muejeres en la asignatura de matematicas:\n");
  12.    
  13.     scanf("%i",&M);
  14.    
  15.     CANT_A=H+M;
  16.    
  17.     PORC_H=(H/CANT_A)*100;
  18.    
  19.     PORC_M=(M/CANT_A)*100; 
  20.    
  21.     printf("\n(%f) porciento representa (%i) mujeres en la seccion de matematicas, por\notra parte un (%f) porciento representa (%i) hombres siendo la cantidad\nfaltante para tener un valor de (%i) alumnos.\n", PORC_M,M,PORC_H,H,(int)CANT_A);
  22.    
  23. }
Saludos.
  #3 (permalink)  
Antiguo 21/02/2016, 05:54
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 9 años, 6 meses
Puntos: 204
Respuesta: Duda con el código fuente

Código C:
Ver original
  1. int H,M,CANT_A;
  2. float PORC_H,PORC_M;
  3.  
  4.    
  5. PORC_H=(H/CANT_A)*100;

H y CANT_A son enteros, luego la división de ambos da como resultado un entero, lo que hace que pierdas los decimales.

Código C:
Ver original
  1. PORC_H=(H/(float)CANT_A)*100;

Esta otra combinación, en cambio, divide un entero entre un float. En este caso el estándar dicta que el resultado se devuelva en forma de float, es decir, con decimales.

Después ese float se multiplica por un entero, en este caso el estándar dice que el resultado será otra vez un float, manteniendo los decimales.

Otra posibilidad sin hacer conversiones explícitas:

Código C:
Ver original
  1. PORC_H=H*100.0/CANT_A;

En este caso int*float=float y float/int=float, luego tampoco perderás los decimales.

Un saludo.
__________________
La ayuda se paga con esfuerzo o con dinero. Si no estás dispuesto a esforzarte y quieres que te hagan los deberes pide presupuesto, al menos así ahorrarás tiempo.

Etiquetas: c++, problemita
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 17:00.