Ver Mensaje Individual
  #2 (permalink)  
Antiguo 27/11/2015, 02:29
eferion
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 9 años, 6 meses
Puntos: 204
Respuesta: Ayuda/explicacion de como hacer esto?

Estás programando en C++ y no has visto nada sobre clases y estructuras???

Cita:
Elaborar un programa para registrar las calificaciones de 5 alumnos de 3 parciales con los siguientes datos:

No. Control, Nombre, Examen1, Examen2, Examen3, Promedio, Aprobado (SI/NO)
Todos esos datos están relacionados entre sí, ya que todos pertenecen a un mismo elemento... el alumno. Lo lógico sería que esa agrupación quedase patente en el código de alguna forma... y para eso se inventaron las estructuras en C y las estructuras y las clases en C++:

Código C++:
Ver original
  1. struct Alumno
  2. {
  3.   std::string nombre;
  4.   int noControl;
  5.   float examen[3];
  6.   float promedio;
  7.   bool aprobado;
  8. };
  9.  
  10. int main()
  11. {
  12.   Alumno alumnos[5];
  13. }

¿Por qué hacerlo así? Pues a ver, podría aburrite comentándote que esto favorece la localidad, que se aprovecha del funcionamiento de la memoria caché y consigue mejorar el rendimiento de los programas... pero al fin y al cabo eso ni te va ni te viene porque tu programa va a tardar prácticamente lo mismo en ejecutarse. Entonces... por qué hacerlo así? Pues por varias razones:

  1. Si estás aprendiendo a programar, lo suyo es poner en práctica TODO... aunque cueste. Sin no te pegas con ello no se aprende.
  2. Mejoras la legibilidad y la calidad del programa. Aunque parezca una soberana tontería es mejor tener todos los elementos del Alumno i en el mismo sitio... imagínate que tienes que pasar todos esos valores a una serie de funciones...
    Código C++:
    Ver original
    1. // sin estructuras
    2.   funcionCualquiera(Alumnos[i],NoCont[i],datos[i][0],datos[i][1],datos[i][2], totales[i],promedio[i],aprobado[i]);
    3.  
    4.   // con estructuras
    5.   functionCualquiera(alumnos[i]);
    ¿prefieres pasar una única estructura o pasar 7 argumentos indpendientes? ¿qué código queda más claro? ¿Con cual es más fácil confundirse? Creo que se responden por sí solas.
  3. Si no aprendes esta base vas a sudar tinta cuando te toquen los temas de herencia, polimorfismo, sobrecarga de operadores, ...

Además, declaras todas las variables como globales... por qué? Si es lo que te están enseñando no digo nada salvo que es para dar de collejas a los profesores hasta llegar al hueso. Las variables globales son un mal vicio que te va a dar muchos problemas en programas más grandes. Es mucho mejor pasar las variables como argumentos (y este es uno de los motivos por el que existen estructuras de datos).

Por otro lado... ¿dónde esperas indicar si un alumno ha aprobado o no?

Más cosillas... ¿No te parece un poco raro que para registrar los alumnos tengas que meter primero el nº de control de los 5 alumnos (sin saber nombres ni nada... solo su posición) y después rellenar los datos de los 5 alumnos? No sería mejor hacerlo rellenar el nº de control y el nombre a la vez?

Ahora, en cuanto a tus problemas:

Para buscar un alumno tienes que pedir al usuario algun dato que identifique inequívocamente al alumno en cuestión... por cómo está escrito el enunciado se entiende que el dato a pedir es el nombre del mismo... aunque también valdría el nº de control. Lo que haces entonces es recorrer el array de alumnos... si el dato del alumno actual coincide con lo indicado por el usuario entonces imprimes los datos de ese alumno y ya está... has terminado.

Para borrar un alumno puedes seguir los siguientes pasos:
  1. Localizas el alumno a eliminar y te posicionas sobre el siguiente
  2. Copias los datos del alumno actual sobre el anterior
  3. Repites el paso anterior hasta que llegues al final del arreglo
  4. Dejas alguna marca en este ultimo usuario para indicar que no es un registro válido (por ejemplo nº de control = -1).

Esto conlleva otros cambios en tu equipo:
[LIST][*]Tanto a la hora de listar los resultados como de hacer búsquedas tienes que parar cuando te encuentres el primer registro borrado[*]A la hora de añadir usuarios tienes que empezar a añadir en el primer registro borrado[LIST]

Con estos detalles en mente no deberías tener ningún problema para terminar tu trabajo.

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.