PDA

View Full Version : مشکل در اجرای برنامه برج های هانوی به صورت گرافیکی



arahan
شنبه 27 مهر 1392, 15:02 عصر
دوستان من این برنامه رو نوشتم ولی متأسفانه کار نمیکنه
کسی میتونه کمک کنه لطفا؟؟

brightening-eyes
شنبه 27 مهر 1392, 17:59 عصر
من با gcc کامپایلش کردم کامپایل ش
ولی وقتی اجراش کردم و یه شماره بهش دادم ارور داد
میخوای روش یه مانور بدم ببینم چه خبره؟`

rahnema1
شنبه 27 مهر 1392, 20:04 عصر
اجرا میشه اما اعداد بیشتر از 6 الگوریتم فکر کنم توی دور باطل میفته112039

brightening-eyes
یک شنبه 28 مهر 1392, 18:05 عصر
من بهش 3 دادم کار نکرد.

rahnema1
دوشنبه 29 مهر 1392, 10:34 صبح
این همه دستور for وبافر و اینها رو گذاشتی حداقل قبل از اینکه برنامه رو اجرا کنی خرده خرده تست می گرفتیبرنامه ای که خیلی راحت تر با تعداد خط کمتر و منطق بالاتر از اینها می تونه نوشته بشه

بهنامک‍‍
دوشنبه 29 مهر 1392, 12:22 عصر
من با gcc کامپایلش کردم کامپایل ش
ولی وقتی اجراش کردم و یه شماره بهش دادم ارور داد
میخوای روش یه مانور بدم ببینم چه خبره؟`

چجوری با gcc کامپایلش کردی؟
این که از conio استفاده کرده؟

brightening-eyes
دوشنبه 29 مهر 1392, 21:37 عصر
یه چیز دارم تو include به اسم
conio2.h
تغییر دادم بعدش با libconio.a لینکش کردم!
تو devpaks.org بودش

arahan
سه شنبه 30 مهر 1392, 08:13 صبح
والا نمیدونم من تازه کارم اگه لطف کنید کمک کنید ممنون میشم،کلا ارور نمیده ولی اجراش مشکل داره

brightening-eyes
سه شنبه 30 مهر 1392, 14:33 عصر
ببین الگوریتمی که ازش استفاده کردی مشکل داره
سعی میکنم وقتی وقت داشتم, یه کار رو برنامه کنم.

arahan
چهارشنبه 01 آبان 1392, 08:33 صبح
ببین الگوریتمی که ازش استفاده کردی مشکل داره
سعی میکنم وقتی وقت داشتم, یه کار رو برنامه کنم.
مرسی از لطفت

brightening-eyes
چهارشنبه 01 آبان 1392, 18:21 عصر
arahan عزیز!
اینو تست کن ببین کار میکنه؟


#include<stdio.h>
#include<math.h>
#include<malloc.h>
#include<conio.h>
#define A_B 1
#define B_A 2
#define A_C 3
#define C_A 4
#define C_B 5
#define B_C 6
 
