انجمن ریاضیات مقدماتی و تخصصی

محلی برای مباحث مقدماتی تا پیشرفته ی ریاضی
امروز يکشنبه 29 مهر 1397, 8:22 pm

ساعت سایت بر اساسUTC + 3:30 ساعت تنظیم شده است




ارسال مبحث جديد پاسخ به مبحث  [ 26 پست ]  برو به صفحه قبلي  1, 2, 3  بعدي
نويسنده پيغام
پستارسال شده در: يکشنبه 25 تیر 1391, 5:12 pm 
آفلاين
مدیر سایت

تاريخ عضويت: پنج شنبه 13 آبان 1389, 8:01 pm
پست ها : 645
محل سکونت: زنجان
تشکر کرده: 14 بار
تشکر شده: 51 بار

رشته یا string ( بخش هفتم)


تمام رشته های 3 حرفی که از رشته ی 1ba4 ساخته می شوند:

کد:

with(StringTools):
Generate( 3,"1ba4" )


جواب:

کد:

["111", "114", "11a", "11b", "141", "144", "14a", "14b", "1a1", "1a4", "1aa", "1ab", "1b1", "1b4", "1ba", "1bb", "411", "414", "41a", "41b", "441", "444", "44a", "44b", "4a1", "4a4", "4aa", "4ab", "4b1", "4b4", "4ba", "4bb", "a11", "a14", "a1a", "a1b", "a41", "a44", "a4a", "a4b", "aa1", "aa4", "aaa", "aab", "ab1", "ab4", "aba", "abb", "b11", "b14", "b1a", "b1b", "b41", "b44", "b4a", "b4b", "ba1", "ba4", "baa", "bab", "bb1", "bb4", "bba", "bbb"]


تمام اعداد حداکثر 3 رقمی که از ارقام عدد 1023 ساخته می شوند:

کد:

with(StringTools):
Generate( 3,"1023" ):
map(parse,%);


جواب:

کد:

[0, 1, 2, 3, 10, 11, 12, 13, 20, 21, 22, 23, 30, 31, 32, 33, 100, 101, 102, 103, 110, 111, 112, 113, 120, 121, 122, 123, 130, 131, 132, 133, 200, 201, 202, 203, 210, 211, 212, 213, 220, 221, 222, 223, 230, 231, 232, 233, 300, 301, 302, 303, 310, 311, 312, 313, 320, 321, 322, 323, 330, 331, 332, 333]


در عبارت ab123123d به جای اولین 123، عبارت UV را قرار بده:

کد:

with(StringTools):
Substitute( "ab123123d", "123", "UV" );


جواب:

کد:

"abUV123d"


در عبارت ab123123d به جای همه ی 123 ها، عبارت UV را قرار بده:

کد:

with(StringTools):
SubstituteAll( "ab123123d", "123", "UV");


جواب:

کد:

"abUVUVd"


چاپ تاریخ میلادی امروز، همراه با ساعت:

کد:

with(StringTools):
FormatTime( "%c" );


جواب:

کد:

"Sun Jul 15 18:02:25 2012"


اطلاعات کامل تری از تقویم امروز و ساعت کنونی:

کد:

with(StringTools):
ParseTime( "%c", % );


جواب:

کد:

Record(calendar = "Gregorian",second = 25,minute = 2,hour = 18,monthDay = 15,month = 7,year = 2012,weekDay = 1,weekDayName = "Sunday",yearDay = 197,`dst?` = false)


موفق باشید.
25 تیر 1391



بالا
 مشخصات  
 
پستارسال شده در: يکشنبه 25 تیر 1391, 5:16 pm 
آفلاين
مدیر سایت

تاريخ عضويت: پنج شنبه 13 آبان 1389, 8:01 pm
پست ها : 645
محل سکونت: زنجان
تشکر کرده: 14 بار
تشکر شده: 51 بار

رشته یا string ( بخش هفتم)


