Jump to content



Photo

آموزش Cplua


  • Please log in to reply
6 replies to this topic

#1 MicroPro

MicroPro

    Casio Overlord

  • Deputy
  • PipPipPipPipPipPipPip
  • 640 posts
  • Gender:Male
  • Location:Iran

  • Calculators:
    Casio ClassPad 300

Posted 20 May 2012 - 10:40 AM

Hi everyone. This is a CPLua tutorial written in Persian for Iranian students; nothing more. I'll try to cover CPLua-specific features and LNA in the future. If you're is interested for any reason, use Google Translate to read them.

سلام به همه دوستان عزیز.
از اونجایی که بیشتر کسانی که کلاس‌پد دارن از وجود برنامه CPLua خبر ندارن، در اینجا سعی می‌کنیم کمی با این برنامه آشنا بشیم.
CPLua یک زبان برنامه‌نویسی هست که برنامه‌هاش رو هم روی کلاس‌پد و هم روی کامپیوتر میشه نوشت و به کلاسپد انتقال داد. فرقش با برنامه‌ی Program خود کلاس‌پد این هست که زبان برنامه نویسیش Lua هست که خیلی قدرتمندتر از بیسیک کلاس‌پد هست. در ضمن سرعت بسیار بالایی هم داره و تابع‌های فراوانش امکان نوشتن برنامه‌های پیشرفته و بازی رو میدن.
همچنین با استفاده از کتابخانه‌ی LNA میشه کارهای رسم نمودار و آنالیز عددی انجام داد که برای خیلی از بچه‌های مهندسی مفیده. ان‌شاءالله سعی می‌کنم کمی از دانش ناقص خودم رو در مورد این برنامه در اختیارتون بگذارم.

نصب برنامه
اول باید از اینجا دونلودش کنید. بهتر هست نسخه 0.9E رو که یه خورده پایینتر نوشته شده دانلود کنید. فایل PDF هم که میبینید آموزش انگلیسی زبان Lua هست که دانلودش کنید و مرجع اصلی برای یادگیری زبان Lua همون هست. فایلها رو از حالت فشرده خارج کنید.
برای نصبش روی کلاس‌پد اگر کلاسپدتون 300 هست باید نرم افزار ClassPad Add-in Installer رو از قسمت Add-in Software زیر ClassPad 300/330 series در سایت دانلود کاسیو دانلود و نصب کنید، بعد اون رو اجرا کنید. توی کلاس‌پدتون وارد برنامه‌ی Communication شوید و گزینه‌ی Link -> Install -> Add-in >Add-in App -> OK بزنید. بعد توی اون نرم‌افزاره روی کامپیوتر Add-in -> Application رو انتخاب کنید و فایل CPLua.cpa را باز کنید تا نصب بشه.
اگر کلاسپد 330 و کلاسپد منجر 3 یا FA-CP دارید میتونید اول توی برنامه Communication گزینه‌ی Link -> Install -> Add-in >Add-in App -> OK رو انتخاب کنید بعد توی حالت Exchange Window توی کامپیوترتون روی کلاسپدتون توی ستون سمت چپ رایت‌کلیک کنید و Install Add-in بزنید. بهرحال آموزش کامل نصب برنامه توی http://www.classpad.ir/learning هست (مقاله‌های آموزش ClassPAd Manager 1 و 2 و 3).

