lunes, 14 de noviembre de 2011

Programacion II: Guardar datos y/o trabajarlos(ARRAY en java)

Autor: Carlos Alberto San Martín San Román
Universidad Católica de Temuco.





Ciencias de la ingeniería

Nivel 1: Implementa modelos simples de la ingeniería y de las ciencias básicas, en el desarrollo de software.


Uso de ARRAY en java, para guardar y/o trabajar datos.
______________________________________________________________

Problema:

Crear un arreglo numérico con datos ingresados por teclado. La dimensión la ingresa el usuario. El programa debe entregar cuántos elementos están entre medio de sus vecinos.
Ejemplos:
N = 10
7 5 11 20 6 7 8 2 5 0 = hay 2

7 5 3 10 16 20 6 4 7 11 = hay 5
 

 Codigo solucion:


/**Crear un arreglo numérico con datos ingresados por teclado. La dimensión la ingresa el usuario.
 * El programa debe entregar cuántos elementos están entre medio de sus vecinos.
 * Autor: Carlos Alberto San Martín San Román
 */

import java.util.*;

public class entrevecinos
{
    public static void main(String[]args)
    {
        int tam; int cont; int i;
        Scanner numero = new Scanner(System.in);
        System.out.println("ingrese tamaño del arreglo");
       
        tam = numero.nextInt();
       
        int arreglo[] = new int [tam]; //declaramos arreglo
       
        /** lleno arreglo*/
        System.out.println("Ingrese valores para el arreglo");
        System.out.println("<ingresar numero entero> y presionar 'enter'");
        for(i=0; i<tam; i++)
        {
            arreglo[i] = numero.nextInt();
            //System.out.println("Numero ingresado en la fila" +i "" + arreglo[i]);
        }
       
        /**Guardo los que estan entre vecinos*/
        i=0;
        cont=0;
        while(i<tam-2)
        {
            if(arreglo[i]<arreglo[i+1] && arreglo[i+1]<arreglo[i+2])
                cont++;
               
            else
                if(arreglo[i]>arreglo[i+1] && arreglo[i+1]>arreglo[i+2])
                    cont++;
            i++;
        }
       
        System.out.println("Numeros entre vecinos: " + cont);
        System.out.println("Tamaño total del arreglo: " + arreglo.length);
    }
} 
 
 <<<Se entiende que los valores van siendo guardados automáticamente al estar dentro del for, y luego en el while se van comparando para ver si son números como los que pide el problema>>>


Reflexión:

un arreglo nos permite guardar información dentro de este, en distintos espacios. a[]=es un arreglo y a[3]= es un arreglo con tres espacios y arreglo.length=tamaño total del arreglo. De esta manera podemos ir guardando datos en los arreglos y utilizarlos o imprimirlos cuando queramos.

Programacion I: Resolver problemas con "IF"

Autor: Carlos Alberto San Martín San Román.
Universidad Católica de Temuco.
Ciencias de la ingeniería

Nivel 1: Implementa modelos simples de la ingeniería y de las ciencias básicas, en el desarrollo de software.
Clase java, utizando "if" para la solucion de problemas.

___________________________________________________________________________________
En este blog, colegas, les mostrare como es la solución de problemas, utilizando los "if".
 Problema:

Leer de teclado tres números he indicar mediante un mensaje en pantalla si fueron ingresados en orden (ascendente o descendente).



Ejemplos paso a paso:

12345>P>24,135
89473>P>84,973
12345466>P>numero con dígitos incorrectos
12>P>numero con dígitos incorrectos


Codigo Programa:
  
//Objetivo: Mostrar si los números ingresados estan ordenados de forma ascendente o descendente
//Mostrar valores introducidos

import java.util.*;
import java.math.*;
public class Orden {
//punto de inicio de la aplicacion
public static void main(String[]args)
{
int a, b, c;
Scanner stdin = new Scanner(System.in);
//obtiene los números
System.out.print("Introduzca primer digito:");
a = stdin.nextInt();
System.out.print("introduzca segundo digito:");
b = stdin.nextInt();
System.out.print("introduzca tercer digito:");
c = stdin.nextInt();
if(a<b&&b<c)
System.out.println("Ascendente");
else
{
if(a>b&&b>c)
System.out.println("Descendente");
else
{
System.out.println("orden incorrecto");
}
}
}
}

El problema utiliza una comparacion para obtener resultados, como se vera en el siguente diagrama:
Reflexión:

 
Con "if" podemos decidir que es lo que queremos hacer y cuando se hará, este comando es muy fácil de utilizar y muy practico, podría decirse que es el mas utilizado para la programación, y la solución de problemas cotidianos.

Programacion I: Problemas matematicos( Solucion con librerias basicas java)

Autor: Carlos Alberto San Martín San Román
Universidad Católica de Temuco.





Ciencias de la ingeniería

Nivel 1: Implementa modelos simples de la ingeniería y de las ciencias básicas, en el desarrollo de software.

Programa java, usando librerías básicas, para lograr la solución de problemas matemáticos de distintos tipos.
_________________________________________________________________________________
La matemática en java.

Hola amigos, hoy les vengo a mostrar simples soluciones para problemas matemáticos con java, señalando cada caso y su problema.




Problema con swing de java:


Leer tres números, indicar mediante un mensaje en pantalla si fueron ingresados en orden (ascendente, descendente o desordenado)....

 Codigo:
//Carlos Alberto San Martín San Román
//Objetivo: Mostrar si los numeros ingresados estan en orden ascendente, descendente o desordenados.

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class SanMartinCarlos implements ActionListener
{
private static final FlowLayout ESTILO_LAYOUT = new FlowLayout();
private JFrame ventana= new JFrame("Orden ");
private JLabel N1Etiq = new JLabel("Numero uno");
private JTextField N1Texto = new JTextField(20);
private JLabel N2Etiq = new JLabel("Numero dos");
private JTextField N2Texto = new JTextField(20);
private JLabel N3Etiq = new JLabel("Numero tres");
private JTextField N3Texto = new JTextField(20);
private JLabel OrdenEtiq = new JLabel("Orden: ");
private JTextField OrdenTexto = new JTextField(20);
private JButton botonRevisar = new JButton("Revisar");
public SanMartinCarlos()
{
ventana.setSize(275, 250);
ventana.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
OrdenTexto.setEditable(false);
OrdenTexto.setBackground(Color.yellow);
botonRevisar.addActionListener(this);
ventana.setLayout(ESTILO_LAYOUT);
ventana.add(N1Etiq);
ventana.add(N1Texto);
ventana.add(N2Etiq);
ventana.add(N2Texto);
ventana.add(N3Etiq);
ventana.add(N3Texto);
ventana.add(OrdenEtiq);
ventana.add(OrdenTexto);
ventana.add(botonRevisar);
ventana.setVisible(true);
}
public void actionPerformed(ActionEvent e){
String respuesta1= N1Texto.getText();
double a = Double.parseDouble(respuesta1);

String respuesta2= N2Texto.getText();
double b = Double.parseDouble(respuesta2);

String respuesta3= N3Texto.getText();
double c = Double.parseDouble(respuesta3);
if(a<b&&a<c&&b<c)
{
OrdenTexto.setText(" Ascendente");
}
else
if(a>b&&a>c&&b>c)
{
OrdenTexto.setText(" Descendente");
}
else
{
OrdenTexto.setText(" Desordenado");
}
}
public static void main(){
SanMartinCarlos gui = new SanMartinCarlos();
}
}

<<<En este ejemplo, mas que nada la solución para obtener un orden va en donde se encuentran los "IF"(si este es mayor a este y este es mayor a este otro), así se obtiene la solución del problema.>>>


Otro problema:

Analice y desarrolle un programa que permita separar un número entero de 5 dígitos en dos números enteros. Uno compuesto por los dígitos pares y otro por los impares. Por ejemplo si nuestro número original es 12475 los números resultantes: 24 y 175.


Codigo:
//Autor: Carlos Alberto San Martín San Román
//Objetivo: Separar un número de cinco dígitos en dos números que sean par e impar
import java.util.*;
import java.math.*;

