elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Introducción a Git (Primera Parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Ayuda con un ejercicio de programación C :(
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Ayuda con un ejercicio de programación C :(  (Leído 2,039 veces)
MartaR95

Desconectado Desconectado

Mensajes: 9


Ver Perfil
Ayuda con un ejercicio de programación C :(
« en: 17 Diciembre 2017, 03:11 am »

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 ^^


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 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);
}





En línea

eduardo1012

Desconectado Desconectado

Mensajes: 32


Ver Perfil
Re: Ayuda con un ejercicio de programación C :(
« Respuesta #1 en: 17 Diciembre 2017, 06:32 am »

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.
Código:
printf("%s: ",nombreAsignatura[j]);
            scanf("%f",&matrizNotas[ALUMNOS][ASIGNATURA]);//A modificar


En línea

MartaR95

Desconectado Desconectado

Mensajes: 9


Ver Perfil
Re: Ayuda con un ejercicio de programación C :(
« Respuesta #2 en: 21 Diciembre 2017, 11:31 am »

Gracias por tu ayuda! Al final he conseguido sacarlo :)
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Ejercicio programacion BAT & Ayuda
Scripting
martintwo 1 2,345 Último mensaje 22 Octubre 2011, 02:44 am
por leogtz
Ejercicio programacion BAT & Ayuda
Scripting
martintwo 9 5,194 Último mensaje 24 Octubre 2011, 08:05 am
por ratefab
programación en C ayuda ejercicio
Ejercicios
clauditaal2013 1 2,425 Último mensaje 7 Agosto 2014, 17:13 pm
por Xandrete
Ayuda con un ejercicio de programación C de nuevo xD
Programación C/C++
MartaR95 0 1,550 Último mensaje 21 Diciembre 2017, 11:44 am
por MartaR95
Ayuda ejercicio programación
Programación General
r34albert 1 2,227 Último mensaje 5 Enero 2019, 01:46 am
por EdePC
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines