miércoles, 25 de septiembre de 2013

Recorrido por Niveles En Arboles

Hola amig@s en esta ocacion les mostrare la funcion de recorrido por niveles (anchura) en arboles.
Como funciona este recorrido pues como su nombre lo dice va por niveles comenzando por la raiz hasta llegar al ultimo nodo del arbol; primeramente ingresamos el nodo raiz en una cola, luego sacamos este valor de la cola y mostramos su contenido y ahora vemos si hay valores en los nodos izquerdo y derecho respectivamente si no son nulos insertamos sus valores en la cola repetimos esto hasta que la cola quede vacia.

Seudocodigo:

recorrido_nivel(Tarbol a)
nodo aux;
si (a != NULL)
encolar(a);
mientras (!colavacia()) hacer
aux=desencolar();
   mostrar aux
si (aux->izq != NULL) encolar(aux->izq);
si (aux->der != NULL) encolar(aux->der);
fin mientras
fin si


Capturas:



Codigo:

Recorrido por nivel:

void arbol::Recorrido_Nivel(TREE aux){
	if(aux){
	Cola cola;
	TREE a;
		cola.insertar(aux);
		while(!cola.colavacia()){
			a=cola.quitar();
			cout<valor<Izdo!=NULL){
				cola.insertar(a->Izdo);
			}
			if(a->Dcho!=NULL){
				cola.insertar(a->Dcho);
			}
		}
	}
}


Cola.h
#include 
#include 
using namespace std;

////////////////////////cola
class nodoc{
public:
	Tarbol dato;
	nodoc *siguiente;
	nodoc(Tarbol n, nodoc *sig=NULL){
		dato=n;
		siguiente=sig;
	}
};
typedef nodoc *pnodo;

class Cola{
//private:
public:
	pnodo frente;
	pnodo final;

	Cola(){
		frente=NULL;
		final=NULL;
	}
	bool colavacia();
	void insertar(int v);
	int quitar();
};


bool Cola::colavacia(){return frente==NULL;}

void Cola::insertar(int v){
	if(colavacia()){
		frente=new nodoc(v);
		final=frente;
	}else{
		final->siguiente=new nodoc(v);
		final=final->siguiente;
	}
}
Tarbol Cola::quitar(){
	pnodo aux;
	Tarbol x;
	if(colavacia())
		return 0;
	aux=frente;
	x=aux->dato;
	frente=frente->siguiente;
	delete(aux);
	return x;
}

descarga el código aquí.

lunes, 23 de septiembre de 2013

Mínimo Común Múltiplo (MCM) en C

Hola amig@s  esta vez les mostrare el código de Mínimo Común Múltiplo (MCM) en C con funciones.

Captura:


Código:

#include
#include
#include
int MCM(int x,int z);
int main(void){
      int a, b,respuesta;
 printf("\nMINIMO COMUN MULTIPLO...mcm(A,B)=\n\n");
    printf("\nA: ");
    scanf("%d",&a);
    printf("\nB: ");
            scanf("%d",&b);
            if (anull");
 return 0;
}
int MCM(int x,int z){
 int y=1, i=2;
  do{
            if (x%i==0){
                if(z%i==0){
     y=y*i;
     x=x/i; z=z/i;   
     i=2;
                }
                else i++;
            }
            else i++;
        } while(i<=x);
 return y=y*z*x;
}

Descarga el código desde aquí.

Máximo Común Divisor (MCD) en C

Hola amig@s en esta ocasión les mostrare el código para conocer el Máximo Común Divisor (MCD) en C utilizando funciones (módulos)

Captura:


Código:

#include
#include
#include
int mcd(int a,int b);
int main(void){
 int A,B,respuesta;
 printf("\nMAXIMO COMUN DIVISOR...mcd(A,B)=\n\n");
 printf("A= ");scanf("%i",&A);
 printf("\nB= ");scanf("%i",&B);
 if(B>A)
  respuesta=mcd(B,A);
 else
  respuesta=mcd(A,B);
 printf("\n\nmcd(%i,%i)=%i\n",A,B,respuesta);
 system("pause>null");
 return 0;
}
int mcd( int a, int b){
 int r;
 r=a-b*(a/b);
 if(r!=0){
  while(r!=0){
   a=r;
   r=b-r*(b/r);
  }
  return(a);
 }
 return(b);
}


Descarga el código desde aquí.

miércoles, 11 de septiembre de 2013

Juego Sudoku C++ y Allegro (Codigo)

Hola amig@s esta vez les traigo otro popular juego del Sudoku. Por el momento el juego Proporciona ayuda en las dificultades fácil y medio mostrando brevemente cuales números están correctamente colocados y cuales no en color verde los correctos y en rojo los erróneos.

En esta ocasión utilizaremos la herramienta de allegro llamada grabber con la cual podremos crear archivos binarios .dat donde podremos almacenar todos los archivos que utilizara nuestro juego y así llegar a ahorrarnos lineas de código  ya que no tendríamos que declarar estos archivos como lo son los BITMAP, FONT, etc. Dentro del código explico como utilizar los archivos dentro del archivo .dat.
 Capturas:





Descarga el juego mas el codigo aquí.

Descarga la herramienta grabber aquí.

lunes, 2 de septiembre de 2013

Mover Imagen Utilizando Hilos (Threads) en Java

Hola amig@s en esta ocasión les mostrare como mover 2 imagenes una con las teclas direccionales del teclado y la otra arrastrarla con el ratón, además de hacer un contador que nos muestre cuantos minutos y segundos la aplicaron ha estado activa, también reproducir un archivo MID todo esto con Hilos (Threads) para ello utilizaremos un IDE como entorno de programacion en mi caso utilizare netbeans.

Imagenes:




dentro de nuestro proyecto crearemos un JFrame form y en modo diseñador utilizaremos 4 JLabels, 1 JPanel, 1 JTextField y JButton.

los re-nombramos para poderlos identificar mas facilmente, yo los llame así:


JLabel jLabel2;//esta sera la etiqueta del JTextField
JPanel jPanel1;
JButton jbmover;//mientras no se presione no se podrán mover las imágenes
JLabel jlbola;//este JLabel  sera la imagen que moveremos con el ratón
JLabel jlimagen1;//este JLabel  sera la imagen que moveremos con el teclado
JLabel jlimagen2;//este JLabel  sera la imagen de fondo
JTextField jttiempo;//aqui mostraremos el tiempo transcurrido

ahora cambiamos la vista de diseñador a código y dentro de la clase colocamos lo siguiente:

 Sonido miHilo;
    Thread miThread;
    boolean band;
    HiloTiempo otrohilo=new HiloTiempo();

clase interna

private class HiloTiempo extends Thread {

        @Override
        public void run() {
            int contador = 0,min=0;
            while (true) {              
                    jttiempo.setText("0"+ min+":"+ contador);
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException ex) {
                    Logger.getLogger(Animacion.class.getName()).log(Level.SEVERE, null, ex);
                }
                contador++;
                if(contador==60){
                    contador=0;
                    min++;
                }
            }
        }
    }


