lunes, 21 de octubre de 2019

Nodo y Apuntador


primero vedemos saber que es un nodo y que es un puntero

vedemos saber que son para seguir con el siguiente tema la información que se mostrara a continuación es gracias a nuestro catedrático ing. José Reynaldo Molina Menjívar. quien nos aportó la información ahora mostrada

¿Qué es un nodo?

Un nodo es un elemento de una Lista Enlazada, cada nodo será una estructura o registro que dispondrá de varios campos y al menos uno de esos campos será un puntero o referencia a otro nodo.


lo que yo entiendo sobre esta información es lo siguiente que un nodo es una estructura de espacios donde se puede tener texto o números. todos esos campos serán parte del nodo y almenos uno debe ser un puntero al otro nodo


¿Qué es un Puntero?

Un puntero o Apuntador es una variable que hace referencia a una región de la memoria.

lo que yo entiendo se puntero o apuntador según e investigado es que un puntero o apuntador es una variable para almacenar direcciones y accede a la información que contiene la dirección de la memoria a la que apunta




CLASE NODO


Public class Nodo {   <---------------------Estructura
  public int dato;  <-----------------------contenido del nodo
  public Nodo siguiente;  <---------------------puntero siguiente
  public Nod (int d){
    this.dato=d;           <------------------------constructor Default
  }
  public Nodo(int d, Nodo n){
    dato = d;                <-------------------------constructor con dato y puntero
    Siguiente = n;
  }

}


Listas Enlazadas

CONCEPTO

Una lista enlazada consta de un número de elementos, y cada elemento tiene dos componentes (campos), una referencia al siguiente elemento de la lista y un valor, que puede ser de cualquier tipo . En resumen una lista enlazada es una colección o secuencia de elementos dispuestos uno detrás de otro, en la que cada elemento se conecta al siguiente elemento por un “enlace” o “referencia”.


La representación gráfica más extendida es aquella que utiliza una caja (un rectángulo) con dos secciones en su interior. En la primera sección se escribe el elemento o valor del dato, y en la segunda sección, el enlace o referencia mediante una flecha que sale de la caja y apunta al nodo siguiente

La Figura muestra diferentes representaciones gráficas utilizadas para dibujar el campo enlace del último nodo.

CLASIFICACIÓN DE LAS LISTAS ENLAZADAS

1.Listas Simplemente enlazadas
2.Listas doblemente enlazadas
3.Lista Circular simplemente enlazada.
4.Lista Circular doblemente enlazada.


Ejercicios Recursividad

Aquí tenemos 2 ejemplos en la aplicación de algoritmos recursivos:


SUCESION DE fibonacci

Resultado de imagen para SUCESION DE fibonacci

La sucesión de Fibonacci es conocida desde hace miles de años, pero fue Fibonacci (Leonardo de Pisa) quien la dio a conocer al utilizarla para resolver un problema.

El primer y segundo término de la sucesión son

Introducción a la sucesión de Fibonacci: concepto, fórmulas y problemas resueltos. Secundaria, ESO y Bachillerato.
Los siguientes términos se obtienen sumando los dos términos que les preceden:

El tercer término de la sucesión es

Introducción a la sucesión de Fibonacci: concepto, fórmulas y problemas resueltos. Secundaria, ESO y Bachillerato.

El cuarto término es

Introducción a la sucesión de Fibonacci: concepto, fórmulas y problemas resueltos. Secundaria, ESO y Bachillerato.

El quinto término es

Introducción a la sucesión de Fibonacci: concepto, fórmulas y problemas resueltos. Secundaria, ESO y Bachillerato.

El sexto término es

Introducción a la sucesión de Fibonacci: concepto, fórmulas y problemas resueltos. Secundaria, ESO y Bachillerato.

El (n+1)-ésimo término es

Introducción a la sucesión de Fibonacci: concepto, fórmulas y problemas resueltos. Secundaria, ESO y Bachillerato.


EJERCICIO EN JAVA

TORRES DE HANOI

Resultado de imagen para torres de hanoi
El fin de las Torres de Hanoi es trasladar la torre de discos a lo largo de tres varillas, desde la configuración inicial a una configuración final indicada. Esta torre està fraccionada en bloques o discos, los cuales deberá mover para restaurar de nuevo la torre en su posición final.

La segunda varilla consiste en una torre de “apoyo” que le permite colocar los discos de manera temporal. No obstante, uno de los requerimientos de la prueba es que debe realizar el menor número de movimientos posible y con el menor número de fallos.


EJERCICIO EN JAVA ejercicio realisado por ing. José Reynaldo Molina Menjívar. 

package torreshanoi;

/**

 *

 * @author NormanGhost

 */

public class TorresHanoi {

    public static void main(String[] args) {

        System.out.print ("Torres de hanoi");

        TorresHanoi objHanoi = new TorresHanoi();

        objHanoi.torresHanoi (3,1,2,3);

        System.out.println("juego Finalisado...  XD");

    }

    //creando metodo recursivo para solucionar la torre de hanoi

