[ Foro de C# ]

como puede seguir acumulando valor para obtener promedio

13-Nov-2013 10:52
Invitado (alexia)
2 Respuestas

Escriba un programa que pida los siguientes datos para un grupo de alumnos:
Nombre, número de materias que lleva y promedio de cada una de las materias que
lleva. Con ello debera imprimir lo siguiente:
- Promedio de cada alumno
- Promedio del grupo
- Numero de aprobados
- Numero de reprobados
*utilizo visual c# 2008*
-------este es el codigo que tengo--

 
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
 
namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
 
 
 
 
        }
 
        private void button1_Click_1(object sender, EventArgs e)
        {//lo hace para 3 alumnos pero de igual manera tendria que funcionar si le pongo 20, cal son las calificaciones que tendra, "cal1 y cal2" es en donde pondra las variables de sus notas ej(9 10)  "x "son el numero de materias ej.(2) pg es el promedio grupal yy prom es el promedio del alumno sumando las notas y dividiendo entre las materias ej(9+9=18/2=9)//
            int alumnos, cal, cal1, cal2, x,   pg, prom;
            for (alumnos = 1; alumnos <= 3; alumnos ++)
            {
                x = int.Parse(txtmaterias.Text);
 
                int Apro=0, Repro=0,suma=0;
              //apro son el numero de aprobados y repro representa lo contrario   *suma la utilizo para acumular el promedio de cada aluumo ej(9+9+9=27)para asi dividir entre los alumnos y obtener el "pg" ej.(27/3=9)
              for (cal = 1; cal <=x; cal ++)
              {
                  cal1 = int.Parse(txt1.Text); 
                  cal2 = int.Parse(txt2.Text); 
 
                  prom = (cal1 + cal2) / x; 
                  MessageBox.Show("tu calificacion es de" + prom);
                  suma = suma + prom; x = 0; cal1 = 0; cal2 = 0; 
                  if (prom >= 6)
                  {
                      MessageBox.Show("Aprobaste");
                      Apro = Apro + 1; MessageBox.Show("el numero de aprobados es" + Apro);
                  }
                  if (prom <= 5)
                  {
                      MessageBox.Show("reprobaste");
                      Repro = Repro + 1; MessageBox.Show("los reprobados fueron" + Repro);
                  }
                  pg = suma / 3; prom = 0; suma = 0; 
                  MessageBox.Show("el promedio grupal es" + pg);
 
 
 
              } return;
 
            } 
        }
    }
}
 


//bueno asi me corre bien pero en la segunda vuelta ya no suma cuantos pasaron(ap) y cuantos no(rep)** y lo otro es de que modificaria si el alumno tiene 10 materias y el que sigue 5 y el otro 3????
les agradesco de antemano la ayuda, espero que puedan responder es urgente, desde que sali d la escuela lo estube haciendo y pues ahora son las 3:48 a.m. y mañana hay clases


15-Nov-2013 10:58
Nacho Cabanes (+32)

En primer lugar, no lo dejes tan para última hora: lo habitual es que en este foro tengas respuesta en 2-3 días o menos, pero no siempre podrás tener respuesta en el mismo día.

En segundo lugar, intenta simplificar, reducir el problema al fragmento de código más pequeño posible. En este caso, el fuente es sencillo, pero es de Windows Forms, con lo cual nadie podrá probarlo sin tener "la otra mitad", que es la parte visual. Por eso, lo ideal sería que lo hicieras primero en modo consola, porque un programa de consola es "autosuficiente", te permite centrarte en la lógica y te permite que otra persona lo pueda probar en caso de tener dudas. Cuando ya funcione bien, lo puedes adaptar a Windows Forms fácilmente, si ese es el formato en el que lo debes entregar.

Tu programa, adaptado a consola quedaría:

 
using System;
 
namespace exercicio
{
    class exercicio
    {
        static void Main()
        {
            int alumnos, cal, cal1, cal2, x,   pg, prom;
            for (alumnos = 1; alumnos <= 3; alumnos ++)
            {
                Console.WriteLine("Alumno "+alumnos);
                Console.WriteLine("Cuántas materias?");
                x = int.Parse(Console.ReadLine());
 
                int Apro=0, Repro=0,suma=0;
                //apro son el numero de aprobados y repro representa lo contrario   
                //suma la utilizo para acumular el promedio de cada aluumo ej(9+9+9=27)
                //para asi dividir entre los alumnos y obtener el "pg" ej.(27/3=9)
                for (cal = 1; cal <=x; cal ++)
                {
                      Console.WriteLine("Nota 1?");
                      cal1 = int.Parse(Console.ReadLine()); 
                      Console.WriteLine("Nota 2?");
                      cal2 = int.Parse(Console.ReadLine()); 
 
                      prom = (cal1 + cal2) / x; 
                      Console.WriteLine("tu calificacion es de " + prom);
                      suma = suma + prom; x = 0; cal1 = 0; cal2 = 0; 
                      if (prom >= 6)
                      {
                          Console.WriteLine("Aprobaste");
                          Apro = Apro + 1; 
                          Console.WriteLine("el numero de aprobados es " + Apro);
                      }
                      if (prom <= 5)
                      {
                          Console.WriteLine("reprobaste");
                          Repro = Repro + 1; 
                          Console.WriteLine("los reprobados fueron " + Repro);
                      }
                      pg = suma / 3; prom = 0; suma = 0; 
                      Console.WriteLine("el promedio grupal es " + pg);
                } 
            }
        }
    }
}
 


Pero el resultado es desconcertante:

 
Alumno 1
Cuántas materias?
2
Nota 1?
2
Nota 2?
3
tu calificacion es de 2
reprobaste
los reprobados fueron 1
el promedio grupal es 0
Alumno 2
Cuántas materias?
5
Nota 1?
4
Nota 2?
6
tu calificacion es de 2
reprobaste
los reprobados fueron 1
el promedio grupal es 0
Alumno 3
Cuántas materias?
10
Nota 1?
8
Nota 2?
9
tu calificacion es de 1
reprobaste
los reprobados fueron 1
el promedio grupal es 0
 



Como puedes ver, no se comporta bien. Siempre pide dos notas (porque pides "cal1" y "cal2", en vez de usar un "for"), y no creo que debiera ser así. Y siempre pide una única materia, porque haces

 
suma = suma + prom; x = 0; cal1 = 0; cal2 = 0; 
 


(donde "x" es como has llamado a la cantidad de materias). Sólo con quitar ese "x = 0;" se debería comportar mejor, pero sigo sin entender por qué pides siempre dos notas...

Mi recomendación es que avances poco a poco para asegurarte de tienes cada paso claro:

- Primero crea un programa (de consola) que te pidas 5 notas y calcule su media.

- Luego otro programa que te pregunte cuántas notas, te pida las notas y te muestre su media y te diga si está aprobado o no.

- Luego otro que haga lo mismo para dos alumnos distintos.

- Luego amplíalo para varios alumnos (la cantidad que escoja el usuario). Con eso ya estarás casi en el ejercicio que te han pedido.


16-Nov-2013 04:00
Invitado (alexia)

muchas gracias por responder de alguna manera me ayudo a entender mejor para que tenga mas logica y la verdad fue muy estresante no poder correrlo bien
Saludos






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