PDA

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



maryam9903
جمعه 08 خرداد 1394, 19:31 عصر
سلام

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

ممنون میشم کمک کنین...
نمیخام کد بنویسین برام! فقط بگین باید چیکار کنم!

chikar
جمعه 08 خرداد 1394, 21:17 عصر
سلام
راههای مختلفی دارید برای انجام این کار
ساده ترین راه اینه که تک تک عناصر آرایه اول با تک تک عناصر آرایه دوم مقایسه بشه و تعداد تکرار هر عنصر از آرایه اول در آرایه دوم مشخص بشه
راههای دیگه هم هست مثلا می تونید دو تا آرایه رو ادغام کنید و مشابه الگوریتم های مرتب سازی (http://fa.wikipedia.org/wiki/%D8%A7%D9%84%DA%AF%D9%88%D8%B1%DB%8C%D8%AA%D9%85_% D9%85%D8%B1%D8%AA%D8%A8%E2%80%8C%D8%B3%D8%A7%D8%B2 %DB%8C) مقایسه هاتون رو انجام بدید
...............................
حالا من برات اینجا یه کد می ذارم که یه کم روش کار بیاد دستت

void main() {
int R = 0;
int array1[] = {1,2,3,4,5,6};
int array2[] = {14,2,89,6,4};
int size_array1 = sizeof(array1)/sizeof(array1[0]);
int size_array2 = sizeof(array2)/sizeof(array2[0]);
for(int i=0;i<size_array1;++i)
for(int j=0;j<size_array2;++j)
{
if(array1[i] == array2[j])
++R;
}
std::cout << "Repeat is : " << R << "\n";
}

توضیح کد بالا : متغیر R تعداد تکرار رو در آرایه ها به ما می ده، بعد از R دو تا آرایه تعریف شده، بعد از اون اندازه آرایه ها مشخص شده، می تونید خودتون دستی اندازه آرایه رو بدید!
ولی روش بدست آوردن اندازه آرایه به این صورت هست که ابتدا با دستور sizeof array1 تعداد بایتی که این آرایه به خودش اختصاص داده شده بدست میاد حالا چه جوری؟ ابتدا تعداد عناصر آرایه که 6 تا هست در نوع int که برای آرایه ها تعریف شده و 4 بایت است ضرب می شه و در نتیجه آرایه ما 24 بایت فضا از حافظه گرفته بعد این 24 تقسیم می شه بر نوع داده ای آرایه یعنی int که 4 است، برای این کار هم کافیه یکی از عناصر آرایه مثلا عنصر اولش رو اندازش رو با sizeof بگیریم 24/4 بربرا است با تعداد عناصر آرایه یعنی 6
بعد برای اینکه بتونیم همه عناصر آرایه اول رو با همه عناصر آرایه دوم مقایسه کنیم، نیاز به دو تا حلقه for داریم یکی برای پیمایش عناصر آرایه اول و یکی هم برای آرایه دوم.
یک عنصر از آرایه اول در حلقه for اول خوانده می شه، وارد حلقه دوم که مختص آرایه دوم هست می شه و با تک تک عناصر آرایه دوم مقایسه می شه به ازای هر تکرار هم یکی با R اضافه می شه، و الی آخر ...
موفق باشید

maryam9903
شنبه 09 خرداد 1394, 09:27 صبح
سلام
راههای مختلفی دارید برای انجام این کار
ساده ترین راه اینه که تک تک عناصر آرایه اول با تک تک عناصر آرایه دوم مقایسه بشه و تعداد تکرار هر عنصر از آرایه اول در آرایه دوم مشخص بشه
راههای دیگه هم هست مثلا می تونید دو تا آرایه رو ادغام کنید و مشابه الگوریتم های مرتب سازی (http://fa.wikipedia.org/wiki/%D8%A7%D9%84%DA%AF%D9%88%D8%B1%DB%8C%D8%AA%D9%85_% D9%85%D8%B1%D8%AA%D8%A8%E2%80%8C%D8%B3%D8%A7%D8%B2 %DB%8C) مقایسه هاتون رو انجام بدید
...............................
حالا من برات اینجا یه کد می ذارم که یه کم روش کار بیاد دستت

void main() {
int R = 0;
int array1[] = {1,2,3,4,5,6};
int array2[] = {14,2,89,6,4};
int size_array1 = sizeof(array1)/sizeof(array1[0]);
int size_array2 = sizeof(array2)/sizeof(array2[0]);
for(int i=0;i<size_array1;++i)
for(int j=0;j<size_array2;++j)
{
if(array1[i] == array2[j])
++R;
}
std::cout << "Repeat is : " << R << "\n";
}

توضیح کد بالا : متغیر R تعداد تکرار رو در آرایه ها به ما می ده، بعد از R دو تا آرایه تعریف شده، بعد از اون اندازه آرایه ها مشخص شده، می تونید خودتون دستی اندازه آرایه رو بدید!
ولی روش بدست آوردن اندازه آرایه به این صورت هست که ابتدا با دستور sizeof array1 تعداد بایتی که این آرایه به خودش اختصاص داده شده بدست میاد حالا چه جوری؟ ابتدا تعداد عناصر آرایه که 6 تا هست در نوع int که برای آرایه ها تعریف شده و 4 بایت است ضرب می شه و در نتیجه آرایه ما 24 بایت فضا از حافظه گرفته بعد این 24 تقسیم می شه بر نوع داده ای آرایه یعنی int که 4 است، برای این کار هم کافیه یکی از عناصر آرایه مثلا عنصر اولش رو اندازش رو با sizeof بگیریم 24/4 بربرا است با تعداد عناصر آرایه یعنی 6
بعد برای اینکه بتونیم همه عناصر آرایه اول رو با همه عناصر آرایه دوم مقایسه کنیم، نیاز به دو تا حلقه for داریم یکی برای پیمایش عناصر آرایه اول و یکی هم برای آرایه دوم.
یک عنصر از آرایه اول در حلقه for اول خوانده می شه، وارد حلقه دوم که مختص آرایه دوم هست می شه و با تک تک عناصر آرایه دوم مقایسه می شه به ازای هر تکرار هم یکی با R اضافه می شه، و الی آخر ...
موفق باشید

واقعا ممنون....متوجه شدم باید چیکار کنم