Mostrando entradas con la etiqueta programacion. Mostrar todas las entradas
Mostrando entradas con la etiqueta programacion. Mostrar todas las entradas

viernes, 9 de diciembre de 2011

Trabajo Laboratorio Nº2

  • Autor: Patricio Bello Villalobos
  • Competencia: Trabajo en equipo.

  • Descripción de la actividad: Analice y desarrolle un Programa que permita intercalar los dígitos de dos números enteros. Por ejemplo si se tiene 123 y 171 el número resultante debería ser: 112731.

  • Solución: 
Entrada:
Números enteros positivos.
Salida:
Número entero positivo.


-Obtener dos números enteros positivos vía Scanner PrimerNumero y SegundoNumero.
-Realizar una división por 10 a dichos números hasta reducirlos a 0, obteniendo numero de dígitos que este contiene:

While (PrimerNumero>0)                                                      While (SegundoNumero>0)
PrimerNumero/10;                                                                 SegundoNumero/10;
NumeroPri++;                                                                          NumeroSeg++;




-Obtener Dígitos de ambos números, mediante el modulo 10 de estos, e ir ubicándolos en la posición numérica correspondiente (Unidad, Decena, Centena, Unidad de mil…etc.)

M1=M1*100;                                                                M2=M2*100;

While (NumeroDigitos=Veces)                                   While (NumeroDigitos >Veces)

Digito=PrimerNumero%10;                                        Digito=SegundoNumero%10;
M1=1;                                                                             M2=10;                                                                 
Final=Final+(Digito*M1);                                            Final=Final+(Digito*M2);
PrimerNumero=PrimerNumero/10;                        SegundoNumero=SegundoNumero/10;
Veces++;                                                                         Veces++;      
Final=Final+(Digito*M1);                                            Final=Final+(Digito*M2);

Con esto obtenemos el Número entrelazado, y luego solo basta con imprimirlo en pantalla

Imprimir ("El numero Final es = "+Final);


CODIGO:

* @author Patricio Bello Villalobos - Daniela Muñoz Muñoz
 * Ejercicio Número 4
 */
import java.util.*;

public class Intercalar {

    public static void main (String[]args)

 {
     int primernumero;
     int segundonumero;
     int CantidadPrimerNumero=0;
     int CantidadSegundoNumero=0;
     int Final=0;

     System.out.println("Ingrese el primer numero a intercalar");
     Scanner L= new Scanner(System.in);
     primernumero=L.nextInt();

     System.out.println("Ingrese el segundo numero a intercalar");
     segundonumero=L.nextInt();

     int x=primernumero;
     int y=segundonumero;

      while(x>0)
     {
     CantidadPrimerNumero++;
      x=x/10;
     }
    
     while(y>0)
     {
     CantidadSegundoNumero++;
     y=y/10;
     }

     int Veces=0;
     int x1;
     int y1;
     int M1=1;
     int M2=10;

     while(Veces<=CantidadPrimerNumero || Veces<=CantidadPrimerNumero)
     {
     x1=primernumero%10;
     y1=segundonumero%10;
    
     Final=Final+(y1*M1);
     Final=Final+(x1*M2);

     primernumero=primernumero/10;
     segundonumero=segundonumero/10;
    
     M1=M1*100;
     M2=M2*100;
    
     Veces++;
     }

     System.out.println("El numero Final es = "+Final);
     }
}

  • Reflexión: Gracias a este trabajo, pudimos realizar un correcto trabajo en equipo, mediante una planificación previa que nos ayudo a realizarlo rápida y efectivamente, las tareas fueron divididas entre los dos integrantes respectivamente, y realizadas en los horarios dispuestos por cada uno, ademas de trabajar en forma conjunta para la finalizacion de este-

Ajuste de Curva (Regresión Lineal MySQL)

  • Autor: Patricio Ignacio Bello Villalobos
  • Competencia: Trabajo en equipo.
  • Palabras clave: 
-SELECT: Utilizado para realizar consultas a una base de datos.
La sintaxis SQL para SELECT es
SELECT "nombre_columna" FROM "nombre_tabla"

-ALTER TABLE: Utilizado para realizar cambios luego de haber creado una tabla.
La sintaxis SQL para ALTER TABLE es
ALTER TABLE "nombre_tabla"
[modificar especificación]

-UPDATE: Utilizado para realizar cambios en la información de la tabla.
La sintaxis SQL para UPDATE es
UPDATE "nombre_tabla"
SET "columna_1" = [nuevo valor]
WHERE {condición}




