Buscar este blog

jueves, 6 de junio de 2013

TIPOS DE LICENCIAS.

TIPOS DE LICENCIAS DE SOFTWARE:
La licencia de software es un contrato, en donde se especifican todas las normas y cláusulas  en las que se estipulan los alcances de uso, instalación, reproducción y copia de estos productos.
Licencia de software de propietario.
El Software propietario es aquel cuya copia, redistribución o modificación están, en alguna medida, prohibidos por su propietario. Para usar, copiar o redistribuir, se debe solicitar permiso al propietario o pagar.
 Licencia de software de dominio público.
El Software con dominio público es software sin copyright. Algunos tipos de copia o versiones modificadas pueden no ser libres si el autor impone restricciones adicionales en la redistribución del original o de trabajos derivados.
 Licencia de software de semi libre.
Aquél que no es libre, pero viene con autorización de usar, copiar, Distribuir y modificar para particulares sin fines de lucro.
Licencia de software libre.
Proporciona la libertad de:
   - Ejecutar el programa, para cualquier propósito;
   - Estudiar el funcionamiento del programa, y adaptarlo a sus necesidades;
   - Redistribuir copias;
   - Mejorar el programa, y poner sus mejoras a disposición del público, para beneficio de toda la                                  comunidad.
Licencia de software de libre no protegido con copyleft.
El software libre no protegido con copyleft viene desde el autor con autorización para redistribuir y modificar así como para añadirle restricciones adicionales. Si un programa es libre pero no protegido con copyleft, entonces algunas copias o versiones modificadas pueden no ser libres completamente. Una compañía de software puede compilar el programa, con o sin modificaciones, y distribuir el archivo ejecutable como un producto privativo de software. El Sistema X Windows ilustra esto. El Consorcio X libera X11 con términos de distribución que lo hacen software libre no protegido con copyleft.
Licencia de software de Copyleft.
El software protegido con copyleft es software libre cuyos términos de distribución no permiten a los redistribuidores agregar ninguna restricción adicional cuando éstos redistribuyen o modifican el software. Esto significa que cada copia del software, aun si ha sido modificado, debe ser software libre. Copyleft es un concepto general; para proteger actualmente un programa con copyleft, necesita usar un conjunto específico de términos de distribución. Hay muchas maneras posibles de escribir términos copyleft de distribución.

Licencia de software de GPL.
La Licencia Pública General Reducida de GNU, o GNU LGPL para abreviar. Es una licencia de software libre, pero no tiene un copyleft fuerte, porque permite que el software se enlace con módulos no libres. Sólo la recomendamos para circunstancias especiales.
Entre la versión 2 y la 2.1, la GNU LGPL cambió su nombre de "Licencia Pública
General para Bibliotecas de GNU" a "Licencia Pública General Reducida de GNU", pues no es sólo para bibliotecas

Licencia de software de Debian.
La licencia Debian es parte del contrato realizado entre Debian y la comunidad de usuarios de software libre, y se denomina Debian Free Software Guidelines (DFSG). En esencia, esta licencia contiene criterios para la distribución que incluyen, además de la exigencia de publicación del código fuente:
   a) la redistribución libre;
   b) el código fuente debe ser incluido y debe poder ser redistribuido; 
   c) todo trabajo derivado debe poder ser redistribuido bajo la misma licencia del original;
   d) puede haber restricciones en cuanto a la redistribución del código fuente, si el original fue modificado;
   e) la licencia no puede discriminar a ninguna persona o grupo de personas, así como tampoco ninguna forma de utilización del software;
   f) los derechos otorgados no dependen del sitio en el que el software se encuentra;
   g) la licencia no puede 'contaminar' a otro software.
Licencia de software de BSD.
La licencia BSD cubre las distribuciones de software de Berkeley Software Distribution, además de otros programas. Ésta es una licencia considerada 'permisiva', ya que impone pocas restricciones sobre la forma de uso, alteraciones y redistribución del software. El software puede ser vendido y no hay obligaciones de incluir el código fuente. Esta licencia garantiza el crédito a los autores del software pero no intenta garantizar que las modificaciones futuras permanezcan siendo software libre.
 Licencia de software de MPL y derivadas.
Este tipo de licencias de Software libre son muy parecidas a las BSD, pero son menos permisivas, aunque sin llegar a los extremos de las licencias GNU GPL, en las que como hemos visto, si utilizas código GPL el desarrollo final tiene que estar licenciado GPL.
 Licencia de software con copyleft.
El termino Copyleft se puede interpretar como Copia permitida, en contraposición a Copyright, o Copia reservada (derechos de autor).
En el tema que nos ocupa, se refiere a la autorización por parte del propietario de la licencia para su copia, modificación y posterior distribución, contrariamente a lo que ocurre con el software licenciado bajo los términos de los derechos de autor.

Ahora bien, hay que aclarar que el propietario de la licencia bajo términos de Copyleft puede desarrollar una versión de dicho software bajo licencia sujeta a Copyright y vender o ceder este software bajo cualquiera de estas licencias, pero sin afectar a las licencias Copyleft ya otorgadas.
El propietario de estas licencias puede retirar la autorización de uso de una licencia Copyleft si lo cree oportuno, pero en ese caso está obligado a indemnizar a los poseedores de las licencias en uso de este tipo.
Licencia de software de Freeware.
Se trata de un tipo de licencia en el que se autoriza el uso del software de forma libre y gratuita, aunque esta sesión pueda ser bajo determinadas condiciones, como por ejemplo que el software incluya algún tipo de publicidad o limitación referente al tipo de usuario al que va destinada. Un ejemplo de esto sería que se autoriza su uso a particulares, pero no a empresas o a organismos oficiales.
Este tipo de licencia suele incluir una cláusula en la que se especifica la prohibición de la venta de dicho software por parte de terceros.
El software distribuido bajo este tipo de licencia puede ser software libre, pero no tiene por qué serlo.
Licencia de software de Postcardware.
Es un tipo de licencia muy similar al Freeware, sólo que suele pedirse el envío de una postal como confirmación de su utilización, aunque la utilización del programa no suele estar supeditada al envío de esta.
Licencia de software de Donationware.
Al igual que las licencias Postcardware, la licencia Donationware se puede considerar como una variante de la licencia Freeware.
En este tipo de licencia se le pide al usuario el envío de un donativo para sufragar el desarrollo del programa, si bien no se supedita ni el uso de este ni sus opciones al envío de dicho donativo.
 Licencia de software de Shareware.
