Sei sulla pagina 1di 10

III222A Tecnologas de la Informacin II 22 de abril al 02 de mayo de 2013

Implementacin de Algoritmos I
Docente: Milton A. Ramrez Klapp Universidad Del Desarrollo
1. Cadenas de texto
Se pide que usted implemente en Pseint cada uno de los problemas propuestos, sin olvidar que primero
debe hacer el anlisis y luego el diseo de la solucin. Apyese con el uso de banderas para facilitar
la tarea de depuracin de los programas que construya.
1. El programa le pide al usuario un nmero, y debe entregarle un mensaje que le diga si acaso es
positivo, negativo o cero.
2. El programa extrae la raz cuadrada de un nmero que previamente se le pide al usuario. En caso
que sea negativo, debe volver a pedirlo hasta que el valor ingresado sea mayor o igual que cero.
Cules son las validaciones que hay que realizar, para asegurar que los datos estn correctamente
ingresados?
3. Disee un programa que pregunte el nombre y el apellido. Lo que tiene que generar a cambio es
lo siguiente:
(a) Concatenar el nombre con el apellido, intercalando entremedio un espacio en blanco.
(b) Mostrar el nombre con letras maysculas, y el apellido en minsculas.
(c) Determinar qu parte del nombre tiene ms letras. En caso de empate, informar a travs de
un mensaje.
(d) Exhibir los primeros 5 caracteres del nombre.
(e) Mostrar los ltimos 3 caracteres del apellido.
Para resolver este ejercicio, deber emplear algunas de los comandos que Pseint provee para trabajar
con cadenas de caracteres:
i. Longitud(x), que determina la cantidad de smbolos que componen x.
ii. Mayusculas(x), que transforma a maysculas una determinada cadena x.
iii. Minusculas(x), que transforma a minsculas una determinada cadena x.
iv. Concatenar(x,y), que junta dos cadenas x e y.
v. Subcadena(x,inicio,fin), que extrae desde una cadena x todos los smbolos que estn
entre las posiciones inicio y fin. En Pseint, el smbolo de ms a la izquierda se encuentra
en la posicin 0. Por ejemplo, si x es igual a laguna, tendremos:
smbolo l a g u n a
posicin 0 1 2 3 4 5
1
En este caso, es posible apreciar que la longitud de x es igual a 6, y que las posiciones
relativas que cada smbolo que la componen abarcan desde 0 hasta 5. El resultado de
Subcadena(laguna,1,4) va a ser igual a agun.
Adems, tenga en cuenta que el valor de alguna variable que haya sido declarada de tipo
caracter, se inicializa (cuando sea necesario) con comillas dobles. Esto se hace para diferenciarlas
de las de tipo numrico
_
1 Entero
2 Real
_
, que no las llevan. Por ejemplo, si deno a oracion
como una cadena de caracteres, y le queremos dar el valor inicial de la camisa es de color
azul , deberemos escribir:
Definir oracion Como Caracter;
oracion <- "la camisa es de color azul";
4. Construya un programa que pida un nmero y un smbolo. La idea es que a partir de esos datos,
en la pantalla se dibuje un cuadrado de largo igual al nmero, y rellenado con el smbolo. Por
ejemplo, si la entrada contiene al 3 y al #, el programa deber imprimir:
###
###
###
2. Funciones
Al momento de abrir Pseint, una de las primeras actividades que hacemos consiste en ponerle algn
nombre a lo que aparece escrito como Proceso. Una vez hecho esto, procedemos a escribir cada una de
las lneas que componen nuestro algoritmo. Aquello que Pseint denomina como Proceso corresponde a
lo primero que va a ejecutar cuando el programador vaya a ejecutar lo que haya codicado.
En algunas ocasiones es conveniente emplear un recurso que en el mbito de la programacin se conocen
como funciones o subprocesos, que se denen como un bloque de cdigo que est destinado a cumplir
con un determinado propsito, de tal manera que ellas representan un algoritmo dentro de otro
algoritmo ms grande que las contiene. El benecio que conlleva su uso es que permite hacer ms
legible la escritura de nuestros programas. A medida que se expongan algunos ejemplos, se va a claricar
de mejor manera este concepto. Veamos algunas caractersticas.
2
Las funciones en Pseint:
_

_
1 Se identican mediante un nombre;
2 Comienzan con la palabra Funcion (sin tilde);
3 Terminan con FinFuncion;
4 Siempre se declaran fuera de lo que se llama Proceso;
5 Tienen parmetros, que corresponden a los datos de entrada que
necesita para operar, y pueden ser:
_

