Está en la página 1de 11

Prcticas el curso de Programacin I Prctica 2

En la Facultad de Ciencias de la UNAM



Prctica 2


Estructuras de iteracin: lgebra Superior
Entrega: Jueves 12 de Septiembre de 2013


Objetivos

1. Entender el uso de los operadores booleanos y cules son sus
resultados.
2. Conocer el uso e importancia de las estructuras para la alteracin del
flujo de ejecucin (seleccin e iteracin).

Actividad Previa

Para est prctica ser necesario realizar lectura desde el teclado. Esto quiere decir
que al correr el programa se ingresarn datos por medio del teclado, as que debers
conocer como se hace esto antes de iniciar la prctica, para que el desarrollo de la
misma sea ms eficiente. Como resultado podrs tener un programa muy simple de
unas pocas lneas, que solicite al usuario una cadena de texto y un nmero, los
cuales se mostrarn en la pantalla.

Una manera de realizar esto es por medio de la clase Scanner.
Instrucciones bsicas para realizar lectura por medio de Scanner:

Al inicio de la clase debers importar la biblioteca correspondiente:
i mpor t j ava. ut i l . Scanner ;

En el cdigo se debe crear el objeto para la lectura:
Scanner l ect or = new Scanner ( Syst em. i n) ;

Podrs guardar en variables la lectura del teclado, dependiendo del tipo de dato:
i nt cant i dad1 = l ect or . next I nt ( ) ;
f l oat cant i dad = l ect or . next Fl oat ( ) ;
St r i ng nombr e = l ect or . next ( ) ;

Se podrn utilizar estos datos como cualquier variable.
Para ms referencias sobre objeto Scanner podrs revisar la seccin de Informacin
adicional.
Prcticas el curso de Programacin I Prctica 2
En la Facultad de Ciencias de la UNAM

Especificaciones

Se desarrollarn dos programas que ayuden a comprobar conceptos de lgebra
Superior I.

El primero de stos comprobar frmulas demostradas por medio de Induccin
Matemtica, como son: la suma de los primeros n naturales, suma de los primeros n
naturales al cuadrado y al cubo. Para esto se preguntar cul de las tres frmulas se
desea utilizar y el valor para n, con lo que se mostrar el resultado por medio de las
frmulas conocidas y adems llevando acabo las sumas. Al final se indicar si se
tiene una igualdad o no.

Para el siguiente programa se tendrn como ejemplo tres funciones discretas, para
las cuales se desarrollar un programa que indique si la funcin utilizada es
inyectiva, suprayectiva y/o biyectiva. Las funciones se proporcionan en la seccin
de desarrollo dentro de la prctica. Se utilizarn variables booleanas que ayuden a
determinar si cada uno de los elementos del codominio cumple con las condiciones
para este tipo de funcin.




Desarrollo

Parte 1

Por medio de induccin es posible demostrar las siguientes frmulas:

( )
2
1
1
+
=

=
n n
i
n
i


( )( )
6
1 2 1
1
2
+ +
=

=
n n n
i
n
i


( )
2
1
3
2
1
|
.
|

\
| +
=

=
n n
i
n
i


Ahora se desarrollar un programa que te permita verificar para casos especficos
que las frmulas se cumplen.

Empezars por definir tu mtodo main en un archivo llamado Sumatoria.java. Se
tendrn dos variables llamadas resultadoFormula y resultadoSumatoria, stas sern
de tipo numrico, slo asegrate de definir el tipo de dato correcto y de
inicializarlos con un valor de cero.
Prcticas el curso de Programacin I Prctica 2
En la Facultad de Ciencias de la UNAM


Al correr el programa lo primero que se mostrar en pantalla ser lo siguiente, para
lo cual debers definir el cdigo necesario:

Pr ogr ama de Sumat or i as
I ndi ca qu f r mul a deseas ocupar por medi o del nmer o
adecuado
1. Suma i
2. Suma i ^2
3. Suma i ^3

Despus se leer del teclado la opcin seleccionada (a la que puedes llamar por
ejemplo opcion) y preguntar cual es el valor de n que se desea ocupar, el cual
tambin se leer del teclado.
Por medio de if- else anidados se definir el procedimiento para cada una de las
opciones posibles, si se elige 1 entonces se quiere la sumatoria de i (primer caso).
Para esto definirs el valor del atributo resultadoFormula, utilizando la frmula y
con la sintaxis adecuada para Java.
i f ( opci on == 1) {
( )
2
1 +
=
n n
ormula resultadoF

}el se i f

