viernes, 14 de julio de 2017

NUMERO CAPICUA EN HASKELL

Elaborar una funcion que determine si un numero entero es capicua. Es capicua si un numero se puede leer de igual manera de izquiera a derecha y vicebersa.
Ejemplo: 2332


CODIGO HASKELL:
numCapicua num|num<10 = "Da un numero valido"
                              |num==read (reverse (show num)) = "Es capicua"
                              |otherwise ="No es capicua"



miércoles, 9 de noviembre de 2016

FARENHEIT-CELCIUS 

JAVA VS HASKELL VS JAVASCRIPT

========================
Codigo JAVA:

package grados.a.farenheint;
import javax.swing.JOptionPane;
// * @author Junior
public class GradosAFarenheint {
public static void main(String[] args) {

double valor1, valor2, convers1, convers2;
int op=Integer.parseInt(JOptionPane.showInputDialog(null,"Escribe Un Valor De Temperatura\n1.- Grados Celcius a Farenheint\n2.- Grados Farenheit a Celsius","CONVIRTIENDO TEMPERATURA",JOptionPane.INFORMATION_MESSAGE));
   
switch (op)
{
       
case 1:
       valor1=Integer.parseInt(JOptionPane.showInputDialog(null,"Inseta Un Dato En Grados Celcius"));
       convers1=valor1*1.8+32;
       JOptionPane.showMessageDialog(null,"Grados Farenheit:\n"+convers1,"CONVIRTIENDO TEMPERATURA",JOptionPane.INFORMATION_MESSAGE);
       break;
          
case 2:
       valor2=Integer.parseInt(JOptionPane.showInputDialog(null,"Inseta Un Dato"));
       convers2=valor2-32/1.8;
       JOptionPane.showMessageDialog(null,"Grados Celcius:\n"+convers2,"CONVIRTIENDO TEMPERATURA",JOptionPane.INFORMATION_MESSAGE);
       break;
}}}






========================
Codigo HASKELL:

conversionaFarenheit celcius = 9/5*celcius+32
conversionaCelcius farenheit =farenheit-32/1.8 



========================


Codigo JAVASCRIPT:

function temperaturaCelcius(){
farenheit=prompt("Dame la temperatura en grados farenheit");
aCelcius=farenheit-32/1.8;
alert("Tu temperatura en grados Celcius es:\n"+aCelcius);
}

function temperaturaFarenheit(){
celcius=prompt("Dame la temperatura en grados Celcius");
aFarenheit=9/5*celcius+32;
alert("Tu temperatura en grados Farenheit es:\n"+aFarenheit);
}













lunes, 7 de noviembre de 2016

SUMA DE DOS NÚMEROS SIN SUMARLOS 

JAVA VS HASKELL


Resolver el siguiente algoritmo lógico.
Supongamos que tenemos n1 (que es el primer numero dado) y n2(segundo numero dado) y tenemos que sumarlos pero sin hacer la operación principal de suma con el operador "+" ¿De que manera lo resolverías?
Es claro, al hacer :
-Primer caso: 5 + 2 = 7
-Segundo caso: -5 + 2 = -3
-Tercer caso: 5 + -2 = 3
-Cuarto caso: -5 + -2 = -7

Tenemos que tener en cuenta primordial mente la inserción de los signos de n1 y n2 pues no sabemos si se insertara un -5 o un 5 ya que esto se tiene que evaluar a la hora de implementar en la solución.
A continuación se presenta el código de solución al algoritmo en JAVA.

---------------------------------------------------------------------------------
package sumasinsumar;
import javax.swing.JOptionPane;
//@author Junior
public class SumaSinSumar {
public static void main(String []args){
float n1=0, n2=0, r=0;{
n1=Float.parseFloat(JOptionPane.showInputDialog("Dame n1"));
n2=Float.parseFloat(JOptionPane.showInputDialog("Dame n2"));
/*Se evalúa el primer caso si los dos números son positivos*/
if(n1>0 && n2>0){
/*Se aplica la operación:*/
r=(-n1-n2)*-1;
}/*Se evalúa el segundo caso si el primer numero es negativo y el segundo es positivo*/
else if(n1<0 && n2>0){
r=(n1)-(-(n2));
}/*Se evalúa el tercer caso si el primer numero es positivo y el segundo es negativo*/
else if(n1>0 && n2<0){
r=((-(n1))-(n2))*-1;
}/*Se evalúa el ultimo y cuarto caso si los dos números son negativos*/else if(n1<0 && n2<0)
r=n1-(n2*-1);
}        
System.out.println("El resultado de tu suma sin sumar es:\n"+r);
}}

---------------------------------------------------------------------------------



--------------------------------------------------------------------------------
Ahora comparamos el código de solución al algoritmo resuelto en Haskell.
Nos damos cuenta que al declarar la función "sumasinsumar" utilizamos guardas " | " las cuales nos permitirán evaluar los cuatro casos de solución ya mencionados anteriormente:  

sumasinsumar n1 n2|(n1>0 && n2>0)=(-n1-n2)*(-1)
                                 |(n1<0 && n2>0)=(n1)-(-(n2))
                                 |(n1>0 && n2<0)=((-(n1))-(n2))*(-1)
                                 |(n1<0 && n2<0)=n1-(n2*(-1))

---------------------------------------------------------------------------------
---------------------------------------------------------------------------------

COMPARACIÓN JAVA VS HASKELL

