SoloCodigo
Programación General => C/C++ => Mensaje iniciado por: cluster en Jueves 16 de Agosto de 2007, 18:40
-
Hola compañeros de solo codigo, me podrian colaborar con una duda que tengo sobre de la siguiente pregunta.
dado el programa
x=M;
y=N;
z=0;
/* Inv P:? */
while (x>=y){
z=z+1;
x=x-y;
}
cual de las siguientes condiciones puede remplazar la interrogacion en P para que la asercion sea un invariante para el ciclo?
A.) z-y+x == M+N
B.) zx+y == N
C.) z+zy+x == M
D.) zy+x == M
E.) xy+z == MN
cual seria su respuesta.
si me pudieran colaborar con una explicacion se los agradeceria.
-
Hola cluster,
YO diría que es la D:
Te explico. Si te das cuenta, en cada iteración del bucle while, decrementas x ( que vale M ) de N en N ( que es Y ) y sumas uno en Z. Supongamos entonces cero iteraciones:
z = 0, x = M, y = N, con lo que z*y + x = M, se cumple. Supongamos ahora una iteracion:
z = 1, x = M - N, y = N, con lo que z*y+x = 1 * N + ( M - N ) = N + M - N = M.
Supongamos dos iteraciones: z = 2, x = M - 2N, y = N. --> z*y + x = 2*N + ( M - 2N ) = 2N + M - 2N = M, y así sucesivamente.
Espero que te sirva, si no es, para encontrar la respuesta.
Saludos!
-
gracias Ithilien por la explicacion aunque no tengo la respuesta, creo que si es la D ya que estoy resolviendo otros problemas parecidos con respuesta aplicado lo que me explicaste y me da.
saludos :suerte: