راب BOWDEN: سلام، من راب Bowden هستم، و اجازه دهید در مورد quiz0 صحبت کنید. بنابراین، سوال اول. این سوال است که در آن شما نیاز به کد شماره 127 در لامپ های دودویی. اگر شما می خواهید، شما می توانید انجام تبدیل به طور منظم از bi-- یا از دهدهی به دودویی. اما احتمالا رفتن به زمان زیادی. منظور من، شما می توانید کشف کردن که، OK، 1 است در آن وجود دارد، 2 است در آن وجود دارد، 4 است در آن وجود دارد، 8 است در آن وجود دارد. راه ساده تر، 127 128 منهای یک است. که لامپ سمت چپ 128 بیتی است. بنابراین 127 است که واقعا فقط همه از دیگر لامپ، از آنجا که سمت چپ است لامپ منهای 1. که آن را برای این سوال. سوال یک. بنابراین با 3 بیت شما می توانید نشان دهنده ارزش های مجزا 8. پس چرا، است 7 بزرگترین غیر منفی عدد صحیح دهدهی شما می توانید نشان می دهد؟ خوب، اگر ما فقط می توانیم نشان دهنده ارزش های مجزا 8، پس از آن چیزی است که ما قصد داریم به نمایندگی 0 تا 7 است. 0 طول می کشد تا یکی از مقادیر. سوال دو. با n بیت، که چگونه بسیاری از مشخص ارزش می تواند به شما نشان می دهد؟ بنابراین، با n بیت، شما باید 2 مقادیر ممکن برای هر بیت. بنابراین ما باید 2 مقادیر ممکن برای بیت اول، 2 مقادیر ممکن برای دوم، 2 ممکن است برای سوم. و به طوری که 2 بار 2 بار 2 و در نهایت پاسخ 2 به n است. سوال سه. 0x50 در باینری چیست؟ بنابراین به یاد داشته باشید که مبنای شانزده است بسیار تبدیل ساده و آسان به باینری. بنابراین در اینجا، ما فقط نیاز به نگاه 5 و 0 به طور مستقل. پس چه 5 در دودویی؟ 0101، که 1 بیت و 4 بیت است. 0 در باینری چیست؟ روی حیله و تزویر نیست. 0000. پس فقط آنها را با هم، و که تعداد کامل در باینری است. 01010000. و اگر شما می خواهید شما می توانید را خاموش که سمت چپ صفر است. این بی ربط است. پس دیگر، چه 0x50 در اعشار است؟ اگر شما می خواهید، شما could-- اگر شما راحت تر با دوتایی، شما می توانید که پاسخ های باینری را و تبدیل که به دهدهی. یا اینکه ما می تواند به یاد داشته باشید که مبنای شانزده. به طوری که 0 است در وهله 0 ام و 5 در 16 به مقام اول را دارد. بنابراین در اینجا، در حال حاضر 5 بار 16 به اول، به علاوه 0 بار 16 به صفر، 80 است. و اگر شما در نگاه عنوان سوال، آن CS 80، که یک نوع بود اشاره به پاسخ به این مشکل است. سوال پنج. در حال حاضر این اسکریپت خراش، که تکرار 4 بار ژله کره بادام زمینی. بنابراین ما چگونه در حال حاضر فعال است که در C؟ خب، ما باید here-- بخش های پررنگ تنها بخشی که شما تا به حال به اجرا است. بنابراین ما باید 4 حلقه که حلقه 4 بار، چون printf کردن بادام زمینی و ژله کره، با خط جدید را به عنوان مشکل می پرسد برای. سوال شش، مشکل خراش دیگر. ما می بینیم که ما در یک حلقه برای همیشه می باشد. ما در حال گفت: من متغیر و پس از آن افزایش من 1. در حال حاضر ما می خواهیم انجام دهیم که در C. وجود دارد راه های متعدد ما می تواند این کار را انجام داده اند. در اینجا ما اتفاق افتاده است به کد برای همیشه به عنوان یک حلقه در حالی که (درست). بنابراین ما اعلام متغیر من، فقط مثل ما من متغیر در ابتدا بود. اعلام من متغیر، و برای همیشه در حالی که (درست)، می گوییم متغیر من. بنابراین چون printf٪ i-- و یا شما می توانید از D٪ استفاده می شود. ما می گوییم که متغیر، و سپس آن را به افزایش، من + +. سوال هفت. در حال حاضر ما می خواهم به انجام کاری بسیار شبیه به ماریو نقطه C از مجموعه مشکل است. ما می خواهیم برای چاپ این هشتگهای، ما می خواهیم به چاپ پنج با سه مستطیل از این می کردند. پس چگونه می خواهیم به انجام این کار؟ خوب، ما به شما یک کل را دسته از کد، و شما فقط باید برای پر کردن در عملکرد شبکه چاپ. پس چه PrintGrid شبیه؟ خب شما در گذشته هستید عرض و ارتفاع. بنابراین ما باید خارجی 4 حلقه، که حلقه بیش از همه از این ردیف شبکه است که ما می خواهیم برای چاپ کردن. سپس ما را از درون تو در تو 4 حلقه، که چاپ بیش از هر ستون است. بنابراین برای هر سطر، ما برای چاپ هر ستون، یک رشته هش تک. سپس در پایان سطر چاپ تک خط جدید برای رفتن به سطر بعدی. و که آن را برای کل شبکه. سوال هشت. یک تابع مانند PrintGrid است: بازگشت یک اثر جانبی، اما نه ارزش. تمایز را توضیح دهد. بنابراین این متکی به شما به خاطر سپردن چه یک عارضه جانبی است. خوب، بازگشت value-- ما می دانیم PrintGrid نمی باید مقدار بازگشتی، از سال حق در اینجا آن را می گوید از درجه اعتبار ساقط. بنابراین هر چیزی را که بر می گرداند از درجه اعتبار ساقط واقعا هر چیزی بر نمی گرداند. پس چه عوارض جانبی می باشد؟ خوب، یک عارضه جانبی است هر چیزی را که نوعی همچنان ادامه دارد پس از پایان تابع که فقط بازگشت نیست، و آن را فقط از ورودی نیست. بنابراین، برای مثال، ما ممکن است یک متغیر را تغییر دهید. این امر می تواند یکی از عوارض جانبی. در این مورد خاص، عوارض جانبی بسیار مهم در حال چاپ است به صفحه نمایش. به طوری که یک عارضه جانبی است که PrintGrid است. ما چاپ این چیزها را به روی صفحه نمایش. و شما می توانید از فکر می کنم که به عنوان یک اثر جانبی، از آن چیزی است که ادامه بعد از این تابع به پایان می رسد. این چیزی است که در خارج از محدوده است این تابع که در نهایت در حال تغییر، محتویات صفحه نمایش. سوال نه. برنامه زیر را در نظر بگیرید، که شماره خط برای اضافه شده است به خاطر بحث. بنابراین در این برنامه ما فقط تماس GetString، ذخیره سازی آن در این متغیرها، و پس از آن چاپ که متغیر است. OK. بنابراین توضیح دهد که چرا یک خط موجود است. # شامل cs50 نقطه H. چرا ما نیاز به # شامل cs50 نقطه H؟ ما در حال تماس GetString تابع، و GetString تعریف شده است در کتابخانه cs50. بنابراین اگر ما نیست # شامل cs50 نقطه H، ما را که اعلام ضمنی دریافت خطا تابع GetString از کامپایلر. بنابراین ما نیاز به شامل library-- ما نیاز داریم که شامل فایل هدر، و یا دیگری کامپایلر نمی می دانیم که GetString وجود دارد. توضیح دهید که چرا خط دو موجود است. بنابراین استاندارد نقطه IO ساعت. این دقیقا همان به عنوان مشکل قبلی، جز به جای برخورد با GetString، ما در حال صحبت کردن در مورد printf را. بنابراین اگر ما نگفته است که ما نیاز شامل استاندارد IO نقطه H، پس از آن ما قادر نخواهد بود استفاده از تابع printf را، چرا که کامپایلر در مورد آن نمی دانم. Why-- اهمیت است در خط چهار از درجه اعتبار ساقط؟ بنابراین در اینجا ما اعضای هیات اصلی (خالی). که فقط گفت که ما در حال گرفتن هیچ خط فرمان استدلال اصلی. به یاد داشته باشید که ما می توانیم بین المللی می گویند اصلی اعضای هیات argc براکت ی argv رشته. بنابراین در اینجا ما فقط می گویند از درجه اعتبار ساقط می گویند ما نادیده گرفتن استدلال خط فرمان. توضیح دهید، با توجه به حافظه، دقیقا چه GetString در خط شش گرداند. GetString است از بازگشت یک بلوک از حافظه، آرایه ای از کاراکتر. این واقعا بازگشت اشاره گر به اولین کاراکتر. به یاد داشته باشید که یک رشته کاراکتر یک ستاره است. بنابراین یک اشاره گر به اول شخصیت در هر رشته است که کاربر در صفحه کلید وارد شده است. و حافظه اتفاق می افتد به malloced شود، به طوری که حافظه در پشته است. سوال 13. برنامه زیر را در نظر بگیرید. بنابراین تمام این برنامه در حال انجام است است چون printf کردن 1 تقسیم بر 10. بنابراین، هنگامی که وارد شده و اعدام، این برنامه خروجی 0.0، حتی اگر 1 تقسیم بر 10 0.1 می باشد. پس چرا آن 0.0 است؟ خب، دلیل این است که بخش عدد صحیح است. بنابراین 1 یک عدد صحیح است، 10 عدد صحیح است. بنابراین 1 تقسیم بر 10، همه چیز به عنوان اعداد صحیح درمان، و در C، زمانی که ما انجام تقسیم عدد صحیح، ما هر نقطه اعشار را کوتاه کنیم. بنابراین 1 تقسیم بر 10 می شود 0، و پس از آن ما در تلاش هستیم برای چاپ است که به عنوان شناور، بنابراین صفر چاپ به عنوان شناور 0.0 است. و به همین دلیل ما 0.0. برنامه زیر را در نظر بگیرید. در حال حاضر ما در حال چاپ 0.1. بنابراین هیچ تقسیم عدد صحیح، ما فقط چاپ 0.1، اما ما آن را چاپ تا 28 رقم اعشار. و ما این 0.1000، یک دسته کامل از صفر، 5 5 5، اه، اه، اه. بنابراین سوال اینجا است که چرا آن را ندارد چاپ که، به جای دقیقا 0.1؟ بنابراین به این دلیل در اینجا در حال حاضر نقطه عدم دقت شناور. به یاد داشته باشید که یک شناور تنها 32 بیت است. بنابراین ما فقط می توانیم نشان دهنده تعداد محدود شناور مقادیر نقطه با آن 32 بیت. خب در نهایت بی نهایت وجود دارد بسیاری از ارزش های ممیز شناور، و در بسیاری از بی نهایت شناور وجود دارد ارزش نقطه در بین 0 و 1، و ما به وضوح قادر به هستی نشان دهنده ارزش ها و حتی بیشتر از آن. بنابراین ما باید به فداکاری به قادر به نمایش اکثر ارزش. بنابراین یک مقدار مانند 0.1، ظاهرا ما می توانیم نشان دهنده این نیست که دقیقا. بنابراین به جای به نمایندگی 0.1 کار می کنیم ما می توانیم بهترین نمایش این 0.100000 5 5 5. و این بسیار نزدیک، اما برای بسیاری از برنامه های کاربردی شما باید به نگرانی در مورد نقطه عدم دقت شناور، چرا که ما نه تنها می تواند نشان دهنده تمام نقاط شناور دقیقا. سوال 15. کد زیر را در نظر بگیرید. ما فقط چاپ 1 به علاوه 1. بنابراین هیچ ترفند در اینجا وجود دارد. 1 به علاوه 1 به 2 ارزیابی، و پس از آن ما در حال چاپ است. این فقط چاپ 2. سوال 16. در حال حاضر ما در حال چاپ شخصیت 1 به همراه شخصیت 1. پس چرا این را نمی چاپ همین؟ خب شخصیت 1 به همراه شخصیت 1، شخصیت 1 ارزش ASCII 49. پس این است که واقعا گفته 49 به علاوه 49، و در نهایت این است که به چاپ 98. بنابراین این چاپ نمی 2. سوال 17. تکمیل اجرای از عجیب و غریب زیر را به گونه ای که تابع اگر درست برمی گرداند n فرد و نادرست است اگر n زوج است. این یک هدف بزرگ است برای اپراتور وزارت دفاع. بنابراین ما بحث N ما، اگر n مد 2 برابر 1، و که بدان معنی است که N تقسیم 2 باقی مانده بود. اگر N 2 تقسیم به حال باقی مانده، که بدان معنی است که n فرد است، بنابراین ما به راست. دیگر ما بازگشت نادرست است. شما همچنین می تواند انجام داده اند N مد 2 برابر صفر، بازگشت کاذب، دیگری به راست. تابع بازگشتی زیر را در نظر بگیرید. بنابراین اگر N کمتر از یا برابر با 1، بازگشت 1، بازگشت دیگری n بار از F N منهای 1. پس چه این تابع این است؟ خب، این فقط تابع فاکتوریل. این سادگی به نمایندگی به عنوان N فاکتوریل. بنابراین سوال 19 در حال حاضر، ما به خواهید این تابع بازگشتی. ما می خواهیم آن را به تکرار شونده. بنابراین ما چگونه انجام این کار؟ خوب برای کارمندان راه حل، و دوباره وجود دارد راه های متعدد می تواند به شما انجام داده اند که، ما با این محصول بین المللی شروع برابر با 1. و در طی این برای حلقه، ما قصد داریم به ضرب محصول را به نهایت در نهایت با فاکتوریل کامل. بنابراین اینترنت من برابر با 2، من است کمتر یا مساوی N، من + +. شما ممکن است تعجب که چرا من برابر با 2. خوب، به یاد داشته باشید که در اینجا ما به مطمئن شوید که برای مورد پایه ما درست باشد. بنابراین اگر N کمتر از یا برابر است با تا 1، ما فقط از بازگشت 1. بنابراین در اینجا، ما شروع به در من که برابر 2. خب اگر من 1، و سپس the-- یا اگر n 1، پس از آن حلقه بود نمی اجرا در همه. و بنابراین ما را فقط محصول بازگشت است که 1. به طور مشابه، اگر N بود هر چیزی کمتر از 1-- اگر 0 بود، منفی 1، whatever-- ما هنوز هم می توان از بازگشت 1، که دقیقا همان چیزی است نسخه بازگشتی انجام می شود. در حال حاضر، اگر n بزرگتر است از 1، پس از آن ما در حال رفتن برای انجام این کار حداقل یک تکرار این حلقه. بنابراین اجازه دهید می گویند N 5 است، پس ما هستیم رفتن به انجام بار محصول معادل 2. بنابراین در حال حاضر محصول 2 است. در حال حاضر ما در حال رفتن به انجام بار محصول معادل 3. در حال حاضر آن 6. بار محصول معادل 4، در حال حاضر آن را 24. بار محصول معادل 5، در حال حاضر آن را 120. پس در نهایت، ما در حال بازگشت 120، است که به درستی 5 فاکتوریل. سوال 20. این یکی که در آن شما باید برای پر است در این جدول با هر الگوریتم داده می شود، هر چیزی را که ما دیده ایم، که متناسب با این اجرا الگوریتم این بار بار مجانبی اجرا شود. پس چه یک الگوریتم است که امگا 1، ولی O بزرگ N است؟ بنابراین می تواند بی نهایت وجود داشته باشد بسیاری از پاسخ اینجا. یکی است که ما احتمالا بیشتر دیده می شود اغلب فقط جستجوی خطی است. پس در بهترین حالت سناریو، مورد ما به دنبال در ابتدای فهرست و به همین ترتیب در امگا از 1 مرحله، اولین چیزی که ما را بررسی کنید، ما فقط بلافاصله بازگشت که ما موردی یافت نشد. در بدترین حالت، قلم دوم از اقلام است در پایان، یا آیتم در لیست نیست. بنابراین ما باید به جستجو لیست کل، تمام N عناصر، و به همین دلیل آن را از درجه n است. بنابراین در حال حاضر این چیزی است که هر دو امگا از n log n است، و O بزرگ N log n است. خب چیزی که مناسب ترین ما در اینجا دیده ام ادغام مرتب سازی بر. بنابراین ادغام مرتب کردن، به یاد داشته باشید، در نهایت تتا از n log n استفاده، که در آن تعریف شده است تتا اگر هر دو امگا و O بزرگ یکسان است. هر دو N log n است. چیزی است که امگا چیست از N و O از N مربع؟ خوب، دوباره وجود دارد پاسخ چند ممکن است. در اینجا ما اتفاق می افتد به می گویند مرتب سازی بر حباب. مرتبسازی درجی نیز در اینجا کار می کنند. به یاد داشته باشید که مرتب سازی بر حباب است که بهینه سازی که در آن، اگر شما قادر به گرفتن از طریق لیست کل بدون نیاز به انجام هر معاوضه، سپس، به خوبی، ما بلافاصله می تواند بازگشت که لیست طبقه بندی شده اند برای شروع شد. بنابراین در بهترین حالت، آن را فقط از امگا N است. اگر آن را فقط به سادگی نمی طبقه بندی شده اند لیست برای شروع، پس ما باید از N O معاوضه مربع. و در نهایت، ما باید انتخاب مرتب سازی بر برای n مربع، هر دو امگا و بزرگ O. سوال 21. سرریز عدد صحیح چیست؟ و دوباره، مشابه قبل از آن، ما تنها بسیاری از finitely بیت دارند برای نشان دادن یک عدد صحیح، تا شاید 32 بیت. بیایید می گویند ما باید یک عدد صحیح امضا کردند. سپس در نهایت بالاترین تعداد مثبت ما می توانیم نماینده 2 تا 31 منهای 1. پس چه اتفاقی می افتد اگر ما را امتحان کنید پس از آن افزایش که عدد صحیح؟ خب، ما در حال رفتن به از 2 رفتن به 31 منهای 1، تمام راه را به منفی 2 به 31. بنابراین این سرریز عدد صحیح است هنگامی که شما در حفظ و افزایش، و در نهایت شما می توانید نیست دریافت بالاتر و آن را فقط کاری ادامه داده اند تمام راه برگشت اطراف را به یک مقدار منفی است. چه در مورد سرریز بافر؟ بنابراین یک بافر overflow-- به یاد داشته باشید آنچه که یک بافر است. این فقط یک تکه از حافظه است. چیزی شبیه به یک آرایه یک بافر است. بنابراین سرریز بافر است وقتی که شما سعی می کنید برای دسترسی به حافظه فراتر از پایان آن آرایه. بنابراین اگر شما یک آرایه ای از اندازه 5 و شما سعی کنید برای دسترسی براکت آرایه 5 یا 6 یا براکت براکت 7، و یا هر چیزی فراتر از پایان، و یا حتی هر چیزی براکت آرایه below-- منفی 1-- تمام کسانی که سرریزهای بافر هستند. شما لمس کردن حافظه در راه بد است. پرسش 23. بنابراین در این یکی شما باید برای اجرای strlen. و ما به شما بگویم که شما می توانید فرض ها را نمی خواهد به تهی، بنابراین شما لازم نیست که انجام هر گونه چک برای تهی. و راه های متعدد وجود دارد شما می توانید از این انجام داده اند. در اینجا ما فقط ساده را. ما با یک شمارنده شروع، N. N است شمارش چند حرف وجود دارد. بنابراین ما در 0 شروع، و پس از آن ما تکرار بیش از لیست کل. آیا این براکت 0 به مساوی شخصیت نابودگر پوچ؟ به یاد داشته باشید ما به دنبال شخصیت نابودگر پوچ برای تعیین چه مدت رشته ما است. که در حال رفتن به فسخ هر رشته مربوطه. بنابراین بازدید کنندگان براکت 0 برابر است با به نابودگر پوچ؟ اگر این طور نیست، پس از آن ما در حال رفتن به در این براکت 1، S 2 براکت نگاه کنید. ما تا جایی که ما پیدا کردن نابودگر تهی. هنگامی که ما آن را در بر داشت، و سپس N شامل طول رشته، و ما فقط می تواند بازگشت که. سوال 24. پس این یکی است که در آن شما را به تجارت کردن. بنابراین یک چیز خوب در است راه، اما در چه راهی است بد؟ بنابراین در اینجا، ادغام مرتب سازی بر تمایل به تواند سریع تر از مرتب سازی بر حباب. گفت: پس از that-- خوب، وجود دارد پاسخ چند اینجا هستید. اما یکی از اصلی که مرتب سازی بر حباب است امگا از N برای یک لیست مرتب شده است. به یاد داشته باشید که جدول ما فقط قبل از آن دیدم. بنابراین حباب مرتب امگا از N، بهترین شرایط است آن را قادر به فقط رفتن را لیست یک بار، تعیین سلام این چیزی است که در حال حاضر طبقه بندی شده اند، و بازگشت. مرتبسازی ادغامی، بدون توجه به آنچه شما انجام دهد، امگا از n log n استفاده شده است. بنابراین برای لیست مرتب شده اند، حباب مرتب سازی بر رفتن سریعتر باشد. در حال حاضر آنچه در مورد لیست های پیوندی؟ بنابراین یک لیست پیوندی می تواند رشد کند و کوچک کردن به جا به عنوان بسیاری از عناصر به عنوان مورد نیاز است. گفت: پس از that-- تا معمولا مقایسه مستقیم است برای رفتن به یک مرتبط لیست با یک آرایه. بنابراین حتی اگر مجموعه ها می به راحتی رشد می کنند و کوچک کردن به جا به عنوان بسیاری از عناصر در صورت نیاز، یک لیست پیوندی در مقایسه با array-- آرایه دسترسی تصادفی. ما می توانیم به هر شاخص عنصر خاصی از آرایه. بنابراین برای یک لیست پیوندی، ما نمی توانیم فقط به عنصر پنجم، ما باید به گذشتن از ابتدا تا زمانی که ما به عنصر پنجم دریافت کنید. و این موضوع به ما جلوگیری از انجام کاری مانند جستجوی دودویی. صحبت از جستجوی دودویی، جستجوی دودویی گرایش به سریعتر از جستجوی خطی. گفت: پس از that-- بنابراین، یک چیز ممکن است این است که شما نمی تواند انجام دهد باینری جستجو در لیست های پیوندی، شما فقط می توانید آن را در آرایه. اما احتمالا مهم تر، شما نمی توانید به جستجوی دودویی انجام در یک آرایه است که طبقه بندی شده اند نیست. در صف مقابل شما ممکن است نیاز به مرتب کردن بر اساس آرایه، و تنها پس از آن می توانید شما انجام جستجوی دودویی. بنابراین اگر چیزی شما نیست مرتب شده برای شروع، پس از آن جستجوی خطی ممکن است سریع تر. پرسش 27. بنابراین برنامه های زیر را در نظر بگیرید، که در اسلاید بعدی باشد. و این یکی که در آن ما است رفتن به می خواهم به صراحت بیان مقادیر متغیر های مختلف. بنابراین اجازه دهید که در آن نگاه کنید. بنابراین یک خط. ما اعضای هیات ایکس معادل 1. این تنها چیزی است که اتفاق افتاده است. بنابراین در خط یک، ما در دیدن ما جدول، که y، A، B، و TMP همه محذوف. پس چه X است؟ خب ما فقط آن را به 1 برابر است. و پس از آن خط دو، به خوبی، ما می بینیم که Y به 2، و جدول در حال حاضر در را برای ما پر شده است. بنابراین X 1 و Y است 2. در حال حاضر، سه خط، ما در حال حاضر در داخل تابع مبادله. چه عبور ما به مبادله؟ ما علامت X برای تصویب ، و y علامت برای ب. که در آن مشکل زودتر اظهار داشت که آدرس X 0x10 است، و آدرس Y 0x14 است. بنابراین A و B برابر است 0x10 0x14 و، به ترتیب. در حال حاضر در خط سه، چه x و y هستند؟ خب، هیچ چیز تغییر کرده است درباره x و y در این نقطه است. حتی اگر آنها در داخل یک قاب پشته اصلی، آنها هنوز هم به همان اند ارزش آنها قبل از انجام. ما هر حافظه اصلاح نیست. بنابراین X 1 است، y 2 است. همه راست. بنابراین در حال حاضر ما گفت TMP اعضای هیات برابر به ستاره. بنابراین در خط چهار، همه چیز همان به جز برای TMP است. ما هر مقدار تغییر نکرده است از هر چیزی به جز برای TMP. ما در حال TMP برابر به ستاره. ستاره چیست؟ خب، یک امتیاز به X، بنابراین ستاره رفتن به برابر X است که 1. بنابراین همه چیز کپی شده است کردن، و TMP به 1 تنظیم شده است. در حال حاضر در خط بعدی. ستاره برابر ستاره ب. بنابراین با خط five-- و دوباره، همه چیز همان به جز هر ستاره است. ستاره چیست؟ خب، ما فقط گفت: ستاره X است. بنابراین ما در حال تغییر X برابر ستاره ب. ستاره ب چیست؟ Y. نقاط B به Y. بنابراین ستاره B Y است. بنابراین ما در حال تنظیم X برابر با Y، و هر چیز دیگری همان است. بنابراین ما در سطر بعدی می بینیم که X در حال حاضر 2، و بقیه فقط کپی کردن. در حال حاضر در خط بعدی، ستاره B برابر TMP. خب، ما فقط گفت: ستاره B Y است، بنابراین ما در حال تنظیم Y برابر با TMP. هر چیز دیگری همان است، بنابراین همه چیز می شود کپی کردن. ما در حال تنظیم Y برابر با TMP، که یکی، و هر چیز دیگری همان است. در حال حاضر در نهایت، خط هفت. ما پشت در تابع اصلی است. ما پس از مبادله است به پایان رسید. ما از دست داده اند، A، B، و TMP، اما در نهایت ما در حال تغییر هر مقدار نمی از هر چیزی در این مرحله، ما فقط کپی کنید x و y است. و ما می بینیم که x و y هستند در حال حاضر 2 و 1 به جای 1 و 2. مبادله با موفقیت اجرا شده است. سوال 28. فرض کنید که شما روبرو می شوند پیام های خطا زیر در ساعات اداری سال آینده به عنوان یک CA یا TF. توصیه چگونه به رفع هر یک از این اشتباهات. مرجع بنابراین تعریف نشده به GetString. چرا ممکن است شما این را؟ خوب، اگر یک دانش آموز با استفاده از GetString در کد خود، آنها به درستی هش شامل cs50 نقطه H شامل کتابخانه cs50. خب، آنچه انجام می دهند نیاز به رفع این خطا؟ آنها نیاز به انجام lcs50 خط تیره در خط فرمان هنگامی که کامپایل. بنابراین اگر آنها عبور نمی lcs50 فاصله صدای جرنگ جرنگ، آنها نخواهیم داشت واقعی کد است که پیاده سازی GetString. پرسش 29. به طور ضمنی اعلام تابع strlen کتابخانه. خوب این در حال حاضر، آنها ندارد انجام هش مناسب باشد. در این مورد خاص، فایل هدر آنها نیاز به رشته نقطه H است، و از جمله رشته در حال حاضر نقطه H، student-- اکنون کامپایلر دسترسی به است اعلامیه های strlen، و آن را می داند که کد شما با استفاده از strlen به درستی. سوال 30. بیشتر درصد تبدیل از استدلال داده. پس چه است این؟ خوب به یاد داشته باشید که این درصد signs-- چگونه آنها مربوط به printf را دارید. بنابراین در printf را که ما ممکن است percent-- ما ممکن است چیزی چاپ مانند درصد من بک اسلش N. یا ممکن است ما مانند درصد من چاپ، فضا، درصد من، فضا، درصد من. بنابراین برای هر یک از آن درصد علائم، ما نیاز به تصویب یک متغیر در پایان printf را. بنابراین اگر ما می گویند چون printf پرانتز درصد من بک اسلش پرانتز N نزدیک، خب، ما می گویند که ما هستیم رفتن به چاپ یک عدد صحیح، اما بعد از آن ما انجام نمی printf را یک عدد صحیح در واقع چاپ. بنابراین در اینجا درصد بیشتر تبدیل از استدلال داده؟ که گفت که ما یک دسته کامل از درصد، و ما متغیر به اندازه کافی ندارد در واقع در آن درصد را پر کنید. و پس از آن قطعا، برای سوال 31، قطعا 40 بایت در یک بلوک از دست داد. بنابراین این یک خطای Valgrind است. این می گوید که جایی در کد خود را، شما یک تخصیص است که 40 بایت های بزرگ به شما malloced 40 بایت، و شما هرگز آن را آزاد کرد. به احتمال زیاد شما فقط نیاز برای پیدا کردن برخی از نشت حافظه، و پیدا کردن که در آن شما نیاز به آزاد این بلوک از حافظه است. و سوال 32، نوشتن نامعتبر اندازه 4. باز هم این یک خطای Valgrind است. این را ندارد به انجام با نشت حافظه در حال حاضر. این است، بیشتر likely-- منظور من، آن را نوعی از حافظه حقوق نامعتبر است. و به احتمال زیاد این است برخی از مرتب کردن بر اساس سرریز بافر. که در آن شما باید یک آرایه، شاید یک آرایه عدد صحیح، و اجازه دهید می گویند آن را به اندازه 5، و شما سعی کنید به دست براکت آرایه 5. بنابراین اگر شما سعی می کنید به ارسال به ارزش، که یک تکه از حافظه که شما در واقع به اینترنت دسترسی دارند، و بنابراین شما در حال رفتن برای گرفتن این خطا، گفت: نوشتن نامعتبر اندازه 4. Valgrind است که به رسمیت شناختن شما تلاش برای لمس حافظه نامناسب. و که آن را برای quiz0. من راب Bowden هستم، و این CS50 است.