[3 puntos] Demuestre que el siguiente fragmento de programa
escrito en C
para calcular el cociente q
y el residuo r de la
división de dos números naturales y entre z es correcto. Pista: Demuestre que a cada paso del
segundo ciclo se cumplen los invariantes rj < wj
y qj*wj + rj
= y0.
int q, r, w, y, z;
r = y;
q = 0;
w = z;
while (w <= y)
w = 2*w;
while (w > z) {
q = 2*q;
w = w/2; /* esta es la
division de enteros, pero se puede hacer con un desplazamiento >>
de bits */
if (w <= r) {
r = r-w;
q = q+1;
}
}