پوریا بابایی

آموخته های من از مهندسی کامپیوتر - به زبان ساده، قابل فهم و کاربردی

پوریا بابایی

آموخته های من از مهندسی کامپیوتر - به زبان ساده، قابل فهم و کاربردی

برنامه نویسی مقدماتی - جلسه شماره دو

پوریا بابایی | پنجشنبه, ۱۲ ارديبهشت ۱۳۹۲، ۰۹:۱۴ ب.ظ

برنامه نویسی مقدماتی – جلسه شماره دو

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

تذکر : ما هنوز وارد مباحث برنامه نویسی نشدیم و تنها میخواهیم از اینجا به بعد الگوریتم هامون رو به زبانی نزدیک به زبانهای برنامه نویسی، بنویسیم. در اصطلاح می خواهیم از "شبه کد" استفاده کنیم تا زبان الگوریتم هامون به زبان های برنامه نویسی رایج نزدیک باشه.

خب، برای اینکه ادامه بدیم لازم هست تا یک سری تعاریف و مفاهیم رو بیان کنیم. حتما تعریف تابع رو از درس ریاضی به خاطر دارید. میخوام یک مثال ساده از توابع بزنم. فرض کنیم تابع f(x) دارای ضابطه f(x) = x+1 و دامنه Df={1,2,3,4,5,6}  است. اگر بخواهیم مجموعه مقادیر برد این تابع رو تعیین کنیم ، یکی یکی مقادیر x رو در ضابطه تابع قرار میدیم تا به ازای هر مقدار x یک مقدار برای f(x) بدست بیاریم. در این صورت مجموعه برد تابع ما Rf={2,3,4,5,6,7} خواهد بود. در واقع مقدار x میتونه تغییر پذیر باشه یا اینکه x یک متغیر است. این از تعریف متغیر.

حالا میخواهیم در مورد ورودی و خروجی صحبت کنیم. این خیلی واضح و روشنه که کامپیوتری که شما الآن دارید با استفاده از اون مطالب این جلسه رو می خونید یک سری ابزار برای دریافت درخواستهای شما داره (مثل کیبورد و موس) و یک سری ابزار هم برای نمایش نتیجه در خواست شما (مثل مانیتور و پرینتر). ساده ترین حالتش هم همین وب گردی هست. شما آدرس یک سایت رو به وسیله ی صفحه کلید وارد می کنید و کامپیوتر هم نتیجه رو از طریق مانیتور به شما نشون میده. حالا فرض کنید که کامپیوتر شما فقط یک کار رو میتونه انجام بده و اون هم جمع دو تا عدد هست! به این صورت که وقتی کامپیوتر رو روشن می کنید یک پیغام به صورت زیر روی صفحه نمایش به شما نشون میده:

Enter first number : _

به این معنی که عدد اول رو وارد کنید. شما هم از طریق کیبورد یک عدد رو به عنوان ورودی تایپ میکنید (مثلا عدد 10) و کلید Enter رو فشار میدین. بعد کامپیوتر پیغام زیر رو به شما نشون میده :

Enter second number : _

به این معنی که عدد دوم رو وارد کنید. و شما هم یک عدد دیگه رو به وسیله ی کیبورد و به عنوان ورودی دوم وارد می کنید (مثلا عدد 5) و بعد کلید Enter رو فشار میدین. کامپیوتر شما هم حاصل جمع رو به عنوان خروجی و به صورت زیر نمایش میده :

Result : 15

نکته : در مثال بالا ما دو تا ورودی و یک خروجی (حاصل جمع) داشتیم

خب حالا که با مفاهیم متغیر و ورودی/خروجی آشنا شدیم چند مسئله در همین مورد رو مطرح میکنیم.

مسئله شماره چهار: الگوریتمی بنویسید تا جمع دو عدد صحیح دلخواه را محاسبه کند.(زمان لازم برای این تمرین 1 دقیقه)

1. شروع

2. عدد اول را از وردوی دریافت کن و مقدار آن را در متغیر x قرار بده

3. عدد دوم را از ورودی دریافت کن و مقدار آن را در متغیر y قرار بده

4. مقدار متغیر z را برابر حاصل x+y قرار بده

5. مقدار z را در خروجی نمایش بده

6. پایان

و اگر بخواهیم این الگوریتم رو به صورت شبه کد بنویسیم به این صورت خواهد بود :

1. Start

2. Read “x”

3. Read “y”

