[MUSIC پخش] DAVID J. مالان: خوب. این CS50 است، و این در پایان هفته 2 است. بنابراین، امروز، ما در حال رفتن به ادامه نگاه ما در چگونه ما را نمایندگی چیز زیر hood-- دور از اعداد اعداد صحیح و شناور مقادیر نقطه و تمرکز بر روی رشته ها و برنامه های در نهایت جالب است. اما ما همچنین می خواهیم نگاهی به را زن و شوهر از problems-- دامنه خاص اول آن خواهد شد است که شامل رمزنگاری، هنر تقلا اطلاعات، که در آن شما در بالا در اینجا مشاهده کنید تصویری از رادیو یتیم آنی است حلقه رسیور راز از گذشته. این است که در واقع شکل بسیار ابتدایی و فرم کودک پسند از cryptopgraphy به موجب آن این حلقه دارای دو disks-- یکی در داخل و یکی خارج. و با چرخاندن یکی از آن، شما می توانید اساسا خط تا نامه مانند از طریق Z با دیگر نامه ها مانند B از طریق A. به عبارت دیگر، شما به معنای واقعی کلمه می توانید چرخش حروف الفبا، در نتیجه در آینده با یک نگاشت از نامه به حروف به طوری که، اگر شما می خواستم به ارسال پیام های مخفی به کسی مثل آنی، شما می توانید ارسال پیام خود را کاهش دهید و سپس چرخش نامه ها، که به موجب آن، اگر منظور شما می گویند: "A،" شما به جای گفتن "B" منظور شما می گویند "B" شما به جای گفتن "C" - و یا چیزی که کمی باهوش تر از that-- و پس از آن، در نهایت، تا زمانی که آنی دارد این رسیور حلقه، او می تواند این پیام را رمزگشایی. در حال حاضر، شما ممکن است به یاد، در واقع، که این در یک فیلم بسیار مشهور استفاده شد که دارد nauseum آگهی در فصل کریسمس. اجازه دهید در اینجا نگاهی به. RALPHIE PARKER: "می شود آن را شناخته شده به تمام در خلاصه که رالف پارکر بدینوسیله منصوب عضو کوچک یتیم آنی راز دایره است و به همه با عنوان افتخارات و مزایای اتفاق می افتد به آنها نمیدهد. " RALPHIE PARKER (روایت): امضا کوچک یتیم آنی. Countersigned، پیر آندره! در جوهر. برتری ها و منافع، در حال حاضر در سن نه سالگی. [MUSIC پخش] [RADIO CHATTER] RALPHIE PARKER: بیا. اجازه دهید با آن. من همه که موسیقی جاز نیاز ندارد در مورد قاچاقچیان و دزدان دریایی. گوینده رادیو: گوش کن فردا شب برای ماجراجویی پایانی از سیاه دزدان دریایی کشتی. در حال حاضر، این زمان را برای در آنی پیام های مخفی را برای شما کاربران از راز دایره. به یاد داشته باشید بچه ها، فقط اعضا از راز دایره آنی در می توان پیام های مخفی آنی را رمزگشایی. به یاد داشته باشید، آنی است که بسته به شما. تنظیم پین خود را به B-2. در اینجا است که message-- 12، 11، 2-- RALPHIE PARKER (روایت): I در اولین جلسه مخفی هستم. گوینده رادیو: --25، 14، 11، 18، 16-- RALPHIE PARKER (روایت): اوه، پیر در امشب صدای عالی بود. من می توانم بگویم که امشب پیام بسیار مهم بود. گوینده رادیو: --3، 25. این یک پیام از آنی خود است. به یاد داشته باشید، به کسی نگو. [نفس نفس] RALPHIE PARKER (روایت): نود ثانیه بعد، من هستم در تنها اتاق در خانه ای که یک پسر از نه می تواند در حفظ حریم خصوصی و رمزگشایی نشستن. آه. "B." [خنده] RALPHIE PARKER (روایت): من به آینده رفت. "E." اولین کلمه است "می شود." بله! در حال حاضر بود در آینده آسان تر است. "U." [خنده] RANDY PARKER: اوه، در آمده، Ralphie. من باید برم! RALPHIE PARKER: من حق را، کارشناسی ارشد. صدای تیز و تند هی. "T." "O." "مطمئن باشید به "" مطمئن باشید که "چه؟ کوچک یتیم آنی چه بود تلاش می گویند؟ "مطمئن باشید که" چه؟ مادر: Ralphie، رندی کردم تا به آن بروید. آیا شما لطفا بیرون می آید؟ RALPHIE PARKER: خوب، مامان! من از سمت راست! RALPHIE PARKER (روایت): من در حال حاضر نزدیک تر شدن. تنش وحشتناک بود. آن چه بود؟ سرنوشت این سیاره ممکن است در تعادل آویزان. مادر: Ralphie، در رندی کردم برای رفتن! RALPHIE PARKER: من در از، برای گریه کردن با صدای بلند! RALPHIE PARKER (روایت): تقریبا وجود دارد! انگشتان من پرواز کرد! ذهن من یک تله فولاد بود. هر منافذ ارتعاش. این تقریبا روشن بود! بله! بله! بله! بله! RALPHIE PARKER: "مطمئن باشید به نوشیدن Ovaltine خود را. " Ovaltine؟ تجاری نکبتی؟ [MUSIC پخش] RALPHIE PARKER: پسر عوضی. [خنده] DAVID J. مالان: به طوری که پس از آن است یک نگاه اجمالی به آنچه که رمزنگاری می توانید برای this-- است از گذشته می نوشند. بنابراین اعلام سریع است. اگر شما آزاد این است جمعه در 13:15 را و به ما بپیوندید برای CS50 ناهار، سر در این URL را در اینجا. اول آمده، اول به طور معمول خدمت می کنند. اما با گذشت زمان، ما مطمئن شوید که در هر کسی که می خواهم به شرکت ممکن است برنامه ریزی و زرنگ. بنابراین رشته ها. ما Zamyla-- آنها شما در حال حاضر ملاقات کرد به احتمال زیاد در مجموعه مسائل 1-- که نام و نام خانوادگی است که در نتیجه املای. و فرض کنید شما نام خود را تایپ به یک برنامه کامپیوتری است که با استفاده از چیزی شبیه به getString. به منظور بازیابی کسانی که از keystrokes، چگونه ما در مورد به نمایندگی از رفتن رشته، یک کلمه، یک پاراگراف، و یا نامه های متعدد مانند این که اینجا هستید؟ ما زمان گذشته صحبت کردیم در مورد اعداد صحیح و مشکلات که بوجود می آیند با سرریز عدد صحیح و شناور مقادیر نقطه و مشکلاتی که در دقت بوجود می آیند. با رشته ها، ما حداقل انعطاف پذیری کمی بیشتر چون strings-- فقط در world-- واقعی می تواند یک طول بسیار خودسرانه. خیلی کوتاه، بسیار طولانی است. اما حتی پس از آن، ما در حال رفتن به که پیدا کردن کامپیوتر گاهی اوقات می تواند اجرا از حافظه و حتی ذخیره یک رشته به اندازه کافی بزرگ است. اما در حال حاضر، اجازه دهید شروع به تجسم یک رشته را به عنوان چیزی در این جعبه اینجا. بنابراین شش مانند جعبه، هر یک از آنها نشان دهنده یک کاراکتر یا "کاراکتر." پس به یاد آورید که "کاراکتر" - ج ساعت یک r-- است یکی از ساخته شده است در نوع داده ها در C. و چه خوب است که شما می توانید استفاده کنید که مرتب سازی بر اساس عنوان یک بلوک ساختمان، یک قطعه پازل، اگر شما خواهد شد، به صورت یک نوع بزرگتر از داده ها است که ما را ادامه تماس بگیرید "رشته ای." در حال حاضر، چه چیزی در مورد فکر کردن مفید در مورد چیزهایی مانند رشته در این راه؟ خب، معلوم است که ما می توانیم در واقع اهرم این ساختار در واقع دسترسی به کاراکترهای منحصر به فرد در یک راه بسیار سر راست است. من قصد دارم به جلو بروید و ایجاد یک فایل به نام "stringzero.c،" اما شما می توانید آن را هر آنچه شما می خواهم. و در وب سایت درس است در حال حاضر این مثال در پیش است، بنابراین شما لازم نیست همه چیز تایپ کردن. و من قصد دارم به جلو بروید و برای اولین بار انجام بی اعتبار اصلی اعضای هیات. و در عرض چند روز، ما شروع به کسی را دست انداختن از هم جدا آنچه از درجه اعتبار ساقط است که در اینجا، به همین دلیل آن را اعضای هیات بعدی را به اصلی، و غیره. اما در حال حاضر، اجازه دهید ادامه برای کپی پیست کنید که. من قصد دارم به اعلام یک رشته به نام های. و من قصد دارم به بازگشت از GetString هر نوع کاربر در. این است رفتن به یک ساده برنامه، هیچ دستورالعمل، من فقط رفتن به کورکورانه انتظار می رود که کاربر می داند چه کاری انجام دهید به نگه داشتن آن ساده است. و در حال حاضر من قصد دارم به یک حلقه for. و در داخل حلقه من من رفتن به اعضای هیات من می شود صفر است. و من، دوباره، فقط یک قرارداد، یک متغیر شاخص برای شمارش، اما من می توانم این هر من می خواهم تماس بگیرید. من قصد دارم به انجام من کمتر than-- به خوبی نام Zamyla است شش حرف طولانی است. بنابراین من قصد دارم به سخت کد وجود دارد که در حال حاضر. و پس از آن من + +. و در حال حاضر در داخل از این فرفری پرانتز من قصد دارم به انجام تابع () printf، و من می خواهم به چاپ یک شخصیت در یک زمان. من می خواهم به استفاده از٪ c برای شاید اولین بار. و پس از آن چاپ شود هر شخصیت در خط خود را دارد. من می خواهم برای قرار دادن بک اسلش کمی نفر وجود دارد. بستن اعلان. و در حال حاضر من می خواهم به انجام کاری کنید. من می خواهم برای چاپ کردن نامه های خاص در رشته، بازدید کنندگان، به عنوان من تکرار از صفر در تا شش. به عبارت دیگر، من می خواهم چاپ کاراکتر i ام از بازدید کنندگان. در حال حاضر چگونه می توانم این را انجام دهید؟ خوب بسیار شبیه به جعبه در این نمایندگی در اینجا، نوع، التماس کردن به مفهوم بوکس نامه در، شما به طور مشابه می توانید انجام دهید که نحوی در C به سادگی مشخص، من می خواهم برای چاپ کردن بازدید کنندگان به شخصیت i ام. با استفاده از براکت در صفحه کلید کامپیوتر شما که در یک صفحه کلید US می باشد به طور کلی بالا کلید بازگشت شما. پس این کاملا درست نیست در عین حال، به عنوان شما ممکن است متوجه شده. اما من قصد دارم به نوع کورکورانه جعل جلوتر است. و من قصد دارم به انجام را رشته 0. اما قبل از من این کار را، بیایید ببینید اگر ما می توانید برخی از اشتباهات رایج پیش بینی نیست. آیا این به کامپایل؟ نه، من از دست رفته یک دسته کامل از همه چیز. کتابخانه من شنیده می شود. بنابراین که فایل هدر ممکن است من می خواهم برای اضافه کردن که اینجا هستید؟ آره. رسید شما نیاز دارید I استاندارد / O [نامفهوم] DAVID J. مالان: بسیار عالی. بنابراین من نیاز به استاندارد I / O. برای چه هدف من می خواهم استاندارد I / O؟ برای printf. بنابراین شامل stdio.h. و شما همچنین پیشنهاد می کنند که من عبارتند از کتابخانه CS50 به چه علت؟ به رشته. بنابراین خواهیم دید که چه کتابخانه CS50 در حال انجام برای ایجاد این تصور از یک رشته است. اما در حال حاضر، شما می توانید فقط فکر می کنم از آن به عنوان یک نوع داده های واقعی. به طوری که به نظر می رسد کمی تمیز کردن. و در حال حاضر من قصد دارم به جلو بروید و در واقع انجام را رشته 0. تهیه و تدوین. پس این خوب است. بنابراین ./string0 به من اجازه زوم تا ما می توانیم بیشتر از نزدیک چه اتفاقی می افتد را ببینید. را وارد کنید. Z-A-M-Y-L-A را وارد کنید. و ما به نام Zamyla چاپ شده است. به طوری که خیلی خوب است. پس به پیش بروید و این برنامه دوباره اجرا شود، و نوع از نام و نام خانوادگی Daven است. تعجب، تعجب. را وارد کنید. دستتون. ما چاپ شده در Daven نمی نام کامل دارد. در حال حاضر این باید در آشکار است به دلیل آنچه نگاه به گذشته، مرتب کردن بر اساس، تصمیم گیری طراحی احمق؟ آره، من سخت کدگذاری شش داخل حلقه من. در حال حاضر من فقط به این دلیل که من می دانستم که نام Zamyla در قرار بود به شش حرف. اما قطعا این است که یک راه حل کلی. پس از آن که معلوم ما به صورت پویا می تواند شکل از طول یک رشته با تماس با یک تابع به نام strlen. باز هم، به عمد به طور خلاصه فقط به نام آن را راحت تر به نوع. اما این مترادف است با گرفتن طول یک رشته. من قصد دارم برای رفتن دوباره به ترمینال من پنجره و دوباره اجرا کامپایلر. اما این به من فریاد. به طور ضمنی اعلام تابع کتابخانه strlen با نوع unsigned int را const-- من گم شده ام. به طور کامل. بنابراین، به خصوص که خود را چشم شروع به چپ چپ به با پیغام خطا مانند این، تمرکز صادقانه در چند کلمه اول است. ما می دانیم که مشکل این است که در خط 8، که در اینجا نشان داد. و آن را در رشته 0.c است. به طور ضمنی اعلام تابع strlen کتابخانه. به طوری که به طور کلی رفتن به یک الگوی از پیغام خطا. به طور ضمنی اعلام چیزی. بنابراین در کوتاه مدت، چه من به نظر می رسید با توجه به خط 8، اینجا انجام داده اند. چه ممکن است راه حل حتی می شود اگر شما هرگز strlen خودتان استفاده کرده اید؟ رسید بخشی از یک کتابخانه متفاوت است؟ DAVID J. مالان: قسمت از یک کتابخانه متفاوت است. پس از آن اعلام شده است، پس به صحبت می کنند. این است که در بعضی از فایل های ذکر شده به غیر از stdio.h و CS50.h. در حال حاضر که در آن است را تعریف؟ صادقانه بگویم، یا شما را به فقط باید این را می دانند کردن بالای سر خود را، یا شما این گوگل و پیدا کردن. یا این را بدانید، من در CS50 باز کرده ام لوازم خانگی برنامه ترمینال، که فقط بزرگ، نسخه کامل روی صفحه نمایش است آنچه در پایین پنجره gedit را دارد. و معلوم است که وجود دارد دستور مشابه موجز، به نام مرد دستی، که در آن اگر شما در نام یک تابع و آمار را وارد کنید، شما نسبتا خواهید به عقب بر گردیم اسناد و مدارک محرمانه. این متن فقط این است که به طور کلی به نظر می رسد چیزی کمی شبیه به این. این کمی قریب به اتفاق در نگاه اول. اما رک و پوست کنده من قصد دارم به اجازه دهید چشمان من چپ چپ به و تنها در بخشی تمرکز من در مورد برای لحظه ای مراقبت. که این است. به نظر می رسد به لحاظ ساختاری مانند چیزی است که من با آن آشنا هستم. در واقع صفحه مرد، پس به صحبت می کنند، به شما خواهد گفت در چه هدر فایل یک تابع مثل strlen تعریف شده است. من می خواهم برای رفتن به عقب در حال حاضر به gedit. و من قصد دارم به جلو بروید و اضافه کردن در اینجا # شامل و فایل را ذخیره کنید. من قصد دارم برای روشن شدن صفحه نمایش با کنترل L اگر شما تعجب شده است. و من قصد دارم به دوباره اجرا را string.0، کامپایل این زمان. ./string.0 Zamyla. که به نظر می رسید به کار به من اجازه دهید به جلو و آن را با داونپورت دوباره. را وارد کنید. و این، بیش از حد، به نظر می رسید کار می کنند. بنابراین ما می توانیم کمی بهتر از این کار، هر چند، ما می توانیم به همه چیز پاکیزه و مرتب شروع تا فقط کمی. و من قصد دارم به واقع معرفی یک چیز دیگر در حال حاضر. من قصد دارم به جلو بروید و ذخیره این در یک فایل متفاوت است. و من قصد دارم به تماس این فایل string1.c فقط سازگار با کد شما قادر خواهید بود برای پیدا کردن آنلاین. و اجازه دهید تمرکز در در دقیقا همان کد. به نظر می رسد که من نوع بوده است از گرفتن برای مسلم این واقعیت است که لپ تاپ من، و به نوبه خود، دستگاه CS50 است مقدار زیادی از حافظه، بسیاری از RAM، بسیاری از بایت از فضای که در آن من می توانم رشته ذخیره کنید. اما واقعیت این اگر من تایپ طولانی به اندازه کافی، و به اندازه کافی به کلید، من می توانم در نوع تئوری در کاراکتر های بیشتری از کامپیوتر من از لحاظ فیزیکی دارای حافظه برای. و این مشکل ساز است. بسیار شبیه به یک int تنها می تواند تعداد تا بالا، در تئوری، شما فقط می توانید خودرا برای امتحان اماده بسیاری از شخصیت های به RAM کامپیوتر شما و یا به صورت تصادفی حافظه دسترسی. بنابراین من در پیش بود این مشکل، حتی هر چند که ممکن است نادر مورد گوشه، پس به صحبت می کنند. اتفاق نمی افتد که اغلب، می تواند رخ دهد. و اگر آن اتفاق می افتد و من نمی پیش بینی و برنامه برای آن، برنامه های من می تواند انجام دهد که می داند چه. یخ، قطع، راه اندازی مجدد، هر آنچه. چیزی پیش بینی شده ممکن است رخ دهد. پس چه من قصد دارم به انجام در حال حاضر، پس واقعا، قبل از من تا کنون کورکورانه استفاده از یک متغیر مانند که اختصاص داده شده است مقدار بازگشتی برخی از عملکرد های دیگر مانند getstring، من قصد دارم به مطمئن شوید که ارزش خود را معتبر است. بنابراین من تنها از پس از خواندن دانم اسناد و مدارک CS50 برای getstring، که در نهایت ما به شما در نقطه، که getstring نماد خاص را برمی گرداند به نام NULL، N-U-L-L در تمام کلاه، اگر چیزی را اشتباه می رود. بنابراین به طور معمول، آن را به تابع یک رشته. اما در غیر این صورت اگر آن را برمی گرداند N-U-L-L-- ما در نهایت خواهید دید آنچه که واقعا means-- که فقط ابزار چیزی بد اتفاق افتاده است. در حال حاضر این بدان معنی است، بسیار شبیه در ابتدا، من می توانم یک شرط در اینجا در C چک، اگر نشانی NULL برابر نیست. بنابراین اگر شما این را دیده ام و نه قبل از آن، این فقط بدان معناست برابر نیست. پس از آن در مقابل است برابر برابر، که، به یاد می آورند، متفاوت از واحد است برابر است که انتساب. بنابراین اگر بازدید کنندگان برابر نیست NULL، تنها پس از انجام من می خواهم برای اجرای این خط کد. بنابراین به عبارت دیگر، قبل از من فرو رفتن در کورکورانه و شروع به تکرار بیش از، و درمان آن به عنوان اگر آن را دنباله ای از است حرف، من قصد دارم به اولین چک، یک دقیقه صبر کنید، قطعا نمی به این مقدار ویژه برابر، NULL؟ از آنجا که اگر از آن است که، همه چیز بد می تواند رخ دهد. و در حال حاضر، فرض چیزهایی که بد اتفاق می افتد به معنای سقوط برنامه های خود را، و شما نمی توانید لزوما بهبود می یابند. پس رک و پوست کنده، آن را زشت به نظر می رسد. این نوع گیج کننده در حال حاضر به نگاه. اما این بیشتر تبدیل خواهد شد قبل از اینکه طولانی آشنا. اما من قصد دارم به پیشنهاد در حال حاضر یکی دیگر بهبود. این بهبود به صحت است. برنامه من در حال حاضر درست تر است، چرا که در موارد نادر که حافظه کافی نیست وجود دارد، من آن را اداره خواهد کرد، و من فقط کاری انجام ندادن. من حداقل نه سقوط خواهد کرد. اما اجازه دهید نسخه نهایی را در اینجا. و یک فایل با نام string2.c. من قصد دارم به رب است که همان کد برای فقط یک لحظه، و من قصد دارم به برجسته این خط، 11، در اینجا، برای فقط یک لحظه. در حال حاضر این واقعیت است که کامپایلر های هوشمند است مثل صدای شیپور می تواند این کار را برای ما حل پشت صحنه بدون ما همیشه دانستن. اما اجازه دهید در مورد این فکر می کنم اساسا به عنوان یک طرح مشکل ساز است. این خط از کد است، البته، گفت، مقداردهی اولیه بعضی از متغیر i به 0. که خیلی سر راست است. و چه دوباره این است بیانیه، در اینجا، من + +، انجام می دهند؟ ما قبل از آن دیده می شود، اما ما واقعا در مورد آن صحبت کنید. رسید افزایش من. DAVID J. مالان: افزایش من. بنابراین در هر تکرار از طریق این حلقه، هر چرخه، شما در حال افزایش من به یک است. بنابراین آن را بزرگتر و بزرگتر می شود، و بزرگتر تا اتمام حلقه. چگونه آن را خاتمه؟ خب در این وسط وجود دارد وضعیتی است که ما قبل از استفاده می شود. شما را دیده ام و در تکمیل فرم سفارش در مجموعه P است. اما آنچه این ضرب المثل است؟ آیا حلقه زیر تا زمانی که من کمتر از چیزی است؟ رسید طول رشته. DAVID J. مالان: طول رشته. پس از آن ترجمه بسیار تمیز به زبان انگلیسی در این معنا. در حال حاضر مشکل این است که هر بار که من تکرار از طریق این حلقه در تئوری، من پرسیدن این سوال. آیا من کمتر از طول رشته ها؟ آیا من کمتر از طول رشته ها؟ در حال حاضر من در هر تکرار تغییر؟ این است. از آنجا که از ++. پس هر تکرار i بزرگتر شدن است. اما بازدید کنندگان بزرگتر شدن، و یا کوچکتر یا تغییر در همه؟ شماره بنابراین در طراحی، یکی از محورهای همراه است که ما سعی می کنیم به بررسی کد در کلاس، این احساس نوع احمقانه است. مثل شما به معنای واقعی کلمه، در هر تکرار از این حلقه درخواست سوال لعنتی دوباره، و دوباره، و دوباره، و به معنای واقعی کلمه آن است هرگز به تغییر. حداقل اگر من لمس نیست و تلاش برای تغییر محتویات است. بنابراین من می توانم کمی بهتر از انجام این کار. و چیزی که من قصد دارم به انجام است اعلام فقط یک من متغیر، اما یک متغیر دوم من خودسرانه، اما مرسوم، آن را به نفر تماس بگیرید. اختصاص نفر به مساوی طول رشته از بازدید کنندگان. و پس از آن در اینجا، من قصد دارم به انجام بهینه سازی کمی باهوش، بنابراین به صحبت می کنند، که در پایان روز هیچ درست بیشتر یا کمتر صحیح هیچ از قبل. اما این یک طراحی بهتر است. در این واقعیت است که من با استفاده از زمان کمتر، چرخه های CPU کمتر، بنابراین به صحبت می کنند، برای پاسخ به همان سوال، اما فقط یک بار. هر گونه سؤال در آن به طور کلی اصل بهبود، می گویند، بازده برنامه؟ آره؟ رسید چرا شما باید انجام دهید استفاده از [نامفهوم]؟ DAVID J. مالان: سوال خوب. پس چرا ما را از ++ در پایان از من به جای شروع از من؟ در این مورد، آن را تا هیچ تاثیر عملکردی است. و به طور کلی، من به تمایل استفاده از عملگر پسوند به طوری که آن را کمی روشن تر به عنوان به هنگام عمل اتفاق می افتد. برای کسانی که نا آشنا است، دیگری وجود دارد اظهارات موجب آن شما می توانید از من انجام ++. این عملکرد معادل در این مورد چرا که هیچ چیز دیگری وجود دارد که در اطراف incrementation. اما شما می توانید آمد تا با موارد و خط کد که در آن است که باعث تفاوت. بنابراین به طور کلی، ما نمی حتی در مورد این صحبت کنید. از آنجا که رک و پوست کنده، آن را می سازد شما کد جذاب، و نوع حقه باز، و حرف کمتر. اما واقعیت این است خیلی سخت تر، من فکر می کنم، حتی برای من به بسته بندی کردن ذهن من در اطراف آن گاهی اوقات، ترتیب عملیات. بنابراین به عنوان یک به کنار، اگر شما واقعا این را دوست ندارد، حتی اگر این نوع از سکسی به دنبال، شما همچنین می توانید انجام دهید من + = 1، که نسخه زشت از است همان ایده برای incrementation پسوند. من این و به شما می گویند باید سرگرم کننده از آن را، اما به شما خواهد آمد برای دیدن کد به عنوان چیزی قبل از بلند زیبا. [خنده] DAVID J. مالان: راست؟ آره. سوال در وسط. رسید آیا شما نیاز به می گویند اعضای هیات نفر؟ DAVID J. مالان: شما انجام نیاز نیست که می گویند اعضای هیات نفر. بنابراین چون ما در حال حاضر گفت: اعضای هیات، شما لازم نیست به آن را دوباره می گویند. گرفتن این است که (n) باید شود نوع داده همانند من. به طوری که فقط یک در زیر است. آره. رسید می توانید به بیش از به چاپ شخصیت براکت من دوباره؟ DAVID J. مالان: کاملا. بنابراین٪ ج، از گذشته به خاطر بیاورید زمان، فقط یک حفره یا سوراخ می باشد. این بدان معنی است قرار دادن یک کاراکتر در اینجا. بک اسلش نفر، البته، فقط ابزار یک خط قرار داده است. به طوری که فقط برگ، در حال حاضر، این قطعه از نحو جدید. و این به معنای واقعی کلمه می گفت، با شتاب رشته نام و به دریافت آن شخصیت i ام، پس به صحبت می کنند. و من در حفظ و گفت کاراکتر i ام چرا که در هر تکرار از این حلقه آن را به عنوان هر چند ما در حال چاپ از، اولین بازدید کنندگان براکت 0، به عنوان یک برنامه نویس ممکن است بگویید. سپس این براکت 1، پس از آن بازدید کنندگان براکت 2 و سپس 3، سپس 4. اما البته آن را یک متغیر است، بنابراین من فقط آن را بیان با من. کلید، هر چند، آن است که بپذیریم، به خصوص اگر شما را نمی گرفتم شده است acclimating به این دنیا برنامه نویسی، که در آن ما همه به نظر می رسد از صفر شمارش، باید شروع به شمارش از صفر در حال حاضر. از آنجا که رشته ها، شخصیت اول، z در Zamyla است برای بهتر یا بدتر شدن رفتن به زندگی می کنند در محل عدد صفر. همه حق است، بنابراین اجازه دهید من را ما به اینجا به Zamyla و ببینید چه چیزی واقعا در رفتن در زیر هود. پس این مفهوم ریخته گری نوع وجود دارد. شما در واقع ممکن است با این بازی در حال حاضر، شاید برای هکر نسخه P یک مجموعه. اما ریخته گری نوع فقط به اشاره توانایی در C و برخی از زبان های دیگر برای تبدیل یک نوع داده را به دیگری. در حال حاضر چگونه ممکن است ما این را ببینید بسیار سرراست؟ پس این، فراخوان، آغاز است از الفبای انگلیسی. و چهار چوب، به یاد می آورند، از مثل یک هفته پیش ASCII است. کد استاندارد آمریکایی جهت تبادل اطلاعات. کدام فقط یک راه واقعا طولانی است گفت: یک نگاشت از نامه ها به اعداد، و از اعداد به حروف. پس از M در اینجا، نقطه نقطه نقطه، خط با، فراخوان، عدد اعشاری 65 در بالا. و ما از بحث نیست در مورد این صراحت، اما مطمئنا شبیه وجود دارد اعداد برای حروف کوچک. و در واقع، وجود دارد. جهان تصمیم گرفت چند سال پیش که کمی، کوچک، در حال رفتن به 97. و کمی ب است که به 98، و غیره. و برای هر کلید دیگر در صفحه کلید خود را، وجود دارد برای رفتن به یک الگوی مشابهی از بیت. یا به طور برابر، یک عدد دهدهی. بنابراین سوال در دست، پس از آن، ما این است که چگونه می تواند در واقع این را زیر هود؟ من می خواهم به بیش از رفتن به gedit دوباره. و نه از نوع این یکی، از ابتدا، من قصد دارم به جلو بروید و فقط باز کردن چیزی از کد امروز به نام ASCII صفر است. و ASCII صفر به نظر می رسد مثل این. بنابراین اجازه دهید ذهن ما بسته بندی کردن در اطراف این. بنابراین برای اولین بار، من نظر کرده اید کد، که خوب است. از آنجا که آن را به معنای واقعی کلمه به من گفتن چه انتظار می رود، نمایش یک نقشه برای حروف بزرگ. حالا من کاملا نمی دانند چه من منظور از آن، پس بیایید استنباط. به زبان انگلیسی، شاید تا حدودی متخصصین و اهل فن به زبان انگلیسی، چه خط 18 به نظر می رسد برای ما انجام می شود؟ فقط خط 18. آن چه القا؟ چه آن رفتن به پا زدن کردن که اینجا هستید؟ رسید حلقه. DAVID J. مالان: حلقه. و چند بار است که رفتن به تکرار؟ رسید [INTERPOSING صدای] شش بار. DAVID J. مالان: نه شش بار. رسید 26 بار. DAVID J. مالان: 26 بار. آره، ببخشید. 26 بار. چرا؟ خوب، آن را کمی عجیب است، اما من شمارش را از 65 آغاز شده ام. کدام عجیب است، اما اشتباه است. این بد در حرف نیست. و من انجام داد که تنها زیرا، برای این مثال، من نوع پیش بینی که سرمایه 65 بود. در حال حاضر این است که ظریف ترین نیست راه برای انجام این کار، به نوع کد سخت ارزش باطنی است که هیچ کس است که تا به حال انتظار می رود که به یاد داشته باشید. اما در حال حاضر، توجه کنید که من انجام این کار را از طریق 65 به اضافه 26. از آنجا که ظاهرا من حتی نمی خواهم برای انجام محاسبات به سر من. بنابراین من به شما اجازه کامپایلر این کار را انجام. اما پس از آن در هر حلقه، هر تکرار از حلقه، من افزایش من. بنابراین در حال حاضر این به نظر می رسد کمی مرموز. اما ما باید ساختمان اولیه بلوک های که با آن به درک این. ٪ ج فقط یک حفره یا سوراخ برای یک کاراکتر است. ٪ من یک حفره یا سوراخ یک int است. و معلوم است که با استفاده از این نحو جدید، این پرانتز، بنابراین به صحبت می کنند، بنابراین یک نوع داده در داخل پرانتز، من می توانم کامپایلر را مجبور به درمان من نمی یک عدد صحیح به عنوان یک کاراکتر است، اما. در نتیجه نشان دادن شخصیت معادل این تعداد. در حال حاضر در اینجا، این کد است که تقریبا یکسان هستند. من فقط می خواستم به فوق العاده صریح و روشن این واقعیت است که من در 97 شروع، که کوچک. در را از طریق 26 حرف است. و من doing-- دوباره، ریخته گری من، پس به صحبت می کنند. و یا نوع ریخته گری من، پس به صحبت می کنند. از یک int را به یک کاراکتر. بنابراین نتیجه نهایی است برای رفتن به، رک و پوست کنده، اطلاعات ما در حال حاضر می دانیم. من قصد دارم به اسکی-0 dot-- ج نقطه نیست. توجه، شما احتمالا ساخته شده است که اشتباهی من فقط به طور تصادفی. را اسکی-0. حالا من قصد دارم به انجام ./ascii-0. من زوم، و متاسفانه آن را به حرکت کردن صفحه نمایش. اما ما تمام نمودار که در آن ببینید نقشه 97، نقشه ب 98، و اگر ما تا رفته بیشتر A، البته، نقشه ها تا 65. پس این است که تنها می گویند که آنچه که ما موعظه شده است، این هم ارزی وجود دارد، در واقع در مورد واقعیت است. بنابراین اصلاح سریع از این. اجازه بدهید باز کردن اسکی-1.c. و متوجه این باهوش، مرتب کردن بر اساس از، روشن شدن این. این اسکی-1.c است، و متوجه این چیز دیوانه. و این واقعا به قلب می شود از آنچه کامپیوتر انجام می دهند. هر چند که ما انسان را از نظر letters-- به حساب نمی من شروع به فکر کردن، تمام حق و سپس ب، و استفاده از آن برای شمارش اشیاء فیزیکی. شما قطعا می توان گفت که من می خواهم مقداردهی اولیه بعضی از متغیر به نام c-- اما من می توانستم این anything-- نام تا ج است به سرمایه A. مقداردهی اولیه از آنجا که در پایان روز، کامپیوتر مهم نیست که شما چه ذخیره سازی، آن را تنها مراقبت چگونه می خواهید حاضر است که اطلاعات. چگونه می خواهید کامپیوتر برای تفسیر که الگوی بیت؟ بنابراین این چیزی است که من نمی به طور کلی توصیه می کنم انجام می دهند. این واقعا فقط برای مثال به این انتقال است که شما کاملا می تواند مقداردهی اولیه یک عدد صحیح به یک کاراکتر. از آنجا که در زیر هود از یک کاراکتر، البته، فقط یک عدد از 0 تا 255 است. بنابراین شما مسلما می تواند در آن را داخل یک int. و آنچه از این نیز نشان می دهد این است که ما می توانید از یک تبدیل نوع خود را به دیگری، در اینجا، در نهایت چاپ همین. و در واقع، این من را حل خواهد online-- بود به این می گویند، دوباره، در اینجا. اجازه بدهید از این رو تمیز آنلاین، و ما در خرید آنلاین را به عنوان مورد نیاز است، چه وجود دارد در نظر گرفته شده است. OK. بنابراین به عنوان مثال در حال حاضر شامل آخرین و ب و پس از آن خواهیم چیز یک درجه. بنابراین با و ب و ج در سرمایه و هم ارزی آن، اجازه دهید نگاهی به این مثال، در اینجا. یکی دیگر از نمونه کد. ما یکی که باز خواهیم کرد در حال حاضر ساخته شده است، بنابراین ما لازم نیست آن را تایپ کنید همه از ابتدا. و اطلاع در پیش بینی ما با استفاده از هدر های متعدد فایل، که در میان است دوست جدید ما، string.h. در حال حاضر این به نظر می رسد، در ابتدا نگاه، کمی مرموز. اما اجازه دهید ببینیم که اگر ما نمی تواند استدلال از طریق چه خبر است اینجا. اول من یک رشته را از کاربر، و من که رشته را در یک متغیر به نام. کپی رب از قبل. در خط 22، I ظاهرا هستم انجام دقیقا همان چیزی است من یک لحظه پیش، من تکرار بیش از شخصیت های است. و ترفندهای جدید در اینجا با استفاده از طول رشته، بهینه سازی جزئی ذخیره سازی طول رشته در n، به جای تماس دوباره strlen، و دوباره، و دوباره. و فقط به چک کردن که من کمتر از n است. حالا در اینجا، همه چیز کمی جالب است. اما این تنها یک برنامه این ایده جدید است. چه به زبان انگلیسی می کند براکت های من نشان می دهد؟ رسید شمارش هر شخصیت [نامفهوم]. DAVID J. مالان: شمارش هر یک از شخصیت. و حتی بیشتر به طور خلاصه، بازدید کنندگان براکت من، چه چیزی؟ آیا شما می گویند. نه به شما را در نقطه ای اینجا. رسید Well-- DAVID J. مالان: بنابراین اگر کلمه is-- اگر رشته Zamyla، که starts-- است رسید --you با برخورد شخصیت separately-- DAVID J. مالان: خوب. دقیقا. نماد براکت شما اجازه می دهد تا برای دسترسی به هر یک از شخصیت به صورت جداگانه، بنابراین بازدید کنندگان براکت 0 در حال رفتن به اولین حرف رشته است. بازدید کنندگان براکت 1 است برای رفتن به دوم، و غیره. بنابراین سوال من می پرسم، در اینجا، در این شرایط چه چیزی است؟ آیا شخصیت i ام از بازدید کنندگان بیشتر از یا برابر به کوچک؟ و به چه معنی است، در اینجا، با آمپرسندهای کاربردی دو؟ رسید (با هم): و. DAVID J. مالان: و. این فقط به این معادل است. و یک کلمه کلیدی در C نیست، شما را به استفاده، آزاردهنده، علامت آمپرسند. و این، برعکس، درخواست است بازدید کنندگان i ام شخصیت کمتر از یا مساوی به کوچک الف؟ و دوباره، در اینجا است که درک زمینه پیاده سازی یک کامپیوتر را حس می کند. توجه کنید که، حتی اگر من نقطه نقطه نقطه بیش از وجود دارد، به نظر می رسد مانند یک طریق z در کوچک هستند تمام ارزش های به هم پیوسته از 97 تا. و همین کار را برای بزرگ شروع از 65. بنابراین غذای آماده، پس از آن، این است که به زبان انگلیسی، چگونه شما را توصیف خط 24 در حال انجام است؟ آره؟ رسید در روز 24 آن را چک کنید تا ببینید آیا هر یک از شخصیت کوچک است. DAVID J. مالان: این چک کردن اینکه آیا هر یک از شخصیت حروف کوچک می باشد. بنابراین حتی بیشتر موجز است، شخصیت i ام از بازدید کنندگان کوچک؟ که همه ما بیان اینجا منطقی، کمی cryptically، اما در نهایت بسیار سرراست. آیا s آواتار i ام کوچک شخصیت؟ اگر چنین است، و در اینجا است که همه چیز یک ذهن کمی خم برای فقط یک لحظه، اگر چنین است، به جلو و چاپ کردن یک شخصیت. پس این فقط یک حفره یا سوراخ است، اما آنچه شخصیت؟ چرا دارم اون کار ها براکت من منهای این بیان اینجا؟ خوب در اینجا متوجه الگوی. تعداد واقعی مهم نیست خیلی. اما توجه کنید که 97 است چگونه دور از 65؟ رسید 32. DAVID J. مالان: 32. 98 از 66 چگونه دور است؟ رسید 32. DAVID J. مالان: ج کوچولو از بزرگ C؟ 32. پس 32 گره از وجود دارد یک نامه را به دیگری. پس رک و پوست کنده I، می تواند ساده این است که به. اما پس از آن من نوع سخت برنامه نویسی این درک سطح پایین که هیچ خواننده است که تا به حال رفتن به درک. من می خواهم به آن تعمیم به عنوان، I می دانیم که حروف کوچک بزرگتر است. من می دانم که با حروف بزرگ هستند مقادیر کوچکتر، از قضا. اما این به طور موثر به معادل گفت: کم کردن 32 از بازدید کنندگان پایه من. بنابراین در چارچوب این نامه ها، اگر نامه اتفاق می افتد که، کوچک ، و من تفریق 32، چه تأثیری که، ریاضی، در کوچک؟ رسید Capitalizes-- DAVID J. مالان: این سرمایه گذاری. و در واقع، این است که چرا ما برنامه است که به نام سرمایه گذاری صفر است. این برنامه هر دو سرمایه گذاری یک نامه، پس از بررسی اگر آن را در واقع یک حرف کوچک. در غیر این صورت، در خط 30، آنچه را می توانم در صورت انجام این یک حرف کوچک نیست که من هستم به دنبال در یک خاص تکرار در حلقه. فقط آن را چاپ کنید. پس مسائل را تغییر دهید که حتی کوچک نیست. محدود کردن خود به کمی از الف کم است. در حال حاضر این است که نسبتا محرمانه. اما در پایان روز، این این است که چگونه ما، یک بار پس از یک زمان، حال برای پیاده سازی همه چیز. اگر من به جای باز سرمایه گذاری یک، آه خدا تشکر می کنم. یک تابع وجود دارد به نام به بالا است که می تواند همه چیز را ما فقط در سطح نسبتا کم است. در حال حاضر به بالا جالب است دلیل آن است که در یک فایل اعلام کرد، و شما فقط این را می دانند با بررسی اسناد و مدارک، و یا گفته، می گویند، در کلاس، که در آن آن وجود دارد، در یک فایل به نام ctype.h. پس این یکی دیگر از دوستان جدید ما است. و به بالا دقیقا آنچه از نام آن پیداست. شما می توانید با تصویب در، به عنوان آرگومان، بین این پرانتز، برخی از شخصیت. من قصد دارم به تصویب در شخصیت i ام از این با استفاده از نماد های جدید فانتزی ما شامل براکت مربع است. ولی یک حدس است، چه از بازگشت است ارزش به بالا ظاهرا رفتن به؟ و حرف بزرگ. و حرف بزرگ. بنابراین اگر من در کوچک عبور کند، امیدوارم، با تعریف از به بالا، آن را به بازگشت بزرگ A. در غیر این صورت، اگر آن را به حروف کوچک در نمی در وهله اول، من فقط آن را چاپ کنید. و در واقع، متوجه دوستان دوم اینجا. نه فقط به بالا وجود دارد، اما پایین تر است، که در واقع پاسخ به این سوال برای من. در حال حاضر این چیزها هر کس نوشته است، 10S سال پیش، شما می دانید چه؟ اجرا به بالا و است کاهش استفاده از کد شبیه به این. اما باز هم، سازگار با این ایده انتزاع دور، نوع، سطح پایین تر جزئیات پیاده سازی. و ایستاده بر دوش مردم که قبل از ما آمد، با استفاده از توابع مانند به بالا و پایین است، که زیبا و به اندازه کافی می باشد به سادگی نام برای گفتن آنچه انجام می دهند، می باشد یک نمونه فوق العاده را به اتخاذ. در حال حاضر، آن را به نظر می رسد که اگر من به عنوان خوانده شده صفحه مرد برای، می گویند، به بالا، من چیز دیگری را یاد بگیرند. بنابراین مرد toUpper. این کمی خسته کننده باشد. اما توجه، در اینجا است که اشاره ای است فایل هدر که من باید استفاده کنید. از سوی دیگر، به دلیل این گمراه کننده است، تابع با استفاده از نوع داده int به جای کاراکتر دلایل بررسی خطا. اما ما شاید می آیند بازگشت به آن در آینده است. اما توجه کنید، در اینجا، به تبدیل بالا حرف c به حروف بزرگ در صورت امکان. به طوری که خیلی سر راست است. و در حال حاضر اجازه دهید که کمی مشخص تر. اجازه دهید در بخشی از نگاه صفحه مرد در مقدار بازگشتی. مقدار برگردانده شده است که از نامه تبدیل شده است. یا ج، اگر تبدیل امکان پذیر نبود، که در آن c ورودی اصلی است. که من از اینجا می دانید، از این استدلال به به بالا. پس چه غذای آماده از این است؟ مقدار برگردانده شده است که از نامه های تبدیل شده، یا ج، نامه اصلی، در صورت تبدیل امکان پذیر نیست. چه بهبود می توانید به همین دلیل من را به طراحی کد من؟ آره؟ رسید شما می توانید دیگری را حذف کنید. DAVID J. مالان: من می توانم حذف این بیانیه دیگری، و نه فقط بیانیه دیگری. رسید شما می توانید حذف [نامفهوم]. DAVID J. مالان: من می توانم حذف کل و چنگال در جاده، اگر چیز دیگری در دسترس نباشد. پس در واقع، به من اجازه باز کردن نسخه نهایی این، سرمایه گذاری 2 و توجه کنید که چگونه تنها، اگر شما، علاقه، کد حال حاضر گرفتن، در که من از برخی از کاهش اید هفت و یا پس خطوط به چهار، قابلیت های که من در نظر گرفته شده به سادگی با تماس به بالا، عبور از در کنندگان براکت من، و چاپ از، با حفره یا سوراخ٪ ج، که شخصیت خاص است. در حال حاضر مسلما، یک اشکال وجود دارد، یا حداقل خطر ابتلا به اشکال، در این برنامه است. پس فقط به بازگشت به غذای آماده قبل از آن، آنچه که باید من احتمالا همچنین انجام در این برنامه، آن را به قوی تر، به طوری که هیچ راهی وجود دارد که می تواند سقوط، حتی در موارد نادر؟ رسید اطمینان حاصل کنید که آن را NULL نیست. DAVID J. مالان: اطمینان حاصل کنید که آن را NULL نیست. پس در واقع، به این فوق العاده مناسب، من باید چیزی شبیه به انجام، اگر NULL است، پس از آن نیست جلو بروید و اجرا این خط کد، که من پس از آن می تواند دندانه دار مانند آن، و سپس در بند نزدیک من قرار داده است. خیلی خوب تساوی با هم از این دو ایده. آره؟ رسید می توانید استفاده کنید در حالی که حلقه، به جای؟ DAVID J. مالان: آیا I انجام کارهای در حالی که حلقه؟ رسید --you خواهید مطمئن شوید که شما در واقع [نامفهوم]. DAVID J. مالان: آیا شما با استفاده از کارهای در حالی که؟ پاسخ کوتاه، هیچ. از آنجا که شما در مورد به هستی معرفی مورد گوشه دیگر. اگر رشته است از طول صفر است. اگر به عنوان مثال، من فقط ضربه را وارد کنید، تا کنون که بدون تایپ Zamyla. من قصد دارم به شما دست به عقب واقعی رشته، همانطور که ما در نهایت خواهید دید، است که صفر حرف می باشد. این هنوز یک رشته، آن را فقط فوق العاده کوتاه است. اما اگر شما استفاده از یک انجام در حالی که، شما به کورکورانه سعی کنید برای انجام کاری با احترام به آن رشته، و هیچ چیزی در رفتن وجود داشته باشد. رسید: خوب، اگر شما انجام انجام [نامفهوم] در حالی که s-- DAVID J. مالان: آه من، نگه داشتن گرفتن یک رشته از کاربر. پاسخ کوتاه، شما می تواند و نگه داشتن pestering آنها به شما یک رشته که را به اندازه کافی کوتاه به جا در حافظه است. کاملا. من فقط به انتخاب کرد. اگر آنها نمی رشته من به من بدهد می خواهم، من ترک، من دادن تا. اما کاملا، برای این منظور، شما می توانید به انجام این کار. بنابراین هدر فایل های کتابخانه که ما در حال حاضر آشنا با این، در اینجا. استاندارد I / O، CS50.h، string.h، ctype.h، و وجود دارد، در واقع، دیگران. برخی از شما را کشف کرده اند کتابخانه ریاضی در math.h. اما اجازه دهید به شما معرفی، در حال حاضر، به این منبع که کارکنان CS50، Davin، و راب، و گیب خاص با هم قرار دارند. که به زودی در پیوند دارند وب سایت درس. این CS50 مرجع نامیده می شود. که فقط به شما سریع را طعم و مزه آن، کار می کند به شرح زیر است. اجازه بدهید من به reference.cs50.net. شما در دست چپ را ببینید سمت یک لیست قریب به اتفاق از توابع است که با ج آمده است. اما اگر مراقبت از من، برای لحظه ای، در مورد چیزی مثل strlen، من می توانم آن وجود دارد را تایپ کنید. این فیلتر کردن لیست فقط به آنچه که من در مورد مراقبت. من قصد دارم به آن را کلیک کنید. و در حال حاضر در سمت چپ، شما خواهید دید آنچه که ما امیدواریم ساده تر، انسان است توضیح دوستانه چگونه این تابع کار می کند. بازگرداندن طول یک رشته. در اینجا خلاصه ای است، اینجا است که چگونه شما استفاده از آن در شرایط فایل هدر، و در شرایط از آنچه تابع به نظر می رسد از لحاظ استدلال آن است. و سپس در اینجا، بازده طول یک رشته. اما برای کسانی از شما راحت تر، شما می توانید در واقع کلیک کنید راحت تر است، و محتویات این صفحه، در حال حاضر، تغییر خواهد کرد به مقادیر پیش فرض از آنچه شما با استفاده از صفحه مرد را دریافت کنید. به عبارت دیگر، CS50 مرجع ساده سازی است از صفحات man توسط کارکنان، برای دانش آموزان است. به خصوص، آن کمتر و راحت و در میان، به طوری که شما لازم نیست که سعی کنید به بسته بندی کردن ذهن خود را در اطراف، رک و پوست کنده، ترکیب نسبتا مرموز و اسناد مدتی. پس باشید که در ذهن در روزهای آینده. بنابراین در اینجا، دوباره، Zamyla است. بیایید به یک سوال که بخواهید کمی انسانی تر در دسترس است. با تشکر از چانگ، که شده است چاپ فیل تر بدون توقف برای چند روز گذشته. ما یک فرصت برای دادن حداقل یکی از آنها را دور. اگر ما می تواند فقط یک داوطلب دریافت به در آمد تا به منظور جلب بر روی صفحه نمایش. چگونه در مورد در اینجا؟ بیا تا. نام شما چیست؟ ALEX: الکس. DAVID J. مالان: الکس. خوب. الکس، در آمده است. ما خواهید دید شما دست خط بر روی صفحه نمایش است. همه حق است، ملاقات با شما خوشبختم. ALEX: خوب شما شما را ملاقات کند. DAVID J. مالان: خوب. بنابراین، ورزش فوق العاده ساده است. نوار بالا به نه دریافت یک فیل است. شما در بازی نقش از getstring. و من قصد دارم به تو بگویم رشته ای که شما بدست. و فرض کنید که شما، getstring، نامیده شده اند. و انسان، مثل من است، تایپ در Zamyla، Z-A-M-Y-L-A. فقط به جلو و ارسال Zamyla در صفحه نمایش به عنوان اینکه شما آن را بدست و در جایی ذخیره آن در حافظه است. اتاق ترک برای چه چند خواهد شد words-- دیگر که OK، ادامه دهم. [خنده] بنابراین Zamyla، عالی. بنابراین در حال حاضر فرض کنید که شما، getstring، دوباره نامیده می شود. و در نتیجه، من به شما فراهم می کند، در صفحه کلید، با ذکر نام، بلیندا. خوب. و در حال حاضر getstring زمان بعدی است نامیده می شود، من در چیزی شبیه به گیب نوع، G-A-B-E. شما واقعا به مصرف به قلب حافظه با دسترسی تصادفی. که به رسم همه چیز به طور کامل به صورت تصادفی. OK. [خنده] ALEX: با عرض پوزش دست خط من بد است. DAVID J. مالان: نه، این OK. و چگونه در مورد راب، R-O-B. OK. خوب. بنابراین من به شما پیش بینی نمی نوع ذخیره کردن چیزهایی در این راه. اما ما می توانیم این کار را. پس چگونه شما در مورد تخمگذار رفتن از این کاراکتر در حافظه؟ به عبارت دیگر، اگر ما از فکر می کنم این صفحه نمایش سیاه و سفید مستطیل شکل به عنوان نمایندگی RAM یا حافظه کامپیوتر است. و به یاد آورید که RAM فقط یک دسته کامل از بایت، و کلمه در ادامه متن یک دسته کامل از بیت. و بیت به نحوی اجرا، به طور کلی با نوعی از برق در سخت افزار. به طوری که مرتب سازی بر اساس است لایه بندی ما در مورد صحبت کردیم و هم اکنون می توانید آن را حق مسلم. چگونه شما در مورد رفتن تصمیم گیری که در آن به ارسال راب در مقابل گیب در مقابل بلیندا در مقابل Zamyla؟ ALEX: من فقط آن را در انجام سفارش که شما به من گفت. DAVID J. مالان: و این درست است. اما آنچه حکومت که در آن شما را نام بلیندا و نام گیب است؟ ALEX: هیچ چیز؟ DAVID J. مالان: [می خندد] به طوری که کار می کند، که خوب است. بنابراین کامپیوتر کوچک منظم بیشتر از آن. و به این ترتیب زمانی که ما implement-- وجود دارد باقی بماند فقط برای moment-- زمانی که ما در واقع پیاده سازی چیزی شبیه getstring در یک کامپیوتر، Zamyla ممکن است گذاشته از تقریبا مثل شما بر روی صفحه نمایش انجام داد، وجود دارد. و آنچه مهم این است که متوجه در اینجا، چه الکس انجام داد، است نوع علامت گذاری وجود دارد در میان هر یک از این کلمات، درست است؟ شما نمی نویسند Z-A-M-Y-L-A-B-E-L-I-N-D-A-G-A-B-- به عبارت دیگر، این به نوعی وجود دارد از علامت گذاری که به نظر می رسد، مرتب کردن بر اساس، فاصله تصادفی بین این کلمات مختلف است. اما این خوب است، چرا که ما انسان ها هم اکنون می توانید تجسم که این چهار سیم های مختلف. این فقط یک دنباله نمی از تعداد زیادی از شخصیت های. بنابراین یک کامپیوتر، پس از آن، در عین حال، ممکن است یک رشته مانند Zamyla را، قرار دادن هر یک از این نامه ها در داخل یک بایت از حافظه است. اما این تعداد بسیار بزرگتر است، البته، از شش کاراکتر باشد. یک دسته کامل از RAM وجود دارد. و به این ترتیب از این پس، این شبکه ای از جعبه است که رفتن برای نشان دادن آنچه الکس فقط در اینجا بر روی صفحه نمایش انجام داد. و در حال حاضر، الکس، ما می تواند به شما ارائه آبی یا یک فیل پرتقال از چانگ. ALEX: من یک فیل آبی است. DAVID J. مالان: A فیل آبی. بنابراین دور بزرگ از کف زدن، اگر ما می تواند، برای الکس اینجا. [تشویق حضار] ALEX: با تشکر از شما. DAVID J. مالان: با تشکر از شما. بنابراین غذای آماده است که، حتی اگر الگوی نوع در طول زمان تغییر می کند، در اینجا در هیئت مدیره بود، این وجود دارد علامت گذاری میان رشته های مختلف که الکس برای ما است. حالا کامپیوتر، رک و پوست کنده، می تواند همین کار را انجام دهید. آنها می تواند نوع با صدای تلپ رشته در هر نقطه از RAM. تا اینجا، اینجا، در اینجا، در اینجا. آنها دقیقا همان است که می تواند انجام دهد. اما، البته، که احتمالا بهترین برنامه ریزی است. درست است؟ اگر من حفظ پرسیدن الکس به دریافت نام، احتمالا او می خواهم قرار دادن برخی بیشتر اینجا، شاید تا در اینجا، اینجا، اینجا، در نهایت بیش از اینجا. اما با کمی بیشتر برنامه ریزی، به طور قطع، ما می تواند همه چیز از پاک تر بود. و در واقع، این چیزی است که یک کامپیوتر انجام می دهد. اما گرفتن این است که اگر رشته بعدی من پس از Zamyla چیزی است مانند بلیندا، پیشنهاد که در آن ما ممکن است ارسال نامه ب با توجه به این شبکه؟ به کجا می خواهد شما را به؟ در سمت راست از، زیر الف، زیر؟ اولین غرایز شما چه خواهد بود؟ رسید در زیر الف. DAVID J. مالان: بنابراین در زیر الف. و این بسیار ساده، درست است؟ این نوع شسته و رفته است، آن چیزی است که ما انجام می دهیم در صفحه کلید زمانی که ما آمار را وارد کنید، و یا یک ایمیل به هنگام لیست گلوله ای از همه چیز. اما واقعیت این است که کامپیوتر سعی می شود کارآمد تر، و خودرا برای امتحان اماده قطعا به همان اندازه داده ها را به RAM که ممکن است، به طوری که شما هر بایت هدر ندهید. به طوری که شما را هدر ندهید هر صفحه نمایش املاک و مستغلات. و مشکل این است که اگر ما به معنای واقعی کلمه قرار داده نامه ب پس از یک، چگونه ما رفتن می دانیم که در آن نام Zamyla را به پایان می رسد و نام بلیندا آغاز می شود؟ بنابراین شما انسان فقط پیشنهاد، خوب، ضربه کلید را وارد کنید، در اصل. آن را در زیر قرار دهید. و یا حتی به عنوان الکس انجام داد، تنها نوشتن شروع نام بعدی زیر از گذشته، و در زیر آن یکی، و سپس در زیر آن یکی. این یک نشانه بصری است. کامپیوتر نشانه های بصری دیگر، اما کمی موجز است. این شخصیت بد بو است. بک اسلش 0 است که شاید یادآور بک اسلش نفر، و به این ترتیب، در حال حاضر. توالی های گریز خاص. بک اسلش 0 راه است به نمایندگی از هشت بیت صفر در یک ردیف. 0000 0000. راه را به شما بیان است که به آمار تعداد صفر در صفحه کلید خود را، چرا که در واقع این است که کاراکتر ASCII. آن را مانند یک تعداد به نظر می رسد، اما است که در واقع یک عدد دهدهی که نشان دهنده دایره ای علامت یا نشان حجاری، سبک حروف مدور. در همین حال، بک اسلش صفر به معنی، به معنای واقعی کلمه قرار دادن هشت صفر بایت در اینجا برای من. پس این است که تا حدودی خودسرانه. ما می توانیم هر الگوی استفاده می شود از بیت، اما جهان تصمیم گرفت چند سال پیش، که برای نشان دادن پایان یک رشته در حافظه، فقط با قرار دادن یک دسته کامل از صفر. از آنجا که ما قادر به شناسایی آن است. حالا که بدان معنی است که هیچ نامه ای از الفبای را می توان با صفر نشان داده شود. اما این OK، ما در حال حاضر دیده می شود که ما با استفاده از 65 در 97 در بالا. ما در هر نقطه می کنید نزدیک به همه صفر. بنابراین بلیندا در حافظه کامپیوتر در واقع رفتن به صفحه بروید. من آن را به رنگ زرد کشیده شده فقط توجه ما را به رسم آن. و توجه بیش از حد، این کاملا خودسرانه است. من آن را به عنوان یک شبکه کشیده ام. مانند، RAM فقط برخی از جسم فیزیکی است. این لزوما باید سطر و ستون، به خودی. این فقط یک دسته کامل از بایت اجرا شده در سخت افزار به نحوی. اما اگر بعد از بلیندا I تایپ در نام گیب است، او دارد برای پایان دادن به در اینجا در حافظه، و اگر من در نام Daven را تایپ شده، به عنوان مثال، او به پایان دادن به اینجا. و من می توانم به ادامه ارسال نام و حتی بیشتر. متاسفانه، اگر به تلاش I ارسال نامه نام فوق العاده طولانی، من در نهایت ممکن است از حافظه اجرا شود. که در این صورت، getstring است رفتن به بازگشت NULL، به عنوان ما گفت. اما خوشبختانه، حداقل در این تصویری در اینجا، ما می کنید که کاملا دور. حالا چه خوب است که این ایده کلی از درمان همه چیز به عنوان در جعبه است نماینده یکی از ویژگی های C و بسیاری از زبان ها، شناخته شده به عنوان آرایه. آرایه نوع دیگری از داده ها می باشد. این یک ساختار داده ها اگر شما خواهد شد، به. ساختار به معنای آن است که واقعا، نوع، به دنبال مانند یک جعبه، حداقل در چشم ذهن خود را. آرایه یک مجموعه به هم پیوسته است دنباله ای از انواع داده های یکسان، پشت به پشت به پشت به پشت. بنابراین یک رشته، در سایر کلمات، آرایه ای از کاراکتر است. آرایه ای از کاراکتر باشد. اما معلوم شما می توانید آرایه ها از مجموعه ای از همه چیز. در واقع، ما می توانیم حتی قرار دادن اعداد در یک آرایه. بنابراین شکل است که در آن ما قصد داریم به شروع اعلام این داده ها ساختار شناخته شده به عنوان آرایه همچنین قصد استفاده از براکت مربع است. اما این براکت در حال رفتن به معنی های مختلف در این زمینه. و اجازه دهید آن را به عنوان شرح زیر است. فرض کنید که من باز تا یک فایل جدید در اینجا. و من این ذخیره به عنوان ages.c. و من این را در پوشه من در اینجا ذخیره کنید. و در حال حاضر من قصد دارم به جلو بروید و شروع به تایپ چیزی مثل شامل CS50.h، شامل stdio.h، اعضای هیات بی اعتبار اصلی. و پس از آن در داخل از اینجا، من می خواهم به اولین اعضای هیات به نام سن داشته باشد. و من قصد دارم به استفاده از آن برای به دست آوردن اعضای هیات از کاربر برای سن و سال او و یا او را. اما این برنامه است که به منظور شده مورد استفاده قرار گیرد چند نفر، به هر زمینه. من یک خط از مردم داریم. همه از آنها به نوع در آنها سن شاید برخی، من نمی دانم، رقابت، یا رویداد که آنها را برای وارد کرده اید. بنابراین شخصی که در کنار، من نیاز متغیر دیگر. از آنجا که اگر من فقط سن می شود getInt، که رفتن به کتک زدن، و یا بازنویسی سن شخص قبلی است. به طوری که هیچ خوبی است. بنابراین اولین غریزه من ممکن است، اوه، همه حق است، اگر من می خواهم به چند نفر در ages-- اجازه دهید این age1 تماس بگیرید، age2 اعضای هیات می شود اعضای هیات، اعضای هیات age3 می شود getInt. و در حال حاضر من قصد دارم به استفاده از برخی از کد شبه اینجا. آیا چیزی با آن اعداد. ما برای یک روز دیگر ترک چه ما در حال انجام وجود دارد، چرا که ما تنها مراقبت برای لحظه ای در مورد age1، age2، age3. متاسفانه، یک بار من تدوین این برنامه و آن را در مقابل کاربران واقعی، چه طراحی اساسا ضعیف است تصمیم من به نظر می رسد ساخته شده اند؟ آره؟ رسید [نامفهوم] DAVID J. مالان: آره، من حتی سعی نمی به شکل از چگونه بسیاری از سنین من در واقع در مورد مراقبت؟ اگر من کمتر از سه نفر را در اینجا، و در نتیجه کمتر از سه سنین، من هنوز کورکورانه انتظار سه. خدای ناکرده چهار نفر نشان می دهد. برنامه من فقط حتی نمی خواهد آنها را حمایت می کنند. و این، داستان بلند کوتاه است، یک عادت خوب نیست. درست است؟ من اساسا کپی شده بود و چسباندن کد و فقط افزایش سرعت نام متغیر. و خدای من، اگر شما تا به حال، سه سن، اما 10 یا 100، و یا حتی 6500 دانشجوی مقطع کارشناسی، به عنوان مثال. این است که نمی شود به خصوص کد زیبا، و یا پایدار است. شما در حال رفتن به به بازنویسی این برنامه در هر زمان شماره خود را تغییر مردم است. بنابراین خوشبختانه، در واقعی ما فایل ages.c امروز، ما یک راه حل هوشمندانه تر است. اول، من قصد دارم به قرض گرفتن ساخت ما چند بار استفاده می شود، در حالی که حلقه انجام این کار، به منظور رسیدن به تعداد زیادی از مردم در اتاق. من فقط رفتن به اذیت کردن کاربر، دوباره و دوباره، تا زمانی که او به من می دهد یک مقدار از n که یک عدد صحیح مثبت است. من می توانم استفاده کرده اند، آخرین زمان اعضای هیات مثبت دریافت کنید. اما ما که نمی برای واقعی است، بنابراین من جلو رفتم و دوباره اجرا این ایده. در حال حاضر در اینجا، این فوت و فن جدید است. در خط 27، به عنوان نظرات در خط 26 نشان می دهد، اعلام آرایه ای است که در آن به ذخیره سن همه است. بنابراین اگر شما می خواهید برای دریافت، نه یک عدد صحیح، نه دو آرگومان از نوع int، اما یک دسته کامل از نوع داده int. به طور خاص نفر اعداد صحیح، نفر ممکن بود سه، ممکن است 100، ممکن است 1000. نحو، کاملا ساده است، به مثلا چه نوع داده را می خواهید؟ چه می خواهید تماس بگیرید که تکه از حافظه؟ چه می خواهید تماس بگیرید شبکه که به نظر می رسد مثل این pictorially؟ و در داخل پرانتز در اینجا، به شما می گویند چقدر بزرگ شما می خواهید آرایه است. و به این ترتیب قبل از آن، وقتی که من گفت: نحو کمی متفاوت است که در اینجا، ما هنوز هم با استفاده از براکت مربع، اما زمانی که من اعلام یک آرایه، تعداد داخل براکت استفاده چقدر بزرگ می خواهید آرایه است. در مقابل، زمانی که ما با استفاده از بازدید کنندگان براکت من یک لحظه پیش، این، یک رشته، در واقع آرایه ای از کاراکتر، اما زمانی که شما یک متغیر اعلام نشده است، با این کلمه کلیدی در اینجا، شما به سادگی گرفتن شاخص های خاص، خاص عنصر از آرایه که. هنگامی که ما می دانیم که، بقیه از این سر راست است. اگر جدید من برای اولین بار از رفتن به نسخه قابل چاپ کردن چه سن تعداد شخص من است. از کجا من فقط می گویند تعداد فرد یک، فرد شماره دو، فرد شماره سه. و من فقط انجام حساب، به طوری که مردم عادی مانند، ما از یک برای این تعداد برنامه، و نه از صفر است. سپس من getint تماس بگیرید، اما من ذخیره پاسخ در سنین پرانتز من. کدام سن i ام در آرایه است. بنابراین در حالی که آخرین بار ما درمان شد از این جعبه ها به عنوان کاراکتر برای نام Zamyla است، و دیگران است. در حال حاضر، این جعبه را نشان 32 بیت یا چهار بایت که در آن ما می توانیم ذخیره یک int، int و یک int. همه از آن، دوباره، از نوع داده های مشابه. در حال حاضر من چیزی احمقانه انجام دهید، مانند گذشت زمان، فقط برای توجیه نوشتن این برنامه است. و پس از آن در اینجا، من دوباره تکرار بیش از آرایه گفت: یک سال از هم اکنون، تعداد فرد یک اراده چیزی ساله. و به شکل که math-- یعنی، این بسیار arithmetic-- پیچیده نیست من فقط یک اضافه به سن آنها. فقط برای نشان دادن، دوباره، این. همانطور که من می توانید صفحه را به یک رشته، ها، بنابراین می توانید صفحه اول من را به آرایه ای از سنین، مانند آن وجود دارد. پس از کجا است این خواهد گرفتن به ما؟ بنابراین خواهیم دید، در نهایت، چند چیز در روزهای آینده. یکی، در تمام این زمان، هنگامی که نوشتن برنامه های خود، مانند ماریو، حریص، اعتباری. شما شده است با تایپ نام برنامه و ضربه را وارد کنید. و سپس گرفتن ورودی کاربر است. با getString، getInt، getLongLong، و یا مانند آن. اما معلوم است که حمایت C چیزی به نام خط فرمان استدلال، که به ما اجازه در واقع در کلماتی را که شما تایپ می کنید دریافت کنید، در اعلان چشمک می زند، بعد از نام برنامه خود را. بنابراین در روزهای آینده، شما ممکن است چیزی شبیه به سزار تایپ، و یا ./caesar شماره 13، پس از آن. خواهیم دید که چگونه است که کار می کند. از آنجا که در واقع، در مشکل تنظیم دو، ما رفتن را به شما معرفی به چیزی کمی یادآور را Ralphie زودتر از نقشه برداری به چالش بکشد. هنر تقلا اطلاعات. این، در واقع، بسیار یادآور چه Ralphie بود. این یک نمونه از رمزگذاری است الگوریتم نام ROT13، R-O-T 13. به معنای چرخش حروف الفبا 13 مکان. و اگر شما انجام این کار، شما در حال حاضر آنچه که، شاید، یک عبارت آشنا. اما راه ما در حال رفتن به استفاده از این، در نهایت، به طور کلی است. در P مجموعه دو، در نسخه استاندارد، شما یک زن و شوهر از رمزهای شما پیاده سازی، به نام سزار، یکی به نام Vigenere. هر دوی آنها چرخشی می باشد رمز، در که به نحوی شما تبدیل یک حرف به حرف متفاوت است. و سزار فوق العاده ساده است. شما اضافه کردن یک، شما اضافه کردن 13، و یا برخی از تعداد تا 26. Vigenere می کند که در در نامه اساس. بنابراین Vigenere، به عنوان شما را مشاهده کنید در تنظیمات، امن تر است. اما در پایان روز چه شما می شود پیاده سازی و P مجموعه دو، که کلیدی است که شما با استفاده از هر دو است برای رمزگذاری و رمزگشایی. با اشاره به فرآیند تبدیل متن ساده، برخی از پیام اصلی، به متن سایفر، که چیزی رمزگذاری شده است. و سپس آن را رمز گشایی دوباره. در نسخه هکر، در عین حال، شما خواهید بود وظیفه چیزی مشابه در روح و روان، که در آن ما به شما می دهد یک فایل، از یک لینوکس معمولی، یا مک، و یا یونیکس کامپیوتر به نام etsy رمز عبور، که شامل یک کل دسته از نام های کاربری و کلمه عبور. و این کلمه عبور به همه رمزگذاری شده است، و یا درهم، پس به صحبت می کنند، به درستی تر عنوان شما در تنظیمات را مشاهده کنید. و نسخه هکر را به چالش خواهد شما با در نظر گرفتن یک ورودی شبیه به این، و ترک خوردگی رمز عبور. به این معنا که بدانند چه رمز عبور انسان واقع بود. از آنجا که، در واقع، کلمه عبور به طور کلی در روشن ذخیره نمی شوند، و به طور کلی password ها باید سخت به حدس زدن باشد. که اغلب مورد نیست. و چیزی که من فکر کردم ما انجام شده است نتیجه گیری با چند دقیقه نگاه ویژه انتخاب بد از کلمات عبور از فیلم شما ممکن است از روی علاقه یاد می آورند. و اگر نه، شما باید اجاره. [VIDEO پخش] -Helmet، شما شیطان، چه خبر است؟ شما را چه به دختر من کار می کنی؟ -Permit من برای معرفی درخشان جراح پلاستیک جوان، دکتر فیلیپ Schlotkin. بزرگترین بینی مرد شغل در کل جهان و بورلی هیلز. همراه خود حضرت والا. کار -Nose؟ من درک نمی کنم. او در حال حاضر یک کار بینی. این او شیرین 16 حاضر بود. نه، آن چیزی است که شما فکر می کنید نیست. این خیلی، خیلی بدتر است. اگر شما به من نمی دهد ترکیبی به سپر هوایی، دکتر Schlotkin خواهد داد خود را دختر پشت بینی قدیمی خود را. - [GASPS] Nooooooooooooo. از کجا شما را انجام داد؟ -All راست. من می گویم، من می گویم. نه، بابا، هیچ. شما باید نیست. -You're راست عزیزم. I بینی جدید خود را تنگ خواهد شد. اما من آنها را نمی گویند ترکیب بدون توجه به آنچه. -Very است. دکتر Schlotkin، انجام بدترین خود را. لذت -My. -No! صبر کنید، صبر کنید. من می گویم. من می گویم. من می دانستم که آن را کار می کنند. همه حق است، آن را به من بدهد. بانک ترکیبی است. -One. -One. دو تن از. دو تن از. دو تن از. -Three. -Three. -Three. -Four. -Four. -Four. -Five. -Five. -Five. -So ترکیبی است، دو، سه، چهار، پنج. این احمقانه ترکیبی است من همیشه در زندگی من را بشنود. این نوع از چیزی است ادم سفیه و احمق را در چمدان خود را داشته باشد. از شما متشکرم، حضرت خود را. [REMOTE کلیک] چه کار کردین؟ من خاموش به دیوار. نه، این کار را نکرده، شما خاموش فیلم تمام. تو باید من دکمه اشتباه است. خوب، آن را به عقب بر! قرار دادن فیلم پشت در! بله، آقا! بله، آقا. -Let بروید، آرنولد. بیا، گرچن. البته شما می دانید من باید به شما صورتحساب برای این. -Well؟ آیا کار می کند؟ پادشاه کجاست؟ آن را کار کرده است، آقا، ما دارای ترکیبی. -Great. حالا ما می توانیم هر نفس آخرین را هوای تازه از سیاره Druidia. ترکیب چه خبر؟ -One، دو، سه، چهار، پنج. -One، دو، سه، چهار، پنج؟ بله. یعنی شگفت انگیز است. من همان کردم ترکیبی در چمدان من. آماده Spaceball 1 برای خروج فوری. بله، آقا. که البته تغییر ترکیبی در چمدان من. [DOOR SOUND بستن] [جلنگ جلنگ صدا کردن درب ضربه HELMET] -Ahh. [END VIDEO پخش] DAVID J. مالان: که در آن است برای CS50، ما به شما در هفته آینده را ببینید. راوی: و اکنون، عمیق افکار، توسط Daven Farnham. DAVEN FARNHAM: برنامه نویسی در C است بنابراین بسیار سخت تر نسبت خراش. تابع () printf، ابتدا دروغ بود. [خنده SOUNDBITE]