martes, 4 de diciembre de 2012

Un Vistazo a NXC

Autor: Juan Albarran Gutierrez
Competencia: Aprendizaje Autonomo
Palabras Clave: Proyecto Robotica, NXC, Subrutinas, Mutex

Descripcion de la Actividad:

Este fue un repaso antes de la prueba de Programacion de Robots en la cual se enfatiza en la codifcacion y para que sirve cierto comando en NXC.

1. Construya un programa NXC para un robot luchador de Sumo, cuya estrategia de lucha está
definida por las siguientes tareas que corren en paralelo (concurrentemente):
- Avanzar(): Avanza en línea recta a potencia de 50.
- DetectaBorde(): Al detectar un color negro, retrocede 1 segundo y gira aleatoriamente.
- Embestida(): Al detectar un enemigo a menos de 25 cms avanza a máxima potencia.
- Choque(): Al chocar retrocede 1 seg. a máxima potencia
- Retiro(): Al oír un sonido sobre 85 db, se detiene el robot y todas sus tareas.
NOTA: debe usar Mutex cuando corresponda.

//Defino los valores que
#define SOUND 85
#define BLACK 28
#define ATTACK 25

mutex motors;
int status = 1;

task advance(){   
    while(status == 1){
        Acquire(motors);
        OnFwd(OUT_AB,50);
        Release(motors);
    }
}

task detectDot(){
    while(status == 1){
        if(SENSOR(IN_1) == BLACK){
            Acquire(motors);
            OnRev(OUT_AB,100);
            Wait(1000);
            OnFwd(OUT_B,100);
            OnRev(OUT_A,100);
            Wait(Random(1900) + 100);
            Release(motors);
        }
    }
}

task tackle(){
    while(status == 1){
        if(SensorUS(IN_4) == ATTACK){
            Acquire(motors);
            OnFwd(OUT_AB,100);
            Release(motors);
        }
    }
}

task crash(){
    while(status == 1){
        if(SENSOR(IN_2) == 1){
            Acquire(motors);
            OnRev(OUT_AB,100);
            Release(motors);
        }
    }
}

task retreat(){
    while(status == 1){
        if(SENSOR(IN_3) == SOUND){
            status = 0;
            Acquire(motors);
            Off(OUT_AB);
            Release(motors);
        }
    }
}

task main(){
    SetSensorLight(IN_1);
    SetSensorSound(IN_3);
    SetSensorTouch(IN_2);
    SetSensorLowspeed(IN_4);
    Precedes(advance,detectDot,tackle,crash,retreat);
}





2. Implemente un programa en NXC para el siguiente problema.
Un robot se desplaza por una superficie blanca definiendo la trayectoria de un cuadrado. La
superficie blanca posee manchas (espectro de color inferior a 80). Cada vez que detecta una
mancha (lo cual realiza en paralelo), guarda en un Arreglo el valor del color de la mancha. Al
final del recorrido cuadrado, genera un reporte a archivo de las manchas detectadas (ver tabla
ejemplo de un posible reporte)


                      REPORTE DE MANCHAS
              Numero      Color
             ------------------
              1            56
              2            66
              3            36

Especificaciones:
- La Tarea que detecta mancha, llamará a una subrutina GuardaMancha, pasándole como
parámetro el valor del color. Esta subrutina, GuardaMancha, es la que guardará en el Arreglo el
color de la mancha correspondiente.
- El robot detiene su recorrido al finalizar la trayectoria cuadrada. Luego de eso, genera el
reporte al archivo.


Codigo:

#define LIGHT 80
int manchas[10];
int status = 1;
int i;
int luz;
byte punteroArchivo;
byte bytesEscritos;
int tamano = 512;
int banderaprimeralinea = 0;
string buffer;
int lectorlineas = 0;

task trayectoria(){
    int contador = 1;
    do{
        OnFwd(OUT_AB,50);
        Wait(5000);
        OnFwd(OUT_A,50);
        Wait(4000);
        contador++;
    }while(contador <= 4);
    status = 0;
    Off(OUT_AB);
    crearArchivo();
    reportarManchas();
}