_
Ninguno.
Entero.
Real.
Lgico (verdadero o falso).
Cadena de caracteres.
_

_
6 Son tales que sus parmetros se escriben entre ().
7 Al igual que un algoritmo, puede generar salidas, que pueden ser de
diferente naturaleza:
_

_
Ninguno.
Entero.
Real.
Lgico (verdadero o falso).
Cadena de caracteres.
_

_
8 Pueden ser llamadas o invocadas desde cualquier parte del programa.
9 Los valores que tomen las variables propias de la funcin son vlidos
dentro de lo que est entre Funcion y FinFuncion.
Siempre tenga presente que:
Lo primero que Pseint va a ejecutar corresponde al proceso con que abre el
programa.
2.1 Algunos ejemplos
Veamos algunos ejemplos que abarquen los cuatro casos de:
_

_
1 Funcin sin parmetros y sin retorno;
2 Funcin con parmetro y sin retorno;
3 Funcin sin parmetros y con retorno;
4 Funcin con parmetros y con retorno.
_

_
1 Funcin que no recibe parmetros y que no retorna algo. En el proceso que se denomina ejemplo01,
se llama a la funcin mensaje, que lo nico que hace es escribir el texto sealado en su cdigo:
3
2 Funcin que recibe un parmetro y que no retorna algo. En este caso, estamos
creando una funcin que se llama mensaje, que recibe a x como dato de entrada, de tal manera
que la instruccin que dice Escribir x repetir el valor que se le haya dado a x. Como habamos
comentado, el proceso ejemplo02 es lo primero que se va a ejecutar. Si observamos con calma,
veremos que en la lnea nmero 6 se produce la llamada a la funcin mensaje, donde el parmetro
"Hola a todos." lo encerramos entre parntesis. Pero no slo es eso: al momento de leer la
instruccin mensaje("Hola a todos"), Pseint automticamente llama a la funcin mensaje, y
de manera interna le est indicando que el valor del parmetro x que requiere para trabajar tendr
que ser igual a "Hola a todos.".
3 Funcin que no recibe parmetros y que retorna algo. En este ejemplo podemos apreciar que
desde el proceso ejemplo03 se produce una llamada hacia la funcin multiplicacion en la lnea
nmero 11 de la imagen adjunta.
Si observamos el cdigo de sta, podemos notar que la escritura ha variado un poco en relacin a
lo presentado en los ejemplos anteriores:
(a) Cuando una funcin retorna algo, es necesario especicar dos cosas:
_
1 El nombre de la variable que guarda el resultado, y
2 El tipo de dato que retorne la funcin.
_
Lo anterior se maniesta de manera explcita en este ejemplo de la siguiente manera:
4
i. El nombre de la variable que almacena lo que entrega la funcin se llama resultado.
Cuando una funcin retorne algn valor, se debe escribir lo siguiente en el encabezado:
Funcion nombreDelResultadoQueGenera <- nombreDeLaFuncion()
En el prximo ejemplo veremos qu pasa cuando los parntesis de la funcin no estn
vacos. Por el momento estamos hablando solamente de la forma en cmo la declaramos
en el algoritmo general.
ii. Hemos comentado que el nombre de lo que entrega la funcin es una variable que se
llama resultado, y el tipo de dato al cual pertenece es entero, tal como se declara en
la lnea nmero 2.
iii. La lnea nmero 6 es muy importante, ya que ah se indica de manera explcita cul ser
el valor que nalmente termine adoptando resultado.
4 Funcin que recibe parmetros y que retorna algo. Como podemos ver en la imagen que acompaa
este ejemplo, se ha denido una funcin llamada sumar, que recibe dos parmetros:
_
x
y
_
, y cuyo valor de retorno se guarda en una variable de carcter entero como lo es resultado, tal
como se hizo en el ejemplo 3 .
En relacin a sumar podemos establecer estas observaciones:
(a) x e y son los parmetros, y se separan por coma.
(b) Slo denimos el tipo de dato al cual pertenece la variable de retorno que llamamos resultado.
(c) x e y no se denen, ya que sus respectivos valores se reemplazan al momento que la funcin
sea llamada desde el proceso ejemplo04.
Observemos que en la lnea 11 del ejemplo, se produce una llamada a la funcin sumar, a la cual
se le pasan dos parmetros de tipo numrico: 3 y 8. Cuando eso ocurre y tal como se comenta
en la imagen , Pseint genera internamente una asociacin entre los parmetros x e y con los
valores 3 y 8 que consiste en establecer las asignaciones
_
x<-3;
y<-8;
_
, ya que ese es el orden en
cual ellos fueron denidos al momento de construir la funcin.
5
Otra mirada al ejemplo anterior
En forma equivalente, podemos decir que como sumar es una funcin que retorna un dato de tipo entero,
entonces en el proceso ejemplo04a podemos denir una variable entera a, tal que almacene el resultado
de sumar(3,8), y desplegarlo en la lnea siguiente, tal como se muestra a continuacin:
2.2 Formas de pasar parmetros
A una funcin que reciba parmetros de entrada como la de los ejemplos 2 y 4 , podemos
entregarle esta informacin a travs de dos formas, que pasamos a detallar a continuacin:
_

