miércoles, 31 de julio de 2013

Potencia en C sin utilizar la funcion pow()

Hola amig@s esta vez les enseñare como elevar un numero X a una base Y sin utilizar la función pow() en C.

Captura:

Codigo:


#include 
#include 

int main(int argc, char *argv[])
{
  int a, b,i,mult=1;
  printf("\nIngrese el primer numero: ");
  scanf("%d",&a);
  printf("\nIngrese el segundo numero: ");
  scanf("%d",&b);
  for(i=1;i<=b;i++){
     mult*=a;                  
  }
  printf("\nEl resultado de %d ^ %d es: %d\n\n",a,b,mult);
  system("PAUSE"); 
  return 0;
}


Descarga el código fuente desde aquí.

Multiplicar un numero sin utilizar * en C

Hola amig@s en esta ocasión les mostrare como multiplicar un numero sin utilizar * en C

Captura:


Código:

#include 
#include 

int main(int argc, char *argv[])
{
  int a, b,i,suma=0;
  printf("\nIngrese el primer numero: ");
  scanf("%d",&a);
  printf("\nIngrese el segundo numero: ");
  scanf("%d",&b);
  for(i=1;i<=b;i++){
     suma+=a;                  
  }
  printf("\nEl resultado de multiplicar %d x %d es: %d\n\n",a,b,suma);
  system("PAUSE"); 
  return 0;
}


Descarga el código fuente desde aquí.

Conocer el menor de dos números en C

Hola amig@s esta vez les traigo el código para conocer el menor de dos números en C.

Captura:


Código:


#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
    int a,b;
    printf("\nIngrese el primer numero: ");
    scanf("%d",&a);
    printf("\nIngrese el segundo numero numero: ");
    scanf("%d",&b);
    /*funcion simplificada de if y else siempre y cuando solo sea condiciones de 1 linea
              if((a<b)){
                    printf("\nEl numero menor es: %d\n\n",a)
              }else{
                    printf("\nEl numero menor es: %d\n\n",b)
              }
      utilizando operador (a<b)? si es verdadero (if) : si no es verdadero (else)*/
    (a<b)?printf("\nEl numero menor es: %d\n\n",a):printf("\nEl numero menor es: %d\n\n",b);
  system("PAUSE");
  return 0;
}


Descarga el código desde aquí

Conocer el mayor de 2 numeros en c

Hola amig@s esta vez les traigo el codigo sencillo para conocer el mayor de dos numeros en c haciendo uso del operador condicional.

Captura:


Codigo:


#include 
#include 

int main(int argc, char *argv[])
{
    int a,b;
    printf("\nIngrese el primer numero: ");
    scanf("%d",&a);
    printf("\nIngrese el segundo numero numero: ");
    scanf("%d",&b);
    /*funcion simplificada de if y else siempre y cuando solo sea condiciones de 1 linea
      utilizando operador (a>b)? si es verdadero (if) : si no es verdadero (else)*/
    (a>b)?printf("\nEl numero mayor es: %d\n\n",a):printf("\nEl numero mayor es: %d\n\n",b);
  system("PAUSE"); 
  return 0;
}


Descarga el codigo desde aqui.

jueves, 25 de julio de 2013

Grafos en C++

Hola amig@s en esta entrega les tengo el código de grafos en el cual podremos utilizar un grafo pre-guardado o crear uno nuevo, crear la matriz de adyacencia, la matriz de caminos, mostrar la lista de nodos adyacentes, recorrido en profundidad, recorrido en anchura, mostrar la matriz de Floyd y mostrar la matriz de Warshall.

Capturas:









Descarga el código desde aquí.

viernes, 19 de julio de 2013

Dibujar un cuadrado, un triángulo y un circulo en applet

Hola amig@s en esta entrega les mostrare como dibujar un cuadrado, un triángulo y un circulo en applet cada uno se dibujara al presionar el botón correspondiente a dicha figura.


Capturas:




Código:

import java.applet.Applet;
import java.awt.Button;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

/**
 *
 * @author MARIO
 */
public class Figuras extends Applet implements ActionListener {

    Button bt1, bt2, bt3;
    int indice;
    final Color[] colores = {Color.red, Color.blue, Color.orange};

    public void init() {
        setBackground(Color.yellow);
        bt1 = new Button("Cuadrado");
        bt2 = new Button("Triangulo");
        bt3 = new Button("Circulo");
        bt1.setBackground(Color.red);
        bt1.setForeground(Color.green);
        bt1.addActionListener(this);
        bt2.setBackground(Color.blue);
        bt2.setForeground(Color.white);
        bt2.addActionListener(this);
        bt3.setBackground(Color.orange);
        bt3.setForeground(Color.MAGENTA);
        bt3.addActionListener(this);
        add(bt1);
        add(bt2);
        add(bt3);
    }

    public void paint(Graphics g) {
        g.setColor(colores[indice]);
        switch (indice) {
            case 0:
                g.fillRect(40, 40, 40, 40);
                break;
            case 1:
                int [] x = new int [4];
  x [0] = 5; x [1] = 70; x [2] = 70; x [3] = 5;
  int [] y = new int [4];
  y [0] = 70; y [1] = 5; y [2] = 70; y [3] = 70;
  g.drawPolygon (x, y, 4);
                break;
            case 2:
                g.fillOval(120, 96, 40, 40);
                break;
        }
    }

    public void actionPerformed(ActionEvent e) {
        Object boton = e.getSource();
        if (boton.equals(bt1)) {
            indice = 0;
        } else if (boton.equals(bt2)) {
            indice = 1;
        } else {
            indice = 2;
        }
        repaint();
    }
}


Puedes descargar el código desde aquí.

jueves, 18 de julio de 2013

Dibujar Cara en Applets Java

Hola amig@s en esta nueva entrega les mostrare como crear un applet que dibuje una carita y al presionar un botón cambiar el color de todo lo dibujado

Captura:



Código:

import java.applet.Applet;
import java.awt.Button;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

/**
 * @(#)Cara.java
 *
 * Cara Applet application
 *
 * @author Alexander
 * @version 1.00 2013/7/18
 */
public class Cara extends Applet implements ActionListener {

    Button btn = new Button("Cambiar Color");
    int indice = 1;

    public void init() {
        add(btn);
        btn.addActionListener(this);
    }

