Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: MartaR95 en 21 Diciembre 2017, 11:44 am



Título: Ayuda con un ejercicio de programación C de nuevo xD
Publicado por: MartaR95 en 21 Diciembre 2017, 11:44 am
Hola! Necesito un poco de ayuda de nuevo, también relacionado con el ejercicio que subí hace unos días: el ejercicio trata basicamente de crear un programa para un colegio con un menu de opciones (introduce datos del alumno, la media del alumno, la media de las asignaturas,buscar un alumno, modificar la nota del alumno, etc.).

Pero hay varios apartados que no me salen:
a) Mostrar por pantalla, a partir de los datos proporcionados, que alumnos han suspendido más de 4 asignaturas (utilizando punteros)
b)Guardar en un fichero los datos proporcionados por la matriz del apartado anterior (ficheros y punteros, ninguno de mis puntos fuertes xD)

Gracias de antemano a todos por vuestra ayuda!

Código:
#include <stdio.h>
#include <stdlib.h>
#define ALUMNOS 3
#define ASIGNATURAS 5
#define COD 10

void leerCodigoAlumnos(char codigoAlumnos[ALUMNOS][COD]);
void leerNotas(char codigoAlumnos[ALUMNOS], float notas[ALUMNOS][ASIGNATURAS]);
void imprimirTodasNotas( char codigoAlumnos[ALUMNOS], float notas [ALUMNOS][ASIGNATURAS]);
void imprimirNotas(char codigoAlumnos[ALUMNOS],float notas[ALUMNOS][ASIGNATURAS]);
void introducirNotas(float matrizNotas[ALUMNOS][ASIGNATURAS],char codigoAlumnos[ALUMNOS][COD]);
int buscarAlumno(char codigoAlumnos[ALUMNOS][COD],char codigoParametro[COD]);
void calculaMediaAlumno(float matrizNotas[ALUMNOS][ASIGNATURAS],char codigoAlumnos[ALUMNOS][COD]);
void calculaMediadeAsignaturas(float matrizNotas[ALUMNOS][ASIGNATURAS]);
void calculaMediaTotal(float matrizNotas[ALUMNOS][ASIGNATURAS]);
void peorMedia(float matrizNotas[ALUMNOS][ASIGNATURAS],char codigoAlumnos[ASIGNATURAS][COD]);
void mediaMasAlta(float matrizNotas[ALUMNOS][ASIGNATURAS],char codigoAlumnos[ASIGNATURAS][COD]);
void mediaMasBaja(float matrizNotas[ALUMNOS][ASIGNATURAS],char codigoAlumnos[ASIGNATURAS][COD]);

