لذت برنامه نویسی!

!The Joy of Programming
by Babak Mahmoudabadi

نویسندگان

۸ مطلب در ارديبهشت ۱۳۹۵ ثبت شده است

  • ۰
  • ۰

 این برنامه با دریافت قد و وزن ، شاخص تناسب اندام(BMI)  را محاسبه کرده و براساس مقدار BMI  پیامی مبنی بر لاغری، وزن متعادل، اضافه وزن و چاقی را نمایش می دهد. 

به عنوان مثال در صورتی که مقدار BMI بزرگتر یا مساوی 25 و (AND) کوچکتر از 30 باشد پیام شما اضافه وزن دارید را هستید را نمایش می دهد. دراینجا "AND" یک عملگر منطقی می باشد و به کامپیوتر می گوید که نمایش پیام فقط باید درصورت برقراری هر دو شرط انجام شود.  


10 INPUT "ENTER YOUR WEIGHT (KG)"; WEIGHT

20 INPUT "ENTER YOUR HEIGHT (METER)"; HEIGHT

30 BMI = WEIGHT / (HEIGHT ^ 2)

40 PRINT

50 PRINT "YOUR BMI IS ="; BMI

60 IF BMI < 18.5 THEN PRINT "YOU ARE UNDER WEIGHT"

70 IF BMI >= 18.5 AND BMI<25 THEN PRINT "YOUR WEIGHT IS  NORMAL"

80 IF BMI >=25 AND BMI<30 THEN PRINT "YOU ARE OVER WEIGHT"

90 IF BMI >= 30 THEN PRINT "YOU ARE OBESE"





  • ۰
  • ۰

بعضی اوقات نیاز داریم اجرای یک یا چند دستور را منوط به برقراری شرط مشخصی نماییم در این مواقع حکم IF-THEN مورد استفاده قرارمی گیرد. 

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

10 INPUT "ENTER DAILY WAGE"; WAGE

20 INPUT "ENTER TOTAL DAYS" ; DAYS

30 INPUT "ENTER TAX EXEMPTION"; EXEMPT

40 IMPURE = WAGE * DAYS

50 INSURANCE = IMPURE * 0.07

60 TAX = 0

70 IF IMPURE  > EXEMPT THEN TAX = (IMPURE - EXEMPT) * 0.1

80 SALARY = IMPURE - INSURANCE - TAX 

90 PRINT

100 PRINT "IMPURE  SALARY ="; IMPURE 

110 PRINT "INSURANCE  ="; INSURANCE 

120 PRINT "TAX ="; TAX 

130 PRINT "SALARY ="; SALARY 




همانطور که می دانید حقوق تا سقف مشخصی از مالیات معاف می باشد. به عنوان مثال در سال 94 حقوق کمتر از مبلغ 1150000 تومان معاف از مالیات می باشد و به مابقی آن 10 در صد مالیات تعلق میگرد.

در خط 70 به کامپیوتر می گویم که اگر مبلغ حقوق ناخالص از سقف معافیت بزرگتر بود ده درصد مبلغ اختلاف حقوق و سقف معافیت را در متغییر TAX ذخیره کند. در غیر اینصورت مقدار TAX محاسبه نشده و صفر باقی می ماند.

به عبارت دیگر TAX تنها زمانی محاسبه می شود که مقدار متغییر IMPURE از مقدار متغییر EXEMPT بزرگتر باشد.

60 TAX = 0

70 IF IMPURE  > EXEMPT THEN TAX = (IMPURE - EXEMPT) * 0.1


پرسش: در خط 70 دلیل استفاده از پرانتز در عبارت محاسباتی را توضیح دهید.

  • ۰
  • ۰

چند تمرین ساده

1- برنامه ای بنویسید که دو عدد از ورودی دریافت کرده، مجموع و میانگین آنرا محاسبه کرده، نمایش دهد.

10 INPUT "ENTER FIRST NUMBER"; N1

20 INPUT "ENTER SECOND NUMBER"; N2

30 SUM = N1 + N2

40 AVG = SUM / 2

50 PRINT "SUM ="; SUM

60 PRINT "AVERAGE = "; AVG