    public void paint(Graphics g) {
        if (indice == 1) {
            btn.setBackground(Color.black);
            btn.setForeground(Color.lightGray);
            setBackground(Color.red);
            g.fillOval(150, 150, 120, 120);
            g.setColor(Color.green);
            g.fillOval(170, 170, 20, 20);
            g.fillOval(220, 170, 20, 20);
            g.drawLine(200, 175, 200, 220);
            g.drawArc(180, 190, 50, 50, 180, 180);
        } else {
            btn.setBackground(Color.white);
            btn.setForeground(Color.blue);
            setBackground(Color.blue);
            g.setColor(Color.pink);
            g.fillOval(150, 150, 120, 120);
            g.setColor(Color.yellow);
            g.fillOval(170, 170, 20, 20);
            g.fillOval(220, 170, 20, 20);
            g.drawLine(200, 175, 200, 220);
            g.drawArc(180, 190, 50, 50, 180, 180);
        }
    }

    public void actionPerformed(ActionEvent e) {
        Object boton = e.getSource();
        if (boton.equals(btn)) {
            if (indice != 2) {
                indice = 2;
            } else {
                indice = 1;
            }
        }
        repaint();
    }
}


Descarga el código desde aquí.

martes, 16 de julio de 2013

Búsqueda Secuencial en C++

Hola amig@s esta vez les traigo el código de Búsqueda secuencial en C++.

Explicación:

Búsqueda secuencial

Consiste en recorrer el archivo comparando la clave buscada con la clave del registro en curso. El recorrido lineal del archivo termina cuando se encuentra el elemento, o bien cuando se alcanza el final del archivo. Se puede representar algunas variantes dependiendo de si el archivo está o no ordenado.

Captura:



Código:


#include<iostream>
#include <fstream>
using namespace std;

void insertar();
void BusquedaSecuencial(int numBus);

int main(){
insertar();
cout<<endl<<endl<<"Valor a buscar: 10"<<endl<<endl;
BusquedaSecuencial(10);
system("pause");
return 0;
}
void insertar(){
ofstream out;
out.open("Salida.txt");
out<<1<<" "<<endl;
out<<2<<" "<<endl;
out<<4<<" "<<endl;
out<<6<<" "<<endl;
out<<7<<" "<<endl;
out.close();
}
void BusquedaSecuencial(int numBus){
ifstream in;
in.open("Salida.txt");
bool bandera=false;
int num;
while(!in.eof() && bandera==false){
in>>num;
if(num>=numBus){
bandera=true;
}
}
if(num==numBus){
cout<<"el elemento esta en el archivo"<<endl;
}else
cout<<"el elemento no esta en el archivo"<<endl;
}


Descarga el código desde aquí.

Busqueda Binaria C++

Hola amig@s esta vez les he traído el código de la búsqueda binaria.

Explicacion:


Binaria:
Consiste en dividir intervalos de búsqueda en dos partes , comparando el
elemento buscado con el central. En caso de no ser iguales se redefinen
los extremos del intervalos(según el elemento central sea mayor o menor
que el buscado) disminuyendo el espacio de búsqueda
El proceso concluye cuando el elemento es encontrado.

Este método funciona únicamente para arreglos ordenados .

Con cada iteración del método el espacio de búsqueda se reduce a la
mitad , por lo tanto el número de comparaciones se reduce notablemente.
Esta disminución resulta significativa cuanto más grande sea el arreglo.


Código:


#include<iostream>
using namespace std;
void binaria(int x,int v[],int n);
int main(){
 int x,v[100],n;
 do{
  cout<<"\nnumero de datos: ";
  cin>>n;
 }while(n<1||n>100);
 for(int i=0;i<n;i++){
  v[i]=i;
 }
 cout<<"\nnumero a buscar: ";
 cin>>x;
 binaria(x,v,n);
 system("pause");
 return 0;
}
void binaria(int x,int v[],int n){
 int izq=1,der=n,cent;
 bool bandera=false;
 while((izq<=der)&&(bandera==false)){
  cent=int(izq+der)/2;
  if(x==v[cent]){
   bandera=true;
  }else{
   if(x>v[cent]){izq=cent+1;}else{der=cent-1;}
  }
 }
 if(bandera==true){cout<<"\nel elemento esta en la posicion: "<<cent<<"\n\n";}
 else{cout<<"\nel elemento no se encuentra en el arreglo"<<"\n\n";}
}



Descarga el código desde aquí.

Arbol Binario en C++

Hola amigos esta vez les mostrare un arbol binario con los recorrios in-orden, post-orden y pre-orden.

Captura:



Codigo:

Arbol.cpp


#include<iostream>
#include"arbol.h"
using namespace std;

void arbol::insertar(tarbol &aux,int v){
 if(aux==NULL){
  aux=new nodo(v);
 }
 else{
  if(v<aux->dato){
   insertar(aux->izquierda,v);
  }
  else{
   if(v>aux->dato){
    insertar(aux->derecha,v);
   }
  }
 }
}

void arbol::ind(tarbol aux){
 if(aux!=NULL){
  ind(aux->izquierda);
  cout<<" num :  "<<aux->dato<<endl;
  ind(aux->derecha);
 } 
 
}

void arbol::nid(tarbol aux){
 if(aux!=NULL){
  cout<<" num :  "<<aux->dato<<endl;
  nid(aux->izquierda);
  nid(aux->derecha);
 }

}
void arbol::idn(tarbol aux){
 if(aux!=NULL){
  idn(aux->izquierda);
  idn(aux->derecha);
  cout<<" num :  "<<aux->dato<<endl;
 }
}

int main(){
 arbol a;
 cout<<"Datos: 5,4,2,6,7"<<endl<<endl;
 a.insertar(a.miarbol,5);
 a.insertar(a.miarbol,4);
 a.insertar(a.miarbol,2);
 a.insertar(a.miarbol,6);
 a.insertar(a.miarbol,7);
 cout<<"Inorden"<<endl<<endl;
 a.ind(a.miarbol);
 cout<<endl<<endl;
 cout<<"Postorden"<<endl;
 a.idn(a.miarbol);
 cout<<endl<<endl;
 cout<<"Preorden"<<endl;
 a.nid(a.miarbol);
 cout<<endl<<endl;fflush(stdin);
 system("pause");
 return 0;
}

Arbol.h


class nodo{
public: 
 int dato;
  nodo *izquierda;
  nodo *derecha;
  nodo(int v,nodo *iz=NULL,nodo *de=NULL){
   dato=v;
   izquierda=iz;
   derecha=de;
  }
class arbol;
};
typedef nodo *tarbol;