Es un tipo de distribución en el que se autoriza el uso de un programa para que el usuario lo evalúe y posteriormente lo compre. El software con licencia Shareware tiene unas limitaciones que pueden ser de varios tipos. O bien una limitación en el tiempo de utilización o bien una limitación en el funcionamiento de sus funciones y opciones, pero suele tratarse de software operativo. Los programas que exigen registrarse para poder utilizarse plenamente se consideran Shareware, aunque esta licencia no implique un pago en metálico.
Licencia de software de Demo.
Más que de un tipo de licencia, en este caso se trata de la sesión de un programa para su evaluación, pero con unas fuertes limitaciones en su desempeño. Un claro ejemplo de esto es un programa que nos permite ver qué se puede hacer con él, pero que no permite llevar estas acciones a su término o bien juegos que no permiten guardar las partidas o bien programas de gestión que no permiten guardar los datos al cerrarse.
Licencia de software de Abandonware.
Se trata de software, normalmente con bastante antigüedad, sobre el que sus creadores han liberado el copyright o los derechos de autor. El software afectado por este tipo de licencia suele estar descatalogado y no disponible en tiendas ni otros canales de distribución y venta. Este tipo de licencia se aplica sobre todo a juegos, y si bien tuvo bastante éxito a finales de los 90 y principios de 2000, cada vez tiene menos incidencia. Hay que dejar bien claro que para que un programa o juego se considere Abandonware es imprescindible que el propietario de los derechos haya cedido estos para la distribución gratuita de los mismos y que el mero hecho de que ya no se fabrique o que carezca de soporte técnico o no se distribuya no implica que se pueda considerar como Abandonware. Existen webs especializadas en este tipo de software, que hay que aclarar que NO se trata de software pirata, ya que cuentan con la autorización de los propietarios de dichas licencias para distribuir estos programas.
Bien, hemos visto los diversos tipos de licencia de software que podemos encontrar. A este respecto hay que matizar un punto muy importante. Cuando adquirimos un programa, sea bajo el tipo de licencia que sea, lo que adquirimos es una licencia de uso, nunca el programa en sí, estando en todo momento sujetos a las normas y límites que dicha licencia indique.
Licencia de software de X.org.
El Consorcio X distribuye X Windows System bajo una licencia que lo hace software libre, aunque sin adherirse al copyleft. Existen distribuciones bajo la licencia de la X.org que son software libre, y otras distribuciones que no lo son. Existen algunas versiones no-libres del sistema de ventanas X11 para estaciones de trabajo y ciertos dispositivos de IBM-PC que son las únicas funciones disponibles, sin otros similares que sean distribuidos como software libre.
 Licencia de software de fuentes abiertas / o código abierto.
 Según la filosofía de la Open Source Initiative, y en el que la licencia cumple los siguientes criterios:
1. Libre distribución.
2. Distribución del código fuente.
3. La licencia debe permitir la modificación del código fuente, los desarrollos derivados y su redistribución en las mismas condiciones que el software original.
4. Integridad del código fuente del autor. La licencia puede imponer que los desarrollos derivados se redistribuyan con un nombre diferente o con un número de versión diferente de aquél del software original.
5. La licencia no debe ser discriminatoria de persona alguna o grupos de personas.
6. La licencia no debe restringir la utilización del software a campos de dominio o actividad.
7. Los derechos otorgados al programa deben ser aplicables a todos aquellos a quienes el software es redistribuido sin imponer condiciones (licencias) complementarias.
8. Los derechos otorgados a un programa no deben depender del hecho de que forme parte de una distribución de software específica. Si el software se extrae de una distribución y se distribuye en el marco de las condiciones que establece la licencia de distribución, todo aquellos a quienes se les redistribuye el software deben gozar de los mismos derechos y condiciones otorgados a la distribución original.
9. La licencia no debe imponer restricciones en otro software que se distribuya junto con la distribución licenciada. Por ejemplo, la licencia no debe insistir en que todos los programas distribuidos en un mismo soporte sean software de fuentes abiertas.

Licencia de software de código abierto permisivas:
Se puede crear una obra derivada sin que ésta tenga obligación de protección alguna. Muchas licencias pertenecen a esta clase, entre otras:
  - Academic Free License v.1.2.
 
- Apache Software License v.1.1.
  - Artistic License v.2.0
   - Attribution Assurance license.
   - BSD License.
   - MIT License.
   - University of Illinois/NCSA Open Source License.
   - W3C Software Notice and License.
   - Zope Public License v.2.0
   - Open LDAP License v.2.7
   - Perl License.
   - Academic Free License v.3.0
   - Python License v.2.1
   - PHP License v.3.0
   - Q Public License v.1.0
 Licencia de software de código abierto robustas.
Estas licencias aplican algunas restricciones a las obras derivadas, haciendo que según el grado de aplicación se puedan dividir a su vez en dos subcategorias:
            Licencias de software de código abierto robustas fuertes:
Las licencias de software de código abierto robustas fuertes o con copyleft fuerte, contienen una cláusula que obliga a que las obras derivadas o modificaciones que se realicen al software original se deban licenciar bajo los mismos términos y condiciones de la licencia original.
Entre las licencias de esta categoría están:
- Common Public License v.1.0.
- GNU General Public License v.2.0.
- GNU General Public License v.3.0.
- Eclipse Public License.
- eCos License v.2.0
- Sleepycat Software Product License.
- Affero License v.1.0
- Affero License v.2.0
- OpenSSL License.
Licencias de software de código abierto robustas débiles:
Las licencias de software de código abierto robustas débiles, con copyleft débil/suave o híbridas, contienen una cláusula que obliga a que las modificaciones que se realicen al software original se deban licenciar bajo los mismos términos y condiciones de la licencia original, pero que las obras derivadas que se puedan realizar de él puedan ser licenciadas bajo otros términos y condiciones distintas.
Entre las licencias de esta categoría están:
-  GNU Lesser General Public License v.2.1.
- Mozilla Public License
- Open Source License.
- Apple Source License v.2.0
- CDDL.
- EUPL.
Licencia de software de código cerrado
Estas licencias también se conocen con el nombre de software propietario o privativo. En ellas los propietarios establecen los derechos de uso, distribución, redistribución, copia, modificación, cesión y en general cualquier otra consideración que se estime necesaria.
Este tipo de licencias, por lo general, no permiten que el software sea modificado, desensamblado, copiado o distribuido de formas no especificadas en la propia licencia (piratería de software), regula el número de copias que pueden ser instaladas e incluso los fines concretos para los cuales puede ser utilizado. La mayoría de estas licencias limitan fuertemente la responsabilidad derivada de fallos en el programa.
Los fabricantes de programas sometidos a este tipo de licencias por lo general ofrecen servicios de soporte técnico y actualizaciones durante el tiempo de vida del producto.
Algunos ejemplos de este tipo de licencias son las llamadas CLUFs: Contrato de Licencia para Usuario Final o EULAs: End User License Agreement, por sus siglas en Inglés.
Licencia de software de privativo.
El software privativo es software que no es libre ni semilibre. Su uso, redistribución o modificación está prohibida, o requiere que usted solicite autorización o está tan restringida que no pueda hacerla libre de un modo efectivo.

