PDA

View Full Version : برنامه هشت وزیر به صورت ریکرسیو



nahiderashidy
سه شنبه 14 خرداد 1387, 14:54 عصر
سلام دوستان عزیز
کسی میتونه برنامه هشت وزیرو به صورت ریکرسیو به من بده؟؟؟؟؟؟؟:ناراحت:
ممنون میشم ازتون.

samaneh2008
سه شنبه 14 خرداد 1387, 15:52 عصر
سلام دوستان عزیز
کسی میتونه برنامه هشت وزیرو به صورت ریکرسیو به من بده؟؟؟؟؟؟؟:ناراحت:
ممنون میشم ازتون.
من میتونم بدم فقط بگو چه جوری؟

samaneh2008
سه شنبه 14 خرداد 1387, 15:52 عصر
#include <stdio.h>
#include <conio.h>
/*-----------------*/
int aray[8][8]={0},rp=1,j_o[8]={0},Vazir_no,j,Ok,Ok2=1,R1=0,Ans=1,X=0;
void DrawChes(void);
void Tiker(void);
void DrawData(void);
void GoBack(void);
/*-----------------*/
void main(void){
int k,l;
textbackground(1);
clrscr();
Vazir_no=0;
j=-1;
while(Ok2==1){
Ok=1;
for( ;j<8&&Ok==1;j++){
if(aray[Vazir_no][j]==0){
Tiker();
Ok=0;
j_o[Vazir_no]=j+1;
Vazir_no++;
if(Vazir_no==8){
DrawChes();
DrawData();
getch();
if(rp>25){
rp=1;
X++;
}
gotoxy(X*12+19,rp++);
textbackground(3); textcolor(0);
cprintf("%2d:",Ans++);
textbackground(3); textcolor(1);
for(k=0;k<8;k++)
for(l=0;l<8;l++)
if(aray[k][l]>49)cprintf("%1d",l+1);
}
j=-1;
}
else if (j>7){
for(k=0;k<8;k++)
for(l=0;l<8;l++)
if( aray[k][l]==Vazir_no || aray[k][l]==(50+Vazir_no-1) )
aray[k][l]=0;
GoBack();
}
}
if (j>7){
if(j_o[Vazir_no-1]>7){
for(k=0;k<8;k++)
for(l=0;l<8;l++)
if(aray[k][l]==Vazir_no||aray[k][l]==50+Vazir_no-1)
aray[k][l]=0;
}
GoBack();
}
}
}
/*----------------------*/
void GoBack(void){
int register k,l;
if(j>=7/*&&j<9*/&&Vazir_no>0){
for(k=0;k<8;k++)
for(l=0;l<8;l++)
if( aray[k][l]==Vazir_no || aray[k][l]==(50+Vazir_no-1) )
aray[k][l]=0;
j=j_o[Vazir_no-1];
Vazir_no--;
Ok=1;
}
else{
Ok2=0;
}
}
/*----------------------*/
void Tiker(void){
int k;
aray[Vazir_no][j]=50+Vazir_no;
for(k=0;k<8;k++) if(aray[Vazir_no][k]==0)aray[Vazir_no][k]=Vazir_no+1;
for(k=0;k<9;k++) if(aray[k][j]==0)aray[k][j]=Vazir_no+1;
for(k=0;k<8;k++)
if( (Vazir_no+k)<8 && (j+k)<8 && aray[Vazir_no+k][j+k]==0 )
aray[Vazir_no+k][j+k]=Vazir_no+1;
for(k=-8;k<8;k++)
if( (Vazir_no+k)<8 && (j-k)>-1 && aray[Vazir_no+k][j-k]==0 )
aray[Vazir_no+k][j-k]=Vazir_no+1;
}
/*----------------------*/
void DrawChes(void){
int k,l,m;
for(k=0;k<8;k++){
textbackground(4);
textcolor(14);
gotoxy(2*k+2,1);
cprintf("%c ",'A'+k);
gotoxy(1,k+2);
cprintf("%1d",k+1);
textbackground(9);
for(l=1;l<9;l++){
for(m=1;m<9;m++)
if((l%2&&m%2)|| !(l%2||m%2)){
gotoxy(2*l,m+1);
textbackground(7);
textcolor(7);
if(aray[l-1][m-1]!=0){
textbackground(7);
textcolor(1);
if(aray[l-1][m-1]>20) cprintf("* ");
else cprintf("°°");
}
else{
cprintf("²²");
}
}
else{
gotoxy(2*l,m+1);
textbackground(5);
if(aray[l-1][m-1]!=0){
textbackground(5);
textcolor(15);
if(aray[l-1][m-1]>20) cprintf("* ");
else cprintf("°°");
}
else{
textbackground(5);
textcolor(5);
gotoxy(2*l,m+1);
cprintf("²²");
}
}
}
}
}
/*----------------------*/
void DrawData(void){
int register k,l;
if(rp>=20){
textbackground(1);
clrscr();
rp=1;
}
gotoxy(1,25);
for(l=0;l<8;l++) cprintf("%2d.",j_o[l]);
gotoxy(19,rp++);
textbackground( 0 );
textcolor( 15 );
cprintf("Vazir_no=%d,j=%d,j[i]=%d,j[i-1]=%d",Vazir_no,j,j_o[Vazir_no],j_o[Vazir_no-1]);
for(k=0;k<8;k++){
gotoxy(50,k+1);
for(l=0;l<8;l++){
textbackground(0);
textcolor( aray[l][k] );
if(aray[l][k]>=50){
textbackground(7);
textcolor( aray[l][k]-49 );
}
cprintf("%2d.",aray[l][k]);
}
}
}

_________________

nahiderashidy
چهارشنبه 15 خرداد 1387, 09:32 صبح
مرسی از لطفت دوست عزیز

nahiderashidy
چهارشنبه 15 خرداد 1387, 09:51 صبح
ولی من این برنامه رو به صورت ریکرسیو میخوام(تابعی که خودشو تو خودش صدا بزنه)