[پخش موسیقی] مالان دیوید J: همه حق، خوش آمدید به CS50. این آغاز هفته دو است. یک کلمه از یکی از ما دوستان در محوطه دانشگاه - اگر شما علاقه مند هستند، احتمالا، یا در حال حاضر و یا در برخی از دوره های آینده حتی یک بار راحت تر، آموزش دانش آموزان مدارس متوسط ​​کمی چیزی در مورد علم کامپیوتر، سر انجام به آن URL. آنها نیاز خاص در حال حاضر می باشد معلمان، به خصوص اگر شما برخی از قرار گرفتن در معرض علوم کامپیوتر بود. به طوری که زمان گذشته به خاطر بیاورید، ما معرفی در بعضی انواع داده ها در C، و شما ممکن است شروع کرده اند برای به دست آوردن خود را دست کثیف با این تا کنون در مشکل یک مجموعه. و ما تا به حال یک کاراکتر. بنابراین در شرایط تا حدودی فنی، چه کاراکتر به شکلی که شما امروز آن را می دانم؟ پس از آن یک شخصیت است، اما اجازه دقیق تر می شود در حال حاضر. چه شخصیت منظور ما یا فردی کاراکتر؟ یک کاراکتر غیر عددی - بنابراین نه لزوما. به نظر می رسد که اعداد زوج، حتی نقطه گذاری و حروف عبارتند از نمایندگی با این داده ها نوع شناخته شده به عنوان یک کاراکتر. پس از آن لزوما به ترتیب حروف الفبا نیست. آره؟ پس از آن یک کاراکتر اسکی است. بنابراین اگر شما فکر می کنم به هفته صفر، زمانی که ما تا به حال بایت ما از داوطلبان آمد و هر دو دست خود را نگه دارید تا یا نه همه، آنها به نمایندگی از بیت. اما در مجموع به عنوان یک گروه هشت، آنها یک بایت است. و ما به معرفی مفهوم ASCII در این سخنرانی، که به سادگی است نگاشت بین اعداد و حروف است. و با استفاده از ASCII، به عنوان کسانی که انسان ضمنی، هشت بیت برای نشان دادن یک شخصیت. تا بر این اساس، اگر هشت بیت می تواند هر یک در یکی از دو مقدار را - صفر یا یک - این بدان معناست که دو امکان وجود دارد برای این شخص - صفر یا یک - دو نفر برای این شخص، دو برای این نفر، دو برای این یکی. بنابراین در مجموع دو بار دو بار دو بار دو بار دو - بنابراین دو هشتم در کل. بنابراین تعداد از شخصیت وجود دارد 256 امکان پذیر است که شما می توانید نمایندگی با هشت بیت. در حال حاضر، کسانی از شما که آسیایی صحبت می کنند زبان ممکن است بدانید که بیش وجود دارد شخصیت در جهان از تنها عنوان و کارشناسی و CS و DS. و در واقع، ASCII برای کافی نیست بسیاری از زبان های جهان است. اما در آن زمان دیگر است. در حال حاضر، می دانم که در C اگر شما می خواهید برای نشان دادن یک نامه، یک قطعه از نقطه گذاری، و یا فقط شخصیت چیزی در طبیعت، ما استفاده از یک کاراکتر است. و آن را یک بایت و یا هشت بیت است. چگونه در مورد یک int؟ خوب، از نوع int یک عدد صحیح است. چگونه بسیاری از بیت، اگر شما به خاطر، یک عدد صحیح به طور معمول بود؟ فراخوان هر کس؟ پس از آن به طور معمول 32. این در واقع بر روی کامپیوتر بستگی دارد که شما با استفاده از. اما در دستگاه، و در بسیاری از کامپیوتر، 32 بیت یا چهار بایت - هشت برابر چهار. و نوع داده int برای ذخیره سازی استفاده می شود اعداد، یا منفی، مثبت و یا صفر است. و اگر شما 32 بیت و شما تنها در مورد مراقبت از اعداد مثبت، می تواند BallPark را هر کسی که چگونه بسیاری ممکن اعداد صحیح یک کامپیوتر می توانید از نمایندگی صفر تا؟ بنابراین این امر می تواند دو تا 32، که حدود چهار میلیارد است. بنابراین این قدرت دو در حال رفتن به طرحهای تکراری را در علم کامپیوتر است. همانطور که خواهیم دید، آنها کاملا راحت است حتی اگر آن را کاملا به کار آسان برای انجام محاسبات ریاضی در سر. بنابراین ما تقریبا چهار میلیارد می گویند. در حال حاضر، طولانی مدت - شما می توانید نوع حدس می زنم. این بیش از یک int است. چگونه بسیاری از بیت؟ بنابراین 64 بیت یا هشت کلمه در ادامه متن. این حالت فقط بدان معناست که شما حتی می توانید نمایندگی اعداد بزرگتر، بزرگتر مثبت یا اعداد بزرگتر منفی. و چگونه در مورد شناور؟ این یک نقطه شناور ارزش 32 بیت. این فقط یک عدد حقیقی، چیزی با نقطه اعشار. اما اگر شما به جای نیاز به مکان های بیشتری پس از نقطه اعشار و یا شما می خواهید نشان دادن یک عدد بزرگتر با برخی کسری پس از آن، شما می توانید استفاده کنید دو برابر، که 64 بیت می باشد. اما جالب وجود دارد غذای آماده در اینجا. بنابراین اگر نوع داده int 32 بیت و محدود حتی پوزیشن های خرید طولانی مدت توسط 64 محدود بیت، آن نوع begs سوال، چه می شود اگر شما واقعا می خواهید به دفعات مشاهده شده است بالاتر از 4 میلیارد دلار برای یک int؟ خوب، شما فقط استفاده از طولانی مدت است. اما چه می شود اگر شما می خواهید به دفعات مشاهده شده بالاتر از دو تا 64، دادن یا گرفتن؟ در حال حاضر، که تعداد زیادی است. اما در نهایت، شما ممکن است در واقع مراقبت در مورد این نوع از ارزش ها، به خصوص اگر شما با استفاده از یک پایگاه داده و شروع به جمع آوری مقدار زیادی و تعداد زیادی و مقدار زیادی از داده ها و اختصاص منحصر به فرد اعداد به هر قطعه از آن داده است. بنابراین ما نوع مشکل. و به همین ترتیب، با ممیز شناور ارزش - شناور یا دو برابر - اگر شما تنها تعداد محدودی از بیت، چگونه بسیاری از اعداد کل می تواند شما را احتمالا نمایندگی؟ خوب، آن را کمتر روشن است که شما شامل نقطه اعشار. اما قطعا محدود است. اگر شما تعداد محدودی از بیت ها، یک تعداد متناهی از انسان، محدود تعداد لامپ، قطعا شما می توانید تنها نشان دهنده یک تعداد متناهی از شناور مقادیر نقطه. اما چگونه بسیاری از اعداد حقیقی خود در جهان است؟ نامحدود وجود دارد. به طوری که نوع یک مشکل است زیرا ما مقدار بی نهایتی ندارد حافظه یا RAM به داخل رایانه های ما. بنابراین برخی از چیزهایی که به چالش کشیدن می تواند رخ دهد. پس اجازه دهید به جلو و سعی کنید به بیان این اینجا. اجازه دهید من به جلو و باز کردن نرمافزاری gedit. من قصد دارم به جلو بروید و ذخیره فایل به نام "floats0.c" فقط به با یک مثال این است که سازگار آنلاین در دسترس است، اگر شما می خواهم. و من قصد دارم به جلو بروید و تعریف آن به شرح زیر است - من قصد دارم به جلو بروید و می گویند، اعضای هیات درجه اعتبار ساقط اصلی، همانطور که ما اغلب. و سپس در این برنامه، من رفتن به خودم را شناور اعلام، به طوری که 32 بیتی متغیر F نامیده می شود، خودسرانه. و سپس من قصد دارم برای ذخیره در آن من نمی دانم، یک دهم، پس از 0.1. بنابراین من قصد دارم به بیان است که به عنوان یکی تقسیم بر 10 است، که کاملا مشروع در C و سپس در خط دوم، من به سادگی می خواهم به نسخه قابل چاپ کردن که ارزش. پس به یاد آورید که ما می توانیم با استفاده از آشنا چون printf. ما نمی خواهیم برای استفاده از٪ من یک int. ما می خواهیم به استفاده از٪ f برای شناور. و سپس من قصد دارم برای انجام بک اسلش نفر، نزدیک نقل قول، کاما، F، نقطه و ویرگول بدین شکل است. بنابراین در اینجا برنامه من است. در حال حاضر یکی از اشکال وجود دارد. آیا کسی برای آنها این کلیک در حال حاضر می خواهم به نقطه حداقل یک اشکال من ساخته ام؟ آره؟ آره. من را فراموش کرده "#" در بالا، آنها نشانه ای است که اگر من به سعی تدوین این است که رفتن به این باشد که کامپایلر است که در من می داد، گفت: نماد تعریف نشده و یا چیزی به آن اثر. آن چیزی را درک نمی می خواهم چون printf. بنابراین من قصد دارم به انجام "# شامل "صرفه جویی در فایل. و در حال حاضر آن را در شکل بهتر است. اما من هم رفتن را به نقطه از جزئیات جدید امروز. علاوه بر محل تعیین دارندگان مانند F٪٪٪ ثانیه، شما می توانید گاهی اوقات رفتار را تحت تاثیر قرار از آن مکان نگه دار. به عنوان مثال، در مورد شناور ارزش نقطه، اگر من فقط می خواهم پس از به نمایش یک مکان دهدهی دوره، من در واقع می توانید انجام دهید 0.1f. بنابراین به عبارت دیگر، من F جدا و علامت درصد با 0.1، گفتن چون printf، شما ممکن است یک کل دسته ای از اعداد بعد از اعشار اشاره برای من. اما من فقط می خواهم برای دیدن یکی از آنها است. بنابراین من قصد دارم به جلو بروید در حال حاضر و صرفه جویی این برنامه، به ترمینال من پنجره، و من قصد دارم به جلو بروید و نوع 0 شناور، وارد کنید. من می بینم که خط تا حدودی مرموز است که آغاز خواهد شد برای درک بیشتر به عنوان ما کسی را دست انداختن آن را از هم جدا این هفته و بعدی. حالا من قصد دارم به جلو بروید و اجرای صفر شناور. و، لعنتی. بنابراین اشکال دیگری وجود دارد در اینجا برای برخی از این دلیل است. من کاملا مطمئنم که یک دهم هستم، یا تقسیم بر 10 است، نه 0.0. شاید من فقط به دنبال ندارد در ارقام کافی است. پس چرا من نمی گویند دو .2 برای دیدن دو رقم اعشار به جای فقط یک. اجازه دهید برگردم به پنجره ترمینال من در اینجا و ضربه تا چند بار به تاریخ من را ببینید. آیا شناور صفر دوباره، و سپس دوباره. و در حال حاضر وارد کنید. و در حال حاضر من کاملا مطمئن هستم که این اشتباه است. و من می توانم سه و چهار، و من احتمالا به حفظ دیدن صفرها. بنابراین که در آن اشکال است؟ تقسیم بر 10 باید 0.1. کسی می خواهید را به زخم زدن در چه مسئله اساسی این است که؟ آره؟ آنها هر دو عدد صحیح هستند. پس چه؟ بنابراین با یک تقسیم بر 10، که آنچه که من در ریاضی انجام دهد. و من 0.1. آره. و پس از آن است که در واقع این موضوع. هنگامی که یک عدد صحیح در کامپیوتر شما را و شما آن را تقسیم های عدد صحیح دیگر، کامپیوتر به طور پیش فرض در حال رفتن به فرض کنیم که شما می خواهید یک عدد صحیح است. مشکل هر چند، البته، که 0.1 است یک عدد صحیح نیست. این یک عدد حقیقی است. و بنابراین، آنچه که کامپیوتر می کند پیش فرض آن را فقط می اندازد دور همه چیز بعد از نقطه اعشار. این دور نمی کردن و یا فی نفسه. این فقط می اندازد دور همه چیز را پس از نقطه اعشار. و در حال حاضر که حس می کند. از آنجا که در حال حاضر ما به وضوح هستید با صفر باقی مانده است. اما یک دقیقه صبر کنید. من یک صفر اعضای هیات دیدن نیست. من در واقع دیدن 0.00. پس چگونه این آشتی کنم؟ اگر تقسیم بر 10 صفر است، اما من دیدن 0.00، جایی که آن را گرفتن بازگشت به یک عدد حقیقی تبدیل شده؟ آره. دقیقا. پس تا اینجا در خط پنج، زمانی که من در واقع ذخیره که 0.1 است، که پس از آن کوتاه به صفر، در داخل شناور، است که به طور موثر معادل ذخیره سازی آن را نه به عنوان یک int، اما در واقع، به عنوان شناور. علاوه بر این، من و سپس با استفاده از چون printf به به صراحت این تعداد چاپ به دو رقم اعشار حتی اگر وجود دارد ممکن است هر یک در واقع نمی شود. بنابراین این نوع از بمکد، درست است؟ ظاهرا شما می توانید ریاضی را انجام ندهید، حداقل در این سطح از دقت، در کامپیوتر است. اما مطمئنا یک راه حل وجود دارد. ساده ترین حل ما شاید می تواند چه خبر انجام دهید، حتی به طور مستقیم در اینجا به حل این؟ آره؟ روشن کردن اعداد به - آره. حتی اگر من کاملا مطمئن نیستم واقعا در اینجا، اگر آن را اساسا به کار با این دو بودن نوع داده int، خوب، چرا من نمی را که 10.0، ساخت این 1.0، resave فایل. به من اجازه رفتن به پایین به پایین و کامپایل. اجازه دهید من در حال حاضر تکرار شده است. و وجود دارد - در حال حاضر، من یک دهم من به عنوان نماینده 0.10. بسیار خوب. به طوری که بد نیست. و اجازه دهید به من اشاره می کنند یکی از راه های دیگر ما می تواند به حل این. اجازه دهید من در واقع به عقب در زمان زمانی که ما این کار را به عنوان یکی دهم یک لحظه قبل در دیتا بیس ثبت شده است. و اجازه دهید من جلو بروید و resave به این فایل به عنوان یک نام فایل های مختلف، فقط به یک پاسگاه کوچک. به طوری که نسخه یک بود. و در حال حاضر به من اجازه رفتن به جلو و آیا یک نسخه دیگر. ما این نسخه را خواهید تماس بگیرید دو صفر نمایه میشود. و من قصد دارم به جای انجام - شما می دانید چه؟ اضافه کردن نقطه صفر در این مورد کار می کند. اما فرض کنید یک متغیر بود. قرار است 10 متغیر بود. به عبارت دیگر، فرض کنید که من می توانم فقط سخت کد .0 در پایان از این بیان ریاضی. خوب، من در واقع قادر به انجام کاری در پرانتز به نام ریخته گری. من می توانم که عدد صحیح 10 به شناور بازیگران، و من می توانم که یک عدد صحیح به بازیگران شناور، نیز هست. سپس ریاضی است که به زودی انجام می شود به طور موثر 1.0 تقسیم بر 10.0، نتیجه که از آن می رود در F مانند قبل. بنابراین اگر من کامپایل مجدد این شناور را 2، و در حال حاضر شناور 2، من همان پاسخ، نیز هست. این یک مثال نسبتا ساختگی است، برای حل این مشکل معرفی ریخته گری. اما به طور کلی، ریخته گری خواهد بود یک چیز قدرتمند، به ویژه برای مشکل دو در زمان یک هفته تعیین می کنند، هنگامی که شما می خواهید برای تبدیل یک نوع داده دیگری است که در پایان روز در همان راه نشان داده شده است. در پایان روز، هر واحد چیزی که ما کرده ایم تا کنون صحبت است فقط نوع داده int در زیر هود. یا در صورتی که بیش از حد سطح پایین شما، آنها فقط اعداد در زیر هود. حتی شخصیت ها، دوباره، به یاد از هفته صفر، تعداد در زیر هود. که است که می گویند، ما می توانیم بین تبدیل انواع مختلف از اعداد اگر آنها بیت هستیم. ما می توانیم بین اعداد تبدیل و حروف اگر آنها فقط بیت، و بالعکس. و ریخته گری در این راه یک مکانیسم است در برنامه نویسی است که به شما اجازه می دهد تا به زور تغییر یک نوع داده خود را به دیگری. متاسفانه، این است که نه به عنوان ساده به عنوان دوست من ممکن است. من قصد دارم به رفتن دوباره به شناور 1، که ساده تر، بیشتر بود یکی از ساده با .0 اضافه شده به هر یک از. و فقط به عنوان یک یادآوری سریع، اجازه دهید من جلو بروید و کامپایل مجدد این، شناور 2 - با عرض پوزش، این است که شناور 1. و در حال حاضر اجازه دهید شناور 1 اجرا. و در پایین، توجه که من در واقع 0.1 دریافت کنید. بنابراین، مشکل حل شده است. اما در عین حال نیست. من در حال حاضر رفتن به کمی کنجکاو، و من قصد دارم به رفتن دوباره به من دستور printf و می گویند، شما می دانید چه؟ من می خواهم برای تأیید اینکه این واقعا یک دهم است. و من قصد دارم به خواهید برای دیدن این ، می گویند، پنج رقم اعشار. این یک مشکل نیست. من دو تا پنج، من با کامپایل مجدد. من تکرار شده است آن را به عنوان شناور 1. به دنبال خیلی خوب است. چک های سلامت عقل من ممکن است پایان دادن وجود دارد، اما من کمی بیشتر پرماجرا. من قصد دارم به تغییر 0.5 به 0.10. من می خواهم پس از دیدن 10 رقم محل اعشاری. و من قصد دارم به جلو بروید و کامپایل مجدد این و تکرار شده شناور 1. من نوع پشیمانی پس از آزمایش این بیشتر به این خاطر که ریاضی من است نه چندان اصلاح دیگر، به نظر می رسد. اما یک دقیقه صبر کنید، شاید این فقط یک اتفاق است. شاید کامپیوتر اقدام کمی عجیب و غریب. اجازه دهید من به جلو و انجام 20 رقم اعشار و اطمینان خودم که من می دانم چگونه به انجام این کار ریاضی. من می دانم که چگونه برای برنامه ریزی. شناور 1، ترجمه و مجددا آن را لعنت است. است که واقعا، واقعا به دور از علامت. پس چه خبر است اینجا؟ به طور مستقیم، بر اساس فرضیات ما قبل از آن در مورد اندازه از انواع داده ها، آنچه که باید در اینجا اتفاق می افتد در زیر هود؟ آره؟ دقیقا. اگر می خواهید این دقت زیاد است، و که heck از بسیاری از دقت - 20 عدد بعد از نقطه اعشار. شما احتمالا نمی تواند نشان تعداد خودسرانه مگر اینکه شما تعداد دلخواه از بیت. اما ما نمی کنند. برای یک شناور، ما فقط 32 بیت. بنابراین اگر 32 بیت تنها می تواند در یک permuted راه - درست مثل انسان، مرحله دست بالا یا پایین - در یک تعداد متناهی از راه، تنها یک تعداد محدود وجود دارد از اعداد حقیقی شما می توانید نمایندگی با این بیت. و به طوری که کامپیوتر در نهایت رفتن به شروع به برش گوشه ها. کامپیوتر می تواند این جزئیات پنهان از ما کمی از زمان. اما اگر ما شروع به مجبور در اعداد و به دنبال دورتر و دورتر در دنباله اعداد در کل تعداد، پس از آن ما شروع به دیدن است که آن را در واقع نزدیک به ایده یک دهم. و پس از آن معلوم است، غم انگیز، تعداد نامتناهی از اعداد ما نمی توانیم در یک نمایندگی دقیقا کامپیوتر، حداقل با یک محدود تعداد بیت، محدود مقدار RAM است. حالا متاسفانه، گاهی اوقات این تا به عواقب دنیای واقعی. اگر مردم نمی کاملا این درک یا مرتب سازی بر اساس را برای مسلم است این واقعیت که کامپیوتر خود را انجام خواهد داد چه آنها آن را بگویید به انجام این کار و انجام نمی درک این اساسی جزئیات نمایندگی - که، رک و پوست کنده، در بعضی زبان پنهان از کاربر، بر خلاف C - برخی از چیزهای بد می تواند رخ دهد. و آنچه که من فکر می کردم که می خواهم انجام دهیم را یک قدم به عقب. و این است که در مورد فیلم هشت دقیقه. آن را پخش چند سال پیش، و آن را می دهد بینش به واقع چه می تواند به اشتباه زمانی که شما تحت قدردانی از این انواع اطلاعات در همه بیش از حد جهان واقعی است. اگر ما می تواند چراغ کم نور برای چند دقیقه. SPEAKER 1: ما در حال حاضر به بازگشت مهندسی حوادث در شگفتیهای مدرن. کامپیوتر - ما همه می آیند به پذیرفتن مشکلات اغلب نا امید کننده که با آنها برود. اشکالات، ویروس ها و اشکالات نرم افزاری قیمت های کوچک برای پرداخت راحتی. اما در فن آوری بالا و با سرعت بالا نظامی و برنامه های فضایی برنامه های کاربردی، کوچکترین مشکل را می توان به فاجعه بزرگ است. در 4 ژوئن 1996، دانشمندان آماده به راه اندازی بدون سرنشین موشک Ariane 5 موشک. این بود که حامل ماهواره های علمی طراحی شده برای ایجاد دقیقا چگونه میدان مغناطیسی زمین در تعامل با بادهای خورشیدی. موشک برای اروپا ساخته شد آژانس فضایی و بازی از آن برداشته تسهیلات در ساحل گویان فرانسه. JACK GANSSLE: در حدود 37 ثانیه را به پرواز، آنها برای اولین بار متوجه چیزی که قرار بود اشتباه است. نازل در swiveling راه آنها واقعا باید نیست. حدود 40 ثانیه به پرواز، به وضوح خودرو دچار مشکل بود. و این که زمانی که آنها ساخته شده است تصمیم به نابود کردن آن. افسر ایمنی محدوده، با احشاء فوق العاده ای، فشار دادن دکمه، منفجر موشک قبل از آن می تواند تبدیل شدن به یک خطر به امنیت عمومی. SPEAKER 1: این سفر قبل از ازدواج بود موشک Ariane 5 و تخریب آن به دلیل نقص تعبیه شده صورت گرفت در نرم افزار موشک. JACK GANSSLE: مشکل در آریان این بود که یک عدد وجود دارد که مورد نیاز 64 بیت بیان کرد. و آنها می خواستند برای تبدیل به یک عدد 16 بیتی است. آنها تصور که تعداد هرگز رفتن به بسیار بزرگ، که اکثر این رقم در 64 بیتی تعداد صفر بود. آنها در اشتباه بودند. SPEAKER 1: ناتوانی یک نرم افزار برنامه ای برای پذیرش از نوع تعداد تولید شده توسط دیگری بود در ریشه از شکست. توسعه نرم افزار بسیار تبدیل شده بود بخش پرهزینه از فن آوری جدید. موشک آریان 4 بسیار بوده است موفق است، به طوری که بسیاری از نرم افزار ایجاد شده برای آن نیز بود مورد استفاده در موشک Ariane 5. PHILIP کویل: مشکل اساسی بود که موشک Ariane 5 سریعتر بود، شتاب سریعتر. و نرم افزار نداشته است به خود اختصاص داده که. SPEAKER 1: نابودی موشک یک فاجعه مالی بزرگ بود، همه به دلیل یک خطای نرم افزار دقیقه. اما این اولین بار نیست مشکلات تبدیل مدرن به ستوه آورده بود فن آوری موشک. JACK GANSSLE: در سال 1991، با شروع اولین جنگ خلیج فارس، وطن پرست موشک یک نوع مشابه را تجربه یک مشکل تبدیل عدد. به عنوان یک نتیجه، 28 سربازان آمریکایی کشته و حدود 100 تن دیگر زخمی شدند هنگامی The Patriot، که قرار بود برای محافظت از در برابر Scuds ورودی، موفق به آتش یک موشک. SPEAKER 1: وقتی عراق به کویت حمله کرد و آمریکا طوفان صحرا راه اندازی شد در اوایل سال 1991، موشک پاتریوت برای محافظت از عربستان سعودی مستقر شد و اسرائیل از حرکت تند و سریع عراق حملات موشکی. پاتریوت متوسط ​​محدوده ایالات متحده است سیستم های سطح به هوا ساخته شده توسط شرکت ریتون. تئودور POSTOL: اندازه پاتریوت خود رهگیر است که تقریبا 20 فوت طول. و وزن آن حدود 2000 پوند. و آن را حمل یک کلاهک در حدود - من فکر می کنم آن را در حدود 150 پوند است. و کلاهک به خودی خود است انفجاری بالا است که قطعه در اطراف آن. پوشش کلاهک طراحی شده است مثل چارپاره عمل می کنند. SPEAKER 1: این موشک ها انجام چهار در هر ظرف و منتقل می شوند توسط تریلر شبه. PHILIP کویل: ضد موشک پاتریوت سیستم عقب می رود در حداقل 20 سال در حال حاضر. این روش در اصل طراحی شده بود موشک دفاع هوایی به شلیک کردن موشک های دشمن. در جنگ اول خلیج فارس، وقتی که جنگ آمد همراه، ارتش می خواست به استفاده از آن به شلیک کردن Scuds، نه هواپیما. نیروی هوایی عراق نبود خیلی از یک مشکل. اما ارتش در مورد Scuds ها نگران بود. و به طوری که آنها سعی کردم به روز رسانی پاتریوت. SPEAKER 1: متوقف کردن موشک دشمن سفر در ماخ پنج بود رفتن به تواند چالش برانگیز به اندازه کافی. اما زمانی که میهن پرستی را با عجله شد خدمات، ارتش از آگاه نیست اصلاح عراق ساخته شده است که خود Scuds تقریبا غیر ممکن است برای ضربه. تئودور POSTOL: چه اتفاقی افتاد است Scuds که در آینده ناپایدار بودند. آنها wobbling شد. دلیل این امر این عراقی ها بود، در به منظور دریافت 600 کیلومتر از موشک 300 کیلومتر برد، در زمان وزن از کلاهک جلو. آنها ساخته شده است کلاهک سبکتر. بنابراین در حال حاضر پاتریوت تلاش در حرکت تند و سریع آمده است. و بیشتر از زمان، قریب به اتفاق قربانیان اکثریت از زمان، آن را فقط حرکت تند و سریع پرواز. SPEAKER 1: هنگامی که سیستم پاتریوت اپراتورهای متوجه پاتریوت از دست رفته هدف آن، آنها منفجر میهن پرستان کلاهک برای جلوگیری از امکان تلفات اگر آن را اجازه داده شد به سقوط به زمین است. تئودور POSTOL: این چیزی است که اکثر بود مردم به عنوان توپ های آتشین بزرگ در آسمان دیدم و به عنوان ره گیری اشتباه کلاهک حرکت تند و سریع. SPEAKER 1: اگر چه در آسمان شب میهن پرستان به نظر می رسد به موفقیت از بین بردن Scuds های، در ظهران وجود دارد به می تواند اشتباه نکنید در مورد آن عملکرد. ، سیستم رادار پاتریوت از دست رفته وجود دارد پیگیری یک حرکت تند و سریع ورودی و هرگز راه اندازی به علت یک نقص نرم افزاری است. این اسرائیلی ها که برای اولین بار کشف شد که دیگر سیستم بود، بیشتر اختلاف زمان با توجه به یک ساعت تبدیل شد جاسازی شده در کامپیوتر سیستم. JACK GANSSLE: حدود دو هفته قبل از تراژدی در ظهران، اسرائیلی ها گزارش به وزارت دفاع که سیستم در حال از دست دادن زمان است. بعد از حدود هشت ساعت در حال اجرا، آنها متوجه شده است که این سیستم است تبدیل شدن به طرز محسوسی کمتر دقیق است. وزارت دفاع در پاسخ به گفتن تمام باتری های پاتریوت سیستم را ترک کنید برای مدت زمان طولانی. آنها هرگز گفت: چه مدت زمان طولانی بود. هشت ساعت؟ 10 ساعت؟ 1،000 در ساعت؟ هیچ کس نمی دانست. SPEAKER 1: باتری پاتریوت مستقر در سربازخانه در ظهران و آن ساعت داخلی ناقص بوده است بیش از 100 ساعت در شب فوریه 25. JACK GANSSLE: این زمان به دنبال دقت در حدود یک دهم از یک ثانیه. در حال حاضر، یک دهم ثانیه است تعداد جالب است زیرا نمی تواند بیان شده در باینری دقیقا، که به معنی می توان آن را دقیقا بیان نمی شود هر کامپیوتر دیجیتال مدرن. آن را سخت به این باور است، اما استفاده از این به عنوان مثال. اجازه دهید یک سوم را به شماره. یک سوم نمی تواند بیان شود در دهدهی دقیقا. یک سوم 0.333 رفتن در بی نهایت. هیچ راهی برای انجام این کار وجود دارد دقت مطلق در دهدهی. این دقیقا همان نوع مشکل که در پاتریوت اتفاق افتاده. دیگر سیستم زد، بدترین خطا در زمان تبدیل شد. SPEAKER 1: پس از 100 ساعت از عمل، خطا در زمان تنها بود در حدود یک سوم از یک ثانیه. اما از نظر هدف قرار دادن موشک سفر در پنج ماخ، آن را در نتیجه یک خطای ردیابی بیش از 600 متر است. این امر می تواند یک خطای مهلک برای سربازان در ظهران. تئودور POSTOL: چه اتفاق افتاده است حرکت تند و سریع راه اندازی اولیه تشخیص داده شد ماهواره های هشدار دهنده. و آنها می دانستند که حرکت تند و سریع آینده در جهت خود را. آنها نمی دانستند که در آن شد. SPEAKER 1: در حال حاضر این بود تا رادار جزئی از سیستم پاتریوت دفاع از ظهران برای قرار دادن و نگه داشتن ردیابی موشک های دشمن ورودی. JACK GANSSLE: رادار خیلی باهوش بود. این در واقع به دنبال موقعیت حرکت تند و سریع و سپس پیش بینی که در آن احتمالا دفعه بعد رادار با ارسال یک پالس. این دروازه دامنه نامیده می شد. تئودور POSTOL: سپس یک بار پاتریوت تصمیم می گیرد هم به اندازه کافی به آن بروید را تصویب کرده است عقب و بررسی محل بعدی برای این شی شناسایی شده است، آن را به عقب می رود. بنابراین، هنگامی که آن را به اشتباه رفت و برگشت مکان، آن را پس از آن هیچ شی می بیند. و آن تصمیم می گیرد که هیچ شی وجود دارد، این تشخیص نادرست بود، و قطره مسیر. SPEAKER: 1 ورودی حرکت تند و سریع ناپدید شد از صفحه رادار، و ثانیه بعد از آن ناودان به سربازخانه. حرکت تند و سریع منجر به کشته شدن 28 نفر و یکی از آخرین بود اخراج در طول جنگ اول خلیج فارس. متأسفانه، نرم افزار به روز شده وارد در ظهران روز بعد. نقص نرم افزار ثابت شده بود، بستن یک فصل در مشکل تاریخ موشک های پاتریوت. وطن پرست است که در واقع مخفف برای ردیابی آرایه فاز رهگیری از هدف. مالان دیوید J: خوب، پس جدی به عنوان مثال، تا مطمئن شوید. و خوشبختانه، این سطح پایین تر اشکالات چیزی است که ما نمی به طور معمول باید به درک، قطعا با برخی از ما اولین برنامه است. در عوض، بسیاری از باگ ها به نظر شما برخورد خواهد شد منطقی در طبیعت، نحوی در طبیعت به موجب آن کد کار نمی کند درست است. و شما می دانید آن بسیار سریع می باشد. اما به خصوص هنگامی که ما به پایان ترم، آن را به بیشتر و بیشتر از امکان تبدیل شدن واقعا فکر می کنم سخت در مورد طراحی برنامه ها و زمینه نمایندگی وجود دارد، بیش از حد، از داده ها. به عنوان مثال، ما به خروجی زیر معرفی، است که یک موتور پایگاه داده محبوب که شما می توانید با وب سایت های به استفاده از ذخیره داده در پایان به عقب. و شما باید برای شروع به تصمیم گیری در پایان ترم نه تنها آنچه انواع داده ها در امتداد این خطوط به استفاده از اما دقیقا چگونه بسیاری از بیت برای استفاده، یا نه شما می خواهید برای ذخیره تاریخ تاریخ و زمان به عنوان زمان، و همچنین چیزهایی مانند بزرگ چگونه می خواهید شناسه منحصر به فرد برای باشد، می گویند، کاربران در پایگاه داده خود را. در واقع، اگر برخی از شما تا به حال فیس بوک حساب برای مدتی، و شما می دانید که چگونه برای به دست آوردن دسترسی شناسه کاربری خود را - که گاهی اوقات نشان می دهد تا خود را در URL نمایه مگر اینکه شما را انتخاب کرده ام نام مستعار برای URL، و یا اگر شما نمودار API مورد استفاده در فیس بوک، API در دسترس عموم است که توسط آن شما می توانید فیس بوک برای داده های خام بپرسید - شما می توانید ببینید چه ID عددی شما. و چند سال پیش، فیس بوک اساسا مجبور به تغییر را از استفاده از معادل آن از نوع داده int به استفاده طولانی مدت ها به این دلیل در طول زمان به عنوان کاربران آمده و رفتن و ایجاد بسیاری از حساب و حساب های جعلی، حتی آنها بسیار به راحتی قادر به اگزوز چیزی شبیه به 4 میلیارد ارزش ممکن است مانند یک int. بنابراین بیشتر در مورد این نوع از مسائل پایین جاده، نیز هست. همه حق است، به طوری که در ریخته گری. این عدم دقت بود. چند اطلاعیه ها سریع. بنابراین بخش به طور رسمی آغاز این آینده یکشنبه، دوشنبه، سه شنبه. شما از طریق ایمیل در اواخر این هفته می شنوید به واگذاری بخش شما. و شما نیز در اینجا در آن نقطه به بخش خود را تغییر دهید اگر شما برنامه در حال حاضر تغییر و یا خود را سطح راحتی در حال حاضر تغییر کرده است. در همین حال یکی از P-مجموعه و هکر به دلیل این پنج شنبه با گزینه ای برای گسترش که آخرین مهلت در مشخصات تا جمعه در یک راه معمولی است. این را فهم کنید که با مشکل مشخصات مجموعه دستورالعمل های مربوط به چگونه به استفاده از دستگاه CS50، مطمئن، و همچنین برخی از، CS50 ابزار ویژه مانند سبک 50، که می تواند به شما ارائه با انتقادات و پیشنهادات به صورت پویا در کیفیت سبک کد های خود استفاده کنید و نیز چک 50، که می تواند شما را با ارائه بازخورد پویا و خود را به صحت کد. ببخش که ما هنوز در حال اتو کردن از چند سبب گره خوردن با چک 50. چند تن از همکلاسی های خود را که شروع در اطراف چهار AM در شب جمعه تنظیمات رفت تا پس از آن متوجه چند باگ است که ما در حال کار از طریق، و عذر خواهی برای هر کسی که سرخوردگی بی تجربه است. گسل مال من است. اما ما پیگیری CS50 بحث در مورد وقتی است که حل و فصل شده است. بنابراین یک کلمه در خود نمرات است. بنابراین آن را یک یا دو هفته قبل از شما شروع به دریافت بازخورد در مجموعه های مشکل دار چرا که شما هنوز ندارد یک شخص تدریس. و حتی پس از آن، ما شروع به ارزیابی مشکل C مجموعه قبل از ما رفتن به عقب و ارزیابی ابتدا تا که شما می توانید بیشتر مربوط به بازخورد سریع تر. اما به طور کلی در برنامه درسی، CS50 مجموعه مشکل همراه ارزیابی پس از چهار محور - دامنه، صحت، طراحی، و سبک. محدوده است برای رفتن به یک عدد به طور معمول بین صفر و پنج است که قطاری که چه مقدار از قطعه ای است که شما کمی است. به طور معمول، شما می خواهید از این به پنج. شما حداقل همه چیز محاکمه شد. و متوجه آن یک عامل ضربی به طوری که انجام تنها بخشی از مجموعه ای مشکل بهترین استراتژی نیست. در همین حال، بیشتر آشکار است اهمیت صحت - فقط برنامه خود را درست با احترام به مشخصات؟ این است که عمدا وزن به شدت نسبت به دو محور دیگر سه عامل به خاطر ما می دانیم که به طور معمول شما در حال رفتن به صرف بیشتر زمان زیادی تعقیب کردن برخی از اشکالات، گرفتن کد خود را به کار می کنند، پس از آن شما ایجاد تورفتگی متن، آن و انتخاب نام متغیر مناسب و می پسندم آن است که در انتهای دیگر از طیف از سبک. که نه می گویند سبک نمی باشد مهم است، و ما آن را بیش از موعظه خواهیم کرد زمان هم در سخنرانی ها و در بخش. سبک اشاره به زیبایی شناسی از کد شما. آیا شما انتخاب و به نام متغیر که کوتاه است اما تا حدودی می باشد توصیفی؟ کد خود را فاصله دار است تا شما را در دیده ام سخنرانی و به شیوه ای سازگار با سبک 50؟ در نهایت طراحی مناسب است در وسط. طراحی یک سخت تر برای قرار دادن انگشت بر دلیل آن را به مراتب بیشتر ذهنی. اما این شاید مهم ترین سه محور آموزشی ارزش در طول زمان و این خواهد بود که فرصت همکار آموزش شما با بازخورد کیفی ارائه می کنند. در واقع، در CS50 حتی اگر ما مجبور این فرمول ها و نمرات، در پایان روز این بسیار به عمد سطل های بسیار کوچک - ارزش نقطه بین صفر و سه و صفر و پنج. ما سعی نکنید به منظور جلب خطوط بسیار درشت بین مجموعه مشکل یا بین دانش آموزان، اما تا آنجا که به جای تمرکز ما می توانیم بر روی کیفی، کامل نویسی بازخورد، یا تایپ و یا کلامی از همکار آموزش خاص خود را، شما می خواهید بدانید که به خوبی. اما به طور کلی، کسانی هستند که وزن که محور های مختلف خواهد داشت. در همین حال، بیش از حد، آن را به ارزش نگه داشتن در به خاطر داشته باشید که شما باید فرض کنیم که 60٪ سه نفر از پنج است و بنابراین تقریبا شکست. سه عمدا به معنای مرتب کردن بر اساس از وسط جاده خوب. اگر شما در حال گرفتن threes در آغاز ترم، که در واقع به معنای خوب محل آغاز خواهد شد. اگر شما گرفتن twos، نمایشگاه، وجود دارد قطعا برخی از کارهای به پرداخت کمی توجه بیشتری را به استفاده از بخش ها و ساعات اداری. اگر شما در حال گرفتن چهار دست و پا و پنج، بزرگ است. اما در واقع، ما امیدواریم که برای دیدن مدار در میان دانشجویان - بسیار فردی هر دانش آموز، اما با شروع ترم اینجا در مرتب کردن بر اساس دو تا سه محدوده اما پایان دادن به در اینجا در چهار تا پنج محدوده. این چیزی است که ما واقعا به دنبال. و ما در ذهن داشته باشیم این دلتا که شما بین هفته صفر و هفته نشان می دهند 12 وقتی که من انجام نمرات. این کار برای ما مهم نیست که مطلقا چگونه شما منصفانه در ابتدا اگر شما مسیر است که در واقع به سمت بالا و قوی است. صداقت علمی - اجازه دهید من در من قرار داده است صدای جدی تر برای فقط یک لحظه. بنابراین این دوره تمایز اعزام دانشجو بیش از هر جای دیگر در تاریخ به تخته تبلیغ، به اعتقاد من. ما مرتب سازی بر اساس تعداد از دست رفته در این نقطه که چگونه اغلب این اتفاق می افتد. و این به این دلیل دانش آموزان در سال 50 هر نادرست از خود همکلاسی در جای دیگر. اما متوجه باشید، بیش از حد، که ما بسیار خوب است در تشخیص این نوع از چیزی. و این مزیت این است که کلاس علم کامپیوتر است که ما در می تواند و ما را مقایسه همه دانش آموزان مشکل مجموعه جفت عاقلانه در برابر هر دیگر، نه تنها در این سال اما سال قبل. در حال حاضر توانایی، مانند دانش آموزان در طبقه، به گوگل و برای پیدا کردن کد در سایتهای مانند github و بحث و تبادل نظر. کاملا راه حل به CS50 وجود دارد P-مجموعه شناور در اطراف وجود دارد. اما اگر شما می توانید آنها را پیدا کنید، ما می توانیم آنها را پیدا کنید. و همه این است که بسیار خودکار و آسان و غم ما را به پیدا کنید. اما من می خواهم به تاکید بیش از حد، که سیاست صداقت دانشگاهی دوره است بسیار به معنای بسیار در مقابل آن روح. در واقع، در این سال ما همه چیز rephrased ام در برنامه درسی به این، نقطه نقطه نقطه، با جزئیات بیشتر در برنامه درسی. اما این موضوع فراگیر در دوره واقعا به معقول. ما می دانیم که قابل توجه وجود دارد مقدار آموزشی ارزش به همکاری، تا حدی، با همکلاسی ها، به موجب آن شما دو یا سه یا شما را بیشتر ایستاده در هیئت مدیره سفید whiteboarding، پس به صحبت می کنند، ایده های خود را - به نوشتن شبه در تصاویر، رسم نمودار چه باید ماریو اگر شما آن را اولین ارسال در شبه. چه باید الگوریتم حریص - چگونه باید آن را در رفتار مشکل یکی از این دو؟ و بنابراین متوجه باشید که رفتار که ما را تشویق بسیار بسیاری در امتداد آن خطوط. و در برنامه درسی، شما تمام دسته از گلوله تحت دسته معقول و منطقی نیست رده است که کمک می کند تا به ما کمک کند شما ذهن خود را در اطراف جایی که بپیچید ما قرعه کشی که خط. و به طور کلی، یک قاعده سرانگشتی مناسب و معقول از این است که اگر شما در حال تلاش برای حل برخی از اشکال و دوستان یا همکلاسی های خود را نشسته است در کنار شما، آن را به معقول و منطقی را برای شما به او نشان دهد و یا او را کد و می گویند، هی، می تواند به شما کمک کند خود را من کشف کردن چه چیزی اشتباه رفتن در اینجا؟ ما به طور معمول انجام نمی آغوش طرف مقابل. آن است که یک پاسخ درست برای شما نیست دوست یا همکلاسی در اینجا می گویند، آه، فقط در معدن و رقم نگاه آن را از آن. این است که مرتب سازی بر اساس غیر منطقی است. اما داشتن شخص دیگری، یکی دیگر از مغز، یکی دیگر از جفت چشم نگاه صفحه نمایش و یا نگاه خود را در کد خود را و می گویند، شما مطمئن هستید که میخواهید به یک حلقه در اینجا؟ یا شما مطمئن هستید که میخواهید که نقطه و ویرگول بدین اینجا؟ یا آه، که پیغام خطا به معنای این است. کسانی که بسیار مناسب و رفتارهای تشویق. موارد که من اشاره به قبلا جوش پایین به هنگامی که دانش آموزان در اواخر شب قضاوت ضعیف تصمیم گیری ها و ایمیل خود را به شخص دیگری و یا فقط گفت، در اینجا، آن را در Dropbox و یا گوگلینگ در اواخر شب. و من را تشویق و التماس از شما، اگر شما مجبور کسانی که اجتناب ناپذیر لحظات استرس، شما در حال bumping تا در برابر مهلت، شما هیچ اواخر روز از آن را در حال حاضر جمعه که در آن نقطه، ایمیل سر درس و یا خودم به طور مستقیم. بگو، گوش دادن، من در من هستم نقطه شکستن در اینجا. بیایید با هم گفتگو و شکل آن. توسل به وب و یا برخی دیگر نمی رفتار معقول است هرگز راه حل، و بیش از حد بسیاری از شما همکلاسی های دیگر در اینجا هیچ دانشگاه که به دلیل قضاوت ضعیف. اما این بسیار آسان است به دامن که خط. و در اینجا یک تصویر کمی برای تشویق است شما را از حالت تا که در حال حاضر همه چیز درست می شود. بنابراین یک روکش سریع، پس از آن، که در آن ما را ترک کردن. بنابراین در هفته گذشته، به یاد می آورند که معرفی می کنیم شرایط، نه در ابتدا اما در C این زمان. بود و برخی از نحو جدید وجود دارد، اما واقعا هیچ ایده های جدید فی نفسه. ما تا به حال از عبارات بولی که ما می توانیم یا همراه با دو عمودی میله های زندان یا و همراه با دو آمپرسندهای کاربردی، اعلام کرد که هر دو سمت چپ و سمت راست باید درست باشد برای این اجرا. پس از آن ما تا به حال سوئیچ ها، که ما نگاه به طور خلاصه، اما من پیشنهاد می کنم واقعا فقط نحو مختلف برای دستیابی به همان نوع از هدف اگر شما می دانیم پیشبرد چه مواردی خود را در حال رفتن به. ما در حلقه نگاه کرد. برای حلقه است شاید رایج ترین، یا حداقل این است که به مردم به طور معمول به طور غریزی برسد. حتی اگر آن را کمی مرموز به نظر می رسد، شما بسیاری از افراد، نمونه های بسیاری از این خواهید دید قبل از اینکه طولانی، که شما در حال حاضر در اواخر هفته گذشته است. در حالی که حلقه ها نیز می توانند به همین شکل رسیدن به چیزی که همان. اما اگر شما می خواهید برای انجام هر گونه incrementation و یا به روز رسانی مقادیر متغیر، شما باید به آن را انجام دستی از برای حلقه قبل از اجازه می دهد تا. و پس از آن انجام دهند در حالی که حلقه وجود دارد، که اجازه می دهد تا ما را به انجام کاری در حداقل یک بار در حالی که چیزی دیگری درست است. و این است که به ویژه برای خوب برنامه ها یا بازی که در آن شما می خواهید سریع کاربر برای چیزی حداقل یک بار. و سپس اگر او مساعد نباشد، شما ممکن است بخواهید آن را انجام دهد دوباره و دوباره. با متغیرها، در عین حال، ما تا به حال خطوط از کد شبیه به این، که می تواند دو خط. شما می توانید از یک int به نام اعلام شمارنده، نقطه و ویرگول بدین شکل. یا شما فقط می توانید اعلام و آن را تعریف کنید، پس به صحبت می کنند. ارزش در همان زمان به من بدهید. و پس از آن در نهایت، ما صحبت کردیم در مورد توابع. و این یک مثال خوب در بود به این معنا که آن را نشان می دهد دو نوع از توابع. یکی GetString () است، که، دوباره، می شود یک رشته از کاربر. اما GetString () نوع جالب است، تا آنجا که ما از آن استفاده می شود، از آنجا که ما همیشه آن را با استفاده از چیزی در سمت چپ دست علامت مساوی. این است که می گویند که GetString () یک مقدار را بر می گرداند. آن را می گرداند، البته، یک رشته است. و سپس بر روی سمت چپ، ما صرفه جویی که به سادگی رشته در داخل یک متغیر به نام نام. این متفاوت است، به یک معنا، از چون printf به این دلیل چون printf، حداقل در ما استفاده در اینجا، هیچ چیزی بر نمی گرداند. همانطور که به کنار، آن چیزی را بازگشت. ما فقط اهمیتی نمی دهند آنچه در آن است. اما آن را ندارد چه به نام یک عارضه جانبی است. و چه شده است که بروز عوارض جانبی در هر ما تا کنون دیده ام؟ چه چون printf انجام دهید؟ چاپ این چیزی است که به صفحه نمایش، نمایش متن یا شماره و یا چیزی بر روی صفحه نمایش. و این فقط یک اثر جانبی در نظر گرفته چون واقعا توزیع نمی کند آن را به من عقب. این پاسخ به داخل نیست یک جعبه سیاه است که من می توانم پس از آن رسیدن به و گرفتن. این فقط آن را در انجام خود را، بسیار مثل کولتن به این متصل شد جعبه سیاه در هفته گذشته، و او به نوعی جادویی رسم بود در هیئت مدیره بدون من در واقع درگیر. خواهد بود که یک عارضه جانبی است. اما اگر من در واقع تا به حال برای رسیدن به پشت در در اینجا و می گویند، آه، در اینجا رشته از کاربر، که می شود یک مقدار بازگشتی. و تا کنون ما فقط توابع مورد استفاده که مردم دیگر نوشته اند. اما ما در واقع می توانید این کار را انجام دهند نوع از همه چیز خودمان. بنابراین من قصد دارم برای رفتن به CS50 دستگاه دوباره. برگه به ​​من نزدیک است که ما یک لحظه پیش باز بود. و به من اجازه رفتن به جلو و یک فایل جدید ایجاد کنید. و من قصد دارم به جلو بروید و با این یکی positive.c تماس بگیرید. بنابراین من می خواهم به انجام کاری با اعداد مثبت در اینجا. بنابراین من قصد دارم به جلو بروید و اعضای هیات دست به انجام - متاسفم - # شامل. بیایید همان را ندارد اشتباه مانند قبل. اعضای هیات تحریریه اصلی (خالی)، باز فرفری تحریک احساسات، آکولاد بسته. و در حال حاضر من می خواهم به انجام موارد زیر است. من می خواهم برای نوشتن یک برنامه که اصرار دارد که کاربر می دهد من یک عدد صحیح مثبت است. بنابراین هیچ تابع GetPositiveInt است وجود دارد در کتابخانه CS50. به تنها GetInt () وجود دارد. اما این خوب است چون بر من ساختارهایی که با من می توانم یک تحمیل محدودیت کمی بیشتر در آن ارزش. من می تواند چیزی شبیه به این انجام دهد. بنابراین اعضای هیات N - و اگر شما در حال تایپ کردن همراه، فقط متوجه من قصد دارم به عقب برگردید و برخی از چیزهایی که در یک لحظه تغییر - بنابراین اعضای هیات ازت برابر GetInt (). و این رفتن برای قرار دادن داخل اعضای هیات N. و اجازه دهید من بیشتر توصیفی است. اجازه بدهید من چیزی می گویند مثل من تقاضا دارم که شما یک عدد صحیح مثبت را به من بدهد. بسیار خوب. بنابراین فقط یک کمی از دستورالعمل ها. و در حال حاضر چه کاری می توانم انجام دهم؟ خوب، من در حال حاضر از ساده من می دانم شرایط و یا شاخه، درست مثل من حال در ابتدا، من می توانم چیزی را می گویند می خواهم اگر n کمتر از یا برابر با است صفر، پس از آن من می خواهم برای انجام کاری می خواهم، این است که مثبت نیست. و سپس من می توانم انجام دهید - خوب، اما من واقعا می خواهم برای دریافت کنید که بین المللی است. بنابراین من می تواند به اینجا بروید و من می توانم نوع کپی برداری از این و دندانه دار کردن. و سپس OK را بزنید. بنابراین اگر کمتر یا برابر با صفر انجام این کار. در حال حاضر، چه می شود اگر کاربر همکاری نمی کند؟ خب، پس من قصد دارم به قرض در اینجا. و سپس من در اینجا و اینجا و اینجا. پس این است که به وضوح نمی راه حل درست است؟ از آنجا که هیچ پایانی در چشم وجود دارد. اگر من می خواهم به تقاضا است که کاربر می دهد من یک عدد صحیح مثبت، من می توانم در واقع بین المللی دریافت کنید. من پس از آن میتوانید برای آن بین المللی را بررسی کنید. اما پس از آن من می خواهم دوباره آن را چک کنید و دوباره آن را چک کنید و دوباره آن را چک کنید. بنابراین بدیهی است، چه بهتر ساخت می شود در اینجا با استفاده از؟ همه حق است، بنابراین نوعی از حلقه است. بنابراین من قصد دارم به خلاص شدن از شر تقریبا همه از این. و من می خواهم برای دریافت این حداقل یک بار int است. بنابراین من قصد دارم به می گویند - و من دوباره در حالی که در یک لحظه - در حال حاضر، انجام چه؟ من قصد دارم برای انجام GetInt نفر بین المللی می شود (). OK را بزنید. به طوری که خیلی خوب است. و در حال حاضر چگونه اغلب من می خواهم به انجام این کار؟ اجازه بدهید من چون printf در داخل حلقه قرار داده است بنابراین من دوباره و دوباره می تواند تقاضا، اگر نیاز باشد. و چه من می خواهم این در حالی که شرایط کاری انجام دهید؟ من می خواهم به انجام این کار در حالی که در مورد چیست؟ آره. N کمتر از یا مساوی صفر است. بنابراین در حال حاضر، ما به طور قابل توجهی تمیز این کد. ما قرض گرفته ام بسیار ساده ساخت - را انجام دهند در حالی که حلقه. من فقط خطوط مهم به سرقت رفته کدی که من شروع به کپی کردن و چسباندن بود که عاقلانه نیست. و بنابراین در حال حاضر من قصد دارم در واقع چسباندن آن را در اینجا و فقط این کار یک بار. و در حال حاضر آنچه من می خواهم به انجام در پایان این برنامه؟ من فقط می گویم چیزی ساده می خواهم، با تشکر برای - و من٪ من برای بین المللی انجام دهد - بک اسلش نفر، کاما، و سپس پلاگین در n، نقطه و ویرگول بدین شکل. بسیار خوب. بنابراین دیدن اجازه دهید در حال حاضر چه اتفاقی می افتد زمانی که من این برنامه را اجرا کنید. من قصد دارم به جلو بروید و انجام را مثبت. لعنت کند. چند خطا. بنابراین اجازه دهید به من حرکت به بالا و برای اولین بار. آیا از طریق آنها کار می کنند نه به عقب. کار را از طریق آنها را از بالا به پایین تا مبادا آنها آبشار و تنها یک چیز اشتباه باشد. اعلام ضمنی GetInt تابع (). آره. پس از آن کافی نیست. من از نوع ساخته شده است همان اشتباه، اما کمی متفاوت این زمان. من نیاز دارم که نه تنها شامل stdio.h، اما همچنین cs50.h، که شامل به اصطلاح اعلامیه های بین المللی، که آموزش لوازم خانگی، و یا می آموزد C چه GetInt () است. پس بگذار من resave. من قصد دارم به چشم پوشی از خطاهای دیگر چون من قصد دارم به امید که آنها به نحوی مربوط به خطا من در حال حاضر ثابت شده است. پس اجازه دهید من جلو بروید و کامپایل مجدد با مثبت، وارد کنید. لعنت کند. سه اشتباهات، هنوز هم. اجازه دهید من رفته تا برای اولین بار. N متغیر استفاده نشده. ما تا پیش از این دیده نشده است. و این، بیش از حد، کمی مرموز است. این خروجی از کامپایلر است. و آنچه که خط برجسته وجود دارد - positive.c :9:13 - می گوید، آن را بر روی خط نه از گفت: positive.c، در شخصیت 13TH، ستون 13TH، شما این اشتباه است. و به طور خاص، آن را گفتن من N متغیر استفاده نشده است. بنابراین اجازه دهید را ببینید - خط نه. من با استفاده از n به این معنا که من به آن ارزش. اما آنچه کامپایلر دوست ندارد که من به ظاهر با استفاده از آن نیست. اما یک دقیقه صبر کنید، من با استفاده از آن. در خط 11، من با استفاده از آن را در اینجا. اما اگر من پایین بیشتر در :11 positive.c - به طوری که در خط 11، 12 شخصیت، کامپایلر به من گفتن، استفاده از مشخصه نفر اعلام نشده. بنابراین اعلام نشده من آن را به عنوان مشخص نشده است متغیر با نوع داده. اما یک دقیقه صبر کنید. من که دقیقا در خط نه. بنابراین، کسی است که واقعا در اینجا اشتباه گرفته شود. آن چه من یا کامپایلر به دلیل در خط نه، دوباره، من اعلام نوع int n و من اختصاص آن را ارزش () GetInt است بازگشت. سپس من این مزیت می باشد که استفاده از آن بسیار متغیر در خط 11 و چک کردن اگر ارزش خود را کمتر از یا برابر با صفر است. اما این ظاهرا بد و شکسته چرا؟ دوباره بگو؟ آه، من مجبور به اعلام نفر قبل از ورود به حلقه. اما چرا؟ منظورم این است که، ما فقط کمی پیش که پیشنهاد این جریمه به اعلام متغیر همه در یک خط و سپس برخی از آنها ارزش اختصاص دهید. یک متغیر جهانی - بیایید دوباره به این ایده را در فقط یک لحظه است. چرا شما می خواهید من برای قرار دادن آن را در خارج از حلقه؟ آن است. دقیقا. بنابراین، البته، تا حدودی متضاد با، اجازه دهید من خلاصه. هنگامی که شما اعلام نفر در داخل بلوک را انجام دهند وجود دارد - به طور خاص در داخل کسانی که آکولاد - که متغیر N دارای چه نام دامنه - ربطی به سیستم نمره دهی ما در البته - اما دامنه که به کسانی که آکولاد محدود شده است. به عبارت دیگر، به طور معمول اگر شما اعلام یک متغیر در داخل یک مجموعه ای از آکولاد، که تنها متغیر وجود دارد در داخل آن آکولاد. پس با این منطق به تنهایی، حتی اگر من n در خط نه اعلام کرده ایم، اساسا از حوزه از بین می رود، از حافظه ناپدید، پس به صحبت می کنند، آن زمان من در خط 11 رسید. از آنجا که خط 11، متاسفانه، خارج از آن آکولاد. بنابراین من متاسفانه می توانید این مسئله را حل نمی رفتن به عقب به چیزی است که من آن را قبل از انجام. شما ممکن است در ابتدا این کار را. اما آنچه که شما در حال حاضر نه انجام این چرخه؟ شما در حال بدیهی است دریافت نمی اعضای هیات چرخه. بنابراین ما می توانیم از GetInt () را ترک کنند، و ما باید از GetInt () در داخل را ترک حلقه چون این چیزی است که ما می خواهیم اذیت کردن کاربر برای دوباره و دوباره. اما آن را کافی برای رفتن به تا خط، می گویند، شش. INT N، نقطه و ویرگول بدین شکل. آیا آن ارزش نمی دهد در عین حال به دلیل شما لازم نیست فقط رتبهدهی نشده است. اما در حال حاضر در اینجا، توجه - این خواهد بود اشتباه بسیار آسان است. من نمی خواهم به سایه قبلی من اعلام N. من می خواهم به استفاده از N که در واقع وجود دارد. و بنابراین در حال حاضر در خط 10، من اختصاص n یک ارزش است. اما در خط شش، من اعلام N. و بنابراین می تواند من یا می توانم نیست استفاده از آن در خط 12 در حال حاضر؟ من آنجا که می تواند بین که فرفری پرانتز نفر اعلام کرد در حال حاضر؟ تا اینجا در خط پنج. در اینجا در خط 14. بنابراین اگر من در حال حاضر زوم کردن، ذخیره کردن این فایل، به به عقب و اجرا را مثبت آن وارد این زمان. به طوری که در حال حاضر پیشرفت. اسلش. / مثبت، وارد کنید. تقاضای من این است که شما من را یک عدد صحیح مثبت است. منفی 1. منفی 2. منفی 3. صفر است. یک. و تشکر برای یکی است آنچه در حال حاضر چاپ شده است. اجازه دهید به من چیز دیگری را امتحان کنید، از روی کنجکاوی. به من می گه به ​​ورودی یک عدد صحیح است. اما چه می شود اگر من به جای در بره تایپ کنید؟ بنابراین شما می توانید ببینید مختلف سریع - دوباره سعی کنید. اما در کد من هیچ جا آیا من می نویسم دوباره سعی کنید. تا جایی که، احتمالا، این است که سعی مجدد بی درنگ از آمدن، به شما می گویند؟ آره، از GetInt () خود را. بنابراین یکی از چیزهایی که کارکنان CS50 می کند برای شما، حداقل در این چند هفته، این است که ما برخی از مقدار نوشته شده است چک کردن خطا تا اطمینان حاصل شود که اگر شما GetInt () تماس بگیرید، شما حداقل خواهد شد int از کاربر را به عقب بر گردیم. شما یک رشته را دریافت کنید. شما نمی خواهد یک کاراکتر. شما چیزی را می کنید دیگری در دسترس نباشد. شما یک int را دریافت کنید. در حال حاضر، آن را نمی ممکن است مثبت باشد. این ممکن است منفی باشد. ما را هیچ تضمینی در اطراف آن. اما ما اذیت خواهد کرد که به کاربر برای سعی مجدد، سعی مجدد، دوباره امتحان کنید. تا زمانی که او در واقع همکاری می کند. به طور مشابه، اگر من 1.23، است که بین المللی نیست. اما اگر من نوع، می گویند، 50، که به من می دهد ارزش که من می خواستم. بسیار خوب. خیلی بد نیست. هر گونه سؤال در مورد آنچه که ما فقط انجام داده ام؟ غذای آماده کلیدی، تا روشن شود، خیلی حلقه، که دیده ایم قبل از اینکه حتی اگر ما واقعا نمی آن استفاده می شود، اما مسئله از حوزه، که در آن متغیر تنها می تواند فقط می تواند مورد استفاده قرار گیرد در برخی از محدوده مشخص شده. همه حق است، اجازه پرداختن به پیشنهاد من شما قبلا ساخته شده است، که از متغیر جهانی است. همانطور که به کنار، معلوم است که دیگر راه حل این مشکل، اما به طور معمول یک راه حل نادرست رسیده و یا یک راه حل ضعیف طراحی شده است، به اعلام متغیر خود را به عنوان چه نام یک متغیر جهانی است. در حال حاضر من نوع از نقض تعریف من هستم از دامنه به دلیل وجود دارد هیچ آکولاد در بسیار بالا و پایین بسیار از فایل. اما مفهوم آن این است که در حال حاضر در خط چهار، N یک متغیر جهانی است. و همانطور که از نامش پیداست، آن را فقط در دسترس در همه جا. ابتدا در واقع این. اگر شما با استفاده از یک متغیر، شما ممکن است به یاد شما تا به حال به را انتخاب کنید اگر آن را برای این جن یا برای همه جن. خب، همه جن فقط واضح تر است راه از گفتن جهانی. آره؟ آه، به سوال واقعا خوب است. بنابراین به یاد بیاورید که در نسخه اولین کد من، زمانی که من به اشتباه نفر اعلام شده و تعریف شده در خط نهم - من آن را به عنوان یک متغیر اعلام کرد و من به آن یک مقدار با عملگر انتساب - این به من دو اشتباه. یکی از این واقعیت است که n استفاده نمی شد، و دو، که در خط 11 آن را فقط اعلام نشده است. بنابراین یکی از اولین من آدرس در آن زمان. این صرفا نه یک خطا به اعلام یک متغیر، اما آن را استفاده نمی کنند. اما یکی از چیزهایی که ما انجام داده ایم CS50 لوازم خانگی، به عمد، آموزشی، این است که ما ابزارهای سنجش ایم تا انتظارات از کامپایلر مطمئن شوید که شما در حال انجام کارها نه فقط به درستی اما واقعا به درستی. چرا که اگر شما در حال اعلام یک متغیر چون n و آن را با استفاده از هرگز، و یا با استفاده از آن به درستی، و سپس آنچه است آن را انجام می دهند وجود دارد؟ این واقعا در خدمت هیچ هدف. و آن را بسیار آسان در طول زمان، اگر شما کامپیوتر خود را پیکربندی کنید به این ترتیب، فقط کد است که بقایای کمی در اینجا وجود دارد، باقی مانده است. و سپس ماه بعد شما نگاه به عقب و که مانند آن هستید، به همین دلیل این خط است. کد وجود دارد؟ و اگر بدون هیچ دلیل خوب وجود دارد، آن شما یا همکاران خود بهره مند نمی پایین جاده که به تلو تلو خوردن بیش از آن را پس از آن. به عنوان یک کنار، که در آن که آینده از؟ خوب، به یاد بیاورید که هر زمان که ما کامپایل برنامه، تمام این مسائل است در حال چاپ شده است. بنابراین ما به این باز می گردد. اما باز هم، نرم افزاری است که خودکار فرایند کامپایل توسط در حال اجرا کامپایلر واقعی به نام صدای جرنگ جرنگ. این چیز، ما در نهایت خواهید دید، به کار با اشکال زدایی با ویژه برنامه ای به نام دیباگر. این است که با بهینه سازی کد - بیشتر در مورد که در آینده. STD = c99 - این حالت فقط بدان معناست که استفاده از نسخه سال 1999 C. C در اطراف حتی طولانی تر است این، بلکه آنها ساخته شده برخی از آرزومندیم تغییرات به علاوه 10 سال پیش. و در اینجا آنهایی که مربوط است. ما می گوییم هر چیزی را که قبلا هشدار دهنده بوده است یک خطا در جلوگیری از دانشجو از کامپایل. و به معنای دیوار را که برای تمام دسته از چیزها، نه فقط به عوامل مرتبط. و سپس اجازه دهید من به حرکت در پایان این خط. و این، بیش از حد، ما در نهایت باید دوباره به. این واضح است که به نام فایل من کامپایل. این به یاد می آورد نام فایل من خروجی به عنوان نام از برنامه runnable من. این lcs50 فقط به معنی استفاده از CS50 کتابخانه، و هیچ صفر و آنهایی که کارکنان نوشت و قبل از آن وارد در این سال، ادغام آنها را به برنامه من. و هر کسی می دانیم-LM چیست؟ این کتابخانه ریاضی است که فقط وجود دارد حتی اگر شما هر ریاضی انجام نمی دهد. این فقط به طور خودکار ارائه شده به ما کند. خوب، اجازه دهید من می توانم یک مثال دیگر در اینجا با باز کردن یک فایل جدید. و من این صرفه جویی به عنوان string.c. معلوم است که همانطور که ما در مورد اطلاعات صحبت می کنید انواع امروز، حتی بیشتر وجود دارد در زیر هود از ما تا کنون دیده ام. بنابراین اجازه دهید من به سرعت انجام یک برنامه سریع. شامل stdio.h. و من جز اینکه. و شما می دانید، اجازه دهید به من را ندارد همان اشتباه دوباره و دوباره. شامل cs50.h. و اجازه دهید من جلو بروید در حال حاضر و اعضای هیات تحریریه اصلی (خالی). و در حال حاضر من به سادگی می خواهید به انجام برنامه که این - اعلام یک رشته به نام و گرفتن یک رشته از کاربر. و اجازه دهید من انجام یک کمی. دستورالعمل در اینجا - لطفا به من یک رشته می دهد - کاربر می داند که چه کاری انجام دهید. و سپس در اینجا در زیر این، من می خواهم به انجام موارد زیر - برای اعضای هیات من صفر می شود. باز هم، دانشمندان کامپیوتر به طور معمول شروع به شمارش صفر است، اما ما می توانیم را که اگر ما واقعا می خواستم. حالا من قصد دارم به انجام این کار من کمتر است از طول رشته بازدید کنندگان. بنابراین strlen - S-T-R-L-E-N - دوباره، آن را مختصر به دلیل آن را آسان تر به نوع، حتی اگر آن را کمی مرموز. این یک تابع ایم استفاده نمی شده است قبل اما به معنای واقعی کلمه می کند که - بازگشت به من یک شماره است که نشان دهنده طول رشته که کاربر تایپ. اگر آنها در سلام تایپ، آن را بازگشت پنج چون پنج وجود دارد حروف در سلام. سپس در هر تکرار این حلقه، من به علاوه به علاوه. بنابراین دوباره، یک استاندارد ساخت حتی اگر شما کاملا خیلی راحت نیست و یا با آن آشنا است. اما در حال حاضر در هر تکرار از این حلقه، متوجه آنچه که من قصد دارم به انجام. من می خواهم به جلو بروید و چاپ از شخصیت تنها - بنابراین٪ C بک اسلش n در یک خط جدید. و پس از آن، شما می دانید آنچه که من می خواهم؟ هر کلمه است که نوع کاربر ، مانند سلام، من می خواهم برای چاپ H-E-L-L-O، یکی از شخصیت ها در هر خط. به عبارت دیگر، من می خواهم در شخصیت های منحصر به فرد در یک رشته، به موجب آن تا حال حاضر یک رشته تنها دنباله ای از کاراکتر ها است. و معلوم من می توانم، براکت، ، براکت نزدیک، نزدیک است پرانتز، نقطه و ویرگول بدین شکل است. و من را مجبور به انجام یک چیز بیشتر. آن را در یک فایل به نام string.h که strlen اعلام است. پس اگر من می خواهم به استفاده از آن تابع، من نیاز به کامپایلر برای گفتن، انتظار می رود از آن استفاده کنید. حالا من به جلو بروید و مطمئن برنامه ای به نام رشته. نقطه، اسلش رشته. لطفا یک رشته را به من بدهید. من میام جلو و نوع آن. خوش آمدید، در همه کلاه، وارد کنید. و در حال حاضر متوجه من چاپ کرده ام یکی از شخصیت ها پس از دیگری. بنابراین جزئیات جدید در اینجا این است که یک رشته، در پایان روز، می تواند دیده از طریق فرد آن شخصیت های معرفی شده توسط مربع نماد براکت. و این به دلیل یک رشته زیر هود است که در واقع دنباله ای از حرف می باشد. اما آنچه در مورد آنها را شسته و رفته است در RAM کامپیوتر خود را - مک، کامپیوتر، هر آنچه در آن است - آنها به معنای واقعی کلمه به پشت به پشت - H-E-L-L-O - در فرد، در مجاورت بایت در حافظه است. بنابراین اگر شما می خواهید به در چنین هشتم دریافت کنید بایت، که در این حلقه خواهد بود صفر براکت، براکت، براکت دو، براکت سه، چهار براکت - که به صفر تا پنج نمایه - که چاپ H-E-L-L-O در خط خود را. در حال حاضر، به عنوان یک تیزر، اجازه دهید به من نشان می دهد شما چیزها در نهایت شما خواهید بود قادر به درک، حداقل با برخی از نزدیک به دنبال. برای یکی، چیزی است که ما در امروز شامل مثال، اگر شما می خواهم، در واقع یکی از اولین jailbreaks است برای آیفون. اصطلاحا jailbreake به معنای شکستن تلفن بنابراین شما در واقع می توانید آن را بر روی استفاده کنید حامل های مختلف یا نصب نرم افزار خود را. و شما متوجه این کاملا به نظر می رسد مرموز، به احتمال زیاد. اما در این نگاه کنید. آی فون ظاهرا با ترک خورده بود برای حلقه، شرط، دیگری وضعیت، یک دسته از توابع ما دیده ایم نیست. و دوباره، شما در نمی نگاه اول احتمالا درک چگونگی این کار. اما همه چیز که ما را مرتب سازی بر اساس برای مسلم در زندگی مدرن ما در واقع تمایل به کاهش و حتی به برخی از از این اصول ما بوده ام به دنبال در. اجازه دهید من به جلو و باز کردن یکی برنامه دیگر، holloway.c. بنابراین، بیش از حد، چیزی است که شما باید واقعا نمی دانند. حتی هیچ یک از کارکنان شاغل و یا من می توانم احتمالا این رقم با نگاه به زیرا این کد کسی بود که به آن چه که ارائه شد به لحاظ تاریخی به عنوان مبهم C شناخته شده است مسابقه، که در آن شما نوشتن یک برنامه است که به جمع آوری و اجرا می شود اما خیلی لعنتی است مرموز هیچ انسانی قادر به درک آن را به انجام تا آنها در واقع آن را اجرا کنید. بنابراین در واقع، اگر شما در این مورد نگاه کنید کد، من یک سوئیچ را ببینید. من می بینم اصلی. من این براکت ها دلالت نوعی از آرایه. آیا کسی می خواهم به حدس بزنید چه این برنامه در واقع آیا اگر من هالووی اجرا؟ بله. OK را بزنید. خوب انجام می شود. بنابراین تنها کارکنان و من نمی فهمم از آنچه که این کارها را انجام. و در حال حاضر در نهایت، اجازه دهید من جلو بروید و باز کردن یک برنامه دیگر. این یکی - دوباره، خواهیم کد منبع آنلاین در دسترس است - این یکی فقط نوع بسیار نگاه کنید. همه آنها ضربه نوار فضای بسیار کمی. اما این کد واقعی است. بنابراین اگر شما فکر می کنم که زیبا، اگر ما در واقع این اجرا در اعلان، در نهایت شما خواهید دید که چگونه ما ممکن است چیزهایی مثل این انجام دهید. بنابراین ما به شما در آن توجه داشته باشید ترک و شما در روز چهارشنبه را ببینید. [پخش موسیقی] SPEAKER 2: در CS50 بعدی، TFS مرحله شورش. SPEAKER 3: او وجود دارد. او را دریافت! [پخش موسیقی]