آموزش برنامه نویسی به زبان میپل!! - جلسه ی شانزدهم
تصمیم گیری با if و elif (بخش دوم)
به این دستور توجه کنید: (آیا عدد 3، عددی اول است؟)
جواب:
به این دستور نیز توجه کنید: (آیا عدد 6، عددی اول است؟)
جواب:
یک برنامه ی کوتاه (اگر خروجی دستور(isprime(7 عبارت true است، به طور ساده تر، اگر 7 عددی اول است، عبارت "*" را چاپ کن):
کد:
if isprime(7)=true then print("*") fi;
جواب:
برنامه ی کوتاه بالا را می توان کوتاه تر کرد:
کد:
if isprime(7) then print("*") fi;
جواب:
به کارگیری دستور if کمی پیشرفته تر!!
اگر 1 از 2 بزرگتر باشد، عدد 3 و در غیر این صورت عدد 4 را چاپ کن.
جواب:
مثال دیگر: (اگر 7 عددی اول است، عبارت "*" و در غیر این صورت عدد 4 را چاپ کن).
کد:
`if`( isprime(7),print("*"),4);
جواب:
برنامه ی 9:
تابلوسازی با استفاده از اعداد اول!!
اعداد طبیعی 1 تا 50 را در نظر بگیر. اگر عدد مورد نظر، اول بود به جای آن، کاراکتر 1 و در غیر اینصورت کاراکتر 0 را قرار بده. البته می توان از کاراکترهای دیگر هم استفاده کرد. (این برنامه به ما در بررسی چگالی اعداد اول یا به طور ساده تر، چگونگی پخش اعداد اول در میان اعداد طبیعی کمک می کند.)
کد:
with( StringTools ):
Tabulate( n -> `if`( n::prime, "1", "0" ), 50);
جواب:
کد:
"01101010001010001010001000001010000010001010001000"
دستور elif:
اگر لازم است در یک برنامه، چند شرط (بیش از 2 شرط) را بررسی کنیم، معمولاً از دستور elif استفاده می کنیم، به برنامه های زیر توجه کنید:
برنامه ی 10:
تعریف تابع قدر مطلق f با استفاده از if و elif:
اگر x مثبت بود، x را تحویل بده، اگر صفر بود، صفر را تحویل بده و اگر منفی بود، x- را تحویل بده (به این برنامه x داده شده، (f(x تحویل گرفته می شود).
کد:
f:=x->if x>0 then x
elif x=0 then 0
elif x<0 then -x
fi:
مثال
جواب:
حتی می توانید پس از تعریف f، آن را با دستور زیر، رسم کنید:
یعنی f را در بازه ی x از 2- تا 2 و y در بازه ی 1- تا 2 رسم کن. (دستور بالا را اجرا کنید و شکل تابع قدرمطلق را در بازه ی تعریف شده ببینید.)
البته تابع f در بالا را به صورت زیر نیز می توان تعریف کرد (چرا؟):
کد:
f:=x->if x>0 then x
elif x=0 then 0
else -x
fi:
دوستانی که دروس بالا را دنبال می کنند، تمرین زیر را حل و برنامه ی نوشته شده خود را ارسال فرمایند. منتظریم!!
تمرین 1:
با تقلید از برنامه ی 10، تابع f را به گونه ای تعریف کنید که اگر عددی اول گرفت، عبارت prime را چاپ کند، در غیر این صورت اگر عدد به صورت 3k+1 بود (مثلاً 16) عبارت "3k+1" را چاپ کند و اگر هیچ کدام از دو حالت بالا نبود، عبارت "I don't know" را.
موفق باشید.
13 مرداد 1391
ویرایش دوم: 14 مرداد 1391
2 پيوست (پيوستها)
آموزش برنامه نویسی به زبان میپل!! - جلسه ی هفدهم
تکرار دستورات با حلقه ی for- do (بخش اول)
در این جلسه به یکی از مهمترین دستورات برنامه نویسی خواهیم پرداخت که اهمیت آن برای برنامه نویس از نان شب هم واجب تر است!!! در اکثر برنامه ها شما مجبورید که دستور یا دستوراتی را دائماً تکرار کنید تا نتیجه ی دلخواهتان به دست آید. به مثال های ساده ی زیر توجه کنید:
مثال اول: می خواهیم سه بار عبارت Hello زیر هم چاپ شود:
کد:
for i from 1 to 3 do
Hello;
end do;
جواب:
توضیح:
در دستور بالا ابتدا متغیر i، عدد 1 تعریف و میپل وارد برنامه می شود و عبارت Hello را چاپ می کند و به ابتدای برنامه برمی گردد، سپس متغیر i، عدد 2 تعریف و میپل وارد برنامه می شود و عبارت Hello را چاپ می کند و باز هم به ابتدای برنامه برمی گردد و متغیر i، عدد 3 تعریف و میپل وارد برنامه می شود و عبارت Hello را چاپ می کند و چون i به حداکثر مقدار خود رسیده است، برنامه از حلقه خارج می شود.
توجه: آخر حلقه ی for-do با end do یا od به اتمام می رسد.
مثال دوم: چاپ اولین تا پنجمین عدد اول زیر هم:
کد:
for i from 1 to 5 do
ithprime(i)
od;
جواب:
توضیح:
در دستور بالا ابتدا متغیر i، عدد 1 تعریف و میپل وارد برنامه می شود و دستور (ithprime(1 - چاپ اولین عدد اول - را اجرا می کند؛ (این گونه تصور کنید که به جای i عدد 1 می گذارد) و به ابتدای برنامه برمی گردد؛ سپس متغیر i، عدد 2 تعریف و میپل وارد برنامه می شود و دستور (ithprime(2 - چاپ دومین عدد اول - را اجرا می کند؛ (این گونه تصور کنید که به جای i عدد 2 می گذارد) و به ابتدای برنامه برمی گردد و به همین ترتیب تا i=5.
مثال سوم: چاپ توان های دوم 11، 21، 31، 41 و 51:
کد:
for i from 11 by 10 to 53 do
i^2
od;
جواب:
کد:
121
441
961
1681
2601
توضیح:
در دستور بالا ابتدا متغیر i، عدد 11 تعریف و میپل وارد برنامه می شود و 11 را به توان 2 می رساند (این گونه تصور کنید که به جای i عدد 11 می گذارد) و به ابتدای برنامه برمی گردد؛ سپس به متغیر i که 11 بود، 10 واحد اضافه می کند و عدد 21 را به توان 2 می رساند (این گونه تصور کنید که به جای i عدد 21 می گذارد) و به ابتدای برنامه برمی گردد؛ سپس به متغیر i که 21 بود، 10 واحد اضافه می کند و عدد 31 را به توان 2 می رساند (این گونه تصور کنید که به جای i عدد 31 می گذارد) و به ابتدای برنامه برمی گردد و به همین ترتیب تا 51 که آخرین عدد مناسب! قبل از 53 است.
نکته: از برنامه ی بالا می توان برای حالاتی که گام های مساله مشخص، اما این گام ها بزرگ تر از 1 است، استفاده کرد. (به طور مثال گام های مساله ی بالا 10 تا 10 است.)
مثال چهارم: برنامه ای که از همه ی عناصر مجموعه ی A شامل اعداد 2، 4، 6 و 7 یک واحد کم و اعداد به دست آمده را زیر یکدیگر چاپ می کند:
کد:
A:={2,4,6,7};
for i in A do
i-1
end do;
جواب:
توضیح:
در دستور بالا ابتدا متغیر i، عدد 2 تعریف و میپل وارد برنامه می شود و از 2 یک واحد کم شده، آن را چاپ میکند (این گونه تصور کنید که برنامه به جای i عدد 2 می گذارد) و به ابتدای برنامه برمی گردد؛ سپس متغیر i، عدد 3 تعریف و میپل وارد برنامه می شود و از 3 یک واحد کم شده، آن را چاپ میکند (این گونه تصور کنید که برنامه به جای i عدد 3 می گذارد) و به ابتدای برنامه برمی گردد، به همین ترتیب تا i=7.
نکته: از برنامه ی بالا می توان برای حالاتی که گام های مساله مشخص نیست، استفاده کرد.
مثال پنجم: برنامه ای که همه ی عبارات زیر را در هم ضرب کند:
کد:
t := 1:
for z in 1, x, y, q^2, 3 do
t := t*z;
end do:
t;
جواب:
توضیح:
در دستور بالا ابتدا متغیرt عدد 1 تعریف می شود و سپس برنامه وارد حلقه می شود. در این حلقه ابتدا z، عبارت 1 تعریف می شود و سپس در t - که فعلاً 1 است - ضرب می شود و حاصل - که عبارت 1 است - به عنوان متغیر جدید t تعریف می شود. حال z، عبارت x تعریف می شود و سپس در t - که فعلاً 1 است - ضرب می شود و حاصل - که عبارت x است - به عنوان متغیر جدید t تعریف می شود. در مرحله ی بعد z، عبارت y تعریف می شود و سپس در t - که فعلاً x است - ضرب می شود و حاصل - که عبارت xy است - به عنوان متغیر جدید t تعریف می شود. در مرحله ی چهارم z، عبارت q^2 تعریف می شود و سپس در t - که فعلاً xy است - ضرب می شود و حاصل - که عبارت xyq^2 است - به عنوان متغیر جدید t تعریف می شود و در مرحله ی آخر، z، عبارت 3 تعریف می شود و سپس در t - که فعلاً xyq^2 است - ضرب می شود و حاصل - که عبارت 3xyq^2 است - به عنوان متغیر جدید t تعریف می شود و پس از خروج از حلقه، t در صفحه ی نمایش ظاهر می شود.
نکته: روشی که در این برنامه از آن استفاده شده است، کاربردهای بسیاری در برنامه نویسی پیشرفته دارد که باز هم به آن خواهیم پرداخت.
مثال ششم: برنامه ای که در هر سطر، اعداد 100 تا 110 را در مبنای 10، 2 و 16 در کنار یکدیگر می نویسد:
کد:
for i from 100 to 110 do
i, convert(i, binary), convert(i, hex);
od;
جواب:
موفق باشید.
25 مرداد 1391
ویرایش دوم: 3 شهریور 1391