PDA

View Full Version : سوال: مشکل در برنامه ی maze



ماتاتا.
شنبه 02 آبان 1394, 06:59 صبح
سلام
من دارم برنامه یmazeرو باc++مینویسم و باید از اشاره گرها و تابع بازگشتی استفاده کنم
راه حلم اینه که تو هر خونه ای میره چهار تا خونه اطراف رو بررسی میکنه اگ دیوار نبود ب اون خونه میره و اینکارو تا زمانی تکرار میکنه ک به خونه مقصد برسه.و بعد از عبور از هر خونه اونو علامتگذاری میکنه که توloop نیفته.
ولی الان خروجی برنامه که بهم میده همه خونه هایی که دیوار نیستن رو علامتگذاری کرده نه مسیر اصلی رو
باید چیکار کنم؟؟
اگه کمکم کنید ممنونتون میشم

ماتاتا.
شنبه 02 آبان 1394, 13:04 عصر
کسی نیست؟؟:گریه:

pbm_soy
شنبه 02 آبان 1394, 13:19 عصر
خوب الان چه انتظاری دارید؟! خطای برنامه شما را بگیم؟! با چشم از راه دور!!!
دوست عزیزدبرنامه را بگذارید اینجا تا دوستان ببینند بدون دیدن چطوری میشه خطای شما را پیدا کرد!؟!
در ضمن مشکل شما یک خطای منطقی است و بهترین روش برای رفع آن trace کردن است! تا ببینید کجای برنامه چه مقادیری را انتخاب کردید و یا کجای برنامه با چه شرایطی دیوار را انتخاب کردید!
در مورد ممطق برنامه هم در کتاب ساختمان داده نوشته هورویتز همین برنامه با استفاده از stack توضیح داده شده است!

ماتاتا.
شنبه 02 آبان 1394, 13:48 عصر
خوب الان چه انتظاری دارید؟! خطای برنامه شما را بگیم؟! با چشم از راه دور!!!
دوست عزیزدبرنامه را بگذارید اینجا تا دوستان ببینند بدون دیدن چطوری میشه خطای شما را پیدا کرد!؟!
در ضمن مشکل شما یک خطای منطقی است و بهترین روش برای رفع آن trace کردن است! تا ببینید کجای برنامه چه مقادیری را انتخاب کردید و یا کجای برنامه با چه شرایطی دیوار را انتخاب کردید!
در مورد ممطق برنامه هم در کتاب ساختمان داده نوشته هورویتز همین برنامه با استفاده از stack توضیح داده شده است!
یه ذره با آرامش جواب بدین دوست گرامی!!!
خو حالا میذارمش ولی قاطی پاتیه!!

ماتاتا.
شنبه 02 آبان 1394, 13:51 عصر
این کد برناممه که نوشتم
تو اون قسمتی کهrunMazeها رو فرا میخونه یه کاری باید بکنم که همه خونه ها رو علامتگذاری نکنه ولی نمیدونم باید چیکار کنم!
البته بگم این برنامم خیلی قاطی پاتیه و نواقص هنوز داره

#include<iostream>
#include<conio.h>
#include<fstream>


