Lógica de la Programación
25 de junio de 2010
1.
Escriba un programa que pida al usuario 10 números, y luego muestre los
números pares que ingresó.
El problema de este ejercicio es que una vez pedidos los 10 números, necesitás tenerlos a
todos en memoria para poder ver uno por uno cuál es par y luego mostrarlos. Una solución
serı́a, por ejemplo, esta:
INPUT n1
INPUT n2
INPUT n3
..
INPUT n10
En este programa, n1,n2, ..., n10 son 10 variables independientes, que van a almacenar los 10
valores que ingresa el usuario. Esta solución es poco atractiva, podemos guardar los 10 números
en un arreglo y luego recorrerlo.
Un arreglo es una lista de variables de un mismo tipo, y agrupados bajo un mismo nombre,
a las cuales se accede por medio de un ı́ndice.
Si un arreglo llamado numeros tiene 10 posiciones, entonces tenemos a nuestra disposición
las variables
numeros ( 0 ) , numeros ( 1 ) , numeros ( 2 ) , . . . . , numeros ( 9 ) ,
imprimirá todos los valores almacenados en cada una de las posiciones del arreglo numeros,
porque imprime numeros(0), numeros(1), y ası́ hasta numeros(9).
Con esto, podemos reescribir el programa original, de la siguiente forma:
1
’ tomamos l o s 10 numeros y l o s guardamos en e l a r r e g l o l l a m a d o
’ numeros
FOR i = 0 TO 9
INPUT numeros ( i )
NEXT
’ r e c o r r e m o s e l a r r e g l o , y s i a l g u n e l e m e n t o e s par , l o mostramos .
FOR i = 0 TO 9
IF numeros ( i ) MOD 2 = 0 THEN PRINT numeros ( i )
NEXT
2.
Escriba un programa que pida 10 números. El programa debe escribir el número
de enteros ingresados mayor a 10.
Este programa se puede hacer sin necesidad de tener todos los números ingresados alojados
en memoria: podemos contar cuántos hay mayores a 10 a medida que el usuario los ingresa, por
ejemplo:
c a n t m a y o r e s = 0 ’ i n i c i a l i z a m o s e l c o n t a d o r en 0
FOR i = 0 TO 9
INPUT n ’ pedimos un numero a l u s u a r i o
’ s i n>10 incrementamos e l c o n t a d o r
IF n > 10 THEN c a n t m a y o r e s = c a n t m a y o r e s + 1
NEXT
PRINT ”La c a n t i d a d de números mayores e s : ” ; c a n t m a y o r e s
Esto funciona bien, pero vamos a hacerlo con arreglos, para prácticar: vamos a hacerlo en
dos partes. La primer parte consiste en pedir todos los números y guardarlos en un arreglo, y la
2da parte consiste en recorrer el arreglo y contar cuántos valores son mayores a 10.
’ pedimos l o s numeros
FOR i = 0 TO 9
’ pedimos un v a l o r y l o guardamos en l a i −ésima p o s i c i ó n
INPUT numeros ( i )
NEXT
3.
Escriba un programa que pida 10 números, y otro número N. El programa debe
buscar N en el arreglo e imprimir un mensaje indicando si N está o no allı́.
2
Todos estos ejercios empiezan siempre de la siguiente manera: pidiendo 10 números al usuario.
Luego esos números se van a usar para calcular o hacer lo que sea que diga el enunciado.
Además de estos 10 números, a veces es necesario pedir uno o más valores, según se indica.
En este caso, tenemos que pedir un valor más, le llamaremos N.
Aquı́, una vez que el usuario ingresó los 10 números, tenemos que ver si entre esos 10, se
encuentra alguno igual al número N ingresado por el usuario.
’ Pedimos l o s 10 números
FOR i = 0 TO 9
INPUT numeros ( i )
NEXT
’ ahora vamos a b u s c a r s i a l g u n o de e l l o s en i g u a l a N, s i a l g u n o
’ e s i g u a l a N, s e t e a m o s una v a r i a b l e , ” e n c o n t r a d o ” , a 1 ,
’ para i n d i c a r que e l número f u e e n c o n t r a d o .
FOR i = 0 TO 9
IF numeros ( i ) = N THEN e n c o n t r a d o = 1
NEXT
IF e n c o n t r a d o = 1 THEN
PRINT ” El v a l o r ” ; N; ” f u e e n c o n t r a d o ”
ELSE
PRINT ” El v a l o r ” ; N; ” NO f u e e n c o n t r a d o ”
END IF
4.
Escriba un programa que pida al usuario 10 números. El programa debe escribir
el ı́ndice del mayor elemento del arreglo.
Entonces A(0) = 8, A(3) = 5, y A(7) = 1, por dar algunos ejemplos. Notar que la primer
posición del arreglo (o el ı́ndice de la primer posición) es la 0.
Para resolver el problema, vamos a pedir 10 números al usuario, y vamos a guardarlos en
numeros(0), numeros(1), ..., numeros(9). Luego vamos a recorrer el arreglo, y vamos a ver en
qué posición se encuentra el valor más grande.
3
Para hallar el máximo, vamos a hacer lo siguiente: vamos a recorrer el arreglo, y a medida
que tomamos cada número, vemos si es el mayor número visto hasta ahora. Cuando terminamos
de recorrer el arreglo vamos a tener cuál es el máximo. Por ejemplo, si numeros es un arreglo de
10 posiciones, encontramos el máximo de la siguiente forma:
maximo = numeros ( 0 )
FOR i = 0 TO 9
IF numeros ( i ) > maximo THEN maximo = numeros ( i )
NEXT
primero decimos que el máximo es el primer número del arreglo, y luego recorremos todo el
arreglo para ver si encontramos alguno mayor que el máximo hasta ahora. Si lo encontramos,
actualizamos el valor máximo. Ası́, una vez terminado de recorrer el arreglo, la variable máximo
guarda el valor máximo que contiene el arreglo.
Notar que cada vez que se actualiza el valor del máximo ( maximo = numeros(i) ), i es el
ı́ndice (la posición dentro del arreglo) del número que se convierte en máximo. Entonces, para
obtener el INDICE del máximo valor del arreglo, tenemos que ir guardandolo a medida que
encontramos un número que supera al máximo.
indice del mayor = 0
maximo = numeros ( 0 )
FOR i = 0 TO 9
IF numeros ( i ) > maximo THEN
maximo = numeros ( i )
indice del mayor = i
END IF
NEXT
Esto es, no tiene sentido guardar todo el tiempo el ı́ndice y el valor del elemento mayor,
basta con tener sólo el ı́ndice (su posición en el arreglo).
’ Buscamos e l i n d i c e d e l mayor
indice del mayor = 0
FOR i = 0 TO 9
IF numeros ( i ) > numeros ( i n d i c e d e l m a y o r ) THEN i n d i c e d e l m a y o r = i
NEXT
PRINT ” e l i n d i c e d e l mayor e l e m e n t o e s ” ; i n d i c e d e l m a y o r
4
5.
Escriba un programa que pida al usuario 10 números, y un valor V. El programa
debe ver si existe el valor V en el arreglo y remover la primer ocurrencia del mismo,
desplazando cada uno de los siguientes elementos a la izquierda, y agregando un
elemento 0 al final del arreglo. El programa debe luego mostrar el arreglo resultante.
El elemento en la posición 5 es
v
A = [9 ,8 ,7 ,6 ,5 ,4 ,3 ,2 ,1 ,0]
Veamos qué sucede si desplazamos todos los elementos que están a partir de la 5ta posición,
hacia la izquierda. y ponemos un 0 al final del arreglo. Es decir, movemos los valores en las
posiciones 6,7,8, y 9, una posición hacia la izquierda, es decir, los ubicamos en las posiciones
5,6,7, y 8, y ponemos un 0 en la 10ma posicion (o sea A(9)), queda:
A = [9 ,8 ,7 ,6 ,5 ,3 ,2 ,1 ,0 ,0]
Ahora bien, ¿cómo hacemos para desplazar todos los elementos en la posición 6,7,8 y 9, una
posición hacia la izquierda?
En general, lo que hicimos fue escribir, en A(i) el valor de A(i + 1), para todo i entre 5 y 8.
El enunciado pedı́a ingresar 10 números, meterlos en un arreglo, luego pedir un valor, en-
contrar su ı́ndice dentro del arreglo, y luego mover todos los elementos que tiene a su derecha,
una posición hacia la izquierda. Luego escribir un 0 en la última posición del arreglo.
5
’ pedimos e l numero a b u s c a r
INPUT n
’ a q uı́ , j e s e l ı́ n d i c e en e l a r r e g l o donde s e e n c u e n t r a e l v a l o r n .
’ e n t o n c e s d e s p l a z a m o s t o d o s l o s e l e m e n t o s que e s t á n a su derecha , una p o s i c i ó n
’a la izquierda .
FOR i = j TO 8
numeros ( i ) = numeros ( i +1)
NEXT
’ ahora e s c r i b i m o s un 0 en l a ú l t i m a p o s i c i ó n
numeros ( 9 ) = 0
’ mostramos e l a r r e g l o
FOR i =0 TO 9
PRINT numeros ( i )
NEXT
6.
Escriba un programa que pida al usuario 10 elementos de un arreglo, un valor
N, y un ı́ndice (i) dentro del arreglo. El programa debe poner el valor V en la posi-
ción i del arreglo, y desplazar el resto de los elementos a la derecha, descartando el
último. El programa debe luego mostrar el arreglo resultante.
Este programa funciona de forma análoga al anterior, sólo que en lugar de buscar un valor
dentro del arreglo para desplazar el resto, el ı́ndice del mismo ya está dado (lo indica el usuario).
Dado el ı́ndice, hay que desplazar los elementos a derecha de él, una posición a derecha. Y
luego escribir el valor V en la posición que indica el ı́ndice. Basicamente, se tiene que insertar el
valor V en la posición indicada por el usuario, y desplazar los que tiene a derecha una posición
a derecha).
Para, dado un indice i y un arreglo a, desplazar todos los elementos que le siguen, a derecha.
Hacemos:
FOR j = 8 TO i s t e p −1
a ( j +1) = a ( j )
NEXT
6
INPUT numeros ( i )
NEXT
’ tomamos e l v a l o r V
INPUT v
’ tomamos e l i n d i c e
INPUT i
’ movemos l o s que t i e n e a d e r e c h a
FOR j = 8 TO i s t e p −1
numeros ( j +1) = numeros ( j )
NEXT
’ e s c r i b i m o s v en l a p o s i c i ó n i
numeros ( i ) = v
’ mostramos e l a r r e g l o
FOR i =0 TO 9
PRINT numeros ( i )
NEXT
7.
Escriba un programa que pida al usuario 10 números, el programa deberá in-
dicar en pantalla: “el arreglo es creciente”, “el arreglo es creciente”, “el arreglo es
constante”, o “el arreglo es creciente y decreciente”.
Si no se cumple ninguno de los anteriores casos, diremos que el arreglo está desordenado.
Para comprobar si un arreglo de 10 elementos es creciente, debemos ver que para todo i
entre 0 y 8, se cumple que a(i) < a(i + 1). Si para algún i, NO se cumple que a(i) < a(i + 1),
entonces no es creciente. Entonces, para comprobarlo, hay que ver si podemos encontrar un i
tal que a(i) no sea igual a a(i + 1).
Podemos crear una varible, llamemosla creciente, a la que le damos valor inicial = 1. Esta
variable nos va a indicar si el arreglo es o no creciente. Vamos entonces a recorrer el arreglo
para ver si podemos encontrar algun par a(i), a(i + 1) tal que NO se cumpla que a(i) < a(i + 1).
Si lo encontramos, damos valor 0 a la variable creciente, indicando que el arreglo no es creciente.
7
IF c r e c i e n t e = 1 THEN PRINT ” e l a r r e g l o e s c r e c i e n t e ”
’ vemos s i e s c r e c i e n t e
creciente = 1
FOR i = 0 TO 8
IF NOT ( numeros ( i ) < numeros ( i +1)) THEN c r e c i e n t e = 0
NEXT
’ vemos s i e s d e c r e c i e n t e
decreciente = 1
FOR i = 0 TO 8
IF NOT ( numeros ( i ) > numeros ( i +1)) THEN d e c r e c i e n t e = 0
NEXT
’ vemos s i e s c o n s t a n t e
constante = 1
FOR i = 0 TO 8
IF NOT ( numeros ( i ) = numeros ( i +1)) THEN c o n s t a n t e = 0
NEXT
IF c r e c i e n t e = 1 THEN
PRINT ” e l a r r e g l o e s c r e c i e n t e ”
ELSE
IF d e c r e c i e n t e = 1 THEN
PRINT ” e l a r r e g l o e s d e c r e c i e n t e ”
ELSE
IF c o n s t a n t e = 1 THEN
PRINT ” e l a r r e g l o e s c o n s t a n t e ”
ELSE
PRINT ” e l a r r e g l o e s d e s o r d e n a d o ”
END IF
END IF
END IF
8.
Escriba un programa que pida al usuario un arreglo de 10 números. El programa
los debe ordenar y mostrarlos en orden ascendente.
Esto puede ser resuelto con el algoritmo de burbuja o BubbleSort, fue explicado en la clase, el
pseudocódigo del algorı́tmo puede ser hallado en http://es.wikipedia.org/wiki/Ordenamiento de burbuja
8
9.
Escriba un programa que dados los arreglos a y b de 10 enteros cada uno, y el
arreglo c de 20 elementos, escriba los elementos de a seguidos de los elementos de
b en c y los muestre.
Tenemos dos arreglos, a y b, de 10 elementos cada uno, de modo que el arreglo a tiene los
elementos a(0), a(1), ..., a(9), y b tiene b(0), b(1), ...., b(9).
Tenemos también un arreglo c de 20 elementos, o sea que tiene c(0), c(1), ...., c(19).
Tenemos que escribir en c todos los elementos de a seguidos de todos los elementos de b.
’ d e c l a r a m o s e l a r r e g l o c , p o r q u e t i e n e mas de 10 e l e m e n t o s .
DIM c ( 2 0 ) AS INTEGER
10.
Escriba un programa que dado dos arreglos a y b de 10 enteros cada uno y un
arreglo c de 20 elementos, escriba en c el resultado de mezclar los arreglos a y b en c.
Ejemplo:
a = [1 ,3 ,5 ,7 ,9 ,11 ,13 ,15 ,17 ,19]
b = [2 ,4 ,6 ,8 ,10 ,12 ,14 ,16 ,18 ,20]
c = [1 ,2 ,3 ,4 ,5 ,6 ,7 ,8 ,9 ,10 ,11 ,12 ,13 ,14 ,15 ,16 ,17 ,18 ,19 ,20]
Vemos que lo que hace el programa que se pide programar, es ir intercalando, en el arreglo
c, los elementos de los arreglos a y b: en las posiciones impares de c, van los elementos de a, y
en las pares, los de b.
9
c =[ a ( 0 ) , b ( 0 ) , a ( 1 ) , b ( 1 ) , . . . . , a ( 9 ) , b ( 9 ) ]
’ pedimos l o s dos a r r e g l o s
FOR i = 0 TO 9
INPUT a ( i )
NEXT
FOR i = 0 TO 9
INPUT b ( i )
NEXT
Vemos que en con c(i*2)=a(i) se escriben en c, sólo en las posiciones pares, los elementos
de a, mientras que con c(i*2+1)=b(i) se escriben sólo en las posiciones impares los elementos
de b.
11.
Escriba un programa que pida un número al usuario e indique si el número in-
gresado es primo.
Un número es primo sólo si tiene dos divisores entre 1 y él mismo, o si no tiene ninguno
entre 2 y él mismo menos 1.
Lo que hacemos entonces, es, dado el número que ingresa el usuario (llamemosle n), vamos
a ver si algún número entre 2 y n − 1 lo divide. Si alguno lo divide, entonces el número no es
primo.
’ tomamos e l numero
INPUT n
div = 0
i = 1
’ s i f u e d i v i d i d o a l g u n a vez , e n t o n c e s no e s primo , s i n o l o e s .
IF d i v = 1 THEN
PRINT ” no e s primo ”
10
ELSE
PRINT ” e s primo ”
END IF
12.
Escriba un programa que pida un número al usuario hasta que el número ingre-
sado sea múltiplo de 3.
13.
Escriba un programa que pida 10 números al usuario, los guarde en un arreglo
y los invierta de posiciones.
Para invertir un arreglo, tenemos que hacer una serie de intercambios. Pongamos un ejemplo.
Sea el arreglo A, y sea B el arreglo resultante de invertir A, entonces
A = [0 ,1 ,2 ,3 ,4 ,5 ,6 ,7 ,8 ,9]
B = [9 ,8 ,7 ,6 ,5 ,4 ,3 ,2 ,1 ,0]
Vemos que lo que era A(0) en A, es B(9) en B, y lo que era A(1) en A, es B(8) en B, en
general, para dar vuelta un arreglo, tenemos que hacer unos intercambios, de la forma
’ los invertimos
FOR i = 0 TO 4
s = a( i )
a ( i ) = a (9 − i )
a (9 − i ) = s
NEXT
’ e l e n u n c i a d o no l o p i d e , p e r o l o s mostramos
FOR i = 0 TO 9
11
PRINT a ( i )
NEXT
14.
Escriba un programa que pida 10 números al usuario y sume los primeros 5 y
los reste a los últimos 5.
FOR i = 0 TO 9
INPUT a ( i )
NEXT
FOR i = 0 TO 4
s = s + a( i )
NEXT
FOR i = 5 TO 9
s = s − a( i )
NEXT
15.
Escriba un programa que pida al usuario 10 números, y devuelva la máxima
diferencia entre alguno de ellos.
La máxima diferencia de una tira de números, es la resta del par de números del arreglo que
mayor diferencia tiene, por ejemplo, si A es [0, 1, −2, 4, 5, 9, 7, 3, 8, 6], entonces la resta que da
un mayor valor es 9 − (−2) = 11.
Hay dos formas de hacer esto, podemos tomar todas las combinaciones posibles de pares,
calcular su diferencia y ver cuál es la mayor, de la forma
FOR i = 1 TO 10
FOR j = 1 TO 10
dif = a( i ) − a( j )
IF d i f > mayorDif THEN mayorDif = d i f
NEXT
NEXT
o podemos hallar el máximo elemento en el arreglo, después calcular el mı́nimo, y luego hacer
la diferencia, haciendo maximo − minimo.
maximo = a ( 0 )
FOR i = 0 TO 9
IF a ( i ) > maximo THEN maximo = a ( i )
NEXT
minimo = a ( 0 )
FOR i = 0 TO 9
IF a ( i ) < minimo THEN minimo = a ( i )
NEXT
12
16.
Escriba un programa que pida al usuario 10 números, y vaya tomando de a 2
en 2, sumando y restando cada par de números. Debe escribir los resultados en un
arreglo de tamaño 5.
’ pedimos l o s v a l o r e s
FOR i = 1 TO 10
INPUT a ( i )
NEXT
j = 0
FOR i = 1 TO 9
j = j + 1
IF i MOD 2 = 0 THEN
b( j ) = a ( i ) + a ( i + 1)
ELSE
b( j ) = a ( i ) − a ( i + 1)
END IF
NEXT
FOR i = 1 TO 5
PRINT b ( i )
NEXT
17.
Escriba un programa que pida al usuario 10 números, y luego devuelva el prome-
dio de pares y de impares encontrados.
’ pedimos l o s v a l o r e s
FOR i = 1 TO 10
INPUT a ( i )
NEXT
FOR i = 1 TO 10
IF a ( i ) MOD 2 = 0 THEN
sumaPares = sumaPares + a ( i )
cantPares = cantPares + 1
ELSE
sumaImpares = sumaImpares + a ( i )
cantImpares = cantImpares + 1
END IF
NEXT
13
18.
Escriba un programa que pida 9 numeros al usuario. El programa debe decir si
los ultimos 3 son la suma de los 6 primeros. Es decir, si a(6..8) = a(3..5) + a(0..2)
’ pedimos l o s v a l o r e s
FOR i = 1 TO 9
INPUT a ( i )
NEXT
vale = 1
FOR i = 0 TO 2
IF a ( 6 + i ) <> a ( i ) + a ( 3 + i ) THEN v a l e = 0
NEXT
IF v a l e = 1 THEN
PRINT ” l o s u l t i m o s son suma de l o s p r i m e r o s ”
ELSE
PRINT ” l a c o n d i c i o n no v a l e ”
END IF
19.
Escriba un programa que dados dos arreglos de igual tamaño, y su tamaño
(menor a 10), sume las posiciones impares y reste las pares de cada uno, y ponga
el resultado en un 3er arreglo.
’ pedimos e l tamaño de l o s a r r e g l o s
INPUT t
FOR i = 1 TO t
IF i MOD 2 = 0 THEN
c( i ) = a( i ) − b( i )
ELSE
c( i ) = a( i ) + b( i )
END IF
NEXT
’ mostramos l o s e l e m e n t o s
FOR i = 1 TO t
14
PRINT c ( i )
NEXT
15