martes, 11 de octubre de 2011

Pitfinder

Autor: Rodrigo Bermedo
Competencia: Desarrollo de software (nivel 1)
Palabras claves:NXC, NXT, Lego, programacion
 
 
Descripcion de la actividad


Esta actividad fue la segunda desarrollada en el curso de proyecto de robotica de la carrera de Ingenieria Civil Informatica de la Universidad Catolica de Temuco. En esta actividad en especial el robot debia desplazarse por una superficie delimitada sin bordes, la funcion que debia cumplr el robot era determinar la altura que existia desde el piso hacia donde se encontraba el robot. esto debia repetirlo 4 veces y almacenar las alturas en un arreglo para luego traspasar ese arreglo a un archivo de texto que debia ser mostrado en la pantalla del robot NXT.


Pseudocodigo

Pseudocódigo:
Declara enteros medidas[4],tam=512,n=0,i=0,cont=0,num=0;
Declara bytes punteroAtchivo, bytesEscritos;
Declara string numeros,linea="--->",cadena,read,mas="Pit";
#define height 20

sub MedirAltura()
{
    medidas[n]=Altura del Precipicio;
    Muestras en Pantalla la altura en cm;
    n++;
}

sub CrearArchivo()
{
    Crea Archivo "Texto.txt";
    Guarda en el archivo "REPORTE PITFINDER";
    Guarda en el archivo "_________________";
    Por(cont=0; mientras cont < Largo de medidas; cont++)
    {  
        num++;
        Transforma numeros a String y lo guarda en num;
        Transforma cadena en String y lo guardo en medidas[cont];
        cadena=mas+numeros+linea+cadena;
        Guarda en el Archivo el string cadena;
    }
    Cierra el Archivo;
}

task Programa()
{
    Mientras(i<4)
    {
        Avanza a Potencia 50;
        Si(El sensor es mayor a height)
        {
            i++;
            Inicio mutex;
            Avanza 0.1 seg a potencia 50;
            Se detiene por 1 seg;
            MedirAltura();
            Retrocede por 1 seg a potencia 50;
            Gira a potencia 50 entre 1.2 y 1.6 seg;
            Fin mutex;
        }
    }
    declara entero num1=50;
    declara booleano eof = false;
    Apaga los motores;
    CrearArchivo();
    Limpia la pantalla;
    Abre y lee el archivo Texto.txt;
    mientras(no llegue al final del archivo)
    {
        if(La lectura del archivo no tiene error)
            eof=true;
        Muestra eb pantalla el archivo por 5 seg;
      
    }
    Cierra el Archivo;
}

task main()
{
    Setea Sensor de UltraSonido(IN_1);
    Inicia Multitareas(Programa);
}



Codigo fuente

int medidas[4];
int tam=512;
int n=0;
int i=0;
int cont=0;
int num=0;
byte punteroArchivo;
byte bytesEscritos;
mutex multi1;
string numeros;
string linea=" ---->";
string cadena;
string read;
string mas="Pit";

#define height 20



sub MedirAltura()
{
 medidas[n]=SensorUS(IN_1);
 NumOut(0,10*n,medidas[n]);
 n++;
}
sub CrearArchivo()
{
     CreateFile("Texto.txt", tam, punteroArchivo);
     WriteLnString(punteroArchivo, "REPORTE PITFINDER", bytesEscritos);
     WriteLnString(punteroArchivo, "__________________", bytesEscritos);
     for(cont=0; cont < ArrayLen(medidas); cont++)
     {
      num++;
      numeros= NumToStr(num);
      cadena = NumToStr(medidas[cont]);
      cadena =  mas + numeros + linea + cadena;
      WriteLnString(punteroArchivo, cadena, bytesEscritos);
     }
  CloseFile(punteroArchivo);
}

task Programa()
{
 while (i<4)
 {
  OnFwd(OUT_AC,50);

  if (SensorUS(IN_1)>height)
  {
   i++;
   Acquire(multi1);
   OnFwd(OUT_AC,50);
   Wait(100);
   Off(OUT_AC);
   Wait(1000);
   MedirAltura();
   OnRev(OUT_AC,50);
   Wait(1000);
   OnFwd(OUT_C,50);
   OnRev(OUT_A,50);
   Wait(Random(1200)+400);
   Release(multi1);
  }
 }
 int num1=50;
 bool eof = false;
 Off(OUT_AC);
 CrearArchivo();
 ClearScreen();
 OpenFileRead("Texto.txt", tam, punteroArchivo);
 while (eof == false){ // read the text file till the end
 if(ReadLnString(punteroArchivo,read) != NO_ERR) eof = true;
 TextOut(LCD_LINE8,num1,read);
 num1= num1-10;
 Wait(500);}
 Wait(5000);
 CloseFile(punteroArchivo);
}


task main()
{
 SetSensorLowspeed(IN_1);
 Precedes(Programa);
}
 

Uso de sentencia While

Autor: Rodrigo Bermedo
Competencia: Desarrollo de software (nivel 1)
Palabras claves: Java, Netbeans, Programacion
 
 
 Descripcion de la actividad.

Esta actividad fue el primer laboratorio realizado en el curso de programacion II de la carrera de Ingenieria Civil Informatica de la Universidad Catolica de Temuco. Esta actividad estaba orientada hacia el uso de la sentencia de control "while". El ejercicio en si consistia en pedir al usuario que ingresara un numero de cualquier cantidad de digitos y luego eligiera un numero que deseara borrar de el numero anterior.

Ej: numero ingresado = 12434  -> numero a borrar = 4 -> resultado =123


Entrada:

Tipo: Int.
Cantidad: 2
Restricciones: Entero Positivo, hasta máxima capacidad de Integer, En la segunda entrada un entero entre 0 y 9.


Salida:

Tipo: Int.
Cantidad: 1
Restricciones: Entero positivo, hasta máxima capacidad de Integer.ç


Generalización:

Declaración de variables int
Numero, numero2, numeroBorrar, largo, división, modulo, suma, suma2, exponente.
Como ejemplo
Numero = 1234
NumeroBorrar = 4
Numero2 = numero

Mientras (división sea mayor que 0)        /* este ciclo es para determinar el largo
{  división= numero/10                              * de la variable numero*/
  Numero = división
  Largo +1 }

Transcurrido este ciclo la variable largo tendría valor 4

Mientras (largo sea mayor que 0)                       /*en este ciclo se realiza el
 {  modulo = numero2%10                                    *proceso para identificar los
    numero2 = numero2/10                                    *números a borrar*/
       si(modulo es distinto a numeroBorrar)
             {
                 suma = modulo * 10^exponente
                 suma2 =suma2+suma
                 exponente  +1
             }
             Largo -1
}
Terminado este ciclo la variable suma2 tiene el valor del numero sin los dígitos borrados en este caso suma2 = 123



Código:


import java.util.*;

public class BorrarNumero
{
    public static void main(String[] args)
    {
       int numero;
       int numeroBorrar;
       int largo=0;
       int division=1;
       int numero2;
       int modulo;
       int suma=0;
       int suma2=0;
       int exponente =0;
     
       Scanner leer = new Scanner(System.in);
       System.out.println("ingrese un numero");
       numero = leer.nextInt();
      
       System.out.println("ingrese el numero que desea borrar");
       numeroBorrar = leer.nextInt();
       numero2=numero;
      
       while(division>0)//ciclo que obtiene el largo del numero.
       {
           division=numero/10;
           numero=division;
           largo++;
       }//fin del while.
      
       while(largo>0)//ciclo que hace el proceso de sacar cada numero.
       {
           modulo=numero2%10;
           numero2 = numero2/10;
          
          
           if(modulo != numeroBorrar)
           {
               suma = (int) (modulo*(Math.pow(10, exponente)));
               suma2 =suma2+suma;
               exponente++;
           }//fin del if.
           largo--;
          
       }//fin del while.
      
       System.out.println("numero resultante: "+suma2);
   }//fin del main.
}//fin.


Capturas de pantalla





lunes, 10 de octubre de 2011

Robot Turista

Autor: Rodrigo Bermedo
Competencia: Desarrollo de software (nivel 1)
Palabras claves:NXC, NXT, Lego, programacion
 
 
 
