Ayuda nuevamente con este simple codigo

Iniciado por spiderboot, 12 Mayo 2014, 21:33 PM

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

spiderboot

Se supone que el codigo debe resolver la siguiente cuestion se ingresan cierta cantidad de alumnos aprobados y cierta cantidad de alumnos reprobados, el programa debe arrojar el numero total de alumnos, el porcentaje de alumnos aprobados y el porcentaje de alumnos reprobados: para la cual elabore el siguiente codigo, pero no me realiza las operaciones, probe con estas cantidades 15 aprobados y 35 reprobados y solo funciona cuando me calcula el total de alumno (50), en los procentajes me arroja cero, espero su ayuda y gracias de antemano
#include <cstdlib>
#include <iostream>

using namespace std;

int main(int argc, char *argv[])
{
   
   int alaprobados;
   int alreprobados;
   int total;
   int paprobados;
   int preprobados;
   
   printf ("Ingrese el numero de alumnos Aprobados \t\n");
   scanf ("%d", &alaprobados);
   
   printf ("Ingrese el numero de alumnos reprobados \t\n");
   scanf ("%d", & alreprobados);
   
   total=alaprobados+alreprobados;
   printf ("El numero total de alumnos es %d \t\n", total);
   
   paprobados=alaprobados/total*100;
   printf ("El porcentaje de alumnos aprobados es %d Porciento \t\n", paprobados);
   
   preprobados=alreprobados/total*100;
   printf ("El porcentaje de alumnos NO aprobados es %d Porciento\t\n", preprobados);
   
       
   
   system("PAUSE");
   return EXIT_SUCCESS;
}



he intentado cambiar las ultimas 2 variables (paprobados y preprobados) a tipo flotante para ver si es por alla el problema pero el resultado es el mismo 0.0000

Blaster

#1
Para sacar el porcentaje de aprobados y reprobados del total, la operación la debes cambiar a esta

Código (cpp) [Seleccionar]
paprobados = (alaprobados*100)/total;
preprobados = (alreprobados*100)/total;


Utiliza el tipo float para obtener resultados mas precisos

Saludos.

Caster

¿Y por qué el resultado es 0 haciendo las operaciones sin paréntesis?

Blaster

Cita de: Caster en 12 Mayo 2014, 22:58 PM
¿Y por qué el resultado es 0 haciendo las operaciones sin paréntesis?

En el codigo de Spiderboot al dividir el número de aprobados por el total, el resultado siempre es cero ya que en C siempre se trunca cualquier valor real donde interviene el tipo int pasandolo al entero mas cercano y luego al multiplicarlo por cien da el cero que mencionas

Saludos




Caster

Cita de: Blaster en 12 Mayo 2014, 23:38 PM
En el codigo de Spiderboot al dividir el número de aprobados por el total, el resultado siempre es cero ya que en C siempre se trunca cualquier valor real donde interviene el tipo int pasandolo al entero mas cercano y luego al multiplicarlo por cien da el cero que mencionas

Saludos





Al dividir 15/35 da 0.4... por lo tanto lo redondea a 0 y después al multiplicarlo por 100 sigue dando cero, ¿no?

Blaster

Cita de: Caster en 12 Mayo 2014, 23:41 PM
Al dividir 15/35 da 0.4... por lo tanto lo redondea a 0 y después al multiplicarlo por 100 sigue dando cero, ¿no?

Correcto, como ya sabes todo número multiplicado por cero da cero

Saludos

Caster

Pero sin embargo si introduces los números 15 y 1, el total es 16 por lo tanto al dividir 15/16 en los alumnos aprobados el resultado es 0.9... lo que redondea a 1 y multiplicado por 100 es 100 no 0 y el resultado que da el programa es 0.

Un saludo

rir3760

Cita de: Caster en 12 Mayo 2014, 23:49 PMsin embargo si introduces los números 15 y 1, el total es 16 por lo tanto al dividir 15/16 en los alumnos aprobados el resultado es 0.9... lo que redondea a 1
No, como ya te comento Blaster en la división entera la parte decimal se descarta, el resultado de 15 / 16 es 0.

Un saludo
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language

leosansan

Cita de: Caster en 12 Mayo 2014, 23:49 PM
Pero sin embargo si introduces los números 15 y 1, el total es 16 por lo tanto al dividir 15/16 en los alumnos aprobados el resultado es 0.9... lo que redondea a 1 y multiplicado por 100 es 100 no 0 y el resultado que da el programa es 0.


No se hace un redondeo sino un truncamiento, vamos le quita los decimales y se queda con la parte entera.

¡¡¡¡ Saluditos! ..... !!!!



spiderboot

gracia compañero mil gracias, copie y pegue el codigo que me proporcionaron y resulto, aunque creo que ya lo habia puesto asi, pero no habia funcionado, lo copie y pegue y se soluciono, gracias por su tiempo y conocimiento