PDA

View Full Version : یه سوال ساده در کار با آرایه و ماتریس



root88
سه شنبه 12 مرداد 1389, 11:11 صبح
با سلام من یه ماتریس دارم که انذازه شو از ورودی می گیرم همینطور مقادیرشو و یه ارایه به اسم A دارم که تعدادی عدد داخل اونه
حالا می خوام هر سطر از ماتریس که شماره اش یکی از مقادیر ارایه A هست رو بررسی کنم و شماره ستون هایی که تو سطر مورد نظر مقدارشون یکه رو بریزم تو یه ارایه . مشکل من اینه که نمی دونم چطور اسم ارایه ها رو تعیین کنم؟







http://www.irupload.ir/images/jdfcjeubrcao28dcy4fa.jpghttp://www.irupload.ir/images/tkhisb54yz2grazdgspv.jpg

PC2st
سه شنبه 12 مرداد 1389, 12:13 عصر
سوال شما را خوب متوجه نشدم، احتمالا منظور شما این است که چطور به سطرهای آرایه دسترسی داشته باشم؟ برای دسترسی جداگانه به سطرهای آرایه:


int i[2][3] = {{1, 2, 3}, {4, 5, 6}};
int* p = i[1];
std::cout << p[0] << std::endl;

محدوده شمارهٔ ستونها در اشاره‌گر p کنترل و بررسی نمی‌شود، پس شما باید کنترل کنید که برای دسترسی به ستون‌ها توسط p، از تعداد کل ستون‌ها فراتر نروید.

khafan_bat
سه شنبه 12 مرداد 1389, 13:47 عصر
الف ) یک آرایه داری به نام A دارای طول مشخص که تو هر خونش یک عددی هست .

ب ) یک ماتریس داری ( آرایه ی دو بعدی ) که تعداد سطر و ستونش رو از کاربر میگیری و بعد اون رو میسازی. این هم ok

پ) میخوای هر سطر از ماتریس که شماره اش یکی از مقادیر A هست رو بررسی کنی : اینجا 3 تا نکته است !!

1 ) مقادیر خونه های A نباید مثل هم باشند در این صورت یک سطر ممکنه دو بار بررسی بشه
2 ) بر فرض اینکه مقادیر خونه های آرایه A مثل هم نبودند همچنین مقادیر اون خونه ها باید در محدوده ی 0 تا تعداد ستون ماتریس منهای 1 باشند. چون در غیر این صورت مکنه با خطا مواجه بشی.
3 )بر فرض درست بودن موارد 1و2 طول آرایه ی A نبایند بیشتر از تعداد سطر های ماتریست بشه

خوب این چه کاریه ....؟؟!! اصلا به A احتیاج نداری !!!

ج) بخش آخر سوالت ( فرض بر درست بودن موارد 1و2و3) میشه با یک تابع جستجو در آرایه دو بعدی با خروجی int که شماره ی ستون مورد نظر هست حل کرد . برای فهمیدن ستون هم یک شرط if میزاری

قبول داری سوالت رو خیلی خیلی بد مطرح کردی !! یه بار خودت بخونش !! یه ربع تجزیه تحلیل سوالت طول کشید .

root88
سه شنبه 12 مرداد 1389, 20:29 عصر
بله ببخشید خیلی عجله ای شد خودمم نفهمیدم چی نوشتم.:خجالت:
الف) طول این ارایه از اول معلوم نیست اما حداکثر به اندازه تعداد سطرهای ارایه است.


خوب این چه کاریه ....؟؟!! اصلا به A احتیاج نداری !!!
من می خوام عناصر اون سطرهایی که کاربر شمارشونو وارد کرده بریزم توی ارایه ( برای هر سطر یه ارایه). بنابراین بهش نیاز دارم.


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

glassysmart
سه شنبه 12 مرداد 1389, 22:08 عصر
مشخص کردن طول آرایه در زمان اجرا غیر ممکن است مگر آنکه از اشاره گری استفاده کنی که فکر نمی کنم بتوانی.

afi_program
چهارشنبه 13 مرداد 1389, 00:14 صبح
بله باید از آرایه استفاده بشه اما نمیفهمم چرا میگین نمیتونن؟؟؟

khafan_bat
چهارشنبه 13 مرداد 1389, 01:41 صبح
آهان . . پس بگو . . .

