Welcome to Scribd, the world's digital library. Read, publish, and share books and documents. See more
Download
Standard view
Full view
of .
Look up keyword
Like this
9Activity
0 of .
Results for:
No results containing your search query
P. 1
Programacion 2 - Guia para aprobar el examen de Programacion II

Programacion 2 - Guia para aprobar el examen de Programacion II

Ratings: (0)|Views: 702|Likes:
Published by api-19970781

More info:

Published by: api-19970781 on Dec 03, 2009
Copyright:Attribution Non-commercial

Availability:

Read on Scribd mobile: iPhone, iPad and Android.
download as PDF, TXT or read online from Scribd
See more
See less

03/18/2014

pdf

text

original

GU\u00cdA PARA APROBAR EL EXAMEN DE PROGRAMACI\u00d3N II

Una vez evitado el molesto problema del apartado eliminatorio (que luego resultaba no serlo) tipo test y como he conseguido aprobar la asignatura despu\u00e9s de muchos pesares, quiero transmitir al resto de los alumnos que han sufrido como yo esta asignatura unas pinceladas que los ayude en el mal trago del examen.

Este texto se encuentra dirigido a aquellos que ya se han estrellado contra la asignatura. Los novatos pueden
usarlo tambi\u00e9n, por supuesto.
Vamos a suponer que el examen consiste b\u00e1sicamente en el desarrollo, como en la pr\u00e1ctica, de un supuesto. Y
que en dicho supuesto hay un vector.
RECURSIVIDAD
Especificaci\u00f3n de la funci\u00f3n:

Consiste en una terna QSR en la que:
Q es la precondici\u00f3n. Lo que deben cumplir los datos de entrada.
S es la definici\u00f3n (exclusivamente) de la funci\u00f3n. Debe tener variables de entrada y de salida.
R es la postcondici\u00f3n. Las condiciones que debe cumplir la (las) variables de salida.

Q es Q(x) siendo x las variables de entrada.
R es R(x,y) siendo x las variables de entrada e \u201cy\u201d la variable de salida.
S puede ser:
Funci\u00f3n: (fun) si devuelve un valor.
Acci\u00f3n: (accion) si existe alguna variable que sea de entrada Y salida.

No pide nada m\u00e1s. Pero empiezan tus problemas:
R debe ser exacto. Si te equivocas, por la regla del domin\u00f3, no vas a tener nada bien. As\u00ed que m\u00edralo bien y
compru\u00e9balo dos veces antes de seguir.
En primer lugar comprueba que el tipo de datos coincide con el especificado en la salida. Si es binario
(CIERTO, FALSO), tienes que establecer unos criterios l\u00f3gicos (algo es igual o distinto a otra cosa, Y/O etc.).
Si es natural comprueba que haces c\u00e1lculos en el \u00e1mbito de los naturales (div en lugar de /). Tambi\u00e9n procura
no mezclar enteros con naturales, y por supuesto, cuidado con mezclar ambos con los reales.
Pero, como suponemos que hay un vector que recorrer, no es tan dif\u00edcil:
a) Encontrar algo. Responder cierto si...

R(x,y)\u2261{b=(\u2203 \u03b1\u2208 [1..n]\u00b7\u03b1 cumple la condici\u00f3n)} b es binario.
b) Demostrar que se cumple algo. Responder cierto si...
R(x,y)\u2261{b=(\u2200 \u03b1\u2208 [1..n]\u00b7\u03b1 cumple la condici\u00f3n} b es binario.
c) Contar los elementos que cumplen la condici\u00f3n.
R(x,y)\u2261{s=\u039d\u03b1 (desde 1 hasta n) \u00b7\u03b1 cumple la condici\u00f3n} s es natural.
d) Sumar elementos del vector.
R(x,y)\u2261{s=\u03a3\u03b1 (desde 1 hasta n) } s depende del tipo de los datos del vector.
e) Multiplicar elementos del vector.
R(x,y)\u2261{s=\u03a0\u03b1 (desde 1 hasta n) } s depende del tipo de los datos del vector.

Q debe ser lo menos restrictivo posible. Y ah\u00ed entran las opiniones. Si el equipo docente de la asignatura decide
que has sido demasiado restrictivo, mal comienzas:
Si un n\u00famero es natural, poner que es mayor o igual que cero es una tonter\u00eda. Mejor no ponerlo.
Si un n\u00famero es natural, (CARDINAL) o entero (INTEGER), poner que tiene unos l\u00edmites (MAXINT,
MAXCARD) es demasiado apegado a la pr\u00e1ctica y aqu\u00ed somos muy te\u00f3ricos.