dentro de nuestro constructor colocamos esto:

    miHilo=new Sonido();
    miThread = new Thread(miHilo);
    miThread.start(); 
    otrohilo.start();

al botón jbmover le colocamos 2 eventos:

1- KeyPressed.
2- ActionPerformed.

debería quedar algo así:

 private void jbmoverKeyPressed(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_jbmoverKeyPressed
        
        if(band==true){
            moverImagen(evt);
        }
    }//GEN-LAST:event_jbmoverKeyPressed

    private void jbmoverActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jbmoverActionPerformed
         band=true;
    }//GEN-LAST:event_jbmoverActionPerformed

al JLabel jlbola le colocaremos el evento: MouseDragged.

debería quedar algo así:

private void jlbolaMouseDragged(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jlbolaMouseDragged
        if(band==true){
            moverImagen2(evt);
        }
    }//GEN-LAST:event_jlbolaMouseDragged

también declararemos el método para mover la imagen con el ratón:

public void moverImagen2(java.awt.event.MouseEvent evento) {
         jlbola.setLocation(jlbola.getX() + evento.getX() - jlbola.getWidth()/2 , jlbola.getY() + evento.getY() - jlbola.getHeight()/2);          

}

estos son los los métodos para mover la imagen con el teclado:

 private void moverImagen(java.awt.event.KeyEvent evt) {
        switch (evt.getKeyCode()) {
            case KeyEvent.VK_UP:
                moverArriba();
                break;
            case KeyEvent.VK_DOWN:
                moverAbajo();
                break;
            case KeyEvent.VK_LEFT:
                moverIzq();
                break;
            case KeyEvent.VK_RIGHT:
                moverDer();
                break;
            default:
                System.out.println("No valida");
        }
    }

    private void moverArriba() {
        jlimagen1.setLocation(jlimagen1.getX(), jlimagen1.getY() - 10);
    }

    private void moverAbajo() {
        jlimagen1.setLocation(jlimagen1.getX(), jlimagen1.getY() + 10);
    }

    private void moverIzq() {
        jlimagen1.setLocation(jlimagen1.getX() - 10, jlimagen1.getY());
    }

    private void moverDer() {
        jlimagen1.setLocation(jlimagen1.getX() + 10, jlimagen1.getY());
    }

ahora crearemos otra clase para el sonido

import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.sound.midi.InvalidMidiDataException;
import org.jfugue.Player;

public class Sonido implements Runnable {

    public void run() {
        Player player = new Player();
        File midi=new File("lilium_intro.mid");
         while (true) {
            try {
                    player.playMidiDirectly(midi);
            } catch (IOException ex) {
                Logger.getLogger(Sonido.class.getName()).log(Level.SEVERE, null, ex);
            } catch (InvalidMidiDataException ex) {
                Logger.getLogger(Sonido.class.getName()).log(Level.SEVERE, null, ex);
            }
         }
    }
}

descarga el proyecto desde aquí.

descarga la librería jfugue desde aquí o visita su pagina oficial.