Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Ayuda/explicacion de como hacer esto?

Estas en el tema de Ayuda/explicacion de como hacer esto? en el foro de C/C++ en Foros del Web. Qué tal? Necesito saber si alguien pudiera ayudarme/explicarme como realizar lo que me falta. El programa debe hacer lo siguiente: Elaborar un programa para registrar ...
  #1 (permalink)  
Antiguo 26/11/2015, 19:43
 
Fecha de Ingreso: noviembre-2015
Mensajes: 1
Antigüedad: 8 años, 4 meses
Puntos: 0
Ayuda/explicacion de como hacer esto?

Qué tal? Necesito saber si alguien pudiera ayudarme/explicarme como realizar lo que me falta.

El programa debe hacer lo siguiente:

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)

El programa debe tener un menú donde:

1)Se registren los alumnos y las calificaciones
2)Buscar alumno (mostrará los detalles de ese alumno)
3)Borrar alumno
4)Mostrar promedios(mostrará nombre de alumno y promedio)
5)Mostrar aprobados(solamente mostrará alumnos que han aprobado, promedio mínimo: 70)

---------------------------------------------

Me faltan los incisos 2) y 3) que la verdad no tengo ni idea de como hacerlo. Lo que llevo hasta ahora lo he hecho modificando programillas que hemos hecho antes en clase.

Código:
#include <iostream>
#include <stdio.h>
#include <stdlib.h>

using namespace std;

string Alumnos[5];
string NoCont[5];
float datos[5][3];
char pal[20];
float n;
float totales[3];
float promedio[3];

//Para pedir el no control

void NoControl() {
	cout << "HAZ SELECCIONADO LA OPCION PARA REGISTRAR EL NO. CONTROL" << endl;

    cin.ignore(); 
    for(int i = 0; i < 5; i++){
        cout << "Ingresa el No. de Control del Alumno No. " << (i+1) << endl;
        cin.getline(pal, 20); 
		NoCont[i] = pal;
    }
}

//Registrar los alumnos

void pedirAlumno(){
	cout << "HAZ SELECCIONADO LA OPCION PARA REGISTRAR A LOS ALUMNOS Y SUS CALIFICACIONES" << endl;

    cin.ignore(); 
    for(int i = 0; i < 5; i++){
        cout << "Ingresa el nombre del Alumno No. " << (i+1) << endl;
        cin.getline(pal, 20); 
		Alumnos[i] = pal;
    }
    for(int f=0;f<5;f++){
	for(int c=0;c<3;c++){
		cout<<"Escriba las calificaciones de: "<< Alumnos[f]<<" : ";
		cin>> n;
		datos[f][c]=n;
		totales[f]= totales[f]+datos[f][c]/3;
	}
}
}

// Para imprimir los nombres de los alumnos
//Creo que esta funcion y la siguiente imprimNoCont
//me serviria para el inciso 2) ?

void imprimAlum(){
	
cout << "ALUMNOS REGISTRADOS " << endl;

    for(int i = 0; i < 5; i++){
    cout << "El alumno No. " << (i+1) << " es: " << Alumnos[i] << endl;
    }
}

//Imprimir no control

void imprimNoCont(){
	
cout << "NUMEROS DE CONTROL " << endl;

    for(int i = 0; i < 5; i++){
    cout << "El numero de control " << (i+1) << " es: " << Alumnos[i] << endl;
    }
}

// Imprimir Nombre, calificaciones y promedio

void imprimeCalif(){
for(int f=0;f<5;f++){
	cout<<Alumnos[f]<<"   ";
	for(int c=0;c<3;c++){
cout<<datos[f][c]<<"   ";

    }cout<<totales[f]<<endl;	
    	cout<<endl;

}

	
}

void Menu(){
	int op = 0;

	do{
		cout << "-------- MENU PRINCIPAL ----------" << endl;
		cout << "[1] REGISTRAR EL NUMERO DE CONTROL " << endl;
		cout << "[2] REGISTRAR A LOS ALUMNOS Y SUS CALIFICACIONES" << endl;
cout << "[3] MOSTRAR PROMEDIOS" << endl;
		cout << "[-1] Salir del programa." << endl;
		cin >> op;

		switch(op){
			case -1:
				cout << "Cerraras el programa... estas seguro? [1] SI [2] NO" << endl;
				cin >> op;
				if(op == 1) op = -1;
				else op = 0;
				break;

			case 1:
				NoControl();
				break;

            case 2:
           pedirAlumno();
            break;

            case 3:
            	imprimeCalif();
            	
            	break;

			default:
				cout << "!!! Ingresa una opcion valida !!!" << endl;
		}
	}while(op != -1);
}
int main(int argc, char** argv) {

	Menu();
	return 0;
}
Gracias.
  #2 (permalink)  
Antiguo 27/11/2015, 02:29
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 9 años, 5 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.
  #3 (permalink)  
Antiguo 27/11/2015, 07:21
 
Fecha de Ingreso: febrero-2015
Mensajes: 404
Antigüedad: 9 años, 1 mes
Puntos: 3
Respuesta: Ayuda/explicacion de como hacer esto?

Cita:
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.
Jajaja esa frase me la guardo

Etiquetas: char, funcion, int, numero, programa, string
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 03:48.