Prueba con \u201cverdadero\u201d. Y piensa en qu\u00e9 trampa vas a caer. \u00bfRealmente hay alguna condici\u00f3n que deben
cumplir los par\u00e1metros de entrada?.
P\u00e1gina 1 de 14
GU\u00cdA PARA APROBAR EL EXAMEN DE PROGRAMACI\u00d3N II
Primera inmersi\u00f3n o inmersi\u00f3n no final:
La especificaci\u00f3n no vale para nada, y nadie le pide que haga nada, porque no es posible. As\u00ed que vamos a

\u201csumergirla\u201d (inmersi\u00f3n) para que aprenda a bucear. Es decir, vamos a convertirla en recursiva.
Para eso necesitamos una variable que no est\u00e1.
Para ello necesitamos reforzar la poscondici\u00f3n (R) debilit\u00e1ndola. Oficialmente y para todos los efectos la

estamos debilitando. Que el libro [Pe\u00f1a97] parezca contradecirse a s\u00ed mismo es s\u00f3lo una circunstancia en la que
no vamos a entrar (*). DEBILITAR.

Y debilitar significa coger ese (\u201cexiste, para todo, conteo, suma o producto\u201d desde el primero hasta el \u00faltimo) y
convertirlo en otro desde el primero hasta una variable i.
\u00bfQue usaste ya i precisamente en eso?. \u00a1Qu\u00e9 falta de previsi\u00f3n!. Vale. Usaremos c.
Por tanto:
R\u2019\u2261(R debilitada)\u2227 (c=n)
Aunque R\u2019 ,R y Rdebilitada son incomparables por l\u00f3gica (seg\u00fan [Pe\u00f1a97]**), la l\u00f3gica aqu\u00ed vale poco.A

todos los efectos R\u2019 y R son equivalentes.

\u00bfQu\u00e9 pasa con S?. Debemos reescribir S incluyendo la variable c.
\u00bfQu\u00e9 pasa con Q?. Tenemos que reforzarla (esta vez s\u00ed) incluyendo una limitaci\u00f3n a c.
Pongamos que Q\u2019\u2261 Q\u2227 (c<=n).
NO es la \u00fanica soluci\u00f3n. Pero al equipo docente de la asignatura le gusta esta. Tanto que muy pocos se atreven
a hacerlo de otra manera. Por si acaso, vamos a hacerlo as\u00ed.

\u00bfQu\u00e9 tipo le has dado a c?. \u00bfNatural?. Es natural que lo hagas. Pero no te conf\u00edes. En su momento puede que
tengas que romperlo todo y empezar de nuevo.
An\u00e1lisis por casos:
En el an\u00e1lisis por casos tienes que hacer tres cosas.
La primera es decidir qu\u00e9 es Bt. En castellano el caso trivial.

En las pr\u00e1cticas, el rango de la matriz va desde 1 hasta n [1..n].
El caso trivial es cero (0).
En los ex\u00e1menes el rango de la matriz suele ir desde 0 hasta n.
As\u00ed que el caso trivial es menor que cero.
Lo que programando, si has definido c como natural te provoca un bonito c\u00f3digo de error.
Mejor define c como entero en lugar de natural.

Pero cuidado con hacerlo al rev\u00e9s.
Si has definido c<=n y pones como caso trivial c>n acabas de estrellarte contra la ruda realidad. Suspenso. Y
eso que, te lo adelanto ya, no vas a detectar el error con la \u201cfamosa\u201d verificaci\u00f3n formal de programas
recursivos.
\u00bfQue porqu\u00e9?. Porque aunque nadie te lo haya dicho, Bt y Q\u2019 tienen que tener algo en com\u00fan. Bt\u2227 Q\u2019\u2260 falso.
Obligatoriamente. Cuando lleguemos a Bt a\u00fan debemos estar en Q\u2019.
Una vez que has decidido qu\u00e9 es Bt puedes ampliarlo a tu conveniencia. Con tal de que el Bt original est\u00e9 en el
rango que has creado para \u00e9l. Si es cero, c=0 no hay ning\u00fan inconveniente en poner c<1.
Por supuesto el caso trivial conduce al elemento neutro de la operaci\u00f3n. 0 en conteo y suma, 1 en productos y
potencias, falso (elemento neutro de la conjunci\u00f3n) si en R tenemos un\u2200 o cierto (elemento neutro de la
disyunci\u00f3n) si tenemos en R un\u2203. Esto es triv(x).

Lo segundo es decidir qu\u00e9 se hace en Bnt. Caso no trivial.
Se supone que se examina el caso concreto. El momento c. Y se llama recursivamente a la funci\u00f3n variando c
por c-1 (lo habitual), o c+1 (invertido).

Y lo tercero es decidir cual es la llamada correcta a la funci\u00f3n. \u00bfCual es el valor Cini?.
P\u00e1gina 2 de 14
GU\u00cdA PARA APROBAR EL EXAMEN DE PROGRAMACI\u00d3N II
\u201cEvidentemente\u201d es el otro extremo del vector. Si Bt es cero, Cini es n.

