duda matrices c++

Iniciado por indict, 15 Abril 2013, 18:03 PM

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

indict

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:


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


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.

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 :)

Puntoinfinito

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 (cpp) [Seleccionar]

for (int i = 0; i < alumnos; i++) {
    for (int z = 0; i < asignaturas; z++) {
    media += asignatura[z];
    }
}


Que hacer-lo por asignaturas;

Código (cpp) [Seleccionar]
for (int i = 0; i < asignaturas; i++) {
    for (int z = 0; z < alumnos ; z++) {
    media += alumno[z]
    }
}


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

Saludos!!
AHORA EN SOFTONIC || CLICK HERE!!
Base64: QWNhYmFzIGRlIHBlcmRlciAxIG1pbnV0byBkZSB0dSB2aWRhLiBPbOkh



HACK AND 1337 : http://hackandleet.blogspot.com
WEBSITE: http://www.infiniterware.

rir3760

Cita de: indict en 15 Abril 2013, 18:03 PM
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.

Cita de: indict en 15 Abril 2013, 18:03 PMme 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
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language

Puntoinfinito

Cita de: rir3760 en 16 Abril 2013, 02:18 AM
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 (cpp) [Seleccionar]
    for (int i = 0; i < asignatura; i++) {
       for (int z = 0; i < alumnos_total; z++) {
       alumno[z]; = su_nota[i];
       }
    }


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.

AHORA EN SOFTONIC || CLICK HERE!!
Base64: QWNhYmFzIGRlIHBlcmRlciAxIG1pbnV0byBkZSB0dSB2aWRhLiBPbOkh



HACK AND 1337 : http://hackandleet.blogspot.com
WEBSITE: http://www.infiniterware.

indict