using namespace std;
int *row,*column;
char **maze;
char tmp;
void set(int a,int b){
tmp='1';
ifstream file("program.txt");

maze[a][b]=tmp;
file>>tmp;

void runMaze(int a,int b)
{

if( maze[a][b] == '.')
{
set(a,b);

runMaze(a-1, b);


runMaze(a+1,b);
runMaze(a, b-1);
runMaze(a, b+1);


}

}

void Print(){
for(int i=0;i<12;i++){
cout<<" "<<endl<<" ";
for(int j=0;j<12;j++){
cout<< " "<<maze[i][j];
}
}
}
void main(){
maze=new char *[12];
for(int i=0;i<12;i++){
maze[i]=new char[12];
}
ifstream file("program.txt");
for(int i=0;i<12;i++){
for(int j=0;j<12;j++){
file>>temp;
maze[i][j]=temp;
}
}
file.close();
int a,b,c=0;
row=&c;
column=&c;
while(maze[*row][*column]!='.'){
cout<<endl<<"Enter row :"<<endl;
cin>>a;
row=&a;
cout<<endl<<"Enter column :"<<endl;
cin>>b;
column=&b;
if(maze[*row][*column]=='*'){
system("cls");
cout<<endl<<"please enter new choice!"<<endl;

}
}




runMaze(a,b);
Print();
getch();
}

ماتاتا.
یک شنبه 03 آبان 1394, 12:07 عصر
:متفکر::عصبانی++:

pbm_soy
یک شنبه 03 آبان 1394, 19:47 عصر
یه ذره با آرامش جواب بدین دوست گرامی!!!
خو حالا میذارمش ولی قاطی پاتیه!!

من در گمال آرامش جواب دادم!

pbm_soy
یک شنبه 03 آبان 1394, 20:05 عصر
اول از همه برنامه خیلی قاطی و پاتی است!
بهتر بود الگوریتم را خیلی دقیقتر پیش خودت حلاجی میکردید! حتی برنامه را به بخشهای کوچکتر تقسیم کنید و تک تک بنویسید و هر مرحله را که نوشتی اجرا کنید و چک کنید!
از موارد غیر ضروری پرهیز کنید و از پیچیدگی برنامه بکاهید مثلا از اشاره گرها استفاده کردید در حالی که لزومی داشتند البته بغیر از یکجا که برای آرایه اصلی فضا را new کردید چون میخواستید اندازه maz پویا باشد میتوان این مورد را قبول کرد ولی شمارنده هایی مانند row , col , لزومی به اشاره گر نبود
من برنامه را حیلی دقیق بررسی نکردم ولی هر چی هست از runmaz است
در ضمن قبلا هم گفتم برنامه را trace کنید و خط به خط نتیجه را بررسی کنید!
نیازی به خواندن اطلاعات maz از فایل نبود میتوانستی از کاربر بگیرید ویا از تابع تصادفی استفاده میکردید و اعداد تصادفی صفر ویک تولید کنید و در خانه های maz بگذارید و همینطور میتوانستید فعلا maz را اندازه اش را ثابت میگرفتید و خانه هایش را با صفر و یک خودتان در اول کار پر کنید اگر برنامه برای آرایه ثابت درست جواب بدهد برای آرایه پویا هم جواب خواهد داد

ماتاتا.
دوشنبه 04 آبان 1394, 06:56 صبح
اول از همه برنامه خیلی قاطی و پاتی است!
بهتر بود الگوریتم را خیلی دقیقتر پیش خودت حلاجی میکردید! حتی برنامه را به بخشهای کوچکتر تقسیم کنید و تک تک بنویسید و هر مرحله را که نوشتی اجرا کنید و چک کنید!
از موارد غیر ضروری پرهیز کنید و از پیچیدگی برنامه بکاهید مثلا از اشاره گرها استفاده کردید در حالی که لزومی داشتند البته بغیر از یکجا که برای آرایه اصلی فضا را new کردید چون میخواستید اندازه maz پویا باشد میتوان این مورد را قبول کرد ولی شمارنده هایی مانند row , col , لزومی به اشاره گر نبود
من برنامه را حیلی دقیق بررسی نکردم ولی هر چی هست از runmaz است
در ضمن قبلا هم گفتم برنامه را trace کنید و خط به خط نتیجه را بررسی کنید!
نیازی به خواندن اطلاعات maz از فایل نبود میتوانستی از کاربر بگیرید ویا از تابع تصادفی استفاده میکردید و اعداد تصادفی صفر ویک تولید کنید و در خانه های maz بگذارید و همینطور میتوانستید فعلا maz را اندازه اش را ثابت میگرفتید و خانه هایش را با صفر و یک خودتان در اول کار پر کنید اگر برنامه برای آرایه ثابت درست جواب بدهد برای آرایه پویا هم جواب خواهد داد
ممنون از شما
اول کل برنامم با اشاره گر بود ارجاع ها به تابع و...بعد تغییرش دادم ولی ن کامل..(واسه همین قاطیه)از فایل نوشتم چون شکل اصلی رو دادم بهش..
وقتی runmazeها رو فرا میخونه میره همه ی خونه هایی که مسیرنو علامتگذاری میکنه..باید بهش بگم وقتی به جایی رسیدی که چهار طرفت مسیر نیست برگرد و همچنین خونه ها رو از علامتگذاری خارج کن.ولی دقیق نمیدونم چی بهش بگم
برنامه روdebugeمیکنم وسطش قاطی میکنه و تموم میشه:متفکر: