You are on page 1of 18

Problema

Escribir un programa que muestre la siguiente tabla de races


cuadradas
2 N
3 N
...
30 N

Algoritmo
1. inicializar variable n con valor 2
2. repetir hasta que n > 30:
escribir n y n
sumar 1 a n
alternativamente
1.inicializar variable n con valor 2
2. repetir mientras n 30:
escribir n y n
sumar 1 a n

Programa
import math
#inicializar variable n con valor 2
n=2
#repetir mientras n<=30
while n<=30:
#escribir n y n
print n,math.sqrt(n)
#sumar 1 a n
n=n+1
Nota.
n=n+1#inst de asignacin: variable=expresin;
1 evala (calcula) expresin.
Ej: calcula n+1 (1vez 2+1=3, 2vez 3+1=3,)
2 guarda resultado en variable.
Ej. en variable n (1vez 3, 2vez 4,)

Instruccin while
Sintaxis
while condicin:
instrucciones
Semntica
Mientras condicin se cumpla (sea True) ejecutar instruccin(es)
graficamente:
condicin
True
instrucciones

False

Ejecucin del programa


1
2
3
4
5
6
7

instruccin
n=2
n<=30
print n,
n=n+1
n<=30
print n,
n=n+1

efecto
n: 2
True
2 1.4
n: 3
True
3 1.7
n: 4

85
86
87
88
89
90

instruccin

efecto

n=n+1
n<=30
print n,
n=n+1
n<=30

n: 30
True
30 5.4
n: 31
False
fin

Qu sucede si la condicin es falsa la primera vez?


Ejemplo:
maximo=input(n mximo?)
n = 2
while n<=maximo:
print n,math.sqrt(n)
n=n+1
Si maximo<2, las instrucciones no se repiten nunca.
Nota. Esta propiedad permite disear ciclos que eventualmente no
se repiten nunca.

Problema. Funcin que sume nmeros enteros entre x e y


Ejs de Uso:
suma(3,5) entrega 3+4+5=12,
suma(3,3) entrega 3
suma(3,2) entrega 0
#suma(x,y): entrega x + (x+1) + (x+2) + + y
def suma(x,y):
s=0
n=x
while n<=y:
s=s+n
n=n+1
return s

Qu sucede si la condicin es siempre verdadera?


Ejemplo:
print"N raiz"
n=2
while n<=30:
print n,math.sqrt(n)
Las instrucciones se repiten indefinidamente (loop)
error: no se incrementa variable n
Corolario. El programador debe preocuparse de incluir instrucciones
que influyan en la condicin, de modo que eventualmente sea falsa.

Problema. Escribir un programa que calcule el promedio de una


cantidad indeterminada de nmeros reales siguiendo el dilogo:
nmero?4.5
cuenta=1 promedio=4.5
nmero?5.5
cuenta=2 promedio=5.0
. . .
nmero?0
Nota. El nmero 0 se usa como indicador de fin de datos

Programa:
#acumulador(sumatoria) y contador de nmeros
suma=0.0 #por si se ingresan slo enteros
n=0
#obtener primer nmero
numero=input("nmero?")
#repetir hasta fin de datos
while numero!=0 :
#procesar numero
suma=suma+numero
n=n+1
print "cuenta=",n,promedio=,suma/n
#obtener siguiente nmero
numero=input("nmero?")

Ejecucin del programa


1

suma=0

suma: 0

n=0

n: 0

numero=input()

numero: 4.5

numero!=0

True

suma=suma+numero

suma: 4.5

n=n+1

n: 1

print ,n,,suma/n

cuenta=1 promedio=4.5

numero=input()

numero: 5.5

Ejecucin del programa


9

numero!=0

True

10

suma=suma+numero

suma: 10.0

11

n=n+1

n: 2

12

print ,n,,suma/n

cuenta=2 promedio=5.0

13

numero=input()

numero: 0

14

numero!=0

False

15

fin

Ejercicio. Escribir la funcin y el programa siguiente


#factorial(x): entrega 1*2**x
#ejs: factorial(3)=1*2*3=6, factorial(0)=1
def factorial(x):#x>=0

#programa: muestra factorial de c/n de una lista

Dilogo (ejemplo)
n?4
4!=24
n?0
0!=1

n?-1 (n negativo indica fin de los datos)

Solucin 1 : x! = 1 * 2 * ... * (x-1) * x


def factorial(x):
producto=1
i=1
while i<=x:
producto=producto*i
i=i+1
return producto

(0!=1)

Solucin 2 : x! = x * (x-1) * * 1
def factorial(x):
producto=1
while x>0:
producto=producto*x
x=x-1
return producto
Nota.
x termina con el valor 0
argumento en la llamada no se modifica
ejemplo: factorial(n) no modifica n

(0!=1)

Solucin 3(recursiva): x! = x * (x-1)!


def factorial(x):
if x==0:
return 1
else:
return x * factorial(x-1)
Notas
ms simple
4 lneas
sin iteracin (while)
slo uso de parmetro
sin variables adicionales

(0!=1)

#programa: muestra factorial de c/n de una lista


n=input(n?)
while n>=0:
print n,!=,factorial(n)
n=input(n?)

Solucin 2. usando patrn while True:..break


#programa: muestra factorial de c/n de una lista
while True:
n=input(n?)
if n<0: break
print n,!=,factorial(n)
Explicaciones
while True:
condicin siempre verdadera
instrucciones se ejecutan siempre (loop)
if n<0: break
si condicin se cumple, salir del ciclo (loop)
instruccin break salta a instruccin siguiente a while (la que est
despus de las instrucciones subordinadas a while)