class arbol{
public:
 tarbol miarbol;
 arbol(){
  miarbol=NULL;
 }
 void arbol::insertar(tarbol &aux, int v);
 void ind(tarbol aux);
 void nid(tarbol aux);
 void idn(tarbol aux);
};



Descarga el codigo desde aqui.

Juego del Ahorcado en C

Bueno amig@s en esta ocasion les traigo uno de los juegos mas populares que podemos encontrar como lo es el juego del ahorcado en lenguaje C.

Funciones del juego:

- Permite seleccionar entre 3 categorías de palabras (Animales, Países, Difíciles).
- Podemos ingresar nuevas palabras o utilizar las que ya están guardadas.
- Muestra el numero de oportunidades restantes.
- Podemos volver a jugar nuevamente en una categoría distinta si lo deseamos.

Capturas:








Código:

Ahorcado.c

/*Version 1.0.1*/
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<conio.h>
#include<time.h>
#include<windows.h>
#include<math.h>
#include<ctype.h>

//Prototipo de funciones
void menu();
void carga();
void animales();
void paises();
void dificiles();
void juego(char palabra[50][20], int n);
void rotulo(int e);
void pieder();
void pieizq();
void made();
void maiz();
void base();
void cuerpo();
void cabeza();
void gotoxy(short x, short y);

//Funcion principal se encarga de llamar a la funciones carga y menu
int main(){
 carga();//llamada de la funcion "carga"
 menu();//llamada de la funcion "menu"
 system("pause");
return 0;
}// Termina la funcion principal
void carga(){//funcion encargada de de mostrar la barra de carga del programa
 int c, m=6;
 system("cls");
    system("color 48");
    gotoxy (30,5);printf("Cargando......");
 Sleep(200);
 for(c=15;c<=75; c++){
  m++;
     gotoxy (m,10); printf("%c",219);
     gotoxy(6,15);printf("\n\n\n\n\n\tAHORCADO V 1.0.0 ");
  Sleep(100); 
 }   
 printf("\a");system("cls");
}
void menu(){
 char op;
 do{//imprime el menu principal varias veces hasta que sea necesareo
   system("cls");
   gotoxy (30,1); printf ("JUEGO DEL AHORCADO");
   gotoxy (30,4); printf("Seleccione Categoria");fflush(stdin);
   gotoxy (30,6); printf("1.Animales");
   gotoxy (30,8); printf("2.Paises");
   gotoxy (30,10); printf("3.Dificiles");
   gotoxy (30,12); printf("4.Salir");
   gotoxy (30,14); printf("Ingrese opcion: ");
   scanf("%c",&op);
  }while(op<'1'||op>'4');//evalua los datos ingresados por el usuario
 switch(op){//seleeciona el caso ingresado por el usuario
  case '1': animales();break;// llamado a la funcion animales
  case '2': paises();break;// llamado a la funcion paises
  case '3': dificiles();break;// llamado a la funcion dificiles
  case '4':printf("\n\nGracias por utilizar nuestro programa.....\n\n");break;
 }
}
void animales(){
 char palabra[50][20]={"murcielago","tiburon","perro","chancho","gato","cerdo","gallina","elefante","vaca","serpiente","mono","rata"};
 //asignacion de palabras a una lista
 int n=0, i;
 char op;
 fflush(stdin);
 do{// muestra el menu si no se cumple la condicion
  fflush(stdin);
  system("cls");
  gotoxy (30,1); printf("CATEGORIA NOMBRE DE ANIMALES");
  gotoxy (30,4); printf("1.Ingresar nueva palabra");
  gotoxy (30,6); printf("2.Jugar con lista existente");
  gotoxy (30,8); printf("3.Retornar al menu principal");
  gotoxy (30,10); printf("    Ingrese opcion: ");
  scanf("%c",&op);
 }while(op<'1'||op>'3');//evaluacion de las datos ingresados por el usuario
  switch(op){
  case'1':// añade mas palabras a la lista 
   do{
    system("cls");
    printf("\n Digite cantidad de palabras: ");
    scanf("%d",&n);//captura el numero de palabras
   }while(n<0);
   for(i=3;i<=n+2;i++)
   {fflush(stdin);
   system("cls");
    printf("\n Ingrese palabra: ");
    gets(palabra[i]);//captura la palabra y la almacena en la pocision i de la lista
   }
   juego(palabra,n);break;//llamado a la funcion juego y la manda la lista modificada
  case'2':juego(palabra,n);break;//llama al funcion juego y le manda la lista con las palabras asignadas
  case'3':menu();break;// llama a la funcion menu
 }
}

