PDA

View Full Version : جستجو در یک آرایه دوبعدی



moeen_yz
پنج شنبه 30 آذر 1391, 18:25 عصر
سلام دوستان من یک پروژه رو باید انجام بدم که تو یک مرحله از اون باید یک تابع بنویسم که تمام خونه های یک آرایه دوبعدی(یک جدول) رو چک کنه و اگه مثلا تو یک خونه از جدول علامت O بود خونه ی بعدی رو علامت * چاپ بکنه. اما من نمیدونم که برای دستور if چی بنویسم . آخه آرایه های دوبعدی که ما کار کردیم معمولا توشون عدد بود اما این کاراکتره واسه همین نمیدونم چطوری باید کد if شو بنویسم.چیزی که میخوام یه همچین چیزیه اما اجرا نمیشه چون این مدل نوشتن واسه اعداده و این چیزی که من میخوام یه کاراکتره.

if (map[i][j]=="O")

این دستور اجرا نمیشه از دوستان اگه کسی میدونه لطفا کمک کنه.

با تشکر

H_G_G_I
پنج شنبه 30 آذر 1391, 20:08 عصر
چون شما بین "" گذاشتی . کاراکتر باید بین '' باشه . رشته بین ""
اینطوری ::

if (map[i][j]=='O')

moeen_yz
پنج شنبه 30 آذر 1391, 21:01 عصر
بازم نشد دوست من این ارور رو میده : left operand must be l-value

aidinMC
پنج شنبه 30 آذر 1391, 21:04 عصر
بازم نشد دوست من این ارور رو میده : left operand must be l-value

لطفا کدی که نوشتین رو اینجا بذارین تا ببینیم علت چیه ، با یه خط کد بیشتر از این نمیشه اطلاعات داد ! :)

moeen_yz
پنج شنبه 30 آذر 1391, 21:10 عصر
لطفا کدی که نوشتین رو اینجا بذارین تا ببینیم علت چیه ، با یه خط کد بیشتر از این نمیشه اطلاعات داد ! :)

این کد منه
for(i=0;i<WIDTH;i++){
for(j=0;j<HEIGHT;j++){
if(map[i][j]='o' && map[i][j+1]='#'){
sw2=1;
map[i][j+2]=putch('#');
}
}
}

اینم نقشه بازیه
const int HEIGHT = 25;
const int WIDTH = 33;
char map[HEIGHT][WIDTH]={
{' ','_','_','_',' ','_','_','_',' ','_','_','_',' ','_','_','_',' ','_','_','_',' ','_','_','_',' ','_','_','_',' ','_','_','_'},
{'|',' ',' ',' ','|',' ',' ',' ','|',' ',' ',' ','|',' ',' ',' ','|',' ',' ',' ','|',' ',' ',' ','|',' ',' ',' ','|',' ',' ',' ','|'},
{'|',' ',' ',' ','|',' ',' ',' ','|',' ',' ',' ','|',' ',' ',' ','|',' ',' ',' ','|',' ',' ',' ','|',' ',' ',' ','|',' ',' ',' ','|'},
{'|','_','_','_','|','_','_','_','|','_','_','_',' |','_','_','_','|','_','_','_','|','_','_','_','|' ,'_','_','_','|','_','_','_','|'},
{'|',' ',' ',' ','|',' ',' ',' ','|',' ',' ',' ','|',' ',' ',' ','|',' ',' ',' ','|',' ',' ',' ','|',' ',' ',' ','|',' ',' ',' ','|'},
{'|',' ',' ',' ','|',' ',' ',' ','|',' ',' ',' ','|',' ',' ',' ','|',' ',' ',' ','|',' ',' ',' ','|',' ',' ',' ','|',' ',' ',' ','|'},
{'|','_','_','_','|','_','_','_','|','_','_','_',' |','_','_','_','|','_','_','_','|','_','_','_','|' ,'_','_','_','|','_','_','_','|'},
{'|',' ',' ',' ','|',' ',' ',' ','|',' ',' ',' ','|',' ',' ',' ','|',' ',' ',' ','|',' ',' ',' ','|',' ',' ',' ','|',' ',' ',' ','|'},
{'|',' ',' ',' ','|',' ',' ',' ','|',' ',' ',' ','|',' ',' ',' ','|',' ',' ',' ','|',' ',' ',' ','|',' ',' ',' ','|',' ',' ',' ','|'},
{'|','_','_','_','|','_','_','_','|','_','_','_',' |','_','_','_','|','_','_','_','|','_','_','_','|' ,'_','_','_','|','_','_','_','|'},
{'|',' ',' ',' ','|',' ',' ',' ','|',' ',' ',' ','|',' ',' ',' ','|',' ',' ',' ','|',' ',' ',' ','|',' ',' ',' ','|',' ',' ',' ','|'},
{'|',' ',' ',' ','|',' ',' ',' ','|',' ',' ',' ','|',' ','o',' ','|',' ','#',' ','|',' ',' ',' ','|',' ',' ',' ','|',' ',' ',' ','|'},
{'|','_','_','_','|','_','_','_','|','_','_','_',' |','_','_','_','|','_','_','_','|','_','_','_','|' ,'_','_','_','|','_','_','_','|'},
{'|',' ',' ',' ','|',' ',' ',' ','|',' ',' ',' ','|',' ',' ',' ','|',' ',' ',' ','|',' ',' ',' ','|',' ',' ',' ','|',' ',' ',' ','|'},
{'|',' ',' ',' ','|',' ',' ',' ','|',' ',' ',' ','|',' ','#',' ','|',' ','o',' ','|',' ',' ',' ','|',' ',' ',' ','|',' ',' ',' ','|'},
{'|','_','_','_','|','_','_','_','|','_','_','_',' |','_','_','_','|','_','_','_','|','_','_','_','|' ,'_','_','_','|','_','_','_','|'},
{'|',' ',' ',' ','|',' ',' ',' ','|',' ',' ',' ','|',' ',' ',' ','|',' ',' ',' ','|',' ',' ',' ','|',' ',' ',' ','|',' ',' ',' ','|'},
{'|',' ',' ',' ','|',' ',' ',' ','|',' ',' ',' ','|',' ',' ',' ','|',' ',' ',' ','|',' ',' ',' ','|',' ',' ',' ','|',' ',' ',' ','|'},
{'|','_','_','_','|','_','_','_','|','_','_','_',' |','_','_','_','|','_','_','_','|','_','_','_','|' ,'_','_','_','|','_','_','_','|'},
{'|',' ',' ',' ','|',' ',' ',' ','|',' ',' ',' ','|',' ',' ',' ','|',' ',' ',' ','|',' ',' ',' ','|',' ',' ',' ','|',' ',' ',' ','|'},
{'|',' ',' ',' ','|',' ',' ',' ','|',' ',' ',' ','|',' ',' ',' ','|',' ',' ',' ','|',' ',' ',' ','|',' ',' ',' ','|',' ',' ',' ','|'},
{'|','_','_','_','|','_','_','_','|','_','_','_',' |','_','_','_','|','_','_','_','|','_','_','_','|' ,'_','_','_','|','_','_','_','|'},
{'|',' ',' ',' ','|',' ',' ',' ','|',' ',' ',' ','|',' ',' ',' ','|',' ',' ',' ','|',' ',' ',' ','|',' ',' ',' ','|',' ',' ',' ','|'},
{'|',' ',' ',' ','|',' ',' ',' ','|',' ',' ',' ','|',' ',' ',' ','|',' ',' ',' ','|',' ',' ',' ','|',' ',' ',' ','|',' ',' ',' ','|'},
{'|','_','_','_','|','_','_','_','|','_','_','_',' |','_','_','_','|','_','_','_','|','_','_','_','|' ,'_','_','_','|','_','_','_','|'}
};

