سلام خدمت دوستان جواب این سوال 8 میاد یا 96 ممنون میشم راهنمایی بفرمایید
http://tehransar.ir/pics8/e8f3105b47...a6abcf7339.jpg
این سیستمتون هم که گیرای الکی میده مجبورم
سلام خدمت دوستان جواب این سوال 8 میاد یا 96 ممنون میشم راهنمایی بفرمایید
http://tehransar.ir/pics8/e8f3105b47...a6abcf7339.jpg
این سیستمتون هم که گیرای الکی میده مجبورم
8 بار چاپ می شود ، چون حلقه ی اول اصلا تو حلقه ی دوم دخیل نیست ( حلقه تو در تو نیست ) و هر کدام جداگانه عمل میکنن .
ممنون میشم در موردش یکم توضیح بدید چرا تو در تو نیست ؟
اگه معیار یا نکته ای در شناسایی حلقه های تو در تو است ممنون میشم راهنمایی بفرمایید
ببینید کد شما این هست :
for i:=-1 to 10 do;
for k:=-2 to 5 do
Writeln('Pascal');
در خط اول یه حلقه داریم از 1- تا 10 که به عبارتی میشه 12 بار تکرار ، یعنی حلقه شروع میشه و در آخر همان خط بعد از do به وسیله ی سمیکالن ( ; ) به حلقه پایان داده شده .
بعد در خط بعدی یک حلقه داریم از -2 تا 5 که به عبارتی میشه 8 دور ( 2- ، 1- ، 0 ، 1 ، 2 ، 3 ، 4 ، 5 ) و میبینیم که این بار بعد از کلمه ی do به حلقه پایان داده نشده و دستور حلقه چاپ کلمه ی pascal هست .
پس به عبارتی اول حلقه ی اول ( i ) اجرا میشه و چون دستوری نداره هیچ عملیاتی انجام نمیده ، بعد از اون حلقه ی دوم ( j ) اجرا میشه و دستور اون هم چاپ کلمه ی پاسکال هست که به تعداد تکرار حلقه یعنی 8 بار این دستور اجرا میشه و 8 بار کلمه ی پاسکال چاپ میشه .
از نظر دستوری یه سوال اونم اینه که مگه نباید پشت حلقه سمیکالن نباشه ؟
از توضیحت ممنونم فقط یک نکته اگر حلقه اول سمیکالن نداشت اونموقع می شد 96 درسته؟
نه از نظر دستوری همچین قانونی نداریم .از نظر دستوری یه سوال اونم اینه که مگه نباید پشت حلقه سمیکالن نباشه ؟
بله .از توضیحت ممنونم فقط یک نکته اگر حلقه اول سمیکالن نداشت اونموقع می شد 96 درسته؟
دوست من میشه در این مورد هم نظرتون رو بگید و بنده رو راهنمایی بفرمایید (ممنونتون میشم جواب اون تاپیک رو هم لطف کنید بدید)
چرا جواب ها اینطوری میاد
http://tehransar.ir/pics8/5a21330171...15e31f68c4.jpg
سلام
جواب سوال اول : جواب اين سوال بستگي به نوع كامپايلر داره . اگر كامپايلر اجازه تغيير مقدار عدد
شمارنده رو در داخل حلقه نده پر واضحه كه با خطاي كامپايلر مواجه ميشه . اگر كامپايلر چنين
اجازه اي رو بده نظر من اينه كه جواب صحيح در هيچ گزينه اي نيامده ، فرض كنيم حلقه تا جايي
پيش بره كه i برابر 8 بشه . مقدار 8 وارد حلقه ميشه . در خط اول تغييراتي روي متغيير s اتفاق
ميفته كه هيچ اهميتي در تكرار حلقه نداره . وقتي به خط دوم برسه مقدار i خواهد شده 16 ، بعد
برميگرده به ابتداي حلقه و چك ميكنه كه آيا 16 از 30 كوچكتره يا نه ، كه هست پس حلقه ادامه
پيدا ميكنه تا در انتهاي اين دور مقدار i بشه 2 * 16 يعني 32 . از اونجايي كه 32 از 30 كوچكتر
نيست حلقه تمام ميشه و مقدار i يعني 32 چاپ ميشه .
جواب سوال دوم : چون شرط حلقه هميشه صحيحه ( 1 هميشه از 10 كوچكتره و هيچ ربطي به
مقدار i نداره ) .
موفق باشيد .
این سوالات را چه کسی طرح کرده، و جواب ها را چه کسی داده؟!
آخه کی متغیر حلقه در یک حلقه for را در داخل حلقه تغییر میده؟!!
جواب سوال دوم هم الف میشه. کی گزینه ج را به عنوان جواب مطرح کرده؟!
وَ سَيَعْلَمُ الَّذِينَ ظَلَمُوا [آل محمد حقهم] أَيَّ مُنْقَلَبٍ يَنْقَلِبُونَ - الشعراء (227)
و ظالمین [حق آل محمد (ص) ] به زودی خواهند دانست که به کدام بازگشتگاه بازخواهند گشت.
با سلام
ممنون بابت جوابهاتون
این سوالات دانشگاه پیام نور است و جواب ها رو هم از پاسخنامه سیستم گرفتم
و سوالات رو با پاسخنامه برای دوستان قرار خواهم داد ممنون میشم در این باره به من راهنمایی برسونید هر چند که در حال حاضر این منت را بر سر من گذاشته اید
با تشکر
این سوالات است
http://companyforex.parsaspace.com/P...tudent.ir).zip
پاسخنامه هم در ضمیمه سایت قرار دارد
ممنون میشم جواب ها رو تصحیح بفرمایید
اگه اشتباهات فراتر برود با مسئول اموزش این مبحث را عنوان خواهم کرد چون حق زیادی از افراد در صورت اشتباه در طرح سوالات و پاسخنامه ها اجحاف می شود
در پاسکال ما اجازه نداریم متغییری رو که به حلقه اختصاص دادیم تو خود همون حلقه دستکاری کنیم و سوالی که شما عنوانش رو قرار دادی دقیقا همین کار رو انجام داده و کاملا اشتباه است .ممنون میشم بیشتر توضیح بدید
میشه بیشتر توضیح بدید مخصوصا سوال دوم
ممنون میشم به این سوال هم جواب بدید
https://barnamenevis.org/showthread.php?t=162835
در مورد سوال اول فرض کنید کد زیر رو داریم :
for i:=0 to 10 do
begin
write('A');
i:=i+5;
end;
در این کد میبینید که متغیر i به حلقه اختصاص داده شده ولی داخل حلقه ما قصد داریم در مقدار موجود در متغیر i دست ببریم که این از نظر کامپایلر پاسکال غیر قابل قبول است و پاسکال اجازه نمیدهد تا اتمام حلقه به مقدار موجود در متغیر حلقه دست ببریم ، حال آنکه کد زیر درست است چون بعد از اتمام حلقه در مقدار موجود در متغیر دست برده ایم :
for i:=0 to 10 do
begin
write('A');
end;
i:=i+5;
i:=0;
While(1<=10) do
begin
Write(i);
Inc(i);
end;
من هم اول مثل آقای کشاورز دقت نکردم و فکر کردم شرط حلقه i هست ولی اگر دقت کنیم در داخل شرط i با 10 مقایسه نشده و اون 1 هست نه i ، که در این شرایط شرط پایان حلقه هیچ وقت اعمال نمی شود چون همیشه 1 کوچکتر از 10 می باشد و در اینجا یه حلقه ی بی نهایت داریم .
آخرین ویرایش به وسیله Felony : پنج شنبه 14 خرداد 1388 در 23:20 عصر دلیل: شرط حلقه 1 بود نه i
کامپایلر ایرادی از این موضوع نمیگیره، بلکه منطق کد به هم میریزه. اگر کدی مثل این داشته باشیم:پاسکال اجازه نمیدهد تا اتمام حلقه به مقدار موجود در متغیر حلقه دست ببریم
for i := 1 to 10 do
begin
writeln(i);
i := i + 2;
end;
ابتدا 1 چاپ میشه، سپس مقدار i میشه 1+2=3، سپس در دور بعدی حلقه یک واحد به مقدار i اضافه میشه، یعنی i میشه 4. مقدار 4 چاپ میشه. مقدار i میشه 4+2=6. در دور جدید یک واحد به آن اضافه میشه، میشه 7. مقدار 7 چاپ میشه. i میشه 7+2=9. در دور جدید یک واحد به آن اضافه میشه، و مقدارش میشه 10. مقدار 10 چاپ میشه. اینطوری منطق حلقه بهم میریزه.
آخه اون بدبختی که این رو روی صفحه کاغذ میبینه، چطور میخواد تشخیص بده که I هست یا 1؟! اینقدر سوالات تکنیکی کم هستند که طراحان سوال به فکر بازی با حروف افتادند؟!فکر کردم شرط حلقه i هست ولی اگر دقت کنیم در داخل شرط i با 10 مقایسه نشده و اون 1 هست نه i
وَ سَيَعْلَمُ الَّذِينَ ظَلَمُوا [آل محمد حقهم] أَيَّ مُنْقَلَبٍ يَنْقَلِبُونَ - الشعراء (227)
و ظالمین [حق آل محمد (ص) ] به زودی خواهند دانست که به کدام بازگشتگاه بازخواهند گشت.
بله درسته در داخل پاسکال اجرا شد ، ولی کامپایلر دلفی ازش این ایراد رو گرفت که من اشتباه فکر کردم پاسکال هم همین ایراد رو میگیره :کامپایلر ایرادی از این موضوع نمیگیره، بلکه منطق کد به هم میریزه.
[Error] Unit1.pas(32): Assignment to FOR-Loop variable 'i'
راستی آقای کشاورز من کدی که شما گزاشتید رو به شکل زیر نوشتم و در پاسکال اجرا کردم ولی یک حلقه به وجود اومد که چند هزار بار اجرا میشه و اعداد عجیبی هم چاپ میشه ، میشه دلیلشو بگین .
uses wincrt;
var i:integer;
begin
for i := 1 to 10 do
begin
writeln(i);
i := i + 2;
end;
end.
بله همینطوره ، هرکی این سوال رو ببینه اون اول میبینه i با 0 مقدار دهی شده و زیاد رو اون شرط تمرکز نمیکنه و جواب رو اشتباه میده .... ، زیادی تکنیکی بوده .آخه اون بدبختی که این رو روی صفحه کاغذ میبینه، چطور میخواد تشخیص بده که I هست یا 1؟! اینقدر سوالات تکنیکی کم هستند که طراحان سوال به فکر بازی با حروف افتادند؟!
سلام ببخشید که این سوال رو اینجا مطرح میکنم این سوال رو یکی از دوستام پرسیده و من هم قول دادم که جوابش رو پیدا کنم سوال: برنامه ای بنویسید که دو عدد صحیح را گرفته،فاکتوریل هرکدام را به صورت مجزا محاسبه و با هم جمع کنید(به روش while) خیلی ممنون میشم اگه کمک کنین