حالا برنامه‌نویسی
بعد از نصب برنامه، روی آیکنش توی منوی کلاس‌پد کلیک می‌کنیم و وارد برنامه میشیم. با کلیک روی New File یک فایل جدید ایجاد و باز میشه. دکمه‌ی Keyboard کلاس‌پد رو میزنیم تا کیبورد برنامه بیاد. برنامه‌مون رو باید توی این محیط بنویسیم و بعد منوی Run رو یزنیم تا اجرا بشه. پیشنهاد میکنم با استفاده از منوی /*\ گوشه‌ی کلاسپد گزینه‌ی Keyboard را روی Small قرار بدید تا کیبرد محیط مناسب تر بشه.
در ضمن میتونید برای مثال های زیر از نسخه ویندوزی برنامه هم استفاده کنید فقط باید همونجا Link to CPVC.dll رو باز کنید تا فایل CPVC.dll دانلود بشه و اون رو توی همون پوشه ای که دانلود کردید بگذارید و با دابل کلیک روی CPLua.exe برنامه رو اجرا کنید.

برنامه نویسی ترس ندارد!
از اینجا به بعد قراره همه‌ش برنامه بنویسیم. اگر یک زبان برنامه‌نویسی دیگر از قبل بلد هستید خیلی خوبه ولی در اینجا سعی می‌کنم چیزا رو ساده توضیح بدم. به هرحال اگر میخواید برنامه‌نویسی رو خیلی حرفه‌ای تر کار کنید بهتره از همون PDF بالا یا کتاب‌های برنامه‌نویسی زبونایی مثل Python استفاده کنید.

یه برنامه عبارت هست از یه سری دستورات که پشت سر هم نوشته میشوند. هر دستور هم برای انجام یه کار خاص هست مثلاً نمایش یه متن روی صفحه، گرفتن عدد از کاربر، اعمال ریاضی مثل جمع و تفریق و سینوس، تعریف مجموعه و ماتریس، نمایش یه دایره روی صفحه گرافیکی و... بعضی دستورات هم برای تکرار بعضی قسمت‌های برنامه هستند.

به عنوان اولین برنامه، تایپ کنید: (علامت " در صفحه کلید کلاسپد با shift+\ و در صفحه کلید Small با shift+5 تایپ میشه)

print("Hello")
با کلیک روی منوی Run می‌بینید که متن Hello توی خروجی نمایش داده می‌شه («چاپ» میشه) و زیر اون عبارت Done. Press <- or EXE رو می‌بینید که نشونه‌ی اتمام موفقیت آمیز برنامه هست. اگر در برنامه‌ی شما خطایی باشد مانند غلطهای املایی در نوشتن دستورها و... پیغام Error نشان داده می‌شود و با زدن دکمه‌ی -> کلاس‌پد خود برنامه مجددا نمایش داده می‌شه تا خطا رو اصلاح کنیم.
به print در کد بالا میگویند «تابع» و خیلی شبیه همون توابع ریاضی هست که با اون‌ها آشنا هستید. این تابع هرچیزی رو که درون پرانتزهای روبروش بیاد روی صفحه نشون میده. این پرانتزها اجباری هستند (البته در حقیقت در بعضی موارد مثل همین میشه پرانتز نگذاشت ولی فعلاً برای سادگی میگوییم اجباری هستند) و تابع print هرچیزی رو که درون اون نوشته‌بشه نشون میده.

حالا یه مثاال دیگه:

print(2+2)
این بار برای ما عدد 4 در خروجی چاپ می‌شود.
طبیعی است که ما فقط به عبارت‌های ساده‌ی ریاضی نیاز نداریم. بعضی وقت‌ها متغیرهایی داریم که می‌خواهیم آن‌ها را توی فرمول قرار بدیم. در این گونه مواقع متغیرها را از قبل «تعریف» می‌کنیم و بعداً اونها رو توی برنامه استفاده می‌کنیم. مثل این:


x=10
y=30
print(x*y/2)
print(x^y)
که در خط اول x ضربدر y تقسیم بر 2 یعنی عدد 150 رو چاپ میکنه و در خط دوم x به توان y.
میتونیم مقادیر x و y رو در خطوط اول و دوم تغییر بدیم و با Run کردن برنامه نتیجه رو ببینیم.
نکته‌ی قابل توجه اینه که در اولین کد ما متن Hello را داخل «دابل کوتیشن» یا همون علامت " گذاشتیم ولی عبارات ریاضی رو داخل این علامت نمیگذاریم. چیزهایی که داخل علامت "..." قرار میدیم «رشته» نام دارند و دقیقاً در خروجی نشان داده می‌شوند. هر وقت میخواهیم متن را نمایش بدیم باید داخل رشته بگذاریم وگرنه متن با متغیر اشتباه می‌شود. به عنوان مثال کد زیر را اجرا کنید تا ببینید فرق دستور اول و دوم چیه:

print(2+2)
print("2+2")

و فرق دستورهای زیر رو هم با اجرا کردن این کد ببینید:

x = 10
print("x")
print(x)

قدم بعدی ما اینه که یه کاری کنیم برنامه خودش داده‌ها رو از کاربر بگیره و بعد از محاسبه نتیجه رو نشون بده. یعنی نمیخوایم برای محاسبه‌ی مجدد یه فرمول اعداد داخل کد رو تغییر بدیم بلکه میخوایم برنامه خودش عددها رو بگیره و محاسبه کنه و نشون بده. برای این کار باید از تابع input استفاده کنیم. قطعه کد زیر را اجرا کنید:

x=input()
y=input()
print(x+y)
این بار به جای x=10 نوشتیم () x=input. و با این کار باعث می‌شویم موقعی که برنامه را Run میکنیم، وقتی کلاس‌پد به عبارت () input برسد در قسمت پایین صفحه از کاربر ورودی بخواهد. با وارد کردن یک عدد و زدن EXE آن عدد در متغیر x قرار میگیرد. در خط بعد نیز دوباره از کاربر ورودی می‌خواهد و این بار آن را در متغیر y قرار داده‌ایم. خط بعدی که print(x+y) میباشد دقیقاً مثل قبل هست و مقادیر موجود در متغیرهای xو y را جمع می‌کند و نشان میدهد.
پرانتزهای جلوی input کاملاً اجباری هستند و در صورتی که اون رو نگذاریم در خطوط بعدی برنامه Error میدهد. بعدا در این مورد توضیح می‌دهیم.
البته در این شکل استفاده از input یک خطا هم داریم که آن را بعدا توضیح میدیم. در ضمن می‌توانید اگر مایل بودید داخل پرانتزهای input پیغامی را به کاربر نشان دهید.

به عنوان یه مثال پیشرفته تر برنامه‌ای را می‌نویسیم که طول و عرض یک مستطیل را گرفته و محیط و مساحت آن را حساب کند. با استفاده از منوی File -> New فایل جدیدی را ایجاد میکنیم و کد زیر را مینویسیم:

x = input(  "Length:"  )
y = input(  "Height:"  )
m = (x+y)*2
s = x*y
print(  "Mohit:"  ,  m )
print(  "Masahat:"  ,  s )

برنامه‌ی بالا رو با استفاده از File -> Save یه جایی ذخیره می‌کنیم. حالا میتونیم با خیال راحت از ‌CPLua خارج بشیم! دوباره وارد CPLua میشیم و با گزینه‌ی Run Script برنامه رو اجرا می‌کنیم. ابتدا دو تا مقدار Length و Height رو ازمون میگیره و بعد محیط و مساحت رو نشون میده. نیازی به تغییر کد هم این بار نداریم.


و اما بررسی کد برنامه: فایل رو Open کنید: دو خط اول همان دستورات input قبل هستند با این تفاوت که داخل پرانتز آنها متنهایی را داخل پرانتز نوشته ایم که این متنها صرفا به کاربر نمایش داده میشن و کاری به کد برنامه ندارند.
در دو خط بعد محیط و مساحت را محاسبه کردیم و به ترتیب داخل دو متغیر به نام های m و s ریخته ایم تا بعدا به کاربر نشون بدهیم.
در دو خط بعد دو دستور print داریم که آنها هم فرق کرده‌اند. دستور print یک خاصیت مفید داره و اینه که میتونیم چیزهایی رو که میخوایم توی یک خط نشون داده بشوند داخل پرانتزش با استفاده از کاما , از هم جدا کنیم. بنابراین print اول ابتدا متن «Mohit:» رو نشون میده و جلوی اون مقدار m رو چاپ میکنه. دستور print دوم هم Masahat: و بعد مقدار s رو چاپ می‌کنه. فاصله گذاریهای کد فوق فقط برای خواناترشدن بوده و اختیاری است و شما میتونید این قدر فاصله نگذارید.


اگه اینا خیلی ساده بود ناراحت نشید کم کم سخت هم میشه!
ظاهراً طول مطلب خیلی طولانی شد و همین قدر بسه. ان‌شاءالله «جلسه» بعد دستورات شرطی و توابع ریاضی و الحاق رشته و شکل درست دستور input رو یاد میگیریم (نوشتم اینجا یادم نره!)



#2 MicroPro

MicroPro

    Casio Overlord

  • Deputy
  • PipPipPipPipPipPipPip
  • 640 posts
  • Gender:Male
  • Location:Iran

  • Calculators:
    Casio ClassPad 300

Posted 02 June 2012 - 11:36 AM

سلام دوباره به همه!
در ادامه مطالب قبل فرق بین عدد و رشته رو میگیم. موقعی که یک عدد مثل 42 رو توی Lua مینویسیم، منظور همون عدد 42 در ریاضی هست. ولی وقتی اون رو داخل کوتیشن میگذاریم مثل "42" داریم یه رشته رو نشون میدیم. اعداد رو میتونیم جمع و ضرب و تقسیم و سینوس و... کنیم ولی رشته ها رو نه. مثلا 42 * 54 از نظر منطقی صحیح و امکانپذیر هست ولی "hello" * "hi" معنی نداره! جمع عدد و رشته دیگه خیلی میتونه زشت تر از این باشه مثلا 5 + "ok" چه معنی میتونه داشته باشه؟ مثل اینه که بگیم 5 تا پرتقال رو با جوانمردی جمع کنید. خوب 5 تا پرتقال که تکلیفش معلومه ولی جوانمردی که چیز قابل ضرب و جمع و تفریق نیست!
همه این گیج بازی ها رو گفتم که بگم توی Lua باید حواسمون باشه چه موقع هایی داریم با عدد کار میکنیم و چه موقع با رشته. مثلاً اگر داشته باشیم:

i=5
j=10
print(i+j)
این درسته ولی این یکی:

i="ClassPad "
j="is a calculator."
print(i+j)
بر خلاف انتظار ClassPad is a calculator رو چاپ نمیکنه چون که عملگر + فقط روی اعداد قابل انجام است. اگر بخوایم دو تا رشته رو به هم بچسبونیم، به این کار الحاق (concatenation) گفته میشه و با استفاده از دو تا نقطه انجام میشه:

i="ClassPad "
j="is a calculator."
print(i .. j)
این دفعه با موفقیت ClassPad is a calculator رو میبینم.
حالا بیاید یه برنامه بنویسیم که اسم کاربر رو بگیره و بهش سلام کنه:

name = input("Your name?")
print("Hello " .. name)

حالا این جا سوال پیش میاد اگر مثلا بنویسیم "123" + "456" آیا غلط هست؟ درسته که توی CPLua هیچ خطایی داده نمیشه و نتیجه درست 579 رو میبینیم ولی دلیل نمیشه که بخوایم همه کدهامون رو اینجوری بنویسیم! بهتره همیشه بین عدد و رشته تمایز قایل بشیم. بهتره بدونید موقعی که از تابع input استفاده میکنیم همیشه به ما رشته برمیگردونه. در این مواقع بهتره همیشه اونا رو به عدد تبدیل کنیم بعد اعمال ریاضی رو روشون انجام بدیم.
برای این کار مثال پست قبل رو که دو تا عدد میگرفت و جمع میکرد رو این بار با استفاده‌ی درست از input میاریم:

x = tonumber( input() )
y = tonumber( input() )
print(x + y)
در کد بالا با استفاده از تابع tonumber رشته رو به عدد تبدیل کرده‌ایم!
در ضمن کد بالا معادل این کد است:

x = input()
y = input()
print( tonumber(x) + tonumber(y) )
ولی معادل این نیست:

x = input()
y = input()
print( tonumber(x + y) )
چون در این آخری اول x + y انجام میشه که گفتیم غلطه و بعد tonumber.
در ضمن عکس این تبدیل یعنی تبدیل عدد به رشته هم با تابع tostring انجام میشه که کمتر کاربرد داره.


خوب مطالب بالا یه مشت تئوری به درد نخور بود حالا میریم سراغ مباحث جالب تر !
تا اینجا فقط شیوه جمع و تفریق و ضرب و تقسیم رو گفتیم که به ترتیب با علامتهای + و - و * و / نشون داده میشد. از توان هم میتونید استفاده کنید که با ^ نشون داده میشه. ولی تابعهای دیگه مثل سینوس و لگاریتم و... همشون داخل کتابخونه‌ی math هستند.
کتابخونه چیه؟ خودمم درست نمیدونم فقط میدونم برای این که از این تابعها استفاده کنیم باید قبلشون math. بگذاریم. مثلا این برنامه برامون سینوس میگیره:

print( math.sin(30) )
تابع math.sin همون تابع سینوس هست. خروجی برنامه بالا 0.5 نیست. چرا؟‌چون تمام توابع مثلثاتی بر اساس رادیان کار میکنند. یعنی همه عددامون باید توی واحد رادیان باشند. برای این که اون عدد 30 رو به رادیان تبدیل کنیم ضربدر عدد pi تقسیم بر 180 میکنیم یعنی:

print( math.sin(30 * 3.1415 / 180) )
راستی خود Lua عدد pi رو دقیق تا «خیلی» رقم بعد از اعشار داره و نیاز نیست خودمون 3.1415 بنویسیم:

print( math.sin(30 * math.pi / 180) )
و اتفاقا تابع برای تبدیل مستقیم از رادیان به درجه (به نام deg) و از درجه به رادیان (به نام rad) هم داریم:

print( math.sin( math.rad(30) ) )
خوب حالا ممکنه بپرسید نمیشه اون math. طولانی رو ننویسیم؟ چرا میشه شما میتونید اسم هر تابعی رومیخواید تغییر بدید (در حقیقت تابعها رو توی هر متغیری دلتون خواست بریزید). مثل:

sin = math.sin
dtr = math.pi / 180
print( sin(30 * dtr) )
دیدید چقدر برنامه خلاصه تر شد و بعدا کافیه به جای math.sin بنویسیم sin.

سوال بعدی هم که پیش میاد اینه که فقط تابع سینوس داریم؟ نخیر همه این تابع ها رو که توی این صفحه نوشته هم داریم:

http://lua-users.org...LibraryTutorial
از مهمترین تابع ها sin و cos و tan برای توایع مثلثاتی، sinh و cosh و tanh برای توابع هیپربولیک، asin و acos و atan توابع معکوس مثلثاتی، abs قدر مطلق، ceil و floor توابع کف (جزء صحیح) و سقف، log و log10 برای لگاریتم طبیعی و درپایه10، deg و rad هم که گفتیم، exp تابع نمایی (عدد e به توان x) و تابع sqrt یعنی تابع جذر است.

مثلا برنامه‌ی زیر عددی را از ورودی میگیره و جذرش رو چاپ میکنه:

x=tonumber(input("Enter number? "))
sq=sqrt(x)
print("Square root is: ",sq)

خوب حالا یکم از حال و هوای ریاضی بیایم بیرون بهتره بدونید کد بالا رو میتونستیم توی یه خط خلاصه کنیم:

print("Square root is: ", sqrt(tonumber(input("Enter number? "))))
یا مثلا اگر بخوایم بدون هیچ پیغام اضافی عددی رو بگیریم و جذرش رو چاپ کنیم:

print(sqrt(tonumber(input())))
این طرز نوشتن درسته ولی به علت خوانا نبودن توصیه نمیشه. در حقیقت خب برای چیزای پیشرفته تر اصلا نمیشه اینجوری نوشت.


منظور از چیزای پیشرفته تر جاهایی هست که نیاز به تصمیم گیری و... در برنامه داشته باشیم.

تاحالا برنامه هامون یه ورودی میگرفتن و میرفتیم جلو تا به خروجی میرسیدیم. حالا اگر فقط محاسبات ساده نداشتیم چی؟ مثلا فرض کنید میخوایم یه برنامه بنویسیم که یه عدد بگیره اگر مثبت هست positive رو نشون بده. این جاست که برنامه‌ی ما باید بر اساس ورودی تصمیم بگیره. و اینجاست که باید از ساختار if then else استفاده کنیم. ببینید:

x = tonumber( input() )
if x > 0 then
  print("Positive")
end
print("Program finished")
خط اول که مشخصه یه ورودی میگیره و به عدد تبدیل میکنه. خط بعدی میگه if x > 0 then یعنی "اگر x بزرگتر از صفر باشد آنگاه". هر چیزی که زیر این خط نوشته باشیم تا جایی که به end برسه فقط در صورتی که x بزرگتر از صفر باشه اجرا میشه. چیزای بعد از end دیگه جزو بخش if حساب نمیشن و همیشه اجرا میشن. پس اگر برنامه‌ی بالا رو اجرا کنیم و یه عدد مثبت بدیم ابتدا Positive و بعد Program finished رو نشون میده. ولی اگر عدد منفی بدیم فقط Program finished رو میبینیم چون اون بخشی که Positive رو نشون میده توی یک «بلوک» if محصور شده که فقط با شرط مثبت بودن x اجرا میشه.


میخاستم else رو هم توی همین مبحث بگم ولی ظاهرا از حوصله خارجه باشه دفعه بعد. فعلا خداحافظ.



#3 MicroPro

MicroPro

    Casio Overlord

  • Deputy
  • PipPipPipPipPipPipPip
  • 640 posts
  • Gender:Male
  • Location:Iran

  • Calculators:
    Casio ClassPad 300

Posted 22 June 2012 - 09:36 AM

سلام دوباره به همه و بریم سراغ قسمت else.

در کد قبلی فرض کنید میخوایم اگر x منفی باشه برامون Nagative چاپ کنه. این کار رو با یک قسمت else انجام میدیم:

x = tonumber( input() )
 if x > 0 then
   print("Positive")
else
   print("Negative")
end
print("Program finished")
با اجرای برنامه بالا، اگر عددی که میدیم مثبت باشه، شرط x > 0 رو بررسی میکنه و چون درست هست Positive چاپ می‌کنه، بعد از روی قسمت else میپره تا به end مربوط به بلوک if برسه و بعد Program Finished رو چاپ میکنه. اما اگه عدد منفی باشه: شرط x > 0 رو بررسی می‌کنه، چون این دفعه این عبارت منطقی صدق نمی‌کنه، چیزای بعد از if رو اجرا نمی‌کنه بلکه نگاه می‌کنه اگر قسمت else توی برنامه داشته باشیم (که اینجا داریم)، اون بخش رو اجرا می‌کنه. پس برامون Negative رو چاپ می‌کنه و از if خارج میشه و Program Finished هم همیشه چاپ میشه.

خوب حالا اگر یه نفر عدد صفر رو وارد کنه برنامه‌ی بالا چیکار میکنه؟ خودتون امتحان کنید. میبینم که Negative چاپ میشه. چرا؟ خوب معلومه اول شرط x > 0 بررسی میشه، ولی چون 0 بزرگتر از 0 نیست، این شرط غلطه بنابراین قسمت else رو اجرا میکنه.

توی بسیاری از موارد برنامه نویسی جاهایی هست که بیشتر از دو تا انتخاب داریم. مثل این جا اگه بخوایم در صورت وارد کردن عدد 0 عبارت Zero چاپ بشه، در حقیقت توی یه تصمیم سه حالته هستیم. در این مواقع هست که پای elseif هم وسط میاد:

x = tonumber( input() )
if x > 0 then
   print("Positive")
elseif x == 0 then
   print("Zero")
else
   print("Negative")
end
print("Program finished")
برنامه‌ی بالا نشون میده که هر تعداد بخوایم میتونیم حالت‌های مختلف برای تصمیم‌گیری داشته‌باشیم. توی کد بالا عبارت elseif x == 0 then هم به عنوان یکی از بخش‌های if نوشته شده. اگر کاربر عدد صفر رو وارد کنه، اول شرط x > 0 بررسی میشه که غلط هست پس برنامه میره جلو ببینه elseif یا else نوشتیم یا نه. چون elseif رو میبینه، شرط x == 0 (بخوانید:‌اگر ایکس برابر صفر باشد) رو بررسی میکنه و میبینه صدق می‌کنه، پس عبارات بعدشو اجرا می‌کنه یعنی Zero رو نشون میده و بعد به خارج از بلوک if میره و Program Finished رو چاپ میکنه. توجه کنید که اگر 0 وارد کنیم دیگه Negative رو چاپ نمیکنه چون که در یک بلوک if فقط محتوای یک بخش if یا elseif یا else اجرا میشه، به عبارت بهتر فقط یک تصمیم میتونه گرفته بشه و بعد از اجرای اون تصمیم (که اینجا مثبت بودن یا صفر بودن یا «در غیر اینصورت» بودن هست) اجرای برنامه از بعد از end مربوط به اون بلوک if از سرگرفته میشه.

نکته‌ای که اینجا هست اینه که در چک کردن شرط «اگر ایکس برابر صفر باشد» چرا بجای یک علامت مساوی دو تا گذاشته‌ایم؟ جواب: زیرا این دو علامت با هم فرق می‌کنند. = علامت انتساب هست مثلا فلان مقدار را بریز توی x ولی == علامت منطقی تساوی هست و توی شرطها همیشه باید از == استفاده کرد و استفاده از = موجب خطا میشه.


مثال دیگه: برنامه‌ای بنویسید که نمره‌های درخشان یک دانشجو رو بگیره، اگر بین 0 تا 10 باشه عبارت Fail رو نشون بده، بین 10 تا 15 عبارت Bad و بین 15 تا 20 عبارت Good. اگر نمره بین این عددها نباشه پیغام Error رو چاپ کنه.

x = tonumber(input())
 if 0 < x and x <= 10 then
   print "Fail"
 elseif 10 < x and x <= 15 then
   print "Bad"
 elseif 15 < x and x <= 20 then
   print "Good"
 else
   print "Error"
 end
با نگاه کردن به کد بالا طرز کارشو کشف کنید. در ضمن در x <= 10 اون علامت کوچکترمساوی هست. فقط یه نکته که باید توجه کنید اینه که برای چک کردن این که x بین دو تا عدد هست مثلا اینجوری if 0 < x <= 10 then نمیتونیم بنویسیم. بلکه باید مثل بالا if 0 < x and x <= 10 بنویسیم (که then درستش هم توی ریاضیات همین هست).


مثال دیگه: برنامه بنویسید که اسم یه آدم رو بگیره که اسامی شامل ali, jack, sara, mary هست. سپس جنسیت شخص مورد نظر رو چاپ کنه.

name = input()
 if name=="ali" or name=="jack" then
   print "Male"
 else if name=="sara" or name=="mary"
   print "Female"
 else
   print "I don't know"
 end
خوب در مثال قبل‌تری and رو دیده بودید، در این مثال or رو می‌بینیم که همون معنایی رو میده که شما به ذهنتون خطور میکنه. میگه «اگر نام برابر ali باشد یا نام برابر jack باشد آنگاه...». یک اشتباه که معمولاً برنامه‌نویسهای مبتدی می‌کنند ولی ما به عنوان مدعی‌های برنامه‌نویسی نمی‌کنیم، این هست که به جای شرط بالا می‌نویسند:

if name == "ali" or "jack" then ...
عبارت بالا کاملاً اشتباه هست! اگر کسی میخواد بدونه بگه ولی در حالت عادی توضیح نمیدم که چرا اشتباهه چون اگه بخوام بگم احتمالا مثل قبل پنج تا پاراگراف توضیح مینویسم ولی همهش مبهم بنابراین...


تا حالا از عملگرهای > و < و == توی شرطها استفاده کرده بودیم ولی کل عملگرها اینها هستند:

==  مساوی
 >   بزرگتر
 <   کوچکتر
 >=  بزرگتر یا مساوی
 <=  کوچکتر یا مساوی
 ~=  نا مساوی

در ضمن if و هر بلوک دیگه رو میشه توی زبان‌های برنامه نویسی تودرتو کرد. مثال پیچیده: فرض کنید یه استاد دانشگاه میخواد نمره‌های پایان ترم دانشجوهاشو رد کنه. اگر دانشجویی قبول شده باشه استاد 2 نمره اضافی بهش میده، اما اگر دانشجویی رد شده باشه در صورتی که اون دانشجو از دانشجوهای مورد علاقه استاد یعنی ali و sara باشه بهش 5 نمره ارفاق بکنه ولی از بقیه 2 نمره کم کنه! این برنامه باید اسم دانشجو و نمره شو بگیره و نمره نهایی رو پرینت کنه

name = input("Student name:")
 grade = tonumber(input("Student grade:"))
 if grade > 10 then
   grade = grade + 2
 else
   if name=="ali" or name=="sara" then
	 grade = grade + 5
   else
	 grade = grade - 2
   end
 end
 print("Final grade is ", grade)
تو کد بالا نام و نمره رو در دو خط اول میگیریم، اگر نمره بزرگتر از 10 باشه یعنی دانشجو قبول شده باشه دو نمره به نمره اش اضافه میکنیم. اما اگر نمره اش زیر 10 باشه، در صورتی که نامش جزو نامهای مورد علاقه استاده هست 5 نمره میده و در غیر اینصورت 2 نمره هم کم میکنه و به التماس های اون‌ها توجهی نمیکنه و در آخر هم نمره‌ی نهایی رو چاپ میکنه.

همون طور که میبیند درون قسمت else اولین if،‌ یه if دیگه با else و end مربوط به خودش گذاشتیم که کاملا درست هست. (گرچه در این مثال میتونستیم اون رو به صورت elseif ادامه‌ی همون if اول بنویسیم ولی همه جا نمیشه این کار رو کرد).

تورفتگیهایی که در کد میگذاریم (مثلا محتوای اولین if را با دو space میبریم جلو و محتوای دومین if را با تعداد بیشتری فاصله میبریم جلو) در کد اختیاری هستند. ولی شدیداً توصیه میشود که آنها را بگذارید چون اگه نگذارید شش ماه بعد برگردید به کد خودتون نگاه کنید هیچی ازش نمیفهمید در صورتی که اگر تورفتگیها را رعایت کنید کد بسیار خواناتر میشه.


و اما تمرین توی خونه! برنامه ای بنویسید که مقدار a و b و c یک معادله درجه دوم به فرم ax2+bx+c=0 رو بگیره، ریشه‌های اون رو محاسبه و چاپ کنه!

راهنمایی: صورت سوال بالا برای نوشتن این برنامه کافیه، ولی خوب الگوریتم اون رو اینجا توضیح میدیم: اول a و b و c رو می‌گیریم و دلتا رو محاسبه می‌کنیم. حالا یهه if میخوایم که اگر دلتا بزرگتر از صفر باشه دو تا ریشه رو حساب کنه و نشون بده، اگر صفر باشه خوب یه ریشه داریم و اگر منفی باشه هم مثلا بگه «ریشه حقیقی ندارد». توی محاسبات هم که باید جذر دلتا رو حساب کنید از تابع math.sqrt استفاده کنید.


اگر داریم روی if اینقدر مانور میدیم علتش اینه که از پایه‌ای ترین چیزها هست و if رو بلد باشیم بلوک‌های for و while هم راحت میشن. خدا بخواد از این پایه ای ها رد بشیم سرعت جلو رفتن آموزش خیلی بالاتر میره.


جلسه بعد: for و while

  • saeed511, Ata.H.D, farahmand and 1 other like this

#4 saeed511

saeed511

    Newbie

  • Members
  • Pip
  • 2 posts

Posted 23 September 2013 - 07:00 PM

سلام
ممنون از آموزش خوبتون اگر ممکن هست آموزش رو ادامه بدین و این تاپیک محلی باشه برای پرسش و پاسخ برای کاربران فارسی زبان


Edited by saeed511, 23 September 2013 - 07:02 PM.


#5 cp00u

cp00u

    Newbie

  • Members
  • Pip
  • 5 posts
  • Gender:Male
  • Location:HAMADAN
  • Interests:programming about mechanical analysis with CP330

  • Calculators:
    CP330
    fx-3650P

Posted 31 December 2013 - 02:18 PM

ادامش چی شد؟ و پروژه ی VB6 برای کلاسپد؟
  • sma4t likes this

#6 MicroPro

MicroPro

    Casio Overlord

  • Deputy
  • PipPipPipPipPipPipPip
  • 640 posts
  • Gender:Male
  • Location:Iran

  • Calculators:
    Casio ClassPad 300

Posted 24 March 2014 - 11:16 AM


سلام از لطفتون ممنونم و امیدوارم وقت آزاد پیدا کنم تا کمی دیگه با اطلاعات ناقصم آموزشو ادامه بدم.

در ضمن برای نوشتن متن فارسی از راست به چپ از تگ RTL استفاده‌کنید: :)


[‌rtl‌] متن فارسی [‌/rtl‌]
  • sma4t likes this

#7 Ali Bayati

Ali Bayati

    Newbie

  • Members
  • Pip
  • 2 posts

  • Calculators:
    Casio ClassPad II CP-400
    Casio FX-5800
    Casio FX-880P

Posted 01 March 2015 - 04:58 PM

سلام

من به تازگی کلاسپد ۲ خریده ام و شنیدم نمیتونم براش از لوآ استفاده کنم
درسته ؟

 


Edited by Ali Bayati, 01 March 2015 - 05:07 PM.

  • sma4t likes this


0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users