int n;
char *fifo;
char migrate( char *A, char *B, char *C, char last , int step );
void showfifo(char *fifo);
int main(void)
{
char *A,*B,*C,i;
clrscr();
printf("This soft Ware if Hannoy Problem Solve \n");
printf("Please insert how Number you want in numeric : \n");
scanf("%d",&n);
A=(char *)malloc((sizeof(char)*n)+1);
B=(char *)malloc((sizeof(char)*n)+1);
C=(char *)malloc((sizeof(char)*n)+1);
fifo=(char *)malloc((sizeof(char)*(pow(2,n)-1))+1);
for(i=1;i<=n;i++)
{
A[i]=n+1;
B[i]=n+1;
C[i]=n+1;
}
for(i=0;i<=pow(2,n);i++)
{
fifo[i]=0;
}
A[0]=n;
B[0]=0;
C[0]=0;
for(i=1;i<=n;i++)
{
A[n-i+1]=i;
}
if(n%2)
{
C[++C[0]]=A[A[0]];
A[0]--;
B[++B[0]]=A[A[0]];
A[0]--;
fifo[++fifo[0]]=A_C;
fifo[++fifo[0]]=A_B;
migrate(A,B,C,A_B,0);
}
else
{
B[++B[0]]=A[A[0]];
A[0]--;
C[++C[0]]=A[A[0]];
A[0]--;
fifo[++fifo[0]]=A_B;
fifo[++fifo[0]]=A_C;
migrate(A,B,C,A_C,0);
}
showfifo(fifo);
getch();
return 0;
}
//************************************************** **********
//************************************************** **********
//************************************************** **********
char migrate( char *A,char *B,char *C,char last,int step)
{
char *AL,*BL,*CL;
if((step==((int)pow(2,n)-1))&&(C[0]/n==2))
return 1;
else
if(step>(pow(2,n)-1))
return 0;
//************************************************** **********
AL=(char*)realloc(A,sizeof(char)*n);
BL=(char*)realloc(B,sizeof(char)*n);
CL=(char*)realloc(C,sizeof(char)*n);
//************************************************** **********
if(A[A[0]]<B[B[0]])
{
if((last !=B_A)&&(A[0]!=0))
{
BL[++BL[0]]=AL[AL[0]];
AL[AL[0]]=n+1;
AL[0]--;
if((migrate(AL,BL,CL,A_B,++step)))
{
fifo[++fifo[0]]=A_B;
return 1;
}
}
}
else
{
if((last !=A_B)&&(B[0]!=0))
{
AL[++AL[0]]=BL[BL[0]];
BL[BL[0]]=n+1;
BL[0]--;
if((migrate(AL,BL,CL,B_A,++step)))
{
fifo[++fifo[0]]=B_A;
return 1;
}
}
}
//************************************************** **********
if(A[A[0]]<C[C[0]])
{
if((last !=C_A)&&(A[0]!=0))
{
CL[++CL[0]]=AL[AL[0]];
AL[AL[0]]=n+1;
AL[0]--;
if((migrate(AL,BL,CL,A_C,++step)))
{
fifo[++fifo[0]]=A_C;
return 1;
}
}
}
else
{
if((last!=A_C)&&(C[0]!=0))
{
AL[++AL[0]]=CL[CL[0]];
CL[CL[0]]=n+1;
CL[0]--;
if((migrate(AL,BL,CL,C_A,++step)))
{
fifo[++fifo[0]]=C_A;
return 1;
}
}
}
//************************************************** **********
if(C[C[0]]<B[B[0]])
{
if((last !=B_C)&&(C[0]!=0))
{
BL[++BL[0]]=CL[CL[0]];
CL[CL[0]]=n+1;
CL[0]--;
if((migrate(AL,BL,CL,C_B,++step)))
{
fifo[++fifo[0]]=C_B;
return 1;
}
}
}
else
{
if ((last !=C_B)&&(B[0]!=0))
{
CL[++CL[0]]=BL[BL[0]];
BL[BL[0]]=n+1;
BL[0]--;
if((migrate(AL,BL,CL,B_C,++step)))
{
fifo[++fifo[0]]=B_A;
return 1;
}
}
}
free((void*)AL);
free((void*)BL);
free((void*)CL);
}
//************************************************** **********
//************************************************** **********
//************************************************** **********
void showfifo(char*fifo)
{
char counter;
for(counter=fifo[0];counter>=0;counter--)
{
printf("\n");
switch(fifo[counter])
{
case A_B:
printf("A->B");
break;
case B_A:
printf("B->A");
break;
case A_C:
printf("A->C");
break;
case C_A:
printf("C->A");
break;
case C_B:
printf("C->B");
break;
case B_C:
printf("B->C");
break;
}
}
}
 

ببخشید یه کمی دیر کدو به دستت رسوندم!
و اگه مشکلی داشت خودم در خدمتم.

rahnema1
چهارشنبه 01 آبان 1392, 20:56 عصر
brightening-eyes عزیز، بیخود وقتت رو روی این برنامه نذار چون اصلا برنامه از بیخ مشکل داره حتی واسه دوتا حلقه هم جوابش غلطه بیشتر از دو تا هم که میفته تو دور باطل بهتره این برنامه از نو و با منطق بهتری نوشته بشه

arahan
پنج شنبه 02 آبان 1392, 09:33 صبح
arahan عزیز!
اینو تست کن ببین کار میکنه؟


#include<stdio.h>
#include<math.h>
#include<malloc.h>
#include<conio.h>
.
.
.

ببخشید یه کمی دیر کدو به دستت رسوندم!
و اگه مشکلی داشت خودم در خدمتم.
نه متأسفانه مشکل داره بصورت گرافیکی هم اجرا نمیشه :(

brightening-eyes
پنج شنبه 02 آبان 1392, 10:15 صبح
چرا من اجراش کردم؟
ببین!
اون دستورای malloc و free رو پاکشون کن ببین به کار میفته یا نه؟
چون اونا بیخودین!
کرش میکنه
پاکشون کن ببین کار میکنه یا نه؟

brightening-eyes
پنج شنبه 02 آبان 1392, 10:22 صبح
کدت از بیخ مشکل داره!
یه بار دیگه بنویسش.