- اهداف هفته اول
- IDE CS50
- به روز رسانی خط فرمان و میز کار
- کار در IDE
- سلام سی!
- اشکالات؟
- بررسی اعتبار: تست check50
- C مبانی: مقایسه با Scratch
- انواع داده های پایه در C
- کتابخانه ها ج
- سلام مجدد C: تجزیه و تحلیل نحو ساده ترین برنامه ها
- کمی بیشتر در مورد I/O در C
- ورود داده های معتبر: توابع ویژه کتابخانه cs50.h
- وظیفه 1. محاسبه هوشمند مصرف آب
- وظیفه 2. ماریو با ما است!
- وظیفه 3. زمان تغییر است
- چگونه کد خود را تأیید کنید و امتیاز بگیرید
- منبع کد
- ادبیات اضافی
ورود داده های معتبر: توابع ویژه کتابخانه cs50.h
برای راحتتر کردن این دوره، ما یک کتابخانه ویژه CS50 ایجاد کردهایم که به ویژه عملکردهای بسیار مفیدی برای پردازش دادههای وارد شده توسط کاربر دارد.-
GetString()
رشته وارد شده توسط کاربر را می خواند. -
GetInt()
رشته وارد شده توسط کاربر را می خواند و بررسی می کند که آیا دارای یک عدد صحیح است یا خیر. -
GetFloat()
رشته وارد شده توسط کاربر را می خواند و بررسی می کند که آیا دارای یک عدد ممیز شناور است یا خیر. -
GetLongLong()
رشته وارد شده توسط کاربر را می خواند و بررسی می کند که آیا دارای یک عدد واقعی طولانی است یا خیر.
وظیفه 1. محاسبه هوشمند مصرف آب
![هاروارد CS50: تکالیف هفته 1 (سخنرانی 3 و 4) - 2](https://cdn.javarush.com/images/article/857f80ea-75bb-4a20-b637-3c705c27a449/1024.jpeg)
water.c
در خود ایجاد کنید ~/workspace/pset1
. این برنامه باید تعداد بطری های آب برای دوش گرفتن بسته به زمان را محاسبه کند. به این معنا که:
- این برنامه از کاربر تعداد دقایق سپری شده در حمام را می پرسد
- کاربر یک عدد صحیح مثبت وارد می کند
- این برنامه تعداد بطری های استفاده شده توسط کاربر را نمایش می دهد.
username:~/workspace/pset1 $ ./water
minutes: 10
bottles: 120
برای سادگی، این بار فرض می کنیم که کاربر همیشه تعداد دقیقه ها را به درستی وارد می کند، یعنی بررسی نمی کنیم که آیا عدد وارد شده مثبت و صحیح است یا خیر. بعداً نحوه نوشتن چک را یاد خواهیم گرفت، اما در حال حاضر این کافی است. برای بررسی اینکه برنامه به درستی اجرا می شود، check50,
باید خط زیر را در ترمینال وارد کنید:
check50 2015.fall.pset1.water water.c
و اگر می خواهید ببینید برنامه water
نوشته شده توسط کارکنان دوره چگونه کار می کند، دستور زیر را اجرا کنید:
~cs50/pset1/water
وظیفه 2. ماریو با ما است!
![هاروارد CS50: تکالیف هفته 1 (سخنرانی 3 و 4) - 3](https://cdn.javarush.com/images/article/0b5febbe-fd2a-4d14-be85-24b63f4320cf/1024.jpeg)
mario.c
در خود ایجاد کنید ~/workspace/pset1
. برنامه ما یک نیمه هرمی شبیه به آنچه می بینید، اما مستقیماً در کنسول، بدون گرافیک ترسیم می کند: هر یک از بلوک ها از یک نماد هش (#) تشکیل شده است. حتی اگر هنوز نحوه انجام آن را نفهمیده اید، باور کنید: آسان است. برای جالب تر شدن مسئله، امکان تنظیم ارتفاع نیم هرم با استفاده از یک عدد صحیح غیر منفی از 0 تا 23 را به آن اضافه می کنیم. ارتفاع هرم در تصویر در بالاترین مکان در نظر گرفته شده است. یعنی برابر 8. اگر کاربر عدد را اشتباه وارد کرد باید یک بار دیگر از او بخواهید این کار را انجام دهد. سپس تولید کنید (با استفاده از printf یک هرم). مراقب باشید که گوشه سمت چپ پایین نیمه هرم خود را با لبه سمت چپ پنجره ترمینال تراز کنید، مانند مثال زیر. متن خط کشی شده همان چیزی است که کاربر خودش وارد می کند.
username:~/workspace/pset1 $ ./mario
height: 8
##
###
####
#####
######
#######
########
#########
توجه داشته باشید که دو ستون سمت راست ارتفاع یکسان دارند. هنوز ارزش تولید لوله، ابر و خود ماریو را ندارد =). حداقل برای این وظیفه. اگر کاربر داده های نادرستی وارد کرده باشد (عددی را وارد نکرده است، یا عددی را وارد کرده است که کمتر از یک یا بزرگتر از 23 است)، برنامه باید از او بخواهد که دوباره داده ها را وارد کند، مانند مثال زیر، که در آن متن زیر خط کشیده شده چیست. کاربر از صفحه کلید وارد شده است. برای خواندن رشته وارد شده از GetInt
. می تواند به بررسی ورودی نادرست کمک کند، اما نه در همه موارد.
username:~/workspace/pset1 $ ./mario
Height: -2
Height: -1
Height: foo
Retry: bar
Retry: 1
##
برای کامپایل برنامه، خط را در ترمینال وارد کنید:
make mario
یا یک نسخه شفاف تر اما طولانی تر:
clang -o mario mario.c -lcs50
پس از آن، برنامه را برای اجرا اجرا کنید:
./mario
اگر می خواهید بررسی کنید که برنامه به درستی اجرا می شود، اجرا کنید check50
:
check50 2015.fall.pset1.mario mario.c
و اگر می خواهید با نسخه ماریو دستیاران دوره بازی کنید، خط زیر را تایپ کنید:
~cs50/pset1/mario
وظیفه 3. زمان تغییر است
![هاروارد CS50: تکالیف هفته 1 (سخنرانی 3 و 4) - 4](https://cdn.javarush.com/images/article/6ae937a7-c4f1-4f12-8f03-d7621650993c/1024.jpeg)
greedy.c
در دایرکتوری خود ایجاد کنید ~/workspace/pset1
. با توجه به: سکه های 25، 10، 5، 1 سنت این برنامه باید:
- از کاربر بپرسید که چه مقدار پول باید بدهد
- حداقل تعداد سکه هایی را که می توانید با آن انجام دهید محاسبه کنید
GetFloat
از کتابخانه CS50 برای ورودی و printf
از کتابخانه استاندارد I/O برای خروجی استفاده خواهیم کرد. علاوه بر این، برنامه باید صحت ورودی را بررسی کند. ما از شما خواستیم که از استفاده کنید GetFloat
تا به کاربر اجازه دهید مقداری را به دلار و سنت که با یک نقطه از هم جدا شده است وارد کند. به عنوان مثال، اگر ما 9.75 دلار بدهکار هستیم، کاربر باید 9.75 را وارد کند، اما نه 9.75 دلار یا 975. شما باید اطمینان حاصل کنید که کاربر عددی را وارد می کند که منطقی است. بیایید بگوییم غیر منفی؛ خود تابع در این مورد GetFloat
کمکی نخواهد کرد . اگر کاربر ورودی نادرستی می دهد، باید از او بخواهید آن را تکرار کند و برنامه را فقط با داده های صحیح اجرا کند. مراقب عدم دقت ذاتی اعداد ممیز شناور باشید. برای مثال، 0.01 را نمی توان مستقیماً به عنوان نشان داد float
. سعی کنید از خروجی فرمت شده استفاده کنید، برای مثال با 50 رقم اعشار، با استفاده از کد زیر:
float f = 0.01;
printf("%.50f\n", f);
به هر حال، قبل از شمارش هر چیزی، منطقی است که کل مبلغ را به سنت تبدیل کنید (و در عین حال آن را از به تبدیل کنید float
) int
، که به جلوگیری از بسیاری از خطاها و مشکلات کمک می کند. برای اطمینان از اینکه تحلیلگر کد خودکار ما می تواند مشکل شما را به درستی بررسی کند، مطمئن شوید که آخرین خط خروجی برنامه شما حاوی اطلاعات دیگری غیر از حداقل تعداد سکه ها نباشد: یک عدد صحیح با یک کاراکتر \n بعد از آن (کسانی که مطالعه می کنند. JavaRush به خوبی از آنچه در اینجا صحبت می کنیم آگاه است =)). در زیر مثالی از اینکه نتیجه برنامه شما باید چگونه باشد آورده شده است.
username:~/workspace/pset1 $ ./greedy
O hai! How much change is owed?
0.41
4
با توجه به ماهیت اعداد ممیز شناور، می توانید صفر را نادیده بگیرید و چنین عددی را به شکل 0.41 وارد کنید. البته، کاربرانی که می خواهند برنامه را از نظر امکان وارد کردن اطلاعات نادرست به طور کامل بررسی کنند باید چیزی شبیه به:
username:~/workspace/pset1 $ ./greedy
O hai! How much change is owed?
-0.41
How much change is owed?
-0.41
How much change is owed?
foo
Retry: 0.41
4
بر اساس این الزامات و مثالی که در بالا دیدید، کد شما به احتمال زیاد باید حاوی نوعی حلقه باشد. اگر هنگام تست برنامه متوجه شدید که حلقه متوقف نمی شود، می توانید اجرای برنامه را با ترکیب ctrl-c (گاهی چندین بار) قطع کنید. شما قبلاً می دانید که چگونه یک برنامه را کامپایل و اجرا کنید. اگر می خواهید بررسی کنید که آیا برنامه شما به درستی کار می کند، با استفاده از ابزار check50
، خط زیر را در ترمینال وارد کنید:
check50 2015.fall.pset1.greedy greedy.c
و اگر می خواهید با این برنامه ساخته شده توسط دستیاران دوره بازی کنید، دستور زیر را بنویسید:
~cs50/pset1/greedy
چگونه کد خود را تأیید کنید و امتیاز بگیرید
-
انتخاب 1
اگر برای شما مهم است که صحت کد را بررسی کنید و نمره نهایی را نگیرید، می توانید با استفاده از دستور آن را بررسی و تصحیح کنید.
check50 2015.fall.pset1.name name.c
در خط ترمینال CS50 IDE وارد شده است؟
name
نام فایل وظیفه شما کجاست -
گزینه 2
اگر می خواهید نمره بگیرید (در اصل مانند اجرای check50، اما با به خاطر سپردن نتیجه و پر کردن برخی از فرم ها به زبان انگلیسی، مراحل زیر را دنبال کنید:
-
مرحله 1 از 2
- وقتی برنامه ها آماده شدند، وارد CS50 IDE شوید.
- در گوشه سمت چپ بالای CS50 IDE، در مرورگر فایل آن، نه در پنجره ترمینال، روی فایل hello.c خود (که در پوشه pset1 قرار دارد) چپ یا راست کلیک کرده و روی Download کلیک کنید. باید متوجه شوید که مرورگر hello.c را بارگذاری کرده است.
- برای آب تکرار کنید.c.
- برای mario.c تکرار کنید.
- برای greedy.c تکرار کنید.
- در یک برگه یا پنجره جداگانه، وارد CS50 Submit شوید .
- روی Submit در گوشه سمت چپ پایین پنجره کلیک کنید.
- در قسمت Problem Set 1 در پنجره ظاهر شده، روی آپلود ارسال جدید کلیک کنید.
- در پنجره ای که ظاهر می شود، روی افزودن فایل ها کلیک کنید…. باید پنجره ای به نام Open Files ظاهر شود.
- به مکانی که hello.c دانلود شده است بروید. معمولاً در پوشه Downloads یا در پوشه ای قرار دارد که به طور پیش فرض برای دانلود به شما اختصاص داده شده است. هنگامی که hello.c را پیدا کردید، یک بار روی آن کلیک کنید تا علامت گذاری شود، سپس روی Open کلیک کنید.
- دوباره روی Add files... کلیک کنید و دوباره پنجره Open Files ظاهر می شود.
- حالا به همین ترتیب فایل water.c را پیدا کنید. روی آن کلیک کنید، سپس روی Open (یا "Open") کلیک کنید.
- حالا mario.c را پیدا کنید. و همینطور کلیک کنید و باز کنید.
- همه چیز با فایل greedy.c یکسان است.
- برای شروع آپلود فایل های خود در سرورهای CS50 روی Start upload کلیک کنید.
- در صفحه ای که ظاهر می شود، پنجره ای با عنوان No File Selected مشاهده می کنید. اگر نشانگر ماوس خود را به سمت چپ صفحه حرکت دهید، لیستی از فایل هایی را که دانلود کرده اید مشاهده خواهید کرد. برای تایید محتویات هر کدام روی هر کدام کلیک کنید. (نیازی به کلیک بر روی دکمه ها یا آیکون های دیگر نیست). اگر مطمئن هستید که آماده ارسال فایل برای تایید هستید، در نظر بگیرید که کارتان تمام شده است! اگر میخواهید خودتان دوباره کدتان را بررسی کنید یا چیزی را اصلاح کنید، به CS50 Submit برگردید و این مراحل را تکرار کنید. می توانید هر چند بار که بخواهید دوباره ارسال کنید. فقط آخرین ارسالی ارزیابی خواهد شد.
-
-
مرحله 2 از 2 (برای ارزیابی لازم نیست، اگر =))
اکنون به پیوند https://www.edx.org/course/cs50s-introduction-computer-science-harvardx-cs50x بروید که در آن فرم های ویژه را خواهید یافت. در آنها باید به چندین سؤال نظری پاسخ دهید و سپس روی ارسال زیر آنها کلیک کنید.
- خوب، باید می دیدم که این یکی می آید! فقط در چند جمله، کتابخانه چیست؟ * (به طور خلاصه توضیح دهید که کتابخانه چیست)
- فقط در چند جمله،
#include <cs50.h>
وقتی آن را در بالای برنامه می نویسید چه نقشی دارد؟ *(نقش #include <cs50.h> که در بالای برخی از برنامه ها ظاهر می شود چیست؟) - میگویید حدود چند ساعت روی مجموعه مشکل 0: خراش صرف کردهاید؟
- میگویید حدوداً چند ساعت را روی مسئله 1: C صرف کردهاید؟
- نظر شما در مورد CS50x تاکنون چیست؟ *(نظر شما در مورد CS50 در حال حاضر، گزینه لایک یا نپسندیدن را انتخاب کنید)
- آیا از همکلاسی ها یا کارکنان از طریق گروه فیس بوک CS50s در http://www.facebook.com/groups/cs50 کمک خواسته اید؟ *(آیا از سایر دانش آموزان یا دستیاران در گروه فیس بوک کمک خواسته اید)
- آیا از همکلاسی ها یا کارکنان از طریق CS50s Subreddit در http://www.reddit.com/r/cs50 کمک خواسته اید (آیا از سایر دانش آموزان یا دستیاران از طریق Subreddit کمک خواسته اید)
- آیا از همکلاسی ها یا کارکنان از طریق توییتر با استفاده از cs50@ یا #cs50 کمک خواسته اید؟ *(آیا با استفاده از cs50@ یا #cs50 در توییتر از سایر دانش آموزان یا TA کمک خواسته اید).
منبع کد:
-
سخنرانی سه
-
سخنرانی چهار
GO TO FULL VERSION