A continuacin se dar el valor adecuado a resultadoSumatoria, por medio de un
ciclo do, cuya sintaxis es como se muestra a continuacin:

i nt i = 1;
do{
/ / I nt er i or del ci cl o( act ual i za val or de r esul t adoSumat or i a)
/ / Aument ar i en una uni dad
}whi l e( ) ; / / Mi ent r as sea i menor o i gual a n

Por medio de este ciclo la condicin se verifica al final, con lo que se garantiza que
el ciclo se recorra por lo menos una vez, lo que en este caso siempre debe suceder
ya que el valor de n siempre debe ser mayor a cero.

Se defini un contador que se llama i el cual debes asegurarte de aumentar en una
unidad cada que entre en el ciclo, ya que de otra manera nunca se cumplira la
condicin de salida y el ciclo correra infinitamente. En cada corrida del ciclo se
debe actualizar el valor de resultadoSumatoria para que al valor previo se le sume
la nueva i. De esta forma se sumar i desde 1 hasta n.

Esto es slo en caso de que la opcin seleccionada sea 1, para el caso que se pida 2
o 3 (suma de cuadrado o de cantidades al cubo) el cdigo es muy similar, con la
modificacin necesaria en la sumatoria para sumar el cuadrado o el cubo del
nmero.

Prcticas el curso de Programacin I Prctica 2
En la Facultad de Ciencias de la UNAM

Al terminar el clculo, segn la opcin que se haya elegido, se mostrar en pantalla
el resultado de los dos atributos. Se tendr algo como lo siguiente (donde x y y son
los valores de resultadoFormula y resultadoSumatoria, respectivamente)

RESULTADO:
El clculo por medio de la frmula es: x
El clculo por medio de la sumatoria es: y

Finalmente se har la comparacin de ambos resultados para mostrar, segn sea el
caso: La frmula nos da el valor adecuado o La frmula no funciona para este
caso

/ / I mpr i mi r r esul t ados de l os at r i but os
i f ( r esul t adoFor mul a = = r esul t adoSumat or i a)
/ / I mpr i mi r La frmula nos da el valor adecuado
el se
/ / I mpr i mi r La frmula no funciona para este caso
Prcticas el curso de Programacin I Prctica 2
En la Facultad de Ciencias de la UNAM

Parte 2

En esta seccin hars uso de una de las siguientes funciones discretas. Podrs
probar las tres, pero insertando una por una en tu cdigo para conocer el resultado.
Esto quiere decir que cada uno de los siguientes mtodos representa una funcin
posible que puedes ocupar en tu cdigo, y para cambiarla tendr que remplazarla
por completo en el cdigo.

Para todos los casos se considerar un Dominio = Codominio = {1,2,3,4,5}

publ i c st at i c i nt f unci on1( i nt a) {
i nt r esul t ado = a + 2;
i f ( r esul t ado ==6) {
r esul t ado = 1;
}el se i f ( a==7) {
r esul t ado =2;
}
r et ur n r esul t ado;
}

publ i c st at i c i nt f unci on2( i nt a) {
i nt r esul t ado = a%2;
r et ur n r esul t ado;
}

publ i c st at i c i nt f unci on3( i nt a) {
r et ur n a;
}

Iniciars definiendo el mtodo main dentro de una clase que se llame Funciones, al
terminar el main completars el cdigo con la funciones que se acaban de indicar:

publ i c cl ass Funci ones{
publ i c st at i c voi d mai n( St r i ng[ ] ar gs) {

}
/ / Aqu copi ar s el cdi go de l as f unci ones
}

Despus de mostrar un mensaje de iniciado el programa, que adems indique la
funcin que se va a utilizar (1,2,3), se verificar si la funcin que decides utilizar es
inyectiva.

Def: Una funcin f: AB se llama inyectiva si para toda pareja a1, a2 A con a1a2 se tiene f(a1)f(a2)

En este caso se tiene un dominio muy pequeo, lo que hace posible calcular el
resultado de la funcin para cada uno de los elementos y marcar los elementos del
codominio que resulten de la funcin. Esto ayudar a saber si en algn momento se
Prcticas el curso de Programacin I Prctica 2
En la Facultad de Ciencias de la UNAM

repite alguno, ya que si dos elementos del dominio arrojan el mismo resultado no es
una funcin inyectiva. Recuerda que Dominio = Codominio = {1,2,3,4,5}

Una forma de marcarlos sera crear variables de tipo booleano, una para cada
elemento del codominio, de forma que el valor sea falso si no se ha agregado a la
imagen de la funcin.