    public void torresHanoi(int discos , int torre1 , int torre2 , int torre3){

        if (discos==1){

            System.out.println("Mover disco de torre "+torre1+" a torre "+torre3);

        }else{

            torresHanoi(discos-1,torre1,torre3,torre2);

            System.out.println("Mover disco de torre "+torre1+" a torre "+torre3);

            torresHanoi(discos-1,torre2,torre1,torre3);
        }  
    }  
}



los algoritmos son gracias a la pagina : oscarblancarteblog

Entrada: Tres pilas de números origen, auxiliar, destino, con la pila origen ordenadaSalida: La pila destino
1.         si origen   entonces
1.         mover el disco 1 de pila origen a la pila destino (insertarlo arriba de la pila destino)
2.         terminar
2.         si no
1.         hanoi( ,origen,destino, auxiliar)     //mover todas las fichas menos la más grande (n) a la varilla auxiliar
3.         mover disco n a destino            //mover la ficha grande hasta la varilla final
4.         hanoi (auxiliar, origen, destino) //mover todas las fichas restantes, 1…n–1, encima de la ficha grande (n)
5.         terminar


Recursividad





La recursividad


Que es la Recursividad?

Como su nombre lo indica  la recursibidad va utilizando los mismos recursos contantementes haciendo que el problema sea mas facil de ejecutar.
Pondremos un ejemplo muy sencillo: La muñeca Matrushka, esta muñeca de madera contiene dentro otra muñeca cada vez mas pequeña.

Resultado de imagen para matrioska

En Java S

Este es el objeto que vamos a utilizar cuando hablemos de algoritmos recursivos que cumplirán una función dentro del mismo procedimiento 
La recursividad es una alternativa diferente para implementar estructuras de repetición (ciclos) también la podemos utilizar en cualquier situación en la cual la solución pueda ser expresada como una secuencia.

Por que es importante utilizar la recursividad en Java?


La recursión permite programar algoritmos aparentemente complicados con un código simple y claro, ahorrando trabajo al programador. A simple vista parece la solución perfecta para muchos problemas, pero hay que tener en cuenta que en ocasiones ralentizará el programa en exceso. Por ejemplo, la función factorial en forma recursiva:
Estructura general de un algoritmo recursivo

Resultado de imagen para estructura general de un algoritmo recursivo


domingo, 13 de octubre de 2019

Memoria Dinámica


Memoria Dinámica: La memoria dinámica es lo contrario a la memoria estática. su tamaño crece durante su ejecución, por lo que hemos investigado sobre la memora dinámica es que la memoria dinámica su espacio puede variar durante la ejecución del programa.

Como podemos diferenciar entre una memoria dinámica y una memoria estática. 
                                         
La memoria estática:








Supongamos que tenemos un vector de 5 espacios que iremos llenando empezando desde 0 terminando asta índice máximo de este vector que es <5 







Una vez que el vector este lleno ya no se podrá almacenar mas datos como lo realizamos en el ejercicio anterior definimos un límite de ingresos que podría realizar el usuario.

            La memoria dinámica:



   
            
Supongamos que realizamos un ingreso de un dato creamos un vector una ves lleno podemos preguntar al usuario si desea ingresar otro dato



                              

Si el usuario responde si tendremos un vector de 2 espacios y así continuamente podemos seguir hasta donde el usuario defina que ya no desea ingresar mas datos


A continuación, explicaremos un poco sobre la memoria dinámica con un ejercicio este ejercicio fue realizado en una clase Estructura de Datos en la universidad Cristiana de las Asambleas de Dios impartida por el ing. José Reynaldo Molina Menjívar.

El nombre de nuestro proyecto será javaapplication6

En el primer paso creamos un objeto de ArrayList llamado cadenas declaramos que cadenas será nuestro nuevo arraylist.declaramos dos variables tipo String una llamada respuesta y otra llamada frase.

En el segundo paso capturamos la frase, declaramos que frase será igual al dato ingresado por el usuario mostrando el mensaje ingrese la frase dando a entender al usuario que deberá ingresar una frase.

En el tercer paso agregamos la frase al arraylist cadenas.add(frase)

En el cuarto paso preguntamos si deseamos ingresar otra frase si la respuesta es repetirá el proceso ingresando una nueva frase. solo cuando la respuesta sea no pasaremos al siguiente paso que es el paso 5.

En el quinto paso mostraremos el contenido del arraylist para ello utilisaremos el metoso  SIZE y GET del arraylist donde el size Devuelve la cantidad de elementos del arrarylist y el get nos devuele el elemento indicado

package javaapplication6;
   
    import java.util.ArrayList;
    import javax.swing.JOptionPane;

public class javaapplication6 {

