[ Foro de C# ]

porcentaje listBox

26-Mar-2014 17:05
Invitado (cristian gonzalez)
1 Respuestas

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();
        }

        
    }



28-Mar-2014 23:18
Nacho Cabanes (+83)

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.)