public class Dígitos {

//main punto de inicio de la aplicación
public static void main(String[] args) {
int n;
int nn=0;
int nPar=0;
int nImp=0;
int resto=0;
int poimp=1;
int popar=1;
// Configura el flujo de entrada
Scanner num = new Scanner(System.in);
// Obtiene el número de cinco dígitos
System.out.print("introduzca número de cinco dígitos: ");
n = num.nextInt();
if((n<10000)||(n>99999))
System.out.print("número con dígitos incorrectos");
else
{if(n>9999&&n<100000)
{ resto=n%10;
nn=resto;
switch(nn) {
case 1:
case 3:
case 5:
case 7:
case 9: nImp=nn;poimp=poimp*10;break;
default: nPar=nn;popar=popar*10;
}
n/=10;
resto=n%10;
nn=resto;
switch(nn) {
case 1:
case 3:
case 5:
case 7:
case 9: nImp=nImp+nn*poimp;poimp=poimp*10; break;
default: nPar=nPar+nn*popar;popar=popar*10;
}
n/=10;
resto=n%10;
nn=resto;
switch(nn) {
case 1:
case 3:
case 5:
case 7:
case 9: nImp=nImp+nn*poimp;poimp=poimp*10; break;
default: nPar=nPar+nn*popar;popar=popar*10;
}
n/=10;
resto=n%10;
nn=resto;
switch(nn) {
case 1:
case 3:
case 5:
case 7:
case 9: nImp=nImp+nn*poimp;poimp=poimp*10; break;
default: nPar=nPar+nn*popar;popar=popar*10;
}
n/=10;
resto=n%10;
nn=resto;
switch(nn) {
case 1:
case 3:
case 5:
case 7:
case 9: nImp=nImp+nn*poimp;poimp=poimp*10;break;
default: nPar=nPar+nn*popar;popar=popar*10;
}
System.out.println("-----------------------------------------------------------");
System.out.println("número de cinco dígitos dividido: ");
System.out.println("número impar: " +nImp);
System.out.println("número par: " +nPar);
System.out.println("-----------------------------------------------------------");
}
}
}
}

<<<Al igual que el caso anterior, este programa presenta una solución comparativa, pero descomponiendo el entero, y comparando cada numero con impares y pares, para deducir a cual pertenece.>>>


Ejercicios como estos son muy fáciles y comunes para los programadores.


Reflexión:

Problemas comunes como estos, basados en numeros de los cuales se necesita saber distintas cosas, pueden ser comparados con if o switch, pero tambien existen problemas que necesitan utilizar +, -, *, /, %, etc, los cuales nos permiten realizar operaciones matematicas.

Además existe una libreria matematica de java, llamada java.math.*.

________________________________________________________________


Espero que esta información les haya sido de ayuda, cualquier corrección o duda, escribirme. Estaré atento, hasta luego.

Programacion II: Problema con sumatoria y productorio (Programa Solucion)

Autor: Carlos Alberto San Martín San Román.
Universidad Católica de Temuco.
Ciencias de la ingeniería

Nivel 1: Implementa modelos simples de la ingeniería y de las ciencias básicas, en el desarrollo de software.

Programa java, realizado en netbeans, usando ciclos anidados para lograr un problema matematico
_________________________________________________________________________________
Hola otra vez amigos, hoy les traigo en este blog, un programa realizado en netbeans que realiza un problema que contiene sumatoria y productorio, entre otras "mañitas".
Este programa se destaca en programación II por utilizar doble ciclo o ciclos anidados.


Problema:


Calcule la siguiente expresión para un N (N>0) ingresado por el usuario 

 




Por ejemplo:

6 -> [P] -> (1/2)+(1/2*2/2)+(1/2*2/2*3/2)+........+(1/2*2/2*3/2+4/2*5/2*6/2)


Codigo del programa:

import java.util.*;