Licencia de software de Comercial.
El software comercial es software que está siendo desarrollado por una entidad que tiene la intención de hacer dinero del uso del software. Comercial y privativo ¡no son la misma cosa! La mayoría del software comercial es privativo , pero hay software libre comercial y hay software no libre no comercial.
 Licencia de software de OEM.
Se trata de un tipo de licencia que supedita su venta a que esta debe ser como parte de un equipo nuevo, estando prohibido venderlos si no es bajo esta condición. Aunque afecta más que nada a sistemas operativos, también puede afectar a otro tipo de software.
Aunque el software comprado bajo este tipo de licencia implica la propiedad del mismo por parte del que la compra los fabricantes pueden poner ciertas limitaciones a su uso, como el número máximo de veces que se puede reinstalar.
Se trata de software plenamente operativo y exactamente igual a las versiones Retail del mismo, aunque en el caso de que se ofrezca algún extra en la versión Retail en concepto de Bonus pack los fabricantes no están obligados a ofrecerlo también en las versiones OEM.
Los programas adquiridos bajo este tipo de licencia NO se pueden vender ni ceder a terceros, salvo en las mismas condiciones en las que se compraron (es decir, como parte de un equipo).
 Licencia de software de Retail.
Son las versiones de venta de software. En este caso el programa es de la entera propiedad del usuario, pudiendo este cederlo libremente a terceros o venderlo.
 Licencia de software de volumen.

Es un tipo de licencia de software destinado grandes usuarios (empresas), normalmente bajo unas condiciones similares a las de las licencias OEM, aunque sin estar supeditadas a equipos nuevos. Básicamente se trata de estipular un determinado número de equipos que pueden utilizar el mismo código de licencia, quedando el fabricante de dicho software autorizado para hacer las comprobaciones que considere oportunas para ver que las licencias que se están utilizando son las adquiridas. Normalmente estas licencias se venden en paquetes de x número de licencias, por ejemplo en paquetes de 25 licencias como mínimo. Este tipo de licencia NO se puede ceder a terceros ni total ni parcialmente.

EXAMEN SISTEMAS INFORMATICOS

1.-Enumera los componentes de un sistema de comunicaciones y de una red de datos. Haz una breve descripción de cada uno de ellos.
Nodos: reciben y procesan la información. Cada nodo es un dispositivo electrónico que es capaz de recibir la señal del medio de transmisión empleado.
Enlaces: que conectan estos nodos permitiendo el envío y la recepción de dicha información.
Protocolo de comunicación: conjunto de acuerdos y reglas que se establecen para que los nodos puedan comunicarse.
2.- ¿Qué son y cuáles son las principales diferencias entre un modelo OSI y una arquitectura TCP/IP?
El modelo OSI se fundamenta en los conceptos de servicios, interfaces y protocolos, mientras que en TCP/IP se obvian.
El modelo OSI oculta mejor los protocolos presentando una mayor modularidad e independencia.
El modelo OSI se desarrolló con anterioridad al desarrollo de sus protocolos,  mientras que en el caso de TCP/IP primero se implementaron los protocolos y posteriormente surgió el modelo, que no era más que una descripción de estos.
La cantidad de capas definidas es diferente en ambos modelos.
En el nivel transporte de TCP/IP se permiten comunicaciones orientadas a la conexión y no orientadas a la conexión, mientras que en OSI solo se permiten comunicaciones orientas a la conexión en este nivel.
En el nivel de red de TCP/IP solo se permiten comunicaciones no orientadas a la conexión, mientras que en este nivel del modelo OSI se permiten ambos tipos.
3.- En relación a la capa física: responde Verdadero o Falso.
a) Un medio guiado es aquel que necesita un cable de cobre para poder transferir la información de un punto a otro.
b) Los conectores RJ45 y RJ11 son conectore de par trenzado que sirven para conexiones de red y conexiones telefónicas.
4.-Qué elementos que identificas, a que nivel del modelo OSI trabajan, qué son y dónde se encuentran los números del tipo 00-00-1B-AA-AA-AA.









5.- Tienes un ordenador en una red con la siguiente IP: 123.57.20.13. Te piden en la empresa en la que trabajas que subdividas dicha red para poder tener subredes con, como mucho 700 nodos que tengan una IP pública.
a) ¿A qué clase pertenece la red inicial y qué máscara tiene?
b) ¿Cuál es la máscara de red de las subredes que has creado?
c) ¿Cuántas subredes puedes tener?
d) ¿Cuántos nodos cabrían en todo el conjunto de las subredes que has creado?
e) Pon un ejemplo de una dirección IP de uno de los nodos de una de las subredes.

6.- Tienes un ordenador en una red con la siguiente IP: 197.57.120.113. Te piden en la empresa en la que trabajas que necesitan crear 120 subredes.
a) ¿A qué clase pertenece la red inicial y qué máscara tiene?
b) ¿Cuál es la máscara de red de las subredes que has creado?
c) ¿Cuántos nodos puedes tener en cada una de las subredes que tengan una IP pública?
7.-Comenta, en el nivel de transporte de TCP/IP, los protocolos utilizados y las funciones que tiene cada uno de ellos, recuerda comentar la función de los puertos.

El nivel de transporte de la pila de protocolos de TCP/IP se encuentra entre el nivel de aplicación y el de internet. Se encarga de la transferencia de datos extremo a extremo, ocultando los detalles de la red o redes subyacentes. Puede incluir mecanismos de seguridad TCP.
Los protocolos utilizados en el nivel de transporte de la pila TCP/IP son el TCP y el UDP siendo el primero mucho mas utilizado. En transmisión, el nivel de transporte toma los datos que recibe del nivel de aplicación, los divide en trozos llamados paquetes, y se los pasa al nivel de Internet.
En recepción TCP ordena los paquetes que recibe del nivel de Internet, comprueba la integridad de dichos paquetes, los pasa a nivel de aplicación y envía al emisor un acuse de recibo que le confirma que el paquete llegó correctamente a su destino. En caso de no llegar o que lleguen datos incorrectos el emisor volvería a enviar los paquetes perdidos.
Sin embargo, UDP ni ordena los paquetes ni confirma u correcta recepción. Este es el mtivo por el que TCP se considera un protocolo fiable mientras que UDP no, aunque si sea más rápido. De hecho, UDP se suele utilizar cuando los datos transmitidos no son importantes, por ejemplo con peticiones de DNS. Con UDP la aplicación es responsable de comprobar si los datos han llegado a su destino de forma correcta y de ordenarlos. Tanto TCP como UDP toman los datos que les pasa el nivel de aplicación y les añade una cabecera.
La capa de red transfiere paquetes entre dos ordenadores a través de la red utilizando como identificadores las direcciones IP. La capa de transporte añade la noción de puerto para distinguir entre los muchos destinos dentro de una máquina. No es suficiente con indicar la dirección IP de destino, además hay que especificar qué aplicación recogerá el mensaje. Cada aplicación que esté esperando utiliza un puerto distinto; la aplicación está a la espera de un mensaje en un puerto determinado. Los puertos también se utilizan para el envío.

