[MUSIC پخش] DAVID J. مالان: خوب. این CS50 است، و این آغاز هفته دو است. بنابراین، بیایید امروز شروع با اشکال. اشکال، البته، اشتباه در برنامه، و خیلی از شما دریافت کنید با این مفهوم آشنا اگر شما هرگز برنامه ریزی کرده ام قبل از. pset0 و در حال حاضر pset1. اما اجازه دهید چیزی در نظر ساده در ابتدا کمی. این برنامه در اینجا که من با هم در پیش انداخت، و من ادعا می کنند که این باید چاپ 10 ستاره بر روی صفحه نمایش با استفاده از تابع () printf، اما ظاهرا در برخی از راه حشره دار. با توجه به اینکه خصوصیات که آن را باید 10 ستاره چاپ، اما آن را به ظاهر نیست، چه به شما ادعا می کنند که اشکال است؟ آره؟ پس از آن که توسط یک خطا، و چه چیزی شما را در آن چیست؟ OK. عالی. بنابراین ما مشخص کرده ایم ارزش صفر شروع برای من، و ما مشخص کرده ایم یک مقدار N 10، اما ما کمتر از یا مساوی استفاده می شود. و دلیلی که این دو است شخصیت ها و نه فقط یک نماد، مانند یک کتاب ریاضی، این است که شما لازم نیست یکی از راه های بیان یک معادل شخصیت. بنابراین این بدان معناست که کمتر از، اما اگر شما شروع به شمارش صفر، اما شما تعداد دفعات مشاهده تمام راه تا از طریق و برابر با 10، شما البته رفتن به هستی 11 همه چیز در مجموع تعداد. و به این ترتیب شما به چاپ 11 ستاره. پس چه ممکن است یک راه حل برای این؟ آره؟ پس فقط تنظیم کمتر از یا برابر با تنها کمتر از باشد، و وجود دارد، من ادعا می کنند، شاید راه حل دیگر، بیش از حد. چه ممکن است دیگری انجام دهید؟ آره؟ بنابراین شروع به برابر آن را به 1، و ترک کمتر از یا مساوی. و رک و پوست کنده من ادعا می کنند که برای یک انسان معمولی، این است که احتمالا ساده تر است. شروع شمارش در 1 و تعداد دفعات مشاهده را از طریق 10. اساسا انجام منظور شما چیست. اما واقعیت این است در برنامه نویسی، همانطور که ما دیده ایم، دانشمندان کامپیوتر و برنامه نویسان به طور کلی شروع به شمارش صفر. و به طوری که خوب است یک بار شما به آن استفاده می شود. شرایط شما به طور کلی خواهد شد تواند چیزی شبیه کمتر از. بنابراین به سادگی منطقی خطا که ما در حال حاضر می تواند تعمیر و در نهایت کامپایل مجدد این و فقط 10 دریافت کنید. خوب در مورد این اشکال که اینجا هستید؟ در اینجا، دوباره، من ادعا می کنند که من هدف از چاپ 10 stars-- در هر خط در این زمان، اما آن را نمی کند. قبل از اینکه ما پیشنهاد چه ثابت است، چه این کار را چاپ بصری اگر من به کامپایل و اجرای این برنامه شما فکر می کنید؟ آره؟ ستاره. بنابراین تمام ستاره ها در همان خط است آنچه که من شنیده، و پس از آن شخصیت خط جدید. بنابراین اجازه دهید سعی کنید که. بنابراین حشره دار-1، وارد را، و من از فرمان صدای شیپور را ببینید که ما در مورد صحبت کردهایم. ./buggy-1، و در واقع من تمام 10 ستاره در همان خط حتی اگر من ادعا می کنند در مشخصات من فقط یک نظر در بالای کدی که من در نظر گرفته شده برای انجام این کار در هر خط. اما این حق به نظر می رسد. در حال حاضر خط 15 به نظر می رسد من چاپ یک ستاره، و سپس خط 16 به نظر می رسد مثل من چاپ هستم یک شخصیت خط جدید، و آنها هر دو فاصله دار تا I داخل حلقه به وضوح هستم. بنابراین باید نه من انجام ستاره، جدید خط، ستاره، خط جدید، ستاره، خط جدید؟ بله؟ آره، بر خلاف یک زبان مانند پایتون، اگر شما آشنا هستند، دندانه نیست موضوع را به کامپیوتر است. این تنها به انسان مهم است. بنابراین در حالی که خطوط در اینجا من اختراع کردم 15 و 16-- که به نظر می رسد زیبا، اما کامپیوتر مهم نیست. کامپیوتر در مورد مراقبت در واقع داشتن آکولاد در اطراف این خط کد. به طوری که آن را clear-- درست مثل در Scratch-- که این دو خط کد باید اعدام شود. مانند یکی از این پازل خراش زرد قطعه دوباره و دوباره و دوباره. بنابراین در حال حاضر اگر من دوباره اجرای این program-- ./buggy-2-- حم. من یک خطا در حال حاضر. چه من را فراموش کرده ام کاری انجام دهید؟ آره، بنابراین من آن را کامپایل کنید. بنابراین حشره دار-2. بدون چنین فایل به دلیل من نمی در واقع نسخه دوم کامپایل. بنابراین در حال حاضر جالب اعلام نشده variable-- 2 نیست. ما در حال انجام 1. را حشره دار-1-- ./buggy-1-- و در حال حاضر هر یک از آنها را در همان خط است. در حال حاضر یک استثنا وجود دارد این ادعا قرار من که شما نیاز دارید این آکولاد. هنگامی که آن را در واقع OK-- اگر شما در متوجه در بخش و یا textbooks-- به حذف آکولاد؟ آره؟ دقیقا. وقتی که تنها یک وجود دارد خط از کد که شما می خواهم به با همراه است حلقه به عنوان در اولین مثال ما. این کاملا مشروع است به حذف آکولاد فقط به عنوان یک نوع راحتی از کامپایلر به شما. آره؟ سوال خوب. آیا آن را به عنوان یک خطا به سبک؟ ما به عنوان در CS50 promote-- راهنمای سبک، URL که در pset1-- که همیشه استفاده از آکولاد. قطعا اگر شما تازه به برنامه نویسی است. واقعیت این است که ما نه می خواهم برای شما ممنوع کرده است از انجام این راحتی. اما اگر شما فقط گرفتن به نوسان از همه چیز، کاملا تنها همیشه استفاده از مجعد پرانتز تا زمانی که شما از آن آویزان است. سوال خوب. خوب. به طوری که پس از آن یک اشکال بود. حداقل در چیزی نسبتا ساده است. و با این حال شما ممکن است این فکر می کنم نسبتا ابتدایی، درست است؟ این نوع از هفته اول از نگاه زبان مانند، در آن نگاه کنید به اشکالات خود را. اما واقعیت این است در واقع نماینده برخی از مشکلات بسیار ترسناک است که می تواند در دنیای واقعی بوجود می آیند. بنابراین برخی از شما ممکن است به یاد می آورند اگر شما به دنبال اخبار تکنولوژی، و یا شاید حتی گرفتار باد از این در ماه فوریه از سال گذشته که اپل به حال یک بیت از یک اشتباه در هر دو سیستم عامل iOS ساخته شده، سیستم عامل در تلفن های خود را، و همچنین سیستم عامل مک، سیستم عامل در دسکتاپ و لپ تاپ خود را. و شما سرفصل مانند این را دیدم. و پس از آن، اپل وعده داده به رفع این اشکال، و به سرعت انجام تعمیر آن در IOS، اما پس از آن در نهایت آن را در سیستم عامل مک ثابت و همچنین. در حال حاضر هیچ کدام از این عناوین به تنهایی واقعا نشان چه مشکل اساسی این بود، اما اشکال در نهایت به کاهش می یابد یک اشکال در SSL، لایه سوکت های امن. و داستان کوتاه مدت، این نرم افزار است که مرورگرهای ما و دیگر نرم افزار مورد استفاده برای انجام چه؟ اگر من گفت که SSL است درگیر، هر زمان که شما URL که با HTTPS شروع می شود بازدید، آنچه پس از آن ممکن است SSL به مربوط؟ رمزگذاری. بنابراین ما صحبت در مورد این در روزهای آینده. رمزگذاری، هنر تقلا اطلاعات. اما داستان کوتاه مدت، اپل مدتی پیش یک اشتباه شده است در اجرای آنها از SSL، نرم افزاری است که در نهایت پیاده سازی آدرس ها مانند HTTPS و یا حداکثر اتصالات نیز وجود دارد. نتیجه آن است که خود را اتصالات به طور بالقوه می تواند قطع شود. و ارتباطات شما بود لزوما رمزگذاری نشده اگر شما بین به حال برخی از پسر بد در شما و وب سایت مقصد که می دانست که چگونه به استفاده از این. در حال حاضر اپل در نهایت ارسال شده رفع این در نهایت، و شرح تعمیر خود را در این بود. حمل و نقل ایمن انجام نشد به اعتبار صحت اتصال. موضوع های پرداخته شده است بازگرداندن از دست رفته مراحل اعتبار سنجی. بنابراین این توضیح مواج دست بسیار است برای سادگی گفت: که ما رو خراب کرد. است به معنای واقعی کلمه وجود دارد خط از کد که حشره دار بود در اجرای آنها از SSL و اگر شما به صورت آنلاین و جستجو برای این شما می توانید در واقع پیدا کردن کد منبع اصلی. به عنوان مثال، این یک شات از صفحه نمایش است فقط یک قسمت از یک فایل نسبتا بزرگ، اما این تابع ظاهرا به نام است SSL بررسی سرور علامت تبادل کلید. و آن طول می کشد یک دسته از بحث ها و ورودی ها. و ما قصد داریم به تمرکز بیش از حد در minutia وجود دارد، اما اگر شما در کد تمرکز در داخل از که بالاترین function-- اجازه دهید زوم بر روی آن است. شما در حال حاضر ممکن است مشکوک چه خطا ممکن است شود حتی اگر شما هیچ ایده در نهایت آنچه که شما دنبال آن هستید در. نوع ناهنجاری وجود دارد در اینجا، که چه؟ آره، من واقعا دوست دارم نگاه از دو رفتن به شکست مواجه است. صادقانه بگویم، من واقعا نمی دانند چه برو شکست معنی، اما داشتن دو نفر از آنها پشت به پشت. این تنها نوع از من پاک فکری راه اشتباه، و در واقع اگر ما در زوم فقط کسانی که خطوط، این C. است بنابراین تعداد زیادی از کد های اپل است خود را در C نوشته شده است، و این ظاهرا واقعا equivalent-- به که دندانه بسیار نسخه، اما اگر شما تشخیص این واقعیت است که هیچ آکولاد، وجود دارد چه اپل واقعا نوشت کد است که به نظر می رسد بود مثل این. بنابراین من زوم کرده اید و من فقط ثابت دندانه در حس که اگر هیچ آکولاد، که وجود دارد رفتن به دوم شکست که در زرد در حال رفتن به اجرای بدون توجه به آنچه. این با وجود نمی اگر شرایط بالا را. بنابراین حتی دوباره، اگر شما کاملا درک آنچه در این می تواند احتمالا است انجام می دهند، می دانند که هر یک از این conditions-- هر یک از این خطوط یک گام بسیار مهم است در روند بررسی اگر اطلاعات شما در واقع رمزگذاری شده است. بنابراین پرش یکی از این مراحل، بهترین ایده. اما از آنجا که ما این رفتن به دوم شکست در رنگ های زرد، و از آنجا که یک بار ما مرتب کردن بر اساس زیبا به سمت چپ حرکت می کند آن را که در آن منطقی است در حال حاضر، چه مفهومی برای خط از کد زیر که رفتن به دوم شکست را به شما فکر می کنم؟ این همیشه نادیده گرفته شد. بنابراین gotos می نماید دلایل ما نمی خواهد واقعا به به، و در واقع در CS50 ما تمایل ندارد برای آموزش این دستور goto، اما شما می توانید از فکر می کنم رفتن شکست به معنای رفتن پرش به برخی از بخش دیگری از کد. به عبارت دیگر انتخاب بیش از این خط آخر در مجموع، و بنابراین نتیجه این احمق اشتباه ساده است که فقط در نتیجه احتمالا کسی کپی و الصاق یک بیش از حد چند بار بود که کل امنیت iOS و مک OS آسیب پذیر به رهگیری شد توسط بچه های بد برای مدتی. تا زمانی که اپل در نهایت این ثابت شده است. حال اگر برخی از شما در واقع در حال اجرا نسخه های قدیمی از IOS و یا سیستم عامل مک، شما می توانید به gotofail.com به آن یک وب سایت که کسی راه اندازی شده است اساسا تعیین برنامه نویسی اگر کامپیوتر شما هنوز آسیب پذیر است. و رک و پوست کنده، اگر از آن است، آن را احتمالا یک ایده خوب برای به روز رسانی تلفن خود و یا مک خود را در این نقطه است. اما، فقط به عهد به چقدر وجود دارد قدردانی از این سطح پایین تر جزئیات و نسبتا ایده های ساده واقعا می تواند در ترجمه به تصمیم گیری و مشکلاتی که affected-- در این case-- میلیون ها نفر از مردم است. در حال حاضر یک کلمه در دولت. بخش روز یکشنبه آینده آغاز خواهد شد. شما یک ایمیل با دریافت آخر هفته در مورد بخش، که در آن نقطه فرآیند برش آغاز خواهد شد اگر شما در متوجه شدم شما در حال حاضر برخی از درگیری های جدید. بنابراین این اتفاق می افتد در هر سال، و ما در روز مسکن خواهد شد آمده است. دفتر hours-- نگه داشتن چشم در این برنامه است. تغییرات کمی در این هفته، به ویژه زمان شروع و محل، پس مشورت که قبل از رفتن به ساعات اداری هر یک از چهار شب بعد. و در حال حاضر یک کلمه در ارزیابی، به خصوص به عنوان شما را به شیرجه رفتن مشکل مجموعه یک و فراتر از آن. بنابراین در خصوصیات، این به طور کلی محور همراه است که ما کار خود را ارزیابی کنند. محدوده اشاره به آنچه میزان پیاده سازی کد شما ویژگی های مورد نیاز توسط ویژگی های کار ما. به عبارت دیگر، چه مقدار از مجموعه ای قطعه آیا شما نیش کردن. آیا شما یک سوم از آن، نیمی از آن، 100٪ از آن را. حتی اگر آن را درست نیست، چقدر شما تلاش کردید؟ به طوری که قطاری از سطح تلاش و مقدار که شما کمی کردن مشکلات مشکل مجموعه است. Correctness-- این یکی، به چه اندازه، کد شما است سازگار با ما مشخصات و عاری از اشکالات. بنابراین آن را به درستی کار می کند؟ اگر ما آن را برخی از ورودی می دهد، آن را خروجی که ما انتظار داریم به ما؟ Design-- در حال حاضر این است که برای اولین بار از آنهایی که به خصوص کیفی، و یا آنهایی که نیاز به قضاوت انسان است. و در واقع، این است که چرا ما کارکنان بسیاری از همراهان آموزش و دوره دستیاران. تا چه حد شما می باشد کد نوشته شده است؟ و باز هم این است که بسیار ارزیابی کیفی که با شما در کار خواهد کرد دوطرفه در هفته های آینده است. به طوری که زمانی که شما می کنید تنها نمرات عددی، بلکه نمرات نوشته شده است، و یا بازخورد تایپ شده، و یا بازخورد به عبارت انگلیسی نوشته شده است. این چیزی است که ما از آن استفاده به شما درایو به سمت در واقع نوشتن کد بهتر است. و در سخنرانی و بخش، ما تلاش خواهیم کرد به نقطه out-- به عنوان اغلب به عنوان ما can-- چه چیزی باعث یک برنامه نه تنها درست و عملکرد خوب، اما نیز به خوبی طراحی شده است. کارآمد ترین آن می تواند، و یا حتی زیبا ترین آن می تواند باشد. کدام ما را به سبک. سبک نهایت است قضاوت زیبایی شناسانه. آیا شما انتخاب می کنید خوب نام برای متغیرهای خود را؟ آیا کد خود را به شما به درستی فاصله دار؟ آن را نگاه خوب است، و در نتیجه، است آن را آسان برای انسانی دیگر به عنوان خوانده شده مربوطه خود از صحت آن است. در حال حاضر به طور کلی در هر برنامه درسی، نمره ما این چیزها در مقیاس پنج نقطه. و به من اجازه چکش به خانه نقطه که سه است که در واقع خوب است. خیلی به سرعت انجام مردمی شروع به انجام حساب. وقتی که آنها به سه نفر از پنج در صحت برای برخی از pset و آنها فکر می کنم لعنتی، من به 60٪ رفتن که اساسا D یا E. این راهی نیست که ما از این شماره فکر می کنم. سه در واقع خوب است، و آنچه که ما به طور کلی در آغاز انتظار از مدت این است که اگر شما در حال گرفتن یک دسته از three's-- شاید یک زن و شوهر نمایشگاه، یک زن و شوهر از fours-- یا یک زن و شوهر twos، یک زن و شوهر از fours-- که یک محل خوبی برای شروع است. و تا زمانی که ما می بینیم مسیر رو به بالا در طول زمان، شما در یک مکان به خصوص خوب است. فرمول ما به استفاده از همه چیز وزن است که در اصل این در برنامه درسی، که فقط بدان معناست که ما وزن بیشتر به صحت می دهد. از آنجا که آن را اغلب صحت که بیشتر هم طول می کشد. به من اعتماد کن حال حاضر. شما حداقل find-- در یک pset-- که شما صرف 90٪ از وقت خود را کار بر روی 10٪ از مشکل است. و همه چیز مرتب سازی بر اساس کار به جز یک یا دو باگ ها، و کسانی که اشکالات که شما را تا در اواخر شب. کسانی هستند که مرتب کردن بر اساس از شما فرار کنند. اما پس از خواب بر روی آن، و یا حضور در ساعات اداری و یا پرسیدن سوال آنلاین است هنگامی که شما به 100٪ هدف دریافت، و این که چرا ما وزن است صحت بیشتر. طراحی یک کمی کمتر، و سبک کمی کمتر از آن. اما در سبک mind-- حفظ شاید ساده ترین از این به نیش کردن به عنوان در راهنمای سبک. و در حال حاضر، جدی تر توجه داشته باشید در صداقت علمی. CS50 تمایز ناگوار که بزرگترین تولید کننده های آگهی انجمن موارد تقریبا در هر سال در طول تاریخ. دلیل این است که دانش آموزان در تقلب نمی CS50 هر بیشتر از هر کلاس دیگر، اما به دلیل طبیعت کار، این واقعیت که این الکترونیکی، این واقعیت است که ما برای آن نگاه کنید، و این واقعیت که ما دانشمندان کامپیوتر، می توانم بگویم که ما متاسفانه در تشخیص آن بسیار خوب است. بنابراین چه در شرایط واقعی چیست؟ پس از آن، در هر برنامه درسی، فلسفه درس واقعا جوش پایین به معقول. است این خط بین وجود دارد انجام کار فرد در خود و به دست آوردن کمی از کمک های معقول و منطقی از یک دوست، و آشکار انجام آن کار را برای شما دوستان، و یا ارسال به او کد شما به طوری که او به سادگی می تواند را و یا قرض گرفتن آن را حق. و این خط عبور که ما در کلاس کشیده شده است. ببینید، برنامه درسی در نهایت برای خطوط که ما به عنوان معقول بودن رسم و رفتار غیر معقول، واقعا جوش را به جوهر از کار شما نیاز به است خود را در پایان. در حال حاضر با که گفت، است از روش اکتشافی وجود دارد. از آنجا که شما ممکن است imagine-- از ساعات اداری و تصاویری و فیلم ایم نشان داده شده است در نتیجه far-- CS50 در واقع به معنای به عنوان مشترک است و به عنوان تعاونی و اجتماعی که ممکن است. به عنوان مشترک آن را به عنوان دقیق است. اما با این گفت، اکتشافی، عنوان شما در برنامه درسی نگاه کنید، این است که وقتی شما با داشتن بعضی از مشکل. شما باید برخی از مشکلات را در کد خود را که شما نمی تواند حل کند، آن را مناسب برای شما است کد خود را به شخص دیگری برای نشان دادن. یکی از دوستان حتی در کلاس، یک دوست نشستن در کنار شما در ساعات اداری، و یا یک عضو از کارکنان. اما آنها ممکن است کد خود را به شما نشان نمی دهد. به عبارت دیگر، پاسخ به question-- شما من نیاز به help-- نیست آه، اینجا کد من است. نگاهی به این و استنباط از آن چه شما خواهد شد. در حال حاضر، البته، وجود دارد راه وضوح به بازی این سیستم به موجب آن من به شما نشان می دهد کد من قبل از سوال. تو به من کد شما من نشان می دهد قبل از سوال. اما برنامه درسی را دوباره برای جزئیات دقیقتر که در آن این خط است. فقط به حال تصویر رنگ و به اشتراک گذاری به عنوان شفاف که ممکن است که در آن ما در در سال های اخیر، این تعداد موارد آگهی انجمن است که CS50 تا به حال بیش از در هفت سال گذشته. با 14 مورد از این سقوط اخیر. از نظر دانش آموزان درگیر، 20 برخی از دانش آموزان عجیب و غریب بود این پاییز گذشته. یک اوج 33 وجود دارد دانش آموزان چند سال پیش. بسیاری از آنها متاسفانه دیگر در اینجا در محوطه دانشگاه. دانش آموزان درگیر به عنوان یک درصد از کلاس در طول تاریخ از 0٪ در محدوده زمانی معین به 5.3٪، است که فقط می گویند این است سالانه یک چالش است. و در راه آن هدف، چه ما می خواهیم انجام دهیم این است انتقال یک که ما dd-- فقط FYI-- مقایسه در انصاف به کسانی که دانش آموزانی که پس از خط بر این اساس می باشد. ما مقایسه فعلی ارسالی در برابر همه ماموریت های گذشته از سال ها گذشته است. ما هم می دانیم که چگونه به گوگل اطراف و پیدا کردن مخازن کد آنلاین، بحث و تبادل نظر آنلاین، سایت های کار آنلاین. اگر یک دانش آموز می توانید آن را پیدا کنید، ما مطمئنا می تواند پیدا کردن آن تا آنجا که ما متأسفانه انجام دهد. پس چه شما در برنامه درسی را ببینید هر چند این بند تاسف است. من قطعا می تواند قدردانی، و همه ما است کارکنان پس از انجام دوره مانند این یا این یکی خود را در طول زمان، قطعا می دانید که چه آن را مانند زمانی که زندگی می شود در راه هنگامی که شما به برخی در اواخر شب deadline-- نه تنها در این کلاس، اما another-- زمانی که شما به طور کامل خسته، استرس، یک تعداد مفرط از چیزهای دیگر انجام دهد. شما در برخی از نقطه در را زندگی قطعا بد، شاید اواخر تصمیم شب. بنابراین در برنامه درسی، این بند وجود دارد، به طوری که اگر ظرف 72 ساعت از زمان برخی از تصمیم گیری های فقیر، شما خود را به آن و رسیدن به من و یکی از سر درس و ما یک مکالمه داشته باشد. ما همه چیز را اداره داخلی در امید از آن تبدیل شدن به بیشتر از یک لحظه ای آموزش و درس زندگی، و نه چیزی که با انشعابات به ویژه شدید که شما ممکن است در این نمودار اینجا را ببینید. به طوری که لحن بسیار جدی است. اجازه دهید ما فقط برای چند مکث ثانیه برای شکستن تنش است. [MUSIC پخش] DAVID J. مالان: خوب، پس چگونه بود که برای اش Segue؟ به مباحث اولیه امروز. اولین بار است که انتزاعی است. یکی دیگر از آنها در حال رفتن به نمایندگی از داده ها، که رک و پوست کنده راه واقعا خشک کرد و گفت که ما چگونه است می تواند به مورد حل مشکلات و تفکر در مورد حل مشکلات؟ بنابراین شما در ابتدا دیده می شود، و شما در دیده می شود شاید در حال حاضر در pset1 با C که شما نه تنها می توانید استفاده کنید توابع مانند تابع () printf، که مردم دیگر در سال گذشته برای شما نوشته است. شما همچنین می توانید توابع خود را ارسال. و حتی اگر شما ممکن است در C انجام این کار، و رک و پوست کنده در pset1 شما واقعا نیاز به نوشتن خود را عملکرد خود را به این دلیل که problem-- در حالی که شاید در دلهره آور اولین glance-- خواهید دید می تواند در نهایت با حل شود نه همه که بسیاری از خط کد. اما با که گفت، در شرایط از نوشتن تابع خود، متوجه است که C را می کند شما این قابلیت را. من قصد دارم برای رفتن در کد منبع امروز، که در دسترس است در حال حاضر آنلاین، و من قصد دارم به جلو بروید و باز یک برنامه به نام تابع 0.C، و در تابع صفر ما چند چیز را ببینید. در اولین خط 18 از طریق 23 تابع اصلی من است. و حالا که ما شروع به عنوان خوانده شده کد که ما در پرواز نوشتن نیست، اما به جای من در پیش نوشته شده یا این که شما را در یک مشکل تنظیم ممکن است دریافت داشتن در پیش نوشته شده است. یک راه خوب برای شروع خواندن کد شخص دیگری برای تابع اصلی است. شکل که در آن است که ورود نکته این است که در حال اجرا برنامه، و سپس آن را دنبال منطقی از وجود دارد. بنابراین این برنامه ظاهرا چاپ نام شما به دنبال یک روده بزرگ است. پس از آن ما با استفاده از GetString از کتابخانه CS50 برای دریافت یک رشته و یا یک کلمه یا عبارت از کاربر در صفحه کلید. و پس از آن این وجود دارد چیزی که PrintName here--. در حال حاضر PrintName نمی باشد. تابع است که همراه با C. این در io.h. استاندارد این در CS50.h. نمی این نه در همان فایل. توجه کنید که اگر من در پایین حرکت خطوط bit-- 25 به 27-- این فقط یک راه بسیار از اظهار نظر در کد خود را با استفاده از ستاره و اسلش. این چند خط است اظهار نظر، و این فقط توضیحات من به رنگ آبی از چه این تابع انجام می دهد. از آنجا که در خطوط 28 تا 31، من یک تابع فوق العاده ساده نوشته شده نام و نام خانوادگی که PrintName است. طول می کشد که چگونه بسیاری از استدلال را به شما می گویند؟ به همین دلیل یک argument-- چرا که یک وجود دارد استدلال ذکر شده در داخل پرانتز. نوع عبارات که است. به عبارت PrintName مثل این جعبه سیاه و سفید و یا تابع است که طول می کشد به عنوان ورودی یک رشته است. و نام آن عبارات به راحتی خواهد شد نام. نه S، نه N، اما نام. پس چه PrintName انجام دهید؟ این خوب ساده است. فقط به عنوان یک خط کد برای تابع () printf، اما ظاهرا چاپ از "سلام،" چنین و چنان. که در آن چنین و چنان می آید از استدلال. در حال حاضر این است که یک نوآوری بزرگ در اینجا نیست. در واقع، من یک برنامه ای است که می تواند گرفته شده با یک خط کد نوشته شده است با قرار دادن این تا اینجا، و آن را به چیزی تغییر که شامل حدود شش یا هفت یا بیشتر خط کد تمام راه را در اینجا. اما این تمرین یک است اصل شناخته شده به عنوان انتزاع. نوع کپسوله سازی در داخل جدید تابع که دارای نام، و بهتر در عین حال که به معنای واقعی کلمه نام و نام خانوادگی می گوید آنچه در آن می کند. منظور من printf-- که نیست به خصوص توصیفی. اگر من می خواهم برای ایجاد یک قطعه پازل، و یا اگر I می خواهید برای ایجاد یک تابع چاپ نام شخصی، زیبایی از انجام این کار این است که من در واقع می تواند را که تابع نام که توصیف آنچه در آن می کند. در حال حاضر آن را در ورودی می گیرد که I خودسرانه نام نام ام، اما بیش از حد زیبا و توصیفی به جای اینکه یک کمی بیشتر عمومی مانند S. و از درجه اعتبار ساقط، در حال حاضر، فقط بدان معناست که این تابع نیست من دست به عقب هر چیزی. این GetString را مانند که به معنای واقعی کلمه به من دست به عقب یک رشته مانند ما با تکه های کاغذ را انجام داد با همکلاسی های خود در هفته گذشته، بلکه آن را فقط یک اثر جانبی. این چیزی است که به صفحه نمایش چاپ میکند. بنابراین در پایان روز، اگر من انجام را تابع 0، ./function-0، خواهیم دید که آن را برای نام من می پرسد. I تایپ دیوید، و آن نوع از نام من. اگر من این کار را دوباره با راب، آن را می گویند: "سلام، راب." بنابراین یک ایده ساده، اما شاید برون یابی از این ذهنی که به عنوان برنامه های خود را دریافت کنید کمی پیچیده تر است، و شما می خواهید برای نوشتن یک تکه از کد و تماس که code-- فراخوان که code-- توسط برخی توصیفی نام مانند PrintName، C می کند از عهده ما این قابلیت را. در اینجا یکی دیگر از مثال ساده است. برای مثال، اگر باز من فایل را از امروز به نام return.c، متوجه آنچه که من در اینجا انجام داده ایم. بسیاری از این تابع اصلی تابع () printf است. من برای اولین بار دلخواه مقداردهی اولیه متغیر به نام x به تعداد 2. من پس از چاپ "X در حال حاضر ٪ من "عبور در مقدار x. بنابراین من فقط گفت: آنچه در آن است. در حال حاضر من فقط با قاطعیت هستم این ادعا با تابع () printf. I cubing هستم که مقدار x، و من انجام این کار با یک تابع نام عبور مکعب در ایکس به عنوان استدلال، و پس از آن صرفه جویی در خروجی در متغیر خود، ایکس. پس من ضربه بزند مقدار x. من فارغ از مقدار x را با هر در نتیجه تماس این تابع مکعب است. و بعد من فقط از چاپ برخی چیزهای زده اینجا و گفت که من کردم. پس چه پس از آن مکعب است؟ توجه کنید چه چیزی اساسا متفاوت است در اینجا. من تابع داده شده ام یک نام مانند قبل. من یک نام برای یک آرگومان مشخص شده است. این بار آن را به نام n را به جای نام، اما من می توانم آن را به هر چیزی من می خواهم تماس بگیرید. اما این متفاوت است. این چیزی که در سمت چپ. پیش از این چه کلمه کلیدی بود؟ پسران. در حال حاضر آن بدیهی است که اعضای هیات. بنابراین آنچه که شاید از بین بردن؟ در حالی که دلالت از درجه اعتبار ساقط مرتب کردن بر اساس هیچ، و مورد بود. PrintName هیچ چیز بازگشت. این چیزی است که انجام داد، اما این به من دست نیست چیزی که من می توانم در قرار داده سمت چپ علامت مساوی مثل من در اینجا در خط 22 انجام داده ام. بنابراین اگر من به در خط 30 می گویند، چه چیزی است که احتمالا دلالت در مورد آنچه مکعب می کند برای من؟ آره؟ این یک عدد صحیح را برمی گرداند. پس از آن من دست به، برای، به عنوان مثال، یک تکه کاغذ که در آن تا به پاسخ نوشته شده است. 2 نبات، و یا 3، نبات، و یا 4 cubed-- هر آنچه که گذشت در، و چگونه من از این اجرا بود؟ خوب، فقط n بار n بار نفر این است که چگونه ممکن است ارزش مکعبی. پس دوباره، فوق العاده ساده ایده است، اما نمایشی در حال حاضر چگونه ما می توانیم توابع ارسال که در واقع ما به حال پشت ارزش هایی که ممکن است مورد علاقه باشد. بیایید در یک مثال نگاه در اینجا تابع به نام. در این مثال، آن شروع می شود برای دریافت قانع کننده تر است. بنابراین در عملکرد یک، این اطلاع program-- نهایت خواستار یک تابع به نام GetPositiveInt. GetPositiveInt نمی باشد. تابع در کتابخانه CS50، اما ما تصمیم ما می خواهم آن را به وجود دارد. بنابراین اگر ما جواب را بعد از آن در فایل، توجه کنید که چگونه من در مورد اجرای رفت دریافت هوشمند مثبت، و من می گویند آن را قانع کننده تر دلیل این است که مناسب و معقول تعداد خط کد. این فقط یک نداشت برنامه اسباب بازی کوچک. این در واقع برخی از چک کردن خطا و انجام کاری مفید تر. بنابراین اگر شما خرید دیده ام فیلم ها است که ما در pset1 تعبیه شده، می دانم که این یک نوع است حلقه در C، در روح مشابه به نوع چیز خراش می توانید انجام دهید. و انجام این کار را می گوید. چاپ این از. سپس پیش بروید و n-- دریافت هوشمند و ذخیره آن در نفر، و نگه داشتن انجام این کار دوباره و دوباره و دوباره تا زمانی که نفر کمتر از یک است. بنابراین نفر در حال رفتن به کمتر از یک تنها در صورتی که انسان به همکاری نیست. اگر او در حال تایپ در 0 یا -1 یا -50، این حلقه است که به نگه داشتن اجرای دوباره و دوباره. و در نهایت متوجه، من به سادگی ارزش گشت. بنابراین در حال حاضر ما باید یک تابع که زیبا شده است اگر CS50 را پیاده سازی آن در CS50.h و CS50.c برای شما، اما در اینجا ما در حال حاضر می تواند پیاده سازی این خودمان. اما دو نظر در برخی جزئیات کلیدی است. One-- چرا من هوشمند اعلام بود نفر، به نظر شما، در خط 29 به جای فقط انجام این در اینجا، است که سازگار با آنچه که ما در هفته گذشته انجام داد؟ آره؟ فکر خوب است. بنابراین اگر ما آن را قرار داده در اینجا، آن را به عنوان هر چند ما نگه اعلام آن را دوباره و دوباره. این به خودی خود است مشکل ساز نیست، در هر سه، چون ما فقط نیاز ارزش یک بار و پس از آن ما در حال رفتن به دریافت یک جدید به هر حال. اما فکر خوب است. آره؟ نزدیک است. پس چون من نفر در اعلام کرده ام خط 29 در خارج از حلقه، آن را در سراسر دسترس این تابع کل. نه توابع دیگر به دلیل نفر هنوز در داخل این مجعد آماده مقابله کنید. So-- مطمئن شوید. دقیقا. پس این است که حتی بیشتر به نقطه است. اگر ما به جای اعلام کرد نفر حق در اینجا در خط 32، این مشکل به دلیل حدس که در آن دیگری من نیاز به آن دسترسی داشته باشید؟ در خط 34، و قانون سرانگشتی ساده است که فقط می توان یک متغیر استفاده داخل آکولاد اخیر که در آن شما آن را اعلام کرد. متاسفانه، خط 34 یک خط است خیلی دیر شده، چرا که من در حال حاضر بسته ام آکولاد در خط 33 که مربوط به آکولاد در خط 30. و این روشی برای گفتن است که این متغیر از نوع int مورد نظر است، پس به صحبت می کنند، به تنها در داخل از آن آکولاد. آن را فقط به خارج از آنها وجود ندارد. پس در واقع، اگر من این کار اشتباه، اجازه دهید من کد را ذخیره کنید آن را به عنوان اشتباه is-- نوشته شده است. اجازه بدهید من به جلو و را تابع 1، و خطا notice--. استفاده از شناسه های اعلام نشده نفر در خط 35، که به حق در اینجا. و اگر ما رفته بالا علاوه بر این، یکی دیگر. استفاده از اعلام نشده شناسه نفر در خط 34. بنابراین کامپایلر، صدای جرنگ جرنگ، است توجه به این که آن را فقط حتی اگر وجود ندارد به وضوح آن وجود دارد بصری. بنابراین حل ساده است اعلام آن وجود دارد. در حال حاضر من برای حرکت بالای فایل. چه جهش در شما به عنوان که کمی متفاوت از چیزهایی که ما در هفته گذشته نگاه کرد؟ نه تنها نام من، نه تنها من به برخی از تیز شامل تا بالا، من چیزی است که من هستم باید تماس یک نمونه اولیه. حالا که به نظر می رسد awfully مشابه به آنچه ما فقط یک لحظه پیش در خط 27 را دیدم. بنابراین اجازه دهید از استنباط های مختلف پیغام خطا که چرا من این انجام داده ام. اجازه بدهید من به جلو و حذف این خطوط وجود دارد. و بنابراین ما هیچ چیزی در مورد نمونه دانم. بازسازی این فایل. را تابع یک. و در حال حاضر، لعنتی، چهار خطا. اجازه دهید تا رفته به یکی از اولین. بیانیه ضمنی از تابع دریافت اعضای هیات مثبت نامعتبر در C99 است. C99 فقط بدان معناست که 1999 نسخه از زبان C، که همان چیزی است که ما در حال در واقع با استفاده از. پس چه معنی است؟ خب C-- و به طور خاص C برنامه بسیار گنگ compilers--. آنها فقط می دانم شما چه کرده اید به آنها گفت، و این در واقع از هفته گذشته موضوعی. مشکل این است که اگر من به در مورد اجرای نام اینجا، و من یک تابع به نام تماس GetPositiveInt در اینجا در خط 20، که عملکرد فنی نمی وجود داشته باشد تا زمانی که کامپایلر خط 27 را می بیند. متاسفانه، کامپایلر است انجام کارهای بالا، پایین، چپ، راست، را به دلیل آن را ندیده است اجرای GetPositiveInt، اما آن را می بیند شما سعی برای استفاده از آن در اینجا، آن را فقط به bail-- فریاد زدن در شما با خطا message-- شاید مرموز، و نه در واقع کامپایل فایل. بنابراین یک نمونه اولیه به اصطلاح تا اینجا مسلما کار برکنار شده است. به معنای واقعی کلمه، من در اینجا رفت و من کپی و جا به جا از این، و من آن را در اینجا. از درجه اعتبار ساقط خواهد بود مناسب تر است، بنابراین ما می خواهیم به معنای واقعی کلمه را کپی کنید و این زمان آن را وارد کنید. من به معنای واقعی کلمه کپی و جا به جا می کند. واقعا فقط به عنوان مثل نان. نشانه کمی به کامپایلر. من نمی دانم که چه می کند این در عین حال، اما من قول داده به شما که آن را در نهایت وجود داشته باشد. و به همین دلیل این line-- در خط 16-- با یک سمی کولن پایان می رسد. این کار برکنار شده طراحی شده است. بله؟ اگر شما کتابخانه خود را پیوند کنید به the-- آه، سوال خوب است. شارپ شامل اجزاء فایل هدر. نیاز به be-- تقریبا باید همیشه در بالا بسیار است فایل برای similar-- برای دقیقا به همین دلیل، بله. از آنجا که در استاندارد io.h است به معنای واقعی کلمه یک خط شبیه به این، اما با تابع () printf کلمه، و با استدلال و نوع بازگشت آن است. و به این ترتیب با انجام تیز عبارتند از در اینجا، آنچه که شما به معنای واقعی کلمه انجام می است کپی و چسباندن محتویات از شخص دیگری نوشت تا بالا. در نتیجه cluing کد خود را در به واقعیت این است که آن دسته از توابع وجود دارد. آره؟ کاملا. بنابراین بسیار هوشمندانه و درست راه حل خواهد بود، شما می دانید چه؟ من نمی دانم چه نمونه اولیه است، اما من می دانم اگر من درک می کنم که C است فقط گنگ و تجدید نظر بالا به پایین. خوب اجازه دهید آن چه آن را می خواهد بدهد. اجازه دهید به کاهش است که کد، آن را تا چسباندن بالا، و در حال حاضر فشار اصلی پایین پایین. این بیش از حد مشکل را حل کند. اما شما به راحتی می تواند آمد تا با یک سناریو که در آن نیاز به تماس B، و شاید B به عقب را به A. این چیزی به نام بازگشت است، و ما به آن می آیند. و این ممکن است یا نه ممکن است خوب چیزی، اما شما قطعا می تواند در این راه حل را بشکند. و علاوه بر این، من ادعا می کنند سبک، به ویژه هنگامی که برنامه های خود را تبدیل این مدت و در این مدت، آن را فقط فوق العاده مناسب برای قرار دادن اصلی در بالای زیرا این چیزی بیشتر برنامه نویسان در حال رفتن به در مورد مراقبت. و پس از آن پاک کن کمی، مسلما، این کار را انجام راه من در اصل این کار را کرد با یک نمونه اولیه حتی هر چند که به نظر می رسد کمی کار برکنار شده در نگاه اول. آره؟ با عرض پوزش، می تواند به شما آن را با صدای بلند می گویند؟ اگر شما از مکان های از تغییر اجرا و نمونه اولیه؟ به طوری که سوال خوبی است. اگر شما دوباره اعلام این پایین در اینجا، بیایید ببینید چه اتفاقی می افتد. بنابراین اگر من قرار این پایین در اینجا، شما می گویید. اوه، ببخشید. بلندتر؟ حتی بلندتر. اوه، سوال خوب است. آیا آن را از درجه اعتبار ساقط تابع؟ شما می دانید، بعد از این همه سال، I هرگز یک نمونه اولیه قرار داده پس از آن. بنابراین اجازه دهید کار را انجام را تابع 1 بعد از انجام این کار. [غرغر] DAVID J. مالان: اوه، صبر کنید. ما هنوز برای قرار دادن همه چیز را تا بالا. بنابراین اجازه دهید این کار را تا اینجا، اگر من درک سوال خود را به درستی. من قرار دادن همه چیز، از جمله نمونه فوق اصلی، اما من قرار دادن نمونه در زیر پیاده سازی. بنابراین اگر من را یک، من گرفتن بازگشت متغیر n استفاده نشده error--. اوه، وجود دارد. با تشکر از شما. بیایید ببینید، ما خلاصی از این. این یک اشکال مختلف، پس بیایید چشم پوشی است. بیایید واقعا به سرعت این بازسازی. OK، بنابراین بحث داده نشده است مورد استفاده توسط قالب عبارات n-- آه، چرا که من به این اینجا تغییر کرده است. همه حق است، ما می دانیم چه پاسخ است که to-- همه حق است، در اینجا ما بروید. آه، با تشکر برای مثبت است. خوب، من این کد تعمیر after-- چشم پوشی از این مشکلات خاص از آنجایی که این was-- کار می کند پاسخ است. پس از آن بازنویسی کنید آنچه شما فقط انجام داده ام. I کامپایلر مشکوک است به گونه ای نوشته شده است آن است که نادیده گرفتن نمونه شما چون بدن، پس به صحبت می کنند، از تابع در حال حاضر اجرا شده است بالاتر است. من می خواهم که به واقع مشورت کتابچه راهنمای کامپایلر به درک اگر هر گونه دیگر وجود دارد مفهوم، اما در نگاه اول فقط با تلاش و تجربه، به نظر می رسد هیچ تاثیری وجود دارد. سوال خوب. بنابراین اجازه دهید جعل جلوتر در حال حاضر، در حال حرکت به دور از عوارض جانبی که توابع است که انجام کاری مانند بصری بر روی صفحه نمایش با تابع () printf، اما هیچ مقداری باز است. و توابع که بازگشت ارزش مانند ما فقط دیدم چند از. ما در حال حاضر شاهد این مفهوم دامنه، و ما این را دوباره و دوباره ببینید. اما در حال حاضر، دوباره، استفاده از قاعده کلی که یک متغیر تنها می تواند مورد استفاده قرار گیرد در داخل از مهمترین و به تازگی افتتاح شد و آکولاد بسته به عنوان ما در این مثال خاص دیدم. و به عنوان شما اشاره کرد، است ability-- وجود دارد شما می توانید از برخی از این مشکلات را حل کند با قرار دادن یک متغیر در سطح جهان در سطوح بسیار بالای از یک فایل. اما تقریبا در همه موارد ما را بر اساس آن اخم، و در واقع حتی به به این راه حل در حال حاضر. بنابراین در حال حاضر، غذای آماده است که متغیرهای این مفهوم دامنه. اما در حال حاضر اجازه دهید نگاهی به یکی دیگر از نگاه راه خشک در واقع به دنبال در برخی از جالب جزئیات پیاده سازی. چگونه ما ممکن است اطلاعات را نمایندگی کند. و ما در حال حاضر در این نگاه در هفته اول از کلاس. با نگاهی به باینری، و یادآوری خودمان را از اعشار. اما به خاطر از هفته گذشته که C است انواع داده های مختلف و خوشه تر، اما آنهایی که مفید ترین در حال حاضر ممکن است این. کاراکتر یا شخصیت، که اتفاق می افتد به یک بایت و یا هشت بیت در کل. و این که می گویند که به اندازه یک کاراکتر تنها با یک بایت است. یک بایت هشت بیت است، بنابراین این بدان معنی است که ما می توانیم که چگونه بسیاری از شخصیت های نمایندگی کند. چگونه بسیاری از حروف یا کاراکتر بر روی صفحه کلید اگر ما یک بایت و یا هشت بیت است. فکر می کنم به هفته صفر است. اگر شما هشت بیت، چگونه بسیاری از کل ارزش شما می توانید با نشان دادن الگوهای صفر و آنهایی که؟ One-- بیشتر از آن. بنابراین 256 کل اگر شما شروع به شمارش از صفر است. بنابراین اگر شما هشت bits-- اگر ما حال لامپ های باینری ما در اینجا دوباره، ما می تواند آن لامپ را روشن و خاموش در هر یک از 256 الگوهای منحصر به فرد. در حال حاضر این است که کمی مشکل ساز است. خیلی نه برای زبان انگلیسی و زبان عشق، اما مطمئنا زمانی که معرفی کنید، برای به عنوان مثال، زبان های آسیایی، که دارای نمادهای بسیار بیشتر از مثل 26 حروف الفبا. ما در واقع ممکن است نیاز بیش از یک بایت. و خدا را شکر در سال اخیر است جامعه استانداردهای دیگر به تصویب رسید که با استفاده از بیش از یک بایت در هر بار. اما در حال حاضر در C، به طور پیش فرض فقط یک بایت و یا هشت بیت است. یک عدد صحیح، در عین حال، چهار است بایت، در غیر این صورت به عنوان 32 بیت شناخته شده است. که بدان معنی است آنچه که بزرگترین ممکن تعداد ما می توانیم با اعضای هیات نمایندگی ظاهرا؟ با یک میلیارد. پس از آن چهار میلیارد دادن یا گرفتن است. 2 به قدرت 32th، اگر ما فرض کنیم هیچ عدد منفی و فقط استفاده از تمام مثبت شماره، آن را چهار میلیارد را و یا احتمالات را. شناور، در عین حال، یک نوع متفاوت است از نوع داده ها در C. این هنوز تعداد، اما آن را یک عدد حقیقی است. چیزی با نقطه اعشار. و معلوم است که C همچنین با استفاده از چهار بایت برای نشان دادن ارزشهای ممیز شناور. متاسفانه که چگونه بسیاری از شناور ارزش نقطه در جهان وجود دارد؟ چگونه بسیاری از اعداد حقیقی وجود دارد؟ یک بی نهایت وجود دارد تعداد، و برای همین موضوع یک تعداد نامحدود از اعداد صحیح وجود دارد. بنابراین ما در حال حاضر نوع هستند حفر خودمان یک سوراخ اینجا. به موجب آن ظاهرا در computers-- در حداقل برنامه ها در C نوشته شده است در them-- تنها می تواند تعداد عنوان بالا به عنوان چهار میلیارد دادن یا گرفتن، و شناور مقادیر نقطه تنها می تواند ظاهرا برخی از مقدار محدود از دقت. فقط تا بسیاری از رقم بعد نقطه اعشار است. از آنجا که، البته، اگر شما فقط 32 بیت داشته باشد، من نمی دانم که چگونه ما قصد داریم تا در مورد رفتن نمایندگی numbers-- واقعی احتمالا با انواع مختلف الگوهای. اما مطمئنا محدود وجود دارد تعداد این الگوها، بنابراین در اینجا، بیش از حد، این مشکل ساز است. در حال حاضر ما می تواند مشکل را کمی اجتناب کنند. اگر شما یک شناور استفاده نمی کند، شما می توانید از دو برابر استفاده در C، که به شما می دهد هشت بایت، که الگوهای احتمالی راه بیشتر از صفر است و آنهایی که. اما هنوز محدود است، که رفتن به تواند مشکل ساز باشد اگر شما ارسال نرم افزار برای گرافیک یا فانتزی فرمولهای ریاضی. بنابراین شما ممکن است در واقع می خواهم به دفعات مشاهده شده تا بزرگتر از آن است. طولانی long-- ابلهانه named-- همچنین هشت بایت یا 64 بیت، و این دو بار تا زمانی که یک int، و آن را برای یک مقدار عدد صحیح بلند است. fact-- پاپ اگر یک int چهار بایت است، چه مدت طولانی در C به طور معمول است؟ همچنین چهار بایت، اما بلند بلند هشت بایت است، و این است به دلایل تاریخی. اما غذای آماده ساعت است که فقط داده است در یک computer-- که به نمایندگی یک دستگاه فیزیکی با برق، آن را به طور کلی رانندگی آن صفر و ones-- با مقدار محدود از دقت. پس مشکل را پس از آن؟ خب یک مشکل وجود دارد از سرریز عدد صحیح. نه فقط در C، اما در کامپیوتر به طور کلی. به عنوان مثال، در صورتی که این یک بایت است به ارزش یک bit-- بنابراین اگر این هشت bit-- تمام است که در حال شماره یک. چه تعداد از این است نمایندگی اگر فرض کنیم این همه ارزش های مثبت در دودویی؟ 255، و آن را 256 نیست، چرا که صفر به پایین ترین تعداد است. پس 255 بالاترین است یکی است، اما مشکل فرض کنید که من می خواستم افزایش این متغیر که با استفاده از هشت بیت کل اگر من می خواهم به آن را افزایش. خب به محض اضافه کنم یکی به همه این عزیزان، شما می توانید تصور کنید شاید visually-- فقط مانند حمل یک با استفاده از decimals-- چیزی برای رفتن به جریان به سمت چپ. و در واقع، اگر من اضافه کردن تعداد یکی از این، چه در باینری اتفاق می افتد است که آن را به صفر سرریز. بنابراین اگر شما فقط use-- اعضای هیات نیست، اما یک بایت به تعداد اعداد صحیح در یک برنامه، توسط default-- به محض شما را به 250 دریافت، 251، 252، 253، 254، 255-- 0 پس از 255، که ممکن است چه یک کاربر است که به انتظار. در حال حاضر در عین حال در نقطه جهان شناور، شما همچنین مشکل مشابه داشته باشد. نه زیاد با بزرگترین number-- هر چند که مسئله هنوز. اما با مقدار دقت که شما می توانید نمایندگی کند. بنابراین اجازه دهید نگاهی به این مثال در اینجا نیز از code-- منبع امروز شناور-0.c. و متوجه آن فوق العاده است برنامه ساده است که باید ظاهرا نسخه قابل چاپ کردن چه مقدار؟ نظر شما در شرطبندی این است که برای چاپ حتی اگر یک بیت از نحو جدید وجود دارد اینجا؟ پس امیدوارم 0.1. بنابراین معادل یک دهم چرا که من انجام می دهند 1 تقسیم بر 10. من ذخیره سازی پاسخ در یک متغیر به نام ج. این متغیر از نوع float است، که یک کلمه کلیدی من فقط پیشنهاد وجود داشته است. ما این را دیده ام و نه قبل از، اما این نوع از راه شسته و رفته در تابع () printf است برای مشخص کردن که چگونه بسیاری از ارقام شما می خواهند پس از نقطه اعشار را ببینید. بنابراین این نماد فقط بدان معناست که در اینجا یک حفره یا سوراخ است. این برای یک نقطه شناور است ارزش، و آه، توسط راه، آن را با نقطه اعشار با نشان یک عدد بعد از نقطه اعشار. به طوری که تعداد است از ارقام مهم، پس به صحبت می کنند، که شما ممکن است بخواهید. بنابراین، اجازه دهید به جلو و انجام را شناور-0، ./float-0، و ظاهرا 1 تقسیم بر 10 0.0 می باشد. حالا چرا این؟ خوب دوباره، کامپیوتر در نظر گرفتن من به معنای واقعی کلمه، و من نوشته ام 1 و من نوشته شده است 10، و حدس بزنید چه نوع داده در نظر گرفته شده برای آن دو است ارزش؟ اعضای هیات، آن را از لحاظ فنی چیزی کمی متفاوت است. این به طور معمول طولانی است، اما آن را در نهایت یک مقدار انتگرال. یک مقدار ممیز شناور. کدام است برای گفتن که اگر این یک int است و این یک int است، مشکل این است که کامپیوتر می کند توانایی ندارد حتی آن نقطه اعشاری را ذخیره کنید. بنابراین، هنگامی که شما انجام 1 تقسیم 10 با استفاده از اعداد صحیح برای هر دو صورت کسر و مخرج، پاسخ باید 0.1 باشد. اما به دلیل computer-- کسانی که integers-- نمی داند که چه کاری انجام دهید با 0.1. پس چه شده است آن را به وضوح انجام می دهند؟ این فقط آن را دور انداختن، و آنچه من در نهایت از دیدن 0.0 است فقط به این دلیل من اصرار داشت که تابع () printf من یک نقطه اعشار نشان می دهد. اما مشکل این است که اگر شما یک عدد صحیح بر یک عدد صحیح تقسیم، شما تعریف get-- از C-- یک عدد صحیح. و آن را به انجام چیزی خوب و راحتی مانند دور آن را به نزدیکترین یکی بالا یا پایین. آن را برای کوتاه کردن همه چیز بعد از اعشار. پس فقط به طور مستقیم، آنچه احتمالا ثابت؟ ساده ترین راه حل اینجا چه خبر؟ آره؟ دقیقا. چرا ما نه تنها این درمان به عنوان ارزش ممیز شناور به طور موثر تبدیل آنها به شناور یا دو برابر. و در حال حاضر اگر من را شناور-0، یا اگر من شناور-1 کامپایل، که یکسان است به است چه چیزی پیشنهاد شد. و در حال حاضر من شناور-0، در حال حاضر من 0.1 من. در حال حاضر این شگفت انگیز است. اما در حال حاضر من قصد دارم به انجام چیزی کمی متفاوت است. من کنجکاو هستم برای دیدن آنچه که واقعا در رفتن در زیر هود، و من قصد دارم برای چاپ این به 28 رقم اعشار. من می خواهم به واقعا 0.1000-- infinite-- [نامفهوم] 27 صفر بعد از آن 0.1. خب بیایید ببینید که اگر این آنچه که من در واقع دریافت کنید. را شناور-0 همان فایل. ./floats-0. اجازه دهید به زوم بر روی پاسخ های دراماتیک. در تمام این مدت، شما فکر بوده ام 1 تقسیم بر 10 10٪ یا 0.1 است. این طور نیست. حداقل تا آنجا که به کامپیوتر نگران است. در حال حاضر why-- OK، که کامل دروغ 1 تقسیم بر 10 0.1 می باشد. اما why-- که نیست غذای آماده است. پس چرا کامپیوتر فکر می کنم، بر خلاف همه ما در اتاق، که 1 تقسیم بر 10 است در واقع است که ارزش دیوانه؟ کامپیوتر انجام ظاهرا چه خبر؟ آن چیست؟ این سرریز نیست، در هر سه. سرریز است به طور معمول وقتی شما بسته بندی کردن در اطراف یک مقدار است. این مسئله از عدم دقت در در یک مقدار اعشاری که در آن شما تنها 32 دارند و یا شاید حتی 64 بیتی. اما اگر بی نهایت وجود دارد تعداد numbers-- واقعی اعداد را با نقطه اعشاری و شماره thereafter-- قطعا شما می توانید همه آنها را نمایندگی نمی کنند. بنابراین کامپیوتر داده است ما نزدیک ترین بازی به ارزش آن می تواند نشان دهنده استفاده از آن بیت های بسیاری برای ارزش من در واقع می خواهم، که 0.1 است. متاسفانه، اگر شما شروع به انجام ریاضی و یا شما شروع که شامل این نوع از شناور ارزش نقطه در programs-- مهم نرم افزار های مالی، هر چیزی software-- نظامی که در آن ادراک است احتمالا بسیار مهم است. و شما شروع به اضافه کردن تعداد مانند این، و شروع در حال اجرا است که نرم افزار با ورودی های واقعا بزرگ و یا برای بسیاری از ساعت و یا مقدار زیادی از روز و یا مقدار زیادی از سال، این اشتباهات کمی کوچک قطعا می تواند در طول زمان اضافه کردن. در حال حاضر به عنوان یک به کنار، تا کنون اگر شما در مشاهده سوپرمن 3 یا فضای دفتر و شما ممکن است به یاد می آورند چگونه آن بچه ها به سرقت برده مقدار زیادی از پول را از کامپیوتر خود با استفاده از مقادیر ممیز شناور و اضافه کردن کمی باقی مانده، امیدوارم که فیلم اکنون حس می کند بیشتر است. این چیزی است که آنها اشاره به در آن فیلم. واقعیت این است که بیشتر شرکت نمی نگاه پس از تعداد معینی از رقم اعشار، ولی برای کسانی که کسری از سنت می باشد. بنابراین شما شروع به آنها اضافه کردن، شما شروع به ساختن پول زیادی در حساب بانکی شما. به طوری که فضای دفتر توضیح داد. در حال حاضر متاسفانه فراتر از فضای دفتر، وجود دارد برخی از مشروع نگران و اثرات قابل توجه از این نوع از تصمیم گیری های طراحی زمینه ای، و در واقع یکی از دلایل استفاده می کنیم C در این دوره است به طوری که شما واقعا این زمین تا درک درستی از نحوه کار کامپیوتر، چگونه نرم افزار کار می کند، و نمی را هیچ چیز را برای اعطا. و در واقع متاسفانه، حتی با که درک اساسی، ما انسان ها اشتباه می کنند. و چیزی که من فکر کردم من می خواهم به اشتراک بگذارید این فیلم هشت دقیقه اینجا گرفته از قسمت امکانات مدرن است که نشان می دهد آموزشی درباره چگونگی کار که رنگ دو عکس از زمانی که استفاده نادرست و درک ارزش ممیز شناور منجر به برخی از مهم نتایج مایه تاسف است. اجازه دهید یک نگاه. [VIDEO پخش] ما با در حال حاضر به "مهندسی بازگشت حوادث "در امکانات مدرن. کامپیوترها. ما همه آمده ام تا شرایط مشکلات اغلب نا امید کننده است که کردم با them-- اشکالات، ویروس ها، و glitches-- نرم افزار برای قیمت های کوچک برای راحتی پرداخت. اما در تکنولوژی پیشرفته و سرعت بالا نظامی و برنامه های فضایی برنامه های کاربردی، کوچکترین مشکل می تواند توان به فاجعه بزرگ. در 4 ژوئن 1996، دانشمندان آماده برای راه اندازی بدون سرنشین موشک Ariane 5 موشک. این حمل علمی ماهواره طراحی شده برای ایجاد دقیقا چگونه تعامل میدان مغناطیسی زمین با باد خورشیدی است. راکت برای ساخته شد آژانس فضایی اروپا، و خاموش برداشته از تسهیلات آن در ساحل گویان فرانسه. -At حدود 37 ثانیه به پرواز، آنها برای اولین بار چیزی متوجه بود اشتباه است. این نازل آهنی شد در راه آنها واقعا باید نیست. حدود 40 ثانیه به پرواز، به وضوح وسیله نقلیه دچار مشکل شد، و این زمانی که آنها ساخته شده تصمیم به نابود کردن آن. افسر ایمنی محدوده، با جرات فوق العاده ای، دکمه و منفجر موشک قبل از آن می تواند خطر برای امنیت عمومی تبدیل شده است. -این قبل از ازدواج بود سفر از موشک Ariane 5، و تخریب آن در زمان به دلیل نقص محل تعبیه شده در نرم افزار موشک است. بانک مشکل در آریان بود که وجود دارد تعداد مورد نیاز بود 64 بیت بیان می شوند، و آنها می خواستند برای تبدیل آن را به یک عدد 16 بیتی. آنها تصور می کردند تعداد هرگز به بسیار بزرگ است. که بیشتر از آن ارقام در تعداد 64 بیتی صفر بود. آنها در اشتباه بودند. بانک ناتوانی یک برنامه نرم افزار برای شرایط نوع تعداد تولید شده توسط دیگر در ریشه شکست بود. توسعه نرم افزار تبدیل شده بود بخش بسیار پر هزینه از فن آوری های جدید است. آریان 4 موشک به حال بسیار موفق بوده است. بنابراین بسیاری از نرم افزار ایجاد شده برای آن را نیز در موشک Ariane 5 استفاده شد. بانک مشکل اساسی که موشک Ariane 5. شد faster-- شتاب سریع تر، و نرم افزار برای آن به حساب نمی بود. بانک تخریب موشک یک فاجعه مالی بزرگی بود. اکنون به علت خطای نرم افزار دقیقه است. اما این اولین بار نیست زمان مشکلات تبدیل داده ها فن آوری موشکی مدرن به ستوه آورده بود. -در سال 1991 با شروع از جنگ اول خلیج فارس، موشک پاتریوت یک نوع مشابه تجربه از یک مشکل تبدیل عدد است. و به عنوان یک نتیجه 28 people-- 28 soldiers-- آمریکا، کشته شدند و حدود صد تن دیگر زخمی شدند. هنگامی که Patriot، که قرار بود برای محافظت در برابر Scuds ورودی، شکست خورده را به آتش موشک. وقتی عراق به کویت حمله کرد، و امریکا در اوایل سال 1991 آغاز طوفان صحرا، موشک پاتریوت مستقر شدند برای محافظت از عربستان سعودی و اسرائیل از حملات موشکی اسکاد عراق. پاتریوت US میان برد است سطح به هوا سیستم تولید شده توسط شرکت ریتون. بانک اندازه پاتریوت رهگیر itself-- آن را در مورد تقریبا 20 فوت طول، و وزن آن حدود 2،000 پوند است. و آن را حمل یک کلاهک در حدود، من فکر می کنم حدود £ 150. و سر جنگی خود را است انفجاری بالا، که دارای قطعات در اطراف او. بنابراین پوشش از سر جنگی است طراحی به مانند یک چارپاره عمل می کنند. بانک موشک انجام می چهار در ظرف، و توسط یک تریلر نیمه منتقل می شود. بانک سیستم ضد موشکی پاتریوت حداقل 20 سال در حال حاضر باز می گردد. این روش در اصل طراحی شده بود به عنوان یک موشک دفاع هوایی به شلیک کردن هواپیما دشمن. در جنگ اول خلیج فارس وقتی که جنگ در آمد، ارتش خواست به استفاده از آن را به شلیک کردن Scuds، نه هواپیما. نیروی هوایی عراق بود نه آنقدر از یک مشکل، اما ارتش در مورد Scuds نگران بود. و به طوری که آنها به تلاش ارتقاء پاتریوت. -Intercepting دشمن موشک های سفر در ماخ 5 قرار بود به چالش به اندازه کافی. اما زمانی که میهن پرستی به خدمات با عجله شد، ارتش بود آگاه نیست اصلاح عراق که ساخته شده scuds خود را نزدیک به غیر ممکن است به آن. چه اتفاق افتاده است که Scuds در سال های آینده بی ثبات بود. آنها لرزان بود. دلیل این Iraqis-- بود به منظور رسیدن به 600 کیلومتر از از missile-- محدوده 300 کیلومتر وزن خارج از کلاهک مقابل زمان، و کلاهک سبک تر. بنابراین در حال حاضر در پاتریوت در تلاش برای رسیدن در حرکت تند و سریع، و بسیاری از time-- اکثریت قریب به اتفاق از time-- که فقط توسط حرکت تند و سریع پرواز می کنند. -Once اپراتورهای سیستم پاتریوت متوجه پاتریوت هدف خود را گم، آنها کلاهک پاتریوت را منفجر برای اجتناب از تلفات احتمالی اگر آن را به سقوط به زمین داده شد. یعنی چیزی بود که بسیاری از مردم را دیدم به عنوان توپ های آتشین بزرگ در آسمان، و اشتباه به عنوان ره گیری از کلاهک حرکت تند و سریع. گرچه در آسمان شب، میهن پرستان به نظر می رسد با موفقیت از بین بردن Scuds، در ظهران تواند وجود داشته باشد اشتباه نکنید در مورد عملکرد آن است. سیستم رادار پاتریوت وجود دارد آهنگ از دست داده یک حرکت تند و سریع ورودی و هرگز از راه اندازی به نقص نرم افزار. این اسرائیلی ها که برای اولین بار کشف شد که دیگر سیستم روشن بود، بیشتر اختلاف زمان تبدیل شد. با توجه به ساعت های جاسازی شده در کامپیوتر سیستم. -درباره دو هفته قبل از تراژدی در ظهران، اسرائیلی ها به گزارش وزارت دفاع که سیستم شد زمان از دست دادن. پس از حدود هشت ساعت در حال اجرا، آنها متوجه که سیستم تبدیل شدن به به طرز محسوسی کمتر دقیق است. وزارت دفاع در پاسخ به گفتن تمام پاتریوت سیستم را ترک نمی در برای مدت طولانی. آنها هرگز گفت: آنچه که مدت زمان طولانی بود. 8 ساعت، 10 ساعت، هزار ساعت است. هیچ کس نمی دانست. بانک باتری پاتریوت مستقر در پادگان در ظهران و ناقص داخلی آن ساعت در بیش از 100 ساعت بوده است در شب 25 فوریه. آن را هم ردیابی با دقت در حدود یک دهم از یک ثانیه. در حال حاضر یک دهم ثانیه تعداد جالب است زیرا نمی تواند بیان شود در باینری دقیقا، که معنی آن را نمی توان دقیقا بیان شود در هر کامپیوتر های دیجیتال مدرن. این سخت است به این باور است، اما استفاده از این به عنوان مثال. بیایید تعداد یک سوم. یک سوم نمی تواند بیان شده در اعشار دقیقا. یک سوم 0.333 است ادامه بی نهایت. هیچ راهی برای انجام این کار وجود دارد با دقت مطلق در یک دهدهی. این دقیقا همان نوع مشکل است که در میهن پرستی اتفاق افتاده است. دیگر سیستم زد، بدتر از خطای زمان تبدیل شد. -After 100 ساعت از عمل، خطا در زمان فقط حدود یک سوم بود از یک ثانیه. اما از نظر هدف قرار دادن موشک های سفر در ماخ 5، آن را در ردیابی منجر خطا از بیش از 600 متر است. این امر می تواند خطای مهلک برای سربازان در ظهران. چه اتفاق افتاده است راه اندازی حرکت تند و سریع بود تشخیص داده شده توسط ماهواره های هشدار دهنده، و آنها می دانستند حرکت تند و سریع بود در آینده در جهت خود را. آنها نمی دانند که در آن بود در آینده. این در حال حاضر تا رادار بود بخشی از سیستم پاتریوت دفاع از ظهران به کردهاید و حفظ آهنگ از موشک های دشمن وارده. بانک رادار بسیار باهوش بود. این در واقع آهنگ موقعیت حرکت تند و سریع و پس از آن پیش بینی که در آن آن را احتمالا خواهد بود در کنار هم رادار پالس فرستاده شده از. این دروازه دامنه نامیده می شد. سپس، پس از آن که پاتریوت تصمیم می گیرد هم به اندازه کافی است گذشت به عقب برگردید و بررسی بعدی محل این مورد شناسایی شده است آن را به عقب می رود. بنابراین، هنگامی که آن را به رفت و برگشت به اشتباه مکان، آن را پس از آن هیچ شی را می بیند. و این تصمیم این بود که هیچ شیء وجود دارد. این یک تشخیص غلط وجود دارد و آن قطره مسیر. بانک های دریافتی حرکت تند و سریع ناپدید شد از صفحه رادار، و ثانیه بعد، آن را ناودان به سربازخانه. حرکت تند و سریع 28 کشته شدند. این یکی از آخرین اخراج شد در طول جنگ اول خلیج فارس. متأسفانه، نرم افزار به روز رسانی در سپیده دم روز بعد وارد شده است. نقص نرم افزار به حال است ثابت، بسته شدن یک فصل در مشکل تاریخ موشکی پاتریوت. [END VIDEO پخش] DAVID J. مالان: که در آن است برای CS50. ما شما را در روز چهارشنبه را ببینید. [MUSIC پخش]