Tema destacado: Entra al canal IRC oficial de #elhacker.net
Autor
|
Tema: Torres de Hanoy (Leído 2,219 veces)
|
cokeing
Desconectado
Mensajes: 1.036
SôNïC r0oLz
|
Acabo de hacer un programilla en C para poder practicar con las torres de hanoy. http://canalmandrake.shta.net/torres.exe Enviarme el numero de movimientos que habeis echo para conseguir pasar la torre al otro lado. Hall of fame:- - -
|
|
|
|
|
En línea
|
|
|
|
|
Rojodos
|
A mi me peta...
Esta mal codeada, creo.
Me pasas el source en C?
Salu2
|
|
|
|
|
En línea
|
|
|
|
FeRmO
Desconectado
Mensajes: 379
Gritemos!
|
A mi tampoco me funciona
|
|
|
|
|
En línea
|
|
|
|
Ferchu
Desconectado
Mensajes: 78
|
No rula :'(
|
|
|
|
|
En línea
|
|
|
|
cokeing
Desconectado
Mensajes: 1.036
SôNïC r0oLz
|
os pasteo el Cfuente. lo compilais y yata  /* * *** ***** ******* ********* [___________] [___________] [___________]
torre0={0,0,0,0,0} torre1={5,4,3,2,1} torre2={0,0,0,0,0}
*/ void printar(); void mover();
int torre[3][5]={ 0,0,0,0,0, 5,4,3,2,1, 0,0,0,0,0, }; int val=1;
#include <stdio.h> int main(){ int x=1;
do{ if(val==0) getch(); printar(); mover(); }while(x); return 0; }
void printar(){ int i,x,espais; int n,a;
clrscr();
// Printando las torres for(i=0;i<5;i++){ for(x=0;x<3;x++){
n=(torre[x][(4-i)]*2); if(n>1)n--; espais=(13-n)/2;
for(a=espais;a>0;a--) printf(" "); if(n==0)printf(" "); else for(a=n; a>0;a--) printf("*"); for(a=espais;a>0;a--) printf(" ");
// printf(" %d ",torre[x][(4-i)]); printf(" "); } printf("\n"); } printf("[___________] [___________] [___________]");
} void mover(){ int i,x; int mv,pt;
val=0;
// Moviendo los bloques
printf("\n\nIndique la la torre que quiere mover: "); scanf("%d",&mv); if(mv>3 || mv<1){ printf("\n>>>ERROR!\n"); printf("!! El numero tiene que estar comprendido entre 1 y 3\n"); printf("\nIndique la torre que quiere mover: "); scanf("%d",&mv); } mv--;
printf("Muy bien. Ahora indique el destino del bloque: "); scanf("%d",&pt); if(pt>3 || pt<1){ printf("\n>>>ERROR!\n"); printf("!! El numero tiene que estar comprendido entre 1 y 3\n"); printf("\nIndique el destino del bloque: "); scanf("%d",&pt); } pt--;
for(i=4;i>=0;i--){ if(torre[mv][i]){ for(x=4;x>=0;x--){ if(torre[pt][x]){ if(torre[pt][x]>torre[mv][i]) val=1; break; x=1; } if(x==0)val=1; } break; } }
if(val==1){ for(i=4;i>=0;i--){ if(torre[mv][i]){ for(x=4;x>=0;x--){ if(torre[pt][x]){ torre[pt][x+1]=torre[mv][i]; torre[mv][i]=0; break; x=1; } if(x==0){ torre[pt][x]=torre[mv][i]; torre[mv][i]=0; break; } } break; } } }else{ printf("\n>>>ERROR!\n"); printf("!! No puede poner un bloque mas grande que su inferior\n"); printf("!! No puede mover un bloque que no existe\n"); printf("!! No puede mover un bloque en la misma torre\n"); } }
ale  saludos. cokeing
|
|
|
|
|
En línea
|
|
|
|
cokeing
Desconectado
Mensajes: 1.036
SôNïC r0oLz
|
qué! no os gusta compilar eeeeh! mamoncios! ademas que os lo doy! cafgones y xDDD
|
|
|
|
|
En línea
|
|
|
|
SiesteR
Desconectado
Mensajes: 84
Haz lo que te gusta. Se feliz. :)
|
te agrecedecemos que lo postees pero...
Bracula@debian:~$ gcc hanoi.c -o hanoi /tmp/cciyn2af.o(.text+0x21): In function `main': : undefined reference to `getch' /tmp/cciyn2af.o(.text+0x43): In function `printar': : undefined reference to `clrscr' collect2: ld returned 1 exit status Bracula@debian:~$
|
|
|
|
|
En línea
|
|
|
|
SiesteR
Desconectado
Mensajes: 84
Haz lo que te gusta. Se feliz. :)
|
ah bueno el segundo error el de la undefined reference to clrscr es porque toy en linux y aqui seria system("clear"), no?
----------MOdifico el mensaje pa no escribir tantos xD -------------
ya he comprobado que efectivamente es system("clear"); asi que eso ya esta OK
ahora me falta lo del getch(),. ¿no crees que deberias haberle asigando a una variable de tipo ch el resultado de la funcion getch() ? p.ej.: ch=getch(); ademas de incluir la libreria <conio.h>
|
|
|
|
« Última modificación: 31 Diciembre 2003, 03:04 por SiesteR »
|
En línea
|
|
|
|
cokeing
Desconectado
Mensajes: 1.036
SôNïC r0oLz
|
no si... hay que tener cojones xD siempre programo para linux y todos me pedis que lo haga para windows y una vez k lo hago para windows, ..... aaaaaaaaargh xD, venga voy a hacerlo para linux  un momentin
|
|
|
|
|
En línea
|
|
|
|
SiesteR
Desconectado
Mensajes: 84
Haz lo que te gusta. Se feliz. :)
|
xDDD la culpa es de lo buindouseros de verdad... 
|
|
|
|
|
En línea
|
|
|
|
cokeing
Desconectado
Mensajes: 1.036
SôNïC r0oLz
|
/* * *** ***** ******* ********* [___________] [___________] [___________]
torre0={0,0,0,0,0} torre1={5,4,3,2,1} torre2={0,0,0,0,0}
*/ void printar(); void mover();
int torre[3][5]={ 0,0,0,0,0, 5,4,3,2,1, 0,0,0,0,0, }; int val=1;
#include <stdio.h> int main(){ int x=1;
do{ if(val==0) getchar(); printar(); mover(); }while(x); return 0; }
void printar(){ int i,x,espais; int n,a;
system("clear");
// Printando las torres for(i=0;i<5;i++){ for(x=0;x<3;x++){
n=(torre[x][(4-i)]*2); if(n>1)n--; espais=(13-n)/2;
for(a=espais;a>0;a--) printf(" "); if(n==0)printf(" "); else for(a=n; a>0;a--) printf("*"); for(a=espais;a>0;a--) printf(" ");
// printf(" %d ",torre[x][(4-i)]); printf(" "); } printf("\n"); } printf("[___________] [___________] [___________]");
} void mover(){ int i,x; int mv,pt;
val=0;
// Moviendo los bloques
printf("\n\nIndique la la torre que quiere mover: "); scanf("%d",&mv); if(mv>3 || mv<1){ printf("\n>>>ERROR!\n"); printf("!! El numero tiene que estar comprendido entre 1 y 3\n"); printf("\nIndique la torre que quiere mover: "); scanf("%d",&mv); } mv--;
printf("Muy bien. Ahora indique el destino del bloque: "); scanf("%d",&pt); if(pt>3 || pt<1){ printf("\n>>>ERROR!\n"); printf("!! El numero tiene que estar comprendido entre 1 y 3\n"); printf("\nIndique el destino del bloque: "); scanf("%d",&pt); } pt--;
for(i=4;i>=0;i--){ if(torre[mv][i]){ for(x=4;x>=0;x--){ if(torre[pt][x]){ if(torre[pt][x]>torre[mv][i]) val=1; break; x=1; } if(x==0)val=1; } break; } }
if(val==1){ for(i=4;i>=0;i--){ if(torre[mv][i]){ for(x=4;x>=0;x--){ if(torre[pt][x]){ torre[pt][x+1]=torre[mv][i]; torre[mv][i]=0; break; x=1; } if(x==0){ torre[pt][x]=torre[mv][i]; torre[mv][i]=0; break; } } break; } } }else{ printf("\n>>>ERROR!\n"); printf("!! No puede poner un bloque mas grande que su inferior\n"); printf("!! No puede mover un bloque que no existe\n"); printf("!! No puede mover un bloque en la misma torre\n"); getchar(); } }
ale  yasta... pongo el getchar(); para que limpie el buffer del teclado. saludos.cokeing
|
|
|
|
|
En línea
|
|
|
|
|
|