8.- Clasifica los siguientes protocolos por su uso:
correo:
POP-IMAP-SMTP
establecer la equivalencia entre IP y nombre de dominio:
DNS
transferencia de ficheros:
HTTP- FTP
permite ejecute comandos de manera remota:
SSH
¿De los que has clasificado en el grupo de transferencia de ficheros, que diferencia hay entre ellos?
HTTP es el protocolo mas utilizado de internet, su misión es transferir páginas WEB entre un navegador y un servidor web localizado mediante una dirección URL.
FTP es un protocolo y una aplicación que permiten la transferencia de ficheros entre un cliente y su servidor FTP. FTP realiza todo el intercambio de información en texto plano sin ningún tipo de cifrado con lo que la seguridad se convierte en un problema, pues un posible atacante podría capturar este tráfico, acceder al servidor o apropiarse de los archivos transferidos.

IF (SQL) Y CASE (SQL)

EJERCICIOS IF:
1- Inserta algunos registros:
insert into vehiculos (matricula,tipo,horallegada,horasalida)  values('ACD123','auto','8:30','9:40');
insert into vehiculos (matricula,tipo,horallegada,horasalida)  values('AKL098','auto','8:45','15:10');
insert into vehiculos (matricula,tipo,horallegada,horasalida)  values('HGF123','auto','9:30','18:40');
insert into vehiculos (matricula,tipo,horallegada,horasalida)  values('DRT123','auto','15:30',null);
insert into vehiculos (matricula,tipo,horallegada,horasalida)  values('FRT545','moto','19:45',null);
insert into vehiculos (matricula,tipo,horallegada,horasalida)  values('GTY154','auto','20:30','21:00');

2- Muestra la matricula, la hora de llegada y de salida de todos los vehículos, más una columna que calcule la cantidad de horas que estuvo cada vehículo en la playa, sin considerar los que aún no se fueron de la playa:


SELECT `matricula`,`horallegada`,`horasalida`,left(timediff(horasalida,horallegada),5) as horasminutos FROM `vehiculos`

3- Se cobra 1 euro por hora. Pero si un vehículo permanece en la playa 4 horas, se le cobran 3 euros, es decir, no se le cobra la cuarta hora; si está 8 horas, se cobran 6 euros, y así sucesivamente. Muestra la matricula, la hora de llegada y de salida de todos los vehículos, más la columna que calcule la cantidad de horas que estuvo cada vehículo en la playa (sin considerar los que aún no se fueron de la playa) y otra columna utilizando "if" que muestre la cantidad de horas gratis:

 select matricula,horallegada,horasalida,
  left(timediff(horasalida,horallegada),5) as horasminutos,
  if (hour(timediff(horasalida,horallegada))>4,
  hour(timediff(horasalida,horallegada)) div 4,0) as horagratis
  from vehiculos
  where horasalida is not null;

EJERCICIOS CASE:
select editorial, case count (*) where when 1 then 1 else 'mas de 1' end as 'cantidad' from libros group by editorial;
select ecitorial, case count (*) when 1 then 1 end as 'cantidad' from libros group by editorial;
select editorial, case count (*) when 1 then 1 when > 1 then 'mas de 1' end as 'cantidad' from libros group by editorial;
select editorial, case when count (*)=1 then 1 else 'mas de uno'end as cantidad from libros group by editorial;
select expediente, promedio, case when promedio<4 then 'suspendido' when promedio>4 and promedio and promedio<7 then 'bien' else 'notable' end as 'notas' from promedio;

Ejercicios, PASO A 1FN, 2FN y 3FN (BASES DE DATOS)

 Ejercicios: Pasar a 3FN los esquemas relacionales:

1.                  A (a0, b0, c1, c2) siendo c2 à c1

.            C (c1, c2)
                A (a0, b0, c1)
                Cajena: {c1} → C

2.                  ALUMNO (num_exp, curso, localidad, provincia) siendo provincia à localidad

             Provincia (localidad, provincia)
                Alumno (num_exp, curso, localidad)
                Cajena: {Localidad} → Provincia

3.                  NOTA (cod_asig, num_exp, nom_asig, nom_alumno, dir_alumno, nota) siendo à nom_alumno, dir_alumno à num_exp y siendo nom_asig à cod_asig

            FN2:
                Nota (cod_asig, num_exp, nota)
                Cajena: {cod_asig} → Asignatura
                Cajena: {num_exp} → Alumno
                Alumno (num_exp, nom_alumno, dir_alumno)
                Asignatura (cod_asig, nom_asig)

4.                  A (a0, a1, a2, {a3}, a4, a5) siendo a2 à a1 y siendo a5àa4


             FN1
                A'(a0, a1,a3)
                Cajena: {a0, a1} → A
                A (a0, a1, a4, a5)

                FN2
                A (a0, a1, a4, a5)
                Cajena: {a1} → A2
                A2 (a1, a2)
               
                FN3
                A' (a4, a5)
                A (a0, a1, a4)
                Cajena: {a4} → A'

5.                  A (a0, {a1}, a2) siendo a2 à a0

             FN1
                A' (a0, a1)
                Cajena: {a0} → A'
                A (a0, a2)
               

                FN2

                A(a0,a2)

Realiza el proceso de normalización de las siguientes relaciones y para cada uno de los enunciados, crea un excel con tablas de datos de ejemplo.

Enunciado 1.
FCT (num_expedientecod_empresa, nom_alumno, nom_empresa, fecha_inicio, fecha_fin)

FCT (num_expediente, cod_empresa, fecha_inicio, fecha_fin)
Cajena: {num_expediente} → ALUMNO
Cajena: {cod_empresa} → EMPRESA
ALUMNO (num_expediente, nom_alumno)
EMPRESA (cod_empresa, nom_empresa)

Enunciado 2.
CAMPAMENTO (cod_niñocod_monitor, {fecha_inicio}, num_dias, nom_niño, nom_monitor, edad_niño, titulo_monitor)