Por ejemplo, se tiene la variable booleana codominio1=false, con un estado inicial
de falso; se aplicar la funcin a cada uno de los elementos del dominio y si en
algn momento el resultado es 1, entonces 1 se agrega a la imagen, codominio1 =
true;
En caso de que el valor de codominio1 ya sea verdadero, al tratar de modificarlo
quiere decir que existe otro elemento que tiene el mismo elemento del dominio
como resultado de la funcin, lo que nos quiere decir que esta funcin NO es
inyectiva.

Puedes pasar a cdigo Java el siguiente pseudocdigo:

Se definen variables booleanas codominio1,,codominio5 = falso
Se define un booleano llamado inyectiva con valor inicial verdadero.

Ci cl o while con i de 1 a 5
i nt r esul t ado = f unci onx( i ) ; / / Se def i ne l a x con
/ / f unci n sel ecci onada
Si r esul t ado = 1
Si codomi ni o1 = f al se
Se modi f i ca el val or de i magen a ver dader o
( codomi ni o1)
En ot r o caso
Se modi f i ca el val or de i nyect i va a f al so
Si r esul t ado = 2
/ / Es anl ogo al caso de 1
/ / Se cont i nua hast a el caso de que r esul t ado sea 5


Finalmente se indica en pantalla si la funcin es inyectiva. El resultado est en la
variable inyectiva ya que ser verdadero si lo es y falso si no es inyectiva.

Despus se verificar si la funcin es suprayectiva:

Def: Una funcin f: AB se llama suprayectiva si para toda b B existe a A tal que f(a)=b.

Para este caso se quiere verificar que todos los elementos del codominio son parte
de la imagen de la funcin. Para esto puedes realizar algo muy similar al caso
anterior y te servir lo que realizaste en el paso anterior.


Prcticas el curso de Programacin I Prctica 2
En la Facultad de Ciencias de la UNAM

Una solucin posible al problema es, al igual que para probar si es inyectiva,
designar una variable boolena a cada elemento del codominio, de forma que su
valor sea verdadero si algn elemento del dominio nos da ese valor al pasar por la
funcin; por lo que tambin podras designar variables y correr el ciclo cambiando a
verdadero cada elemento. Pero como esto ya lo hiciste en la seccin anterior, si
continuaras con el cdigo despus de lo que se realiz para la inyectividad,
entonces ya existen las variables booleanas para cada elemento del dominio, y ms
an, ya tienen el valor de verdadero slo las que fueron parte de la imagen en algn
momento.

As que lo nico que te queda revisar es que todas sean verdaderas.
Simplemente definirs una variable booleana llamada suprayectiva con valor
verdadero. Verificars el valor para cada una de las varibles codominiox que se
haban definido, y en caso de que alguna sea falsa el valor de suprayectiva cambia a
falso.

Se indicar el resultado dependiendo del estado de la variable booleana
suprayectiva.

Finalmente falta verificar que sea biyectiva.
Def: Una funcin f: AB se llama biyectiva si es inyectiva y suprayectiva.

Slo se necesita verificar que se cumplan las dos propiedades anteriores, cuyo
resultado est guardado en las variables booleanas inyectiva y suprayectiva, por lo
que se puede realizar un if de conjuncin.

Si inyectiva es ver dader a y suprayectiva es ver der a
Ent onces l a f unci n es bi yect i va
/ / Most r ar r esul t ado en pant al l a
En ot r o caso
No l o es / / Most r ar r esul t ado en pant al l a

Con esto se completa la solucin al problema.

Prcticas el curso de Programacin I Prctica 2
En la Facultad de Ciencias de la UNAM

Trabajo adicional

Como actividad complementaria a la prctica realizada se har un programa que
pueda seleccionar entre Ordenaciones con repeticin o Combinaciones, para
despus preguntar por los parmetros necesarios y realizar un listado de todos los
conjuntos posibles. En esta ocasin el nico parmetro necesario ser el nmero de
elementos que se pueden elegir; es decir, el tamao del conjunto de donde se toman
los elementos de la ordenacin o combinacin.

Como en los casos anteriores es necesario crear primero un mtodo main. Al iniciar
se mostrar el ttulo del programa y se preguntar al usuario qu desea calcular con
las siguientes opciones:

1.Ordenaciones con Repeticin
2.Combinaciones

Donde el usuario ingresar un nmero 1 o 2. Por medio de estructuras if se indicar
lo que se debe realizar en cada una de las opciones.

Ordenaciones

Para las ordenaciones con repeticin se toma un nmero x de elementos de un
conjunto, donde es posible repetir un elemento. Por ejemplo si x=2 y y = {1,2,3}