void paises(){
 char palabra[50][20]={"afganistan","japon","alemania","cuba","venezuela","alemania","peru","paraguay","turquia","checoslovaquia","suriname","banladesh","africa"};
 //asignacion de palabras a una lista
 int n=0, i;
 char op;
 do{//  muestra el menu si no se cumple la condicion
  fflush(stdin);
  system("cls");
  gotoxy (30,1); printf("CATEGORIA NOMBRE DE PAISES ");
  gotoxy (30,4); printf("1.Ingresar nueva palabra");
  gotoxy (30,6); printf("2.Jugar con lista existente");
  gotoxy (30,8); printf("3.Retornar al menu principal");
  gotoxy (30,10); printf("    Ingrese opcion: ");
  scanf("%c",&op);
 }while(op<'1'||op>'3');//evalua los datos imgresados por el usuario
  switch(op){
  case'1':// añade mas palabras a la lista 
   do{system("cls");
    printf("\n Digite cantidad de palabras: ");
    scanf("%d",&n);//captura el numero de palabras
   }while(n<0);
   for(i=3;i<=n+2;i++){fflush(stdin);
    system("cls");
    printf("\n Ingrese palabra: ");
    gets(palabra[i]);//captura la palabra y la almacena en la pocision i de la lista
   }
   juego(palabra,n);break;//llamado a la funcion juego y la manda la lista modificada
  case'2':juego(palabra,n);break;//llama al funcion juego y le manda la lista con las palabras asignadas
  case'3':menu();break;// llama a la funcion menu
 }
}
void dificiles(){
  char palabra[50][20]={"hidraulica","clorhidrato","electrostatica","miercoles","computadora","musica","nada","sandia","puta","mundo","ahorcado","teclado","palabra"};
 //asignacion de palabras a una lista
  int n=0, i;
 char op;
 do{  // muestra el menu si no se cumple la condicion
  fflush(stdin);
  system("cls");
  gotoxy (30,1); printf("CATEGORIA PALABRAS DIFICILES");
  gotoxy (30,4); printf("1.Ingresar nueva palabra");
  gotoxy (30,6); printf("2.Jugar con lista existente");
  gotoxy (30,8); printf("3.Retornar al menu principal");
  gotoxy (30,10); printf("    Ingrese opcion: ");
  scanf("%c",&op); 
 }while(op<'1'||op>'3');//evaluacion de las datos ingresados por el usuario
  switch(op){
  case'1'://añade mas palabras a la lista 
   do{system("cls");
    printf("\n Digite cantidad de palabras: ");
    scanf("%d",&n);//captura el numero de palabras
   }while(n<0);
   for(i=3;i<=n+2;i++) {fflush(stdin);
   system("cls");
    printf("\n Ingrese palabra: ");
    gets(palabra[i]);//captura la palabra y la almacena en la pocision i de la lista
   }
   juego(palabra,n);break;//llamado a la funcion juego y la manda la lista modificada
  case'2':juego(palabra,n);break;//llamado a la funcion juego y la manda la lista modificada
  case'3':menu();break;// llama a la funcion menu
 }
}
void juego(char palabra[50][20], int n){
 int contador,longitud,i,j, e,error, m=13;
 char palabras[30], respuesta[30], letra, res, res1;
 do{system("cls");
  gotoxy (30,1); printf ("JUEGO DEL AHORCADO");
  base();//lama a la funcion base
  rotulo(0);//llama ala funcion rotulo para ver el numero de oportunidades restantes
  srand (time (NULL));
  longitud=rand()%(m+n);//genera un numero aleatorio y lo almacena en la variable longitud
  e=0;
  contador=0;
  strcpy(palabras,palabra[longitud]);//copia en la variable una variable de la lista
  longitud=strlen(palabras);//se obtiene el tamaño de la palabra y  se almacena en longitud
  gotoxy(4,30);
  for (i=0; i<longitud ; i++){fflush(stdin);
   respuesta[i]='*';//se almacena * en un vector
   printf (" %c ", respuesta[i]);// se imprime * en el lugar de las letras 
  }
  do{
   fflush (stdin);
   gotoxy (4,32); printf ("Ingrese una letra: ");
   scanf ("%c", &letra);//captura   una letra
   letra=tolower(letra);//convierte unna letra mayuscula en minuscula
   gotoxy (21,32);printf("     ");
   error=0;//se inicializa en 0
   gotoxy(4,30);
   for(j=0; j<longitud; j++)  {
    if (letra==palabras[j]){/*compara si la letra ingresada por el usuario corresponde a una posicion de la 
     palabra*/
     if(letra!=respuesta[j]){
      respuesta[j]=letra;// la susttituye por el *
      contador++;//aumenta contador en uno
     }
    }
    else{
     error++;//aumenta error en uno 
    }
    printf (" %c ", respuesta[j]);//imprime la letra correcta 
   }
   if(error==longitud){//entra si la letra ingresada no corresponde a ninguna de la palabra a adivinar
    e++;//segun la cantidad de letras erroneas aumenta en 1
   }
   rotulo(e);//llama ala funcien rotunlo y le envia e
     switch (e){//segun nel numero de errores selecciona un caso
      case 1:cabeza();break;//llama a la funcion que dibuja la cabeza
      case 2:cuerpo();break;//llama a la funcion que dibuja el cuerpo
      case 3:made();break;//llama a la funcion que dibuja la mano derecha
      case 4:maiz();break;//llama a la funcion que dibuja la mano izquierda
      case 5:pieizq();break;//llama a la funcion que dibuja la piena izquierda
      case 6:pieder();break;//llama a la funcion que dibuja la piena derecha
     }  
  }while(contador<longitud && e<6);
 
  if(e==6){//entra si ninguna de las letras corresponden ala palabra o se cometieron 6 errores
   gotoxy(4,32);printf ("Lo siento, Usted ha perdido. \n    Presione una tecla para ver la respuesta correcta");
   getch();gotoxy(4,30);
   for(j=0; j<longitud; j++){  
    printf (" %c ", palabras[j]);//imprime la palabra
   }
  }
  if(contador==longitud){//entra si todas las letras ingresadas corresponden a la palabra o se cometieron menos de 6 errores
  
   if(e==0){//si no se cometio ningun error
    gotoxy(4,32);printf ("Felicidades, Usted ha ganado sin cometer ningun error");
   }
   else{//si se cometirooon pocos errores
    gotoxy(4,32);printf ("Felicidades, Usted ha ganado, con %d intentos fallidos", e);
   }
  }
  fflush(stdin);
  gotoxy(4,35);printf ("Precione S para continuar la misma categoria....  ");
  scanf("%s",&res);fflush(stdin);
 }while(res=='S' || res=='s');//si el caracter ingresado es S repite el juego
 gotoxy(4,37);printf ("Precione N para cambiar de categoria....  ");
 scanf("%s",&res1);
 if(res1!='N' || res1!='n'){// si el caracter ingresado es N cambia de categoria
  menu();
 }
 else{
  printf("\n Gracias por usar nuestro programa......");
 }
 
}
/*funcion que muestra el rotulo en donde menciona el numero 
 de oportunidades que quedan*/
void rotulo(int e){
 int f=0;
 f=6-e;
 gotoxy (40,3); printf(" _____________________________");
 gotoxy (40,4); printf("|                             |");
 gotoxy (40,5); printf("|    Usted tiene   %d          |",f);
 gotoxy (40,6); printf("|    Oportunidades            |");
 gotoxy (40,7); printf("|_____________________________|");
}
//Funcion que imprime la  mano derecha
void made( void){
 int j;
 for(j=0;j<3;j++){
  gotoxy(19-j,10+j);
  printf("*");
 }
}
//Funcion que imprime la  mano izquierda
void maiz(void){
 int i;
 for(i=0;i<3;i++) {
  gotoxy(23-i,12-i);
  printf("*");
 }
}
// funcion que imprime el cuerpo
void cuerpo(){
 int i;
 for(i=0;i<9;i++) {
  gotoxy(20,9+i);
  printf("*");
 }
}
//funcion que imprime  la horca
void base(){
 int x,y; 
    system("mode 80");     
 for(x=2;x<=27;x++){
  gotoxy(10,x);printf("*");
 }
 for(y=11;y<=20;y++){
  gotoxy(y,2);printf("*");
 }
 for(y=5;y<=15;y++){
  gotoxy(y,28);printf("*");
 } 
 gotoxy(20,3);printf("*");
 gotoxy(20,4);printf("*");
 }
