PDA

View Full Version : آموزش: این کدها به زبان سی نوشته شده یا سی پلاس پلاس؟



DELTANG_Programmer
سه شنبه 12 دی 1391, 16:33 عصر
سلام بر دوستان عزیز این کدها مربوط به برنامه موش و لانه است که در مسیرهایی که صفر هست موش عبور میکنه ولی در مسیرهای که مقدار یک است وای میسه ... ولی برنمی گرده چطور میشه کاری کرد که موش وقتی مسیر یک است به چپ یا راست بره یا برگرده ... (راستی این کدها مگه با زبان سی پلاس پلاس نیست؟) لطف کنید بگید چرا اجرا نمیشه ؟ کجاش اشکال داره؟ ممنون اینم کدها :
#include "stdafx.h"
#include<iostream>
#include<conio.h>
const int n=10;
void main (void)
{
int a[n][n],i,j,k=0,l=0,z=0;
clrscr();
for(i=0;i<n;i++)
for(j=0;j<n;j++)
cin>>a[i][j]; //a[i][j]=rand()%2;
cout<<"\n\n\t\t";
while(z<=(2*n)-1)
{
if(a[l][k])
k++;
else
l++;
if((l>=n-l)||(k>=n-l))
break;
z++;
}
if(l==n-l&&k==n-l)
cout<<"path not find";
else
cout<<"path not find";
getch();
}

fati63
سه شنبه 12 دی 1391, 16:37 عصر
زبان C++‎ نوشته شده

lexical_error
سه شنبه 12 دی 1391, 16:41 عصر
سلام
کدها که به زبان c++ هست.
مشکلی که داره خط 7 قسمت تعریف آرایه هست.اگر بخواین که طول آرایه شما متغییر باشه و از مقادیر ثابت استفاده نکنین باید آرایه رو روی حافظه آزاد تعریف کنید!

DELTANG_Programmer
سه شنبه 12 دی 1391, 21:20 عصر
ممنون دوستان ... چیکار کنم وقتی موش به مقدار 1 میرسه برگرده یا به چپ و راست بره (تغییر مسیر بده)

lexical_error
سه شنبه 12 دی 1391, 22:23 عصر
ممنون دوستان ... چیکار کنم وقتی موش به مقدار 1 میرسه برگرده یا به چپ و راست بره (تغییر مسیر بده)
برای مشخص کردن مسیر داخل آرایه باید خانه های آرایه رو داخل یه حلقه تست کنید،مثلا میتونید به این صورت بنویسید که اگر خانه بعد از خانه فعلی 1 بود step به نزولی تغییر پیدا کنه و به جای کاراکتری که مشخص کننده حرکت موش هست کاراکتر تهی قرار بده که مشخص کننده حرکت به سمت عقب یا جهت های دیگر هست!!

mahak006
سه شنبه 12 دی 1391, 22:41 عصر
ممنون دوستان ... چیکار کنم وقتی موش به مقدار 1 میرسه برگرده یا به چپ و راست بره (تغییر مسیر بده)


باید مسیر رفته ی موش رو داخل یه پشته ذخیره کنی که کنار این آدرس ، وضعیت راه مسیر های پیش رو ( جلو و پایین و بالا ) رو هم می ذاری ( مثلا یک یعنی راه نیست یا امتحان شده و شکست خورده و صفر یعنی راه هست یا هنوز مسیرش امتحان نشده . پس اول کار این ۳ تا مقدار باید صفر باشن و به ترتیب خاصی که دست خودته مسیر های شکست خورده یک بشن تا مسیر اصلی گیر بیاد . ) اگه خونه ای به پشته وارد شد و ۳ مسیر جلوی اون یک شدن یعنی این مسیر بن بسته پس باید اون خونه رو از رو استک برداری و بره خونه زیریش مسیر منتهی به اون خونه رو مقدارش رو یک کنی . قبول دارم یه مقدار پیچیدس . ولی با دقت بخون و بره چن تا خونه این مراحل رو پیاده سازی کن . اگ بازم نتونستی بفهمی چجوریه ، بیشتر توضیح می دم .

DELTANG_Programmer
چهارشنبه 13 دی 1391, 07:22 صبح
دوستان ممنون از پاسخاتون ولی من مبتدی ام و اصلاً نمی فهمم چی میگید... اگه ممکنه بصورت کد بنویسید.