Descripcion de la actividad

 
Esta fue la primera actividad desarrollada en el curso de programacion de Robots de la carrera de Ingenieria Civil Informatica de la Universidad Catolica de Temuco. Esta actividad consistia en en lograr que el robot avanzara por una pista previamente delimitada, esta pista simulaba un recorrido turistico en la cual el robot representaba un vehiculo que debia parar en ciertas estaciones para que los turistas tomaran fotografiias, esto debia ser repetido dos veces para luego detenerse en el mismo punto de partida.
 
 
 
Pseudocodigo

2 repeticiones
{
    se encienden los motores
    avanza por 7 segundos
    se detiene por 2 segundos (primera parada)
    avanza por 1 1/2 segundos
    gira a la izquierda
    avanza por 2 1/2 segundos
    gira a laizquierda
    se detiene por 2 segundos (segunda parada)
    avanza por 7 1/2 segundos
    gira a la izquierda 
    se detiene por 2 segundos (tercera parada)
    avanza por 3 1/2 segundos
    gira a la izquierda
 }
   se detienen los motores




Codigo fuente

 task main()
    {
        repeat (2)
                 {
                   OnFwd(OUT_C, 60);   //SE encienden los motores
                   OnFwd(OUT_A, 63);
                   Wait (7000);
                   Off (OUT_AC);      //primera parada
                   Wait (2000);
                   OnFwd (OUT_C, 60);
                   OnFwd (OUT_A, 63);
                   Wait (1500);
                   OnRev (OUT_C, 60);  //primer giro
                   Wait (410);
                   OnFwd (OUT_C, 60);
                   Wait (2800);
                   OnRev (OUT_C, 60);  //2do giro
                   Wait (430);
                   Off (OUT_AC);     //segunda parada
                   Wait (2000);
                   OnFwd (OUT_C, 60);
                   OnFwd (OUT_A, 60);
                   Wait (7500);
                   OnRev (OUT_C, 60);  //3er giro
                   OnFwd(OUT_A,63);
                   Wait (380);
                   Off (OUT_AC);      //Tercera parada
                   Wait (2000);
                   OnFwd (OUT_C, 60);
                   OnFwd (OUT_A, 64);
                   Wait (3500);
                   OnRev (OUT_C, 60);   //4to giro
                   Wait (380);
                   Off ( OUT_AC);
                 }
         Off (OUT_AC);
       }


Video de la actividad
 
 
 
conclusion

como se puede observar esta actividad no representa mucha dificultad ya que es basicamente una repeticion de instrucciones que el robot debe realizar. Obviamente este codigo fue realizado cuando no poseiamos muchos conocimientos sobre el lenguaje NXC por lo cual el codigo no es todo lo eficiente que deberia ser, pero es una buena manera de introducirse en la programacion.



domingo, 9 de octubre de 2011

Robot Destructor

Autor: Rodrigo Bermedo
Competencia: Desarrollo de software (nivel 1)
Palabras claves:NXC, NXT, Lego, programacion
Descripcion de la actividad

Esta fue la segunda actividad que se  desarrollo en el curso de Programacion de Robots de la carrera de Ingenieria Civil Informatica de la Universidad Catolica de Temuco. En esta actividad nuestro trabajo fue programar el Robot lego NXT para que deambulara a ciegas sobre una superficie delimitada, donde unos bloques de madera representan pilares que el robot debe destruir cada vez que el sensor de tacto fuera activado. El objetivo de esto era recopilar la informacion de cuantos pilares destruyo teniendo en cuenta que el robot solo diponia de 5 "bombas".

 Pseudocódigo:

Activar sensor de tacto
  Se encienden los motores
ciclo infinito
{

     Si (el sensor de tacto es activado)


     {

       reversa durante 1/2 segundo

       sonido de la explosión

       espera durante 2 segundos

       enciende motores

       Gira durante un tiempo aleatorio
       contador +1

     }

      Si (contador = 5)

     {

       se apagan los motores
       se detienen todas lass tareas
     }
 }



 Codigo Fuente

