Professional Documents
Culture Documents
FUNDAMENTOS DE PROGRAMACIÓN
1ra Hoja de Trabajos Prácticos
(1er período de 2006)
var
esta_suma, suma_max, mejor_i, mejor_j, i, j: integer;
begin
{ 1} i:=1; esta_suma:=0; suma_max:=0; mejor_i:=0; mejor_j:=0;
{ 2} for j := 1 to n do
{ 3} begin
{ 4} esta_suma := esta_suma + a[j];
{ 5} if esta_suma > suma_max then
{ 6} begin
{ 7} suma_max := esta_suma;
{ 8} mejor_i := i;
{ 9} mejor_j := j;
{10} end; {if}
{11} else
{12} if esta_suma < 0 then
{13} begin
{14} i := j + 1;
{15} esta_suma := 0;
{16} end; {else}
{17} end; {for}
{18} suma_subsecuencia_max := suma_max;
end;
Es obvio que se debe recorrer todos los elementos del vector, del primero al último. Por eso existe
una variable, j, que lo hace (la línea 2). También es obvio que se necesita acumular la suma de
elementos, por eso existe la línea 4. Las líneas 5 – 10 registran lo que se busca mientras se hace el
recorrido. Pero las líneas 12 – 16, ¿cuál es la JUSTIFICACIÓN de su existencia en este código?
¿Por qué se comprueba si la suma es NEGATIVA y no se usa ninguna otra comparación? ¿Por
qué si la suma es negativa, se actualiza la variable i y ella se actualiza de esta manera y no de
otra? Es que la variable i se modifica solamente en este único lugar del código. Y, ¿por qué se
resetea la variable de la suma acumulada a 0 y no se usa otro valor? Entonces, en otras palabras,
su tarea es explicar la IDEA que está detrás de este programa.
Pregunta 2. (6 puntos – Mark Allen Weiss, ejercicio 2.12a) Proporcione algoritmo eficiente (junto
con el análisis del tiempo de ejecución de su implementación en Pascal) para encontrar la suma
de la subsecuencia mínima.
Pregunta 4. (3 puntos – Ian Parberry) ¿Qué valor devuelve la siguiente función (expréselo en
términos de n)? Estime esta función con O-grande. Use las fórmulas conocidas:
∑ ∑
n n
i =1
i = n(n + 1) / 2 y i =1
i 2 = n(n + 1)(2n + 1) / 6
function pesky(n)
1. r := 0;
2. for i := 1 to n do
3. for j := 1 to i do
4. for k := j to i+j do
5. r := r + 1
6. return(r)
------- o -------
La práctica ha sido preparada por V.K.
Pando, 27 de marzo de 2006