sub CreaArchivo(){
    string linea;
    CreateFile("informe.txt",tamano,punteroArchivo); //se crea el archivo
    for(i = 0; i &lt; ArrayLen(manchas); i++){
        if(banderaprimeralinea == 0){
            WriteLnString(punteroArchivo, "Reporte de Manchas",bytesEscritos);
            WriteLnString(punteroArchivo, "Numero   Color",bytesEscritos);
            WriteLnString(punteroArchivo, "--------------",bytesEscritos);
            banderaprimeralinea = 1;
        }
        if(banderaprimeralinea == 1){
            int posActual = i + 1;
            string nmancha = NumToStr(posActual);
            string nmanchaX = NumToStr(manchas[i]);
            linea = nmancha + "      "+ nmanchaX;
            WriteLnString(punteroArchivo,linea,bytesEscritos);
        }
    }
    CloseFile(punteroArchivo);
}

task leerMancha(){
    while(status == 1){
        if(SENSOR(IN_1) == LIGHT){
            guardaMancha(SENSOR(IN_1));
        }
    }
}

sub guardaMancha(int lux){
        manchas[i] = lux;
        i++;
        if(i == 9){
            i = 0;
        }
}

sub reportarManchas(){
  string linea1;
  string linea2;
  string linea3;
  string linea4;
  OpenFileRead("informe.txt", tamano, punteroArchivo);
      while(lectorlineas <= 5){
          ReadLnString(punteroArchivo,buffer);
             switch (lectorlineas){
                case 1 :
                    linea1 = buffer;
                case 2 :
                    linea2 = buffer;
                case 3 :
                    linea3 = buffer;
                case 4 :
                    linea4 = buffer;           
          }        
          lectorlineas++;
  }
  TextOut(2,50,linea1);
  TextOut(2,40,linea2);
  TextOut(2,30,linea3);
  TextOut(2,20,linea4);        
  Wait(30000);
}

task main(){
    SetSensorLight(IN_1);
    Precedes(trayectoria,leerMancha);
}


3.
Para el problema anterior ¿qué ocurre si justo al finalizar el recorrido el robot se detiene
sobre una mancha? Si esto es un problema, ¿qué propone para solucionarlo? (conteste en sus
palabras - no se espera que programe nada).

 

R: Se Solucionaria  agregando un mutex para regular dicha  accion asi que en el momento en que una de los eventos se haya realizado sea el fin de la trayectoria o la lectura de la mancha, se realice sin problemas y luego pasar a concretar la siguiente.


Conclusion

Bueno con esto me dio la base para trabajar con subrutinas, archivos y tareas paralelas. me ha ayudado a comprender un poco mas lo que es la sintaxis en NXC y mas o menos para tratar de imaginar como had e funcionar el robot
 

lunes, 3 de diciembre de 2012

Foro de Etica Informatica

Autor : Juan Albarran Gutierrez
Competencia: Actuación Ética
Palabras Claves: Ética, Derechos de Autor,Manejo de informacion, Licencia de Software

Descripción de la Actividad:

Se nos formulan 2 preguntas sobre la ética en las empresas y sobre los derechos de autor en los Software, las cuales tenemos que responder con fundamentos

Software y Derechos de Autor:
Existen consideraciones éticas informáticas que están en relación con el uso de del software y su propiedad intelectual. Existiendo alternativas de licenciamiento GNU/GLP, ¿Es ético usar software con licenciamiento privativo sin pagar derechos de autor?
 
Puedo decir que no es ético usar software privativo, sin pagar por este.
pero mientras no se comercialice ilegalmente con el no tendría que haber ningún problema, ya que seria solamente para uso personal y no se mencione de la posesión del software. Ya que, porque esto normalmente el software privativo es mejor desarrollado y su funcionalidad es por decir así "Superior" al software libre/gratis, por lo general quien paga por ella recibe mejor atención y el Programa menores "Bugs" que uno "Libre/Gratis".
Pero en estos dias podria decir que el software Libre/Gratis a estado mejorando
convirtiendose en buena alternativa para "X" programa. 
 