FN1
CAMPAMENTO' (cod_niño, cod_monitor, fecha_inicio)
Cajena: {cod_niño, cod_monitor} → Campamento.
CAMPAMENTO(cod_niño, cod_monitor, num_dias, nom_niño, nom_monitor, edad_niño, titulo_monitor)
 FN2:
CAMPAMENTO(cod_niño, cod_monitor, num_dias)
Cajena: {cod_niño}  → Niño
Cajena: {cod_monitor} → Monitor
NIÑO (cod_niño, nom_niño, edad_niño)
MONITOR (cod_monitor, nom_monitor, titulo_monitor)

Enunciado 3.
ESCRIBIR_LIBRO (isbndni, num_pag, {tipo_edición}, nom_autor, especialidad_autor, editorial)

ESCRIBIR_LIBRO (isbn, dni, num_pag, {tipo_edición}, nom_autor, especialidad_autor, editorial)
FN1
ESCRIBIR_LIBRO' (isbn, dni, tipo, edicion)
Cajena: {isbn, dni} → ESCRIBIR_LIBRO
ESCRIBIR_LIBRO (isbn, dni, num_pag, nom_autor, especialidad_autor, editorial)
 FN2:
ESCRIBIR_LIBRO(isbn, dni)
Cajena: {isbn} → Libro
Cajena: {dni} → Autor
LIBRO (isbn, num_pag, editorial)AUTOR(dni, nom_autor, especialidad_autor)
VUELO (num_vuelo, dni, cod_avion, nom_piloto, num_asientos, {aux_vuelo}, hora_salida) 

Enunciado 4.
VUELO (num_vuelodnicod_avion, nom_piloto, num_asientos, {aux_vuelo}, hora_salida)

FN1
VUELO' (num_vuelo, dni, cod_avion, aux_vuelo)
Cajena: {num_vuelo, dni, cod_avion} → VUELO
VUELO (num_vuelo, dni, cod_avion, nom_piloto, num_asientos, hora_salida)
FN2
VUELO (num_vuelo, dni, cod_avion)
VIAJE(num_vuelo, hora_salida)
AVION(cod_avion, num_asientos)
PILOTO (dni, nom_piloto)

SUMAR TRES DIMENSIONES, MIL PERSONAS,LIST SET, TRON, MISTERMIND PROGRAMADO EN JAVA.

EJERCICIO PARA SUMAR UNA MATRIZ DE TRES DIMENSIONES:
package ejercicio130517;
public class matriz3d {
public static void main(String[] args) {
int i, j, k;
int matriz[][][] = new int [3] [3] [3];
for(i = 0; i < matriz.length; i++);{
for(j = 0; j < matriz[i].length; j++);{
for(k = 0; k < matriz[i][j].length; k++);{
matriz[i][j][k] = i;
System.out.println(i);
}}} }}
EJERCICIO PARA CONTABILIZAR "MIL PERSONAS"
package ejercicio130521;
public class milpersonas {
public static void main(String[] args) {
int m = 10;
for (int i=0; i<m; i++){
for (int j=0; j<m; j++){
for (int k=0; k<m; k++){
System.out.println("PERSONA "+i+", FAMILIA DE PERSONA "+j+",AMIGO DE FAMILIA DE PERSONA " +k);
}}}}}
EJERCICIO LIST SET
package ejercicio130522;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Set;


public class ListSet {

  public static void main(String[] args) {

    //LIST Y SET
      
      ArrayList<String> yes = new ArrayList();
      List<String> yeso = new ArrayList<String>();
      yeso.add("Placido Domingo");
      yeso.add("Cesaria Evora");
      yeso.add("Runa Yacu");
      yeso.add("Placido Domingo");

      // RECORRER MEDIANTE UN FOR
      for (String e:yeso)
        System.out.println(e);
      
      // USO DEL ITERADOR
      Iterator p = yeso.iterator();
      while(p.hasNext()){
        System.out.println(p.next());
      }
     System.out.println();
      Set<String> yeset = new HashSet<String>();
      yeset.add("Placido Domingo");
      yeset.add("Cesaria Evora");
      yeset.add("Runa Yacu");
      yeset.add("Placido Domingo");
      for(String e:yeset)
        System.out.println(e);
}}

TRON DE 2 SERPIENTES EN JAVA CON SALTOS ALEATORIOS
package ejercicio130528;

import java.awt.Image;
import java.util.ArrayList;
public class Animation {
private ArrayList scenes;
private int sceneIndex;
private long movieTime;
private long totalTime;
public Animation(){
scenes = new ArrayList();
totalTime = 0;
start();
}
public synchronized void addScene(Image i, long t){
totalTime += t;
scenes.add(new oneScene(i,totalTime));
}
public synchronized void start(){
movieTime = 0;
sceneIndex = 0;
}
public synchronized void update(long timePassed){
if(scenes.size()>1){
movieTime += timePassed;
if(movieTime>=totalTime){
movieTime = 0;
sceneIndex = 0;
}
while(movieTime > getScene(sceneIndex).endTime){
sceneIndex++;
}
}
}
public synchronized Image getImage(){
if(scenes.size()==0)
{
return null;
}else{
return getScene(sceneIndex).pic;
}
}
private oneScene getScene(int x){
return (oneScene)scenes.get(x);
}
private class oneScene{
Image pic;
long endTime;
public oneScene(Image pic,long endTime){
this.pic = pic;
this.endTime = endTime;
}}}
package ejercicio130528;
import java.awt.*;
import java.awt.image.BufferedImage;

public abstract class Core {

private static final DisplayMode modes[] = 
{
//new DisplayMode(1920,1080,32,0),
new DisplayMode(1680,1050,32,0),
//new DisplayMode(1280,1024,32,0),
new DisplayMode(800,600,32,0),
new DisplayMode(800,600,24,0),
new DisplayMode(800,600,16,0),
new DisplayMode(640,480,32,0),
new DisplayMode(640,480,24,0),
new DisplayMode(640,480,16,0),
};
private boolean running;
protected ScreenManager sm;
public void stop(){
running = false;
}
public void run(){
try{
init();
gameLoop();
}finally{
sm.restoreScreen();
}
}
public void init(){
sm = new ScreenManager();
DisplayMode dm = sm.findFirstCompatibaleMode(modes);
sm.setFullScreen(dm);
Window w = sm.getFullScreenWindow();
w.setFont(new Font("Arial",Font.PLAIN,20));
w.setBackground(Color.WHITE);
w.setForeground(Color.RED);
w.setCursor(w.getToolkit().createCustomCursor(new BufferedImage(3, 3, BufferedImage.TYPE_INT_ARGB), new Point(0, 0),"null")); 
running = true;
}
public void gameLoop(){
long startTime = System.currentTimeMillis();
long cumTime = startTime;
while (running){
long timePassed = System.currentTimeMillis()-cumTime;
cumTime+= timePassed;
update(timePassed);
Graphics2D g = sm.getGraphics();
draw(g);
g.dispose();
sm.update();
try{
Thread.sleep(20);
}catch(Exception ex){}
}
}
public void update(long timePassed){}
public abstract void draw(Graphics2D g);
}
package ejercicio130528;
import java.awt.*;
import java.awt.image.BufferStrategy;
import java.awt.image.BufferedImage;