void main(){

    int i, j, opcion, enc=0;
    char codigosAlumnos[ALUMNOS][COD];
    float notas[ALUMNOS][ASIGNATURAS];
    float matrizNotas[ALUMNOS][ASIGNATURAS];
    char asignaturas[ASIGNATURAS][20]= {"Fisica","Algebra","Informatica","Bio_celular","Biologia"};

    int posicionAlumno,posicionAsignatura;

    char codigoAbuscar[COD];
    char asignaturaAbuscar[30];

    float notaAmodificar;


    do{

        printf("-------------------- MENU --------------------\n\n");
        printf("1. Introducir las notas de los alumnos\n");
        printf("2. Imprimir notas\n");
        printf("3. Buscar un alumno\n");
        printf("4. Modificar nota de un alumno\n");
        printf("5. Realizar la media de alumnos\n");
        printf("6. Realizar la media de asignaturas\n");
        printf("7. Realizar la media total del curso\n");
        printf("8. Mostrar el alumno que peor notas media ha sacado.\n");
        printf("9. Mostrar el alumno que mejor notas media ha sacado.\n");
        printf("----------------------------------------------\n");
        printf("Introduzca una opcion:\n");
        scanf("%d",&opcion);

        switch (opcion){
        case 1:
            system("CLS");
            leerCodigoAlumnos(codigosAlumnos);
            introducirNotas(matrizNotas,codigosAlumnos);
            enc=1;
            break;

        case 2:
            system("CLS");
            imprime(matrizNotas,codigosAlumnos);
            enc=0;
            break;

        case 3:
            printf("\n");
            printf("Ingrese codigo alumno: ");
            char codigo[10];
            scanf("%s",codigo);
            notasAlumno(matrizNotas,codigosAlumnos,codigo);
            printf("\n");
            break;

        case 4:


            printf("Ingrese codigo de alumno:");
            scanf("%s",codigoAbuscar);
            printf("\n");
            posicionAlumno = buscarPosicion(codigosAlumnos,codigoAbuscar);


            if(posicionAlumno>=0){

                printf("Alumno encontrado, ingrese ahora el codigo de asignatura que desea modificar: ");
                scanf("%s",asignaturaAbuscar);
                posicionAsignatura = buscarPosicionAsignatura(asignaturas,asignaturaAbuscar);

                if(posicionAsignatura>=0){
                    printf("Asignatura encontrada, ingrese la nueva nota: ");

                    scanf("%f",&notaAmodificar);
                    matrizNotas[posicionAlumno][posicionAsignatura]=notaAmodificar;

                    notasAlumno(matrizNotas,codigosAlumnos,codigoAbuscar);

                }else{

                printf("La asignatura no existe");

                }
            }else{

            printf("El alumno no existe");

            }

            printf("\n");
            break;



        case 5:
            printf("\n");
            calculaMediaAlumno(matrizNotas,codigosAlumnos);
            break;

        case 6:
            printf("\n");
            calculaMediadeAsignaturas(matrizNotas);
            break;

        case 7:
            calculaMediaTotal(matrizNotas);
            break;

        case 8:
            printf("\n");
            mediaMasBaja(matrizNotas,codigosAlumnos);
            printf("\n");
            break;

        case 9:
            printf("\n");
            mediaMasAlta(matrizNotas,codigosAlumnos);
            printf("\n");
            break;

            default: printf("\nOpcion no valida. Por favor, vuelva a elegir. \n\n");
        }
    }
    while (opcion!=0);
}
void introducirNotas(float matrizNotas[ALUMNOS][ASIGNATURAS],char codigoAlumnos[ALUMNOS][COD]){
    system("CLS");
    int i,j;

    char nombreAsignatura[ASIGNATURAS][20]= {"Fisica","Algebra","Informatica","Bio_celular","Biologia"};

    for(i=0; i<ALUMNOS; i++){
        printf("Introduce las notas del alumno %d (codigo: %s)",i+1,codigoAlumnos[i]);

        printf("\n");

        for(j=0; j<ASIGNATURAS; j++){
            printf("%s: ",nombreAsignatura[j]);
            scanf("%f",&matrizNotas[i][j]);
        }
        printf("\n");
    }
}
void imprime(float matriz[ALUMNOS][ASIGNATURAS],char codigoAlumnos[ALUMNOS][COD]){

    printf("--------NOTAS ALUMNOS--------\n\n");
    int i,j;

    for(i=0; i<ALUMNOS; i++){
        printf("%s ",codigoAlumnos[i]);
        for(j=0; j<ASIGNATURAS; j++){
            printf("%.2f ",matriz[i][j]);
        }
        printf("\n");
    }
}
void leerCodigoAlumnos(char codigoAlumnos[ALUMNOS][COD]){

    int i;
    for(i=0; i<ALUMNOS; i++){

        printf("Codigo para el alumno %d: ",i+1);
        scanf("%s",codigoAlumnos[i]);
    }
}
int buscarPosicion(char codigoAlumnos[ALUMNOS][COD],char codigoParametro[COD]){

    int enc=0,pos=-1,i;
    i=0;
    while(i<ALUMNOS && !enc){
        if(strcmp(codigoAlumnos[i],codigoParametro)==0){
            enc=1;
            pos=i;
        }
        else{
            i++;
        }
    }
    return (pos);
}

int buscarPosicionAsignatura(char asignaturas[ASIGNATURAS][20],char asigParametro[20]){

    int enc=0,pos=-1,i;
    i=0;
    while(i<ASIGNATURAS && !enc){
        if(strcmp(asignaturas[i],asigParametro)==0){
            enc=1;
            pos=i;
        }
        else{
            i++;
        }
    }
    return (pos);
}