public class expresion
{
    public static void main()
    {
        double n;
        double e=1;
        double nn;
        double i;
        double j;
     
        Scanner leer = new Scanner(System.in);
        System.out.println("ingrese valor a N (N debe ser mayor a 0)");
        n=leer.nextDouble();
        //        System.out.println(n);
         
           nn=0;
        while(e<=n){
            
            i=2;j=0.5;
            while(i<=e){
                j *= i/2;
                i++;}
           nn += j;
            e++;
        }
        System.out.println(nn);
    }     
}



En el codigo, nos damos cuenta que utilizamos dos while, esto es muy importante para que el programa funcione, al obtener los valores este los va imprimiendo como pide el problema.


Reflexión:
Este programa, nos permite obtener lo exigido en el ejemplo mostrado, y como muchos otros. Podemos realizar una o varias soluciones para muchos problemas cotidianos y comunes, usando ingenio.



Espero que este programa les sea de utilidad, cualquier duda, preguntar y yo contestare. Hasta luego.
_____________________________________________________________________

Ensamblaje de un computador(funcional y operativo)

.

Autor: Carlos Alberto San Martín San Román
Universidad Católica de Temuco.



Gestión en Tecnologias de la información.

Nivel 1: Usa sistemas informáticos finales y ofrece soluciones a problemas de los usuarios, mediante la integración básica de distintos elementos de hardware y software.
_________________________________________________________________________________
 
Hola amigos de la internet, hoy les contare los cuidados que hay que tener(para los que no saben) al armar y/o desarmar un computador de escritorio convencional, según lo aprendido en esta actividad.
 Empecemos...
Partes importantes de un computador:

  • Disco duro
  • Memoria RAM
  • Procesador(CPU)
  • Placa madre
Estas piezas son las que uno mas debe cuidar al manejarlas, ya que si alguna de estas llegase a fallar, el computador no podrá ser utilizado. Cada una de estas no deben ser golpeadas, raspadas, dobladas, etc.

Peligros al desarmar o armar un computador

Procesador: Romper o doblar algún PIN. O tambien trizar el procesador.
Disco duro: Al golpearlo, dañar su interior (muy similar a un tocadiscos antiguo), o dañar alguno de sus pines.
Memoria RAM: Riesgo de romper al ser tan rígida, o dañar algunos de sus componentes.
Placa madre: Riesgo de dañar algún componente o romper.

Además de todos los componentes del computador, se corre el riesgo de que por error se "puenteen" lugares que no deben y se de un corte o algo por el estilo.


Clave para un armado o desarmado exitoso.

El que lo este manipulando, debe ser muy cuidadoso y atento a cada componente. De esta manera, fijándose de los lugares mas apropiados para tirar o extraer sus partes. Además todos los computadores tienen sus "mañas" para sacar sus piezas, como la típica palanca metálica que permite sacar el procesador, y lo asegura para volver a utilizarlo.


Reflexión
Lo principal que he aprendido con esta actividad, es que todo va en el cuidado y la dedicación que coloca el individuo, por lo que si a uno le apasiona esto, no debería tener problema alguno. De todas maneras, "echando a perder se aprende".


Espero que esto les sirva de algo, cualquier duda ya saben que hacer. Hasta pronto colegas.
_______________________________________________________________


Soporte informatico a empresa de buses Igi-Llaima

Autor: Carlos Alberto San Martín San Román
Universidad Católica de Temuco.



Gestión en Tecnologias de la información.

Nivel 1: Usa sistemas informáticos finales y ofrece soluciones a problemas de los usuarios, mediante la integración básica de distintos elementos de hardware y software.
_________________________________________________________________________________

Hola navegante de la internet, en este blog les traigo a presentar una investigación que realice, sobre que ayuda prestan los ingenieros informáticos a cualquier empresa, como en este ejemplo una de buses como lo es Igi-Llaima.
 Comencemos...


¿Que es Igi-Llaima?

Igi-llaima es una empresa de buses chilena dedicada al transporte nacional e internacional, este tipo de empresa necesita contar con características informáticas especificas para lograr su buen funcionamiento, como lo debe hacer cualquier organización de comunicación o servicio al cliente.


¿Pero que nos ofrece y cuál es la real importancia de la informática en este sector?


 La informática en esta empresa