4. z = x + y

5. Write “z”

6. end

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

1. Start

2. Read “x”

3. Read “y”

4. Read “z”

5. a = x + y + z

6. a = a / 3

7. Write “a”

8. end

البته که این مسئله بسیار ساده بود. اما یک سوال در اینجا پیش میاد! اگر در مسئله ای قرار بود میانگین 1000 عدد رو محاسبه کنیم، آیا باید 1000 دستور Read (یک عدد از ورودی دریافت کن) بنویسیم؟ برای 10 هزار عدد چطور!؟ مسلما که کار طاقت فرسا و خسته کننده ای خواهد بود. من میگم حالا که قراره یک یا چند دستور در قالب یک حلقه ی تکراری انجام بشن به جای اینکه ما در خدمت کامپیوتر قرار بگیریم، از اون بخواهیم که این حلقه ی تکرار رو برامون انجام بده.

مسئله شماره شش: الگوریتمی بنویسید تا میانگین عددی 10 عدد صحیح دلخواه را محاسبه کند. (زمان لازم برای این تمرین 3 دقیقه)

1. شروع

2. مقدار متغیر z را برابر 0 قرار بده

3. دستورات شماره 4 و 5 را 10 بار تکرار کن

4. یک عدد از ورودی دریافت کن و مقدار آن را در متغیر x قرار بده

5. z = z + x

6. z = z / 10

7. مقدار متغیر z را در خروجی نمایش بده

8. پایان

همین الگوریتم را به صورت شبه کد می نویسیم :

1. Start

2. z = 0

3. Repeat 10 times “#4 and #5 Instructions”

4. Read “x”

5. z = z + x

6. z = z / 10

7. Print “z”

8. End

 توجه : یک بار دیگر به دستور شماره 3 در الگوریتم بالا توجه کنید : " دستورات شماره 4 و 5 را 10 بار تکرار کن" . سوالی که در اینجا مطرح میشه اینه که کامپیوتر از کجا باید بفهمه که 10 بار یک کار رو انجام بده؟ اگه قرار باشه یک بچه کلاس اول ابتدایی 10 بار پشت سر هم بگه "الگوریتم" خب مسلما کاری که برای کنترل تعداد دفعات انجام میده اینه که از انگشتهای دستش استفاده میکنه. ولی خب کامپیوتر که انگشت نداره! و اصلا شمردن هم بلد نیست! در واقع ساختار کامپیوتر طوری هست که هیچ چیزی رو بلد نیست و قرار هم نیست بلد باشه! همه چیز رو ما باید بهش بگیم.

من برای حل این مسئله از یک متغیر کمک می گیرم. مقدار اون متغیر رو برابر 1 قرار میدم و هر بار که از ورودی یک مقدار میخونم، یکی به مقدار متغیر اضافه می کنم و هر بار حواسم هست که هر وقت مقدار متغیر به عدد 10 رسید از این حلقه تکرار خارج بشم. درست مثل این که یک ظرف با گنجایش 10 لیتر آب رو اونقدر زیر شیر آب نگه داریم تا اون ظرف پر از آب بشه و به محض این که ظرف پر شد شیر آب رو می بندیم.

مسئله شماره هفت : الگوریتم مسئله شماره شش را طوری اصلاح کنید که حلقه تکرار به صورت استاندارد درآید. (زمان لازم برای این تمرین 1 دقیقه)

1. شروع

2. مقدار متغیر i را برابر 1 قرار بده

3. مقدار متغیر z را برابر 0 قرار بده

4. یک عدد از ورودی دریافت کن و مقدار آن را در متغیر x قرار بده

5. z = z + x

6. مقدار i را یک واحد افزایش بده (i = i + 1)

7. اگر مقدار متغیر i کوچکتر یا مساوی عدد 10 بود، آنگاه به دستور شماره 4 برگرد

8. z = z / 10

9. مقدار متغیر z را در خروجی نمایش بده

10. پایان

1. Start

2. i = 1

3. z = 0

4. Read “x”

5. z = z + x

6. i = i + 1

7. if ( i <= 10 ) then go to “#4 instruction”

8. z = z / 10

9. Write “z”

10. End

تمرین : یک قلم و کاغذ بردارید و همین الگوریتم و الگوریتمی که خودتان برای مسئله شماره هفت نوشتید را تست کنید. به این صورت که دستورات الگوریتم را یک به یک اجرا کنید و در نهایت مطمئن شوید که مقدار خروجی الگوریتم مقدار درستی باشد.