void calculaMediaAlumno(float matrizNotas[ALUMNOS][ASIGNATURAS],char codigoAlumnos[ALUMNOS][COD]){

        float sumaMedias=0;
        int i=0,j=0;
        float vectorMedias[ALUMNOS];
        for(i=0; i<ALUMNOS; i++){
            sumaMedias=0;
            for(j=0; j<ASIGNATURAS; j++){
                sumaMedias+=matrizNotas[i][j];
            }
            printf("La nota media del alumno %s es: %.2f \n \n",codigoAlumnos[i],sumaMedias/ASIGNATURAS);
        }
}
void notasAlumno(float matrizNotas[ALUMNOS][ASIGNATURAS],char codigoAlumnos[ALUMNOS][COD],char codigoParametro[COD]){

    int pos = buscarPosicion(codigoAlumnos,codigoParametro);

    int enc=0,i=0;
    if(pos>=0)
    {
        printf("%s ",codigoAlumnos[pos]);
        for(i=0; i<ASIGNATURAS; i++){
            printf("%.2f ",matrizNotas[pos][i]);
        }
    }
    else{
        printf("El codigo introducido no es correcto");
    }
    printf("\n");
}
void calculaMediadeAsignaturas(float matrizNotas[ALUMNOS][ASIGNATURAS]){

        float sumaMedias=0;
        int i=0,j=0;
        char nombreAsignatura[ASIGNATURAS][20]= {"Fisica","Algebra","Informatica","Bio_celular","Biologia"};

        for(j=0; j<ASIGNATURAS; j++){
            sumaMedias=0;
            for(i=0; i<ALUMNOS; i++){
                sumaMedias+=matrizNotas[i][j];
            }
            printf("La nota media de %s es: %.2f\n \n",nombreAsignatura[j],sumaMedias/ALUMNOS);
        }
}
void calculaMediaTotal(float matrizNotas[ALUMNOS][ASIGNATURAS]){

    float sumaMedias=0;
    int i=0,j=0;
    char nombreAsignatura[ASIGNATURAS][20]= {"Fisica","Algebra","Informatica","Bio_celular","Biologia"};

    for(i=0; i<ALUMNOS; i++){

        for(j=0; j<ASIGNATURAS; j++){
                sumaMedias+=matrizNotas[i][j];
        }
    }
    printf("La nota media total es: %.2f\n \n",sumaMedias/(ALUMNOS*ASIGNATURAS));
}

void mediaMasBaja(float matrizNotas[ALUMNOS][ASIGNATURAS],char codigoAlumnos[ASIGNATURAS][COD]){

    float sumaMedias=0;
    int i=0,j=0;
    float vectorMedias[ALUMNOS];
    for(i=0; i<ALUMNOS; i++){
        sumaMedias=0;
        for(j=0; j<ASIGNATURAS; j++){
            sumaMedias+=matrizNotas[i][j];
            vectorMedias[i]=sumaMedias;
        }
    }
    i=0;
    int pos=0;
    float menor=vectorMedias[0];
    for(i=0;i<ALUMNOS;i++){
        if(vectorMedias[i]<menor){
            menor=vectorMedias[i];
            pos=i;
        }
    }
    printf("La media mas baja es: \n\ncodigo de alumno %s\nNota media: %.2f ",codigoAlumnos[pos],menor/ASIGNATURAS);

}

void mediaMasAlta(float matrizNotas[ALUMNOS][ASIGNATURAS],char codigoAlumnos[ASIGNATURAS][COD]){

    float sumaMedias=0;
    int i=0,j=0;
    float vectorMedias[ALUMNOS];
    for(i=0; i<ALUMNOS; i++){
        sumaMedias=0;
        for(j=0; j<ASIGNATURAS; j++){
            sumaMedias+=matrizNotas[i][j];
            vectorMedias[i]=sumaMedias;
        }
    }
    i=0;
    int pos=0;
    float mayor=vectorMedias[0];
    for(i=0;i<ALUMNOS;i++){
        if(vectorMedias[i]>mayor){
            mayor=vectorMedias[i];
            pos=i;
        }
    }
    printf("La media mas alta es:\ncodigo de alumno %s\nNota media: %.2f ",codigoAlumnos[pos],mayor/ASIGNATURAS);
}