-Ya que hemos comenzado trabajando con números, la siguiente pregunta natural a realizarse es si es posible hace cálculos matemáticos con aquellos números, tales como sumas, o sacar unpromedio. ¡La respuestaes sí! SQL tiene varias funciones aritméticas, y estas son:
La sintaxis para el uso de funciones es,
SELECT "tipo de función"("nombre_columna") 
FROM "nombre_tabla"




Descripción de la actividad:                                                                     


   En este informe trataremos de llevar un experimento mas allá de eso, trabajando con formulas matemáticas que nos puedan aportar datos concretos, además usando lo aprendido con My SQL.
Para introducir  el tema, empezaremos definiendo:


-Trayectoria rectilínea de objetos móviles: una trayectoria rectilínea, como la palabra lo dice, es cuando el recorrido que posee un móvil es ejercido en línea recta.
Todo comienza con la grabación de un video de una pelota recorriendo un espacio, gracias al programa Tracker pusimos obtener los puntos X e Y del recorrido de dicha pelota, con estos puntos debemos obtener a, b y , aquí es donde entra en juego las bases de datos, ya que todos los cálculos debemos ejecutarlos mediando MySQL, con el diseño de una tabla y sus posteriores consultas.
  • Solución: 

Para comenzar este trabajo tuvimos que grabar un video, de una pelota recorriendo un espacio determinado:
Luego de grabar el video, debimos usar el programa tracker:
Gracias al programa tracker obtuvimos 133 puntos X e Y, estos los ingresaremos en una tabla en MySQL por medio de la siguiente sintaxis:

Create Table datos (x double, y double);
insert into datos (x,y) values ( 1.7 , 1.2);
insert into datos (x,y) values ( 3.051 , 2.315);
insert into datos (x,y) values ( 4.339 , 3.462);
….y asi con todos los puntos que obtuvimos del tracker.

Obtuvimos la siguiente tabla:
Una vez que tenemos los puntos en nuestra tabla debemos calcular los coeficientes a y b mediante el método de los mínimos cuadrados.
Las formulas para calcular a, es las siguiente:
A= sumatoria (x1- promX)(y1-promY)
      --------------------------------------------
           sumatoria (x1-promX)^2


Para realizar esto en MySQL primero debemos descomponer la ecuación en partes:

promX: esto lo guardaremos en la columna promedioX
Creamos la columna: ALTER TABLE datos ADD promedioX double;
Y agregamos los datos: UPDATE datos SET promedioX=AVG(x);

promY :esto lo guardaremos en la columna promedioY
Creamos la columna: ALTER TABLE datos ADD promedioY double;
Y agregamos los datos: UPDATE datos SET promedioY=AVG(y);

(x1- promX): esto lo guardaremos en la columna XmenosPromX
Creamos la columna: ALTER TABLE datos ADD XmenosPromX double;
Y agregamos los datos: UPDATE datos SET XmenosPromX =x- promedioX;

(y1-promY): esto lo guardaremos en la columna YmenosPromY
Creamos la columna: ALTER TABLE datos ADD YmenosPromY double;
Y agregamos los datos: UPDATE datos SET YmenosPromY =y- promedioY;

(x1- promX)(y1-promY): esto lo guardaremos en la columna XmenosPromXporYmenosPromY
Creamos la columna: ALTER TABLE datos ADD XmenPromXporYmenPromY double;
Y agregamos los datos: UPDATE datos SET XmenPromXporYmenPromY = XmenosPromX* XmenosPromX;

Luego tendremos nuestra tabla así:



Ya tenemos todos los valores necesarios para calcular A.
Para esto usaremos la siguiente sintaxis que remplaza la formula:
SELECT ((SELECT SUM(XmenPromXporYmenPromY) FROM datos) / (SELECT SUM(XmenosPromX* XmenosPromX) FROM DATOS)) AS resultado_a FROM datos;
Así obtenemos el valor de a=0.3782 y lo guardamos en una columna:
Creamos la columna: ALTER TABLE datos ADD Valor_a double;
Y agregamos los datos: UPDATE datos SET Valor_a=0.3782;

Con esto ya podemos calcular b:

b = promY -a* promX
Creamos la columna: ALTER TABLE datos ADD Valor_B double;
Y agregamos los datos: UPDATE datos SET Valor_B=promedioY-Valor_a*promedioX;

Y obtenemos la siguiente tabla:  B=1,8829
Ya podemos calcular el valor de   :

R =  sumatoria(x1 - promX)(y1- promY)
        ----------------------------------
       sumatoria (x-promX)^2 sumatoria (y1-promY)^2