تا اینجا با مفاهیم متغیر ، ورودی/خروجی آشنا شدیم. همچنین یاد گرفتیم تا چطور از یک حلقه ی تکرار برای انجام تعداد قابل توجهی دستور مشابه تکراری استفاده کنیم. اما برای اینکه بتونیم مسائل متنوع تری رو بررسی کنیم لازم هست تا مفهوم شرط رو هم بررسی کنیم.

همین الآن باید یه چیزایی رو از جلسه اول به خاطر بیاریم. اولین مورد، دستور شماره 4 از مسئله شماره 2 هست. لازم نیست برگردید، من این دستور رو دوباره اینجا ذکر میکنم :

4. اگر رنگ مهره آبی هست اون رو توی کیسه آبی قرار بده

میخوام با دقت بیشتری از اینجا به بعد رو بخونید. این دستور با یک شرط شروع میشه. در واقع این دستور داره میگه : "اگر فلان شرط برقرار بود، اونوقت یه کار مشخص رو انجام بده". حالا به دستورات شماره 5 و 6 از همون مسئله دقت کنید:

5. در غیر این صورت اگر رنگ مهره قرمز هست اون رو توی کیسه قرمز قرار بده

6. در غیر این صورت مهره رو توی کیسه سیاه قرار بده (توضیح : اگر رنگ مهره، آبی و قرمز نبوده باشه حتما رنگش سیاه هست)

دستور 5 داره میگه: "اگر شرط دستور 4 برقرار نبود، یک کار دیگه انجام بده" و دستور 6 هم داره میگه : "حالا که هیچ کدوم از دو تا شرط قبلی برقرار نبود، این کار رو انجام بده". خیلی بحث رو سختش نکنیم. به این نوع دستورات، در برنامه نویسی میگن دستورات شرطی.

بین خودمون باشه اما تمام بچه هایی هم که مدرسه نمیرن این نوع دستورات موسوم به دستورات شرطی رو بلدن! از بس که والدینشون بهشون گفتن : اگه غذاتو کامل بخوری، اونوقت زورت زیاد میشه! کلی مثال دیگه هم میشه زد. مثلا : اگر به اندازه کافی تلاش کنیم، آنگاه به نتیجه دلخواهمون میرسیم.

شبه کد استاندارد شامل یک سری کلمات و اصطلاحات استاندارد و به زبان انگلیسی می باشد. مثلا کلمه ی "اگر" رو با کلمه if و عبارت "در غیر اینصورت" با کلمه else بیان میشه.

خب حالا بیایم و این دستورات شماره 4 و 5 و 6 رو با کمی تغییر به صورت زیر بازنویسی کنیم :

4. در صورتی که رنگ مهره آبی بود، آنگاه در خروجی بنویس "آبی"

5. در غیر اینصورت اگر رنگ مهره قرمز بود، آنگاه در خروجی بنویس "قرمز"

6. در غیر اینصورت در خروجی بنویس "سیاه" (توضیح : اگر رنگ مهره، آبی و قرمز نبوده باشه حتما رنگش سیاه هست)

شبه کد استاندارد هم به این صورت خواهد بود :

4. If ( color == “blue” ) then Write “blue”

5. Else If ( color == “red” ) then Write “red”

6. Else Write “black”

نکته : برای اینکه بین عمل انتصاب (مانند z = 1) و بررسی شرط (مانند color == blue) تفاوتی قائل شده باشیم، در انتصاب از یک علامت تساوی "=" و در بررسی شرط از دو علامت تساوی "==" استفاده می کنیم.

خب در این جلسه تقریبا تمام مفاهیم و ابزار اولیه که برای الگوریتم نویسی لازم داریم رو بررسی کردیم. در جلسه بعد کمی در مورد فلوچارت صحبت می کنیم و همچنین مسائل سخت تری رو بررسی و حل خواهیم کرد. این جلسه رو با طرح یک مسئله به پایان می رسونیم :

مسئله شماره هشت : الگوریتمی بنویسید که با دریافت عدد حقیقی و دلخواه x از ورودی، مقدار تابع چند ضابطه ای زیر را محاسبه کند:


PreProgramming-session2

نظرات  (۱)

خیلی متشکر از زحماتتون. خیلی خوب بود. اجرتون با خدا.

ارسال نظر

ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
تجدید کد امنیتی