[ Foro de Pascal ]
hola a todos especialmente al profesor y al compañero luis que me ha ayudado en hilos anteriores.
en esta ocasion queria pedirles su ayuda en dos ejercicios de matrices, se trata de como puedo sumar :
A)
1 2 3 4
A= 5 6 5 8
9 10 11 12
13 14 15 16
1 +
5+6+2 +
9+10+11+5+3 +
13 +14+15+16+12+8+4
GRACIAS POR SU AMABLE ATENCION.
En la solución de este tipo de problemas siempre hay un "truco" o patrón que debes encontrar antes de realizar el código. Siempre debes buscar ese patrón que te va guiar en la solución. Eso es lo primero que debes hacer. Para el caso de las matrices, debes estudiar cómo se mueven los índices, o sea las filas y las columnas, qué valores toman en cada caso. Y para este problema en específico, es muchísimo más sencillo, porque si miras bien, se cumple lo siguiente:
- La Primera suma solo contempla el elemento de la fila 1 y columna 1
- La Segunda suma contempla elementos de la fila 2 y columna 2. Pero aquí te tienes que dar cuenta que no se toman todos los elementos de la fila 2 y de la columna 2. Se toman los elementos de la fila 2 hasta llegar a columna 2; y los elementos de la columna 2 hasta llegar a la fila 2.
- La Tercera suma contempla elementos de la fila 3 hasta llegar a la columna 3; y de la columna 3 hasta llegar a la fila 3.
- Para el resto de las sumas se procede de manera similar a lo anterior.
Fíjate que Suma 1 se relaciona directamente con fila 1 y columna 1; Suma 2 con fila 2 y columna 2; Suma 3 con fila 3 y columna 3 y, así sucesivamente. Eso te puede conllevar a pensar en que la solución podría venir considerando un ciclo for.
En este análisis de problema radica la solución del mismo. Es mucho más sencillo de lo que uno se imagina.
hola luis, disculpa podrias poner tu solucion es que no entiendo cuando dices:
Se toman los elementos de la fila 2 hasta llegar a columna 2; y los elementos de la columna 2 hasta llegar a la fila 2.
no seria mas bien:
Se toman los elementos de la fila 2 hasta llegar a columna 2; y los elementos de la columna 2 hasta llegar a la fila 1, pues no se y disculpame pero segun veo la suma es:
5+6+2 +
es decir toma los valores de la fila 2 hasta la columna2 y los elementos de la columna 2 hasta la fila 1, quisa es que estas haciendo la suma de arriba a abajo? ojala pudieras subir tu solucion luis, me has ayudado mucho compañero y te lo agradezco.
Sí, así es. ¡Qué bueno que lo haya entendido! Yo no lo hice. De haberlo entendido a hacer el código es solo un paso. Yo creo que ya lo puedes hacer.
Saludos.
ok, compañero luis, intentare hacer este y el del otro hilo, mil gracias por tus consejos y ayuda
hola podrian subir el codigo, me gustaria aprender de el , pronto entrare al tema de matrices gracias a cualquier compañero que tenga en cuenta mi intencion.
compañero raul, de mi parte lo siento es que no he podido solucionarlo.
No es difícil. Una versión detallada, que incluya datos de ejemplo con ese array concreto, podría ser:
program SumaSubMatrices;
const
matriz: array[1..4,1..4] of integer = ( { Datos de prueba }
(1,2,3,4),
(5,6,7,8),
(9,10,11,12),
(13,14,15,16)
);
var
sumas: array[1..4] of integer; { Para almacenar subtotales }
sumaTotal: integer; { Resultado final }
pos, fila, columna: integer; { Contadores para bucles }
begin
sumaTotal := 0;
for pos := 1 to 4 do
begin
{ Cada elemento empieza vacío }
sumas[pos] := 0;
{ Y le sumo toda su fila, hasta su columna }
for columna := 1 to pos do
sumas[pos] := sumas[pos] + matriz[pos, columna];
{ Y toda su columna, hasta llegar a su fila }
for fila := 1 to pos do
sumas[pos] := sumas[pos] + matriz[fila, pos];
{ Pero el propio dato[i,i] no lo debo sumar dos veces }
sumas[pos] := sumas[pos] - matriz[pos, pos];
writeLn('Suma ',pos,': ', sumas[pos]);
sumaTotal := sumaTotal + sumas[pos];
end;
writeLn('Suma total: ',sumaTotal);
end.
No sé si necesitas almacenar las sumas intermedias, pero aunque sólo sea para que se vea mejor cómo llegar hasta el resultado final, las he conservado en un segundo array.
Nacho disculpa pòr que al ejecutar tu codigo la suma para los elementos:
9+10+11+5+3 te da 40, cuando lo correcto seria 38, en donde esta la falla de tu solucion ?? , gracias
disculpa profesor si que esta bien , me equivoque yo, muchisimas gracias.
(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.)