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",¬aAmodificar);
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);
}