اینم دوتا حلقه For برای اینکه نقشه بازی رو چاپ کنه :

for (i = 0; i < HEIGHT; i++) {
for(j=0;j<WIDTH;j++){
printf("%c", map[i][j]);
}
printf("\n");
}

من الان میخوام یک تابع بنویسم که تمام خونه های این جدول رو چک کنه و هرجا که دید علامت O وجود داره و بعدش علامت # وجود داره خونه بعدیش رو * چاپ کنه .

خیلی ممنون

aidinMC
پنج شنبه 30 آذر 1391, 21:15 عصر
خب دوست من این کد شما یه خطای دستوری داره :)



for(i=0;i<WIDTH;i++){
for(j=0;j<HEIGHT;j++){
if(map[i][j]='o' && map[i][j+1]='#'){
sw2=1;
map[i][j+2]=putch('#');
}
}
}

شما تو دستور if از یدونه مساوی استفاده کردین ، در حالی که باید دوتا مسافی یعنی "==" بذارین....

moeen_yz
پنج شنبه 30 آذر 1391, 21:19 عصر
خب دوست من این کد شما یه خطای دستوری داره :)



for(i=0;i<WIDTH;i++){
for(j=0;j<HEIGHT;j++){
if(map[i][j]='o' && map[i][j+1]='#'){
sw2=1;
map[i][j+2]=putch('#');
}
}
}

شما تو دستور if از یدونه مساوی استفاده کردین ، در حالی که باید دوتا مسافی یعنی "==" بذارین....

دمت گرم دوست عزیز مشکل خطاش حل شد :قلب:

اما کار نمیکنه کدم:لبخند: ببین واسه چاپ کاراکتر ستاره باید از همون putch استفاده میکردم ؟

H_G_G_I
پنج شنبه 30 آذر 1391, 21:33 عصر
شما توی شرط یک = گذاشتی . باید دو تا بزاری یکی میشه عمل انتساب دو تا میشه مقایسه !
اینطوری باید بنویسیش ::

if(map[i][j] == 'o' && map[i][j+1] == '#'){

درضمن کلا این طوری خوب نمیشه باید یک سره بری جلو ! و در ضمن 2 تای اخری رو هم بررسی نکنی !
چون اگه مثلا اخری ها # و قبلیش o باشه اونوقت بیش از حد ارایه رو دست می زنی .
این طوری خوبه ::

char* l_map = map[0];
int l_end = WIDTH*HEIGHT - 2;
for(int i=0; i < l_end; i++)
{
if (l_map[i] == 'o' && l_map[i+1] == '#')
{
l_map[i+2] = '*';
}
}

بقیه هم فکر نکنم مشکلی داشته باشن !

aidinMC
پنج شنبه 30 آذر 1391, 21:35 عصر
شما چرا مستقیم این کارو نمیکنید ؟ تا جای که میدونم کد زیر باید کار کنه !!!


map[i][j+2]='#';

H_G_G_I
پنج شنبه 30 آذر 1391, 21:41 عصر
بوخشین ! اون اشتب شد .
این دلسته ! :لبخند:

for(int i=0;i<WIDTH;i++)
{
for(int j=0;j<HEIGHT-2;j++)
{
if(map[i][j] == 'o' && map[i][j+1] == '#'){
map[i][j+2]= '*';
}
}
}