int tiempo = 0;                       // Declarar variable
int contador = 0; 
task main()
{
    SetSensorTouch(IN_1);               // Activar sensor de tacto
    OnFwd (OUT_AC,80);                  // Se encienden los motores
     while (TRUE)
     {
          If (SENSOR_1==1)                  // Si el sensor de tacto es
          {                                               // activado
            tiempo = Random (2200)+350;   // realizar la las ordenes indicadas
            OnRev(OUT_AC,70);             // reversa durante 1/2 segundo
            Wait (500);
            PlayTone (10,1000);           // sonido de la explosión
            Off (OUT_AC);
           Wait (2000);                  // Espera durante 2 segundos
           OnFwd (OUT_AC,70);            // Enciende motores
           OnRev(OUT_C,70);              // Gira durante un tiempo
           Wait (tiempo);                // aleatorio
           OnFwd(OUT_AC,70);
           contador++;
         }

        If (contador==5)                 // Si el sensor de tacto  es
        {                                         // activado 5 veces el robot
          Off (OUT_AC);                 // debe detenerse y emitir
          PlayTone (2000, 1000);        // un sonido de aviso.
       }
        StopAllTasks();

    }
}


 Video de la Actividad



 Conclusion

 en esta actividad aprendimos a utilizar el sensor de tacto que viene incluido en el kit lego NXT tambien aprendimos algunos de los comando basicos del lengueje de programacion NXC como fueron las sentencias "While", "if", entre otras.

Uso de la Sentencia "if"

Autor: Rodrigo Bermedo
Competencia: Desarrollo de software (nivel 1)
Palabras claves: Java, Bluej, Programacion
 
 
 
Descripción de la actividad:

Esta fue la segunda actividad que se realizo en el curso de Programacion I de la Carrera de Ingenieria Civil Informatica de la Universidad Catolica de temuco. Esta actividad consitia en el uso de la sentencia de control If en el lenguaje de programacion Java.


Enunciado de la Actividad
 
En un colegio de Temuco los alumnos se evalúan con las notas A, B, C, D, E de acuerdo a la cantidad de puntos que obtuvieron.

-         entre 0 y 20 puntos su nota es E
-         entre 21 y 40 puntos su nota es D
-         entre 41 y 60 puntos su nota es C
-         entre 61 y 80 puntos su nota es B
-         entre 80 y 100 puntos su nota es A

Analice y construya el programa en java para que resuelva este problema.
 


Entradas

Un número entero positivo entre 0 y 100

Salidas

Una letra mayúscula entre A y E



Ejemplos

  1. 25 Puntos   =   Nota D
  2. 0 Puntos     =   Nota E
  3. 78 Puntos   =   Nota B
  4. 100 Puntos =   Nota A 
  5. 59 Puntos   =   Nota C


Ejemplo paso a paso
  
-         entre 0 y 20 puntos la nota obtenida es E
  -         entre 21 y 40 puntos la nota obtenida es D
   -         entre 41 y 60 puntos la nota obtenida es C 
  -         entre 61 y 80 puntos la nota obtenida es B
    -         entre 80 y 100 puntos la nota obtenida es A

Tomando un numero cualquiera entre 0 y 100 por ejemplo el 45
45 > 41
45 < 61
La nota obtenida es “C”


Generalización

- Si (n => 0 y n <= 20)
  La nota es E
- Si (n => 21 y n <= 40)
  La nota es D
- Si (n => 41 y n <= 60)
  La nota es C
- Si (n => 61 y n <= 80)
  La nota es B
- Si (n => 81 y n <= 100)
  La nota es A


Diagrama de flujo


Codigo Fuente



import java.util.*;

 class notas

 {
     static void main()

     {
          int n;
    
          Scanner leer = new Scanner(System.in);
    
          System.out.println( "ingrese puntaje");
    
          n = leer.nextInt();
    
          if( n >= 0 && n <= 20)
    
          System.out.println("su nota es = E");
    
          if( n >= 21 && n <= 40)
    
          System.out.println("su nota es = D");
    
          if( n >= 41 && n <= 60)
    
          System.out.println("su nota es = C");
    
          if( n >= 61 && n <= 80)
    
          System.out.println("su nota es = B");
    
          if( n >= 81 && n <= 100)
    
         System.out.println("su nota es = A");
    
         if(n < 0 || n > 100)
    
         System.out.println("¡¡¡ERROR!!! ingrese un numero entre 0 y 100");
    }
}


Capturas de pantalla







  
 Conclusion 

Esta actividad es una buena manera de aprender para que sirve la sentencia if, porque es un ejercicio simple que no lleva consigo muchas dificultades pero que deja bien en claro como se utiliza y para que funciona esta sentencia.