Ética de los Administradores de Sistemas:

En mi opinion, una etica bien marcada para el informatico va entorno a lo que puede y lo que no puede entregar en este caso Informacion, ya sea por ejemplo tu superior te pide la informacion del cliente sabiendo que este no firmo ningun acuerdo al respecto, uno no lo entregaria por mas que soborno o amenaza reciba, como tambien no revelar la cuentas bancarias de los clientes y empleados del mismo, todo va segun el sistema con que se esta trabajando pero generalmente la base de esta etica es la de proteger la integridad de la informacion "valiosa" que se esta poniendo en juego.


Conclusiones.

Es bueno saber como ira a funcionar todo cuando empecemos una vida laboral como profesionales, ya con estas reflexiones nos pueden dejar marca como hemos de actuar al momento que ocurran cierto acontecimientos, como tambien saber que profesionales pasan meses o años trabajando en un producto para despues entregarlo a la comunidad con cierto precio que equivale a tal esfuerzo, nada mas que decir,  si tienen preguntas sean libre de escribir en la caja de comentarios, gracias.

domingo, 11 de noviembre de 2012

MySQL/Java

Autor: Juan Albarran Gutierrez
Competencias: Apli. Ciencias de la Ingenieria
Palabras Clave: MySQL, Java, Conexion, Aplicacion, Cliente Servidor

Introduccion
En esta entrada se  mostrara el uso conjunto de Java y MySQL a un nivel medianamente dificil para alumnos de prime año como yo

Descripcion de  la actividad:

Considere el siguiente modelo para los 2 ejercicios especificados mas adelante:




Hay que crear las siguientes tablas en la base de datos que nos entregaron

factura ( nroFactura, fecha, total_neto, rut_proveedor)
producto ( id_producto, nombre_producto, precio_neto, stock)
detalle_fta_pvd ( nroFactura, id_producto, cantidad, precio_vta_neto )



El enunciado del problema es el Siguiente:

Analice, diseñe e implemente una aplicación en consola Java, que muestre todos los
productos comprados a un proveedor determinado; para lo cual el usuario ingresa el rut del
proveedor mediante el teclado y el programa carga en una colección de tipo TreeSet los
datos solicitados, los cuales son específicamente: id_producto, nombre de cada producto, el
precio al cual se compró dicho producto y el numero de productos comprados a dicho precio.
Tome en consideración que a un mismo proveedor pudo haberse comprado una cantidad X
de un mismo producto, a un precio Y, y el mismo producto X a otro precio Z. La aplicación
debe evidenciar ambas situaciones, exhibiendo el cantidad comprada a un precio Y y la
cantidad comprada a un precio Z.
Un vez recuperada la información desde la base de datos, muestre la colección por pantalla,
de manera clara y ordenada.
Dado que los rut de los proveedores poseen un formato especifico (determinado por cada
programador), diseñe una Excepción propria de tal manera que obligue al usuario a digitar
cada rut según el formato especificado por el diseñador de la aplicación.



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

Para comenzar ejemplos que ayudaran en la resolucion :

Ejemplos Entrada/Salida

1.- “3231#2” → [proceso] → [Resultado de la Consulta]
2.- “awd”#h” → [proceso] → “Error”
3.- “1543#A” → [proceso] →[Resultado de la Consulta]
4.- “nagkjafs” → [proceso] → “Error”
5.- 010120 → [proceso] → “Error”
6.- “Dios mio esto es una frase Random!” → [proceso] → “Error”
7.- “2314-5” → [proceso] → “Error”
8.- “4233#B” → [proceso] → [Resultado de la Consulta]
9.- “123d#A” → [proceso] → “Error”
10.- “5433#C”→ [proceso] → “Error”
11.- “4654#a”→ [proceso] → “Error”
12.- “1243#AC”→ [proceso] → “Error”
13.- ”!234#!” → [proceso] → “Error”
14.- 123123 → [proceso] → “Error”
15.-”1345#K” → [proceso] → “Error”