//Funcion que imprime la pierna izquierda
void pieizq(void){
 int i;
 for(i=0;i<3;i++) {
  gotoxy(21+i,18+i);
  printf("*");
 }
}
//Funcion que imprime la pierna derecha
void pieder(void){
 int i;
 for(i=0;i<3;i++) {
  gotoxy(19-i,18+i);
  printf("*");
 }
}
//Funcion que imprime la cabeza
void cabeza(){
 int i,j;
 for(i=0;i<5;i++){
  gotoxy(18+i,4);
  printf("*");
  gotoxy(18+i,8);
  printf("*");
 } gotoxy(19,5);
 ////////////////////
 for(j=0;j<3;j++){
  gotoxy(18,5+j);
  printf("*");
  gotoxy(22,5+j);
  printf("*");
 }
}
// funcio goto x y
void gotoxy(short x, short y) {
 HANDLE hConsoleOutput;
 COORD Cursor_Pos = {x, y};
 hConsoleOutput = GetStdHandle(STD_OUTPUT_HANDLE);
 SetConsoleCursorPosition(hConsoleOutput, Cursor_Pos);
}
puedes descargar el proyecto desde aquí.

lunes, 15 de julio de 2013

Agenda Electrónica con árbol AVL en C++

Hola amig@s en esta vez les traigo como hacer una agenda electrónica implementando un árbol AVL las opciones de la agenda son agregar  un nuevo contacto, buscar, eliminar, mostrar, mostrar el numero de contactos y salir.

Capturas:



Codigo:

ArbolAVL.cpp

#include 
#include 
#include 
#include 
#include "ArbolAVL.h"
using namespace std;

int main()
{

  arbol A;
  tarbol b;
  char nombre[50];
  char telefono[10];
  char direccion[50];
  char email[50];
  char op;
  int t;
 
  do{
   fflush(stdin);
      system("cls");
   cout<<"\tMenu\n\n";
   cout<<"\t1- Agregar\n";
   cout<<"\t2- Buscar\n";
   cout<<"\t3- Eliminar\n";
   cout<<"\t4- Mostrar\n";
   cout<<"\t5- Estadistica\n";
   cout<<"\t6- Salir\n\n";
   cout<<"Ingrese la opcion: ";
   cin>>op;
   fflush(stdin);
   switch(op)
   {
  case '1': {
   fflush(stdin);
      system("cls");
   cout<<"\nIngrese Nombre: ";
   gets(nombre);
   fflush(stdin);
   do{
   cout<<"\nIngrese Telefono 0000-0000: ";
   gets(telefono);
   fflush(stdin);
   t=strlen(telefono);
     }while(t!=9);
   cout<<"\nIngrese Direccion: ";
   gets(direccion);
   fflush(stdin);
   cout<<"\nIngrese Email: ";
   gets(email);
   fflush(stdin);
   A.insertar(A.miarbolito,nombre,telefono,direccion,email);
   break;
     }
  case '2':{
   fflush(stdin);
   system("cls");
   cout<<"\nNombre: ";
   gets(nombre);
   fflush(stdin);
   b=A.buscar(A.miarbolito,nombre);
   if(b!=NULL)
   {
   fflush(stdin);
   system("cls");
   cout<<"\nContacto encontrado:";
   cout<<"\n\nNombre: "<nombre;
   cout<<"\nTelefono: "<telefono;
   cout<<"\nEmail: "<email;
   cout<<"\nDireccion: "<direccion;
   system("pause");
   }
     break;
        }
  case '3':{
   system("cls");fflush(stdin);
   cout<<"\nNombre: ";
   gets(nombre);
   fflush(stdin);
   A.borrar(A.miarbolito,nombre);
   system("pause");
   break;
     }
  case '4':{
   system("cls");
            cout<<"\n\n";
   A.IDN(A.miarbolito);system("pause");
   break; 
        }
  case '5':{
      system("cls");
            A.pe=0;
   cout<<"\nNumero de contactos: "<nombre)<0 data-blogger-escaped-aux-="" data-blogger-escaped-insertar="">Izdo,nom,tel,dir,em); 
   }
   else 
   { if(strcmpi(nom,aux->nombre)>0)
    {
    insertar(aux->Dcho,nom,tel,dir,em);
    }
   }
 }
}
tarbol arbol::buscar(tarbol aux,char nom[50])
{  
 if (aux==NULL)
 {  
  return NULL;
 }
 else
 {
  if (strcmpi(nom,aux->nombre)==0)
  {
   return aux;
  }
  else
  { if (strcmpi(nom,aux->nombre)<0 data-blogger-escaped-aux-="" data-blogger-escaped-buscar="" data-blogger-escaped-return="">Izdo, nom);
   }
   else
   {
    return buscar(aux->Dcho, nom);
   }
  }
 }
}
void arbol::borrar(tarbol &aux,char nom[50])
{
 if (aux==NULL)
 {
  cout<<"contacto no encontrado no encontrado !!\n\n";
 }
 else
 {if (strcmpi(nom,aux->nombre)<0 data-blogger-escaped-aux-="" data-blogger-escaped-borrar="">Izdo, nom);
   }
    else 
    {
     if (strcmpi(nom,aux->nombre)>0)
     {
    borrar(aux->Dcho,nom);
     }
    else
    { 
    tarbol temp=aux;
    if (aux->Izdo== NULL)
     {
     aux = aux->Dcho;
     }
     else 
     {
      if (aux->Dcho == NULL)
      {
        aux = aux->Izdo;
      }
      else 
      {
       actualizar(temp,temp->Izdo);
      }
      delete  temp;
     
     }
    }
   }
 }
}
void arbol::actualizar(tarbol &temp, tarbol &aux)
{ 
 if(aux->Dcho!=NULL)
 {
  actualizar(temp,aux->Dcho);}

 else
 {
  strcpy(temp->nombre,aux->nombre);
  strcpy(temp->telefono,aux->telefono);
  strcpy(temp->email,aux->email);
  strcpy(temp->direccion,aux->direccion);
     temp=aux;
  aux=temp->Izdo;
 }
}
void arbol::IDN( tarbol aux)
{
     if(aux!=NULL)
  { 
          IDN(aux->Izdo);
          if(strcmpi(aux->nombre,"M")!=0)
    {
              cout<<"Nombre: "<< aux->nombre<<" "<telefono<<" "<email<<" "<direccion<<" "<Dcho);
      }
}