1.- Reducción. Como podemos apreciar como primera comparación es el tamaño del código, en Java son aproximadamente 19 lineas de código mientras que en Haskell solo son 4.

2.- Tipo de dato. En Java nosotros declaramos el tipo de dato y al parecer eso tiene una ventaja pues tenemos mayor control sobre las variables declaradas, pero que pasaría si se declara como entero y al introducir un dato se introduce como punto flotante, pues aquí abría un error que que abortaría el programa, a diferencia que es Haskell nosotros no declaramos el tipo de dato y quizás tenemos menos controlo sobre lo que tenemos de entrada y de salida pero por la inferencia que tiene la función al ser implementada esta se ejecuta y toma el tipo de dato que infiere.

3.- Complejidad. Si Haskell solo son 4 lineas de código pero es obvio que tiene mayor complejidad ya que la manera de resolver el algoritmo es mediante una función la cual nos permita resolver pero es de mayor complejidad a la hora de ser implementada pues lo hace de manera implícita a comparación de Java ya que al hacerlo de manera explicita podemos darnos cuenta paso a paso y con menos dificultad lo que vamos haciendo y los IDE nos ayudan a encontrar errores de sintaxis con mayor facilidad a comparacion de Haskell.




jueves, 13 de octubre de 2016

CREANDO BASE DE DATOS CON MYSQL 5.7 DESDE LINEA DE COMANDOS       PART. 1


1. Abrimos la linea de comando de mySQL y accedemos con nuestra password preconfigurada


2.  Una vez dentro nos da la bienvenida la consola de mySQL


3. Para ver las bases datos que tenemos escribimos el comando:
    show databases; 

Se muestran las bases de datos almacenadas

4. Ahora ocuparemos la base de datos "sakila" para trabajar y crearemos una nueva base de datos dentro de ella, con el siguiente comando: 
 use sakila; 

5. Ahora creamos una base de datos de prueba la cual llamaremos "escuela":
    create database escuela;



6. Para verificar que la base de datos halla sido creada correctamente: show databases; 
Y verificamos que se encuentre dentro de las bases de datos ya creadas.

7. Ahora usaremos nuestra base de datos creada:
use escuela;




8. Nos damos cuenta que dentro de nuestra base de datos "escuela" no se encuentra ninguna tabla:
show tables;


9. Crearemos una nueva tabla llamada "alumno"  con los siguientes campos:
  • id_alumno int(10)(Como llave primaria)
  • nombre varchar(20)
  • apellidos varchar(60)
  • edad int(3)
  • sexo varchar(1)
  • domicilio varchar(255)
  • instituto varchar(80)
El Query seria el siguiente:
create table alumno(id_alumno int(10), nombre varchar(20), 

apellidos varchar(60), edad int(3),sexo varchar(1),
domicilio varchar(255),instituto varchar(80));



10. Verificamos que la tabla halla sido creada correctamente:
 show tables;

La tabla "alumno" ahora esta creada dentro de la base de datos "escuela".



11. Como se indico anteriormente el campo "id_alumno" es llave primaria de la tabla "alumno" pero no se ha especificado y para eso alteraremos la tabla:

Alter table alumno Add Primary Key(id_alumno);
Accion      Nombre   Agregar Llave     Campo

Ahora si el campo "id_alumno" es llave primaria de la tabla "alumno".


12. Insertamos una tabla con el nombre de "asistencia" con los siguientes campos:
  • id_asistencia int(10) (Como Llave primaria)
  • asistencia int(1)
  • inasistencia int(1)
  • total int(10)
El Query seria el siguiente y nos damos cuenta que desde la creacion de los campos, el campo "id_asistencia" es asignada como llave primaria:

create table asistencia(id_asistencia int(10)Primary Key, asistencia int(1), inasistencia int(1),total int(10));



13. Verificamos que la nueva tabla "asistencia" halla sido creada correctamente:
show tables;


14. A la tabla "asistencia" se le asigno como llave primaria "id_asistencia" con la cual debemos enlazar y hacer referencia a la tabla "alumno", pero ya que no existe el campo en la tabla "alumno" la modificaremos agregandole ese campo:

Alter table alumno add id_asistencia int(10);

Hay que recordar que el nombre, tipo de dato y tamaño debe coincidir con el campo de la tabla perteneciente, en este caso la tabla "asistencia". 



15. Ahora que se creo el campo "id_asistencia" en la tabla "alumno" es importante crear el enlace como llave foránea haciendo referencia a la tabla "asistencia":


Alter table alumno add foreign key (id_asistencia) references asistencia(id_asistencia);



En esta 1ra parte se ha mostrado:
  • Crear una base de datos.
  • Visualizar bases de datos.
  • Hacer uso de una base de datos especifica.
  • Crear tablas.
  • Visualizar tablas.
  • Modificar tablas agregando campos.
  • Crear Llave primaria.
  • Crear Llave foránea y referenciarla.

NOTA: En las siguiente entrada se mostrara como insertar datos a estas tablas ya creadas.

martes, 4 de octubre de 2016

POTENCIA DE UNA LISTA CON HASKELL


==FUNCIÓN POR LISTAS POR COMPRENSIÓN==

potencia l p=[num^p|num<-l]

domingo, 2 de octubre de 2016

FACTORIAL DE UN NÚMERO CON HASKELL

--FUNCIÓN EXPLICITA--

fact1 n= if n==0 then 1 else n * fact1 (n-1)

--FUNCIÓN CON LISTAS--
fact2 n= product [1..n]