[ Foro de Pascal ]
Funcio que recibe una matriz y devuelve suma de todos adyacentes.
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??
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).
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!
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
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
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
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.)