_
1 Por valor.
_

_
Los parmetros guardan una copia de los valores que recibieron cuando se
llama a la funcin.
Como es una copia, los valores originales no se ven afectados.
Al lado del nombre del parmetro, escribimos de manera textual Por Valor.
Si no dice que sea por valor, Pseint entender que lo es.
Para evitar confusiones, se recomienda ser explcito en declarar que algo sea
por valor.
_

_
2 Por referencia.
_

_
Es lo contrario a la llamada por valor.
Los parmetros sobreescriben los valores que reciben al momento de
llamar a la funcin.
Al lado del nombre del parmetro, escribimos de manera textual
Por Referencia.
Por defecto, Pseint cree que todo es por valor.
_

_
Entonces, como regla prctica podemos decir lo siguiente:
6
(a) Si no quiero alterar el valor del parmetro original de la funcin, hago una llamada por valor.
(b) Si quiero modicarlo, entonces tengo que hacer el llamado por referencia.
Revisemos algunos ejemplos para aclarar mejor estos conceptos:
1 Llamada por valor. En este caso, se ha creado una funcin que se llama miFuncion, cuyo
parmetro de entrada es igual a x. Como es por valor, eso signica que en cualquier parte del
cdigo donde se llame, se va a almacenar internamente una copia del argumento en la variable x.
En esta imagen:
Podemos apreciar que en el proceso ejemploPorValor se genera una llamada a la funcin en la
lnea 14, donde el dato de entrada es igual a un valor entero que hemos denido como k, y que
al principio toma el valor 20. De esta manera, cuando Pseint lee la instruccin miFuncion(k), lo
que hace es generar una copia de k y guardarla en x, de tal manera que el resultado que veamos en
la pantalla sea 25. En la lnea siguiente la nmero 15 podemos ver que se ha pedido escribir
el valor que ahora tenga k. Al ejecutar el programa, usted notar que k no ha variado.
Adems, como se haba dicho con anterioridad, en el encabezado de la funcin no es necesario
declarar que x se va a manejar por valor, ya que Pseint siempre lo interpreta as, a no ser que
le indiquemos lo contrario. Entonces, la funcin podramos haberla escrito de esta manera, y
generamos el mismo resultado:
2 Llamada por referencia. En este escenario, lo que ocurre es que el parmetro x va a operar
directamente con el valor con el cual haya sido invocado que en este ejemplo es igual a k con
valor inicial de 20 , y no como en el caso de llamada por valor, cuando se generaba una copia
7
de lo que se entregaba.
Por lo general, en los problemas que abordemos trabajaremos con llamadas a las funciones por
valor y no por referencia, a no ser que se indique lo contrario.
2.3 Ejercicios
1. Construya una funcin que se llame dia, y cuyo parmetro de entrada sea un nmero que vare
entre 1 y 7, que el proceso principal deber consultar al usuario. La idea es que entregue como
resultado el nombre del da de la semana asociado. Por ejemplo: 1 para el lunes, 2 para el martes,
y as sucesivamente. Haga lo mismo para una funcin mes.
2. Construya un programa que le pregunte al usuario lo siguiente:
(a) Nombre.
(b) Apellido.
(c) Ao de nacimiento.
Con estos tres datos, genere dos funciones:
i. nombreCompleto, que reciba como parmetro el nombre y el apellido, y que genere a cambio
el nombre de la persona concatenado con un espacio en blanco, y concatenado con el apellido.
ii. edad, que recibe como parmetro el ao de nacimiento, y calcule la edad actual de la persona.
Una vez que estas funciones estn creadas, el proceso principal deber emitir un mensaje del tipo:
Bienvenid(a/o) Juan Prez, usted tiene 26 aos.
8
3. En este ejercicio vamos a aprender a construir un men de opciones, que deber tener el comportamiento
que se describe a continuacin:
Al usuario se le presentan las opciones que ofrece.
Las opciones por lo general son de tipo entero.
El ltimo valor seleccionable es para salir del programa.
Si el usuario ingresa mal una de las alternativas disponibles, el men se debe seguir mostrando
hasta que la opcin escogida est dentro del rango admisible (habr algn mientras escondido
detrs de esto?).
Si el usuario escoge una alternativa vlida, la idea es que el algoritmo llame a una funcin que
implemente lo que se seala, pasndole previamente los parmetros que requiera para trabajar.
Por ejemplo, si la opcin 3 del men dice Restar dos nmeros, entonces el programa le
pide al usuario los dos valores a y b, y llama a la funcin resta con los dos parmetros antes
mencionados.
Una vez que la funcionalidad escogida haya terminado de trabajar, debe ser capaz de retornar
al men general.
Lo que su programa tendr que hacer es un men que simular a una calculadora, donde las
alternativas sern:
(1) Sumar dos nmeros.
(2) Restar dos nmeros.
(3) Multiplicar dos nmeros.
(4) Dividir dos nmeros.
(5) Salir.
4. Disee un men de opciones que le permita al usuario seleccionar un de las siguientes alternativas:
(1) Calcular el factorial de un nmero. La idea es que si la presiona, pregunte por el valor, y que
luego llame a la funcin que entrega el factorial, usando el parmetro ingresado.
(2) Calcular el valor de una permutacin de n sobre r , que se dene como:
P(n, r ) =
n!
(n r )!
, n, r N
0
, r n
(3) Determinar cunto vale el nmero combinatorial
_
n
r
_
que aparece dentro del desarrollo del
Tringulo de Pascal, que se dene n, r N
0
, r n como:
_
n
r
_
=
n!
r !(n r )!
r n
(4) Hacer una aproximacin para el valor de e
x
. Para este problema, es importante que usted tenga
presente que el computador es una mquina de naturaleza nita, y que debido a eso no puede
representar los innitos decimales que componen el valor numrico de la funcin exponencial.
Recordando que
x R : lim
n
_
n