بنا بر توضیحات جناب عالی روند منطقی و اصولی برنامه شما به این صورت میشه :

1 ) اول باید طول و عرض آرایه خودت رو از کاربر بگیری ( تعداد سطر و ستون ماتریس منظورم هست)

2) آرایه دو بعدی Dynamic خودت رو میسازی .

3 ) حالا از کاربر باید بپرسی که چند تا سطر رو میخواد بررسی کنه ؟ که پاسخ کاربر میشه طول آرایه ی A

4 ) آرایه A رو میسازی

5 ) شماره ی سطر هایی که کاربر میخواد رو میگیری و توی خونه های A میریزی

6 ) آرایه ی دو بعدی خودت رو اسکن میکنی و تعداد ستون هایی رو که اون شرط مورد نظر صدق میکنه پیدا میکنی ، یک آرایه ی دیگه درست میکنی و سپس شماره ی ستون ها رو میریزی تو این آرایه ی جدید

حالا تو کدوم بخش مشکل داری ؟؟؟ ساخت آرایه ی دو بعدی ؟

اصلا این چه سوالیه آخه . .. . . .؟؟؟

root88
چهارشنبه 13 مرداد 1389, 18:23 عصر
مشکل من در نامگذاری ارایه هایی که می خوام ایجاد کنم.یعنی اگه ارایه A شامل شماره سطرهای 2و 4 هستش ، حالا که می خوام دوتا ارایه بسازم نمی دونم چطور بهشون اسم بدم


for(i=0,i<A.size;i++)
{
اینجا چی بنویسم
}


دیگه نمی دونم چطور توضیح بدم

Salar Ashgi
پنج شنبه 14 مرداد 1389, 13:02 عصر
یه نمونه ساده واسه مثالی که شما ارائه دادید :



#include <iostream>
#include <conio>
int main(){
int a[4][4] = {{0,1,0,0},{1,0,1,0},{0,1,0,1},{0,0,1,0}};
int b[2] = {1,3};
for(int i=0;i<4;i++){
for(int j=0;j<4;j++){
for(int k=0;k<2;k++){
if(i+1 == b[k]){
if(a[i][j]==1)
cout<<"row : "<<i<<" , "<<"col : "<<j<<endl;}
}
}
}
getch();
}



http://www.barnamenevis.org/forum/attachment.php?attachmentid=53669&stc=1&d=1280998917

root88
پنج شنبه 14 مرداد 1389, 16:22 عصر
دوست عزیز
من باید اون قسمت قرمز رنگ رو بریزم داخل ارایه .یعنی یه ارایه ایجاد کنم که بره سطر اول رو بررسی کنه و شماره اون ستون هایی که یک هست رو داخل ارایه قرار بده .
همین کار رو باید برای سطر سه هم انجام بده


int a[4][4] = {{0,1,0,0},{1,0,1,0},{0,1,0,1},{0,0,1,0}};




int b[2] = {1,3};

for(int i=0;i<4;i++){
for(int j=0;j<4;j++){
for(int k=0;k<2;k++){
if(i+1 == b[k]){
if(a[i][j]==1)
j=یکی از خونه های ارایه جدید
cout<<"row : "<<i<<" , "<<"col : "<<j<<endl;}
}
}
}
getch();

}


تو قسمت قرمز باید اسم یه ارایه قرار بدم، چون از اول تعداد رو ندارم نمی تونه ارایه با اسامی متفاوت ایجاد کنم. مثلا سطر اول داخل ارایهx باشه و سطر سوم داخل ارایهz.

Salar Ashgi
پنج شنبه 14 مرداد 1389, 16:29 عصر
من باید اون قسمت قرمز رنگ رو بریزم داخل ارایه .یعنی یه ارایه ایجاد کنم که بره سطر اول رو بررسی کنه و شماره اون ستون هایی که یک هست رو داخل ارایه قرار بده .


خوب قرار بدید ، مگه چه مشکلی هست ؟! دوست عزیز کمی هم از خودتان خلاقیت نشون بدید ، همه
چیزو که آدم آماده بدست نمیاره !

root88
پنج شنبه 14 مرداد 1389, 19:30 عصر
مشکل من اسم ارایه هایی که ایجاد میکنم. در هر صورت از توجهی که کردید ممنون.