Sei sulla pagina 1di 1

FUNDAMENTOS DE COMPUTACION

Grado en ingeniera en tecnologas Industriales


Universidad de Cantabria
Control Evaluaci
on
30 de noviembre del 2016

Cuenta la leyenda que el invento del ajedrez entusiasmo de tal modo a un rey de la India que quiso saber enseguida
en que poda ayudar al s
ubdito que lo haba ideado. Este solo peda arroz: un grano por la primera casilla del tablero,
dos por la segunda, cuatro por la tercera, ocho por la cuarta. . . , y de este modo, doblando en cada casilla los granos
de la anterior, hasta completar las sesenta y cuatro. Al rey le parecio un deseo facil de satisfacer y se puso a la
tarea de calcular la cantidad de cereal pedida para entregarsela al inventor. Escribe un programa ajedrez1() para
calcular los granos y los gramos de arroz solicitados, suponiendo que en cada gramo entran cinco granos. Escribe
otro, ajedrez2() que, despues de preguntar al usuario cuanto granos de arroz hay en los graneros de palacio,
calcule cu
antas casillas como m
aximo tendra que haber tenido el tablero para que la gratificacion hubiera sido
factible. Por u
ltimo, dise
na un tercer programa ajedrez3() que, como el anterior, calcule el mayor tama
no posible
del tablero para el que se podra cumplir con el inventor, pero restringiendose a tableros cuadrados (de 1, 4, 9, 16,
25, . . . casillas).

Ejercicio
Es la siguiente implementaci
on una soluci
on para el programa ajedrez3() ? En caso negativo, propon una soluci
on.
Justifica tus respuestas.
1
2
3
4
5
6
7
8
9

def ajedrez3():
n = int(input(Cu
antos granos de
r=len(bin(n))-2
s=int(r**(1/2))
if s**2<r:
return s
elif n==2**r-1:
return s
return s-1

arroz hay en el palacio?: ))

Ejemplo ejercicio y soluci


on
Es la siguiente implementaci
on una soluci
on para el programa ajedrez2() ? En caso negativo, propon una soluci
on.
Justifica tus respuestas.
1
2
3
4
5
6

def ajedrez2():
n = int(input(Cu
antos granos de
r=len(bin(n))-2
if n==2**r-1:
return r
return r-1

arroz hay en el palacio?: ))

La respuesta es afirmativa, por un lado est


a basada en el siguiente resultado elemental de matematicas:
dado un n
umero natural n de longitud binaria r, entonces 2r1 1 < n 2r 1. Ademas se tiene que:
2r 1 = 2r1 + 2r2 + 2r3 + + 23 + 22 + 2 + 1
Y, por el otro lado en las lineas del c
odigo. La segunda lnea del programa convierte a entero lo introducido por
teclado y lo almacena en la variable n. La tercera lnea del programa calcula la longitud binaria del entero n
y lo almacena en la variable r. Para ello calcula la longitud de la cadena bin(n) menos 2. La funcion bin de
Python devuelve la cadena de la descomposici
on binaria n comenzando con 0b. La lnea 4, utiliza el condicional if
comparando los enteros n y 2r 1. Si la salida es el booleano True, entonces devuelve r, en caso contrario devuelve
r 1. El programa siempre devuelve un entero, ademas si se alcanzado el primer return entonces el programa
finaliza.

Potrebbero piacerti anche