    public static void main(String[] args) {
       
        //PASO 1: HACER UN OBJETO DE ARRAYLIST
        ArrayList <String> cadenas;
        cadenas = new ArrayList <String>();
       
        String frase, respuesta;
        do{
           //paso 2:capturar la frace
           frase = JOptionPane.showInputDialog(null,"Ingrese la frace");
          
           //paso 3: agregar una frace al ARRAYLIST
           cadenas.add(frase);
          
           //paso 4: preguntar si desea continuar o no
           respuesta = JOptionPane.showInputDialog(null,"desea ingresar otra frase ( SI  / NO )");
           respuesta = respuesta.toUpperCase();
          
        }while(respuesta.equals("SI"));
       
        //paso 5: mostrar el contenido ArrayList 
        //VAMOS A UTILISAR AQUI LOS METODOS SIZE Y GET DEL ARRAY LIST
        System.out.println("las frases originales son: ");
        System.out.println("---------------------------");
        int i ;
        for (i=0; i<cadenas.size(); i++){
            System.out.println(cadenas.get(i));  
        }
        System.out.println("------------------------\n\n");              
    }   
}



ingresamos la frase que en este caso es Hola

una ves ingresada la frase nos pregunta si queremos ingresar otra frase en este caso respondemos "si"









después de responder si nos pedirá ingresar otra frase que en este caso sera "como estas"










despues de ingresar el frase nos volvera a preguntar si queremos ingresar otra frase en este caso responderemos que "no" 








una ves respondemos que "no" nos imprime las frases ingresadas

hola

como estas






Para mas ejemplos de memoria dinámica les presentamos los siguientes vídeos:

vídeo realizado por SHELIMBER HUEZO


vídeo realizado por NORMAN ALDAIR


jueves, 10 de octubre de 2019

Memoria Estatica


antes de hablar sobre memoria estática debemos conocer que es la memoria .

La memoria: la memoria es un espacio para guardar la información. Por lo que entiendo de memoria según e investigado Son partes lógicas dentro de partes físicas (memoria RAM) por lo tanto cuando la información es ingresada la memoria nos ayuda a almacenar esta información.

Memoria estática: Es un espacio de la memoria que mientras esta en tiempo de ejecución esta no puede ser modificada, por lo que entiendo de memoria estática es un espacio definido o reservado y mientras el programa está en ejecución esta no podrá ser modificada solo hasta que esta termine de ejecutarse y cuando ya no este ejecutándose podremos volves al código y podremos modificarlo.

·         A continuación, con la ayuda de un ejercicio realizado en una clase de estructura de datos impartida en la Universidad cristiana de las asambleas de Dios por el Ing. José Reynaldo Molina Menjívar. darémos a explicar un ejercicio sobre la memoria estatica.

o   En la parte 1 podemos observar que declaramos los arreglos así que declaramos que los arreglos serán de tipo int para almacenar los enteros y string para texto, pero como podemos observar tenemos limite de 5 espacios para guardar distintos datos en él, ya que este no puede ser modificado en el tiempo de la ejecución.

o   En la parte 2 capturamos los datos de que el usuario ingrese y con la ayuda de un for declaramos un incremento para empezar desde 0 y terminar en menos 5 para capturar solo 5 datos.

o   En la parte 3 imprimimos y mostramos los datos del arreglo.

o   En la parte 4 ordenamos los elementos del array numérico con la ayuda de un Arrays.sort(numeros).

o   En la parte 5 rellenamos los arreglos con palabras con la ayuda de un array.fill

o   Y por último en la parte 6 copiamos los elementos de números a numero2 con un arrarycopy

Ejercico:
package javaapplication6;

import java.util.Arrays;
import javax.swing.JOptionPane;
public class javaapplication6 {

    public static void main(String[] args) {
       
        // P1. DECLARAR LOS ARREGLOS
        int numeros[] = new int[5];
        int numeros2[] = new int[numeros.length];
        String palabras[] = new String[5];
       
        // P2. CAPTURAR LOS DATOS QUE EL USUARIO INGRESE
        int i;
            //INCREMENTO
        for (i=0; i<5;  i++){
            numeros[i]=Integer.parseInt(JOptionPane.showInputDialog(null,"Ingresa el elemento: " + i));
        }
       
        //P3. MOSTRAR LOS DATOS DEL ARREGLO
        System.out.println("Los datos sin ordenar son: ");
        for (i=0; i<5; i++){
            System.out.println("["+numeros[i]+"]");
        }
       
        //P4. ORDERNAR LOS ELEMENTOS DEL ARRAY NUMEROS
        System.out.println("Los elementos ordenados son:");
        Arrays.sort(numeros); // ACA SE ORDENAN LOS ELEMENTOS DEL ARREGLO
        for (i=0; i<5; i++){
            System.out.println("["+numeros[i]+"]");
        }
       
        //P5. RELLENAR EL ARREGLO CON PALABRAS
        Arrays.fill(palabras,"Voy a pasar la Materia");
        for (i=0; i<5; i++){
            System.out.println("["+palabras[i]+"]");
        }
       
        //P6. COPIANDO LOS ELEMENTOS DEL ARREGLO NUMEROS A NUMEROS2
        System.arraycopy(numeros, 0, numeros2, 0, numeros.length);
        System.out.println("Los datos copiados del arreglo numeros a numeros2 son:");
        for (i=0; i<5; i++){
            System.out.println("["+numeros2[i]+"]");
        }              
    }   
}

a continuación les dejo un un vídeo de mi canal de YouTube donde realizamos un ejercicio donde utilizamos el método  Equals.







Introduccion

https://app.emaze.com/mobile/@aozrctoiq?tgjs=0