[Powered by Google Translate] مشکل در بخش مجموعه 2: نرم افزار هکر
راب Bowden، دانشگاه هاروارد
این CS50 است. CS50.TV
بنابراین، من راب. من ارشد در Kirkland. این سومین سال من TFing CS50 است.
این اولین بار است که از بخش سخنرانی به سبک سنتی ما در حال تغییر است،
که در آن ما فقط به بررسی نوع آنچه اتفاق افتاده است در سخنرانی و پس از آن شما بچه ها سوال بپرسید،
در حال حاضر به بودن خیلی بیشتر بر اساس حل مسأله، که در آن ما با استفاده از فضاهای، و -
آه، پس این ایده است که برای رفتن به این لینک من به شما فرستاده شده و سپس شما در فضا خواهد بود.
آیا کسی لپ تاپ داشته باشند؟ باشه.
بنابراین ما قصد داریم با استفاده از این، و ما در حال رفتن به انجام این کار مشکلات در بخش زندگی می کنند
و بحث در مورد آنها و بدانند چه چیزی اشتباه است
و من ممکن است بکشید تا برخی از کد خود را، و من ممکن است ایده های خود را به بحث در مورد.
بنابراین هر کسی به سختی؟
شما می توانید در سمت چت، من نمی دانم اگر ما به دلیل آن است.
در حال حاضر، مانند supersection قبلی، اگر شما در آن کلاس، شما می دانید آنچه را که در مورد.
در همه مجموعه P رفتن به این بخش وجود دارد.
پس P-مجموعه 2، مشخصات، من حدس می زنم که شما آن را بر روی P-مجموعه 1 دیدم.
اما ما می توانیم در P-مجموعه 2 برای آنچه که ما در حال رفتن به رفتن بیش از امروز نگاه کنید.
و شما به یک بخش از سوالات را ببینید.
بنابراین این کار در همه P-مجموعه خواهید بود یک بخش از سوالات وجود دارد.
تا کنون کرده ایم، گفت: "این یک فرصت برای تمرین."
شما خواسته نخواهد شد به ارائه این برنامه است.
ایده این است که این به نوعی به شما کمک کند با مجموعه مشکل آغاز شده قرار است.
من در نسخه هکر حدس می زنم، که بسیاری از آنها قرار است فقط به چیزهای جالب و جدید، برای یادگیری است.
آنها ممکن است به طور مستقیم به مجموعه ای مشکل است.
و در حال حاضر ما با داشتن آنها را ارائه کنید، اما در تئوری،
برای مجموعه مشکل بعد از آن، شما ممکن است آنها، ارائه و به این ترتیب شما هم می توانید به بخش
و یا تماشای بخش برای دریافت پاسخ، یا شما فقط می توانید آنها را در را آن گونه که مایلید تغییر دهید
اگر شما با بهره گیری از حضور من احساس نمی کنند.
بنابراین - من فکر می کنم این است که یکی از اولین.
آه. همچنین، در این بخش از سوالات ما نیز سوالی در مورد شورت از شما بپرسم.
بنابراین من حدس می زنم، در تئوری، شما قرار است به تماشای این قبل از آمدن به بخش،
اما خوب اگر اینکار را نکنید، ما را بیش از آنها را به هر حال.
بنابراین ما می توانیم با این شروع: "چگونه یک حلقه در حالی که از یک حلقه DO-در حالی که تفاوت؟
هنگامی که دومی به خصوص مفید است؟ "
بنابراین هر کسی هر گونه -؟
[دانشجو] آیا در حالی که حلقه همیشه حداقل یک بار اجرا خواهد شد.
بله. به طوری که تفاوت. در حالی که حلقه - I'll آن را فقط در اینجا - در حالی که حلقه، در حال حاضر شرایط
در اینجا، در حالی که یک DO-در حالی که، شما شرط نیست تا زمانی که ما را در اینجا.
و به این ترتیب، هنگامی که برنامه های خود را اجرا و آن را به حلقه در حالی که می شود،
آن را بلافاصله را چک می کند اگر این شرط درست است.
در صورتی که شرط درست است، آن را فقط خواهد شد بیش از جست و خیز حلقه به طور کامل.
آیا در حالی که حلقه ها، به عنوان برنامه های در حال اجرا، آن را می شود به "انجام".
چیزی اتفاق می افتد در این مرحله، فقط به اجرا ادامه می دهد.
سپس زمانی که آن را بازدید "در حالی که" اگر شرط درست باشد، آن را حلقه و پشت دوباره این کار را انجام
و دوباره و دوباره تا زمانی که شرط درست است و فقط پس از آن می افتد از طریق نیست.
بنابراین، تفاوت بودن، که این حق را می توانید جست و خیز از آغاز.
این لزوما یک بار اجرا و پس از آن ممکن است بار بیشتری را در صورتی که وضعیت هنوز هم درست اجرا.
بنابراین حلقه در حالی که تنها یک بار آن را انجام دهید، و یا - حلقه while - ما ممکن است نیاز به آن را در همه کار،
از به محض این که ما به آن را دریافت کند، در صورتی که شرط نادرست است، ما فقط حق را بیش از آن صرف نظر کنید.
در حالی که انجام این کار در حالی که حلقه، آن را یک بار اجرا، لزوما.
سپس، هنگامی که ما به این وضعیت، ما بررسی اگر آن را درست یا نادرست است.
اگر این درست است، ما آن را دوباره انجام دهد، اگر آن را نادرست، ما فقط می خواهید ادامه رفتن.
بنابراین، هنگامی که دومی به خصوص مفید است؟
بنابراین من می توانم که در کل از 4 سال، 3 سال، هر آنچه که می گویند،
که من برنامه ریزی شده است، من با استفاده از این، مثل، کمتر از 10 بار است.
و احتمالا 5 از آنها در CS50 زمانی که ما انجام دهند در حالی که حلقه.
بنابراین، هنگامی که شما استفاده می شود را انجام دهند در حالی که حلقه؟
وقتی که - آره؟
[دانشجو] هنگامی که شما در حال تلاش برای گرفتن ورودی کاربر، و یا چیزی است که شما می خواهید برای بررسی -
آره. بنابراین انجام دهند در حالی که حلقه ها، ورودی کاربر است که یکی از بزرگ.
به همین دلیل است که زن و شوهر مشکل اول این مجموعه، هنگامی که شما می خواهید به درخواست کاربر، مانند،
"یک رشته به من بدهید،" شما نمی تواند ادامه دهد تا زمانی که شما به این رشته است.
و بنابراین شما لزوما نیاز برای رشته حداقل یک بار بپرسید.
اما اگر پاسخ آنها چیزی بد، و سپس شما نیاز به حلقه به عقب و دوباره می پرسم.
اما به غیر از ورودی کاربر، آن را بسیار نادر است که در مورد من روبرو می شوند
جایی که من می خواهم به حلقه حداقل یک بار "اما احتمالا بیشتر است.
سوال یا -؟ تا به هر کسی DO-در حالی که حلقه هر جای دیگر استفاده می شود؟
باشه. بنابراین یک بعدی است، "چه چیزی اعلام نشده شناسه
معمولا نشان می دهد در صورتی که خروجی صدای جرنگ جرنگ؟ "
پس چه نوع کد نوشتن به شناسه اعلام نشده؟
[دانشجو] که x = 2؟
بنابراین ما فقط می توانید آن را امتحان کنید در اینجا، x ​​= 2 است.
ما این اجرا - آه، من آن را کلیک کنید. بنابراین در اینجا ما - همه حق است.
"استفاده از X شناسه اعلام نشده است."
به طوری که شناسه اعلام نشده، یک متغیر است.
اغلب یک متغیر شناسه تماس بگیرید.
پس از آن نه ممکن می دانم که این در واقع یک متغیر، آن را نمی داند آنچه در آن است.
پس از آن شناسه است.
پس چرا آن را اعلام نشده؟ آره.
بنابراین برای روشن در اصطلاحات، تعریف یک متغیر
زمانی که به شما می گویند "X هوشمند،" و یا "Y رشته،" هر چیزی.
مقدار دهی اولیه متغیر یا انتساب متغیر،
هر زمان که به شما می گویند "x = 2 است."
بنابراین ما می توانیم این کار را در مراحل جداگانه انجام دهد، از نوع int x، x = 2، و تا - ما می توانیم یک دسته از مسائل در اینجا -
اما تا زمانی که این خط رخ می دهد، x است که هنوز آماده سازی نشده، اما اعلام شده است.
و بنابراین ما به وضوح می توانید آن را در 1 خط، و در حال حاضر ما در حال اعلام کرد و مقدار دهی اولیه.
پرسش و پاسخ؟
و در نهایت، "چرا صفر سزار خیلی امن نیست؟"
پس اول، آیا هر کسی می خواهم بگویم آنچه صفر سزار؟
[دانشجو] سزار صفر فقط این است که شما نقشه، شما تغییر هر نامه،
تعداد خاصی از نامه ها، و حرکت به عقب در طول، و آن را بسیار امن نیست چرا که
تنها 26 گزینه های ممکن وجود دارد و شما فقط باید سعی کنید هر 1، از کسانی که تا زمانی که شما آن را دریافت کنید.
آه. بنابراین، من باید تکرار؟
رمز سزار، it's - منظورم این است، شما چگونه بر مشکلاتی که شما با آن -
من حدس می زنم نسخه استاندارد مجموعه مشکل که در نسخه هکر نیست.
بنابراین در نسخه استاندارد به مجموعه مشکل، شما می توانید یک پیام مثل، "سلام جهان"
و همچنین شما می توانید یک شماره مانند 6، و شما را که این پیام، و هر یک از شخصیت فردی،
شما 6 موقعیت خود را در الفبای آن را بچرخانید.
بنابراین 'H' در خوش آمدید می تواند تبدیل به H-I-J-K-L-M-N.
بنابراین حرف اول خواهد بود N. ما همین کار را با E است.
اگر ما، مانند، Z و یا چیزی، و سپس ما بپیچید بازگشت به اطراف به "یک.
اما هر یک از شخصیت می شود چرخهی 6 حرف بعد از آن در الفبا، و آن را بسیار امن نیست
از آنجا که تنها 26 احتمالات را برای چگونه بسیاری از راه های شما می تواند یک نامه ساده بسته بندی وجود دارد.
بنابراین شما می توانید تمام 26 از آنها را کنید و سعی کنید، احتمالا، برای یک پیام به اندازه کافی بلند است،
تنها 1، از کسانی که 26 همه چیز امکان پذیر است برای رفتن به خوانا،
و خوانا است برای رفتن به پیام اصلی است.
پس از آن یک راه بسیار خوبی برای رمزنگاری هر چیزی در همه نیست.
ربطی به کسانی که شلوار کوتاه، "یک تابع چیست؟"
پس چه شده است یک تابع است؟ بله.
[دانشجو] آن را مانند یک قطعه جداگانه ای از کد که شما می توانید تماس را از طریق رفتن و سپس مقدار بازگشتی از هر.
آره. تکرار است و یا به هم فقط پاسخ به یک بعدی - پس من آن را با پاسخ دادن به آینده پاسخ دهد.
شما می توانید توابع به جای استفاده از فقط کپی و چسباندن کد بیش و بیش از دوباره.
درست است که کد را آن را به fuction، و سپس شما فقط می تواند فراخوانی تابع
هر کجا که شما کپی و چسباندن.
بنابراین توابع مفید است.
بنابراین در حال حاضر ما مشکلات واقعی انجام دهد.
یکی از اولین. بنابراین این ایده یکی از اولین است، شما آن را یک رشته منتقل می کند، و بدون در نظر گرفتن از -
یا اینکه می گویند تمام حروف کوچک؟ این کار تمام حروف کوچک می گویند نیست.
پس این پیام می تواند هر چیزی باشد، و - اوه نه. این هم اینکار را در مورد شما نمی کنند.
برای سادگی، می توانید فرض کنید که کاربر تنها ورودی حروف کوچک و فضاهای. "
بنابراین ما آن را یک پیام فقط با حروف کوچک منتقل می کند و پس از آن ما به طور متناوب
بین سرمایه و کوچک - تغییر رشته به سرمایه و کوچک، متناوب است.
بنابراین قبل از اینکه ما به شما دوم حتی به مشکل شیرجه رفتن را،
اولین چیزی که ما باید انجام دهیم؟
اوه، چه من فقط با کلیک بر روی؟ آه، من فقط بر روی یک ایمیل اینجا کلیک.
بنابراین اولین چیزی که ما باید انجام دهیم - من به دنبال یک اشتباه؟
آیا این بخشی از این یکی است؟
نه، کسانی که هنوز هم در آن وجود دارد، هر چند.
خوب، هنوز هم در اینجا.
در حال حاضر ما نمی توانیم فرض کنیم -؟ بله. در اینجا ما نمی توانیم فرض کنیم که آن را تنها حروف کوچک و فضاهای.
بنابراین در حال حاضر ما باید برای مقابله با این واقعیت است که این نامه ها می تواند هر چه ما می خواهیم آنها را به.
و به این ترتیب اولین چیزی که ما می خواهیم انجام دهیم این است که فقط این پیام را دریافت کنید.
ما فقط نیاز به دریافت یک رشته، رشته S = GetString، درست است.
در حال حاضر این مشکل، یک زن و شوهر از راه های انجام آن وجود دارد.
اما ما قصد داریم که مایل به استفاده از اپراتورهای بیتی در اینجا.
آیا افرادی که یا در supersection،
و یا چیزی، و نمی دانم چه اپراتورهای بیتی هستند؟
یا چگونه آنها را به ASCII به هیچ وجه مربوط؟
[دانشجو] من در supersection بود، اما من می دانم که چه اپراتورهای بیتی هستند.
باشه. تا بعد من مجبور به بیش از اصول آنها است، اما من توضیح خواهیم داد
آنچه که ما در حال رفتن به می خواهید استفاده کنید.
پس 'A': نمایش دودویی سرمایه، شماره 65 است.
من فقط رفتن به در نگاه کنید 41 - در حال رفتن به 01،000،001.
به طوری که باید 65 در دهدهی، پس این است که نمایش دودویی از شخصیت سرمایه A.
در حال حاضر، نمایش دودویی از شخصیت های کوچک 'A'
رفتن به همان چیزی که، تقریبا. این است که - 6، آره. این درست است.
بنابراین باینری سرمایه کوچک، دوتایی.
بنابراین توجه داشته باشید که تفاوت بین A و 'A' است این بیت است.
و این اتفاق می افتد به 32 بیتی، بیت به نمایندگی از شماره 32.
و آن را حس می کند از سال 65؛ 'A' 97.
تفاوت بین آنها 32 است.
بنابراین در حال حاضر ما می دانیم که ما می توانیم از 'A' را با در نظر گرفتن تبدیل
و بیتی از آن ORing، با - که به نظر می رسد مثل یک 1.
این یک بیتی یا با 00100000 است، و این که به ما '.'
و ما می توانیم از 'A' را به بیتی ANDing
با 11، 0 و در آن محل، 11،111.
بنابراین این خواهد شد و سپس با ما دقیقا همان چیزی بود، اما صرفنظر کردن از این فرد،
بنابراین خواهیم 01000001، من نمی دانم اگر من شمارش حق.
اما این روش از بیتی ORing به سرمایه کوچک
و بیتی ANDing از حروف کوچک به سرمایه منحصر به فرد A. نیست
همه حروف، K، K، انتظار: کاهش از، Z Z، انتظار: کاهش از،
همه از آنها تنها به این بیت متفاوت است.
و بنابراین شما می توانید این را به از هر حروف کوچک تغییر دهید به هر حرف و بالعکس استفاده کنید.
باشه. بنابراین یک راه آسان گرفتن از این - تا به جای داشتن به
نوشتن به هر 1011111 است - راه آسان به نمایندگی از این تعداد، و این یکی نه
که من بیش از در supersection رفت، اما ریشه یابی لغات (~) است یکی دیگر از عملگر بیتی.
~ می کند این است که آن را در نمایندگی بیت به نظر می رسد.
اجازه دهید به هر تعداد.
این است که فقط برخی از شماره های باینری، و ~ می کند آن است که تنها flips یک بیت است.
پس این 1 بود، در حال حاضر یک 0، 0، در حال حاضر 1، 010،100.
به طوری که همه ~ هم اینکار را در مورد شما نمی کنند. بنابراین 32 است رفتن به شماره - خلاص شدن از آن -
به طوری که 32 است به تعداد 00،100،000، و غیره از این ~ رفتن به
این تعداد تا اینجا که من ANDed 'A' با.
آیا همه می بینیم که؟ این بسیار رایج است، مثل زمانی که شما می خواهید برای کشف کردن
همه چیز بعد از آن ما ممکن است از دیدن، زمانی که ما می خواهیم برای دیدن اگر -
یا ما می خواهیم همه چیز را، هر مجموعه ای بیت به جز 1
شما تمایل به بیت است که ما نمی خواهیم مجموعه ای ~.
بنابراین ما مجموعه ای 32 بیتی می خواهم نیست، بنابراین ما از 32 ~.
باشه. بنابراین ما می توانیم از آن در اینجا استفاده کنید.
تمامی حقوق، پس از آن خوب است اگر شما در حال انجام نداده است، ما به آرامی باید پیاده روی بیش از با هم،
و یا راه رفتن بیش از این، به طوری که - از طریق این. راه رفتن را از طریق این.
بنابراین ما باید رشته ما، و ما می خواهیم به حلقه بیش از هر شخصیت در این رشته و انجام کاری به آن است.
پس چگونه می توانیم حلقه بیش از یک رشته؟ چه چیزهایی را باید استفاده می کنیم؟
من قصد دارم به انجام آن نیست در اینجا. آره.
بنابراین من تکرارکننده من، و او آن را گفت، اما چگونه من می دانم که چگونه بسیاری از شخصیت های در رشته؟
Strlen (ها)، پس از آن من + +.
پس آنچه که من انجام داده ام در اینجا بهترین راه برای انجام کارها نیست.
آیا هر کسی می دانم چرا؟
از آنجا که شما در حال چک کردن زبان از هر رشته است.
بنابراین ما در حال رفتن به می خواهید به حرکت strlen، من می توانم بگویم در اینجا، نوع int طول = strlen ()،
و پس از آن من <طول، و در صورتی که شما آن را دیده نمی شود قبل از آن،
من هم می تواند اعضای هیات من = 0، طول = strlen (). انجام
و بنابراین این تا حدودی ترجیح داده شده است، از من محدود دامنه
طول متغیر به این 'برای' حلقه، به جای آن اعلام کرد قبل از
و آن را همیشه وجود دارد، و در صورتی که شما نمی رسد چرا که بد،
یا چرا اصلی بد بود، it's - شروع در حلقه for.
من به بررسی این بیماری است. آیا من <طول S؟
بنابراین طول S، اجازه کار با "سلام"، تمام مدت.
بنابراین طول S، H-E-l-l-O. طول و 5 می باشد.
بنابراین من = 0، طول 5، پس از من است <5 تا حلقه ادامه می دهد.
سپس ما دوباره. این وضعیت را بررسی کنید. آیا من <طول خوش آمدید؟
بررسی طول مدت خوش آمدید. H-e-l-l-O. که 5؛ من <5، بنابراین ما همچنان دوباره.
بنابراین ما در حال محاسبه، ما در حال شمارش خوش آمدید، برای هر تکرار از حلقه،
حتی فکر آن را هرگز به تغییر، آن را همیشه به 5 است.
بنابراین ما فقط 5 تا جلو به یاد داشته باشید، و در حال حاضر همه چیز بهتر است.
بنابراین تکرار در طول کل رشته.
ما چه می خواهیم برای هر کاراکتر از رشته؟
[زبان دانشجو، ناخوانا]
آره. بنابراین، اگر شخصیت غیر الفبایی است، پس از آن ما فقط می خواهم به بیش از آن جست و خیز.
از آنجا که ما تنها در مورد حروف الفبایی مراقبت ما می توانیم تعدادی سرمایه گذاری نیست.
پس چگونه می تواند این کار می کنیم؟ بنابراین شرایط ما، به طوری که اگر ما می خواهیم چیزی - بررسی اگر آن را به ترتیب حروف الفبا.
پس چگونه این کار را بررسی کنیم؟
[دانشجو] شما فقط می توانید با استفاده از تابع آلفا است.
این است که در هر کدام از این، و یا هر مانند، char.h و یا چیزی؟
بنابراین ما باید ها های [i]، - بیایید تابع آلفا، و استفاده از صریح استفاده نمی
است که شخصیت هشتم S، به یاد داشته باشید که یک رشته آرایه ای از کاراکتر ها،
بنابراین شخصیت هشتم S است.
در حال حاضر، آن است که یک حرف بزرگ، ما می دانیم آن است که در یک محدوده خاص باشد.
و آنچه از آن محدوده؟
آره. پس اگر [من] ≥ 65، و S های [i] ≤ 90، به جای آن چه کاری باید انجام دهم؟
آره. بنابراین شما باید به طور مطلق حتی هرگز نیاز به دانستن مقادیر ASCII از هر چیزی که تا کنون می باشد.
از 65 شماره، 90، 97 و 102، یا هر چیز دیگری از آن است که فکر می کنم هرگز.
شما لازم نیست - 112 - شما لازم نیست که می دانم کسانی که در همه. که اشتباه است بیش از حد.
فقط این کاراکتر یک نقل قول، ثابت نقل قول تنها استفاده کنید. پس 'A' و کمتر از 90 'زهرا' است
و این به طور قابل توجهی بهتر - من نمی دانم بالای سر من است که Z است 90.
من نمی دانم خاموش بالا از سر من که 'Z' پایتخت Z.
بنابراین تا زمانی که این است که در طیف وسیعی از سرمایه به سرمایه Z، و یا ما می تواند حروف کوچک را چک کنید،
یا اگر آن را در محدوده ≥ 'A' و ≤ Z.
به طوری که وضعیت ما.
این سبک که در آن برای قرار دادن این چیزها متفاوت است.
من آن را شبیه به این انجام دهد.
در حال حاضر، چه چیزی ما می خواهیم کاری انجام دهید؟
ما می دانیم که این نامه یک شخصیت، یک شخصیت به ترتیب حروف الفبا.
بنابراین ما نیاز به بین آیا این در حال حاضر باید یک حرف بزرگ یا حروف کوچک متناوب است.
چگونه می توانم مسیر که یکی از ما می خواهیم آن را به ما را؟
[صدای دانشجو، ناخوانا]
پس بله، اما به من اجازه.
ماژول 0-2 گفته شد، پیشنهاد پرتاب کردن بود و من با آن موافقم.
به جز توجه کنید که، مانند - این مورد؟ آره.
هر یک دیگر، اما ما می توانیم ماژول 2 از من نیست، یا من مد 2، از سال
توجه کنید که E است سرمایه و 'A' حروف کوچک است؟ اما در یک فضای جدا کردن آنها وجود دارد؟
به طوری که آنها در حال رفتن به وزارت دفاع همان 2 است، اما موارد مختلف آنها.
[سوال دانشجو، ناخوانا]
آره. بنابراین ما در حال رفتن به نگه داشتن تعداد.
ما همچنین می تواند در اینجا اگر ما می خواستیم، که ممکن است کمی گنده
در اظهارات حلقه برای من آن را در اینجا قرار دهید.
پس تعداد نوع int = از 0 شروع می شود.
و بنابراین در حال حاضر، من قصد دارم به دفعات مشاهده شده که چگونه بسیاری از حروف الفبا را داشتیم.
بنابراین ما ناگزیر به دفعات مشاهده شده + + از آنجا که ما در بر داشت یکی دیگر از شخصیت بر اساس حروف الفبا مرتب.
اما، به طوری که در حال حاضر شما در حال گفت: اگر وزارت دفاع تعداد 2.
پس چه می شود اگر تعداد مد 2؟ آه. من == 0 در حال حاضر انجام دهید.
ما همچنین می خواهیم بیش از که. بنابراین اگر وزارت دفاع تعداد 2 == 0، آنگاه چه؟
[دانشجویان پاسخ، ناخوانا]
بنابراین ما می خواهیم آن را برای پایان دادن به بزرگ است.
2 مورد وجود دارد، بزرگ و کوچک هستند که در 2 مورد.
بنابراین، اگر ما در حروف کوچک ما نیاز داریم که آن را به بزرگ.
اگر آن را بزرگ ما نیازی به انجام هر کاری است.
اما، یک راه وجود دارد - shouldn't اند بدبختانه -
که ما حتی نمی نیاز به بررسی کنید که آیا آن را به حروف بزرگ یا کوچک؟
چه می توانید انجام دهید که همیشه مطمئن شوید که ما همیشه در بزرگ؟
پس چه ما برای حروف کوچک 'A' متوجه چه می شود اگر ما این چیزی یکسان به بزرگ؟
یک تغییر بزرگ می کند، و یا تغییر می کند ارزش؟
آره. بنابراین هر سرمایه بیتی نامه ANDed با ~ 32 رفتن به همان شخصیت بزرگ
چرا که برای هر شخصیت بزرگ 32 بیت تنظیم نشده است.
بنابراین اگر ما می خواهیم را به شخصیت های [i]، ما می خواهیم آن را به تبدیل شدن به حروف کوچک یا بزرگ.
بنابراین اگر این کوچک، آن را در حال حاضر بزرگ، اگر آن بزرگ، آن را هنوز هم بزرگ، و این از آن است.
من این کار را در supersection گفت: شما می توانید 32 اگر شما می خواهید استفاده کنید، اما من تمایل به ترجیح می دهم انجام 'A' -،
به جای 32 ساده، چرا که می توان آن را هر بیت دیگر است.
پس از 32 بیتی، می تواند آن را هر کدام از این، یا ما را به اندازه کافی ندارد
اعداد به نمایندگی از همه از شخصیت.
بنابراین اگر شما می توانید از 32 بیتی، می تواند آن را به 64 بیتی، می تواند آن را بیت 128.
هر یک از کسانی که بیت می تواند کمی که بین حروف بزرگ و کوچک است.
من لازم نیست که می دانم که آن را در 32 بیتی.
من می توانم این 'A' استفاده کنید - یک بیت است که تفاوت میان این دو برای به دست آوردن
بدون نیاز به شماره سحر و جادو است که 32 است تکیه می کنند.
و بنابراین در حال حاضر، دیگری عجیب و غریب تعداد دفعات مشاهده، و بنابراین آنچه که من می خواهم به انجام این کار؟
[پاسخ دانشجویی، ناخوانا]
[دانشجو] چه خبر؟
من آن را در 1 ثانیه انجام دهد.
بنابراین در حال حاضر اگر من می خواهم - من می خواهم تا مطمئن شوید که کاراکتر در حال حاضر حروف کوچک،
و بنابراین من می تواند و یا 32، و 32 به معنی 'A' - A.
اما توجه کنید، با همان استدلال قبلی، که اگر
این نامه در حال حاضر کوچک، سپس ORing فقط در 32 نگه می دارد که آن کوچک است.
این شخصیت اصلی تغییر نکرده است.
اما در حال حاضر من لازم نیست که برای جلوگیری از و گفت: "اگر آن را کوچک، فقط در مورد آن را فراموش کرده ام
اگر آن را بزرگ، و سپس آن را تغییر دهد. "
این خیلی راحت تر برای انجام این کار است.
[دانشجو] که استراتژی کم کردن بزرگ از کار حروف کوچک اگر آن را گرفتند 32؟
اگر آن بود، مانند، 34 و یا چیزی؟
بنابراین، شما باید بدانید که تفاوت بین 2 - >> 1 بیت.
این می تواند بیشتر از 1 بیت، تا زمانی که همه از بیت زیر این موقعیت یکسان هستند.
بنابراین ما نیاز به حداقل 26 حرف - و یا 26 حرف وجود دارد.
بنابراین ما نیاز به حداقل 26 عدد برای نشان دادن تفاوت -
تفاوت بین A و 'A' را به حداقل 26
و یا دیگری ما را نمی نماینده تمام اعداد پایتخت.
این بدان معنی است که A، اگر ما در 1 شروع، آن را برای استفاده از همه این بیت،
همه از این 5 بیت اول، به نمایندگی از همه چیز را از طریق Z.
به همین دلیل کمی بعد، و یا این بیت، بیت بعدی که برای تمایز بین یک و انتخاب است.
به همین دلیل، در جدول ASCII، 5 نمادها جدا حروف بزرگ از حروف کوچک وجود دارد.
پس از آن نمادهای، 5 اضافی است که به ارمغان می آورد تا از 32 این است که تفاوت بین آنها را.
[دانشجو] بنابراین، ما می تواند از آن را، به دلیل ASCII طراحی شده است که راه.
بله. اما ASCII - تفاوت همچنین می تواند هر دو این بیت باشد.
مانند، اگر 10000001 بود، و 'A' 11100001 - فراموش کنم، هر چه.
اما اگر آن این بود، پس از آن ما هنوز هم می تواند با استفاده از 'A' - A.
فقط در حال حاضر تفاوت بین A و 'A' است که هنوز هم این 2 بیت است.
من فکر می کنم این نوشته 48. آیا 32 + 64؟ من فکر می کنم آن است؟
هر شخصیت، دوست، Z و Z، K و K، هنوز هم 2 بیت باشد
آنها هنوز هم بیت یکسان به جز برای کسانی که 2 بیت داشته باشد.
بنابراین تا زمانی که که همیشه درست است، بدون در نظر گرفتن اگر ما در حال استفاده از ASCII و یا بعضی از سیستم های دیگر،
و زمانی که تنها یک شماره مجموعه ای از بیت ها هستند که برای هر یک از شخصیت های مختلف وجود دارد،
پس از آن که خوب کار می کند.
این که فقط 32 راه اندازی شد، زیرا یکی از ما احتمالا می تواند از آن استفاده شده است. >> دانلود.
من تمایل به ترجیح می دهند، در صورتی که شما را دیده اند، نیست، اگر بلوک تنها یک خط،
شما می توانید از شر آکولاد، بنابراین تمایل به انجام این کار ترجیح می دهند.
همچنین، شما می دانید که چگونه ما می توانیم چیزهایی مثل [من] + = 1؟
شما همچنین می توانید [I] بیتی و 32 = انجام
و بیتی OR = 32.
همچنین، تعداد مد 2 == 0.
من آن را به نوشتن نیست - - به طوری که به یاد داشته باشید هر مقدار غیر صفر درست است، و 0 نادرست است.
پس "اگر وزارت دفاع تعداد 2 == 0" عنوان کرد و گفت: "اگر مد 2 به حساب نمی آید."
من احتمالا فقط معکوس خطوط و گفت: "اگر تعداد مد 2
آیا OR 1، چیز دیگری و 1، و نه "به طوری که من لازم نیست". "
اما این فقط به عنوان به خوبی کار می کند.
و چه چیز دیگری می توانم انجام دهم که اینجا هستید؟
شما می توانید آنها را با سه تایی ترکیب اگر شما می خواهید، اما پس از آن است که فقط می خواهم همه چیز را مسیه
و احتمالا مشکل تر است به خواندن، به طوری که ما به انجام این کار نیست.
هر کسی هر گونه پیشنهادات؟
این است که همه مشکل پرسید؟ اوه آره.
تا خلاص شدن از شر این خطوط خالی، در حال حاضر خواهیم F،٪ s را چاپ یکی از رشته ها،
ما اف، نسخه قابل چاپ.
حالا آن را اجرا کنیم. آیا من هیچ چیز اشتباه است؟
\ "من می خواهم یک نفر.
باشه. در حال حاضر ما آن را اجرا کنید. شاید به من داد.
Strlen در string.h است.
بنابراین این نکته خوب در مورد صدای جرنگ جرنگ آن را به شما می گوید چیزی است که آن را در
به جای شورای همکاری خلیج فارس که می گوید: "هی، شما چیزی را فراموش کرده، من نمی دانم آنچه در آن بود."
اما این به من بگو، "شما به معنای شامل string.h."
بنابراین من برای هر چیزی سریع نیست، پس از آن چیزی نمی گویم.
اما خواهیم کرد به عنوان مثال خود را انجام دهد، "تشکر 4 اضافه کردن" است.
که به نظر می رسد. آفرین.
پس از بازگشت به بخش اصلی خود را، من تقریبا هرگز آن را انجام دهد.
این برنامه اختیاری است. اصلی و تابع تنها برای آن اختیاری است.
اگر شما هیچ چیز را از اصلی بازگشت نیست، فرض می شود که شما به معنای بازگشت 0.
پرسش و پاسخ؟
باشه. بنابراین در حال حاضر مشکل دوم.
"با عبور از سخنرانی ثانیه 2 هفته است که به مبادله مقادیر 2 متغیر را به یاد بیاورید
که 2 متغیر به تابع (حتی اگر به نام SWAP) دقیقا کار نمی کند، حداقل نه بدون اشاره گر است. "
و چشم پوشی از اشاره گر تا زمانی که ما به آنها را دریافت کنید.
ما می خواهیم به مبادله 2 متغیر، ما یک تابع با استفاده از به انجام آن نیست.
ما هنوز در حال رفتن به آن را به در اصلی انجام دهد مانند آن را می گوید.
اما برای استفاده از آن 2 متغیر، نمی خواهم به استفاده از یک متغیر موقت نیست.
2 راه برای انجام این کار وجود دارد.
شما می توانید آن را با استفاده از عملگرهای باینری سنتی خود را انجام دهید.
بنابراین آیا هر کسی می دانم یک راه سریع و کثیف را از انجام این کار؟
در واقع ممکن است یک دقیقه تفکر کنند. اگر من -
من مشکل راه اندازی مانند آنها می پرسند. بنابراین اگر من 2 متغیر، A، است که فقط یک عدد صحیح
است که من آنها را و مجموع B متغیر، که یکی دیگر از عدد صحیح است که به من داده شده است.
بنابراین اگر من این 2 متغیر است، در حال حاضر من می خواهم به آنها را مبادله.
سنتی، با استفاده از عملگرهای باینری خود را به طور منظم، منظور من، مانند +، -، ÷.
اپراتور بیتی که در باینری عمل می کنند.
بنابراین با استفاده از -، +، ÷، و همه کسانی.
ما می توانیم با انجام این کار چیزی شبیه به مبادله = A + B، و B = A - B، A = A - B.
بنابراین، سلامت عقل را چک کنید، و پس از آن خواهیم کرد چرا که با این نسخهها کار را ببینید.
بیایید می گویند = 7، B = 3، و سپس + B است به 10.
بنابراین ما در حال حاضر ایجاد 10 =، و پس از آن ما در حال انجام B = A - B.
بنابراین ما در حال انجام B = A - B، که در حال رفتن به بود 7، و B = A - B دوباره،
یا A = A - B. که به 10 - 7 که 3 است.
بنابراین در حال حاضر، به درستی، 'A' 7 ساله بود، ب 3 بود، و در حال حاضر ب 7 و 'A' است 3.
به طوری که نوع حس می کند. 'A' است که ترکیبی از 2 عدد.
در این نقطه، 'A' ترکیب است، و پس از آن ما در حال کم کردن از ب اصلی
و پس از آن ما در حال کم کردن چه اصلی بود.
اما این کار برای همه اعداد نیست.
برای دیدن این، اجازه دهید به یک سیستم، بنابراین ما معمولا از اعداد صحیح به عنوان 32 بیت فکر می کنم.
اجازه دهید کار بر روی چیزی است که فقط مثل 4 بیتی.
امیدوارم من آمد تا با یک مثال خوب در حال حاضر.
بنابراین، من می دانم، این آسان نخواهد بود.
بیایید می گویند ما 2 اعداد 1111 و 1111، به طوری که ما باینری هستیم در حال حاضر.
در اعشار واقعی، اگر شما می خواهید به آن فکر می کنم که راه، = 15 و B = 15
و بنابراین ما انتظار داریم، پس ما آنها را SWAP - آنها را حتی نمی باید به همان تعداد،
اما من آن را در این راه است.
بیایید آنها را به همان تعداد است. بیایید 1111 و 0001.
پس A = 15 و B = 1.
پس از ما آنها را مبادله، ما انتظار داریم 'A' را به 1 و B به 15.
بنابراین اولین قدم ما این است که A = A + B.
تعداد ما تنها 4 بیت گسترده، پس، که 1111، +، B، است که 0001،
برای پایان دادن به شود تا 10،000، اما ما فقط باید 4 بیت.
بنابراین در حال حاضر = 0.
و در حال حاضر ما می خواهید به مجموعه B = A - B - در واقع، این هم از آثار کاملا.
= - بیایید ببینیم که اگر این کار کاملا - ب.
بنابراین پس از B = 0 - 1، که هنوز هم خواهد بود 15، و پس از آن A = A - B، که خواهد بود 1.
شاید این کار می کند.
من احساس می کنم مثل یک دلیل آن کار نمی کند با استفاده از به طور منظم وجود دارد.
خوب، پس کار بر روی این فرض که آن را با عملیات باینری به طور منظم کار نیست،
و من به دنبال - من گوگل برای دیدن در صورتی که درست است.
بنابراین ما می خواهیم به آن را انجام دهد با استفاده از عملگرهای بیتی، و سرنخ در اینجا این است XOR است.
بنابراین، معرفی XOR (^) اگر شما از آن دیده نشده است.
آن، دوباره، عملگر بیتی به طوری عمل می کند کمی با بیت، و it's -
اگر شما از بیت های 0 و 1، پس از آن این خواهد بود: 1.
اگر شما از 1 بیت و 0، آن را به 1، 0 بیت و 0 آن را به 0 باشد،
و اگر شما 1 بیت و 1 خواهید بود آن را 0.
بنابراین آن را مانند یا. اگر هر یک از بیت درست باشد، آن 1 است، اما بر خلاف OR، نمی تواند هر دو بیت که درست است.
یا می توانست این باشد 1، XOR این 0 باشد.
بنابراین ما در حال رفتن به می خواهم به استفاده از XOR در اینجا.
فکر می کنم در مورد آن را برای یک دقیقه، من قصد دارم به گوگل.
خب، شما می توانید که نمی خواند، من در حال حاضر در صفحه مبادله الگوریتم XOR است.
امیدوارم این توضیح دهد که چرا نمی توانند من -
این دقیقا همان الگوریتم است که ما فقط به.
من هنوز هم نمی بینم که چرا - من باید فقط یک مثال بد برداشت،
اما در این مورد که در آن 'A' اتفاق افتاده است برای تبدیل شدن به 0، پس از رسیدن به 5 بیت، بنابراین در حال حاضر 0 "است،
این چیزی است که به نام «سرریز عدد صحیح است."
با توجه به ویکیپدیا، "بر خلاف مبادله XOR، این تغییرات مستلزم آن است که آن را با استفاده از برخی از روش های
برای تضمین که X + Y به سرریز عدد صحیح ایجاد نمی کند. "
بنابراین این مشکل دارند این سرریز عدد صحیح بود، اما من چیزی اشتباه است.
مطمئن نیستم. من سعی خواهم کرد به آمد تا با یکی دیگر.
[دانشجو] خوب، سرریز عدد صحیح است که هنگامی که شما در حال تلاش برای قرار دادن یک عدد در آن وجود دارد
بزرگتر از مقدار بیت اختصاص داده اند؟
آره. ما 4 بیت. That's - ما تا به حال 4 بیت، ما پس از آن سعی می کنید برای اضافه کردن 1 به آن، بنابراین ما تا پایان با 5 بیت است.
اما بیت پنجم می شود قطع، آره.
در واقع ممکن است -
[دانشجو] می کند که شما یک خطا پرتاب، یا که - خواهد بود که پرتاب خطا؟
شماره بنابراین هیچ خطا وجود دارد. هنگامی که شما به سطح مونتاژ کنید، کمی ویژه
در جایی قرار است که گفت: سرریز وجود دارد، اما در C شما از نوع فقط با آن مقابله نمی شده است.
شما در واقع می تواند به مقابله با آن، مگر اینکه شما با استفاده از دستورالعمل مجمع خاص در C.
بیایید فکر می کنم در مورد مبادله XOR.
و من فکر می کنم این مقاله ویکیپدیا را نیز گفت که -
پس از آن نیز به ارمغان آورد تا حسابی مدولار، بنابراین من حدس می زنم من بود، در تئوری، انجام حساب های مدولار
وقتی که من گفتم که 0 - 1 است 15 دوباره.
به طوری که در واقع ممکن است - در یک پردازنده به طور منظم می کند 0 - 1 = 15.
از آنجا که ما تا پایان در 0، 1 تفریق، پس آن را فقط به پایان می رسد در اطراف به 1111.
بنابراین این الگوریتم در واقع ممکن است، کار + B، A - B، B - که ممکن است خوب.
اما برخی از پردازنده ها وجود دارد که این کار را انجام نمی، و پس از آن خوب نخواهد بود در آن آنهایی که خاص.
مبادله XOR بر روی هر پردازنده کار می کنند. باشه.
این ایده آن است که تصور می شود، هر چند.
جایی که ما با استفاده از XOR به به نحوی دریافت اطلاعات از هر دو به 1 از متغیرها،
و سپس بیرون کشیدن اطلاعات از متغیرهای فردی دوباره.
بنابراین آیا کسی ایده / پاسخ؟
[پاسخ دانشجویی، ناخوانا]
بنابراین این باید کار کند، و همچنین، XOR جابجایی است.
صرف نظر از این که سفارش این 2 عدد رخ می دهد در اینجا،
این نتیجه به همان.
بنابراین ^ ب B ^.
شما همچنین ممکن است دیدن این عنوان نوشته شده ^ = B، B ^ =، ^ = B دوباره.
بنابراین، این راست است، و ببینید که چرا این آثار، از بیت فکر می کنم.
با استفاده از شماره smallish، اجازه دهید بگویم 11،001 و 01،100.
بنابراین این 'A' است و این ب.
بنابراین ^ = B.
ما قصد داریم به تنظیم = 'A' XOR این 2 چیز است.
بنابراین 1 ^ 0 1 است 1 ^ 1 0 است 0 ^ 1، 1 و 0 ^ 0 0 است، 1 ^ 0 1 است.
پس، اگر شما در عدد دهدهی نگاه کنید، آن را برای رفتن به -
شما نمی خواهید برای دیدن بسیاری از ارتباط بین اصلی و جدید،
اما با نگاه کردن به بیت، 'A' در حال حاضر مانند مش از اطلاعات
هر دو اصلی 'A' و B اصلی.
بنابراین اگر ما را B ^، ما می بینیم که ما را به پایان خواهم در اصلی.
و اگر ما را اصلی 'A' ^ جدید '،' ما می بینیم ما تا پایان در ب اصلی.
بنابراین (A ^ B) ^ B = '.' اصلی
و (A ^ B) ^ A = B اصلی.
وجود دارد - یکی دیگر از راه دیدن این XOR هر چیزی به خودی خود همیشه 0 است.
بنابراین 1101 ^ 1101، تمام بیت ها به همان.
بنابراین هرگز به یک مورد که در آن 1 0 و 1 است.
پس این 0000.
همین کار را با این. (A ^ B) ^ B است مانند ^ (B ^ B).
(B ^ B) خواهد بود 0؛ ^ 0 فقط برای رفتن به '،' از آنجا که همه بیت ها 0.
بنابراین تنها کسانی که می رویم می شود که در آن 'A' در اصل یک 1 - آنهایی که تا به حال.
و همین ایده در اینجا. من کاملا مطمئنم که آن را نیز جابجایی.
آره. من می گویند پیش از آن بود که جابجایی.
^ '،' و آن را انجمنی، بنابراین در حال حاضر (B ^) ^.
و ما می توانیم انجام دهیم B ^ (^).
و دوباره، ما ب اصلی است.
پس 'A' است که در حال حاضر ترکیبی از 'A' و B با هم است.
با استفاده از ما دسته کوچک موسیقی جاز «ما می گویند B = دسته کوچک موسیقی جاز '' ^ اصلی B، ما اصلی است."
و در حال حاضر دسته کوچک موسیقی جاز = 'A' ^ B، که اصلی بود - و یا است که در حال حاضر چه 'a' یا B بود.
که این مورد را در اینجا. = B، B، قدیمی است.
بنابراین در حال حاضر همه چیز به عقب در جهت تعویض.
اگر ما در واقع در بیت نگاه، B = A ^ B، در جریان است XOR این 2،
و پاسخ به این، و بعد از آن A = A ^ B است XORing این 2 و پاسخ این است.
پرسش و پاسخ؟ باشه. بنابراین یکی از آخرین است تا حدودی میزان قابل توجهی مشکل تر است.
[دانشجو] من فکر می کنم او یک سوال در مورد آن است. >> اوه، ببخشید.
[دانشجو] آنچه در واقع سریعتر است؟ اگر شما استفاده از این XOR، و یا اگر یک متغیر جدید به شما اعلام؟
بنابراین چه چیزی است که در واقع سریعتر، اعلام یک متغیر جدید و یا با استفاده از XOR به مبادله؟
پاسخ این است که، در تمام احتمال، یک متغیر موقت است.
و این است چرا که یک بار آن را کامپایل شده - به طوری که در سطح مونتاژ،
چنین چیزی به عنوان متغیرهای محلی و یا هر متغیر های موقت و یا هر یک از این مسائل وجود ندارد.
آنها فقط دوست - حافظه وجود دارد، و ثبات وجود دارد.
ثبات ها است که در آن همه چیز به طور جدی اتفاق می افتد.
شما 2 چیز در حافظه اضافه کردن، اضافه کردن 2 چیز در ثبات.
و شما را از حافظه به ثبات سپس آنها را اضافه کنید،
و پس از آن شما ممکن است آنها را به عقب را در حافظه قرار داده است، اما همه عمل اتفاق می افتد در ثبات است.
بنابراین، هنگامی که شما با استفاده از رویکرد متغیر موقت، معمولا چه اتفاقی می افتد
در حال حاضر این 2 عدد در ثبات ها است.
و سپس از آن نقطه به بعد، پس از شما آنها را جابجا،
آن را فقط با استفاده از ثبت نام دیگر شروع می شود.
هر جایی که باشید به حال شده است با استفاده از B، فقط ثبت نام که در حال حاضر ذخیره شد. 'استفاده کنید
بنابراین لازم نیست برای انجام هر چیزی را به انجام مبادله. آره؟
[دانشجو] اما آن را نیز طول می کشد حافظه بیشتر، درست است؟
آن را تنها حافظه بیشتر را اگر به آن نیاز دارد برای ذخیره متغیر موقت است.
دوست دارم اگر شما بعد از استفاده از آن متغیر موقت دوباره به جایی،
پس از آن - و یا چیزی را به آن متغیر به طور موقت شما اختصاص دهید.
بنابراین اگر در هر نقطه ای در زمان '،' B در دمای مقادیر مجزا یا چیزی،
سپس آن را از رفتن به مکان های مجزا در حافظه است، اما این درست است که
بسیاری از متغیرهای محلی هستند که فقط در ثبات وجود داشته باشد وجود دارد.
که در این صورت، آن را به حافظه هرگز قرار داده است، و بنابراین شما در حال هدر رفتن حافظه هرگز.
باشه. آخرین سوال کمی بیشتر است.
بنابراین در اینجا، در این دستگاه CS50، یک فرهنگ لغت وجود دارد.
و دلیل آن این است زیرا [B66] یک بررسی کننده غلط املایی که در آن شما می شود به نوشتن است
با استفاده از جداول هش و یا تلاش می کند و یا برخی از ساختمان داده است.
شما در حال رفتن به نوشتن یک بررسی کننده غلط املایی، و شما در حال رفتن به استفاده از این فرهنگ لغت برای انجام این کار است.
اما برای این مشکل، ما فقط به نگاه کردن به دیدن اگر یک کلمه در فرهنگ لغت است.
بنابراین به جای ذخیره سازی فرهنگ لغت کل در برخی از ساختمان داده
و پس از آن بیش از یک سند را که به دنبال دیدن اگر هر چیزی را به اشتباه،
ما فقط می خواهید برای پیدا کردن 1 کلمه است. بنابراین ما فقط می تواند بیش از اسکن کل فرهنگ لغت
و ما کلمه در فرهنگ لغت کل اگر هرگز، و سپس آن را در آنجا نبود.
اگر ما در طول کل فرهنگ لغت اسکن و کلمه، پس از آن ما خوب است، ما آن را در بر داشت.
این گزارش می گوید که در اینجا ما می خواهیم برای شروع به دنبال در تابع کنترل فایل C،
از آنجایی که ما می خواهیم به خواندن فرهنگ لغت،
اما من به اشاره در اینجا به عنوان که توابع شما باید از فکر می کنم.
من آنها را در فضاهای ارسال.
بنابراین مهمترین شما می خواهید به F باز و پس از آن، به ناچار، F بسته نگاه کنید،
خواهد شد که در پایان برنامه های خود را، و F F اسکن.
شما همچنین می توانید F خواندن استفاده کنید، اما احتمالا شما نمی خواهید به
چرا که - شما پایان کار نبود تا نیاز است که.
F اسکن F چیزی است که شما در حال رفتن به استفاده از فرهنگ لغت برای اسکن.
و بنابراین شما لازم نیست برای کد کردن راه حل، فقط سعی کنید و مثل شبه کد راه خود را
به یک راه حل، و پس از آن خواهیم بحث در مورد آن است.
و در واقع، از آنجایی که من در حال حاضر به شما این، اگر شما به هر ترمینال و یا پوسته لوازم خود را،
من می خواهم - من معمولا - اگر شما را دیده اند، هنوز رتبهدهی نشده است، من نمی دانم اگر شما در کلاس،
اما مرد، به طوری که صفحات مرد، برای نگاه کردن به تقریبا هر تابع بسیار مفید است.
بنابراین من می تواند انجام دهد، مانند، F مرد، اسکن F.
این است که در حال حاضر اطلاعات در مورد خانواده F اسکن از توابع است.
من نیز می تواند F مرد، باز، انجام دهند و که به من جزئیات آن را.
بنابراین اگر شما می دانید چه عملکرد شما با استفاده از، و شما در حال خواندن کد
و شما می بینید برخی از عملکرد و شما، مانند "چه می کند این کار را انجام دهند؟"
فقط انسان است که نام تابع.
از نمونه های عجیب و غریب یک زن و شوهر وجود دارد که در آن شما ممکن است مجبور به گفتن نیست
دوست دارم. مرد 2 که نام تابع، یا انسان 3 که نام تابع،
اما شما فقط مجبور به انجام این کار اگر انسان نام تابع اتفاق نمی افتد اولین بار به کار است.
[دانشجو] بنابراین من خواندن این صفحه را برای مرد باز است، اما من هنوز در مورد نحوه استفاده از آن و برنامه اشتباه گرفته شده است.
باشه. بسیاری از صفحات مرد کمتر از مفید است.
آنها بیشتر کمک کننده باشند اگر شما در حال حاضر می دانیم که آنچه انجام می دهند
و سپس شما فقط باید به خاطر داشته باشید منظور از استدلال و یا چیزی است.
یا آنها می توانند به شما یک دید کلی بدهد، اما برخی از آنها بسیار سخت و طاقت فرسا هستند.
مانند F F اسکن، نیز می باشد. این به شما می دهد اطلاعات را برای تمام این توابع،
و 1 خط پایین اینجا اتفاق می افتد گفت: "F F اسکن می خواند از نقطه نظر رشته یا جریان است."
اما F باز کنید. بنابراین، چگونه می توانیم با استفاده از F باز است؟
این ایده از یک برنامه است که نیاز به انجام این کار فایل I / O است که
برای بار اول شما باید برای باز کردن فایل شما می خواهید برای انجام کارهای با، و به ناچار،
خواندن چیزهایی که از آن فایل و چیزهای با آنها است.
F باز کردن آن چیزی است که ما از آن برای باز کردن فایل می باشد.
چیزی که ما به عقب بر گردیم، پس چه فایل ما می خواهیم برای باز کردن، آن را به ما می دهد -
در اینجا آن را می گوید "/ کاربر / سهم / DICT / کلمه است."
این فایل که ما می خواهیم برای باز کردن است، و ما می خواهیم آن را باز کنید -
ما باید به طور واضح مشخص کنید که آیا ما می خواهیم برای باز کردن آن را به خواندن و یا اگر ما می خواهیم برای باز کردن آن را به نوشتن.
یک زن و شوهر از ترکیبات و مواد وجود دارد، اما ما می خواهیم برای باز کردن این برای خواندن.
ما می خواهیم به خواندن از فایل.
پس چه چیزی این بازگشت؟ این تابع فایل های ستاره (*)،
و من فقط همه چیز را در F متغیر است، به طوری * را نشان می دهد،
باز هم، آن یک اشاره گر است، اما ما نمی خواهیم برای مقابله با اشاره گر است.
شما می توانید از F فکر می کنم به عنوان، F است که در حال حاضر متغیر شما قصد استفاده از فایل به نمایندگی.
بنابراین اگر شما می خواهید از فایل به عنوان خوانده شده، شما را از F.
اگر شما می خواهید برای بستن فایل، اف به شما نزدیک است.
بنابراین در پایان این برنامه زمانی که ما به ناچار می خواهید برای بستن پرونده، چه باید انجام دهید؟
ما می خواهیم برای بستن F.
بنابراین در حال حاضر فایل تابع گذشته است که ما قصد داریم که مایل به استفاده از اسکن F، F F اسکن است.
و آنچه را که می کند این است که آن را بر روی فایل به دنبال یک الگوی برای مطابقت با اسکن.
در حال جستجو در صفحه مرد در اینجا، ما می بینیم نوع int F F اسکن، چشم پوشی مقدار بازگشتی در حال حاضر است.
بحث اول این است که جریان * فایل، پس آرگومان اول ما در حال رفتن به خواهید به تصویب F.
ما در حال اسکن بیش از F.
آرگومان دوم یک رشته فرمت است.
من به شما یک رشته فرمت را در حال حاضر.
من فکر می کنم ما اتفاق می افتد می گویند، 127s \ N، بسیاری از که غیر ضروری است.
این ایده از آنچه که رشته فرمت، این است که شما می توانید از F اسکن به عنوان مقابل از F چاپ فکر می کنم.
بنابراین f چاپ، اف چاپ ما نیز استفاده از این نوع پارامتر فرمت
اما در F چاپ آنچه که ما در حال انجام است - اجازه دهید نگاهی به معادل.
بنابراین f، چاپ و در واقع اف چاپ F، که در آن استدلال اول است برای رفتن به F نیز وجود دارد.
هنگامی که شما نسخه قابل چاپ F، ما می توانیم چیزی مشابه این بگویید، "چاپ 127s \ N" و پس از آن اگر ما تصویب آن برخی از رشته،
آن را برای چاپ رشته و سپس یک خط جدید است.
127 به معنای، من کاملا مطمئن هستم، اما من خودم رو محدود به آن هرگز،
شما حتی نمی نیاز به گفتن '127 'در F چاپ،
اما آنچه در آن به معنی این است که از چاپ 127 کاراکتر اول است.
بنابراین من کاملا مطمئن هستم که این مورد است. شما می توانید برای گوگل است.
اما در یکی از بعد من تقریبا مثبت به این معنی که.
پس این است که چاپ 127 حرف اول، به دنبال یک خط جدید است.
F اسکن F در حال حاضر، به جای نگاه کردن به یک متغیر و چاپ آن،
آن را که در برخی از رشته نگاه کنید، و ذخیره به الگوی متغیر است.
اجازه دهید در واقع استفاده از F اسکن در مثال های مختلف.
بنابراین اجازه دهید می گویند که ما تا به حال برخی از نوع int x = 4،
و ما می خواستیم برای ایجاد یک رشته ساخته شده از - می خواستم برای ایجاد رشته
که بود، این خواهد آمد تا خیلی بعد،
چیزی که درست مثل 4.JPG.
بنابراین این ممکن است یک برنامه ای که در آن شما خواهد شمارنده مجموع،
خلاصه مقابله با من، و شما می خواهید برای ذخیره کردن یک دسته از تصاویر.
بنابراین شما می خواهید به نجات i.jpg، جایی که من برخی از تکرار از حلقه خود را.
پس چگونه این رشته که برای JPEG ما را؟
اگر شما می خواهید به چاپ 4.JPG، ما فقط می تواند اف چاپ، d.jpg٪ می گویند،
و پس از آن خواهد بود که برای JPEG چاپ.
اما اگر ما می خواهیم در به صرفه جویی 4.JPG رشته، ما استفاده از F اسکن.
بنابراین رشته ها - در واقع ما نمی توانند - شخصیت، کاراکتر ها، اجازه دهید به 100.
بنابراین من فقط به اعلام برخی از مجموعه ای از 100 کاراکتر،
و این چیزی است که ما به ناچار برای رفتن به ذخیره سازی که JPEG شوید.
بنابراین ما در حال رفتن به استفاده از F اسکن، و فرمت، چگونه ما را d.jpg٪ می گویند
به منظور چاپ 4.JPG، فرمت این است که رفتن به d.jpg٪.
فرمت d.jpg٪، آنچه ما می خواهیم برای جایگزینی D٪ با X است،
و در حال حاضر ما نیاز به ذخیره آن رشته در جایی.
و جایی که ما در حال رفتن به مغازه های این رشته در آرایه.
بنابراین بعد از این خط از کد، ها، اگر ما نسخه قابل چاپ F، S٪ از ثانیه متغیر،
آن را به چاپ 4.JPG.
بنابراین F اسکن F همان اسکن F است، جز در حال حاضر آن را به دنبال بیش از این فایل
برای آنچه که برای ذخیره در S است.
این چیزی است که بحث گذشته است برای رفتن به.
ما می خواهیم به فروشگاه اینترنتی - "خانواده F اسکن اسکن از توابع در هر دو با توجه به فرمت که در زیر سعی شده است.
اگر هر یک از آنها در نقاط محل ذخیره می شود، شما ممکن است بازگشت - "
نه، ما ممکن است خوب باشد. اجازه دهید من فکر می کنم برای یک ثانیه.
بنابراین اسکن F نمی کند - چی عملکرد کند که؟
بنابراین اسکن F را به یک عدد صحیح و نقطه JPG.
رفتن به [mumbles].
ذخیره متغیر int در رشته نوع int C.
است این متغیر، یا آنچه که این تابع نامیده می شود؟
بله. That's - بله. پس آنچه که من تعریف را به شما قبل از اف چاپ
که - است که حس می کند بسیار بیشتر است، به همین دلیل من گفت که خیلی بیشتر شبیه به F چاپ.
اسکن F نوع مانند F چاپ، اما اف نسخه قابل چاپ در حال رفتن به آن را اسکن
و جایگزین کردن متغیر و در حال حاضر آن را در یک رشته ذخیره.
به جای چاپ آن، آن را به فروشگاه در یک رشته است.
به طوری که به طور کامل نادیده گرفت. شما هنوز هم می تواند تعیین فرمت و فکر می کنم که می خواهم از F چاپ.
بنابراین در حال حاضر، اگر ما می خواستیم به انجام کار 4.JPG، ما را اف چاپ، انجام X از این.
پس چه اسکن F در حال انجام است - چه به سوال شما خواهد بود؟
[دانشجو] من فقط در مورد آنچه که ما در حال تلاش برای انجام درست اینجا اشتباه گرفته
که با JPEG. که 1 زمان بیشتری را توضیح دهید؟
بنابراین این - این کمتر relevent F اسکن F در حال حاضر، امیدوارم، از آن خواهد شد کراوات دوباره در نوعی از راه است.
اما آنچه من در ابتدا قصد داشت به نشان می دهد - این است که در واقع به طور مستقیم مربوط به این [؟ F5]
شما در حال رفتن به با استفاده از اف چاپ، که در آن، می گویند ما دارای 100 عکس،
و شما می خواهید به خواندن تصویر 1.JPG 2.JPG، 3.JPG.
لذا به منظور انجام این کار، شما نیاز به F باز، و سپس شما باید در رشته ای که شما می خواهید برای باز کردن عبور.
بنابراین ما می خواهیم برای باز کردن 1.JPG، به منظور ایجاد رشته است که 1.JPG،
F چاپ ما انجام می دهیم٪ d.jpg ما برای اعضای هیات من = 0 انجام نیست.
کمتر از 40، من + +.
بنابراین s چاپ F٪ d.jpg از من است.
بنابراین بعد از این خط، در حال حاضر متغیر یا آرایه رفتن به 1.JPG.
یا، 0.jpg، 1.JPG 2.JPG. و بنابراین ما می توانید برای باز کردن، به نوبه خود، هر تصویر برای خواندن.
به طوری که آنچه چاپ F کند. آیا به نظر شما چیست نسخه قابل چاپ F در حال حاضر انجام؟
[دانشجو] خوب، پس از آن مصرف - آن را ایجاد یک رشته، something.jpg، و سپس ذخیره آن است.
بله. ایجاد - این یکی دیگر از رشته فرمت، درست مثل F F اسکن و چاپ،
که در آن درج همه متغیرها را به آرگومان دوم، ممکن است به عنوان مخالف به من.
شاید - منظورم این است، که در این مورد است. اما به هر منظور از استدلال است.
این که برای وارد کردن تمام متغیرها را در رشته فرمت
و سپس به بافر ما فروشگاه؛ ما تماس بگیرید که یک بافر، از آن جایی که ما در حال ذخیره سازی رشته ای است.
بنابراین ما در حال ذخیره سازی در داخل از S رشته به درستی فرمت شده، D٪ با 4 جایگزین شده است.
[دانشجو] بنابراین اگر ما این است، F متغیر فقط برای رفتن به reassigned؟
بله. بنابراین ما باید F اولیه قبل از انجام این کار نزدیک است.
اما - و پس از آن نیز، اگر F باز کردن در اینجا وجود ندارد، پس از آن ما خواهد بود نیاز به گفتن نیست -
آره. اما این یک صد فایل های مختلف را باز کنید.
[دانشجو] اما ما نمی خواهد قادر به دسترسی و یا - خوب.
باشه. بنابراین اسکن F، F، F اسکن نوع از همان ایده است،
اما به جای، به جای ذخیره سازی آن را به یک رشته، آن را بیشتر شبیه به شما در حال حاضر
رفتن بیش از یک نیش و تطبیق الگو در مقابل این رشته و ذخیره نتایج به متغیر.
شما می توانید F به اسکن به بیش از چیزی شبیه به 4.JPG تجزیه، و ذخیره در 4 عدد صحیح را در مجموع بین المللی X استفاده کنید.
این چیزی است که ما می توانیم اسکن F برای استفاده است.
F اسکن F است برای انجام این کار در خط فرمان است.
من در لیست نتایج نمایش داده میشود، در واقع کاملا مطمئنم که این همان چیزی است که کتابخانه CS50 می کند.
بنابراین، هنگامی که به شما می گویند، "نوع int،" آن را اسکن F-نشستند بر - F اسکن شما می توانید ورودی کاربر است.
F اسکن F است برای انجام کار مشابه، اما با استفاده از یک فایل را اسکن.
بنابراین در اینجا، ما در حال اسکن بیش از این فایل.
الگوی ما در حال تلاش برای مطابقت با برخی از رشته است که به طول 127 کاراکتر است
به دنبال یک خط جدید
بنابراین من کاملا مطمئنم که ما حتی می توانست بگوید "مسابقه ها،" از آنجا که در فرهنگ لغت
ما اتفاق می افتد که ما تضمین هیچ کلمه ای است که طولانی است،
و همچنین F F اسکن، من فکر می کنم، در خط جدید جلوگیری از بدون توجه به آنچه.
اما ما می خواهیم خط جدید در مسابقه، و -
[دانشجو] اگر ما از خط جدید را شامل نمی شود، آن را نه پیدا کردن بخش هایی از یک کلمه؟
- هر - به دنبال در فرهنگ لغت -
بنابراین در فرهنگ لغت، این ها همه حرف ما است.
هر کدام در یک خط جدید است.
اف اسکن شده است را انتخاب کنید تا این کلمه است.
اگر ما خط جدید را شامل نمی شود، سپس آن را ممکن است که F اسکن بعدی فقط به خواندن خط جدید است.
اما از جمله خط جدید و سپس فقط به خط جدید را نادیده گرفت.
اما ما به بخشی از یک کلمه را هرگز، از آنجا که ما همیشه خواندن تا یک خط جدید، بدون توجه به آنچه.
[دانشجو] اما چه می شود اگر شما جستجو برای کلمه "cissa،" مثل cissa.
خواهد شد که آن را پیدا کنید، و می گویند که این یک بازی است؟
بنابراین در اینجا ما - آن را می خواند در - این است که در واقع یک نقطه خوب است.
ما در حال حاضر با استفاده از هرگز - کلمه ما به دنبال اولین آرگومان خط فرمان است.
بنابراین رشته، کلمه = ی argv 1.
بنابراین رشته ما به دنبال ی argv 1 است.
ما به دنبال یک کلمه در تمام در F اسکن ما نیست.
آنچه ما با اسکن F انجام شد هر کلمه در فرهنگ لغت،
و پس از آن هنگامی که که کلمه ای که ما در حال رفتن به استفاده از strcmp آنها را مقایسه کنید.
ما قصد داریم برای مقایسه از کلمه ما و آنچه که ما فقط خواندن شوید.
پس به ناچار، ما قصد داریم برای پایان دادن به انجام یک دسته از اسکن FS
تا زمانی که خیلی اتفاق می افتد که F اسکن باز خواهد گشت -
از آن خواهد شد تا زمانی که آن را به یک کلمه جدید همسان، بازگشت،
و آن را به چیز دیگری را در اسرع وقت آن شکست خورده است برای مطابقت با کلمه بازگشت.
ما در حال خواندن بر روی کل فرهنگ لغت، ذخیره سازی خط به خط هر کلمه را در ثانیه متغیر است.
سپس ما در مقایسه با کلمه با S، و اگر مقایسه == 0،
strcmp اتفاق می افتد را به 0 اگر یک مسابقه ساخته شده بود.
بنابراین اگر آن را 0 بود، پس از آن ما می توانیم F، چاپ همسان،
یا کلمه در فرهنگ لغت است، و یا هر آنچه که شما می خواهید به چاپ F.
و پس از آن - ما نمی خواهیم به F نزدیک بارها و بارها.
این نوع از چیزی که ما می خواهیم انجام دهیم این است، و ما نه فقط به کلمه در فرهنگ لغت به دنبال.
بنابراین ما می توانیم آن، اگر ما می خواستیم برای الگوی خود را، cissa نگاه، مثل شما گفت که قبل از،
اگر ما می خواستیم که برای الگو نگاه کنید، سپس آن را در مورد شکست
زیرا که در واقع نه یک کلمه است، اما یکی از کلمات موجود در فرهنگ لغت اتفاق می افتد که در آن.
پس از آن که این کلمه، مطابقت اما این زیر مجموعه ای از کلمه، کلمه ای است که به خودی خود نیست.
اما این که چگونه ما در حال استفاده از آن نیست، ما در حال خواندن در هر کلمه
و پس از آن در مقایسه کلمه که ما با آن کلمه است.
بنابراین ما همواره در مقایسه کلمات کامل.
من می توانم ارسال راه حل نهایی بعد.
این نوع از نزدیک به جواب درست، من فکر می کنم.
[نظر دانشجو، ناخوانا]
اوه، من آیا خلاص شدن از شر آن قبل از؟ کاراکتر، من حدس می زنم ما گفت 127 - من فراموش می کنم آنچه را که بزرگترین است.
ما فقط 128 انجام دهد، بنابراین در حال حاضر به اندازه کافی بلند است.
ما نیاز نداریم به چاپ هر چیزی است.
ما همچنین می خواهید به فایل های ما به بستن، و است که باید در مورد جواب درست باشد.
CS50.TV