Ayuda con un ejercicio de programación C :(

Iniciado por MartaR95, 17 Diciembre 2017, 03:11 AM

0 Miembros y 1 Visitante están viendo este tema.

MartaR95

Hola! Hace poco he empezado a programar con lenguaje c y necesito un poco de ayuda con un ejercicio.

Se supone que hay que implementar un servicio para un colegio que tenga varias funciones, pero hay una que por mas que lo intento no funciona.

Sabeis como puedo implementar una función que modifique la nota de una determinada asignatura de un alumno? Gracias de antemano por vuestra ayuda ^^


#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 buscarPosicion(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];

    do{

        printf("-------------------- MENU --------------------\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 mejor notas media ha sacado.\n");
        printf("9. Mostrar el alumno que peor 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 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;
        }
    }
    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 para el 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][30]){

    printf("--------NOTAS ALUMNOS--------\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++){
        //!!!NO HACE FALTA ASPERSAND PARA RECOGER DATOS DE TIPO CADENA.
        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);
}
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("Alumno:%s Nota media:%.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("Nota media %s -> %.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("Nota media total -> %.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("MEDIA MAS BAJA\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("MEDIA MAS ALTA\ncodigo de alumno: %s\nNota media: %.2f ",codigoAlumnos[pos],mayor/ASIGNATURAS);
}




eduardo1012

Debes de mostrar los alumnos y las asignaturas, sabiendo cual es la posicion de tu matriz, (alumno y asignatura) puedes hacer el cambio tal cual lo haces al momento de pedirlas.

printf("%s: ",nombreAsignatura[j]);
            scanf("%f",&matrizNotas[ALUMNOS][ASIGNATURA]);//A modificar

MartaR95

Gracias por tu ayuda! Al final he conseguido sacarlo :)