2-برنامه ای بنویسید که طول و عرض یک مستطیل را از ورودی دریافت کرده، محیط و مساحت آنرا محاسبه کرده، نمایش دهد.

3-برنامه ای بنویسید که اندازه شعاع یک دایره را از ورودی دریافت کرده، محیط و مساحت آنرا محاسبه کرده، نمایش دهد.

  • ۰
  • ۰

متغییر چیست؟

متغییر قسمتی از حافظه اصلی کامپیوتر است که موقتا برای ذخیره یک مقدار مورد استفاده می گیرد. متغییر ها را می توان در عبارت محاسباتی بکار برد و دریافت و چاپ کرد.

هر متغییر داری سه مشخصه اصلی است:

1- نام: به عنوان شناسه ای منحصر به فرد برای دسترسی به محتوای متغییر بکار می رود.

2- نوع داده: مشخص کننده نوع مقدار ذخیره شده در متغییر می باشد.

در زبان بیسیک سه نوع داده وجود دارد:

  • حرفی یا رشته ای (Text String) مثل: "HELLO"
  • عدد صحیح (Integer) مثل: 255
  • عدد اعشاری (Floating Point) مثل: 3.141592

در زبان بیسیک از علامت $ و % به ترتیب برای تعیین نوع داده حرفی و عدد صحیح استفاده می شود و اعداد اعشاری فاقد علامت می باشند.

3- گنجایش: در مورد اعداد حداقل و حداکثر مقدار و در مورد حروف طول کلمه ای است که می توان درون متغییر ذخیره کرد. 

تحقیق: در مورد گنجایش انواع متغییر ها در بیسیک جستجو کنید.

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

10 NAME$="HELLO"

20 A%=255

30 PI=3.141592

40 PRINT NAME$, A%, PI

در خط 10 کلمه HELLO درون متغییری با نام NAME و از نوع حرفی ذخیره می شود.

در خط 20 مقدار 255 درون متغییری با نام A و از نوع عدد صحیح ذخیره می شود.

در خط 30 مقدار 3.141592 درون متغییری با نام PI و از نوع عدد اعشاری ذخیره می شود.

در خط آخر مقادیر هر سه متغییر چاپ می شود.


توجه کنید که علامت = به معنای ذخیره کردن و جایگزینی می باشد و معنای تساوی ندارد. به مثال زیر توجه کنید:

10 A=100

20 A=A+500

30 PRINT A

RUN

600

در خط 20 مقدار فعلی متغییر A که 100 می باشد با مقدار 500 جمع شده و حاصل یعنی 600 در خود متغییر A ذخیره می شود. 

پرسش: در مثال بالا اعداد 100 و 500 و 600 صحیح می باشند اما نوع متغییر A اعشاری است به عبارت دیگر امکان ذخیره اعداد صحیح در متغییری از نوع اعشاری وجود دارد زیرا اعداد صحیح زیر مجموعه اعداد اعشاری هستند.

با این توصیف چرا نوع داده مستقلی برای اعداد صحیح در زبان بیسیک وجود دارد و استفاده از آن چه مزیتی دارد؟

  • ۰
  • ۰

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

برای آشنایی با روش دریافت اطلاعات در زبان بیسیک مثال قبل را تکمیل می کنیم:

همانطور که مشاهده می کنید برنامه نام کاربر را پرسیده و به او سلام می کند.

 

برای دریافت نام کاربر از دستور INPUT استفاده می کنیم. دستور INPUT پس از اجرا با نمایش پیامی منتظر ورود اطلاعات می ماند و کاربر باید پس از تایپ مقدار مورد نظر خود دکمه ENTER را به نشانه اتمام ورود اطلاعات فشار دهد. متن کامل برنامه به شکل زیر است:

10 PRINT "HELLO, I'M THE COMMODORE 64"

20 INPUT "WHAT IS YOUR NAME"; NAME$

30 PRINT "HELLO "; NAME$

40 PRINT "NICE TO MEET YOU!"

دستور INPUT در خط 20 به کامپیوتر می گوید که با نمایش پیام "WHAT IS YOUR NAME" آنچه کاربر تایپ کرده است را درون متغییر $NAME ذخیره کن. 