Calculamos por medio de la sintaxis:
SELECT (((SELECT SUM(XmenPromXporYmenPromY) FROM datos) / (SELECT SUM(XmenosPromX* XmenosPromX) FROM DATOS)* (SELECT SUM(YmenosPromY* YmenosPromY) FROM DATOS))) AS resultado_Rcuadrado  FROM datos;


Creamos la columna: ALTER TABLE datos ADD Valor_Rcuadrado double;
Y agregamos los datos: UPDATE datos SET Valor_Rcuadrado=0,77134;

Y obtenemos la siguiente tabla:
Luego Realizamos el mismo procedimiento para tres rectas más:
Con los siguientes puntos:

(6.2 - 4.098) (4.24 - 2.76)         Recta numero1
Obteniendo:
(2.26 - 1.427) (4.04 -  2.62)      Recta numero2
Obteniendo:
(6.13 -  4.039) (6.053 -  3.986)  Recta numero3
Obteniendo:


Conclusiones con respecto a la calidad del ajuste para cada recta.

Los ajustes de las rectas de solo 2 puntos (Rectas numero1, 2 y 3) fueron muy diferentes entre sí, en el caso de la recta numero2 muy cercano al de la recta principal y en el caso de la recta numero3 muy alejada, obtuvimos el lado más cercano, el más lejano y el medio, esto nos confirma la importancia del número de puntos para un correcto ajuste.

Conclusiones generales de la experiencia.

En este trabajo, pusimos en práctica todo lo aprendido en el semestre, lo relacionado en matemáticas y también en My SQL  en lo que son el desarrollo de tablas y los comandos, también aprendimos a usar otros componentes que nos ayudaron a establecer los puntos a través de videos (tracker).
También pudimos evidenciar la importancia de cada dato en el cálculo de las formulas y de los múltiples usos de MySQL, jamás hubiéramos pensado que sería útil en ajustes de curvas, pero nos sorprendió, con lo versátil que es, de ahí su importancia en la informática de hoy en día.
  • Reflexión: 
   En esta actividad cumplimos la competencia de trabajo en equipo, ya que pudimos desarrollarla completamente en grupo, repartiendo tareas entre los integrantes de este. Ademas nos permitió realizar un plan previo para efectuar el trabajo,  teniendo en cuenta horarios, tareas, fechas, etc.








Finalmente puedo afirmar que un correcto trabajo en equipo es algo indispensable, mas aun a la hora de trabajar en proyectos extensos.

martes, 11 de octubre de 2011

