[ Foro de Pascal ]

ayuda sumas

26-Mar-2014 17:59
Invitado (fer97)
9 Respuestas

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.


26-Mar-2014 19:39
Luis Torres (+18)

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.


26-Mar-2014 21:52
Invitado (fer97)

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.


26-Mar-2014 23:09
Luis Torres (+18)

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.


26-Mar-2014 23:18
Invitado (fer97)

ok, compañero luis, intentare hacer este y el del otro hilo, mil gracias por tus consejos y ayuda


01-Apr-2014 14:19
Invitado (raul)

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.


01-Apr-2014 14:27
Invitado (fer97)

compañero raul, de mi parte lo siento es que no he podido solucionarlo.


02-Apr-2014 16:11
Nacho Cabanes (+83)

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.


02-Apr-2014 19:46
Invitado (raul)

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


02-Apr-2014 20:18
Invitado (raul)

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