دستور PRINT در خط 30 مقدار متغییر $NAME را چاپ می کند.

در پست بعد به مفهوم متغییر می پردازیم. 

  • ۰
  • ۰

برنامه زیر را وارد کنید:

10 ? "HELLO, I'M THE COMMODORE 64"
20 ? "WHAT IS NAME?"
 
برای تسریع در نوشتن برنامه  می توان از ? که شکل خلاصه دستور PRINT می باشد استفاده کرد. با وارد کردن دستور LIST مشاهده می کنید که همه علامت سوال ها به PRINT تبدیل شده است.
10 PRINT "HELLO, I'M THE COMMODORE 64"
20 PRINT "WHAT IS NAME?"
حال می خواهیم خط 20 را به شکل زیر اصلاح کنیم. 
20 PRINT "WHAT IS YOUR NAME?"
برای اینکار دو روش وجود دارد:
روش اول اینکه کل خط 20 را مجددا وارد کنیم.
روش دیگر اینکه ابتدا دستور 20 LIST را وارد می کنیم تا خط 20 نمایش داده شود. سپس با استفاده از کلیدی های جهت (ARROW KEYS) مکان نما (Cursor)را در بین IS و NAME قرارداده و ادامه دستور را تا انتها وارد می کنیم. در انتها برای تائید کار کلید  Enter را فشار می دهیم. برای مشاهده نتیجه کار دستور LIST را مجددا وارد کنید.
 
برای حذف کامل یک خط کافیست شماره خط را به تنهایی وارد کرده و Enter کنیم.
 
  • ۰
  • ۰
دستورات زیر را وارد کنید:
10 PRINT "5 * 9="
20 PRINT 5 * 9
همانطور که مشاهده کردید برخلاف همیشه پس از فشار کلید Enter در انتهای خط ، دستور PRINT اجرا نشد. 
دلیل این امر شماره گذاری خطوط می باشد. در این حالت برای اجرای دستورات وارد شده که اکنون برنامه (Program) نامیده می شود از فرمان RUN استفاده می کنیم.
پس از اجرا یا RUN ، تک تک دستورات به ترتیب از خط اول یعنی خط شماره 10 تا خط آخر اجرا می شوند:
RUN
5 * 9=
45

برای مشاهده فهرست برنامه، فرمان LIST را وارد کنید:

LIST

10 PRINT "5 * 9="
20 PRINT 5 * 9
از فرمان NEW برای حذف برنامه فعلی و نوشتن برنامه جدید استفاده می شود.
برنامه زیر را وارد و اجرا کنید:
NEW
10 PRINT "5 * 9=";
20 PRINT 5 * 9
RUN
5 * 9=45
در مثال دوم تاثیر ; را مشاهده می کنید. در خط 10 با قراردادن ; در انتهای دستور PRINT به کامپیوتر می گویم که چاپ بعدی در همین  خط باید انجام شود.
  • ۰
  • ۰

PRINT چند بخشی

یکی دیگر از قابلیت های دستور PRINT چاپ چند بخشی است. به مثال زیر توجه کنید:
PRINT 2 + 3, 10 * 2, 100 / 4
5         20        25
همانطور که مشاهده می کنید از کاما (,) می توان به عنوان جدا کننده برای چاپ چند مقدار استفاده کرد. 
عملکرد کاما دراین حالت مشابه کلید TAB می باشد به این معنی که نتیجه محاسبه هر عبارت در ستون بعد چاپ خواهد شد. عرض هر ستون در اینجا 10 نشانه یا حرف (Character) می باشد.

در صورتی که بخواهیم مقادیر بدون فاصله چاپ شوند می توانیم بجای کاما از ; (نقطه ویرگول یا Semicolon) استفاده کنیم. به مثال زیر توجه کنید:
PRINT "5 * 2="; 5 * 2
5 * 2=10

; کاربرد دیگری نیز دارد.
نتیجه PRINT همیشه در خط بعد چاپ می شود. اگر ; در انتهای دستور PRINT قرارگیرد نتیجه PRINT بعدی در همان خط چاپ خواهد شد. برای آزمایش این مورد باید اولین برنامه خود را بنویسیم!