k=0
x
k
k!
_
= e
x
9
Par subsanar esta dicultad, lo que haremos ser generar una aproximacin de e
x
de la siguiente
manera:
e
x

k=0
x
k
k!
De esta manera, entre mayor sea el valor de n, mejor ser la aproximacin para la exponencial.
En trminos concretos, usted deber:
i. Construir una funcin que retorne el valor aproximado de e
x
, donde x R y n N
0
sern
los parmetros en cuestin.
ii. Si es necesario, tendr que llamar a la funcin que calcula el factorial que construy al
principio.
iii. As, si el usuario presiona la opcin 4, el programa deber pedir los valores de x y de n,
para luego entregar la respuesta.
(5) Hacer una aproximacin de para la funcin seno. Recuerde que x R:
sen(x) = lim
n
_
n

k=0
(1)
k
x
2k+1
(2k + 1)!
_
(6) Hacer una aproximacin de la funcin coseno. Recuerde que x R : cos(x) =
d
dx
sen(x). La
resolucin de esta parte sigue el mismo principio que empleamos para encontrar el valor de la
exponencial.
(7) Hacer una aproximacin de las funciones seno hiperblico senh y coseno hiperblico, que
se denen x R como:
senh(x) =
1
2
(e
x
e
x
) cosh(x) =
1
2
(e
x
+ e
x
)
La resolucin sigue el mismo principio que usamos para aproximar e
x
.
(8) Salir.
5. Construya un programa que al iniciar su ejecucin le pida al usuario las medidas de los lados de un
tringulo, que denotaremos por a, b y c, y que son de tipo real. Lo primero que tendr que hacer
el algoritmo es validar que se cumplan estas condiciones, de tal manera que mientras eso no se
de, no podremos ir al men general:
_

_
a> 0 y b> 0 y c> 0 y
a>b+c y
b>a+c y
c>a+b
_

_
Una vez que haya sorteado con xito esta parte, deberemos acceder a este men:
(1) Determinar el tipo de tringulo. Para esto, deber decidir si se trata de un tringulo escaleno,
issceles o equiltero. Debe construir una funcin que devuelva un texto, y que tome como
dato de entrada los valores de los lados del tringulo.
(2) Calcular el permetro del tringulo. Construya una funcin que devuelva un nmero real, y que
tome como parmetro de entrada las medidas de los tres lados.
(3) Calcular el rea del tringulo, en base a la medida de los tres lados. Apyese con el Teorema
de Hern. Valen las mismas indicaciones de la parte anterior.
(4) Salir.
10

Potrebbero piacerti anche