PDA

View Full Version : مبتدی: if بعد از for



vahid javani
دوشنبه 30 مرداد 1391, 11:56 صبح
درود

for ( int i = 0; i < size; i++ )
if ( ptr[ i ] != right.ptr[ i ] )
return false; // Array contents are not equal
return true; // Arrays are equal
من همیشه تو این حالت مشکل داشتم!
وقتی با f10 جلو میرم فلش میاد روی return true; ولی اجراش نمی کنه.
در حلقه for مگه اینطور نیست که فقط یک خط بعدش رو اجرا میکنه؟ حالا وقتی که if هست و شرط غلط است این خط حساب نمیشه و میره سر خط بعدی تا اینجاش درسته و میاد رو این خط ولی اجرا نمی کنه.
ممنون میشم راهنمایی کنید.

bool Array::operator==( const Array &right ) const
{
if ( size != right.size )
return false; // arrays of different number of elements

for ( int i = 0; i < size; i++ )
if ( ptr[ i ] != right.ptr[ i ] )
return false; // Array contents are not equal
return true; // Arrays are equal
} // end function operator==

Sarv 123
دوشنبه 30 مرداد 1391, 13:40 عصر
با سلام

دو نکته قابل ذکر هست که عرض می کنم خدمتتون:
1. نحوه بررسی تساوی دو آرایه
2. تصور شما در مورد حلقه for

نکته اول:
با توجه به کدی که شما نوشتین مشخصه که به دو آرایه وقتی میگین مساوی وقتی که عناصر آن ها نظیر به نظیر مساوی باشند. اما طور دیگه هم میشه به دو آرایه گفت مساوی! اگه دو آرایه تمامی عناصر یکدیگر را شامل باشند. به بیان دیگر هر دو آرایه زیر مجموعه هم باشند. { 4 ,3 ,2 ,1 } = A و { 2 ,4 ,1 ,3 } = B مساوی هستند. در صورتی که این دو مجموعه با توجه به فرض شما مساوی نیستند. ( البته این ها همه بستگی به شما یا استادتون داره که چه چیزی مد نظرتون باشه )

نکته دوم:

در حلقه for مگه اینطور نیست که فقط یک خط بعدش رو اجرا میکنه؟ حالا وقتی که if هست و شرط غلط است این خط حساب نمیشه و میره سر خط بعدی
باید عرض کنم که تا حلقه for تموم نشه ( تا i == size نشه ) برنامه به سراغ دستور بعد از for نمیره! یعنی Return True بعد از این که اولین شرط if غلط بود اجرا نمیشه بلکه بعد از اینکه شرط for ( یعنی i<size ) غلط شد اجرا میشه!

vahid javani
سه شنبه 31 مرداد 1391, 22:53 عصر
ممنون از پاسخت دوست عزیز
ولی من آخرش نفهمیدم اگه خود if (خط 2 از کد اول) یه خط حساب میشه پس چرا اون فلش زرد رنگ میره سراغ خط آخر؟

hadi0x7c7
چهارشنبه 01 شهریور 1391, 01:00 صبح
با سلام

دو نکته قابل ذکر هست که عرض می کنم خدمتتون:
1. نحوه بررسی تساوی دو آرایه
2. تصور شما در مورد حلقه for

نکته اول:
با توجه به کدی که شما نوشتین مشخصه که به دو آرایه وقتی میگین مساوی وقتی که عناصر آن ها نظیر به نظیر مساوی باشند. اما طور دیگه هم میشه به دو آرایه گفت مساوی! اگه دو آرایه تمامی عناصر یکدیگر را شامل باشند. به بیان دیگر هر دو آرایه زیر مجموعه هم باشند. { 4 ,3 ,2 ,1 } = A و { 2 ,4 ,1 ,3 } = B مساوی هستند. در صورتی که این دو مجموعه با توجه به فرض شما مساوی نیستند. ( البته این ها همه بستگی به شما یا استادتون داره که چه چیزی مد نظرتون باشه )

ن

بهتره اول ارایه رو با مرتب کنی بعد دیگه به این مشکلا بر نمی خوره.

Sarv 123
چهارشنبه 01 شهریور 1391, 11:55 صبح
خواهش می کنم وظیفست.
من این اطمینان رو به شما بدم که تا حلقه for شما تموم نشه به سراغ خط Return True نمیره! ولی بازم از کد زیر میتونید برای بررسی مشکلتون استفاده کنین.
int i;
for( i=0; i<size; i++ )
{
if( ptr[i] != right.ptr[i] )
return false;
getch();
cout<<"i: "<<i<<endl;
}

cout<<"For ended and i: "<<i<<" and Size: "<<size<<endl;
getch();
return true;
در ضمن لطفا اسم و ورژن کامپایلرتون رو هم بگین.

Sarv 123
چهارشنبه 01 شهریور 1391, 12:09 عصر
hadi0x7c7: بهتره اول ارایه رو با مرتب کنی بعد دیگه به این مشکلا بر نمی خوره.
ممنونم. به ذهن خودم نرسیده بود.
ولی من این روش رو کلی گفتم چون واسه بعضی از اشیاء مرتب سازی مفهومی نداره! آرایه ما همیشه عدد صحیح نیست.
حتی اگر مرتب سازی هم بشه کرد بازم ممکنه به مشکل بخوریم.