Está en la página 1de 4

Matemáticas II

Grado en química
Curso 2021-2022

Práctica 1. Introducción a la programación

1. Bucle while
El bucle while tiene la siguiente forma

while condición do expresión

donde se indica una condición y una expresión, y dicha expresión se seguirá ejecutando mientras
la condición sea cierta. Cuando se quiera ejecutar más de una orden se usará paréntesis separando
por comas las diferentes órdenes.
Veamos un ejemplo donde se usa una variable n para la condición del bucle, en particular el bucle
se ejecutará siempre n<5. En este caso la variable n se inicializa con el valor 0 y en cada iteración
se aumenta en una unidad.
Veamos el mismo ejemplo donde el valor de la variable n se actualiza al principio de la ejecución.

( % i1) n:0$
while n<5 do (print("n=",n),n:n+1)$
n= 0
n= 1
n= 2
n= 3
n= 4
Mostramos ahora un ejemplo usando aleatoriedad.

( % i2) n:0$
while random(20) < 15 do (n:n+1)$
print("Veces:", n)$
Veces: 1
Observe que cada vez que se ejecute tendrá una salida diferente, esto se debe a que la función
random dará un valor diferente.

1
( % i3) n:0$
while random(20) < 15 do (n:n+1)$
print("Veces:", n)$
Veces: 3
La condición del bucle se comprueba incluso antes de ejecutar el bucle, así que puede ocurrir que
la expresión del bucle no se ejecute ninguna vez.

( % i4) n:0$
x:8$
while x<8 do (n:n+1,x:x+1)$
print("Veces:", n)$
Veces: 0
Una funcionalidad importante de los bucles while es que pueden parar de ejecutar en función de
alguna condición. A continuación vamos a encontrar el primer elemento no nulo de una lista usando
este tipo de bucle.

( % i5) lista:[0,0,7,0,8]$
i:1$
v:0$
while i<=length(lista) and v=0 do
(if lista[i]#0 then v:lista[i],
i:i+1)$
print("i = ", i)$
print("v = ", v)$
i=4
v=7
El ejemplo anterior se puede realizar de la siguiente manera donde se comprueba si el elemento
de la lista sigue siendo nulo en la propia condición. Se ha aprovechado el uso de paréntesis en
una condición en la que se ejecuta comandos en la condición, la comprobación se realiza al último
elemento del paréntesis.

( % i6) lista:[0,0,7,0,8]$
i:1$
v:0$
while i<=length(lista) and (v:lista[i],v=0) do

2
i:i+1$
print("i = ", i)$
print("v = ", v)$
i=3
v=7
Se puede escribir una función que se llame buscanonulo y que admita un vector, y devuelva el
índice y el valor del primer elemento no nulo del vector.

( % i7) buscanonulo(lista):=block([i:1,v:0],
while i<=length(lista) and (v:lista[i],v=0) do
i:i+1,
[i,v])$

( % i8) buscanonulo([0,0,7,0,8]);
( % o8) [3, 7]

( % i9) buscanonulo([0,0,0,0,0,0,0,-21,0,0,0,20]);
( % o9) [8, −21]

( % i10) buscanonulo([0,0,0,0,0,0,0,0,0,0,0,0]);
( % o10) [13, 0]
Vamos a presentar a continuación el código que en una lista de elementos que son lista de números
encuentra la primera que su suma es cero. Primero definamos una lista para probar el código,
llamemos a la lista ll. Y a continuación mostramos los comandos para el cálculo.

( % i11) ll:[[3],[5,-2,7],[-1,-1],[-2,3,7,10,9],[-5,3,2],[8,8,8]];
( % o11) [[3] , [5, −2, 7] , [−1, −1] , [−2, 3, 7, 10, 9] , [−5, 3, 2] , [8, 8, 8]]

( % i12) encontrado:false$
suma:0$
i:1;
while i<=length(ll) and not encontrado do
(suma:0,for v in ll[i] do suma:suma+v,
if suma=0 then encontrado:true,
i:i+1)$
if encontrado then print("Hay una lista que su suma es 0")

3
else print("Ninguna lista suma 0")$
( % o12) Hay una lista que su suma es 0
Como de costumbre creemos una función que realice esta comprobación.

( % i13) buscasuma0(ll):=block([encontrado:false,suma:0,i:1],
while i<=length(ll) and not encontrado do
(suma:0,for v in ll[i] do suma:suma+v,
if suma=0 then encontrado:true,
i:i+1),
encontrado)$

( % i14) ll1:[[3],[5,-2,7],[-1,-1],[-2,3,7,10,9],[-5,3,2],[8,8,8]];
buscasuma0(ll1);
( % o14) true

( % i15) ll2:[[3],[5,-2,7],[-1,-1],[-2,3,7,10,9],[8,8,8]];
buscasuma0(ll2);
( % o15) false

Ejercicios
1. Escriba un comando usando el bucle while para calcular la suma de los números impares
entre 7 y 25, ambos inclusives.
2. Escriba un comando usando el bucle while para calcular la suma de los números positivos
del vector. Por ejemplo la suma de los números positivos de la lista
( % i16) lista:[2,3,-1,0,5];
( % o16) [2, 3, −1, 0, 5]
es 10. Escriba una función llamada sumapos que haga el cálculo anterior para una lista de
números.
3. Escriba un comando usando el bucle while que verifique si el número 42 está en una lista o
no. Defina una función llamada estaono(lista,n), siendo el primer argumento una lista de
números y el segundo argumento un valor n, la función devolverá true si el número n está en
la lista lista. Por ejemplo
( % i17) estaono([7,-4,8,9,23,42,0],42);
( % o17) true
( % i18) estaono([7,-4,8,9,23,42,0],142);
( % o18) false

También podría gustarte