[ Foro de Pascal ]

Funcio que recibe una matriz y devuelve suma de todos adyacentes.

02-Feb-2008 11:06
Homer A. Ramos
6 Respuestas

Hola, estoy buscando una 'funcion' que me ayude porque ya no sé como hacer.

Os cuento, estoy haciendo un simple funcion que reciba una determinadna matriz mxm y que devuelva la suma de sus adyacentes (en vertical y horizontal) con el ejemplo se ve mas claro:

|1 2 3| |17 19 21|

|4 5 6| = |23 25 27|

|7 8 9| |29 31 33|


Es decir, el primer valor (1,1) tendra que ser la suma de 1+2+3+4+7 y es que no encuentro la forma de hacerlo.

Me podéis guiar??

03-Feb-2008 01:01
Nacho Cabanes (+31)

Si quieres sumar su fila y su columna, es fácil. La idea es algo como:

suma = 0

para i = 1 hasta m
suma = suma + valor(fila,i)

para i = 1 hasta m
suma = suma + valor(i,columna)

(lo de "adyacentes", tal y como lo planteas es un poco ambiguo: siendo estrictos, el 3 y el 7 no son adyacentes del 1; y si sumas la fila y la columna deberías sumar dos veces el 1; si es como tú planteas, deberías basarte en el ejemplo anterior, pero restarle el componente (fila, columna) para que no se sume dos veces).



03-Feb-2008 10:57
Homer A. Ramos

Gracias, 'Nacho Cabanes'!

Exacto, no se como llamarlo, 'adyacentes' es lo que se me ocurrió :D Bueno, el caso es que lo que comentas de restar el (fila, columna) no me había dado cuenta, puede que sea ese el error que estaba cometiendo porque la otra idea la tenía mas o menos establecida aunque... ahora tengo que rezar para que me salga jejeje.

Muchas gracias por la información, y ya os cuento si me sale o me surge una nueva duda. Gracias!

13-Oct-2009 19:34
oscar gomez

Profesor ud hace for i:= 1 to m do
suma:= suma+valor[fila,i];
luego haces
for j:=1 to m do
suma:=suma+valor[j,columna +

no entiendo que es fila , ni columna , pues pense que i manejaba las filas dentro de la matriz y j las columnas,si pudiera explicarme mas al respecto de este ejercicio se lo agradezco como todos mis compañeros a los que nos sirve tanto su ayuda



13-Oct-2009 19:51
oscar gomez

ademas el recorrido que das con esos for solo funcionan para el primer caso es decir para la primera fila y primera columna pues si ya estas porejemplo en el 2 (fila 2 columna dos) como haces para sumar el uno y por ejemplo cuando estes en el 3 como haces para sumar sus anteriores pues eso no lo veo reflejado en tu respuesta disculpame si es que no he entendido lo que quieres decir en tu solucion
por tu respuesta mil gracias

19-Oct-2009 00:43
Nacho Cabanes (+31)

Sobre tu pregunta: puedes usar "i" para recorrer las filas y "j" las columnas o al contrario. Recuerda que "las variables son mudas", es decir, da igual el nombre que tengan, las puedes usar en cualquier contexto.

Y sí, el ejemplo sirve para cualquier fila y cualquier columna, porque la variable "fila" representaría la fila actual, y "columna" sería la columna actual.

La respuesta que dí a Homer era cómo sumar los "adyacentes" (según su definición) de una cierta posición [fila,columna]. La rutina completa (nuevamente, en pseudocódigo, no exactamente en Pascal), sería algo como

n = maxFilas
m = maxColumnas

para fila = 1 hasta n
 para columna = 1 hasta m

   suma = 0

   para i = 1 hasta m
     suma = suma + valor(fila,i)
   finpara

   para i = 1 hasta n
     suma = suma + valor(i,columna)
   finpara

   suma = suma - valor(fila,columna) // Para no sumar dos veces

   adyacentes(fila,columna) = suma
 finpara
finpara


19-Oct-2009 10:02
oscar gomez

Profesor muy agradecido pues la verdad me has sabido dar respuesta a mi duda ,es que no tenia claro lo de la fila y columna pues inicialmente pense que eran variables independientes a las variables que controlaban los for.
Me ha quedado muy muy claro y muchisimas gracias por dedicarme unos minutos y saber responderme, he aprendido algo nuevo gracias a ti.






(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)