int arbol::Peso( tarbol aux)
{
    if(aux!=NULL)
 {
  pe++; 
  Peso(aux->Izdo); 
  Peso(aux->Dcho);
  return  pe;
 }
 else
 {
  return -1;
    }
}
int arbol::maximo(int a, int b)
{ 
 if(a > b)
 return a;
 else return b;
}
int arbol::altura(tarbol &aux)
{
 if(aux)
 return aux->eq;
 else return -1;    
}
void arbol::balance (tarbol &aux, char nom[50])
{ 
  if (aux)
 {       
  if (strcmpi(nom,(aux)->nombre)>0)
  {balance(aux->Dcho,nom);
  }
  else {if (strcmpi(nom,(aux)->nombre)<0 data-blogger-escaped-aux-="" data-blogger-escaped-balance="">Dcho,nom);
    }
    }
        int fe=altura(aux->Dcho)-altura(aux->Izdo);
  switch (fe)
  {
  case -2:
   {
    if (altura(aux->Izdo->Izdo) > altura(aux->Izdo->Dcho))
    RII(aux);
    else RID(aux);
    break;
   }
  case 2:
   {
   if (altura(aux->Dcho->Dcho) > altura(aux->Dcho->Izdo))
    RDD(aux);
   else 
      RDI(aux);
   break;
   }
  default:
   aux->eq = maximo(altura(aux->Izdo),altura(aux->Dcho)) +1;
  }
 }
}
void arbol::RII(tarbol &aux){
        tarbol n1=aux->Izdo;
  aux->Izdo=n1->Dcho;
  n1->Dcho=aux;
  aux=n1;
  n1 = aux->Dcho;
  if(n1)
  n1->eq = maximo(altura(n1->Izdo),altura(n1->Dcho))+1;
  aux->eq = maximo(altura(aux->Izdo),altura(aux->Dcho))+1; 
}
void arbol::RDD(tarbol &aux){
     tarbol temp;
     temp=aux->Dcho;
     aux->Dcho=temp->Izdo;
     temp->Izdo=aux;
     aux=temp;
     temp = aux->Izdo;
     if(temp)
     temp->eq = maximo(altura(temp->Izdo),altura(temp->Dcho))+1;
     aux->eq = maximo(altura(aux->Izdo),altura(aux->Dcho))+1;
}
void arbol::RID(tarbol &aux){
  RDD(aux->Izdo);
     RII(aux);
}
void arbol::RDI(tarbol &aux){
 RII(aux->Dcho);
 RDD(aux);
}

ArbolAVL.h

#include

class nodo{
public:
 char nombre[50];
 char telefono[10];
 char direccion[50];
 char email[50];
 int eq;
 nodo *Izdo, *Dcho;
 nodo(char nom[50],char tel[10],char dir[50],char em[50], nodo *Iz=NULL, nodo *Dr=NULL,int t=0){
 strcpy(nombre,nom);
 strcpy(telefono,tel);
 strcpy(direccion,dir);
 strcpy(email,em);
 eq=t;
 Izdo=Iz;
 Dcho=Dr; 
 }
 class arbol;
};
typedef nodo *tarbol; 
class arbol{
public: 
      tarbol miarbolito;   
     int pe;
  int a;
   arbol(){
   miarbolito=NULL;
   pe=0;
   a=0;
       }    
      void insertar(tarbol &aux,char nom[50],char tel[10],char dir[50],char em[50]);
      tarbol buscar(tarbol aux,char nom[50]);
      void borrar(tarbol &aux,char nom[50]);
      void actualizar(tarbol &temp, tarbol &aux);
      void balance(tarbol &aux, char nom[50]);
      int maximo(int a, int b);
      void IDN(tarbol aux);
      void RDD(tarbol &aux);
      void RDI(tarbol &aux);
      void RID(tarbol &aux);
      void RII(tarbol &aux);
      int Peso(tarbol aux);
      int altura(tarbol &aux);
};


puedes descargar el proyecto desde aquí.

Mostrar asteriscos como contraseña en C

Hola amig@s ahora les mostrare como ocultar con asteriscos una letra o un carácter cuando lo se escriba omite los espacios asi como si presionamos retroceso elimina un asterisco.

Captura:


Código:

#include 
#include 
#include 
#include 

int main(int argc, char *argv[]){
   char codigo[20];
 int i=0;
 printf("Contraseña: ");
 while(codigo[i]!=13){
        //Capturamos carácter 
        codigo[i]=getch();   
        //Si es un carácter válido y no se ha sobrepasado el límite de 20 caracteres se imprime un asterisco 
        if(codigo[i]>32 && i<20) { 
             putchar('*'); 
             i++; 
        } 
        //Si se pulsa la tecla RETROCESO, se retrocede un carácter, se imprime un espacio para eliminar el asterisco y se vuelve a retroceder para que el siguiente asterisco se coloque a continuación del anterior. 
        else 
      if(codigo[i]==8 && i>0){ 
               putchar(8); 
               putchar(' '); 
               putchar(8); 
               i--;  
            } 
    } 
 printf("\n\n");
  system("PAUSE"); 
  return 0;
}

puedes descargar el proyecto desde aquí.

Agenda Electronica con Arboles ABB en C++

Esta vez les traigo una agenda electronica implemetando arboles ABB, las funciones de la agenda son: agregar un nuevo contacto, buscar, eliminar, mostrar todos los contactos y mostrar el numero de contactos dentro de la agenda.

 Capturas:




Codigo:

Agenda.cpp


#include 
#include 
#include "agenda.h"
using namespace std;

int main()
{
  arbol A;
  Tarbol b;
  char nombre[30];
  char telefono[10];
  char direccion[30];
  char Email[40];
  int op;
  A.insertar(A.miarbol,"m"," 1"," 1"," 1");
  cout<>op;
	  switch(op)
	  {
	  case 1:
		  {fflush(stdin); system("cls");
			  //agregar
			
			cout<nombre<telefono<Email<direccion<nombre)<0){
			 insertar(aux->Izdo,nom,tel,dir,e); 
			}else if(strcmpi(nom,aux->nombre)>0 ){
			insertar(aux->Dcho,nom,tel,dir,e);}
	
	    }

}
Tarbol arbol::buscar(Tarbol aux,char nom[30])
{  
	if (aux==NULL){  
		return NULL;}
	else {if (strcmpi(nom,aux->nombre)==0){
				return aux;}
	else {	if (strcmpi(nom,aux->nombre)<0){
				return buscar(aux->Izdo, nom);}
			else{ return buscar(aux->Dcho, nom);}}
		}
}