En este caso el analisis siguiente escruto solo se saco lo que llevo a la solucion, se omitio cualquier otra palabra para ahorrar espacio

Analisis y Diseño


Para empezar quiero que el usuario ingrese el rut del Pvd
yo quiero que ingrese un String compuesto por 4 digitos, un separador que sera '#', y el
verificador entre 0-9 o A,B o C
main
//leer rut y mandarlo a un metodo
//verifica Escribir “Ingrese rut”;
validarRut(leer .nextLine.trim().toUpperCase());
// quiero que no hayan espacios, tampoco que las letras del verificador sean minusculas
Fin main
validarRut (String rut)
verificar largo del rut // que sean de 6 caracteres



ahora quiero que se verifique que el “#” este en la posicion correcta





necesito ver que el sector antes de “#”
sean solamente numeros
tengo que pasar el numero a un metodo externo
soloNumeros(rut)
if(soloNumeros(rut)) == false){
problemaAvistado = true;
} // crea el metodo mas tarde!

Lo ultimo seria ver si el verificador es el correcto
char verificador ← rut.charAt(5);

//Acuerdate 0-9 o A,B o C

if(Character.isDigit(verificador)
|| verificador == 'A'
|| verificador == 'B'
|| verificador == 'C'){
problemaAvistado = false;
}else {
problemaAvistado = true; // crea una excepcion
}

Si en el proceso se ha encontrado algun problema
ejecutar la excepcion y mandar un mensaje (?)
y si todo salio bien seguir con la consulta




Ahora debo crear el metodo soloNumeros
tengo que devolver un boolean(?)// SI
boolean esNumero = true // supongo que ya son numeros
como paso el rut y este es un string tengo que hacer un ciclo que llegue al numero
antes “#”





Por ultimo hacer la consulta select
sera:
select id_producto, nombre_producto. precio_vta_neto, cantidad
from producto
natural join detalle_fta_pvd
natural joinn factura
where rut_proveedor = [rut ingresado por usuario]
se crea el statement y el resultSet
y se hace lo normal cuando se trata de TreeSet
y se muestran los registros ordenados



 
Los siguientes diagramas, son Diagramas en UML para detallar al usuario como se desarrollo el programa


Diagrama de Clases y Actividades
Diagrama de Clases





Diagrama de Actividades
main()


validarRut()












soloNumeros()












verProductosComprados()







El codigo del programa es muy largo para postearlo aqui asi que el siguiente link lo llevara hacia este.



(El codigo esta comentado por cualquier duda)
http://pastebin.com/F5u862jv


Conclusion

En esta actividad puedo que me dificulto, porque tenia que pensar en la manera en que todo iria a funcionar, literalmente me costo 1 dia encontrar una solucion, pero me llevo a tener una mejor experiencia en termino de ingeniarselas para una solucion.



















































 

Laboratorio en Equipo

Autor: Juan Albarrán Gutierrez
Competencia: Trabajo en Equipo
Palabras Clave: Ciclos, Java, Equipo, Programación II.


Este trabajo fue hecho en conjunto de Claudia San Martín, Cristofer Fritz y Benjamín Navarrete

Descripción de la actividad:

Se nos asignaron un ejercicio simple sobre ciclos en las que juntos como "Equipo" habria que desarrollar.

Problema 1:

Analice y resuelva el problema de ingresar un conjunto de N (N > 0) números
enteros en un orden de llegada, para luego mostrar los números que están en
las posiciones impares, partiendo de atrás en adelante.

Claudia, sugirio que hicieramos unos ejemplos para algunas posibilidades de entrada y salida:

Ejemplos

