elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.
 
Inicio Ayuda Ingresar Registrarse
08 Septiembre 2008, 19:30  



+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderador: ®®)
| | |-+  Torres de Hanoi
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Imprimir
Autor Tema: Torres de Hanoi  (Leído 1857 veces)
Casidiablo
Colaborador

Desconectado Desconectado

Mensajes: 2.805


Más inteligente que el simio promedio


Ver Perfil WWW
Torres de Hanoi
« en: 12 Septiembre 2005, 16:36 »

Hola a todos, mi pregunta es la siguiente:
Como hago yo (si es posible) en C++ para dibujar gráficos en una ventana o un Frame, como circulos, rectangulos, lineas, etc. La cuestión es que hice un diseño de las Torres de Hanoi, en donde muestro los graficos dibujandolos con asteriscos, pero no solo es más dificil así sino más extenso.

Aquí les dejo dos codigos en en C++, listos para compilar y ejecutar en Dev C++, para que se hagan una idea de lo que les hablo:

Código:
//Torres de Hanoi
//casidiablo
#include<iostream>
using namespace std;
void moverdisco();
int tem,tem2,n,i,j,desde,hacia,con,tam,tamdisco,espacios,k,matriz[100][3];
char cr='±',si,fondo=177;
void linea(int j)
{
for(int i=0;i<j;i++)
cout<<cr;
cout<<endl;
}
void salir()
{
char r='©';
system("cls");
linea(27);
cout<<cr<<cr<<cr<<cr<<cr<<cr<<cr<<" casidiablo "<<r<<" ";
linea(6);
cout<<cr<<cr<<cr<<cr<<cr<<cr<<cr<<cr<<cr<<cr<<cr<<" 2005 ";
linea(10);
linea(27);
cout<<cr<<" Apoya el Software Libre "<<cr<<endl;
cout<<cr<<"   y el codigo abierto   "<<cr<<endl;
linea(27);
getchar();
}
int main()
{
    system("color 0f");
    system("cls");
    cout<<"Las Torres de Hanoi\n"<<endl<<endl;
    cout<<"Digite la cantidad de discos: ";
    cin>>n;
    while(n>13||n<3)
    {
        system("cls");
        cout<<"Tiene que jugar minimo con tres discos y maximo con 13"<<endl<<"Digite la cantidad de discos:";
        cin>>n;
    }
    tam=n+(n-1);
    for(i=1;i<=((tam*3)+3)+1;i++)
        cout<<fondo;
    cout<<endl<<fondo;
    for(i=0;i<n;i++)
    {
        for(j=0;j<3;j++)
        {
              if(j==0)
                  matriz[i][j]=i+1;
              else
                  matriz[i][j]=0;
              for(k=1;k<=tam;k++)
              {
                   tamdisco=matriz[i][j]+(matriz[i][j]-1);
                   espacios=(tam-tamdisco)/2;
                   if(matriz[i][j]==0)
                       cout<<fondo;   
                   else
                   {
                       if(k<=espacios||k>(tam-espacios))
                           cout<<fondo;
                       else
                           cout<<"*";
                   }
              }
              cout<<fondo;
        }
        cout<<endl<<fondo;
    }
    for(i=1;i<=((tam*3));i++)
    {
        if(i==n-1)
            cout<<"T1";
        else if(i==((n*2)+n)-2)
            cout<<"T2";
        else if(i==(((n*2)+n)-3)+n*2)
            cout<<"T3";
        else
            cout<<fondo;
    }
    cout<<endl;
    for(i=1;i<=((tam*3)+4);i++)
        cout<<fondo;
    moverdisco();
}
void moverdisco()
{
    while(matriz[0][1]!=1&&matriz[0][2]!=1)
    {
    cout<<"\n\n\t\t\tLleva "<<con++<<" movimientos\n";
    do{
        cout<<"Desde cual torre (T) desea mover el disco: ";
        cin>>desde;
        if(matriz[n-1][desde-1]==0){cout<<"No hay disco en esa torre"<<endl;}
    }
    while(matriz[n-1][desde-1]==0);
    cout<<"Hacia cual torre (T) desea mover el disco: ";
    cin>>hacia;
    desde--;
    hacia--;
    for(i=0;i<n;i++)
    {
        if(matriz[i][desde]!=0)
        {
        tem=matriz[i][desde];
        tem2=i;       
        i=n;
        }
    }
    for(i=n-1;i>=0;i--)
    {
        if(matriz[i][hacia]==0)
        {
            if(matriz[i+1][hacia]>tem||i==(n-1))
            {
            matriz[i][hacia]=tem;
            matriz[tem2][desde]=0;
            }
            else
            {
            cout<<"\n\nNo puede colocar un disco grande encima de uno pequeno\nni poner un disco en la misma posicion"<<endl
                <<"Cambie los parametros"<<endl;
                con--;
            moverdisco();
            }       
            i=0;
        }
    }
    system("cls");
    for(i=1;i<=((tam*3)+3)+1;i++)
        cout<<fondo;
    cout<<endl<<fondo;
    for(i=0;i<n;i++)
    {
        for(j=0;j<3;j++)
        {
              for(k=1;k<=tam;k++)
              {
                   tamdisco=matriz[i][j]+(matriz[i][j]-1);
                   espacios=(tam-tamdisco)/2;
                   if(matriz[i][j]==0)
                      cout<<fondo;
                   else
                   {
                       if(k<=espacios||k>(tam-espacios))
                           cout<<fondo;
                       else
                           cout<<"*";
                   }
              }
              cout<<fondo;
        }
        cout<<endl<<fondo;
    }
    for(i=1;i<=((tam*3));i++)
    {
        if(i==n-1)
            cout<<"T1";
        else if(i==((n*2)+n)-2)
            cout<<"T2";
        else if(i==(((n*2)+n)-3)+n*2)
            cout<<"T3";
        else
            cout<<fondo;
    }
    cout<<endl;
    for(i=1;i<=((tam*3)+4);i++)
        cout<<fondo;
    }
    system("color f1");
    cout<<"\n\nFelicitaciones acaba de ganar en "<<con<<" movimientos\n\nDesea volver a jugar S/N: ";
    cin>>si;
    con=0;
    if(si=='s'||si=='S')
        main();
    else
        salir();
    getchar();
}

y este otro:


Código:
//Solución a Torres de Hanoi
//casidiablo
#include <iostream>
using namespace std;
void torres(int n, char a, char b, char c);
int main()
{
int n;
char a='1', b='3',c='2';
do
{
    cout<<"Cuantos discos tiene la torre principal\n";
    cin>>n;
    if(n<2)
    cout<<"La cantidad de los discos debe ser mayor a uno\n";
    }while(n<2);
    long nm=pow(2.0,n)-1;
    system("cls");
    cout<<"La cantidad de movimientos a realizar son "<<nm<<endl<<endl;
torres(n,a,b,c);
system("pause");
}
void torres(int n, char a, char b, char c)
{
if (n==1)
{
cout<<"Mueva el disco "<<n<<" de T"<<a<<" a T"<<c<<"\n";
return;
}
torres(n-1,a,c,b);
cout<<"Mueva el disco "<<n<<" de T"<<a<<" a T"<<c<<"\n";
torres(n-1,b,a,c);
return;
}

La verdad es que no encuentro un manual donde se explique esto, y agradezco de antemano la colaboración que puedan brindarme, y ojala este codigo les sirva a muchos.

Saludos...
En línea

Masturba tu cerebro y eyacularán tus ideas...



Visita mi blog:

Gangrel

Desconectado Desconectado

Mensajes: 235


Ver Perfil WWW
Re: Torres de Hanoi
« Respuesta #1 en: 12 Septiembre 2005, 17:14 »

Mira para graficos es una ventana te dejo este link, donde apartir del tema 16 el GDI trata sobre graficos.


http://winapi.conclase.net/curso/index.php
En línea

La educacion no es un privilegio, es un derecho.

http://www.usuarios.lycos.es/protg
Páginas: [1] Ir Arriba Imprimir 
Ir a:  







Consolas     La Web de Goku     MilW0rm     MundoDivx

Hispabyte     Truzone     TodoReviews     ZonaPhotoshop

hard-h2o modding    Foros de ayuda    Yashira.org    Videojuegos    indetectables.net   

Noticias Informatica    Seguridad Informática    ADSL    Foros en español    eNYe Sec

Todas las webs afiliadas están libres de publicidad engañosa.

Powered by SMF 1.1.6 | SMF © 2006-2008, Simple Machines LLC