import javax.swing.JFrame;

public class ScreenManager {
private GraphicsDevice vc;
public ScreenManager(){
GraphicsEnvironment e = GraphicsEnvironment.getLocalGraphicsEnvironment();
vc = e.getDefaultScreenDevice();
}
public DisplayMode[] getCompatibleDisplayModes(){
return vc.getDisplayModes();
}
public DisplayMode findFirstCompatibaleMode(DisplayMode[] modes){
DisplayMode goodModes[] = vc.getDisplayModes();
for(int x = 0; x<modes.length;x++){
for(int y = 0;y<goodModes.length;y++){
if(displayModesMatch(modes[x],goodModes[y])){
return modes[x];
}
}
}
return null;
}
public DisplayMode getCurrentDM(){
return vc.getDisplayMode();
}
public boolean displayModesMatch(DisplayMode m1, DisplayMode m2){
if(m1.getWidth() != m2.getWidth() || m1.getHeight() != m2.getHeight()){
return false;
}
if(m1.getBitDepth() != DisplayMode.BIT_DEPTH_MULTI && m2.getBitDepth() != DisplayMode.BIT_DEPTH_MULTI && m1.getBitDepth() != m2.getBitDepth()){
return false;
}
if(m1.getRefreshRate() != DisplayMode.REFRESH_RATE_UNKNOWN && m2.getRefreshRate() != DisplayMode.REFRESH_RATE_UNKNOWN && m1.getRefreshRate() != m2.getRefreshRate()){
return false;
}
return true;
}
public void setFullScreen(DisplayMode dm){
JFrame f = new JFrame();
f.setUndecorated(true);
f.setIgnoreRepaint(true);
f.setResizable(false);
vc.setFullScreenWindow(f);
if(dm != null && vc.isDisplayChangeSupported()){
try{
vc.setDisplayMode(dm);
}catch(Exception ex){}
f.createBufferStrategy(2);
}
}
public Graphics2D getGraphics(){
Window w = vc.getFullScreenWindow();
if(w != null){
BufferStrategy bs = w.getBufferStrategy();
return (Graphics2D)bs.getDrawGraphics();
}
else{
return null;
}
}
public void update(){
Window w = vc.getFullScreenWindow();
if(w != null){
BufferStrategy bs = w.getBufferStrategy();
if(!bs.contentsLost()){
bs.show();
}}}
public Window getFullScreenWindow(){
return vc.getFullScreenWindow();}
public int getWidth(){
Window w = vc.getFullScreenWindow();
if(w != null){
return w.getWidth();
}else{
return 0;
}
}
public int getHeight(){
Window w = vc.getFullScreenWindow();
if(w != null){
return w.getHeight();
}else{
return 0;
}}
public void restoreScreen(){
Window w = vc.getFullScreenWindow();
if(w != null){
w.dispose();
}
vc.setFullScreenWindow(null);
}
public BufferedImage createCompatibaleimage(int w, int h, int t){
Window win = vc.getFullScreenWindow();
if(win != null){
GraphicsConfiguration gc = win.getGraphicsConfiguration();
return gc.createCompatibleImage(w,h,t);
}else{
return null;
}}}
package ejercicio130528;
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.Stroke;
import java.awt.Window;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.util.ArrayList;

public class yourclass extends Core implements KeyListener, MouseListener,
MouseMotionListener {
int centrex1 = 40;
int centrey1 = 40;
int centrex2 = 600;
int centrey2 = 440;
int currentDirection1 = 1; 
int currentDirection2 = 3;
int moveAmount = 1; //velocidad de las serpientes
ArrayList<Integer> pathx1 = new ArrayList();
ArrayList<Integer> pathy1 = new ArrayList();
ArrayList<Integer> pathx2 = new ArrayList();
ArrayList<Integer> pathy2 = new ArrayList();

public void init() {
super.init();

Window w = sm.getFullScreenWindow();
w.addKeyListener(this);
w.addMouseListener(this);
w.addMouseMotionListener(this);
}

public static void main(String[] args) {
new yourclass().run();
}

public void draw(Graphics2D g) {
switch(currentDirection1){
case 0:
if (centrey1>0){
centrey1-=moveAmount;
} else {
centrey1 = sm.getHeight();
}
break;
case 1:
if (centrex1 < sm.getWidth()){
centrex1+=moveAmount;
} else {
centrex1 = 0;
}
break;
case 2:
if (centrey1 < sm.getHeight()){
centrey1+=moveAmount;
} else {
centrey1 = 0;
}
break;
case 3:
if (centrex1>0){
centrex1-=moveAmount;
} else {
centrex1 = sm.getWidth();
}
break;
}
switch(currentDirection2){
case 0:
if (centrey2>0){
centrey2-=moveAmount;
} else {
centrey2 = sm.getHeight();
}
break;
case 1:
if (centrex2 < sm.getWidth()){
centrex2+=moveAmount;
} else {
centrex2 = 0;
}
break;
case 2:
if (centrey2 < sm.getHeight()){
centrey2+=moveAmount;
} else {
centrey2 = 0;
}
break;
case 3:
if (centrex2>0){
centrex2-=moveAmount;
} else {
centrex2 = sm.getWidth();
}
break;
}
   for (int x = 0;x<pathx1.size();x++){
    if (((centrex1 == pathx1.get(x)) && (centrey1 == pathy1.get(x))) || ((centrex2 == pathx2.get(x)) && (centrey2 == pathy2.get(x))) || ((centrex1 == pathx2.get(x)) && (centrey1 == pathy2.get(x))) || ((centrex2 == pathx1.get(x)) && (centrey2 == pathy1.get(x)))){
    System.exit(0);
    }
   }//colisiones
pathx1.add(centrex1);
pathy1.add(centrey1);
pathx2.add(centrex2);
pathy2.add(centrey2);
g.setColor(Color.BLACK);
g.fillRect(0, 0, sm.getWidth(), sm.getHeight());
for (int x = 0;x<pathx1.size();x++){
int mh= (int)(Math.random()*6 + 1) ;
if (mh%2==0){
}
else {
g.setColor(Color.green);
g.fillRect(pathx1.get(x), pathy1.get(x), 1, 1);
g.setColor(Color.red);
g.fillRect(pathx2.get(x), pathy2.get(x), 1, 1);
}
}
}

public void keyPressed(KeyEvent e) {
if (e.getKeyCode() == KeyEvent.VK_UP) {
if (currentDirection1 != 2){
currentDirection1 = 0;
}
} else if (e.getKeyCode() == KeyEvent.VK_DOWN) {
if (currentDirection1 != 0){
currentDirection1 = 2;
}
} else if (e.getKeyCode() == KeyEvent.VK_RIGHT) {
if (currentDirection1 != 3){
currentDirection1 = 1;
}
} else if (e.getKeyCode() == KeyEvent.VK_LEFT) {
if (currentDirection1 != 1){
currentDirection1 = 3;
}
}
if (e.getKeyCode() == KeyEvent.VK_W){
if (currentDirection2 != 2){
currentDirection2 = 0;
}
} else if (e.getKeyCode() == KeyEvent.VK_S) {
if (currentDirection2 != 0){
currentDirection2 = 2;
}
} else if (e.getKeyCode() == KeyEvent.VK_D) {
if (currentDirection2 != 3){
currentDirection2 = 1;
}
} else if (e.getKeyCode() == KeyEvent.VK_A) {
if (currentDirection2 != 1){
currentDirection2 = 3;
}}}
public void keyReleased(KeyEvent e) {
}
public void keyTyped(KeyEvent arg0) {
}
public void mouseClicked(MouseEvent e) {
}
public void mouseEntered(MouseEvent arg0) {
}
public void mouseExited(MouseEvent arg0) {
}
public void mousePressed(MouseEvent e) {
}
public void mouseReleased(MouseEvent e) {
}
public void mouseDragged(MouseEvent e) {
}
public void mouseMoved(MouseEvent e) {

}
}