void arbol::borrar( Tarbol &aux,char nom[30])
{
	if (aux==NULL){
		cout<<"contacto no encontrado no encontrado !!";}
	else {if (strcmpi(nom,aux->nombre)<0){
	           borrar(aux->Izdo, nom);}
	      else {if (strcmpi(nom,aux->nombre)>0){
				borrar(aux->Dcho,nom);}
				else{ Tarbol temp=aux;
				if (aux->Izdo== NULL){
					aux = aux->Dcho;
					}else {if (aux->Dcho == NULL){
								aux = aux->Izdo;}
							else {reemplazar(temp,temp->Izdo);}
						
					delete  temp;
					}
				}
		  }
	}
}
void arbol::reemplazar(Tarbol &temp, Tarbol &aux)
{ 
	if(aux->Dcho!=NULL){
		reemplazar(temp,aux->Dcho);}
	else{
		strcpy(temp->nombre,aux->nombre);
		strcpy(temp->telefono,aux->telefono);
		strcpy(temp->Email,aux->Email);
		strcpy(temp->direccion,aux->direccion);
		
	    temp=aux;
		aux=temp->Izdo;
	}
}



void arbol::Inorden( Tarbol aux){//muestra de la A-Z
if(aux!=NULL){
 Inorden(aux->Izdo); //recorre el subárbol Izquierdo
 if(strcmpi(aux->nombre,"m")!=0){
	 cout<<"--NOMBRE: "<< aux->nombre<<" "<telefono<<" "<Email<<" "<direccion<<" "<Dcho); //recorre el subárbol Derecho
}

}


int arbol::Peso( Tarbol aux)//muestra el numero de contactos
{
   	if(aux!=NULL){
		p++; 
		Peso(aux->Izdo); //recorre el subárbol Izquierdo
		Peso(aux->Dcho);
		return  p;
	}else {
		return -1;}

}




Agenda.h

#include


class nodo{
public:
	char nombre[30];
	char telefono[10];
	char direccion[30];
	char Email[40];
	nodo *Izdo, *Dcho;

	nodo(char nom[30],char tel[10],char dir[30],char e[40], nodo *Iz=NULL, nodo *Dr=NULL){
	strcpy(nombre,nom);
	strcpy(telefono,tel);
	strcpy(direccion,dir);
	strcpy(Email,e);
	Izdo=Iz;
	Dcho=Dr;	
	}
 class arbol;
};
typedef nodo *Tarbol; 
class arbol{
public: 
      Tarbol miarbol;	  
    	int p;
		int a;
			arbol(){
			miarbol=NULL;
			p=0;
			a=0;
	  		  }
void insertar(Tarbol &aux,char nom[30],char tel[10],char dir[30],char e[40]);
Tarbol buscar(Tarbol aux,char nom[30]);
void borrar(Tarbol &aux,char nom[30]);
void reemplazar(Tarbol &temp, Tarbol &aux);


void Inorden(Tarbol aux);


int arbol::Peso(Tarbol aux);


};


descarga todo el proyecto desde aqui.

Juego del Adivinador en C

Hola amig@s esta vez les traigo un juego escrito en C, este juego como su nombre lo dice consiste en adivinar en una matriz de 10x10 una serie de figuras sin tener que encontrar el chacal si encontramos dicha figura el juego terminara.

 Capturas:


Codigo:

#include
#include
#include
#include
int menu();
void ocultar();
int aleatorio();
int ingresar();
int main()
{
 int w=2;
 while(w!=0)
 {
 w=menu();
 switch(w)
 {
 case 1:{ocultar();}break;
 }
 }
}
void gotoxy(int xpos, int ypos)//Funcion de Posicionamiento
{
  COORD scrn;
  HANDLE hOuput = GetStdHandle(STD_OUTPUT_HANDLE);
  scrn.X = xpos; scrn.Y = ypos;
  SetConsoleCursorPosition(hOuput,scrn);
}

int menu()
{
 int q,i;
 do{
 system("cls");
 system("color F1");
 gotoxy(11,8);
 for(i=9;i<25;i++)
 {
  printf("%c",177);
 }
 gotoxy(11,13);
 for(i=9;i<25;i++)
 {
  printf("%c",177);
 }
 gotoxy(11,15);
 printf("ingrese un numero:");
 gotoxy(10,10);
 printf("\t1.jugar\n\
 \t0.salir\n");
 gotoxy(11,16);
 scanf("%d",&q);
 fflush(stdin);
 }while(q<0&&q>2);
 return q;
}
void ocultar()
{
 int i,j,aciertos=0,errores=0,x1,y1;
 char ran,z[10][10];
 char oculta[10][10]={{219,219,219,219,219,219,219,219,219,219},
      {219,219,219,219,219,219,219,219,219,219},
      {219,219,219,219,219,219,219,219,219,219},
      {219,219,219,219,219,219,219,219,219,219},
      {219,219,219,219,219,219,219,219,219,219},
      {219,219,219,219,219,219,219,219,219,219},
      {219,219,219,219,219,219,219,219,219,219},
      {219,219,219,219,219,219,219,219,219,219},
      {219,219,219,219,219,219,219,219,219,219},
      {219,219,219,219,219,219,219,219,219,219},};
 for(i=0;i<10;i++)
 {
  for(j=0;j<10;j++)
  {
   z[i][j]=aleatorio();
  }
 }
 do{
 ran=rand()%(1-31)+1;
 }while(ran==7||ran==8||ran==9||ran==10||ran==13);
 while(aciertos<100)
 {
 system("cls");
 system("color F1");
 printf("\ndebe en contrar a:%c Y procure no encontrar el chacal:%c\n\n",ran,2);
 printf("\t   0 1 2 3 4 5 6 7 8 9\n\n");
 for(i=0;i<10;i++)
 {
  printf("\t%d  ",i);
  for(j=0;j<10;j++)
  {
   printf("%c ",oculta[i][j]);
  }
  printf("\n\n");
 }
 x1=ingresar();
 y1=ingresar();
 for(i=0;i<10;i++)
 {
  for(j=0;j<10;j++)
  {
   if(z[i][j]==z[x1][y1])
   {
    oculta[i][j]=z[x1][y1];
    aciertos++;
   }
  }
  printf("\n");
 }
 if(oculta[x1][y1]==ran)
 {
  system("cls");
  system("color F0");
  printf("\n\n!!!!!!BIEN HECHO EN CONTRO A EL: %c  !!!!!\n\n\n",ran);
  printf("\t   0 1 2 3 4 5 6 7 8 9\n\n");
  for(i=0;i<10;i++)
  {
   printf("\t%d  ",i);
   for(j=0;j<10;j++)
   {
    printf("%c ",z[i][j]);
   }
   printf("\n\n");
  }
  aciertos=aciertos+100;
 }
 else
 {
  if(oculta[x1][y1]==2)
  {
   system("cls");
   system("color 0F");
   printf("\n!!!!PERDIO!!!\n");
   printf("ENCONTRO EL CHACAL..... %c\n\n\n",2);
   printf("\t   0 1 2 3 4 5 6 7 8 9\n\n");
   for(i=0;i<10;i++)
   {
    printf("\t%d  ",i);
    for(j=0;j<10;j++)
    {
     printf("%c ",z[i][j]);
    }
   printf("\n\n");
  }
   aciertos=aciertos+100;
  }
 }
 }
 system("pause");
}
int ingresar()
{
 int q=10;
 do{
 printf("ingrese la coordenada: ");
 scanf("%d",&q);
 fflush(stdin);
 }while(q<0||q>9);
 return q;
}
int aleatorio()
{
 char i;
 do{
 i=rand()%(1-31)+1;
 }while(i==7||i==8||i==9||i==10||i==13);
 return i;
}