تمام رشته های 3 حرفی که از رشته ی 1ba4 ساخته می شوند:

کد:

with(StringTools):
Generate( 3,"1ba4" )


جواب:

کد:

["111", "114", "11a", "11b", "141", "144", "14a", "14b", "1a1", "1a4", "1aa", "1ab", "1b1", "1b4", "1ba", "1bb", "411", "414", "41a", "41b", "441", "444", "44a", "44b", "4a1", "4a4", "4aa", "4ab", "4b1", "4b4", "4ba", "4bb", "a11", "a14", "a1a", "a1b", "a41", "a44", "a4a", "a4b", "aa1", "aa4", "aaa", "aab", "ab1", "ab4", "aba", "abb", "b11", "b14", "b1a", "b1b", "b41", "b44", "b4a", "b4b", "ba1", "ba4", "baa", "bab", "bb1", "bb4", "bba", "bbb"]


تمام اعداد حداکثر 3 رقمی که از ارقام عدد 1023 ساخته می شوند:

کد:

with(StringTools):
Generate( 3,"1023" ):
map(parse,%);


جواب:

کد:

[0, 1, 2, 3, 10, 11, 12, 13, 20, 21, 22, 23, 30, 31, 32, 33, 100, 101, 102, 103, 110, 111, 112, 113, 120, 121, 122, 123, 130, 131, 132, 133, 200, 201, 202, 203, 210, 211, 212, 213, 220, 221, 222, 223, 230, 231, 232, 233, 300, 301, 302, 303, 310, 311, 312, 313, 320, 321, 322, 323, 330, 331, 332, 333]


در عبارت ab123123d به جای اولین 123، عبارت UV را قرار بده:

کد:

with(StringTools):
Substitute( "ab123123d", "123", "UV" );


جواب:

کد:

"abUV123d"


در عبارت ab123123d به جای همه ی 123 ها، عبارت UV را قرار بده:

کد:

with(StringTools):
SubstituteAll( "ab123123d", "123", "UV");


جواب:

کد:

"abUVUVd"


چاپ تاریخ میلادی امروز، همراه با ساعت:

کد:

with(StringTools):
FormatTime( "%c" );


جواب:

کد:

"Sun Jul 15 18:02:25 2012"


اطلاعات کامل تری از تقویم امروز و ساعت کنونی:

کد:

with(StringTools):
ParseTime( "%c", % );


جواب:

کد:

Record(calendar = "Gregorian",second = 25,minute = 2,hour = 18,monthDay = 15,month = 7,year = 2012,weekDay = 1,weekDayName = "Sunday",yearDay = 197,`dst?` = false)


موفق باشید.



بالا
 مشخصات  
 
پستارسال شده در: سه شنبه 27 تیر 1391, 12:22 pm 
آفلاين
مدیر سایت

تاريخ عضويت: پنج شنبه 13 آبان 1389, 8:01 pm
پست ها : 645
محل سکونت: زنجان
تشکر کرده: 14 بار
تشکر شده: 51 بار

عملوند op ( بخش اول)


یکی از قوی ترین دستورات میپل برای «درآوردن دل و قلوه» و مطلع شدن از جزئیات عبارات، عملوند (operand) ی است به نام op:


معرفی چند جمله ای سه متغیره ی p به میپل:

کد:

p:=x^2-3*x+2*y-x*y*z;


جواب:

کد:

p := x^2-3x+2y-xyz


جدا کردن تمام جملات p:

کد:

op(p)


جواب:

کد:

x^2, -3x, 2y, -xyz


دومین جمله ی p و جمله ی آخر p:

کد:
op(2,p);op(-1,p);


جواب:

کد:

-3x
-xyz


عملی که جملات p را به یکدیگر اتصال می دهد:

کد:

op(0,p);


جواب:

کد:

+


همه ی جملات ( همان آجرهای ساختمانی!!) عبارت xyz:

کد:

op(x*y*z);


جواب:

کد:

x, y, z


جمله ی اول عبارت xyz:

کد:
op(1,x*y*z);


جواب:

کد:
x


عملی که جملات xyz را به یکدیگر اتصال می دهد:

کد:

op(0,x*y*z);


جواب:

کد:

*


همه ی جملات عبارت x^2

کد:

op(x^2);


جواب:

کد:

x, 2


جمله ی اول عبارت x^2 و جمله ی دوم x^2:

کد:
op(1,x^2);op(2,x^2);


جواب:

کد:

x
2


عملی که جملات x^2 را به یکدیگر اتصال می دهد:

کد:

op(0,x^2);


جواب:

کد:

^


همه ی جملات عبارت «1بر y» یا « یک y ام»:

کد:

op(1/y);


جواب:

کد:

y, -1


عملی که جملات « یک y ام» را به یکدیگر اتصال می دهد:

کد:

op(0,1/y);


جواب:

کد:

^


همه ی جملات عبارت x/y

کد:

op(x/y);


جواب:

کد:

x, 1/y


عملی که جملات x/y را به یکدیگر اتصال می دهد:

کد:

op(0,x/y);


جواب:

کد:

*


موفق باشید.



بالا
 مشخصات  
 
پستارسال شده در: چهارشنبه 28 تیر 1391, 9:03 pm 
آفلاين
مدیر سایت

تاريخ عضويت: پنج شنبه 13 آبان 1389, 8:01 pm
پست ها : 645
محل سکونت: زنجان
تشکر کرده: 14 بار
تشکر شده: 51 بار

عملوند op ( بخش دوم)


جدا کردن جملات اول تا چهارم چند جمله ای x^3-5xy-z^3+4+rt:

کد:

op(1..4,x^3-5*x*y-z^3+4+r*t);


جواب:

کد:

x^3, -5*x*y, -z^3, 4


حذف پرانتزهای عبارت (r):

کد:

op((r));


جواب:

کد:

r


دومین عنصر عبارت (rx)


کد:
op(2,(r*x));


جواب:

کد:

x


حذف آکلادها از دو طرف مجموعه ی r و t و s:

کد:

op({r,t,s});


جواب:

کد:

r, s, t


دومین عنصر مجموعه ی r و t و s:

کد:

op(2,{r,t,s});


جواب:

کد:

s


اضافه کردن 1- به مجموعه ی 1و 2 و 3 و ایجاد مجموعه ی جدید:

کد:
{op({1,2,3}),-1};


جواب:

کد:
{-1, 1, 2, 3}


معرفی چند جمله ای poly:

کد:

poly:=x^2*d*f^2+3*x*y^2-5*x;


جواب:

کد:

poly := x^2df^2+3xy^2-5x


سومین عنصر از دومین جمله ی poly

کد:

op(3, op(2, poly));


جواب:

کد:

y^2


دومین عضو از سومین عنصر از اولین جمله ی poly:

کد:
op(2,op(3, op(1, poly)));


جواب:

کد:
2


معرفی دنباله (لیست) a:

کد:

a:=[1,2,3,4,5];


جواب:

کد:

a := [1, 2, 3, 4, 5]


حذف کروشه ها:

کد:

op(a);


جواب:

کد:

1, 2, 3, 4, 5


دومین عنصر a و عنصر ماقبل آخر a:

کد:

op(2,a);op(-2,a);


جواب:

کد:

2
4


سومین عنصر a:

کد:

op(a)[3];


جواب:

کد:

3


اضافه کردن 5- به لیست a و ایجاد لیست جدید:

کد:

[op(a),-5];


جواب:

کد:

[1, 2, 3, 4, 5, -5]


معرفی دنباله (لیست) b:

کد:

b:=[d,2,v,6];


جواب:

کد:

b := [d, 2, v, 6]


اتصال دو لیست a و b و ایجاد لیست جدیدی به نام L:

کد:

L:=[op(a),op(b)];


جواب:

کد:

L := [1, 2, 3, 4, 5, d, 2, v, 6]


چاپ عنصر چهارم تا عنصر ماقبل آخر L:

کد:

op(4..-2,L);


جواب:

کد:

4, 5, d, 2, v


در L به جای عنصر هفتم عبارت list را قرار بده:

کد:

subsop(7=list,L);


جواب:

کد:

[1, 2, 3, 4, 5, d, list, v, 6]


در L به جای عنصر هفتم عبارت 1-،  به جای عنصر هشتم عبارت f و به جای عنصر اول، لیست a را قرار بده:

کد:

subsop(7=-1,8=f,1=a,L);


جواب:

کد:

[[1, 2, 3, 4, 5], 2, 3, 4, 5, d, -1, f, 6]


موفق باشید.



بالا
 مشخصات  
 
پستارسال شده در: جمعه 30 تیر 1391, 3:26 pm 
آفلاين
مدیر سایت

تاريخ عضويت: پنج شنبه 13 آبان 1389, 8:01 pm
پست ها : 645
محل سکونت: زنجان
تشکر کرده: 14 بار
تشکر شده: 51 بار

عملوند op ( بخش سوم)


معرفی لیست l:

کد:

l:=[1,1,2,3,4,5];


جواب:

کد:

l := [1, 1, 2, 3, 4, 5]


تعداد عناصر l:

کد:

nops(l);


جواب:

کد:

6


تعداد جملات a+b+x^2

کد:

nops(a+b+x^2);


جواب:

کد:

3


تعداد عناصر x^2 و تعداد عناصر x/y :

کد:

nops(x^2);nops(x/y);


جواب:

کد:

2
2


بسط عبارت x+y)^4)

کد:

expand( (x+y)^4 );


جواب:

کد:

x^4+4x^3y+6x^2y^2+4xy^3+y^4


تعداد جملات عبارت قبل:

کد:
nops(%);


جواب:

کد:
5


تعداد همه ی رشته هایی به طول 10 که با استفاده از کاراکترهای رشته ی abc ساخته می شوند:

کد:

nops( Generate( 10, "abc" ) );


جواب:

کد:

59049


برنامه ی 1: محاسبه ی بزرگترین عدد اول شمارنده ی عدد 49000:


کد:

ifactor( 49000 );   
op( nops(%), % );
op( 1, % );    
op( 1, % );


جواب:


توضیح برنامه ی 1:


خط 1: عدد 49000 را تجزیه کن.
خط 2: آخرین بخش عبارت قبل را جدا کن.
خظ 3: اولین بخش عبارت قبل را جدا کن.
خط 4: اولین بخش عبارت قبل را جدا کن.


برنامه ی 2: محاسبه ی کوچکترین عدد اول شمارنده ی عدد 49000:


کد:

ifactor( 49000);
op( 1, % );
op( 1, % );
op( 1, % );


جواب:



توضیح برنامه ی 2:


خط 1: عدد 49000 را تجزیه کن.
خط 2: اولین بخش عبارت قبل را جدا کن.
خظ 3: اولین بخش عبارت قبل را جدا کن.
خط 4: اولین بخش عبارت قبل را جدا کن.


موفق باشید.



بالا
 مشخصات  
 
پستارسال شده در: چهارشنبه 4 مرداد 1391, 11:22 am 
آفلاين
مدیر سایت

تاريخ عضويت: پنج شنبه 13 آبان 1389, 8:01 pm
پست ها : 645
محل سکونت: زنجان
تشکر کرده: 14 بار
تشکر شده: 51 بار

دنباله ها


دنباله ی اعداد صحیح متوالی 2- تا 3:

کد:

$-2..3;


جواب:

کد:

-2, -1, 0, 1, 2, 3


اندیس گذاری متوالی:

کد:

s[i]$i=-2..3;


جواب:


تکرار x سه بار:

کد:

x$3;


جواب:

کد:

x, x, x


ابتدا تعریف تابع f و سپس ایجاد دنباله ای از توان های x که توان ها مقادیر f روی 1 تا 4 است:

کد:

f:=x->x^2+x+1;
x^f(i)$i=1..4;


جواب:



رسم تصویری زیبا با استفاده از دنباله ها:

کد:

with(plots):
polarplot( {c*cos(6*t) $ c = 1..12}, t = 0..2*Pi, scaling = constrained);


جواب:


توضیح:


در دستور بالا، توابع (c*cos(6*t  در مختصات قطبی با مقیاس مقید رسم شده اند که c عدد صحیحی است که از 1 تا 12 تغییر می کند، و پارامتر t از 0 تا 2pi (در واقع 12 تصویر با رنگ های مختلف در یک دستگاه)


موفق باشید.



بالا
 مشخصات  
 
پستارسال شده در: پنج شنبه 12 مرداد 1391, 7:13 pm 
آفلاين
مدیر سایت

تاريخ عضويت: پنج شنبه 13 آبان 1389, 8:01 pm
پست ها : 645
محل سکونت: زنجان
تشکر کرده: 14 بار
تشکر شده: 51 بار

تصمیم گیری با if و elif
در بسیاری از برنامه ها، مجبور به تصمیم گیری هستیم که فلان دستور اجرا بشود یا نه؛ به عبارت دقیق تر!! اگر فلان اتفاق افتاد یا فلان عبارت منطقاً درست بود، چه دستوری اجرا شود. به مثال های ساده ی زیر توجه کنید:


برنامه ی 3:


اگر 2 کمتر یا مساوی 3 بود، آنگاه عبارت "*" چاپ شود. (دقت کنید که آخر برنامه با fi یا end if تمام می شود. این نکته، ساده اما بسیار مهم است.)

کد:

if 2<=3 then print("*"); fi;


جواب:

کد:

"*"


برنامه ی 4:


اگر 2 بزرگتر از 3 بود، آنگاه عبارت "*" چاپ شود.

کد:

if 2>3 then print("*");end if;


جوابی دریافت نخواهید کرد (چرا؟)


برنامه ی 5:


متغیر a را 2 و متغیر b را 3 تعریف کن. اگر a مثبت و حاصل ضرب ab از 4 کوچکتر بود، a و در غیر این صورت (else) متغیر b  را تحویل بده. (در غیر این صورت، یعنی اگر a مثبت نبود یا حاصل ضرب ab از 4 کوچکتر نبود).

کد:

a:=2:
b:=3:
if a>0 and a*belse b;
fi;


جواب:

کد:

3


توضیح دهید که چرا برنامه ی 5، عدد 3 را به عنوان جواب، به ما تحویل داد.



برنامه ی 6:


متغیر a را 2 و متغیر b را 3 تعریف کن. اگر a  بزرگ تر از 5 یا حاصل ضرب ab از 7 کوچک تر بود، a و در غیر این صورت (else) متغیر b  را تحویل بده. (در غیر این صورت، یعنی اگر a بزرگ تر از 5 نبود و حاصل ضرب ab از 7 کوچکتر نبود).

کد:

a:=2:
b:=3:
if a>5 or a*b   else b
fi;


جواب:

کد:

2


توضیح دهید که چرا برنامه ی 6، عدد 2 را به عنوان جواب، به ما تحویل داد.



برنامه ی 7:


متغیر a را (sin(1.8 و متغیر b را (ln(1.8 تعریف کن. اگر a  بزرگ تر از b  بود، عبارت "a is larger" و در غیر این صورت، عبارت "a is not larger" را چاپ کن.

کد:

a := sin(1.8): b := ln(1.8):
if a > b then print( "a is larger" );
else print( "a is not larger" );
end if;


جواب:

کد:

"a is larger"


برنامه ی 8:


به کار بردن if در یک تابع:
تعریف تابعی با نام f و متغیر صحیح n: اگر باقیمانده ی تقسیم عدد صحیح n بر 2 صفر بود (n زوج بود)، آنگاه عبارت even را چاپ کن و در غیر این صورت چاپ کن: odd.

کد:

f:=n->if irem(n,2)=0 then print(even)
else print(odd)
fi:


دستور زیر را تایپ کنید و Enter را بزنید:

کد:

f(2);


جواب:

کد:

even


دستور زیر را تایپ کنید و Enter را بزنید:

کد:

f(9);


جواب:

کد:

odd


موفق باشید.



بالا
 مشخصات  
 
پستارسال شده در: شنبه 14 مرداد 1391, 10:42 am 
آفلاين
مدیر سایت

تاريخ عضويت: پنج شنبه 13 آبان 1389, 8:01 pm
پست ها : 645
محل سکونت: زنجان
تشکر کرده: 14 بار
تشکر شده: 51 بار

تصمیم گیری با if و elif (بخش دوم)

به این دستور توجه کنید: (آیا عدد 3، عددی اول است؟)

کد:

isprime(3);


جواب:

کد:

true


به این دستور نیز توجه کنید: (آیا عدد 6، عددی اول است؟)

کد:

isprime(6);


جواب:

کد:

false


یک برنامه ی کوتاه (اگر خروجی دستور (isprime(7 عبارت true است، به طور ساده تر، اگر 7 عددی اول است، عبارت "*" را چاپ کن):

کد:

if isprime(7)=true then print("*") fi;


جواب:

کد:

"*"


برنامه ی کوتاه بالا را می توان کوتاه تر کرد:

کد:

if isprime(7) then print("*") fi;


جواب:

کد:

"*"


به کارگیری دستور if کمی پیشرفته تر!!
اگر 1 از 2 بزرگتر باشد، عدد 3 و در غیر این صورت عدد 4 را چاپ کن.

کد:

`if`(1>2,3,4);


جواب:

کد:

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 xfi:


مثال

کد:

f(2),f(0),f(-2);


جواب:

کد:

2, 0, 2


حتی می توانید پس از تعریف f، آن را با دستور زیر، رسم کنید:

کد:

plot(f,-2..2,-1..2);


یعنی 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" را.


موفق باشید.



بالا
 مشخصات  
 
پستارسال شده در: دوشنبه 10 تیر 1392, 9:01 am 
آفلاين
مدیر سایت

تاريخ عضويت: پنج شنبه 13 آبان 1389, 8:01 pm
پست ها : 645
محل سکونت: زنجان
تشکر کرده: 14 بار
تشکر شده: 51 بار

تکرار دستورات با حلقه ی for- do (بخش اول)
در این جلسه به یکی از مهمترین دستورات برنامه نویسی خواهیم پرداخت که اهمیت آن برای برنامه نویس از نان شب هم واجب تر است!!! در اکثر برنامه ها شما مجبورید که دستور یا دستوراتی را دائماً تکرار کنید تا نتیجه ی دلخواهتان به دست آید. به مثال های ساده ی زیر توجه کنید:
مثال اول: می خواهیم سه بار عبارت Hello زیر هم چاپ شود:


برنامه 11:


کد:


for i from 1 to 3 do 
Hello;
end do;



جواب:

کد:


Hello
Hello
Hello


توضیح:
در دستور بالا ابتدا متغیر i، عدد 1 تعریف و میپل وارد برنامه می شود و عبارت Hello را چاپ می کند و به ابتدای برنامه برمی گردد، سپس متغیر i، عدد 2 تعریف و میپل وارد برنامه می شود و عبارت Hello را چاپ می کند و باز هم به ابتدای برنامه برمی گردد و متغیر i، عدد 3 تعریف و میپل وارد برنامه می شود و عبارت Hello را چاپ می کند و چون i به حداکثر مقدار خود رسیده است، برنامه از حلقه خارج می شود.
توجه: آخر حلقه ی for-do با end do یا od به اتمام می رسد.

مثال دوم: چاپ اولین تا پنجمین عدد اول زیر هم:


برنامه 12:


کد:


for i from 1 to 5 do
ithprime(i)
od;



جواب:

کد:


2
3
5
7
11


توضیح:
در دستور بالا ابتدا متغیر i، عدد 1 تعریف و میپل وارد برنامه می شود و دستور (ithprime(1 - چاپ اولین عدد اول - را اجرا می کند؛ (این گونه تصور کنید که به جای i عدد 1 می گذارد) و به ابتدای برنامه برمی گردد؛ سپس متغیر i، عدد 2 تعریف و میپل وارد برنامه می شود و دستور (ithprime(2 - چاپ دومین عدد اول - را اجرا می کند؛ (این گونه تصور کنید که به جای i عدد 2 می گذارد) و به ابتدای برنامه برمی گردد و به همین ترتیب تا i=5.

مثال سوم: چاپ توان های دوم 11، 21، 31، 41 و 51:


برنامه 13:


کد:


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 یک واحد کم و اعداد به دست آمده را زیر یکدیگر چاپ می کند:


برنامه 14:


کد:


A:={2,4,6,7};
for i in A do
i-1
end do;



جواب:

کد:


1
3
5
6



توضیح:
در دستور بالا ابتدا متغیر i، عدد 2 تعریف و میپل وارد برنامه می شود و از 2 یک واحد کم شده، آن را چاپ میکند (این گونه تصور کنید که برنامه به جای i عدد 2 می گذارد) و به ابتدای برنامه برمی گردد؛ سپس متغیر i، عدد 3 تعریف و میپل وارد برنامه می شود و از 3 یک واحد کم شده، آن را چاپ میکند (این گونه تصور کنید که برنامه به جای i عدد 3 می گذارد) و به ابتدای برنامه برمی گردد، به همین ترتیب تا i=7.

نکته: از برنامه ی بالا می توان برای حالاتی که گام های مساله مشخص نیست، استفاده کرد.


مثال پنجم: برنامه ای که همه ی عبارات زیر را در هم ضرب کند:



برنامه 15:


 

کد:


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 در کنار یکدیگر می نویسد:


برنامه 16:


 

کد:


for i from 100 to 110 do
i, convert(i, binary), convert(i, hex);
od;


جواب:



موفق باشید.



بالا
 مشخصات  
 
پستارسال شده در: سه شنبه 11 تیر 1392, 11:13 am 
آفلاين
مدیر سایت

تاريخ عضويت: پنج شنبه 13 آبان 1389, 8:01 pm
پست ها : 645
محل سکونت: زنجان
تشکر کرده: 14 بار
تشکر شده: 51 بار

تکرار دستورات با حلقه ی for- do (بخش دوم)
در این جلسه نیز به علت اهمیت دستور for-do به چند مثال دیگر می پردازیم:


مثال اول: می خواهیم تمام مقسوم علیه های 126 زیر هم چاپ شود:


برنامه 17:


کد:


n:=126:
for d from 1 to n do
 if n mod d = 0 then
 print(d);
 end if;
end do;



جواب:

کد:


1
2
3
6
7
9
14
18
21
42
63
126



توضیح: دستور  n mod d باقیمانده ی تقسیم n بر عدد d است. دقت کنید که به جای برنامه ی بالا می توان یکی از دستورات زیر را استفاده کرد، خودتان اجرا کنید و نتیجه را ببینید (جواب را به صورت یک مجموعه خواهید دید):


کد:


 with(numtheory):
divisors(126);



کد:

numtheory['divisors'](126);


مثال دوم: 10 جمله ی اول دنباله ی فیبوناتچی:


برنامه 18:


کد:

n:=10:
x1:=1;x2:=1;
for i from 3 to n do
fib := x1+x2:
print(fib); 
 x1 := x2;
x2 := fib;
od:


توضیح: برنامه ی بالا دو جمله ی اول دنباله را که 1و 1 است، گرفته، با استفاده از تعریف  دنباله، 8 جمله ی دیگر آن را ارائه می کند. به جای برنامه ی بالا می توان از دستور زیر استفاده کرد، خودتان اجرا کنید و نتیجه را ببینید (جواب را به صورت یک دنباله خواهید دید):


کد:

with(combinat, fibonacci):
 seq(fibonacci(i), i=1..10);
 fibonacci(10);


توضیح: خط آخر دستور بالا، دهمین عدد دنباله ی فیبوناتچی را همراه با بسته ی combinat ارائه می کند.


 مثال سوم: مثالی ساده برای چاپ توان های دوم اعداد طبیعی در یک سطر:


برنامه 19:


کد:

s:=NULL:
for i from 1 to 10 do
s:=s,i^2:
od:
s;


جواب:


کد:

1, 4, 9, 16, 25, 36, 49, 64, 81, 100


توضیح:  NULL یک کاراکتر تهی است.


مثال چهارم: استفاده از دستور دنباله ساز seq برای ایجاد یک مثلث عددی از توان های دوم اعداد طبیعی:


برنامه 20:


کد:

for i from 0 to 10 do
seq(j^2,j=1..i)
od;


جواب:



مثال پنجم: 5 ماتریس 2 در 2 ی تصادفی با درایه های 0 و 1 و محاسبه ی دترمینان آنها (در این مثال از for و اندیس ابتدایی for خبری نیست(!!) و فقط اندیس آخری را که همان 5 است، می بینید)، لازم است بسته ی جبر خطی نیز در ابتدا فراخوانی شود؛ برنامه را خودتان اجرا کنید و نتیجه را ببینید:


برنامه 21:


کد:


with( LinearAlgebra ):
to 5 do
RandomMatrix( 2, 2, generator=0..1 );
Determinant( % );
end do;



 مثال ششم: تولید 14 سطر اول مثلث مشهور خیام-پاسکال:


برنامه 22:


کد:


for i from 0 to 13 do
expand( (x+y)^i );
seq( coeffs(op(j, %)), j=1..nops(%) );
print( % );
od:



جواب:



 


توضیح: دستور expand برای بسط دو جمله ی و دستور coeffs برای بیرون کشیدن تمام ضرایب بسط دو جمله ای استفاده می شود؛ قبلاً هم درباره ی op مفصلاً توضیح داده شده است.


مثال هفتم: روش دیگری برای تولید مثلث خیام-پاسکال (خودتان اجرا کنید و نتیجه را ببینید):


برنامه 23:


کد:


for j from 0 to 10 do
S := NULL:
for i from 0 to j do
S := S, binomial(j,i):
end do:
print(S);
od:



توضیح: دستور binomial تعداد انتخاب های i عضو از میان j عضو است.


موفق باشید.



بالا
 مشخصات  
 
نمايش پست ها از پيشين:  مرتب سازي بر اساس  
ارسال مبحث جديد پاسخ به مبحث  [ 26 پست ]  برو به صفحه قبلي  1, 2, 3  بعدي

ساعت سایت بر اساسUTC + 3:30 ساعت تنظیم شده است


چه کسي حاضر است ؟

کاربران حاضر در اين انجمن: بدون كاربران آنلاين و 3 مهمان


شما نمي توانيد مبحث جديدي در اين انجمن ايجاد کنيد
شما نمي توانيد به مباحث در اين انجمن پاسخ دهيد
شما نمي توانيد پست هاي خود را در اين انجمن ويرايش کنيد
شما نمي توانيد پست هاي خود را در اين انجمن حذف کنيد
شما نمي توانيد فايل هاي پيوست در اين انجمن ارسال کنيد

جستجو براي:
انتقال به:  
cron
| Powered by phpBB® Forum Software © phpBB Group
Translation : phpBB Persian | phpBB Style | Host | Backup