MISTERMIND DE 5 FICHAS (COLORES O NUMEROS) EN JAVA
package ejercicio130604;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class MM {
static String f = "";

public static void main(String[] args) {
int s = 0;
String n = "";
String diff = "";
boolean ans = false;
int[] d = new int[5]; //habia un 4
int[] pos = new int[5]; //habia un 4
pos[0] = (int) (Math.random() * 100);
pos[1] = (int) (Math.random() * 100);
pos[2] = (int) (Math.random() * 100);
pos[3] = (int) (Math.random() * 100);
pos[4] = (int) (Math.random() * 100); //esta línea no estaba
f = readLine("Welcome to MasterMind by Greg Cawthorne!\nIn this game you attempt to crack a code with only the aid of minor hints and you own ingenuity!\nPress enter to begin! ");
f = readLine("Would you like to play with letters (1) or numbers (2)? ");
do {
if (f.equals("letters") || f.equals("1")) {
diff = "letters";
ans = true;
System.out
.println("The code will be made up 5 letters of either R,G,B,Y,P,T "); //habia 4 letters
} else if (f.equals("numbers") || f.equals("2")) {
diff = "numbers";
ans = true;
System.out
.println("The code will be made up of 5 numbers of either 1,2,3,4,5,6 ");   //habia 4 numbers
} else {
f = readLine("Sorry, I didn't quite get that. Would you like to play with letters (1) or numbers (2)? ");
}
} while (ans == false);
for (int x = 0; x <= 4; x++) { //había x<=3
if (pos[x] <= 17) {
d[x] = 1;
} else if (pos[x] <= 34) {
d[x] = 2;
} else if (pos[x] <= 51) {
d[x] = 3;
} else if (pos[x] <= 68) {
d[x] = 4;
} else if (pos[x] <= 85) {
d[x] = 5;
} else if (pos[x] <= 100) {
d[x] = 6;
}}
if (diff.equals("numbers")) {
n = "numbers either 1,2,3,4,5 or 6";
} else if (diff.equals("letters")) {
n = "letters either R,B,G,Y,P or T all caps";
}

System.out.println("The computer has thought of his sequence.");
if(diff == "letters"){
check(d, n, s);
} else if (diff == "numbers"){
check2(n, d, s);
}
}

public static void check(int[] d, String n, int s) {
int count2= 0;
String r = "R";
String b = "B";
String g = "G";
String y = "Y";
String p = "P";
String tq = "T";
String f = "";
boolean z = false;
int v = 0;
f = readLine("Take a guess! ");
if ((f.length() == 5) //había if ((f.length() == 4)
&& (f.charAt(0) == r.charAt(0) || f.charAt(0) == b.charAt(0)
|| f.charAt(0) == g.charAt(0)
|| f.charAt(0) == y.charAt(0)
|| f.charAt(0) == p.charAt(0) || f.charAt(0) == tq
.charAt(0))
&& (f.charAt(1) == r.charAt(0) || f.charAt(1) == b.charAt(0)
|| f.charAt(1) == g.charAt(0)
|| f.charAt(1) == y.charAt(0)
|| f.charAt(1) == p.charAt(0) || f.charAt(1) == tq
.charAt(0))
&& (f.charAt(2) == r.charAt(0) || f.charAt(2) == b.charAt(0)
|| f.charAt(2) == g.charAt(0)
|| f.charAt(2) == y.charAt(0)
|| f.charAt(2) == tq.charAt(0) || f.charAt(2) == p
.charAt(0))
&& (f.charAt(3) == r.charAt(0) || f.charAt(3) == b.charAt(0)
|| f.charAt(3) == g.charAt(0)
|| f.charAt(3) == y.charAt(0)
|| f.charAt(3) == tq.charAt(0) || f.charAt(3) == p.charAt(0))
//estas cuatro lineas de abajo no estaban
&& (f.charAt(4) == r.charAt(0) || f.charAt(4) == b.charAt(0)
|| f.charAt(4) == g.charAt(0)
|| f.charAt(4) == y.charAt(0)
|| f.charAt(4) == tq.charAt(0) || f.charAt(4) == p.charAt(0))
) {
z = true;
System.out.println();
s++;
int chin[] = new int[6];
int chin2[] = new int[6];
char bin[] = new char[6];
bin[0] = 'R'; bin[1] = 'B'; bin[2] = 'G'; bin[3] = 'Y'; bin[4] = 'P'; bin[5] = 'T';
char a[] = new char[5]; //había char a[] = new char[4];
int t[] = new int[5]; //había int t[] = new int[4];
for (int x = 0;x<5;x++){ //había for (int x = 0;x<4;x++){
a[x] = (f.charAt(x));
}
for (int eye = 0; eye< 5;eye++){ //había for (int eye = 0; eye< 4;eye++){
for (int tim = 0; tim<6;tim++){
if (a[eye] == bin[tim]){
t[eye] = tim +1;
}}
}for (int x = 0;x<5;x++){ //había }for (int x = 0;x<4;x++){
if (t[x] == 1){
chin[0] = chin[0]+1;
} else if (t[x] == 2){
chin[1] = chin[1]+1;
} else if (t[x] == 3){
chin[2] = chin[2]+1;
} else if (t[x] == 4){
chin[3] = chin[3]+1;
} else if (t[x] == 5){
chin[4] = chin[4]+1;
} else if (t[x] == 6){
chin[5] = chin[5]+1;
}
if (d[x] == 1){
chin2[0] = chin2[0]+1;
} else if (d[x] == 2){
chin2[1] = chin2[1]+1;
} else if (d[x] == 3){
chin2[2] = chin2[2]+1;
} else if (d[x] == 4){
chin2[3] = chin2[3]+1;
} else if (d[x] == 5){
chin2[4] = chin2[4]+1;
} else if (d[x] == 6){
chin2[5] = chin2[5]+1;
}
}
for (int x = 0; x <= 4; x++) { //había for (int x = 0; x <= 3; x++) {
if (d[x] == t[x]) {
v++;
}
}
for (int x = 0;x<6;x++){
if (chin[x] <= chin2[x]){
count2 = count2 + chin[x];
} else {
count2 = count2 + chin2[x]; }
} count2 = count2 - v;
}
if (z == false) {
System.out.println("Invalid guess. Please guess four " + n
+ " with no spaces. :)");
} else { 
System.out.println("You guessed: " + f);
System.out.println("There are "+v+" letters in the right place,\nand "+count2+" other letters which are right, but in the wrong place.");
}
if (v == 4) {
System.out.print("Well done you cracked the code in " + s
+ " attempts!\n");
do{ f = readLine("Do you want to play again? ");
if (f.equals("yes") || f.equals("y") || f.equals("YES")){
main(null);
} else if (f.equals("no") || f.equals("n") || f.equals("NO")){
System.out.println("I hope you enjoyed MasterMind by Greg Cawthorne!");
System.exit(0);
} else {
System.out.print("Sorry I didn't quite get that. ");
z = false;
}} while (z == false);
} check(d, n, s);
}

public static void check2(String n, int[] d, int s){
int count2 = 0;
boolean z = false;
int v = 0;
String one = "1";
String two = "2";
String three = "3";
String four = "4";
String five = "5";
String six = "6";
f = readLine("Take a guess! ");
//había if((f.length() == 4) && (f.charAt(0) == one.charAt(0) || f.charAt(0) == two.charAt(0) || f.charAt(0) == three.charAt(0)

if((f.length() == 5) && (f.charAt(0) == one.charAt(0) || f.charAt(0) == two.charAt(0) || f.charAt(0) == three.charAt(0)
|| f.charAt(0) == four.charAt(0) || f.charAt(0) == five.charAt(0) || f.charAt(0) == six.charAt(0))
&& (f.charAt(1) == one.charAt(0) || f.charAt(1) == two.charAt(0)
|| f.charAt(1) == three.charAt(0)
|| f.charAt(1) == four.charAt(0)
|| f.charAt(1) == five.charAt(0) || f.charAt(1) == six.charAt(0))
&& (f.charAt(2) == one.charAt(0) || f.charAt(2) == two.charAt(0)
|| f.charAt(2) == three.charAt(0)
|| f.charAt(2) == four.charAt(0)
|| f.charAt(2) == five.charAt(0) || f.charAt(2) == six.charAt(0))
&& (f.charAt(3) == one.charAt(0) || f.charAt(3) == two.charAt(0)
|| f.charAt(3) == three.charAt(0)
|| f.charAt(3) == four.charAt(0)
|| f.charAt(3) == five.charAt(0) || f.charAt(3) == six.charAt(0))
//estas cuatro lineas de abajo no estaban
&& (f.charAt(4) == one.charAt(0) || f.charAt(4) == two.charAt(0)
|| f.charAt(4) == three.charAt(0)
|| f.charAt(4) == four.charAt(0)
|| f.charAt(4) == five.charAt(0) || f.charAt(4) == six.charAt(0))
){
z = true;
System.out.println();
s++;
int chin[] = new int[6];
int chin2[] = new int[6];
String a[] = new String[5]; //había String a[] = new String[4];
int t[] = new int[5]; //había int t[] = new int[4];
for (int x = 0;x<=4;x++){ //había for (int x = 0;x<=3;x++){
a[x] = String.valueOf(f.charAt(x));
t[x] = Integer.parseInt(a[x]);
if (t[x] == 1){
chin[0] = chin[0]+1;
} else if (t[x] == 2){
chin[1] = chin[1]+1;
} else if (t[x] == 3){
chin[2] = chin[2]+1;
} else if (t[x] == 4){
chin[3] = chin[3]+1;
} else if (t[x] == 5){
chin[4] = chin[4]+1;
} else if (t[x] == 6){
chin[5] = chin[5]+1;
}
if (d[x] == 1){
chin2[0] = chin2[0]+1;
} else if (d[x] == 2){
chin2[1] = chin2[1]+1;
} else if (d[x] == 3){
chin2[2] = chin2[2]+1;
} else if (d[x] == 4){
chin2[3] = chin2[3]+1;
} else if (d[x] == 5){
chin2[4] = chin2[4]+1;
} else if (d[x] == 6){
chin2[5] = chin2[5]+1;
}
}
System.out.println("You guessed: " + f);
for (int x = 0; x <= 4; x++) { // había for (int x = 0; x <= 3; x++) {
if (d[x] == t[x]) {
v++;
}
}
for (int x = 0;x<6;x++){
if (chin[x] <= chin2[x]){
count2 = count2 + chin[x];
} else {
count2 = count2 + chin2[x]; }
} count2 = count2 - v;
}
if (z == false) {
System.out.println("Invalid guess. Please guess five " + n
+ " with no spaces. :)");
} else { 
System.out.println("There are "+v+" numbers in the right place,\nand "+count2+" other numbers which are right, but in the wrong place.");
}
if (v == 5) { //había if (v == 4) {
System.out.print("Well done you cracked the code in " + s
+ " attempts!\n");
do{ f = readLine("Do you want to play again? ");
if (f.equals("yes") || f.equals("y") || f.equals("YES")){
main(null);
} else if (f.equals("no") || f.equals("n") || f.equals("NO")){
System.out.println("I hope you enjoyed MasterMind by Greg Cawthorne!");
System.exit(0);
} else {
System.out.print("Sorry I didn't quite get that. ");
z = false;
}} while (z == false);
} check2(n, d, s);
}
public static String readLine(String prompt) {
String input = "";
System.out.print(prompt);
InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(isr);
try {

input = br.readLine();

} catch (IOException ioe) {
}
return input;
}
}