Son 9 las ordenaciones posibles: ( ) 9 3 y en cantidad
2
= =
x


Para este caso usaremos un valor fijo de x = 3 y el usuario del programa ingresar
solamente la cantidad de elementos en y.

Entonces, cuando se seleccionan las ordenaciones con repeticin se pregunta el
tamao del conjunto, y es todo lo que se necesita para mostrar todas las
ordenaciones, utilizando simplemente tres ciclos.

Ej, y =3 entonces y = {1,2,3}

Si se tienen las variables enteras i j k
Para i =1
111
112
113
121
122



Prcticas el curso de Programacin I Prctica 2
En la Facultad de Ciencias de la UNAM

Si te das cuenta el valor de j cambia hasta el cuarto elemento (ya que slo existen 3
elementos), el de k cambia siempre y el de i permanece constante por ahora.


Entonces se debera programar algo como lo siguiente:
Mi ent r as i <= 3
Mi ent r as j <= 3
Mi ent r as k<=3
I mpr i mi r ( i j k )
k = k +1
j = j +1
i =i +1

Esto se puede representar de manera muy sencilla por medio de instrucciones for o
while, como se muestra en el pseudo-cdigo anterior. As que es lo nico que se
tiene que hacer para mostrar toda la lista, de forma que se tenga como resultado en
pantalla algo como lo siguiente

La lista de todas las ordenaciones posibles es:
111
112


333


Combinaciones

En caso de haber seleccionado las combinaciones, esto se refiere a ordenaciones sin
repeticin tomando 3 nmeros de n. El siguiente ejemplo muestra las ordenaciones
seleccionando n=3, que es el mnimo valor para n.

Ej
123 213 312
132 231 321

Esto se podra ver como un caso particular del ciclo realizado anteriormente, donde
si j = i se salta el ciclo y si k =j o k = i, no se imprime. Para esto se agregaran
estructuras de seleccin en los ciclos.

En este caso se ocupar otro mtodo, ya que slo se necesitan tres dgitos se
imprimirn las permutaciones posibles de 3, dados slo los tres nmeros. Esto
quiere decir que tendramos un resultado como el ejemplo anterior, donde slo se
muestran tres resultados ya que se conocen los tres nmeros.


Prcticas el curso de Programacin I Prctica 2
En la Facultad de Ciencias de la UNAM

Por ejemplo, si en lugar de 1,2,3 como en el ejemplo anterior, se tuvieran i,j,k, el
resultado sera:

ijk jik kij
ikj jki kji

Entonces slo es necesario asegurar que no se repiten los tres nmeros dados e
imprimir estas seis combinaciones. Para cada combinacin i, j, k, donde cada uno es
distinto, se indica que se impriman por separado las seis combinaciones
mencionadas.
Para crear todas las combinaciones posibles que nos permitan tener tres nmeros
distintos tomados de n nmeros, se puede seguir el siguiente procedimiento:

- Para elegir el primero no hay problema ya que no se va a repetir por no tener
ninguno en el conjunto previamente, lo que nos permite definir al primer
nmero como cualquiera del conjunto.

Entonces i =1 ,2 ,3,, n, lo que se puede llevar acabo con un ciclo de la forma:
for(int i =1 ; i < = n ; i++ )

- Ya que se tiene el valor de i (dentro del ciclo mencionado) se puede definir
el valor del siguiente nmero, el cual se quiere slo sea mayor que i; es
decir:
j = i+1,i+2,i + 3, ., n

De la misma forma que el caso anterior, se puede definir un ciclo for similar,
considerando que el valor inicial de j no es 1 si no i+1.

- El tercer nmero, y cualquiera que hubiera despus de este, debe tomar
valores mayores que j, por lo que definido j (dentro del ciclo anterior) se
tendr:
k = j+1, j+2, j+3,,n

- Finalmente, definidos los tres nmeros distintos, se pueden imprimir las 6
combinaciones mencionadas previamente.

De esta manera se podrn mostrar las permutaciones.



Prcticas el curso de Programacin I Prctica 2
En la Facultad de Ciencias de la UNAM

Informacin adicional

- Para mas informacin sobre los temas de lgebra Superior desarrollados en
esta prctica, se puede consultar:

Crdenas, H. (1990) lgebra Superior 2da Edicin: Editorial Trillas

- Para mayor informacin sobre la clase Scanner, con la que puedes realizar
lectura del teclado, puedes consultar la siguiente documentacin:

http://docs.oracle.com/javase/1.5.0/docs/api/java/util/Scanner.html

También podría gustarte