elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.


 


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse)
| | |-+  Torres de Hanoi
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Torres de Hanoi  (Leído 19,852 veces)
Casidiablo
Desarrollador
Colaborador
***
Desconectado Desconectado

Mensajes: 2.914



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

Gangrel

Desconectado Desconectado

Mensajes: 237


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/protg
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
ayuda con torres de hanoi en vb
Programación Visual Basic
Freelancer 1 2,617 Último mensaje 23 Agosto 2011, 00:03
por ignorantev1.1
torres de hanoi
Programación General
resckate 3 2,536 Último mensaje 10 Septiembre 2011, 22:01
por Valkyr
Aumentan los ataques con punteros láser a aviones y torres de control
Noticias
wolfbcn 0 457 Último mensaje 18 Octubre 2011, 15:21
por wolfbcn
Torres de Hanoi
Programación C/C++
m@o_614 4 1,228 Último mensaje 21 Diciembre 2011, 06:02
por naderST
[ANSI C] Torre de hanoi
Programación C/C++
CrashNebula 3 525 Último mensaje 28 Mayo 2013, 17:43
por CrashNebula
Powered by SMF 1.1.19 | SMF © 2006-2008, Simple Machines