En buses Igi-Llaima a diferencia de otras empresas no son necesarios tantos soportes de esta índole, pero, de igual forma los existentes son de vital importancia para el correcto funcionamiento de esta empresa.


Los soportes necesarios son:


  •   Base de datos.
  •   Redes locales y en linea.
  •   Mantención Software y Hardware.
 
 
Base de datos:
 
Una empresa de estas características necesita una base de datos contundente y actualizada, ya que debe controlar muchas datos y registros.
Esto es necesario ya que una empresa dedicada al servicio de transporte es muy demandada, por esto siente la necesidad de mantener el control de sus recursos para que su sistema no colapse.
La necesidad de esta empresa es tener una base de datos conectada en tiempo real y de fácil manejo, además de lo más importante, que sea estable.
El sistema es el siguiente, se tiene varias sucursales, las cuales más que nada deben tener registros de recorridos, los cuales contienen horarios, buses y cantidad de pasajes. Estos registros deben ir actualizándose de manera continua, ya que al cambiar un registro en alguna sucursal, esta modificación debe verse en cada una de las demás sucursales que cuenten con los mismos registros.

Éste es el principal soporte necesita este tipo de empresa, una base de datos veloz, actualizada y estable.


 Redes:
 
Otro soporte importante para esta empresa es la de las redes, las cuales deben verse de manera local y en línea. Este recurso es mas bien un complemento para la base de datos. Esta es forma de poder mantener comunicada unas sucursales con las otras.
Especificaciones de las redes:
    • Red Local: Esta red, para la empresa, es mas que nada para mantener la conexión a internet en todos los computadores de una sucursal.
    • Red en línea(online): La red “online” es la que permite que las sucursales se conecten entre si junto con el servidor de la base de datos.

Al igual que el soporte anterior, este es de vital necesidad, porque, si alguna de estas redes llegase a fallar, el servicio de la empresa fallaría ya no tendría contacto con la base de datos. 

Mantención:
El soporte informático en base al mantenimiento es muy importante para esta empresa, ya que de llegar el momento en el cual cualquiera de los recursos informáticos utilizados por esta, llegasen a fallar, el personal de soporte debe moverse de manera rápida y eficiente para solucionar el problema, para que la empresa permanezca el menor tiempo posible funcionando de manera incompetente. 
El mantenimiento, igual es el tratado que realizan los informáticos cada cierto tiempo a los recursos de este sector de la empresa. Esto permite asegurarse que la empresa está trabajando de manera correcta y que las herramientas informáticas de esta resistan lo suficiente hasta un próximo mantenimiento.

 Reflexión: 
Gracias a esto, he comprendido que la informática hoy en día se encuentra en casi todas las empresas del país y del mundo. Además se entiende de igual forma que aunque el servicio sea básico, es primordial y de necesidad total, como lo es en este caso las redes y base de datos.
Así se entiende que un ingeniero de esta índole, hoy en día puede desempañarse en su trabajo en cualquier zona del país o del mundo.
 
 
 
Espero que les sea útil esta información, cualquier duda escríbela y sera respondida.
Saludos y hasta pronto.
_________________________________________________________________________

Proyecto de Robotica #2: Robot Grua

Autor: Carlos Alberto San Martín San Román.
Universidad Católica de Temuco.





Gestión en Tecnologías de información.

Nivel 1: Usa sistemas informáticos finales y ofrece soluciones a problemas de los usuarios, mediante la integración básica de distintos elementos de hardware y software.
Robot Grúa utilizado mediante la tecnología BlueTooth.

Proyecto realizado por el Grupo Skynet(al cual pertenezco), que cuenta con el objetivo de controlar el robot mediante un SmartPhone con sistema operativo ANDROID para, con este lograr sostener y transportar objetos de una ubicación a otra, llevando además un control de tiempos con un código interno en el robot.

Especificaciones del robot:


  • Robot NXT "LEGO Mindstorm" programado en nxt.
  • sensor de tacto. (TouchSensor)
  • Tres motores. <movilidad horizontal> <movilidad vertical> <garra> 
  • aplicacion APK de android para el control Bluetooth.