2, 4, 7 ->[p]-> 7, 2
3221 ->[p]-> Solo números de un digito
Kjaskjsa ->[p] Ingrese solamente numeros
#12# -> [p] -> Ingrese solamente numeros
" "2" " -> [p] -> Solamente numeros






Lo siguiente que el grupo se puso de acuerdo a hacer fue hacer un diagrama de flujo para asi tener una idea mucho mas clara de como sera el codigo:








Una vez terminado el diagrama el ultimo paso que nos pedia la Profesora era el codigo, lo mas importante

import java.util.InputMismatchException;
import java.util.Scanner;

public class PosicionImpar_1 {
       public static void main(String[] args) {
              Scanner leer = new Scanner(System.in);
              String numeroCad = "", nuevo = "";
              char res, s = 'S';
             int numero;
             try {
                   do {
                            System.out.println("Ingrese un numero");
                            numero = leer.nextInt();
                            if (numero >= 0 && numero <= 9) {
                                   numeroCad = numero + numeroCad;
                                   System.out.println("¿Desea Seguir? S ");
                                   res = leer.next().toString().toUpperCase().charAt(0);
                            } else {
                                   System.out.println("Solo numeros de un digito");
                                   System.exit(-1);
                            }
                     } while ( res == s );
             } catch (InputMismatchException e) {
                     System.out.println("Ingrese solamente numeros");
             }
              int largo = numeroCad.length();
              for (int i = 0; i < largo; i += 2) {
                     nuevo += "," + numeroCad.charAt(i);
              }
             nuevo = nuevo.replaceFirst(",", "");
             System.out.println(nuevo);
       }
}

Muestras de el programa funcionando:



 


Conclusion:

Como equipo este programa se termino lo mas rapido posible, por el exelente trabajo que se hizo, aunque este repositorio no fuera mucho lo mas pequeño puede servir para un modelo de trabajo mas grande.

Comentario de películas: “Los piratas de Silicon Valley y El Ordenador”

Autor: Juan Albarrán Gutiérrez.
Competencia: Gestión de Conocimiento.
Palabras Clave: Silicon Valley, película, comentario, preguntas, Ordenador.

Descripción de la actividad:
Debe responder las siguientes preguntas desde tu opinión personal, fundamentada en la revisión de las películas vistas en clases ("Piratas de Silicon Valley" y el documental "El Ordenador"):
  1. ¿Cómo piensas que habría evolucionado la tecnología si los computadores no se hubieran desarrollado? céntrese en un camino que podría haber tomado como alternativa la humanidad y ventajas/desventajas de esto.
  2. ¿Cómo crees que evolucionarán los computadores de aquí en adelante? ¿habrá grandes cambios? ¿existen alternativas o posibilidades no utilizadas?
  3. ¿Quiénes crees que son los personajes vistos en los vídeos que más aportaron al desarrollo de los computadores según tu punto de vista? ¿Porqué?
  4. ¿Cómo crearía el ordenador más potente del mundo actualmente si tuviera los recursos?

1.-  La tecnología habría evolucionado de una manera mas lenta ya que por medio de las computadoras se desarrollaron todas las tecnologías posibles que hay estos tiempo, no se habrían podido usar para ganar la segunda guerra mundial y haber caído bajo el régimen nazi, sin los ordenadores no podríamos tener las comodidades que tenemos en estos días como los electrodomésticos o la comunicación. Pero lo bueno de no tener este tipo de tecnología, seria el reducimiento de sedentarismo, como también el aumento de áreas verdes que se utilizaban para albergas oficinas con grandes computadores, como también no habría consumismo por el gran gasto en recursos que hay por conseguir una.

2.- De que las computadoras va a evolucionar a mejores eso es totalmente inevitable porque en estos momentos se siguen desarrollando mejores ordenadores personales o comerciales, y aparte de grandes cambios, las computadores pueden o serán mas portables que los notebook o las laptop que incluso serán dispositivos que sus interfaces sean de hologramas que funcionan por contacto o por voz, y muchas cosas mas en el futuro.

