Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: indict en 15 Abril 2013, 18:03 pm



Título: duda matrices c++
Publicado por: indict en 15 Abril 2013, 18:03 pm
Hola,

Dada una matriz de notas, donde las filas son el nº de alumnos y las columnas el nº de asignaturas , para calcular la nota media por alumno se haría:

Código:
vector<vector<double> >notas(n, vector<double>(m));
for(int i=0; i<n; i++){
double suma=0;
for (int j=0; j<m; j++){
suma=suma+notas[i][j];
}

}

Ahora bien, para calcular la nota media por asignaturas, he pensado de hacerlo de dos maneras, me gustaría que me dijerais si está bien de las dos maneras...

Código:
vector<vector<double> >notas(n, vector<double>(m));
for(int i=0; i<m; i++){
double suma=0;
for (int j=0; j<n; j++){
suma=suma+notas[i][j];
}

}

o
con solo cambiar los subíndices ya basta.
Código:
vector<vector<double> >notas(n, vector<double>(m));
for(int i=0; i<n; i++){
double suma=0;
for (int j=0; j<m; j++){
suma=suma+notas[j][i];
}

}

Gracias de antemano :)


Título: Re: duda matrices c++
Publicado por: Puntoinfinito en 15 Abril 2013, 18:51 pm
Comenzar por columnas y que cada una de ellas analice sus alumnos, que comenzar por alumnos comparando asignaturas, es lo mismo.

Ej.

AlumnoMatesCastellanoInglés
Marcos967
Alex685
Daniel473

Si queremos hacer la media de cada uno, será lo mismo comenzar así:

Código
  1. for (int i = 0; i < alumnos; i++) {
  2.    for (int z = 0; i < asignaturas; z++) {
  3.    media += asignatura[z];
  4.    }
  5. }

Que hacer-lo por asignaturas;

Código
  1. for (int i = 0; i < asignaturas; i++) {
  2.    for (int z = 0; z < alumnos ; z++) {
  3.    media += alumno[z]
  4.    }
  5. }

O con el método que le quieras aplicar...

Saludos!!


Título: Re: duda matrices c++
Publicado por: rir3760 en 16 Abril 2013, 02:18 am
Ahora bien, para calcular la nota media por asignaturas, he pensado de hacerlo de dos maneras
Un detalle con los tres fragmentos de código es que estos no calculan la media, solo obtienen los totales de la fila o columna.

me gustaría que me dijerais si está bien de las dos maneras
La primera funcionara correctamente.

La segunda solo si se trata de una matriz cuadrada, esto es, si el numero de filas es igual al numero de columnas.

Si no es es el caso (por ejemplo una matriz de 100 alumnos con 5 asignaturas) utilizar el bucle con los indices cambiados no es valido (debido a un indice fuera de rango).

Un saludo


Título: Re: duda matrices c++
Publicado por: Puntoinfinito en 16 Abril 2013, 15:09 pm
Un detalle con los tres fragmentos de código es que estos no calculan la media, solo obtienen los totales de la fila o columna.
La primera funcionara correctamente.

La segunda solo si se trata de una matriz cuadrada, esto es, si el numero de filas es igual al numero de columnas.

Si no es es el caso (por ejemplo una matriz de 100 alumnos con 5 asignaturas) utilizar el bucle con los indices cambiados no es valido (debido a un indice fuera de rango).

Un saludo

Exacto;

Código
  1.    for (int i = 0; i < asignatura; i++) {
  2.       for (int z = 0; i < alumnos_total; z++) {
  3.       alumno[z]; = su_nota[i];
  4.       }
  5.    }

Más o menos así, yo no lo apliqué, en los ejemplos anteriores, pero se debe matricar todo lo que tenga más de una información.



Título: Re: duda matrices c++
Publicado por: indict en 18 Abril 2013, 18:02 pm
¡¡gracias!!