Aplicacion Android:

La aplicacion APK realizada para este robot esta desarrollada en AppInventor de Google, consta con control para los tres motores del robot. Además este cuenta con botones de conexión y desconexión del bluetooth.
Esta ha sido desarrollada por el Grupo Skynet de la universidad Católica de Temuco.





 Link de descarga Megaupload:


Codigo fuente interno para guardar datos de tiempo del sensor:

int dif=0; //Definir variables
int h=0;
int i=0;
int tantiguo=0;
int tnuevo=0;
int tiempo [4];
byte punteroA;
byte bytesEscritos;
string cadena, numero, cad;
string esp=" ";
sub GuardaArchivo(){ //Subrutina para guardar los datos tomados en un archivo
DeleteFile("Tiempo.txt"); //borrar archivo
CreateFile("Tiempo.txt", 512, punteroA); //crear nuevo archivo
WriteLnString(punteroA, " REPORTE DE DESEMPEÑO", bytesEscritos); //escribir
WriteLnString(punteroA, "Nº de cubos tiempo", bytesEscritos);
WriteLnString(punteroA, "---------------------------", bytesEscritos);
for(i=0;i<ArrayLen(tiempo);i++){ //iteracion de largo de arreglo
cad=NumToStr(tiempo[i]); //pasa a cadena el entero guardado en la posicion "i"
numero=NumToStr(i); //pasa a entero i para guardar el numero de la posicion
cadena="Cubo"+numero+esp+cad+"_seg"; //genera cadena para luego escribir
WriteLnString(punteroA,cadena,bytesEscritos); //escribir
}
CloseFile(punteroA); //al termino de escribir en el archivo este se cierra
}
sub GuardaTiempo(int t){ //subrutina para guardar el tiempo en arreglo
tiempo[i]=t; //guarda "t" en el arreglo "tiempo[]" posicion "i"
i++; //aumenta "i" para cambiar la posicion del arreglo
}
task Sonido(){ //tarea para detectar si toma o no el "container"
while(true){ //siempre activa
if(Sensor(IN_1)==1) //si el sensor de tacto se activa toca un tono
PlayTone(1500,600);
}
}
task Garra(){ //tarea para tomar el tiempo en que se demora en mover un "container"
while(true){ //siempre activa
while(h<=4){ //mientras "h" sea meno o igual a 4 hacer...
if(Sensor(IN_1)==1){ //si sensor de tacto se activa
tantiguo=CurrentTick(); //tomar el tiempo de cuando se activa
until(Sensor(IN_1)==0) //cuando el sensor se desactive
tnuevo=CurrentTick(); //tomar el tiempo de cuando se desactivo
dif=(tnuevo-tantiguo)/1000; //restar los tiempos y dividirlos por 1000 para obtener los segundos
GuardaTiempo(dif); //activar subrutina "GuardaTiempo()"
h++; //aumentar "h"
}
}
GuardaArchivo(); //activar subrutina "GuardaArchivo()"
int total=tiempo[0]+tiempo[1]+tiempo[2]+tiempo[3]; //sumar todos los tiempos
if(total<35){
TextOut(0, 50, "Muy bien"); //si demora menos de 35s imprimir...
Wait(5000);}
else{ //si no, imprimir
TextOut(0, 50, "Te falta practica");
Wait(5000);
}
StopAllTasks(); ///detener todas las tareas
}
}
task main(){ //inicia tarea principal
Precedes(Garra, Sonido); //ejecutar tarea "Garra" y "Sonido"
SetSensorTouch(IN_1); //setear sensor de tacto
} //fin de la tarea principal



Reflexión:
Hoy en día, la tecnología es tan sofisticada que de cualquier forma se le puede sacar provecho, sea en bien o en mal. En este proyecto he aprendido a realizar aplicaciones para celulares y a su vez, controlar otros dispositivos con estos.
Espero que les sea de provecho este aporte, y si tienen cualquier duda no duden en escribirme, responderé cordialmente.
Además si necesitan ayuda con appinventor, igual puedo ayudarlos.