3.-  Ha decir verdad pienso que fueron la personas de Intel los creadores del microprocesadores, ya que estos ayudaron a alcanzar mas metas en términos de hardware y ampliando mas los horizontes de la tecnología así como la creación de electrodomésticos, y medios de comunicación portables y avanzados

4.-Este computador o mejor dicho “Súper Computador” que crearía seria uno capaz de ser llevado solo con la palma de una mano y que su interfaz sea la de una pantalla holográfica (tecnología que aun esta en desarrollo y que se piensa ser comercializada) sea capaz de procesar información de manera mas rápida que cualquier otro ordenador lo cual es una ambición constante, que no necesite de Internet alambrico y su batería sea a partir de luz solar, el único inconveniente seria en el uso de hardware de almacenamiento, pero por eso existen las llamadas nubes virtuales que son mas sencillas de usar que un dispositivo externo usb o CD/DVD a la cual transportar, que sea inteligente que entienda mis comandos de voz la cual en estos momentos ya existe pero mejorar esos errores que se comenten y llevarlos a otro nivel, mas o menos así seria el ordenador que me gustaría crear para el futuro.

Reflexión:
Estas cinematicas mostradas a inicios de la Carrera tuvo gran relevancia en mi formación por darme a conocer distintos ámbitos que desconocía de 2 de las grandes personalidades en el mundo informático. Además de relatar todos los sucesos que acontecieron para que al día de hoy poseamos un computador tal como es y como puede llegar a ser en unos años mas, ya que la tecnologia va cambiando nosotros tambien.

domingo, 21 de octubre de 2012

Sucesion de Fibonacci Normal e Inversa

Autor: Juan Albarran Gutierrez
Competencia: Desarrollo de Software (Curso 2do Semestre).
Palabras Clave: Fibonacci, Ciclos, Programacion II, for, Java.

¡Hola que tal!, en esta entrada quiero compartir con ustedes un programa en Java que me ha ayudado a comprender mas los ciclos para el curso Programación II, este programa realizado en un Laboratorio del mismo ramo es sobre la Sucesion de Fibonacci que segun el numero N que sera ingresado por el usuario, mostrara el orden normal de la sucesion "y" el orden inverso de la sucesion.


Solucion

Como siempre un pseudocodigo puede ayudarte a guiarte en como sera el resultado final del programa, el cual el siguiente ilustra como deberia quedar el programa.


Algoritmo Fibonacci
         numeroFibonacciN, numeroFibonacci1 <- 0, numeroFibonacci2 <- 1, numeroIngresado | Enteros Largos;
         Escribir "Ingrese numero N";
         Leer numeroIngresado;
         SI numeroIngresado > 0 Entonces
                 Escribir "Orden Normal";
                 Para i <- 0 Hasta numeroIngresado Con Paso 1 Hacer
                          Escribir numeroFibonacci1;
                          numeroFibonacciN <- numeroFibonacci1 + numeroFibonacci2;
                          numeroFibonacci1 = numeroFibonacci2;
                          numeroFibonacci2 = numeroFibonacciN;
                  Fin Para
                  Escribe "Orden Inverso";
                  Para j <- numeroIngresado Hasta 0 Con Paso -1 Hacer
                           numeroFibonacciN = numeroFibonacci2 - numeroFibonacci1;
                           numeroFibonacci2 = numeroFibonacci1;
                           numeroFibonacci1 = numeroFibonacciN;
                           Escribir numeroFibonacci1;
                  Fin Para
         Sino
                  Escribir "Error";
         Fin Sino

Fin Algoritmo  
                 
Ejemplo








              
Se ingresa 3
"Orden Normal"
       
en el ciclo que comienza en 0 y debe terminar en 3
 i <- 0
 ---------
Escribe nro1 // 0

nroN = nro1 + nro2 // 1 <- 0+1
nro1 = nro2 //  1
nro2 = nroN //  1
  i <- i +1 // 1

Escribe nro1 // 1

nroN = nro1 + nro2 // 2 <- 1+1
nro1 = nro2 //  1
nro2 = nroN //  2

 i <- i+1 // 2

Escribe nro1 // 1

nroN = nro1 + nro2 // 3 <- 1+2
nro1 = nro2 //  2
nro2 = nron //  3

 i <- i+1 // 3

Escribe nro1 // 2

nroN = nro1 +nro2 // 5 <- 2+3
nro1 = nro2 //  3
nro2 = nroN //  5

*Termina el primer ciclo*
---------------------------------------------
"Orden Inverso"
 
Comienza el segundo ciclo que empieza en el numero ingresado (3) y termina en 0     

i <- 3
---------
nroN = nro2 - nro1 // 2 <- 5 - 3
nro2 = nro1 //  3
nro1 = nroN / 2

Escribe nro1 // 2

i <- i - 1 // 2

nroN = nro2 - nro1 // 2 <- 3 - 2
nro2 = nro1//  2
nro1 = nroN // 1

Escribe nro1 // 1
 
 i <- i - 1 //1

nroN = nro2 - nro1 // 1 <- 1 - 2
nro2 = nro1 // 1
nro1 = nroN //  1

Escribe nro1 // 1
 
i<- i - 1 //0

nroN = nro2 - nro1 // 0 <- 1 - 1
nro2 = nro1 //  1
nro1 = nroN // 0
 
Escribe nro1 // 0
 
*Termina el segundo ciclo*
 ---------------------

 *Termina el Programa*

 Codigo del Programa

import java.util.Scanner;

public class Fibonacci {

    public static void main(String[] args) {
        Scanner leer = new Scanner(System.in);
       
        // Variables
        long numeroFibonacciN, numeroFibonacci1 = 0, numeroFibonacci2 = 1, numeroIngresado;
            // Solicita el ingreso de N
            System.out.println("Porfavor ingrese el valor N de numeros a mostrar");
            numeroIngresado = leer.nextLong();
            // Si el numero es mayor que cero ejecute el resto
            if (numeroIngresado > 0) {
                // anuncio orden
                System.out.println("Orden Normal");
               
                // Comienza el primer ciclo
                for (long i = 0; i <= numeroIngresado; i++) {

                    System.out.println(numeroFibonacci1);
                    numeroFibonacciN = numeroFibonacci1 + numeroFibonacci2;
                    numeroFibonacci1 = numeroFibonacci2;
                    numeroFibonacci2 = numeroFibonacciN;
                }
                //Comienza el segundo ciclo
                System.out.println("Orden inverso");

                for (long j = numeroIngresado; j >= 0; j--) {
                    numeroFibonacciN = numeroFibonacci2 - numeroFibonacci1;
                    numeroFibonacci2 = numeroFibonacci1;
                    numeroFibonacci1 = numeroFibonacciN;
                    System.out.println(numeroFibonacci1);
                }
            }
            // Si N es menor a cero Envie mensaje de error y termina el programa
            else {
                System.out.println("El numero debe ser mayor a cero para que la sucesión sea valida");
            }
       
    }
}

Nota: puede que paresca que puede llegar a números mas altos, pero el dato "Long" tiene un limite en la memoria lo cual un numero ingresado muy elevado puede conllevar a sobreecarga e imprimiría números aleatorios.

Demostraciones


 

               
                                          
Reflexión
  En esta ocasion complico un poco al principio de como se podria implementar los ciclos en este programa y la logica que habia que implementar, pero con el tiempo deidicado a la actividad y se pudo crear este programa con ciclos "for" y me ayudo a intender mejor este concepto.
  Te invito a que si tienes dudas o quieres complementar esta actividades mediante opiniones, otras informaciones no tengas miedo de emitir tus comentarios, a participar donde cada comentario hará que se haga más interactivo este espacio.