mahak006
چهارشنبه 13 دی 1391, 07:47 صبح
دوستان ممنون از پاسخاتون ولی من مبتدی ام و اصلاً نمی فهمم چی میگید... اگه ممکنه بصورت کد بنویسید.
آخه نمیشه که کد کامل بدیم . اون موقع هیچی یاد نمی گیری به جز گرفتن کد !!!
پشته یعی آرایه ای که قط از رو پر می شه و فقط مقدار روشو می شه برداشت . مثل یه انبار تو گود ( پشته به همین می گن) یعنی هر عدد رو عدد قبلی میاد و موقع حذف کردن اعداد هم اونی که آخر اومده اول میره بیرون .طریقه پیاده سازیش رو می نویسم :

class stack
{
private:
int way[100];
int top;
public:
stack();
void push( int x );
int pop();
};

stack::stack()
{
top=-1;
}
void stack::push(int x)
{
top++;
way[top]=x;
}

int pop()
{
int x=way [top];
top--;
}

int main()
{
stack x;
x.push(5);
x.push(7);
x.push(-20);
cout<<x.pop()<<endl<<x.pop()<<endl<<x.pop();
}


این پیاده سازی اصلی یه پشته ( stack ) هستش. حالا تو بر حسب نیازت می تونی یه پشته ای بذاری که به جای یه آرایه مثلا ۶ تا آرایه رو موازی و با یه top کنترل کنه . این طور می تونی با هر top به عناصر روی هر ۶ آرایه دسترسی داشته باشی . ( آرایه ها به ترتیب مربوط به i , j محل فعلی موش که هست ، وضعیت خونه چپی محل موش ( همون صفر و یکی که گفتم ) ، خونه راستی ، بالایی و پایینی )
یه مقدار بگرد و با مفهوم پشته و پیاده سازیش آشنا شو . خیلی به دردت می خوره . نه فقط اینجا ، جاهای دیگه ها هست . ذهنتم تو استفاده از انواع داده ها باز می کنه .

DELTANG_Programmer
چهارشنبه 13 دی 1391, 12:00 عصر
دوست عزیز من این کدها رو واسه پروژه استاد میخوام ... این دستوراتی که شما نوشتین رو به ما یاد نداده و اصلاً نمی دونم چیه ... اگه ممکنه سطح پایین تر بگید...

mahak006
جمعه 15 دی 1391, 12:20 عصر
دوست عزیز من این کدها رو واسه پروژه استاد میخوام ... این دستوراتی که شما نوشتین رو به ما یاد نداده و اصلاً نمی دونم چیه ... اگه ممکنه سطح پایین تر بگید...


void push(int[] ,int &,int);
int pop(int[],int &);
int main()
{
int stack[100];
int top=-1;
int x;
cout<<"pushing an amount in stack";
cin>>x;
push(stack,top,x);
cout<<endl<<"pop the amount";
x=pop(stack,top);
cout<<x;
return 0;
}
void push( int stack,int &top,int x)
{
top++;
stack[top]=x;
}
int push(int stack,int &top)
{
int a=stack[top];
top--;
return a;
}


اینم پیاده سازیش بدون استفاده از کلاس . حالا همون طور که گفتم ، بر حسب نیازت تعداد پشته ها رو تغییر بده و مثلا 6 تاش کن و ...

mahak006
جمعه 15 دی 1391, 12:22 عصر
سلام دوستان ، چندتا سوال داشتم از C++‎ که توی نمونه سوال امتحانی دانشگاهمونه اگه ممکنه کمکم کنید ، ممنون میشم اگه با توضیح باشه ، راستش معنی علامت a! و علامت >> و << رو نمیدونم چیه ، مرسی

سوال اول :اگر a=-2 باشد مقدار نهایی a پس از اجرای a+=!a + !a چند میباشد ؟


سوال دوم : در قطعه برنامه ی زیر خروجی برنامه چیست ؟
int i = 5 , j= 20 ;
int x = i<<5 | j>>3 ;
int y = i>>2 & j<<2 ;
cout <<x<<y ;

شما لطفا سؤالتون رو تو یه تاپیک جدید بذارید . در ضمن اینجا محلی نیست که حل تمرین انجام بشه . این جا محل آموزش روش کار و رفع اشکالات احتمالی در حین نوشتن برنامس . لطفا خودتون هم یه مقدار بره به دست اوردن جواب ها تلاش کنید .