descarga el codigo fuente desde aqui.

domingo, 14 de julio de 2013

Grafica de Seno y Coseno con TAD en C++


Bueno amig@s ahora les traigo un programa que muestra la grafica del seno y coseno

Enunciado:
Cree un TAD que permita dibujar la gráfica del coseno y seno mediante coordenadas x,y (la gráfica puede ser dibujada por *ó .) y además que pueda imprimir las coordenadas x,y de cada punto.

Captura:



Codigo:

Graficando.cpp:

#include
#include
#include
#include
#include
#include"time.h"
#include
#include
using namespace std;


#include"Graficas TAD.h"

void graficar();

int main(){
 system("mode 100");
 graficar();

 return 0;
}
void graficar(){
 coordenadas co;
 int x=2, c_y;
 double y=0;

 for(float i=0; i<=360; i+=5){
  c_y=co.coor_y_sin(i);
  coordenadas coo(x, c_y);
  coo.imprimir();

  x++;
 }
 getch();
}
Graficas TAD.h:



#include
#include
#include
#include
#include
#include"time.h"
#include
using namespace std;
 
const double PI=3.141516;

class coordenadas{
private: 
 int x;
 double y;
 int c;
public:
 coordenadas() {
  x=0; y=0; c=0;
 }
 coordenadas(int a,int b) {
  x=a; c=b;
 }

 float coor_y_sin(float i);
 float coor_y_cos(float i);
 void imprimir();
};

float coordenadas::coor_y_sin(float i
 y=ceil(cos(i/180*PI)*20)/2;
 return y;
}

void coordenadas::imprimir(){
 HANDLE stdOutput;
 COORD pos;
 stdOutput = GetStdHandle(STD_OUTPUT_HANDLE);
 pos.X =x;
 pos.Y = 12-c;
 SetConsoleCursorPosition(stdOutput, pos);
 cout<<"."<<"   ("<<x<<12-c<<")";
}
descarga el codigo fuente de aqui

Conversor de Sistemas Numericos Recursivo en C++

Bueno amig@s ahora les traigo un conversor de sistemas numericos hasta la base 32 de manera recursiva aunque el codigo es algo extenso cumple su funcion.

Captura:


Puedes descargar todo el proyecto en visual studio 2010 express aqui

sábado, 13 de julio de 2013

Mini Paint en Java

Mini Paint en Java

Hola amigos hoy les enseñare como programar un mini Paint basico en java utilizando Netbeans 7.2.1 hasta el momento puede hacer lineas circulos, elipses, cuadros, rectangulos tambien cuenta con una opcion de trazo libre

Pasos:

Creamos nuestro proyecto



Ahora extendemos nuestra clase Paint con JFrame
y declaramos las siguientes variables


Creamos el  constructor de nuestra clase e inicializamos nuestras variables



hasta ahora solo hemos inicializado nuestra variables ahora crearemos una nueva clase llamada Lienzo y para que utilizaremos esta clase pues dicha clase sera la encargada de mostrar lo que estemos dibujando a su vez sera quien escuchara las acciones de nuestro mouse para ello extenderemos nuestra clase Lienzo con la clase Canvas e implementaremos MouseListener, MouseMotionListener.


Ahora crearemos nuestro constructor el cual recibirá como parámetro el objeto Paint

E implementamos los siguientes métodos los cuales se encargan de manejar las distintas acciones del mouse y los ultimos 3 métodos son paint() seria nuestra funcion que dibujaria los distintos trazos en nuestro lienzo, update() actualizaria nuestros trazos sin borrar los anteriores y por ultimo nuevoColor() tomaria el nuevo color a utilizar




Ahora crearemos 4 nuevas clases las cuales estaran encargadas de manejar las acciones de algunos componentes como los radiobuttons, el boton limpiar y los slider estos ultimos se utilizaran en las opciones de circulo-elipse o cuadro-rectagulo dependiendo de los valores que les demos asi seran las formas a mostrar

Clase ManejadorBotonLimpiar


Clase ManejadorRadioButton


Clase SelectorAlto


Clase SelectorAncho



Si logran apreciar las clases de SelectorAlto y SelectorAncho son iguales la unica diferencia es la variable ancho y alto respectivamente nos vamos a nuestra clase Lienzo y añadimos las acciones correspondientes dentro del constructor de esta manera.



Ahora lo que falta es terminar de darle las respectivas acciones a los elementos de la clase Paint y dentro de nuestro constructor

Acciones a los radioButtons solo añadimos:
rbColores[i].addActionListener(new ManejadorRadioButton(this));  de esta manera:


Accion del boton dibujar 


Accion del boton cambiar color al presionar dicho boton se mostrara un JColorShooser (un seleccionador de color)


Accion del comboBox


Accion del boton Salir


al final de nuestro constructor colocamos lo siguiente

La primera linea hace que nuestra ventana se muestre de forma expandida.
Segunda es para establecer la decoracion.
Tercera linea definimos que estilo queremos para nuestra venana.
Cuarta linea definimos la accion del boton cerrar de nuestra ventana.
Quinta linea establecemos que no se pueda cambiar el tamaño de nuestra ventana.



Puedes descargar todo el proyecto desde aqui.