DAVID J. مالان: این CS50 است و این آغاز هفته چهار است. و، پسر، فولکس واگن در است مشکل همه به خاطر نرم افزار است. اجازه دهید ما را یک نگاه. [پخش ویدئو] -Cars، باهوش ترین شخصیت در فیلم سریع و خشمگین. این هفته خودروساز آلمانی فولکس واگن خود را پیدا در وسط یک رسوایی نسبت به طور بالقوه جنایی. -Volkswagen برای میلیاردها پرانتز در جریمه، اتهامات جنایی ممکن برای مدیران اجرایی آن، به عنوان شرکت عذر خواهی برای تقلب 11 میلیون اتومبیل به کمک به آن را ضرب و شتم آزمون گازهای گلخانه ای. مدل های دیزلی -Certain شد با نرم افزار پیچیده طراحی شده که اطلاعات مورد استفاده از جمله موقعیت فرمان و خودرو سرعت برای تعیین ماشین بود تحت آزمایش گازهای گلخانه ای. تحت این شرایط، موتور می انتشارات سمی را کاهش دهد. اما ماشین برای دور زدن تقلب شده که زمانی که آن رانده شد. تولید گازهای گلخانه ای افزایش یافته است 10 تا 40 بار بالاتر از سطح EPA قابل قبول است. [END پخش] DAVID J. مالان: بنابراین اجازه دهید نگاهی به این و ببینید که دقیقا چگونه این ممکن است اجرا شود و چگونه این ممکن است تحت تاثیر قرار اتومبیل بسیاری مثل این. بنابراین در دست من در اینجا مطبوعات انتشار است که توسط EPA-- صادر شد محیط زیست آژانس حفاظت از که آژانس نظارتی آمریکا این است که دسته نگرانی های زیست محیطی، و پس از آن واقعی اخطار قانونی که ارسال به فولکس واگن تنها چند روز پیش. بنابراین سازمان حفاظت محیط زیست می نویسد، و افشا کن عمومی، یک نرم افزار پیچیده الگوریتم در برخی از خودروهای فولکس واگن تشخیص زمانی که خودرو تحت تست تولید گازهای گلخانه ای رسمی و تبدیل گازهای گلخانه ای کامل کنترل در تنها در طول آزمون. اثربخشی این آلودگی وسایل نقلیه دستگاه های کنترل تولید گازهای گلخانه ای تا حد زیادی در تمام رانندگی عادی کاهش می یابد شرایط. این نتایج در اتومبیل که با استانداردهای در آزمایشگاه و یا تست ایستگاه، اما در حین عملیات عادی منتشر می کنند oxides-- نیتروژن و یا NOx-- تا 40 برابر استاندارد. این نرم افزار تولید شده توسط فولکس واگن یک دستگاه نقل قول را تمام کردن، شکست، به عنوان پاک تعریف قانون هوای در ایالات متحده. آنها در رفتن به می گویند که سازمان حفاظت محیط زیست و دیگر آژانس کشف دستگاه را شکست نرم افزار پس از تجزیه و تحلیل مستقل توسط محققان در غرب دانشگاه ویرجینیا است. آلودگی های NOx به کمک دی اکسید نیتروژن، اوزون سطح پایه، و ذرات ریز. قرار گرفتن در معرض این آلاینده های پیوند شده است با طیف گسترده ای از اثرات جدی سلامت، از جمله افزایش آسم حملات تنفسی و سایر بیماری ها می تواند به اندازه کافی جدی می شود به به بیمارستان ارسال به مردم. قرار گرفتن در معرض ازن و ذرات نیز با زودرس شده است مرگ به علت مرتبط تنفسی و یا قلبی عروقی اثرات مربوط می شود. کودکان، سالمندان، افراد مبتلا به بیماری های تنفسی از قبل موجود به خصوص در معرض خطر هستند اثرات بهداشتی آلاینده های. کافی است که می گویند، آن را کاملا جدی است. و اجازه دهید در رفتن به عنوان خوانده شده فقط یک گزیده ای بیشتر و پس از آن ما یک نگاه مفاهیم اساسی این در زمینه یک ماشین. به طور خاص، فولکس واگن تولید و نصب نرم افزار در اصطلاح کنترل الکترونیکی module-- یا ECM-- از این وسایل نقلیه که احساس هنگامی که وسیله نقلیه برای مورد آزمایش قرار گرفت انطباق با استانداردهای انتشار EPA. بر اساس ورودی های مختلف از جمله موقعیت فرمان، خودرو سرعت، مدت زمان موتور را عمل، و فشار هوا، این ورودی دقیقا ردیابی پارامترهای از روش آزمون فدرال مورد استفاده برای تست انتشار برای صدور گواهینامه EPA اهداف. در طول آزمایش انتشار سازمان حفاظت محیط زیست، نرم افزار ECM وسایل نقلیه نرم افزار که تولید زد نتایج تولید گازهای گلخانه ای سازگار است. در همه زمان های دیگر، نرم افزار ECM خودرو یک جاده جداگانه زد کالیبراسیون که باعث کاهش اثر بخشی به طور کلی سیستم کنترل انتشار، به طور خاص کاتالیستی کاهش NOx استفاده ناب trap-- که ما در مورد در یک لحظه را ببینید. به عنوان یک نتیجه، انتشار NOx استفاده توسط یک عامل از 10 تا 40 برابر افزایش یافته است بالاتر از سطح سازگار EPA بسته به نوع از چرخه درایو. پس چه این واقعا به معنی، و کد منبع نرم افزار در حال اجرا به در فولکس واگن است نه هنوز افشا، این است که، به طور موثر، این معادل است جایی در درون وجود دارد کد فولکس واگن است. اگر شما در حال آزمایش است، و اگر ماشین تشخیص عوامل محیطی خاص مانند فرمان موقعیت و یا جنبش و یا عدم آن از ماشین و یا هر تعداد از عوامل دیگر که در حال حاضر فرض به بخشی از این فرمول، آنها به سادگی به نوبه خود در کنترل انتشار کامل. به عبارت دیگر، آنها شروع رهبری کمتر از آلاینده ها است. دیگری، در هر وضعیت دیگر هنگامی که آن را به عنوان تشخیص داده نشده در آزمایشگاه، آنها فقط نمی کنند. و به این ترتیب شما می توانید این را به بیشتر ساده شبه بتن با چیزی به این شکل. اگر چرخ در حال تبدیل اما فرمان است، مطرح نیست که ماشین است در برخی از نوع استوانه چرخان اما در برخی از انبار حال آزمایش است، پس از آن به عنوان رفتار EPA شما را به دوست. در غیر این صورت نیست. بنابراین اجازه دهید یک نگاهی از در یک فیلم کوتاه است که طول می کشد نگاه چه مفاهیم این در واقع مکانیکی. [پخش ویدئو] -Last جمعه EPA اعلام کرد که برخی اتومبیل آئودی ساخته شده فولکس واگن بین سال های 2009 و در این سال با استفاده از یک به اصطلاح دستگاه شکست به اطراف قوانین تولید گازهای گلخانه ای طراحی شده برای حفظ هوای پاک است. اما به چه معنا است دقیقا؟ خب، اتومبیل های مدرن ده ها تن از کامپیوترهای درون آنها. و برخی از کسانی که کامپیوتر کمک به هماهنگی توابع از موتور برای بهینه عملکرد حالی که مطمئن شوید این است که زباله بیش از حد وجود ندارد از لوله اگزوز آینده. آنها به کار واقع شده است این راه را برای چند دهه در حال حاضر. در واقع، هر بخشی موتور یک ماشین مدرن دارای یک سنسور یا کنترلر بر روی آن، و این کامپیوترها در داده های هزاران نفر از خواندن بار در گیری دوم تنظیمات مانند نسبت سوخت به هوا که رفتن به داخل سیلندر. این تقلب فولکس واگن و مدل های آئودی دیزلی هستند، و موتورهای دیزلی یکی بیشتر کامپیوتر واقعا مهم پارامترهای کنترل، که مقدار سوخت نسوخته رفتن به اگزوز. حالا که برای تلفن های موبایل بد است. به صدا در نمی مانند که شما می خواهید سوختی که نسوخته رفتن به اگزوز. اما در مورد یک دیزل، شما چیزی به نام تله های NOx است که یک دستگاه است که جذب و تله برای اکسیدهای نیتروژن که آلاینده های است که می در غیر این صورت به اتمسفر است. و اثر این دام های NOx با سوختی که نسوخته افزایش یافته است. بنابراین یک دستگاه شکست یک برنامه خاص است در داخل این کامپیوتر که می توانید آن را شبیه ماشین ملاقات انتشار استانداردهای حتی زمانی که آن را نمی کند. فولکس واگن یک مشکل در دست خود داشتند. موتورهای دیزل آن شناخته شده بود برای گرفتن اقتصاد سوخت بزرگ، اما تله های NOx تنها خوبی کار می کند وقتی سوخت بیشتر استفاده شده است. به طوری که ماشین ها تشخیص، با استفاده از این دستگاه شکست، هنگامی که آن را گرفتن تولید گازهای گلخانه ای آزمون، آن را سوخت بیشتری استفاده کنید، را به کار تله های NOx خوب، تولید گازهای گلخانه ای می شود خوب است. اما پس از آن شما را بر روی جاده، دستگاه خاموش می شود، شما در حال سوختن سوخت کمتر اما شما در حال قرار دادن به اندازه 40 بار آلاینده های بیشتری به جو است. اما چگونه هک کردند ماشین مطمئن شوید که آن را برای انطباق تولید گازهای گلخانه ای تست شده؟ سازمان حفاظت محیط زیست می گوید که پیچیده بود سیستم بررسی می شود که همه چیز مانند موقعیت فرمان، سرعت، مدت زمانی که موتور روشن بود، و حتی فشار اتمسفر. به عبارت دیگر وجود دارد، به هیچ وجه این اتفاقی بود چون نرم افزار بود طراحی با دقت بسیار برای شناسایی آزمون تولید گازهای گلخانه ای رسمی. که برخی از بسیار جدی فریب و که چرا فولکس واگن در است چنین مشکل جدی است. در واقع، مدیر عامل شرکت، مارتین Winterkorn، فقط پا به پایین. پس چه اتفاقی می افتد؟ خوب، اگر شما یکی از نیم میلیون هستید Jettas دیزل، بیتلز، جوراب، Passats، یا آئودی A3s گردد، خبر خوب این است است که ماشین خود را هنوز امن به رانندگی کنید. شما لازم نیست که به آن گل تا زمانی که فولکس واگن مسائل مربوط به یاد می آورند. اما در برخی از نقطه آنها احتمالا باید برای به روز رسانی نرم افزار در داخل ماشین خود را. وقتی که اتفاق می افتد شما ممکن است گرفتن مایل کمتر در هر مخزن. وکلا در حال حاضر آماده برای دادخواهی عمل بنابراین صاحبان ممکن است جبران در برخی از نقطه در آینده است. اما این به رفتن نیست اتفاق می افتد هر زمان به زودی. [END پخش] DAVID J. مالان: پس این در واقع افزایش می دهد یک سوال جالب تصویر بزرگتر به عنوان به اعتماد. درست؟ همه ما اپل و یا مصنوعی و یا چیزی در جیب ما به احتمال زیاد این روزها، و یا لپ تاپ در دور ما که نرم افزار در حال اجرا ساخته شده توسط اپل و مایکروسافت و مجموعه ای از شرکت های دیگر. اما چگونه ما می دانیم که آنچه این محصولات نرم افزاری انجام می دهند در واقع آنچه این شرکت می گویند که انجام می دهند؟ به عنوان مثال، که به می گویند که هر زمانی که شما یک تماس تلفنی در آی فون خود را و یا تلفن Android یا مانند آن، که شماره تلفن هم است به سرور برخی از شرکت آپلود به دلیل برخی از برنامه ام نوشته شده است، آن است که آیا عامل سیستم خود مانند iOS یا آندروید، و یا اینکه شما دانلود کرده اید برخی از برنامه های شخص ثالث که به نحوی است که گوش دادن به همه چیز شما در حال تایپ کردن در و یا همه چیز شما در واقع گفت. چگونه شما می دانید که، زمانی که شما بچه ها در حال اجرا هستند صدای جرنگ جرنگ و یا به کامپایل خود را نرم افزار خود در CS50، چگونه شما انجام کارکنان خود که CS50 را، از طریق کتابخانه CS50، تا ورود هر نبوده است رشته شما تا به حال بدست و یا هر اینچ شما تا به حال بدست؟ خوب، شما قطعا می تواند نگاه در کد منبع برای چیزی مانند کتابخانه CS50، شما می تواند در کد منبع نگاه برای سیستم عامل لینوکس در حال اجرا در CS50 IDE. اما یک ارائه شگفت انگیز بازگشت در سال 1984 داده شد در دریافت جایزه تورینگ توسط دانشمند کامپیوتر بسیار مشهور شناخته شده as-- نام کن تامپسون که جایزه تورینگ دریافت که مرتب کردن بر اساس علم کامپیوتر است جایزه نوبل، اگر شما خواهد شد، برای کار خود را بر روی یک سیستم عامل یونیکس است، که در بسیار شبیه روحالقدس به آنچه که استفاده از آن لینوکس است. و سوال او در خواست خود سخنرانی پذیرش، در اصل گذاشتن چارچوب برای سال ها و سال بحث در مورد اعتماد و امنیت، این بود. تا چه حد باید یکی اعتماد بیانیه که program-- یک قطعه از software-- رایگان اسب های تروجان است؟ شاید مهم تر آن است به اعتماد افرادی که از نرم افزار نوشت. و در واقع، ما مرتبط کرده ام به بحث که او زمانی که پذیرش این جایزه به در '80s در وب سایت CS50 را در زیر صفحه سخنرانی برای امروز. از آنجا که آنچه شما خواهید دید این است که او در واقع می دهد یک مثال ساده از چگونه حتی یک کامپایلر مثل صدای جرنگ جرنگ یا هر چیز دیگری کامپایلر دیگران در گذشته استفاده می شود، چه می شود اگر در ما کامپایلر جاسازی شده خودمان را با استفاده از کمی اگر شرایط که اساسا می گوید، اگر شما متوجه است که این کد با استفاده از تابع از GetString یا GetInt تابع، به جلو و قرار دادن درب پشت و یا اسب تروجان به طوری که که برنامه در حال حاضر برخی صفر و آنهایی که انجام کاری مخرب. ورود به سیستم تمام خود را کلید، آپلود که داده به برخی از سرور، یا واقعا هر چیزی. و آنچه کن تامسون در ادامه به انجام در بحث خود است تا نشان دهد که حتی اگر شما دسترسی به منبع دارند کد یک کامپایلر که بدتر ممکن است انجام این کار، مهم نیست چون است این مرغ و تخم مرغ وجود دارد واقعیت از بسیاری از گذشته سال به موجب آن کامپایلرها استفاده می شود به خود را کامپایل کنید. به عبارت دیگر، راه برگشت وقتی کسی تا به حال به اولین کامپایلر نوشته شده است. و پس از آن، هر زمان که به روز شده ام یک کامپایلر با تغییر کد منبع آن، اضافه کردن امکانات و کامپایل مجدد آن برای افرادی مانند ما به استفاده از، خوب، آنها با استفاده از قدیمی نسخهی کامپایلر برای کامپایل جدید نسخه از کامپایلر. و اگر شما نگاهی در بحث که او داد، شما خواهید دید که به دلیل که دوری، شما در واقع می تواند اشکالات و یا اسب های تروجان جاسازی شده در نرم افزار ما با استفاده از. و حتی اگر شما در نگاه کد منبع برای کسانی که برنامه ها، آن ممکن است حتی آشکار باشد زیرا حیله گری است که در واقع در برخی از نسخه های قدیمی تر از کامپایلر که از زمانی که شده است تزریق تهدید به نرم افزار ما. است که فقط می گویند، ما واقعا نمی تواند و نباید نرم افزار مورد اعتماد در حال اجرا در لپ تاپ های ما و یا تلفن های یا هر تعداد از مکان. و در واقع، بعد از آن در این ترم که ما شروع به صحبت کردن در مورد برنامه نویسی تحت وب و در واقع شروع به ساخت برنامه های کاربردی وب خود، ما در مورد این صحبت تهدید و دیگران است. در حال حاضر، شما ممکن است تعجب و متوجه این بود که کمی به Darth کوچک وجود دارد Vader با در کلیپ ها که در آستانه نشان دادن وجود دارد در مورد فولکس واگن. اگر شما دیده ام هرگز، من هر چند که ما باید روشن خلق و خوی به دلیل این است که همه بسیار افسرده و ترسناک است. من قصد دارم به عقب نگاه در سوپر باول 2011 هنگامی که یک تجاری توسط Volkswagen-- و این تقریبا باعث می شود آنها را again-- دوست داشتنی برای اولین بار در تلویزیون پخش می شود. این 60 کلیپ دوم که من فکر می کنم شما لذت ببرید. [پخش ویدئو] [MUSIC - تم از "جنگ ستارگان"] [DOG کلمن] [ماشین شروع می شود] [END پخش] DAVID J. مالان: آره. من فقط چک کردن شد. این خودرو در لیست نقض است. خیلی خوب. بنابراین ما در برخی از نگاه شبه یک لحظه پیش. و در اینجا بزرگتر قطعه از کد شبه که ما دیده ایم چند بار تا کنون. و اجازه استفاده از این یک فرصت است در حال حاضر به معرفی یک برنامه نویسی جدید تکنیک است که ما انجام داد الگوریتمی را ببینید هفته گذشته هنگامی که ما در مرتب سازی بر ادغام کرد. اما اجازه دهید آن را رسمی و ببینید که چگونه ما ممکن است آن را در کد واقعی استفاده کنید، و پس از آن ما قصد داریم به استفاده از این روش پایین جاده ترین به احتمال زیاد برای حل برخی از مشکلات دیگر است. پس این یکی از برنامه های اول بود ما تا به حال نوشت، البته در کد شبه. و آنچه این برنامه به ما اجازه انجام دوره بود برای پیدا کردن مایک اسمیت در یک دفترچه تلفن. و اطلاع در خطوط خاص هشت و 11 که این بیانیه برو تا به حال. و در واقع، برخی از زبان، C در میان آنها، در واقع انجام یک بیانیه است که به معنای واقعی رفتن به که شما اجازه می دهد تا به پرش به یک خط خاص. به طور کلی بر دلیل اخم کرد می توان آن را به راحتی مورد آزار قرار گرفته و شما می توانید شروع به پریدن خود را برنامه همه جا به عنوان مخالف به استفاده از نوع منطق و کنترل جریان که ما تا کنون تنها با استفاده می شود حلقه ها و شرایط و مانند آن. اما ما می توانیم این الگوریتم ساده در کد شبه شرح زیر است. به جای این تکرار شونده و یا حلقه رویکرد که در آن ما را در رفتن به عقب و تماس و تماس به خط سه، چرا ما فقط نوع زدن توپ و بیشتر به طور کلی در خط هفت و 10 می گویند، فقط جای آن دو جفت از خطوط با، اگر دیگری اسمیت قبلی است در کتاب خواهیم جستجو برای مایک در نیمه سمت چپ این کتاب است. اگر دیگری اسمیت بعد از آن در کتاب، جستجو برای مایک در سمت راست نیمی از کتاب. و متوجه حال حاضر دوری. درست؟ من در جستجوی برای مایک در دفترچه تلفن و پس از آن من در نهایت ضربه شاید خط هفت و یا شاید خط 10 و آموزش من به خودم جستجو برای مایک در نیمی از دفترچه تلفن. خوب، چگونه می توانم برای مایک را جستجو کنم؟ من در وسط هستم جستجو برای مایک، چرا شما مرتب کردن بر اساس من ارسال در یک دایره. اما این خوب است زیرا آنچه است اتفاق می افتد به اندازه مشکل، در خط 7 و 10 نوشته شده است؟ ما نه تنها گفت جستجو برای مایک، جستجو برای مایک. ما در حال به طور خاص گفت: آنچه؟ جستجو برای او در نیمه سمت چپ در نیمه سمت راست است که به طور موثر نیمی از اندازه از این مشکل است. پس از آن خوب که ما نوع هستید در گیر شدن در این چرخش، این استدلال دایره ای، چرا که حداقل ما ساخت مشکل کوچکتر و کوچکتر. و در نهایت ما در حال رفتن برای رسیدن به که به اصطلاح به حالت پایه که در آن ما فقط یک صفحه left-- به عنوان داوطلب ما در هفته گذشته did-- ما یک صفحه داشته چپ و پس ما نمی باید برای نگه داشتن جستجو برای مایک اسمیت چرا که او هم بر روی آن صفحه و یا او نیست. پس چگونه می تواند این ایده، این پیاده سازی می کنیم مرتب سازی بر مدور در کد واقعی؟ خب، ما می توانید یک تکنیک اهرم که به طور کلی به عنوان بازگشتی شناخته شده است. و ما این را در دیده ام مرتب سازی بر شبه برای ادغام هفته گذشته است. به یاد بیاورید که این بود که شبه برای جور کردن و ادغام. مسلما حتی ساده تر از حباب و یا انتخاب یا مرتب سازی درجی فقط از نظر سادگی که با آن شما می توانید آن را بیان کنند. اما این دلیل ما از گردش هستید گفت: جستجو برای چیزی با جستجو برای دوباره آن را. اما ما در حال جستجو یا در نیمه سمت چپ و یا در نیمه سمت راست و سپس در نهایت ما ادغام در این مورد. اما در اینجا، بیش از حد، با این دو خط مرتب کردن، آیا ما دوباره این دارند ایده بازگشت. و مشخص این به چه معناست، در زمینه یک الگوریتم، این است که یک الگوریتم بازگشتی است اگر آن را با استفاده و یا خود را خواند. و یا از لحاظ C، یک تابع است recursive-- یک تابع به نام تولی بازگشتی اگر تولی است، جایی در کد منبع آن، ، تابع خود را تولی. و این بد اگر تمام تولی تا به حال می کند است دوباره و دوباره خود را پاسخ. این خوب است اگر تولی در نهایت متوقف می شود، به عنوان نشانی مرتبسازی ادغامی، گفت: یک دقیقه صبر کنید، اگر این مشکل فوق العاده است کوچک، به عنوان مثال، و یا او را پیدا کردم که من هستم به دنبال، تنها بازگشت. آیا به صورت بازگشتی، نمی چرخه دوباره خودم تماس بگیرید. و بنابراین اجازه دهید نگاهی به این در واقع ممکن است کار کند. بنابراین من قصد دارم به جلو بروید و باز تا دو نمونه کد منبع اینجا. یکی از آنها به نام سیگما 0. و این است که نه در همه بازگشتی، اما اجازه دهید یک در چه این برنامه می کند نگاه کنید. من ساده به همه نظر از آن اما همه از کد منبع در را CS50 وب سایت نظر اگر شما می خواهید از طریق آن بعدا دوباره. و اجازه دهید انجام چند از سلامت عقل را چک کنید. بنابراین در بالای این کد، ما شامل CS50.h. چه کاری انجام دهید؟ چرا از آن است که اینجا هستید؟ در عبارت منطقی است. این چیکار می کنه؟ آره. رسید به طوری که عملکرد GetInt کار می کند. DAVID J. مالان: به طوری که تابع GetInt کار می کند. از آنجا که در داخل این فایل، CS50.H که ما قبل از اینکه طولانی در دید شرایط استفاده از کد منبع آن، دارای یک دسته از توابع declared-- GetInt، از GetString، و یک دسته از others-- و مگر ما در واقع باید که شامل خط، صدای جرنگ جرنگ کامپایلر است رفتن به می دانم که آن وجود دارد. و همان که برای خط دو نوع int تعریف شده است که در آن تابع () printf است، که یک تابع ما را با استفاده از بسیار کمی است. در حال حاضر، خط چهار به نظر می رسد بد بو کمی چرا که آن را فقط یک بوش است. آن را به یک نقطه و ویرگول، هیچ اشکال مختلف پرانتز، هیچ کد داخل آن است. اما آنچه که ما پاسخ این چیزی که در هفته گذشته؟ آره. بنابراین یک نمونه اولیه است. و چرا ما باید یک نمونه که به نظر می رسد به یک کار برکنار کمی معمولا چون ما معمولا تابع دوباره ببینید بعد از آن در فایل، درست است؟ پس چرا ما have-- شما فقط خارش سر خود را، اما من آن را می گیرم. آره. مخاطبان: [نامفهوم] تابعی که بعد از اصلی. DAVID J. مالان: دقیقا. به طوری که شما می داند کامپایلر در نهایت تعریف و یا پیاده سازی که تابع پس اصلی، احتمالا. بنابراین صدای جرنگ جرنگ و کامپایلر از نوع گنگ و آنها فقط می دانم چه چیزی شما را به آنها بگویید. و اگر شما می خواهید به استفاده از یک تابع به نام سیگما، آموزش به شما بهتر کامپایلر که آن را در پیش وجود دارد. در حال حاضر، خود اصلی، حتی هر چند آن را یک دسته از خطوط، بسیار آشنا امیدوارم حال حاضر است. آن را به یک در حالی که حلقه که هدف در زندگی در اینجا ظاهرا این است که دریافت عدد صحیح مثبت از کاربر. و فقط نگه داشتن آزار ندهد او و یا او را تا زمانی که آنها همکاری کنند. سپس در خط 16 من تماس جالب است. IntAnswer. که در دست چپ سمت من می دهد یک int که می تواند store-- نام Answer-- است که رفتن به ذخیره، ظاهرا، مقدار بازگشتی از سیگما است. بنابراین سیگما است فقط یک نام دلخواه اما معنی دار که من به یک تابع داده ام که هدف در زندگی است به یک argument-- ما آن را N در این case-- پاسخ و فقط به مجموع این تعداد به علاوه هر عدد مثبت که کوچکتر از آن. بنابراین اگر من در شماره 2 به تصویب سیگما، من می خواهم برای اضافه کردن 2 به علاوه 1 به علاوه 0-- نمی 0-- به طوری که به من می دهد 3. اگر من در 3 Sigma به تصویب، من می خواهم 3 به علاوه 2 به علاوه 1، که به من می دهد 6. و الی آخر. پس از آن فقط اضافه می کند تا همه تعداد کمتر یا مساوی به آن است. در حال حاضر، در اینجا من فقط رفتن برای چاپ کردن پاسخ. بنابراین به عنوان یک بررسی سلامت عقل سریع، اجازه دهید را سیگما 0-- سیگما بریده بریده نقطه 0-- و اجازه دهید من در نوع 2. و من در واقع دریافت 3. اجازه دهید من در نوع 3. من در واقع 6. و اگر هر کسی می تواند ریاضی به سرعت انجام دهید، اگر من 50 چه هستم من است؟ مخاطبان: [نامفهوم]. DAVID J. مالان: خب، نه. اما 1،275 است که بسیار نزدیک است. بنابراین این نتیجه انجام 50 است به علاوه 49 به علاوه 48 به علاوه 47 به علاوه 46 تمام راه را به 1. به طوری که همه سیگما می کند. اما بیایید ببینید که چگونه ایم ما در حال حاضر آن اجرا شده است. بنابراین در اینجا تابع خود است. و این به نظر نمی رسد به چیزی برای انجام با بازگشت است. در واقع، ما با استفاده از یک روش مدرسه قدیمی. من مقدار دهی اولیه یک متغیر به نام مجموع به صفر، پس از آن من foreloop را در اینجا، و من اعلام نوع int به نام من، تنظیم آن را برابر با 1-- هر چند که من می تواند آن را برابر با تنظیم صفر، اما از آنجایی که من انجام علاوه بر این، چه کسی اهمیت میدهد اگر آن را صفر یا یک. آن را به اثری ندارد. بنابراین من تکرار تا زمانی که من است کمتر یا متر، برابر است که این استدلال که در تصویب شده است. و بعد من فقط حفظ افزایش I. و بینش از حلقه همه من انجام در حال انجام است مبلغ به علاوه I. برابر و این عمدی. من نمی خواهم به انجام، در این مورد، مانند جمع به علاوه به علاوه. من می خواهم به واقع اضافه ارزش فعلی من نگه می دارد که بزرگ و بزرگتر و بزرگتر به شمارش در حال اجرا. و پس از آن من خلاصه بازگشت. و به همین ترتیب جواب می شود مجموع ارزش. و سپس من آن را چاپ کنید. بنابراین در اینجا یک فرصت وجود دارد، هر چند، به نوع ساده این کد مفهومی و نوع ضربه یکی ذهن را در شرایط از سادگی حتی اگر آن طول می کشد در حالی که مرتب سازی بر اساس قدردانی چرا این قدرتمند در این مثالها کوچک است. در اینجا سیگما one-- به طوری که است نسخه دوم از این کد. همه چیز تا بالا یکسان است بنابراین این داستان همین امر مانند قبل. اما در حال حاضر اجازه دهید در نگاه اجرای سیگما که من تنها این پایین، محدودتر ام lines-- چهار خط کد، واقعا، به علاوه برخی از آکولاد و فضای سفید. اما آنچه من انجام؟ اگر متر کمتر از یا مساوی صفر، من نیاز به نوع رسیدگی مورد فوق العاده ساده است. و اگر شما به من دست صفر و یا هر چیز منفی است که فقط عجیب و غریب، من فقط رفتن به خودسرانه اما به طور مداوم صفر بازگشت. من این چیزی که می خواهید به وارد شدن به برخی بی نهایت عجیب و غریب حلقه به دلیل یک مقدار منفی. بنابراین من فقط گفت، اگر شما به من صفر یا کمتر، من صفر بازگشت. اما این خوب است چون که که صفحه از دفترچه تلفن که سمت چپ. من گاز گرفتن به یک مشکل خاص و چیزی نمی نامد به صورت بازگشتی. اما در خط 31، چه به نظر می رسد من به انجام می شود؟ پرانتز فقط نگه داشتن همه چیز، امیدوارم، کمی روشن تر است. اما همه من انجام من بازگشت m-- هر شما me-- به علاوه دست ارزش با عرض پوزش m--، به علاوه ارزش سیگما از متر منهای 1. پس چه معنی است؟ اگر شما به من شماره 3 را به عنوان ورودی، پاسخ من می خواهم به نهایت 6 دلیل است که 3 به علاوه 2 به علاوه 1 به من 6 می دهد. اما چگونه می توانم در مورد فکر می کنم من چگونه این کد در حال اجرا است؟ اولین بار من سیگما پاسخ و من در ارزش 3 عبور می کند، این مثل آن است بر روی یک تکه کاغذ، در اینجا ارزش 3 است و من این را به عنوان سیگما تصویب شده است. 3 واضح است که کمتر از 0 تا شرایط IF صدق نمی کند. دیگری می کند. پس چه باید بکنم؟ من می خواهم به بازگشت متر است، که 3، به علاوه سیگما از متر منهای 1. بنابراین اجازه دهید من آهنگ از این نگه می دارد. من قصد دارم برای قرار دادن این تکه کاغذ است. و ارزش، به روشن، من قصد دارم به تصویب به سیگما در این نقطه در داستان؟ چه شماره ای؟ 2، درست است؟ 3 منهای 1 2 است. بنابراین من فقط نیاز به یک کمی تکه کاغذ است. بنابراین در حال حاضر سیگما است به نام دوباره گرفتن. و من به عمد قرار داده ام این به دلیل آن پایین نوع مانند توقف این نسخه از داستان چون در حال حاضر من متمرکز هستم در سیگنال متر منهای 1. بنابراین متر 3، متر بود منهای 1 است 2. بنابراین در اینجا 2 که من گذشت شده است. 2 بدیهی است که کمتر از 0 به طوری که مورد صدق نمی کند. دیگری من بازگشت متر است، که این چیزی، به علاوه سیگما از چه مقدار؟ بنابراین اگر سیگما از 1--، زیرا M در حال حاضر 2 تا 2 منهای 1 1 است. بنابراین در حال حاضر من فقط ارزش 1. من عبور فقط تعداد 1 تا sigma-- تابع یا خودم here-- تا 1 واضح است که کمتر از صفر، هنوز هم صدق نمی کند. بازگشت دیگری به علاوه 1 سیگما از چه؟ 0. بنابراین اجازه دهید یاد داشته باشید که. من بعدا به دریافت کنید. حالا من قصد دارم به جلو بروید و نقطه پایین تعداد 0 به دلیل این که استدلال یا پارامتر است. من گذشت تعداد 0 و در نهایت این فرآیند فقط تکرار خودم تبلیغ nauseum پاسخ بس به دلیل آنچه که من بلافاصله انجام یک بار من این 0. من صفر بازگشت. بنابراین در حال حاضر شما باید به عقب داستان. اگر در حال حاضر در زمان به عقب بروید، چه چیزی اخیر بود من اگر شما به معنای واقعی کلمه بود روندنج یک ویدیو؟ من قصد دارم به انتخاب کنید تا جدید ترین 1 و به من می دهد به علاوه 1 0 1 است. اگر من روندنج داستان، که رفتن را به من بدهد 2 PLUS این مقدار در حال اجرا است که 1. به طوری که 3. و سپس من رفتن به نگه داشتن سیم. هنگامی که من برای اولین بار قرار داده تعداد 3-- تا 3 + 3 به من می دهد 6. و در حال حاضر، اگر شما از rewound ام این ویدئو تا این نقطه، این بسیار بود اولین سوال من پرسید. هنگامی که گذشت 3، چه سیگما از 3 است؟ آن را در واقع 6، از مجموع همه این تکه های کاغذ. بنابراین اگر که طول می کشد در حالی که کمی به بسته بندی و ذهن شما را در اطراف، که خوب است. اما در نظر گرفتن آن little-- آن بسیار سنجیده بود که من انباشته این اعداد در بالای هر یک دیگر. این نوع مانند داشتن یک حافظه یک رکورد در زمان، مثل یک اسکرابر در یک ویدیو، که من در واقع می توانید عقب در. و ما قصد داریم تا دوباره به که استعاره در فقط یک کمی. اما در ابتدا، آن را تبدیل وجود دارد که بسیاری از حرفهایها و مردم خنده دار، من حدس می زنم، در گوگل. باید کسی که بسیار خوب در ذهن در Google تا در آینده برای فقط یک لحظه و کمک به من برای چیزی را جستجو کنم؟ بسیار، کلید بسیار کم است. کسی که هرگز تا قبل از، شاید. باشه. آره؟ بجنب. بیا پایین. نام شما چیست؟ SAM: سام. DAVID J. مالان: سام، در آمد. این همان است. از آشنایی با شما خرسندم. هی بیا اینجا. بنابراین همه من نیاز شما را به انجام، اگر شما می توانید، سام، در اینجا گوگل است. می تواند شما را برای بازگشت اصطلاح را جستجو کنم؟ هنوز فاسد نشده است. و در حال حاضر let's-- آره. روی OK کلیک کنید که. بهتر است که با کلیک بر روی. آه، آن را دریافت. هیچ؟ باشه. بنابراین اجازه انجام یک زن و شوهر است. نه آنقدر مرتبط علمی در اینجا، اما شما باید تا به حال گوگل برای مقلوب جستجو؟ SAM: شماره DAVID J. مالان: OK. جستجو برای مقلوب به جای بازگشت. چگونه در مورد کج. شما تا به حال برای گوشهء چشم جستجو؟ در حال حاضر، این یکی را کمی سخت به دیدن اما امیدوارم everything's-- OK. این فقط من و شما این بهره گیری از. باشه. بنابراین در نهایت، این one's-- آن گوشهء چشم کوچک است. در حال حاضر انجام رول بشکه. فوق العاده است. خیلی خوب. تشکر به سام. در اینجا شما بروید. با تشکر. بنابراین آنچه که در در تمام از این نمونه ها احمقانه است؟ پس در واقع، در زیر هود از میلیون گوگل از خط کد ظاهرا چند احمقانه اگر شرایطی که در اصل چک کردن در صورتی که کاربر تایپ در این عبارت، انجام چیزی است که احتمالا در زمان مقدار قابل توجهی از زمان برای پیاده سازی فقط به سرگرم کننده در این راه باشد. اما این همه آن را جوش به زیر هود. اما، البته، بازگشت بیشتر از geekier است به عنوان مثال در میان کسانی که از ترفندهای خاص. و مطمئنا دیگران وجود دارد خارج وجود دارد و همچنین که ما شاید حتی نمی کشف درست نشده است. بنابراین یک نگاه، و یا در نظر در حال حاضر برنامه زیر، و قطعا هر شتاب از این در راه خود را. من قصد دارم به جلو بروید و باز کردن یک برنامه ای است که رفتن سعی کنید به مبادله دو ارزش ها. اما قبل از ما وجود دارد، اجازه دهید این کار. آیا ما می توانیم یک گرفتن داوطلب، من فکر می کنم؟ دوست دارید داوطلب؟ هیچ؟ بیا بالا. بیا بالا. خیلی خوب. بنابراین نام شما چیست؟ لورن: لورن. DAVID J. مالان: لورن. بیا بالا، لورن. بنابراین لورن است که به چالش کشیده اینجا شرح زیر است. از آشنایی با شما خرسندم. بنابراین لورن در اینجا در مقابل است از او دو فنجان خالی می باشد. و ما برخی از نارنجی آب و شیر و ما در حال رفتن به جلو و زیر را انجام دهید. ما فقط رفتن برای پر کردن این. چند اونس شیر بیش از اینجا و اجازه دهید در اینجا پر کردن یک آب پرتقال است. و در مقابل همه این مخاطبان، مبادله دو مقدار از این فنجان. قرار دادن آب پرتقال در جام شیر و شیر در فنجان آب پرتقال. چگونه شما این کار اگر شما در شد خانه و دسترسی به دیگر تجهیزات به حال؟ لورن: آن را در یک فنجان دیگر. DAVID J. مالان: OK. بنابراین اجازه دهید به طور موقت متغیر، اگر ما خواهد شد. و به جلو در حال حاضر و پیاده سازی این روش مبادله است. خیلی خوب. ما OJ به موقت قرار داده ام متغیر، شیر را به متغیر OJ، و در حال حاضر متغیر موقت در متغیر شیر. باشه. بنابراین به خوبی انجام می تا کنون است. پس از آن معلوم out-- نگه دارید که برای فقط یک لحظه فکر می کردم. در اینجا، فقط آن را گیک تا کمی، این می شود کد مربوط C که ما فقط اجرا شده است. ما دو ورودی A و B هر دو حال که ما فقط برای سادگی می گویند INT است. و متوجه اینجا، اگر من می خواهم به مبادله مقادیر دو متغیر، A و B، ما در واقع نیاز به یک واسطه، یک متغیر موقت، یک فنجان موقت، را که در آن بریزید یکی از مقادیر به طوری که ما یک حفره یا سوراخ برای آن است. اما پس از آن کد است که دقیقا به عنوان لورن در اینجا اجرا شده است. در حال حاضر، فقط برای گرفتن یک دیوانه کمی، معلوم است که شما می توانید این کار را بدون انجام یک متغیر موقت است. برای انجام این کار به درستی، هر چند، ما قصد داریم به به تقلب با برخی از مواد شیمیایی. ما باید برخی از فنجان اضافی در اینجا. بنابراین نزدیک ترین چیزی که به نظر می رسد مانند شیر و آب perhaps-- و یا شیر و OJ-- است ما باید برخی از آب، بنابراین ما این را پر کنید با چند اونس آب روشن است. که احتمالا بیش از حد. آره. که قطعا بیش از حد. در یک ثانیه نگه دارید. و در حال حاضر ما نفت، که، به من یاد از وسط کلاس شیمی مدرسه، امیدوارم آن را با آب ترکیب نمی شود. اما این نوع از نوع به نظر می رسد مانند شیر و OJ. بنابراین در حال حاضر، بدون استفاده از یک متغیر موقت، می توانید آن دو مقدار شما مبادله؟ بنابراین روغن می رود به جام آب، آب می رود به جام نفت. لورن: بدون فنجان دیگر؟ DAVID J. مالان: بدون فنجان دیگر. و من در واقع نه قبل از این در سال جاری آزمایش بنابراین من اگر این را نمی دانند در واقع کار شیمیایی. قرار نبود اتفاق می افتد. آیا این کار می کند؟ خیلی خوب. بنابراین جدا؟ خوب است. در حال حاضر ما برای دریافت آب به داخل فنجان دیگر. متمرکز شیمی دقیق می تواند احتمالا این بهتر از من انجام دهد. لورن: آب در پایین است. DAVID J. مالان: در آب-- که چه زمان ما این است کلید. شما باید برای این کار را در جهت درست است. آره. OK That's--. بنابراین در حال حاضر ما دو فنجان روغن. باشه. این خوب است. اما اگر این مواد شیمیایی از I-- کار لورن: این آب است. DAVID J. مالان: که عمدتا آب است. خیلی خوب. اما هنوز جام مانند قبل است. بنابراین پور it-- آن را امتحان کنید بیش از وجود دارد. باشه. این یک استفاده خوب از زمان کلاس امروز است. باشه. بنابراین در حال حاضر خوب we--. مرتب کردن بر اساس. خیلی خوب. خیلی خوب است. با تشکر از شما برای لورن. خیلی خوب انجام شده. بنابراین فقط برای منفجر ذهن خود را، و این است که شاید چیزی به بازی با اگر شما در CS50 ID را دوست دارم، شما می توانید، در واقع، مبادله دو متغیر بدون استفاده از یک عدد صحیح موقت. و این کد مربوط گراد است. و اگر شما از گذشته به خاطر بیاورید چهارشنبه، ما معرفی شده است، اگر به طور خلاصه، برخی از اپراتورهای جدید در C. و می کند هر کسی به یاد آنچه هویج کمی نماد است، که کوچک مثلثی نماد از صفحه کلید نشان دهنده؟ چه بیتی اپراتور؟ مخاطبان: EXOR. DAVID J. مالان: EXOR. منحصر به فرد یا. بنابراین اگر شما می خواهید، فقط برای تفریح ​​در صفحه اصلی، به a و b دو خودسرانه ارزش مانند هر eight-- و من به یک ارزش هشت بیت را انتخاب نمایید. اگر شما این کار را با 32 بیت، شما به سرعت خسته نمی شود. اما فقط به یک هشت بیتی ارزش است که هر آنچه را، یک یا دو، و ب یک مقدار مشابه. و سپس با استفاده از تعریف از XOR از چهارشنبه گذشته، اعمال می شود که ذره ذره، هر یک از آن هشت بیت در هر یک از A و B، و سپس آن را دقیقا در این کد. و آن را نادرست که چه شما در اینجا بر روی صفحه نمایش را ببینید. این در واقع جوش پایین به سه عملیات XOR و به نحوی جادویی A و ب مواضع تبادل بدون از دست دادن هر گونه اطلاعات. بنابراین روغن و آب فوت و فن است نزدیک ترین تجسم دنیای واقعی من می توانم از فکر می کنم که به تقلید. اما آن را قطعا آسان تر به استفاده از یک متغیر موقت، در این مورد در اینجا. و این نیز یک فرصت می گویند، بیش از حد، این نوع از بهینه سازی میکرو، به عنوان یک دانشمند کامپیوتر می گویند، در حالی که نوع سرگرم کننده به مورد چگونه شما این کار را بدون انجام لاف زدن مانند مبادله با یک متغیر اضافی، این همه که قانع کننده نیست. از آنجا که برای صرفه جویی در 32 بیت، به عنوان در مورد یک int واقعی، است که همه قانع کننده بر روی یک سیستم که در آن شما ممکن است با استفاده از دهها مگابایت و یا مانند حافظه و حتی بیشتر این روز است. و در واقع، هنگامی که ما به مجموعه ای مشکل بعد و شما طلسم اجرا جستجوگر و شما به چالش کشیده به انجام این کار با این RAM به عنوان کمی به عنوان کمی و زمان که ممکن است در computer-- شما هنوز هم یک هفته به پیاده سازی it-- شما have-- شما می شود به چالش کشیده برای به حداقل رساندن آن منابع است. و این واقعا تنها مناسبت این ترم که در آن شما را تشویق به اصلاح شود خاموش حتی بهترین عملکرد در غیر این صورت هزینه. بنابراین ما چگونه می توانیم what-- این در کد واقعی؟ اجازه بدهید به جلو در حال حاضر و باز کردن یک مثال که به عمد است که به نام هیچ مبادله دلیل آن را نمی کند در واقع مبادله متغیرهای که شما در واقع ممکن است انتظار. بنابراین اجازه دهید نگاهی به. در اینجا یک برنامه است که هیچ CS50 را کتابخانه در رفتن، فقط استاندارد I / O. در حال حاضر ما یک نمونه اولیه برای مبادله تا بالا که فقط معنی آن را به بعد به تعریف شود. و در اینجا اصلی. من خودسرانه اختصاص داده x و y، به ترتیب، یکی از ارزش ها و دو آنها فقط به دلیل کوچک و آسان به فکر کردن در مورد. و بعد من فقط یک دسته از printfs که در آن من یک بررسی سلامت عقل. * 1 است و y است 2 است که احتمالا چه کسانی printfs می گویند. بنابراین هیچ سحر و جادو تا کنون. سپس من قصد دارم به ادعا با چاپ دف، مبادله نقطه نقطه نقطه. من قصد دارم به پاسخ مبادله عملکرد، عبور در x و y. و اجازه دهید برای که فرض مبادله دقیقا اجرا آن را به عنوان یک لحظه پیش بود با یک متغیر موقت است. و به این ترتیب من ادعا شجاعانه، عوض میکنه. X در حال حاضر این و y است که. اما فایل، البته، نامیده می شود هیچ مبادله. بنابراین اجازه دهید در واقع چه اتفاقی می افتد. اگر من هیچ مبادله و سپس کامپایل انجام ./noswap، X 1، Y 2 است. مبادله عوض میکنه. X 1، Y 2 است. بنابراین آن را در واقع به نظر می رسد حتی ناقص هر چند swap-- اجازه دهید در پایین حرکت now-- دقیقا در اجرا کد من پیشنهاد یک لحظه پیش. بنابراین ما قصد داریم به دریافت فانتزی با مسائل XOR در حال حاضر. این نیز باید فقط کار می کنند مانند با شیر و OJ، اما به نظر نمی رسد به کار شود. بنابراین اجازه دهید این کار را دوباره انجام. شاید من فقط در حال اجرا بود آن را درست نیست. بنابراین اجازه دهید هیچ مبادله دوباره اجرا کنید. شاید I-- هیچ. پس از آن فقط کار نمی کند. بنابراین اجازه انجام بررسی سلامت عقل است. اجازه دهید من جلو بروید اینجا در تعویض و فقط اضافه کردن، یک دقیقه صبر کنید، یک درصد من است / n و اجازه دهید پلاگین در ارزش یک. از آنجا که من واقعا می خواهید تا ببینید که چه خبر است. و در واقع، این است یک تکنیک اشکال زدایی که شما ممکن است با استفاده از در ساعات اداری و یا در خانه در حال حاضر، شبیه به نیمه اول دن فیلم Armendariz به در PSET3 در جایی که ما معرفی چاپ دف عنوان یک تکنیک توصیه می شود، حداقل برای موارد ساده است. اجازه بدهید به جلو و اجرا را هیچ مبادله دوباره، ./noswap. جالب هست. بنابراین متوجه آنچه به نظر می رسد واقعی است. ایکس 1، Y 2 است، اما است که 2 ب 1 است. پس آن دو، به نحوی جابجا کردم اما x و y در حال گرفتن عوض میکنه نیست. بنابراین به روشن، چه اتفاقی می افتد است، تا اینجا من x و y دارای و کسانی که متغیرهای محلی در می دامنه اصلی، من در x و y عبور به مبادله. در حال حاضر، مبادله، به عنوان یک تابع جداگانه، پاسخ رایگان به استدلال آن است و یا هر چیز پارامترهای آن را می خواهد. foo یا نوار و یا X یا Y یا یک و یا ب. فقط به روشن است که آنها به x و y یکسان نیست در هر سه، من گفته ام A و B. اما ما می تواند آنها را هر چیزی که ما خواهید تماس بگیرید. و به این ترتیب به نظر می رسد مبادله است که گذشت x-- AKA a-- و آن را از گذشت y-- AKA ب. به نحوی این سه خط هستند مبادله آن ارزش دقیقا به عنوان لورن با شیر و OJ است. اما زمانی که ما نسخه قابل چاپ کردن ارزش ها، A و B در واقع مبادله اما x و Y هیچ تغییر به آنها. به یاد بیاورید که x و y تا اینجا. بنابراین ما می توانیم از طریق ببینید روش دیگری هم دارد. و این هم یک روش است جاسازی شده در مجموعه ای مشکل سه. اجازه دهید به جلو و انجام این کار در CS50 ID اگر شما در حال حاضر نیست. در سمت راست ما این برگه دیباگر. و اگر شما این را باز کردن، برخی از اطلاعات محرمانه وجود دارد که در آغاز شما را پرتاب می شود. اما اجازه دهید این کسی را دست انداختن از هم جدا واقعی سریع می باشد. بنابراین یک، شما متغیرهای محلی را ببینید. معلوم است که به CS50 IDE ساخت، و بسیاری از محیط های برنامه نویسی بیشتر به طور کلی، یک دیباگر است. ابزاری است که اجازه می دهد تا شما را به دید را ببینید آنچه که در داخل برنامه خود را بدون نیاز به توسل به اضافه کردن printfs و تدوین و اجرای و اضافه کردن تابع () printf و تدوین و در حال اجرا، که در حال حاضر، در ساعات اداری و یا خانه، احتمالا گرفتن بسیار خسته کننده. بنابراین در اینجا، در یک لحظه، ما رفتن به در زمان واقعی را ببینید مقادیر متغیرهای محلی ما است. ما همچنین در حال رفتن به قادر به تنظیم چه نقاط شکست به نام که فرصت ها در برنامه های من به مکث اعدام در یک خط خاص از کد که من کنجکاو در مورد هستم. درست؟ این برنامه ها در قسمتی از ثانیه اجرا کنید. این نوع خوب برای ما انسان ها آهسته تر قادر به مکث، یک لحظه، نگاه کنید به آنچه در اطراف در جریان است یک خط مشخصی از کد بدون شخم برنامه از طریق آن و در پایان به طور کامل. بنابراین یک نقاط شکست به ما اجازه می دهد به شکستن و مکث در یک نقطه خاص. پشته پاسخ راه فانتزی است گفت: آنچه که در حال حاضر توابع که در حال حاضر گفته می شود. اصلی است که همیشه اول نامیده می شود. اما اگر صفحه اصلی را یک تابع به نام تعویض، ما در واقع رفتن به این برج از توابع است که شده است به نام به ترتیب زمانی معکوس. بنابراین اجازه دهید را ببینید. من قصد دارم به زوم کردن. من قصد دارم برای رفتن به کد من. و فقط به خاطر من می خواهم به موشکاف در اینجا، من قصد دارم به جلو بروید و کلیک کنید فقط به سمت چپ از خط پنج. و این یک نقطه قرمز رنگ ایجاد می کند. و متوجه بر روی سمت راست که می داند دیباگر، هی، من فقط گفت یک نقطه انفصال در خط noswap.c پنج، به طور خاص در این خط از کد. بنابراین دیباگر می داند که من درخواست کرده اند که در کنار هم من مکث برنامه آن را اجرا کنید اعدام وجود دارد و نه فقط در حال اجرا همه چیز فوق العاده سریع. بنابراین در حال حاضر من قصد دارم به کلیک بر روی اشکال زدایی دکمه در بالای خیلی از IDE و را به انجام موارد زیر است. آن را به باز کردن یک در ابتدا تا حدودی ترسناک به دنبال ترمینال دوم window-- اشکال زدایی از راه دور از میزبانی چنین و such-- و ما به هر چه تمام این بدان معناست که قبل از اینکه طولانی. اما آنچه که مهم است برای این است که نقطه قرمز رنگ زده شد، دیباگر است به عمد متوقف execution-- نمی بر روی آن خط در هر سه اما در اولین خط از کد واقعی در آن تابع. و به همین دلیل خط هفت است در حال حاضر در زرد رنگ مشخص شده. و اکنون اجازه دهید یک نگاهی از در سمت راست. به نظر می رسد، به طور پیش فرض، به سادگی به اندازه کافی، x دارای چه مقدار؟ 0. و Y است چه مقدار؟ صفر است. و این که می در مفهوم انتظار می رود که x و y-- که line-- زرد است هنوز اجرا نشده. بنابراین X باید مقدار 1 ندارد. این ممکن است هر مقدار دیگر، یک به اصطلاح مقدار زباله. و ما خوش شانس که آن را به در این نقطه صفر، در اصل. بنابراین در حال حاضر تنها چند وجود دارد دکمه های ما نیاز به مراقبت درباره هنگام اشکال زدایی در این راه. توجه داشته باشید در اینجا، ما یک دکمه بازی. و اگر ما بازی و یا ضربه از سر، که فقط رفتن را از طریق اجرا بقیه برنامه و یا تا زمانی که بازدید انفصال است. اما من در راه هر دیگر نیست نقاط شکست پس از آن فقط رفتن را از طریق پایان اجرا کنید. این نوع از شکست هدف از مجبور باشید. بنابراین به جای آن، من در مورد مراقبت این آیکون به سمت راست. و اگر من شناور بیش از آنها، که شما باید بیش از حد، شما کمی راهنمایی ابزار tips-- را ببینید. این یکی مرحله بیش از. در حال حاضر که جست و خیز نیست خط کد زیر را. فقط بدان معناست که آن را اجرا و حرکت به بعدی، حرکت به بعدی، حرکت به بعدی. به عبارت دیگر، از طریق آن دکمه، می توانید من راه رفتن از طریق من کد یک گام در یک زمان. خط به خط، به معنای واقعی کلمه. در حال حاضر، در سمت راست که یکی دیگر وجود دارد که ما در یک لحظه را ببینید. این به اصطلاح گام به آیکون که به من اجازه می دهد شیرجه به یک تابع دیگر. اما اجازه دهید این را در فقط یک لحظه. بنابراین من قصد دارم به کلیک مرحله بیش از. و در حال حاضر متوجه، به عنوان من کلیک کنید این دکمه در سمت راست بالا، حفظ چشم خود را تقریبا تحت محلی متغیرها و ببینید چه اتفاقی می افتد به x. X در حال حاضر 1 به این دلیل که خط زرد در حال حاضر اجرا و ما در به خط 8 نقل مکان کرد. و فقط در لحظه Y باید امیدوارم تبدیل 2. در حال حاضر، چیزی که جالب اتفاق می افتد برای یک بیت. همه این است که printf است. و متوجه، در ترمینال ثانویه من پنجره، من خروجی دف چاپ مراجعه کنید. و اکنون من را به یک تصمیم گیری به عنوان برنامه نویس. من می توانم بیش از این خط از گام کد، اجرای آن اما نه گرفتن کنجکاو در مورد آنچه در داخل. و یا من در واقع می توانید به آن گام و به داخل تعویض است. بنابراین اجازه دهید که دومی را انجام دهد. اجازه بدهید به جلو و کلیک مرحله بیش از نه اما گام به. توجه داشته باشید، همه ناگهانی تغییرات پنجره به برجسته برای اولین بار خط کد در تعویض. این خط 21 است. و در حال حاضر، چه نوع از بد بو است که، اگر شما نگاه کنید در اینجا، به عنوان انتظار می رود، یک کاما B 1 و 2 به ترتیب است. چرا دمای 32767 است؟ یادآوری این نکته که دما، بسیار شبیه به فنجان خالی یک لحظه پیش، است در اینجا در خط 21 را اعلام کرد. چرا 32،000- منظور من، به همین دلیل است آن را فقط به برخی از ارزش های عجیب و غریب؟ آره؟ رسید آن را مقداردهی اولیه نشده. DAVID J. مالان: این مقداردهی اولیه نشده است. بنابراین ما همیشه کامپیوتر دارای حافظه فیزیکی است. همیشه RAM فیزیکی است. و همیشه وجود دارد صفر و یکی در آن وجود دارد، درست است؟ از آنجا که ما با استفاده از ما کامپیوتر در تمام طول روز، شما با استفاده از CS50 IDE یا سرورها در تمام طول روز. به طوری که RAM هم تا به برخی از صفر و یا برخی از برخی صفر و آنهایی که یا. مهم نیست که آیا یا نه شما آنها را با استفاده. شما نمی توانید فقط خالی فضای که در آن شما می خواهید بیت است. آنها یا صفر و آنهایی که هستیم. پس از آن می رسد که دما، به دلیل ما آن را مقدار دهی اولیه به نشده است، ما باید کسانی که 32 بیت اما آنها نمی شده است به هر مقدار دهی اولیه شناخته شده. بنابراین هر آنچه که آنها بیشتر اخیرا for-- آن 32 bits-- استفاده ما فقط دیدن آثار مکشوفه از برخی استفاده قبلی از آن خاص 32 بیت است. به محض این که من کلیک کنید قدم در طول هر چند، آه، از دما است رفتن به دریافت مقدار 1. و اگر من آن را دوباره، یک است رفتن مقدار 2 را به داده می شود و پس از آن ب است که به ارزش 1 داده می شود. و به این ترتیب چه خوب در حال حاضر در این نقطه در داستان این است که دیباگر است نشان دادن من، فوق العاده آرامی با سرعت خود من، چه وضعیت تعویض است. اما توجه کنید در بالای اینجا، توجه که پشته در واقع پاسخ دو لایه به آن است. در حال حاضر یکی که به عنوان برجسته تعویض، اگر من در اصلی به جای کلیک کنید، توجه کنید که چگونه تغییر متغیرهای محلی به دلیل توسعه میتوانید هاپ در اطراف و به هر دامنه های مختلف بروید. بنابراین حتی اگر ما در حال انجام همه این کار و به درستی مبادله A و B، اگر من به عقب و جلو بین تعویض که در آن یک 2 و b 1 و اصلی است، تا اصلی بوده است و در همه تحت تاثیر قرار؟ شماره پس چه غذای آماده در اینجا؟ خب، معلوم است که هر زمان شما یک تابع پاسخ مانند مبادله، و شما آرگومان آن، آنچه شما در حال عبور به تابع swap در این مورد یک کپی است آن بحثها. بنابراین اگر x و y هر ترتیب 32 بیت، آنچه تعویض است است محلی دو جدید متغیرها، و یا استدلال، نام و b-- ولی برای کسانی که خودسرانه names-- اما الگوی صفر و آنهایی که در داخل یک و b اندود شده تا می شود یکسان به x و y اما آنها نمی همان x و y. آن را به عنوان هر چند اصلی دارای در قطعه خود را از مقاله شماره 1 و 2 برای x و y، و پس از آن هنگامی که آن را دست که تکه کاغذ به مبادله، تعویض به سرعت می شود قلم خود، می نویسد پایین 1 و 2 در برگه خود را از مقاله، دست عقب XY اصلی صفحه اصلی و سپس به خود چیزی که با A و B. و این است که اکنون به دلیل فوق العاده مهم این امر پیامدهای کوچک اما با اهمیت برای نوشتن کد صحیح در واقع به دلیل آن که به نظر می رسد ما نمی توانیم مبادله دو متغیر. من یک تابع swap درست نوشته شده است. ما آن را با لورن به عنوان اجرا کرده ام یک تابع مبادله درست در واقع، اما ظاهرا هیچ یک از این مسائل اگر شما می توانید در واقع نه مبادله دو مقدار به طور دائم. بنابراین ما نیاز به راه دیگری به واقع در این، و ما باید قادر به در واقع این مشکل را حل کند. و آن را تبدیل out-- و ما آمده به این تصویر خاص قبل از long-- این یکی از راه این است که شما ممکن است حافظه کامپیوتر شما را جلب کند. این فقط یک مستطیل است. شما می توانید آن هر قرعه کشی تعدادی از راه اما آن را راحت به آن جلب عنوان مستطیل به این دلیل. ما قصد داریم امروز برای شروع و فراتر از آن صحبت کردن در مورد پشته به اصطلاح. و پشته فقط یک تکه است از RAM-- یک تکه از حافظه که توابع دسترسی داشته باشند به زمانی که آنها نامیده می شود. و پس از آن می رسد که در پایین خیلی از این پشته است که در آن تمام متغیرهای محلی کننده ی اصلی و سازمان C و V ORG و تمام چیزهای که در حال رفتن به طور پیش فرض است. و اگر اصلی خواستار برخی از عملکرد های دیگر مانند تعویض، خب، تعویض است که به یکی دیگر از لایه ای از حافظه تا بالای آن است. و به این ترتیب فقط به شما یک گذرا سریع را عکس از این، اگر من بیش از here-- و اجازه دهید من این آینه بر روی سربار به عنوان well-- آنچه که واقعا من، اگر ما فقط در مورد مراقبت پایین این تصویر در حال حاضر، این است که وقتی یک برنامه اجرا شود و اصلی می شود نامیده می شود، اصلی داده شده است یک تکه از RAM در کامپیوتر من این است که در پایین این به اصطلاح پشته. و من قصد دارم به آن جلب عمدا به عنوان یک مربع است. بنابراین آن را مانند 32 بیت یا چهار بایت است. و اگر این تابع اصلی است متغیر به نام x را با مقدار 1 و آن را تا یک متغیر به نام y با ارزش 2، که مانند گرفتن این بریدن از حافظه است که اصلی است که توسط عامل داده سیستم و تقسیم آن به طوری که اولین متغیر محلی در اینجا می رود، دوم در اینجا می رود، و این آن است. هنگامی که خواستار اصلی تعویض، تعویض می شود بریدن خود از حافظه که ما مثل این رسم از سیستم عامل، و آن را برای رفتن به آن متغیرهای خود محلی بر اساس در اجرای ما زودتر با متغیرهای محلی و B است که در ابتدا به دست آوردن ارزش 1 و 2. اما پس از آن، به محض کد تعویض اجرا، و لورن در واقع معاوضه OJ و شیر، چه اتفاقی می افتد؟ خوب، این 2 تبدیل شدن به یک 1، این 1 تبدیل شدن به یک 2، و، راه، یک متغیر موقت که در حال وجود دارد استفاده می شود که هم که در نهایت از بین می رود. اما مهم نیست چقدر کار شما انجام در این خط of-- در این فضای حافظه، x و y به طور کامل دست نخورده هستند. بنابراین ما نیاز به راه دادن تعویض و توابع مانند آن دسترسی مخفی، اگر شما خواهد شد، توابع like-- به حافظه مانند x و y. بنابراین اجازه دهید نگاهی به به عنوان مثال که کمک می کند تا ما را ببینید که دقیقا چه خبر است که این بار کل. من قصد دارم به جلو بروید و باز کردن صفر مقایسه. و من قصد دارم برای بستن دیباگر ما، من قصد دارم برای بستن این پیام به دنبال ترسناک فقط می گوید، یک دقیقه صبر کنید، شما در اشکال زدایی میانه است. من قصد دارم برای مخفی کردن این برگه در اینجا فقط برای رفتن به سادگی. پس نگران نباشید اگر GDB است کشته شده اند. این تنها بدان معنی است که این برنامه دارای ترک شده است، به عمد در این مورد، توسط من. و در حال حاضر مقایسه صفر این. من با استفاده از CS50 کتابخانه در استاندارد I / O. من یک تابع اصلی رو که برای اولین بار از می گوید، چیزی می گویند، و می شود یک رشته است. سپس آن را می گوید و دوباره می شود رشته دیگر. و توجه کنید که این دو رشته به نام s و t بود. و در حال حاضر این برنامه، مقایسه صفر، هدف خود را در زندگی، را که قرار است به من بگویید، من همان چیزی را تایپ کنید؟ و بنابراین من قصد برگشت به هفته است. من با استفاده از عملگر معادل من که اپراتور کیفیت است. نمی عملگر انتساب، عملگر است. من فقط مقایسه s و t. بنابراین اجازه دهید در واقع به جلو بروید و این کار را. و من قصد دارم به جلو بروید و مقایسه صفر. من قصد دارم به انجام ./comparezero. و من قصد دارم به پیش رو و می گویند چیزی مانند، اجازه دهید انجام مادر در کوچک و چگونه در مورد مادر در بزرگ. و البته من چیزهای مختلف را تایپ کنید. خیلی خوب. که انتظار می رود. بیایید دوباره آن را اجرا کنید. در هر دو بار انجام حروف کوچک، حروف کوچک. به نظر می رسد که فوق العاده به من یکسان است. داخل شدن. باشه. شاید به این دلیل عجیب و غریب فقط آن دستور زبان من دوست نمی شود. بنابراین اجازه دهید یک MOM سرمایه، سرمایه MOM، یکسان است. چیزهای مختلف. بنابراین است که چرا؟ خب، چه در واقع رفتن در زیر هود در اینجا؟ بنابراین اجازه دهید تماس بیش از در اینجا برای فقط یک لحظه و در نظر گرفتن آنچه از GetString است که در واقع انجام می دهند. وقتی که شما از GetString پاسخ، که ما تابع خودمان را نوشت و آن را به نحوی می شود دنباله ای از کاراکتر از کاربر. و اجازه دهید فرض کنیم که اولین هم از GetString پاسخ، که به من می دهد یک تکه از حافظه که شبیه به این. و اگر من در تمام حروف کوچک تایپ M-O-m-- و چه بعد از آن می رود؟ فقط یک بررسی سلامت عقل سریع است. صفر بک اسلش. ما آن را میدانیم. به یاد بیاورید که ما بازی در اطراف با نام Zamila است و یک دسته از نام های دیگر وقتی راب اینجا دنبال شد در چه خبر است در داخل از حافظه است. به طوری که داستان دقیقا همان است. این چیزی است که از GetString به من باز می گردد. در حال حاضر، کد من یک لحظه پیش ذخیره شده مقدار بازگشتی از getstring در یک متغیر به نام های. و پس از آن بار دوم من آن را به نام، آن را در یک متغیر به نام T ذخیره می شود. بنابراین اگر من در اینجا، من نیاز به رسم این variable-- محلی و من به طور کلی رفتن به قرعه کشی یک رشته را به عنوان just-- خواهیم آن را به عنوان s-- یک مربع کوچک در اینجا. و در حال حاضر، somehow-- چگونه مادر در داخل این متغیر رفت؟ خب، ما نیاز به بازگشت اصول اولین بار در اینجا. آنچه که از GetString در واقع بازگشت؟ پس از آن معلوم است که M-O-M بک اسلش صفر، و هر تعداد از رشته های دیگر در حافظه مانند Zamila و راب و یا اندی یا هر نوع دیگر، البته در ما رم کامپیوتر یا حافظه است. و RAM خود را تا like-- شما یک گیگابایت رم، دو گیگابایت رم، و یا یک میلیارد یا دو میلیارد بایت یا شاید حتی بیشتر این روز است. بنابراین اجازه دهید فرض، برای مقاصد امروز، که مهم نیست که چگونه تعداد ما آنها، اما ما می توانیم هر تعداد از آن دو میلیارد میلیارد یا یا چهار میلیارد بایت. و اجازه دهید فقط می گویند که خودسرانه این گزش اول، نیش دوم است، سوم، چهارم. من به عمد با استفاده از صفر برای امروز اما ما به آن می آمده است. به عبارت دیگر، اگر این است که اولین بار من با استفاده از این برنامه، من فقط گرفتن خوش شانس و اولین نیش است در یک محل و سپس دو پس از آن سه از چهار. و اگر من نگه داشته نقاشی، تعداد جعبه دو میلیارد می شود راه را در اینجا. بنابراین چه چیزی شما فکر می کنم، پس از آن، از GetString در واقع می گرداند؟ این بازگشت M-O-M بک اسلش نیست صفر در هر سه دلیل که به وضوح نمی خواهد جا را در کادر که من کشیده ام. پس چه چیز دیگری ممکن است در واقع از GetString شد بازگشت همه این هفته؟ پاسخ در است هیئت مدیره در اینجا جایی. شما می توانید متناسب نیست M-O-M بک اسلش صفر، پس چه ممکن است احساس به جای آن؟ اگر شما تا به حال به فوق العاده باهوش، قرار دادن در به اصطلاح کلاه مهندسی، چه چیزی می تواند به شما بازگشت؟ کمترین میزان اطلاعات چیست شما هنوز هم می تواند بازگشت که می شما اجازه پیدا کردن M-O-M در حافظه؟ آره؟ مخاطبان: یک. DAVID J. مالان: یک. و به همین دلیل یکی؟ رسید آنجا که این امر به شما که در آن به [نامفهوم]. DAVID J. مالان: دقیقا. من فقط رفتن برای بازگشت به آدرس رشته که من کرده اند. آدرس در این مورد محل است. بنابراین آنچه که واقعا است که در s-- ذخیره شده و هر متغیر رشته در نتیجه far-- به تازگی شده آدرس که رشته است. در همین حال، اگر پاسخ من GetString یک بار دوم و من تایپ به معنای واقعی کلمه قضیه اینه همان M-O-M با lowercase-- M-O-M و یکی دیگر از بک اسلش صفر، و در حال حاضر شاید برنامه من در حال اجرا برای برخی از زمان تا شاید این 10، این مکان 11 است، این 12، این 13 است. کامپیوتر با استفاده از برخی دیگر حافظه به هر دلیلی. چه در حال حاضر در دوم من می رود متغیر در برنامه تی من؟ 10. دقیقا. و تا زمانی که ما در نگاه کد منبع از این برنامه که در آن من به سادگی در تلاش برای مقایسه دو مقدار، است معادل دو برابر به T، چه پاسخ واضح انسان است؟ فقط هیچ دلیل 1 برابر 10 است. و به این ترتیب در اینجا نهفته است فرصتی برای ما واقعا فقط به، دوباره، برای اولین بار اصول و فکر می کنم در مورد، خوب، آنچه که در زیر هود؟ ما شده ایم صحبت کردن در مورد بیت و بایت و حافظه، اما در واقع مفید برای درک زیرا هنگامی که شما از GetString پاسخ، حتی اگر ما از فکر می کنم آن است بازگشت M-O-M یا مادر رشته و یا اندی و یا Zamila یا مانند آن، از لحاظ فنی آن را فقط از بازگشت آدرس که تکه از حافظه است. اما این خوب است. از آنجا که چگونه من می دانم که در آن رشته به پایان می رسد؟ اگر من تنها با توجه به آغاز؟ خوب، بک اسلش صفر، درست است؟ فقط در زمان خطی من می توانم چاپ با دف ​​چاپ M-O-M. و به زودی به عنوان بک اسلش ببینید صفر، برای من مهم نیست که در آن شروع کردم، من در حال حاضر به طور ضمنی مطمئن شوید که در آن من باید برای پایان دادن. و به این ترتیب امروز نشانه beginning-- و اجازه دهید من این کار را انجام طور چشمگیری چون ما از طریق بسیاری از مشکلات رفت دریافت این آموزش در اینجا wheels-- بنابراین، امروز چرخ شروع به آموزش به می آیند و ما در آشکار least-- [تشویق حضار] که به خوبی ارزش سفر به هدف این، بله؟ بنابراین now-- وجود دارد، آن را تبدیل به ، هیچ چیزی به عنوان رشته. رشته وجود ندارد. آن را مترادف که ما تا به حال است داخل کتابخانه CS50. پس، ما در حال رفتن به شروع به تلفن s و t نیست اما رشته ستاره کاراکتر. و ستاره کاراکتر خواهیم کسی را دست انداختن از هم جدا قبل از اینکه طولانی. اما این است که می گویند، که حتی اگر ما همچنان با استفاده از از GetString در حال حاضر، از لحاظ فنی من باید می شود گفت ستاره کاراکتر و ستاره کاراکتر. و معلوم است که آنچه که ستاره است که به معنی چیزی است به نام یک اشاره گر و یا یک آدرس. و در واقع، یک تیزر برای آنچه در پیش روست این کلیپ 20 ثانیه ای از ما است دوست نیک Parlante در دانشگاه استنفورد که، کاملا چند وقت پیش، صرف یک مقدار مسخره از زمان، به عنوان بهترین من می تواند در به خود آشپزخانه و یا زیرزمین خانه او، ساخت تولید انیمیشن خمیری معرفی به جهان یک شخصیت به نام Binky که ما با آنها خواهد شد به اشاره گر معرفی زمان آینده. بنابراین در اینجا یک پیش نمایش از چه چیزی آمده است. [پخش ویدئو] -Hey، Binky. بیدار شو. این زمان برای اشاره گر سرگرم کننده است. -آن چیست؟ اطلاعات در مورد اشاره گر؟ اوه، مغز گردو و غیره. [END پخش] DAVID J. مالان: و در آن توجه داشته باشید، ما شما را در روز چهارشنبه را ببینید. خیلی خوب. که رقص؟ بجنب. که رقص؟ شما می خواهید من به آن آغاز شده است؟ من آن آغاز شده است. Woooo! لورن: فانتزی شیرین موسی.