Actividad 3: Robot Ninja


  • Autor: Patricio Bello Villalobos
  • Competencia : DESARROLLO DE SOFTWARE, Nivel: Desarrolla soluciones de software aplicando procesos de análisis, diseño y prueba a problemas simples; centrados en la programación, los datos y las Interfaces Humano/Computador (IHM).

  • Descripción de la actividad:
  • A continuación se detalla la tercera actividad de programación  de robot, en esta ocasión nuestro robot debió realizar complejas tareas utilizando la información obtenida por sus dos sensores incorporados, el sensor de tacto y el de luz, nuestro robot debía localizar cinco puntos distintos en una pared y colocar explosivos en cada uno de ellos avisando por medio de una alarma su detonación  y mostrar en la pantalla la cantidad restante de explosivos, a lo anteriormente mencionado también se le sumaba la dificultad de tener que esquivar círculos negros en el área de desplazamiento utilizando el sensor de luz, cada circulo simbolizaba un puesto de vigilancia del enemigo que el robot debía esquivar, luego de las 5 detonaciones, nuestro robot debía encontrar un puesto de vigilancia y quedarse en la posición para atraer la atención del enemigo.


  • Solución: Al realizar este tercer trabajo, nos vimos enfrentados a una serie de problemas que fueron los siguientes:
    Lo primero que se nos presento fue que teníamos que colocar el sensor de luz, pero el problema era que no había espacio suficiente enfrente del robot producto que el sensor touch estaba puesto, la  solución que le dimos al presente problema fue desarmar el robot para así darle una nueva configuración para que los sensores estuviesen puestos enfrente del robot.
    Y nuestro segundo y recurrente problema fue la programación del robot ya que se agregaron nuevos elementos, por lo cual tuvimos muchos problemas con ellos y la solución que le dimos fue leer el tutorial de NXC  que nos dio el profesor y de este modo nos quedó más claro y además de leer consultamos con nuestros compañeros quienes nos brindaron su ayuda.
    Y de este modo logramos darle una solución a cada uno de los problemas que se nos presentaron en el transcurso del desarrollo de nuestro trabajo y así logramos terminar nuestro trabajo de manera satisfactoria.
    Pseudocódigo:

    Avanzar
    Mostrar explosivos restantes en la pantalla
        Si choca con una pared debe
                Reproducir un sonido de alarma
                Mostrar la nueva cantidad de explosivos
                Retroceder medio segundo
                Esperar un segundo más
                Girar aleatoriamente a la derecha con un ángulo entre 90º y 270º
                Avanzar para detectar más puntos de la pared
         Si encuentra un punto negro debe
                Esquivar el punto utilizando alguna estrategia
    Y al detectar el 4º punto débil en la pared debe
                Alejarse de la última explosión por dos segundos
                Tocar una melodía
                Buscar un punto negro y quedarse ahí
                Detener todas las acciones y apagar el programa.

     Codigo:


    // Este programa hace que el robot ande en una base como infiltrado,
    // esquivando los puntos negros ( guardias) en la pista, en busca de detonar
    // las paredes, al detonar tiene un sonido (indica la detonación de la bomba
    // y un mensaje en la pantalla que indica la cantidad de bombas restantes,
    // al detonar las 5 bombas(con la ayuda del contador)que son las requeridas
    // ocurre un tono final de las explosiones y tiene que ir en busca del
    // punto negro (guardia) para llamar la atención  de él,  esto último
    // marca el final del programa.


    #define Color_Negro 40 // Rango de luz para considerar que es el negro
    int esquivar=400;   // Variable usada saltar los puntos negros
    int contador=0;                // indica el valor inicial del Contador
                   
    int bombas= 5;                 // Marca la cantidad de bombas a detonar

    task main()
    {
    SetSensorLight (IN_3);//Encender sensor de luz que hace desbliar la parte negra
    SetSensorTouch (IN_1);// Enceder sensor de tacto para detectar las paredes.
    OnFwd (OUT_AC,75); // Instruccion que valla hacia adelante
    while (contador < 5)
                    {
                    if(SENSOR_1 == 1)
                    {
                    esquivar = Random (1300) + 300 ; // Esto le da el valor cuando va a
                                                   // a darse vuelta al tocar una pared
                    OnRev (OUT_AC,75); // Retroceda por medio segundo
                    Wait (500);
                    Off (OUT_AC);// Apagar motores por 2 segundos.
                    Wait (2000);
                    PlayTone (3000, 800); // Tono que marca la detonación de una bomba.
                    Wait(1000);
                    bombas --;
                    NumOut (50,50, bombas); //  Es para colocar en la pantalla la cantidad
                                   // bombas restantes
                    Off (OUT_AC); // Apagar motor
                    Wait (1000);  // Espera de 1 segundo.
                    OnFwd(OUT_AC,75);
                    OnRev(OUT_A,75);  // Estas 2 instrucciones indica que se de una media
                                   // vuelta para retomar camino.
                    Wait (esquivar);
                    OnFwd (OUT_AC,75); // Esta indica que valla hacia adelante
                    contador ++;
                    }
                    if (Sensor (IN_3) < Color_Negro)             // Sensor de luz
                    {
                    OnRev (OUT_AC, 75); // Al encontrar un  punto negro va hacia atras
                    Wait (500);
                    OnFwd (OUT_AC, 75);//  Con la Segunda instruccion indica que se
                    OnRev (OUT_C, 75);//   doble un poco.
                   
                    Wait (esquivar);  //
                    OnFwd (OUT_AC, 75);// Hace que el robot valla hacia adelante
                    }
                    }
                    while (Sensor(IN_3) > Color_Negro)
                    {
                    if(SENSOR_1 == 1)
                    {
                    esquivar = Random (1300) + 500 ;  // Valor del giro RANDOM
                    OnRev (OUT_AC,75);  //  Retroce al chocar
                    Wait (500);
                    OnFwd (OUT_AC,75);// Con la segunda instruccion hace que se de
                    OnRev (OUT_A,75);// una vuelta en RANDOM en busca de otra pared.
                    Wait(esquivar);
                    }
                    Off(OUT_AC); // Apagar motor
                    PlayTone (2000,5000); // Sonido que marca el final de la actividad
                    Wait (2000); // Duracion del tono
                    StopAllTasks (); // Marca el final de todas las instrucciones.

                    }

      }

    Video:


  • Reflexión: En esta actividad, pude realizar realizar la creación de un programa que realiza todas las funciones del robot en cuestión, esto me permitió ampliar mis conocimientos enormemente en la materia, con los cuales pude desarrollar un análisis mas completo de los futuros problemas propuestos, dando soluciones efectivas y rápidas.