[ Foro de C# ]
hola buenos dias, quisiera que me ayuden con mi programita, lo q pasa eske estoy haciendo un programa q con 1 boton genere notas, y las notas se dividen en aprobadas y desaprobadas, la nota minima es 13, hay 2 listbox para separarlas, mi problema eske al ultimo para querer sacar el porcentaje de alumnos aprobados y porcentaje de alumnos desaprobados solo me sale un 5, no se porque, ayudenme porfavor, gracias.
public partial class frmArreglos2 : Form
{
Random objRandom = new Random();
int[] intExamenes = new int[20];
public frmArreglos2()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
short intValor;
int c;
double Acum=0;
double Acum2=0;
double Porcentaje1;
double Porcentaje2;
lstAprobados.Items.Clear();
lstDesaprobados.Items.Clear();
for (intValor = 0; intValor < 20; intValor++)
{
c = objRandom.Next(0, 20);
intExamenes[intValor] = c;
if (c >= 13)
{
lstAprobados.Items.Add(c);
Acum = +1;
}
else if (c < 13)
{
lstDesaprobados.Items.Add(c);
Acum2 = +1;
}
}
Porcentaje1 = Acum / 20 * 100;
Porcentaje2 = Acum2 / 20 * 100;
textBox1.Text = Porcentaje1.ToString();
textBox2.Text = Porcentaje2.ToString();
}
}
En caso de problemas como esos, o bien usa el depurador integrado de Visual Studio para ver cómo avanzan los valores de las variables, o bien llévalo a un programa de consola, en el que te será fácil usar WriteLine para analizar todos ellos en pantalla.
Por ejemplo, tu programa se podría reescribir para consola así:
using System;
public class Prueba
{
public static void Main()
{
Random objRandom = new Random();
int[] intExamenes = new int[20];
short intValor;
int c;
double Acum=0;
double Acum2=0;
double Porcentaje1;
double Porcentaje2;
for (intValor = 0; intValor < 20; intValor++)
{
c = objRandom.Next(0, 20);
Console.Write(c+" ");
intExamenes[intValor] = c;
if (c >= 13)
{
Acum = +1;
Console.Write("(Acum:{0}) ", Acum);
}
else if (c < 13)
{
Acum2 = +1;
Console.Write("(Acum2:{0}) ", Acum2);
}
}
Porcentaje1 = Acum / 20 * 100;
Porcentaje2 = Acum2 / 20 * 100;
Console.WriteLine();
Console.WriteLine(Porcentaje1);
Console.WriteLine(Porcentaje2);
}
}
Si lanzas ese programa, verás que su resultado es
18 (Acum:1) 8 (Acum2:1) 17 (Acum:1) 1 (Acum2:1) 14 (Acum:1) 19 (Acum:1) 6 (Acum2
:1) 11 (Acum2:1) 12 (Acum2:1) 3 (Acum2:1) 0 (Acum2:1) 7 (Acum2:1) 16 (Acum:1) 19
(Acum:1) 10 (Acum2:1) 5 (Acum2:1) 1 (Acum2:1) 5 (Acum2:1) 7 (Acum2:1) 16 (Acum:
1)
5
5
Efectivamente, los porcentajes siempre son 5, porque los valores acumulados siempre son 1. Mira la línea en la que cambias el valor de Acum1 y el de Acum2 y te darás cuenta de cuál es el error...
(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)