\u00bfEst\u00e1 claro?. Repito:
\u201cc\u201d recorre el vector hasta salirse. Y se tiene que salir, as\u00ed que en Q tienes que dejarle espacio.
Si el vector va desde 1 hasta n se sale en 0 o en n+1.
Si el vector va desde 0 hasta n se sale en -1 o en n+1.
COMPRUEBA Q. Y CAMBIA LO QUE SEA PRECISO.

As\u00ed pues tenemos:
Q\u2019(x)\u2261Q(x)\u2227 (c<=n)
S\u2019\u2261 fun iLoQueSea (x variables de entradas, c entero (o natural)): dev resultado.
Caso c<extremo inferior\u2192 elemento neutro de la operaci\u00f3n

\ue000c>=extremo inferior \u2192 \u201can\u00e1lisis para el momento c\u201d (OP) iLoQueSea (x,c-1)

R\u2019(x,y)\u2261 Rdebilitada\u2227 (c=n)
(El extremo inferior es el rango m\u00e1s peque\u00f1o del vector. Si va \u201cdesde 1 hasta n\u201d el extremo inferior es 1. Por
tanto Bt es c<1)

Si en R tenemos un\u2200 la operaci\u00f3n OP es Y (\u2227). Si tenemos un\u2203 la operaci\u00f3n es O (\u2228).
En el resto de los casos, habitualmente suma, producto.
Verificaci\u00f3n formal de la inmersi\u00f3n no final.
Francamente, y ahora que no nos oye el equipo docente de la asignatura: esto tiene m\u00e1s agujeros que un queso
Emmental (que es el de los agujeros. El gruy\u00e9re es como el queso de barra, con unos agujeritos muy peque\u00f1os).

En primer lugar unas consideraciones sobre\u21d2.
Significa que el segundo predicado es m\u00e1s d\u00e9bil que el primero. Es decir, que el primero es m\u00e1s restrictivo que
el segundo (m\u00e1s fuerte).
a\u2227b\u21d2a. Por supuesto, a\u2227b\u21d2b. (1)
a\u21d2a\u2228b. Por supuesto, b\u21d2a\u2228b (2)
Falso\u21d2 cualquiercosa. Pero olv\u00eddalo. Si te sale falso vas bastante mal.
Cualquiercosa\u21d2 cierto. Y esto s\u00ed lo vamos a usar. (3)

1.- Completitud de la alternativa.
Q(x)\u21d2Bt\u2228Bnt.
En Q(x) por (1) tomamos s\u00f3lo la parte de c. Si te sale algo as\u00ed como (c<n)\u21d2 (c>n)\u2228 (c<=n ), es decir, (c<n)
\u21d2cierto, es verdad. Y est\u00e1s suspenso.

\u00bfTe tengo que decir porqu\u00e9?. Porque (c<n) y (c>n) no tienen un Bt com\u00fan. Porque cuando llamas a c>n no se
cumple la precondici\u00f3n.
Sin embargo (c<=n)\u21d2 (c<1)\u2228 (c>=1), es otra vez (c<=n)\u21d2cierto y apruebas.

2.- Satisfacci\u00f3n de la precondici\u00f3n para la llamada interna.

Hay que demostrar que Q(x) v Bnt(x)\u21d2 Q(s(x))
En este caso hay que tener en cuenta que no sirven ni ciertos ni falsos.
Q(x) Y Bnt(x) es, m\u00e1s o menos, Q(x).
\u00bfQu\u00e9 es Q(s(x))?. Pues es s\u00f3lo Q(x) cuando sustituimos c por el valor de la siguiente llamada recursiva.

Los casos posibles est\u00e1n contados. M\u00e1s o menos cuatro.
Supongamos que c var\u00eda entre n y 1. Hemos definido Q\u2019(x) como Q(x)v (c<=n) [y mayor o igual que cero, pero
eso no lo ponemos si c es natural]. Entonces:
Q(x) v Bnt(x)\u21d2 Q(s(x))
c<=n v c>1\u21d2 c-1<=n
c<=n v c>1\u21d2 c-1<=n.
Y podemos dejarlo ah\u00ed. Porque si c<=n entonces c-1<=n-1 lo que es m\u00e1s restrictivo que c-1<=n

P\u00e1gina 3 de 14
GU\u00cdA PARA APROBAR EL EXAMEN DE PROGRAMACI\u00d3N II

Activity (9)

You've already reviewed this. Edit your review.
1 hundred reads
1 thousand reads
David Fernández liked this
inkin_ liked this
elis1410 liked this
rugalcs liked this
joseyamanda liked this

You're Reading a Free Preview

Download
scribd
/*********** DO NOT ALTER ANYTHING BELOW THIS LINE ! ************/ var s_code=s.t();if(s_code)document.write(s_code)//-->