[Powered by Google Translate] [هفته 3] [دیوید J. مالان - دانشگاه هاروارد] [این CS50 است. - CS50.TV] اجازه بدهید به ما هدایت من در جهت از جایی که آخرین بار ما را ترک کردن، بود که شروع به فکر می کنم کمی بیشتر از در مورد نحو و تلاش کمی کمتر به فکر می کنم در مورد تمام فروع است که زمان کمی طول می کشد تا به آب و هوای جدید خو گرفتن به تا کنون در شرایط استفاده از سمی کالن و پرانتز و آکولاد، برای شروع مصرف چیزهای کمی را به سطح بالاتری مفهومی به طوری که مشکلات ما در حال حاضر شروع به حل بیش از چند هفته آینده در صدد خیلی بیشتر به مشکلات مفهومی سطح بالاتر و کمی کمتر در نحوی به عنوان شما می توانید پای خود را خیس و دستان خود را کثیف با برخی از نحو از این چند هفته گذشته است. پس به یاد آورید که در هفته گذشته، ما به معرفی این مفهوم از یک آرایه. و یک آرایه در زبان انگلیسی را می توان به عنوان آنچه که شرح داده شده است؟ >> [پاسخ دانش آموز نامفهوم] ببخشید؟ مجموعه ای از؟ >> [پاسخ دانش آموز نامفهوم] >> خوب، خوب است. مجموعه ای از اقلام است. بنابراین ما شاهد آرایه به خراش است. اگر شما اتفاق افتاده است به برای pset استفاده از 0 یکی از لیست خراشی است که شما می توانید همه چیز را بکشید مانند پرتقال و موز را به موجودی از انواع، که این نوع مانند آنچه که یک آرایه است. و پس از آن بیشتر از لحاظ فنی، در چارچوب یک کامپیوتر واقعی، یک آرایه است که به سادگی تکه هم پیوسته از حافظه است. به عبارت دیگر، شما باید یک بایت، پس از آن دیگر بایت، پس از آن یک بایت دیگر، پس از آن دیگر بایت، و اگر شما آن کلمه در ادامه متن در یک تصویر را به منظور جلب. آنها را به عقب خواهد بود به پشت به پشت به پشت. این چیزی است که ما به معنای به هم پیوسته است. پس از آن بایت شماره 1، پس از آن 2، سپس 3. این به آن معنا نیست که در اینجا، اینجا، اینجا، اینجا. آرایه یک تکه به هم پیوسته از 0 یا چند بایت است. پس چه هستند آنها مفید است؟ به یاد ما این نوع از نمونه ساختگی از نمرات آزمون مردم ذخیره سازی در یک برنامه برای محاسبه میانگین آزمون خود را برای برخی از دوره، و به یاد داشته باشید که ما می توانیم شروع به نوشتن آن برنامه اعلام quiz1 متغیر است. پس ما می تواند متغیر دیگر به نام quiz2 داشته باشد. اما اگر 3 نفر وجود دارد آزمونها در این کلاس، quiz4. و یا اگر مسابقه بارگیری در این هفته وجود دارد، خواهد بود quiz5، quiz6، quiz7. بنابراین شما می توانید تمام از این متغیر ها در داخل تابع main اعلام کرد و یا در جایی دیگر در برنامه شما، و مشکل با این رویکرد، آسان هر چند از آن است که فقط به کپی و چسباندن، آن است که تنها بسیار به سرعت تبدیل به گنده. خدای ناکرده شما در واقع باید 30 آزمونها تا 50 آزمونها. اگر آن را مانند یک مدرسه به سبک مسابقه پاپ روزانه، پس شما فقط باید مسخره فهرست طولانی از متغیرهای اعلام شده، و این بسیار به سرعت از کنترل خارج می شود. این زشت است، آن را سخت به حفظ، آن را بسیار آسان تر را به یک وارد اگر شما 1 تعداد در جایی در برنامه شما mistyped. بنابراین ما به معرفی مفهوم یک آرایه به جای. و به یاد آورید که ما این برنامه را با انجام یک چیزی کمی شبیه به این اجرا. اجازه بدهید من به منبع امروز 3 دوشنبه دایرکتوری و باز کردن آرایه، که ما آن را دیدم آخرین باری. و حتی اگر یک زن و شوهر از کلاهبرداری های جدید C در اینجا وجود دارد، در میان آنها مفهوم ثابت، به یاد بیاورید که ما اعلام کرد شناور متعدد در اصل با استفاده از این نحو: شناور، و سپس نام متغیر، پس از آن ما با استفاده از پرانتز مربع واقعا برای اولین بار، و آنچه ما در داخل این پرانتز مربع بود به طور موثر یک عدد قرار داده است. اما به جای قرار دادن یک شماره، من قرار داده است این کلمه با حروف بزرگ، آزمونها. و آنچه انگیزه برای قرار دادن یک کلمه با حروف بزرگ مانند آزمونها و پس از آن با استفاده از فوت و فن 17 خط در اینجا به واقع که به یک عدد است؟ انگیزه وجود دارد چه بود؟ آره. [پاسخ دانش آموز نامفهوم] >> دقیقا. اگر ما می خواهیم که ارزش 2 را تغییر دهید، ما فقط باید آن را در 1 مکان را تغییر دهید به دلیل در نظر گرفتن - من حتی به یاد داشته باشید که این برنامه دقیقا، اما اگر شما آن را فقط تماس مختصر حاصل کردن به شما را ببینید آزمونها، آزمونها. همانطور که می بینید آزمونها، پایین تر آزمونها. بنابراین اگر ما این را ثابت، استفاده از این تیز تعریف، ما را تایپ 2، بعد، 2، و سپس 2، پس از آن 2، که خوب است. این امر می تواند به همان اندازه درست است. اما فرض کنید که در سال آینده در حال حاضر 3 آزمونها در CS50. پس من باید بروم و به روز رسانی کد، من باید آن را کامپایل مجدد، اما مشکل این است که اگر من به چیزی احمقانه، مثل من نادیده می گیرند 1 اشاره از 2 و فراموش پلاگین در 3، این برنامه کل خیلی خوب می تواند بشکند. بنابراین ما فقط برای درخواست مشکل است. بنابراین مفهوم ثابت شده است همه چیز در مورد مقاطعه از برخی تکه ای از داده ها، که آیا آن یک رشته و یا یک کاراکتر و یا شناور و یا هر چیز دیگری است، و اعلام آن 1 به طوری که شما به آسانی می توانید آن را تغییر دهید در آینده است. و آن را نیز، رک و پوست کنده، کمی آسان تر است را بخوانید چرا که اگر شما فقط به این فکر می کنم در حال حاضر، آن آزمونها، و یا حتی می تواند آن را چیزی تغییر نام NUMBER_OF_QUIZZES یا چیزی صریح تر است. این کد فقط کمی واضح تر به آنچه در آن انجام می شود، و شما تعجب می کنم که کمی کمتر چه شماره 2 ممکن است رخ دهد به معنی. بنابراین ثابت تا به حال چیزی برای انجام اساسا با آرایه. آرایه از طریق این پرانتز مربع معرفی شد. پس توجه کنید که در خط 23 ما از کاربر، "چه نمره آزمون خود را؟" پس ما فقط این حلقه که ظاهرا می پرسد کاربر برای نمرات خود را داشته باشد. چگونه؟ از 0 تا 2 تکرار. و من می گویم 2 چون آزمونها در همه کلاه است در حال حاضر 2. پس از آن از 0 تا 2 تکرار و سپس آن را چاپ # از امتحان چیزی از چیزی، و سپس آن را با استفاده از GetFloat برای گرفتن مقدار از کاربر است. بنابراین این تنها قطعه جدیدی از نحو از چهارشنبه گذشته اطلاع می دهد. اگر شما می خواهید برای ذخیره چیزی در یک مکان خاص که در آن آرایه، دوباره از براکت استفاده کنید. بنابراین یک بیت از دوگانگی در اینجا وجود دارد. اولین بار که شما با استفاده از براکت مربع شما با استفاده از آن مشخص چقدر بزرگ است که شما می خواهید به آرایه. اما این زمینه در اینجا جایی که ما دوباره این براکت استخدام به این معنی است که در آن آرایه می خواهید برای قرار دادن برخی از ارزش؟ و تمایز در اینجا می توان از متن استنباط شده است. توجه داشته باشید که در اینجا ما باید یک نوع داده، پس ما باید به نام یک متغیر، پس ما باید پرانتز مربع خود را با یک شماره در داخل، نقطه و ویرگول بدین شکل؛ همین. به طوری که یک اعلامیه است. این فقط به عنوان اینکه ما چیزی مانند شناور grade1 انجام شده بود، شناور grade2؛ اما باز هم، این بسیار به سرعت devolves بیش از حد به راه کپی، چسباندن، بنابراین به جای ما فقط آن را به عنوان چنین ساده، که بدان معنی است پس ما یک درجه است که می تواند در براکت 0 ذخیره می شوند، ما دیگر از کلاس است که می تواند در براکت 1 ذخیره می شود، اما اگر من خیط و پیت کردن، و برای مثال، حلقه من می رود تا کنون - به عنوان مثال، من را در این کمتر از یا مساوی با فراخوان منبع اشکال قبلی بود - که بدان معنی است که در برخی از تکرار تصادفی سوم از این حلقه من با استفاده از براکت 2. به طور موثر، آنچه ممکن است اتفاق می افتد؟ ببخشید؟ [دانشجو] به جا شود. >> آیا آن جا به جا شود؟ چه می توان جایگزین کرد؟ این به معنای گفتن است جایگزین در محل 2 با مقدار بازگشتی از GetFloat. اما مشکل این است که چقدر بزرگ است مجموعه ای در این نقطه در داستان است؟ [پاسخ دانش آموز نامفهوم] >> آرایه است هنوز هم تنها به اندازه 2 چون آرایه، مانند هر متغیر، برای اولین بار اعلام شد، قبل از ما آن را با استفاده از، و ما در اینجا به خاطر این ثابت است که من 2 نمرات است که من قصد دارم برای قرار دادن مشخص شده است. اما به یاد داشته باشید، دانشمندان کامپیوتر شروع به شمارش از 0. بنابراین اولین محل که در آن آرایه براکت 0 است. مکان بعدی 1 است. این چیزی است که تا کنون کمی بیش از حد به سمت. بنابراین به عبارت دیگر، اگر من در واقع تا به حال این آرایه - و به من اجازه ببینید که چگونه به خوبی این همکاری اینجا برای ما - اگر من یک آرایه است که من به سادگی به شرح زیر کشیده شده است و من به مدت 2 عناصر اختصاص داده شده، من ممکن است این مثل این در حافظه قرعه کشی که این بوم سفید بزرگ است. این فقط RAM من در کامپیوتر من، فرفره از RAM، 2 گیگابایت RAM، حالا هر چی، اما این 2 جعبه در حال حاضر به صورت جداگانه شناور، 32 بیت باشد. بنابراین اگر من قرار شماره 1 در اینجا مانند 1.0، پس از آن دیگر شماره من قرار اینجا مثل 3.2 اما بعد از آن من براکت 2، است که مانند قرار دادن چیزی در اینجا. و به عنوان تصویر نشان می دهد، هیچ چیز وجود دارد. این نوعی مانند زمین بدون انسان چون من سیستم عامل پرسیده نشده این مسابقه سوم را به من بدهد. اگر من می خواهم که مسابقه سوم، من باید تا به حال احتیاط به درخواست سیستم عامل برای آن با اعلام این آزمونها به 2 نیست اما به جای آن 3 برابر است. بنابراین به عبارت دیگر، تصویری که ما به طور موثر در دست داشته به نظر می رسد شبیه به این در اینجا. این دوباره زمین بدون انسان است. ما بهتر است سعی کنید نوشتن مقادیر اینجا. اما باز هم، چرا که دانشمندان کامپیوتر از 0 تعداد، هنگامی که ما در مورد این مکان در آرایه صحبت می کنید، که تصور می شود محل سکونت: 0، این مکان 1 قرار است، و این بدان وجود ندارد از آنجا که ما تنها به سیستم عامل برای 2 چنین مکان هایی ازش پرسید. بنابراین کسانی که از شما با تجربه برنامه نویسی قبل از زبان های دیگر ممکن است بدانید که این همیشه صدق نمی کند با آرایه و یا همه چیز به نام بردار است. در عوض، شما فقط می توانید اضافه کردن و اضافه کردن و اضافه کردن همه چیز را به آرایه نگه دارید، که رک و پوست کنده، ما تا به حال که توانایی، در ابتدا و در عین حال ما به نظر می رسد که به آن داده شده است تا در اینجا چرا که با C برنامه نویسی بسیار صریح است. این تنها شما و کامپیوتر در حال حاضر، و در کامپیوتر است که تنها به انجام آنچه در آن به شما می گویند را انجام دهد. بنابراین اگر شما فقط آن را بگوید به شما 2 شناور از طریق خط 22 را در اینجا، که همه قصد دارید به عقب بر گردیم از سیستم عامل: فضا برای 2. بنابراین به طور فزاینده ای از برنامه های خود را برای رفتن به گاهی اوقات حشره دار با توجه به آرایه. این تنها مرتب کردن بر اساس از طبیعت وحش است که به موجب آن همه از ما هستند معروض خطا باشد، و در برخی از نقطه شما به احتمال بسیار زیاد شاخص فراتر از مرز از آرایه. و این تنها راه فانتزی و گفت: شما را به چیزی براکت رفت و چیزی بیش از حد از یک عدد بزرگ بود. شما فراتر از مرزهای آرایه خود را رفت. اما حرکت صعودی در حال حاضر این است. بقیه از این برنامه واقعا هیچ چیز اساسا برای کار با آرایه ها می باشد. این همه فقط در مورد برخی از حساب های ساده برای محاسبات به طور متوسط. بنابراین ما در اینجا در این حلقه for در اینجا برای اولین بار یک متغیر به نام مجموع است که ما را به 0 مقداردهی اولیه. سپس ما از 0 تا 2 تکرار دوباره و ما به آن متغیر جمع اضافه کنید کلاس i ام، به طوری که براکت 0 سپس براکت 1. و سپس به عنوان شما می توانید در مدرسه انجام دهد که به طور متوسط ​​به محاسبه، ما به سادگی این مجموع، آن را تقسیم تعداد کل آزمونها، و پس از آن برای اندازه گیری خوب ما به یک تابع نامیده می شود دور. در حال حاضر، به عنوان به کنار، آنچه که مقابله با این نوع int پرانتز در خط 34؟ ممکن است آمده اند تا در حال حاضر در بخش، در مورد آن واقعا نمی صحبت به طور رسمی در اینجا، اما آنچه در این بین المللی در parens احتمالا انجام است؟ >> [پاسخ دانش آموز نامفهوم] آره، این اشاره ریخته گری یا typecasting، که به معنی 1 نوع داده ها و تبدیل آن به دیگری است. شما می توانید این کار را با انواع داده ها کار نمی کند چرا که گاهی اوقات این امر می تواند یک کمی عجیب و غریب است. اما در این مورد، اگر مقدار بازگشتی از دور شناور است زیرا، بعد از همه، من شناور و تقسیم آن را با یک عدد مانند 2، من قصد دارم به عقب بر گردیم شناور. اما مردم مدرسه واقعا نمی خواهم بدانم که متوسط ​​آنها 93.4 بود چون آنها را متوجه آنها همیشه به طوری که به 95 گرد نقطه نزدیک است. بنابراین ما می خواهیم به جای استفاده از نوع int به دور همگان را به نزدیکترین بین المللی، که در این مورد در حال رفتن به 94 با هیچ نقطه پس از آن است. به طوری که فقط یک ترفند کوچک ریاضی است. و ما دوباره به این مفهوم از ریخته گری به دلیل آن کاربرد داشته باشند، اگر شما را کشف کرده اند در حال حاضر، مشکل مجموعه 2. بنابراین آرایه پس از آن، شما می توانید از فکر می کنم - رفتن به من لبخند در تمام طول روز. مثل این به نظر می رسد اگر تصویری از آن رسم کنید. اما مهم این است که اندازه نیز توسط شما انتخاب شده است هنگامی که شما به آن درخواست از سیستم عامل است. هر گونه سؤال و سپس بر روی آرایه ها؟ آره. [سوال دانش آموز نامفهوم] آه، سوال خوبی است. سوال این است که چه اتفاقی می افتد به 0 صفر در آرایه؟ این کار را در این زمینه وجود ندارد. است که تنها در زمینه رشته ها، که ما برای رسیدن به تنها در یک لحظه وجود دارد. اما برای یک آرایه، همانطور که در این حالت، شما می توانید آن چیزی است که شما از سیستم عامل است. و به عنوان یک کنار، تا مبادا این معلوم نیست، من گفت: شما از سیستم عامل، سیستم عامل بپرسید. همانطور که احتمالا می دانید، سیستم عامل، سیستم عامل مک، ویندوز، لینوکس است. هنگامی که شما در حال فراخوانی توابع مانند GetFloat یا شما تعریف متغیرها مانند نمرات، در پایان روز شما به طور موثر به درخواست شخص دیگری به شما که حافظه را از آنجا که ما به عنوان مشتاق برنامه نویسان هیچ نظری ندارم که چگونه می توان به دسترسی فیزیکی به حافظه. اما کسی: سیستم عامل. پس علاوه بر این ما که با آیکون های زیبا و منوها و پوشه ها و مانند آن که شما را بر روی میز کار خود را مشاهده کنید، آیا مک یا PC، سیستم عامل نیز انجام چیزهای سطح پایین دنیوی، مسائل بسیار فنی مدیریت گیگابایت یا 2 گیگابایت حافظه است که شما را، مدیریت CPU است که شما را، و غیره. بنابراین، هنگامی که شما در حال نوشتن کد، شما واقعا به اتصال به سیستم عامل خود را در آن حس است. من قصد دارم برای به حداقل رساندن آن است. بسیار خوب. سوال دیگر در مورد آرایه؟ نه؟ باشه. بنابراین انتقال به طور طبیعی از آرایه است که در واقع به یک موضوع که کمی آشنا. و ما نگاه تا کنون به طور خلاصه در این زمان بیش از حد. این مثال رشته از روز چهارشنبه بود. در این مثال رشته یک برنامه خیلی ساده بود، و من در واقع آن را توسط یک زن و شوهر از خطوط برای مقاصد امروزی ساده است. همه آن را در خط 19 می کند این است که یک رشته از کاربر، آن را در یک متغیر به نام ها ذخیره می کند. سپس در خط 22 به بعد آن را ظاهرا چاپ این رشته 1 کاراکتر در هر خط. اما چگونه آن را انجام؟ ما اعلام رو به صورت متغیر، تنظیم آن را برابر با 0، و این در حال تبدیل شدن به عادت های قدیمی در حال حاضر. ما تا به حال این کار را تا روز چهارشنبه دیده نمی شود، اما شما می توانید نوع استنباط از نام آن strlen فقط می گرداند چه وقتی S داده می شود؟ طول رشته. بنابراین اگر من تصویب آن رشته، نقل قول، نقل قول را تمام DAVID، امیدوارم رفتن را به من بازگردان شماره 5 به دلیل DAVID. به طوری که هدف خود را در زندگی این است که یک رشته، چه سخت کدگذاری یا در این مورد، به عنوان یک متغیر گذارند، به عنوان یک استدلال، آن ارقام و آنچه را که طول این رشته است. بنابراین در اینجا در حال حاضر ما در حال قرض گرفتن برخی از نماد به عنوان مثال در مسابقه قبلی. این است که چیزی برای انجام با شناور، تا به چیزی برای انجام با آزمونها، اما معلوم است که دروغ کوچک سفید بوده ایم به شما گفتن از هفته 1 این است که یک رشته واقعا وجود داشته باشد در C. رشته در پایان روز است، واقعا فقط یک آرایه است. آرایه ای از بایت، بنابراین بایت، بایت، بایت، بایت، فراخوان است که فقط 8 بیت، بنابراین تکه حافظه، تکه از حافظه، تکه از حافظه، تکه از حافظه است. و ابزار است که توسط آن یک رشته اجرا با قرار دادن شخصیت اول در اینجا، و سپس در اینجا و سپس در اینجا، اینجا، پشت به پشت به پشت در حافظه کامپیوتر است. بنابراین اگر شما می خواهید به هجی کردن یک کلمه مانند HELLO، شما می توانید 1 شخصیت H قرار دهید، پس از آن E، سپس L و سپس L، سپس O - 5 کاراکتر در مجموع - در جایی در RAM کامپیوتر شما. اما جزئیات کلیدی در اینجا این است که آنها در حال رفتن به پشت به پشت به پشت به پشت، درست در کنار یکدیگر است. زمانی که من می گویم های [i]، در زبان انگلیسی به این است که به من دادن؟ چه [من] در این مورد نشان می دهد؟ آره. [دانشجوی] شخصیت i ام در رشته. >> دقیقا. ویژگی i ام در رشته. در حال حاضر، من در حال رفتن در 0 شروع در من حلقه for در اینجا، اما این خوب است زیرا همه چیز شروع به شمارش از 0. پس [0] رفتن به نمایندگی از H نامه در یک کلام مثل HELLO [1] به نمایش نامه در یک کلمه مانند HELLO مانند E، و غیره. و آنچه که ما به نظر می رسد انجام این کار در هر تکرار از این حلقه به طور موقت ذخیره سازی شخصیت i ام در یک متغیر به نام C است، که فقط یک کاراکتر، و پس از آن ما در حال چاپ کردن C به طوری که در پایان روز از آنچه که این برنامه انجام می دهد به شرح زیر است. اگر من را به دایرکتوری منبع و من را string1 و من به جلو بروید و آن را اجرا string1، و پس از آن من یک کلمه مانند سلام، را وارد کنید تایپ، همه آن کند است چاپ این شخصیت (1) در یک زمان. بنابراین فرصتی برای پالایش وجود دارد. من نوع انجام کار بیشتر است، حتی اگر آن را روشن تر شاید در این راه، از لزوم. کدام خط از کد را در اینجا می تواند احتمالا دور پرتاب در دسترس نباشد؟ آره. خط 24. در خط 24 من اعلام C متغیر است. من ذخیره سازی شخصیت i ام از S در آن است، اما بعد از آن من با استفاده از C. بنابراین من با استفاده از C، به طوری که من احساس می کنم مثل من فقط نمی تواند پرتاب خط 24 دور. [نظر دانش آموز نامفهوم] >> دقیقا. پس زمانی که نوبت به صحبت کردن در مورد طراحی برنامه های، متوجه این ساده کمی از کد، که به همان اندازه قابل خواندن است، اما متوجه است که تنها یک متغیر، نوع داده آن یک آرایه است، تا [من] فقط می خواهم تا فورا به شما شخصیت i ام در این رشته است. و اگر شما می خواهید آن را چاپ کنید، که خوب است. شما فقط باید برای استفاده از سی درصد به دلیل این که شما در حال یک رشته چاپ، شما در حال چاپ یک کاراکتر در یک رشته، و نیز دارای اثر چاپ شخصیت i ام است. و به یاد تنها تفاوت واقعا از هفته گذشته با استفاده از printf این است که در حالی که در هفته های گذشته ما را به چیزی فوق العاده ساده مانند حفره یا سوراخ٪ s را پس از آن به نام یک رشته در اینجا، در حال حاضر ما در حال غواصی در کمی عمیق تر در زیر هود و گفت، رشته نسخه قابل چاپ نیست، چاپ کاراکتر در آنجا. بنابراین ما می توانیم چیزی کمی متفاوت است در اینجا به خاطر 1 نفر دیگر وجود دارد - اشکال نیست از آنجا که این برنامه درست است، اما من در انجام کاری احمقانه که من به طور خلاصه در روز چهارشنبه اشاره شده است. اما فکر کردن به عقب، چگونه می تواند طراحی این برنامه بهبود یافته و حتی بیشتر؟ آره. [پاسخ دانش آموز نامفهوم] >> آه، خوب است. بنابراین یاد داشته باشید که ما یک متغیر دوم به نام N آخرین بار، که به نظر می رسد خودمان در تناقض زیرا هدف من این یک ثانیه قبل فقط به دور انداختن یک متغیر را به عنوان غیر ضروری، اما به یاد داشته باشید که در روز چهارشنبه ما در واقع این است. من حلقه تغییر در واقع با کاما، سپس N = strlen، و سپس در اینجا من I > [پاسخ دانش آموز نامفهوم] >> دقیقا. من strlen یادآوری نیست، دوباره و دوباره و دوباره به دلیل به یاد چگونه برای کارهای حلقه. حتی اگر آنها شروع به پیچیده تر است، به دنبال، به یاد بیاورید که چیزی که قبل از نقطه و ویرگول اول مقدار دهی اولیه، که یک بار اتفاق می افتد. شرایط، هر چند، در وسط، و این می شود هر زمان که شما را از طریق حلقه بررسی می شود. پس از آن نوع احمقانه به درخواست کامپیوتر همان سوال را دوباره و دوباره - طول HELLO چه خبر؟ طول HELLO چه خبر؟ طول HELLO - چرا که همانگونه که خواهید دید امروز و در روز چهارشنبه، این است که قطعا به زمان، و از آن استفاده بسیار خوبی از زمان نیست چرا که به شکل از طول یک رشته در واقع طول می کشد کمی تلاش. این لحظه، به عنوان آن را در برخی از زبان ها است. بنابراین با تغییر این به ازت، قیمت من پرداخت شده است چه؟ ما شاهد یک تجارت کردن در اینجا. من با پرسیدن همین سوال لعنتی دوباره و دوباره می توانید در زمان صرفه جویی، اما آن را به من چیزی، که همان چیزی است که هزینه؟ [دانشجو] شما یک مقدار مشخصی از حافظه خود را از دست میدهند. >> دقیقا. این به من برخی از حافظه های هزینه. بنابراین در این حالت هزینه آن به من چه؟ یکی دیگر از 32 بیت به دلیل N فقط بین المللی، به عنوان ضمنی بین المللی کلمه در اینجا. اما این است که درست است؟ صادقانه بگویم، که احتمالا درست است چرا که اگر شما در مورد آن فکر می کنم، دیگر رشته است، زمان بیشتری را من قصد دارم به هدر رفتن زیرا strlen رفتن دوباره و دوباره و دوباره برای دریافت نام برای هر تکرار از حلقه. و این روزها، مک من دارای 2 گیگابایت RAM، این روز 4 گیگابایت RAM گاهی اوقات. من فکر می کنم من می توانم 4 از آن بایت در واقع به سرعت همه چیز را استطاعت. اما این امر به عنوان یک تجارت خاموش و یک تم واقعا در برنامه نویسی و علم کامپیوتر واقعا هرگز به دست آوردن هر چیزی به صورت رایگان. اگر شما می خواهید برای بهبود چیزی است که در اینجا، شما را مجبور به پرداخت هزینه برای آن از سوی دیگر به نحوی است. فضا در مقابل زمان در این مورد است. پس این همه منجر شد تا نسبت به چیزی مرموز شبیه به این، که همانطور که شما احتمالا در حال حاضر نمیفهمد، در واقع می گوید؟ [پاسخ دانش آموز نامفهوم] >> آره، بنابراین این، مطمئن شوید که به نوشیدن Ovaltine شما، در واقع با استفاده از یک الگوریتم به نام ROT13، ROT 1-3، که فقط به معنی چرخش تمام از حروف 13 مکان، که این معنی را و پس از آن اضافه کردن 13 به آن و به نقطه، نقطه، نقطه تمام راه را به نامه 13TH دور، انجام همان چیزی که برای B و C و D و غیره. بنابراین اگر ما در واقع تبدیل این در اینجا با استفاده از یک شیفت از 13 مکان، ما باید به آنچه کمی Ralphie، که، مطمئن بود که به نوشیدن Ovaltine شما. اما در حال حاضر برای مشکل مجموعه 2، در نسخه استاندارد حداقل، شما را به نوع از این کار خود را enciphering، و ما باید به نحوی در ورودی شبیه به این را رمزگذاری یا رمزگشایی آن است. پس کدام یک از این نوع اصول ما را به این فرصت؟ بیایید یک نگاهی به این مثال سوم در اینجا. اول از همه، آن را به نام ASCII. چه ASCII برگشت به اشاره؟ کد استاندارد آمریکایی برای تبادل اطلاعات، که واقعا طولانی از راه گفت: چه شده است؟ ASCII چیست؟ [پاسخ دانش آموز نامفهوم] >> که؟ >> [دانشجو] نقشه شخصیت. >> نقشه شخصیت. این فقط نقشه اعداد به حروف چرا که جهان به استاندارد چه تعداد نشان دادن حروف به طوری که همه ما می تواند از رایانه و تمام برنامه های ما سازگار فقط زمانی که آن را برای چاپ کردن همه چیز بر روی صفحه نمایش می آید. بنابراین به یاد می آورم که 65 اتفاق می افتد به نمایندگی، 97 اتفاق می افتد به نمایندگی از کوچک. و بنابراین این برنامه ساده ASCII با استفاده از این واقعیت - که جهان می داند که سرمایه 65 - و آن را فقط در چاپ نقشه برداری. پس قبل از اینکه ما به این کد شیرجه رفتن، اجازه دهید من به جای باز کردن یک پنجره ترمینال. اجازه بدهید من به جلو بروید و ASCII را، و پس از آن اجازه دهید فقط اجرای این چیزی که فقط خروجی به از بین بردن. و آن را فقط این است: یک نمودار واقعا بزرگ است که فقط به من می گوید همه از کدهای مختلف برای همه حروف مختلف. بنابراین یک برنامه فوق العاده ساده است، اما من به کد سخت آن 52 خط خروجی: 26 بزرگ، 26 حروف کوچک. در عوض، من این برنامه نویسی با یک زن و شوهر از حلقه است. توجه داشته باشید که آنچه که من در اینجا. من از من به 65 تکرار تا 65 + 26 چرا که من می خواستم برای چاپ از 26 حرف است ، من در الفبای انگلیسی + + در هر تکرار، و در حال حاضر دوباره اطلاع می دهد. این عود از typecasting دوست ما است به موجب آن شما 1 نوع داده خود را به دیگری تبدیل زیرا آنچه من می خواهم در این برنامه خاص انجام دهد؟ من می خواهم برای شمارش عددی چرا که چگونه رشد کردم شمارش - 65، 66، 67، و غیره - اما من نمی خواهم تا چاپ فقط اعداد. من می خواهم به چاپ نامه توسط تعدادی. من می خواهم به چاپ: تعداد، B: شماره است، اما من می توانم این کار را با متغیر یکسان انجام دهید. بنابراین من نسخه قابل چاپ کردن C٪ به عنوان یک نگهدارنده برای یک شخصیت، D٪ به عنوان یک نگهدارنده برای یک عدد یا شماره. سپس آنچه را می توانم برای کسانی که 2 متغیرهایی وصل کنم؟ من پلاگین برای اولین بار در شخصیت معادل از من، و سپس به من از خود من نسخه قابل چاپ. پس این فقط بیش از حد کار می کند اطلاع می دهد. همانطور که من می توانم از float به نوع int بازیگران منظور از یک عدد حقیقی را به یک عدد صحیح، من در اینجا می توانید از یک int به یک کاراکتر است که کمی عجیب و غریب - را بر روی جهان واقعی کاملا نقشه - اما در کامپیوتر کاراکتر فقط یک عدد در قسمت پایین هود، بنابراین ما تا کنون صریح بودن در اینجا به کامپیوتر، و گفت: printf، چاپ 65 من نیست، چاپ آن را به عنوان معادل عددی آن است. و معلوم می شود که من از لحاظ فنی و نه حتی نیاز به این. آنچه که من انجام شده بود یک لحظه پیش به صراحت ریخته گری تعیین چه نوع داده من می خواهم برای رفتن از و. اما توجه کنید که من در حال حاضر این حفره یا سوراخ٪ C و این حفره یا سوراخ٪ C در اینجا. حتی اگر این نوع int، کامپیوتر متوجه می شود که یک کاراکتر، این فقط یک int در زیر هود. بنابراین اگر من در واقع کامپایل مجدد و تکرار برنامه ASCII، متوجه آن هنوز هم کار می کند به این دلیل که کامپیوتر متوجه می شود که این مکاتبات وجود دارد. در حال حاضر، آن را مهم تر را به انجام ریخته گری صریح در جهان شناور را به نوع داده int چون شما در واقع از تصمیم گیری محاسبه: دور انداختن همه چیز را بعد از نقطه اعشار. در اینجا هیچ چیز واقعا به دور انداختن زیرا شخصیت فقط یک عدد وجود دارد، و یک رشته آرایه ای از کاراکتر ها است. بنابراین، هنگامی که از آن زمان به اجرای برخی از رمزگذاری یا رمزگشایی می آید، چگونه است آن است که ما در واقع می تواند چیزی شبیه به این مزخرفات به ترجمه، مطمئن شوید که به نوشیدن Ovaltine شما؟ چه می شود اگر ما می دانیم در حال حاضر - را به عنوان فرض - که کلید، تعدادی است که ما در حال چرخش همه این نامه ها، شماره 13 است؟ بنابراین ما از حرف B رفت و تمام راه را در آغاز جمله ای، مطمئن شوید که به نوشیدن Ovaltine خود را، چرا که اگر من B و پس از آن من به C، D، E، F، G، H، I، J، K، L، M، N، O، به همین دلیل است که رمزگذاری B نامه می شود O چرا که من فقط 13 تا از آن است. پس اگر من می خواهم به رمزگشایی این، من اساسا را ​​به O و سپس تفریق 13 از آن. رک و پوست کنده، چرا که 26 حروف الفبا وجود دارد، این است که زیبا و متقارن، ما همچنین می توانیم فقط 13 و اضافه می کنیم به عقب بر گردیم به B. نامه اما چگونه می توانم شما را در مورد اجرای چیزی شبیه به این در سزار یا واقعا دستکاری رشته ها به طور کلی؟ اگر حرف B چه تعداد است؟ حرف B چه خبر؟ بنابراین 66 است، درست است؟ بنابراین اگر نامه 65 و حرف B 66، تا 66، همه من را مجبور به انجام اضافه 13 به آن است، و این به من می دهد 79. و اگر ما به کمی ورق بازی، 79 در واقع بر روی O. نقشه اما کمی در مورد گوشه ای در اینجا وجود دارد. چیست، می گویند، حرف Z؟ اگر ما 66 + 25 را به تمام راه را تا پایان از حروف الفبا، در 91 هستید. 91 + 13 به من می دهد 104، و حدس بزنید چه؟ 104 حرف بزرگ برابر نیست. بازگشت به ورق تقلب کمی در اینجا. اگر این برنامه را در لوازم خانگی، اخطار تکرار است که 104، اگر من به بازگشت به پنجره ترمینال، آن 104 میباشد ظاهرا ساعت حروف کوچک است. بنابراین ما نیاز به برخی از ترفند های کلیدی در اینجا به منظور مطمئن شوید که هنگامی که ما در Z شروع و اضافه می کنیم 13 تا از آن ما نمی خواهیم فقط به حفظ جعل آینده به اعداد بزرگتر و بزرگتر. چه ما واقعا می خواهید کاری انجام دهید؟ شما می خواهید به پوشش در اطراف. پس از آن معلوم است، همانطور که احتمالا در بخش در حال حاضر و یا در تنظیمات مشکل مجموعه خود دیده می شود متوجه شدم که این اپراتور دیگر در C وجود دارد که نیز یک علامت درصد، اما در حالی که ما استفاده کرده ایم٪ در اینجا برای مشخص کردن یک مکان نگه دار، می دانیم که، به ویژه برای مجموعه مشکل 2، نیز وجود دارد چیزی شبیه به این: دانشنامه هوشمند = X٪ Y Z. اجازه دهید من فقط در حال حاضر این کار را به عنوان یک شکل بسیار کلی از این. درصد به این معنی است که در یک زبان برنامه نویسی است؟ >> [دانشجوی] باقی مانده. باقی مانده است که راه فانتزی گفت: باقی مانده است. حتی اگر یک تفاوت اندکی با تعریف وجود دارد وجود دارد، این به این معنی تقسیم Y Z، اما در نتیجه از این بخش بر نمی گرداند؛ در عوض، آن را به باقی مانده است. بنابراین اگر Y است که در واقع 3 و Z است که در واقع 2، 3 تقسیم بر 2 1 با باقی مانده، از مجموع 1 چه چیزی X در این سناریو در واقع برابر است؟ 1. این ایده ساده، سطح پایین است. آن را به زمان کمی به ذهن خود را در اطراف آن پیچیده به دلیل آن را احتمالا در حالی که از شما حتی تا به حال در مورد باقیمانده مراقبت و در واقع آنها را برای چیزی هدفمند استفاده کنید. اما در این مورد این واقعیت ساده است که شما می توانید از یک عدد بزرگ مثل 3 به تعداد نسبتا کوچک مثل 2 و پس از آن پوشش در اطراف به طور موثر با استفاده از باقی مانده را به یک مقدار کوچکتر مانند 1 رفتن به ترفند ارزشمند که ما می توانیم برای هر دو چیزی شبیه به سزار و این Vigenere چیز دیگری استفاده کنید مشکل مجموعه 2 است، اما این است که برای رفتن به یک ترفند در محدوده زمانی معین در طول ترم. این ایده ساده و ساده، فقط با در نظر گرفتن باقی مانده به طور کلی رفتن اجازه می دهد تا ما را به پوشش در اطراف. و همانطور که ما شروع به بازی بیشتر با آرایه، همانطور که ما شروع به بازی بیشتر با حافظه خود، این است که رفتن به تبدیل شدن بیشتر و بیشتر از یک فوت و فن های قدرتمند است. بنابراین هر گونه سؤال و سپس بر روی ASCII و یا نمایندگی از رشته ها به عنوان آرایه؟ و ما آن را تا 1 درجه یک بیشتر است. آره. [سوال دانش آموز نامفهوم] >> سوال خوب. به چه معنی است وقتی که یک متغیر دارای یک ستاره در مقابل آن؟ اجازه بدهید من به تعویق انداختن پاسخ دادن که در هر جزئیات، اما اشاره به یک موضوع شناخته شده به عنوان یک اشاره گر است. اشاره گرها باید با حافظه انجام دهید، و ما در واقع امروز برداشتن قدم اول برای دستیابی به این بحث، اما در حال حاضر، اجازه دهید به من وانمود که ستاره وجود ندارد ادامه خواهیم داد و خواستار رشته رشته به جای استفاده از کاراکتر * که شما احتمالا دیده می شود قبل و من فقط در یک لحظه بر روی صفحه نمایش را به عنوان یک تیزر. بنابراین ما دوباره که در جزئیات راه از بسیاری از شما احتمالا می خواهم. در نهایت، امروز نیست. آره. [سوال دانش آموز نامفهوم] در چه زمینه ورود به سیستم به یک شخصیت؟ >> [دانشجو] آره. بنابراین به طور پیش فرض، زمانی که شما یک + قرار نیست، فقط اعداد مثبت در نظر گرفته شده است. بنابراین اگر فقط ارسال نامه شماره 1، آن را یک 1 مثبت است. اگر شما واقعا می خواهید برای مشخص نفی ارزش، شما به معنای واقعی کلمه را مجبور به انجام -1 بر روی صفحه کلید خود را. اما این احتمالا سوال شما نیست. >> [پاسخ دانش آموز نامفهوم] خوب سوال. باشه. بنابراین این را به انجام، جمع آوری، من با برخی از انواع مشکلات شما را به فرار دلیل این که شما تبدیل یک عدد صحیح به یک شخصیت، اما به نحوی منفی درگیر کردم، و بنابراین شخصیت بیرون آمد به نحوی munged. بنابراین در حال حاضر، اجازه دهید کمی ساده من تا زمانی که ما دوباره به این نوع از موضوع. در حال حاضر، از چیزهایی که فکر می کنم این راه - و این ساده است. اما در جهان یک عدد صحیح، شما که چگونه بسیاری از بیت ها را در اختیار خود دارند؟ شما باید 32 بیت. و تا کنون، ما در مورد تعداد کل اعداد صحیح بنابراین شما می توانید نمایندگی صحبت کردیم حدود 4 میلیارد و در مجموع به دلیل این که شما 32 بیت، به طوری که 2 سال از 32، به طوری که تقریبا 4 میلیارد. اما ما شاهد یک یا 2 هفته قبل که شما واقعا نمی طیف وسیعی از اعداد از 0 تا تا 4 میلیارد. محدوده به جای از تقریبا منفی 2 میلیارد تا مثبت 2 میلیارد می رود. اما این begs سوال، چگونه می توانم به شما نشان دهنده مفهوم منفی 2 میلیارد اجازه دهید به تنهایی منفی 1؟ در حال حاضر، ما می توانیم ساده و فقط می گویند که ما قصد داریم با استفاده از کمی سمت چپ از کسانی که 32 بیت است، و اگر آن را یک 1 یک عدد منفی است، و اگر آن را یک 0 عدد مثبت است. مشکل این است که با بازنمایی ساده شده ای از اعداد منفی این است که اگر شما عمدا بودن شد باهوش و در تلاش است که از یک شخصیت تبدیل به یک عدد یا برعکس، هیچ چیز مانند یک شخصیت منفی وجود دارد. در جهان ASCII که با استفاده از فقط 8 بیت 8 از کسانی که موضوع بیت، و کمی سمت چپ تا به چیزی برای انجام با منفی است. و تنها به روشن است، وقتی که من می گویند که بیت سمت چپ، به یاد بیاورید که زمانی که ما نمونه های مربوط به بیت ما در هفته اول به یاد بیاورید که ما چیزهایی مثل 1001101، چیزی شبیه به این را به خود جلب کرد. وقتی که من می گویند که بیت سمت چپ، من فقط به معنای واقعی کلمه به معنای 1 که تو می نویسم تمام راه را به سمت چپ. بنابراین در جهان از کاراکتر ها هیچ مفهوم منفی وجود دارد، به طوری که کمی سمت چپ در واقع تا به چیزی برای انجام با ASCII، هیچ چیزی برای انجام با منفی. بنابراین آن را برای تلفن های موبایل مانند - و خارج از چهار چوب آن را سخت به پاسخ دقیقا - اما به هر طریقی، کد خود را گیج کننده است که بیت سمت چپ به عنوان نماینده یک مقدار منفی هنگامی که آن را در واقع بخشی از شخصیت در سوال بود. و دوباره، من را ساده انگاشت، از آنجا که کامپیوتر در واقع چیزی که کمی خیال باف از فقط تغییر که کمی سمت چپ یک علامت منفی در مقابل یک 0 به 1 (یک) است. آنها در عوض، اگر شما کنجکاو هستید به گوگل، استفاده از چیزی که به طور معمول به نام متمم 2، است که کمی پیچیده تر از روش اما ایده این است که در نهایت همان است. بنابراین در کوتاه مدت، آن را تا به حال با این واقعیت که شما ماساژ یک عدد به یک شخصیت و یا بالعکس اما کد شما از این حقیقت آگاه بود 1 از کسانی که بیت اهمیت در جهان عددی بود. که در مورد شخصیت جهان نیست. اما آن را برای تلفن های موبایل مانند شما ثابت است، که در این مورد قابل بحث در حال حاضر. سوالات دیگر. باشه. پس تا کنون، همه برنامه های ما نوشته ام گرفته اند ورودی ممکن است از کاربر در فرم از توابع مانند GetInt، GetString، یا اگر شما شده است با خواندن پیش در کتاب های مختلف و یا منابع آنلاین، شما خودتان ممکن است با استفاده از توابعی مثل scanf که رک و پوست کنده، ما در کتابخانه CS50 استفاده کنید. اما در یک یا 2 هفته، ما در واقع شما چگونه کتابخانه CS50 اجرا شده است نشان می دهد به طوری که ما می توانیم با چرخ آموزش ها را در دسترس نباشد. اما به نظر می رسد از راه دیگری وجود دارد برای دریافت ورودی از کاربر است. در واقع، ما خودمان شده اند با استفاده از استدلال خط فرمان برای چند هفته در حال حاضر. هر بار که ما اجرا صدای جرنگ جرنگ و یا دست اجرا داریم که را، ما نه فقط تایپ صدای جرنگ جرنگ، وارد، ما را تایپ نمی کند، وارد شده است. چه ما به طور معمول بعد از صدای جرنگ جرنگ کلمه در ترمینال ویندوز سریع نوشته شده است؟ [دانشجو] نام فایل. >> نام فایل، درست است؟ Hello.c یا mario.c و یا هر چه که نام فایل مربوطه است. و به این معنا که آنچه که تو واقعا انجام می شود این است که شما تحت تاثیر رفتار از صدای جرنگ جرنگ چرا که قطعا مردم نوشت که صدای جرنگ جرنگ تا به حال هیچ ایده که کمی قدیمی شما رفتن به نوشتن یک برنامه به نام سال mario.c بعد. بنابراین شما تا به حال به نوعی رفتار که برنامه را تحت تاثیر قرار، که صدای جرنگ جرنگ برنامه تا به حال به چنین نوشته شده است که می تواند ورودی را از شما قبول علاوه بر این از کلمات در سریع قبل از بازدید کاربر را وارد کنید. بنابراین معلوم می شود که برای برخی از زمان ما شده اند اعلام کرد تقریبا تمام برنامه های ما برای شروع شبیه به این - اعضای هیات تحریریه اصلی (خالی) - و پس از آن جلوتر رفته ایم و شروع به نوشتن کد ما. و ما ممکن است برخی از تیز در بالای فایل شامل داشته باشد، اما تقریبا تمام برنامه های ما تا کنون با این شروع حتی اگر شما ممکن است که در قسمت دیده می شود، در کتاب، منابع آنلاین که این در حقیقت باید از درجه اعتبار ساقط است. یکی دیگر از شکل های مشروع برای این را به argc هوشمند و پس از آن رشته argv []. بنابراین در حال حاضر این چیزی است که دلالت؟ به نظر می رسد که argc، است که کنوانسیون انسان - شما می توانید از این صنایع غذایی تماس بگیرید: اما آن را فقط می بسیار کمتر روشن به خوانندگان - argc فقط یک آرگومان به تابع اصلی به نام که نشان دهنده چه می باشد؟ چه argc برای کسانی که ایستاده اند؟ [پاسخ دانش آموز نامفهوم] >> بله، تعدادی از استدلال و یا تعداد بحث. این را به عنوان ساده ای است که به عنوان. چگونه بسیاری از استدلال به این برنامه منتقل شده است؟ به چه معنا است؟ صدای جرنگ جرنگ mario.c - - اگر در خط فرمان من چیزی شبیه به این اداره argc زمانی که من ضربه را وارد کنید رفتن به ارزش، تا حدودی اشتباه، 2. بنابراین معلوم می شود که argc تعداد آرگومان، اما به دلایل تاریخی، نام خود را از این برنامه است که در آن شمارش شده است. بنابراین argc 2 است که زمانی که من نوشتم صدای جرنگ جرنگ mario.c. چه ی argv شامل؟ اول از همه، ی argv به نظر می رسد مثل یک رشته است اما نه کاملا چرا که همان طور که از چهارشنبه گذشته و همه بیشتر امروز، این براکت نشان داده چه؟ این آرایه است. هیچ عدد در آرایه وجود دارد و باید به طور مستقیم احساس را چرا که افرادی که سال صدای جرنگ جرنگ پیش نوشت: مطمئنا تا به حال هیچ ایده چگونه بسیاری از واژه ها افرادی مانند ما را در سریع قبل از ضربه را وارد کنید را تایپ کنید. بنابراین در این مورد در اینجا به آنها اعلام کرده اند که تابع اصلی به عنوان یک آرایه از استدلال، 0 یا بیشتر از استدلال است. آنها در پیشبرد دانم که چگونه بسیاری وجود دارد، بنابراین به عمد وجود ندارد در داخل تعدادی از این براکت است. اما واقعیت این است که از براکت مربع وجود دارد در حال گفتن کامپیوتر، انتظار یک آرایه. ی argv است که فقط نماد مختصر را برای بردار استدلال است. بردار راه فانتزی از گفتن آرایه، و آرایه های فانتزی از راه گفت: یک لیست و یا مجموعه است. بنابراین این حالت فقط بدان معناست که اگر شما مثل این می نویسم اصلی به جای اینکه مانند چگونه ما در حال انجام آن را برای چند هفته گذشته، برنامه شما در حال حاضر به پذیرفتن استدلال خط فرمان به طوری که دیگر نمی توانم شما را مجبور به نوشتن ماریو و سپس Enter را فشار دهید. پس از آن در یک عدد نوع که چگونه بسیاری از بلوک های بالا شما می خواهید هرم، را وارد کنید و سپس دوباره ضربه. ما حتی نمی نیاز به استفاده از GetString دیگر یا GetInt یا GetFloat که برای ماده. ما فقط می تواند کاربر را به تایپ این کلمات در اعلان خود انتظار درست مثل نویسندگان صدای جرنگ جرنگ تصمیم گرفت این امر می تواند یک برنامه واقعا آزار دهنده است اگر به کامپایل کد شما را برای نخستین بار صدای جرنگ جرنگ تایپ، ضربه را وارد کنید، پس از آن ما را به کاربر گفت: لطفا نام فایلی که می خواهید به کامپایل، پس از آن ما در mario.c تایپ و Enter را فشار دهید. اما این دقیقا همان چیزی است که ما انجام داده ایم را برای کاربران خود گذشته دو هفته است. ما با استفاده از GetString و صبر کنید تا زمانی که برنامه در حال اجرا است تا آنها را برای ورودی بی درنگ. که دیگر نیاز به صورت. بنابراین در این مثال در اینجا، ما در حال حاضر رشته argv، و این بیش از حد ساده است، چرخ آموزشی است که خیلی زود خواهد آمد. این روش مناسب تر از نوشتن این بیانیه جایگزین اصلی زیرا به نظر می رسد که آنچه که ما خواستار رشته در واقع یک ستاره، ستاره، در تعریف واقعی آن است، اما این فقط به نظر می رسد پیچیده، آن را در ابتدا گیج کننده است، بنابراین ما با ایجاد یک مترادف انواع ساده در کتابخانه CS50 که نقشه * کاراکتر کلمه بیشتر کاربر پسند به این رشته است. پس در واقع سعی کنید پس از آن اجازه دهید. اجازه بدهید من به جلو بروید و باز کردن gedit اینجا. اجازه بدهید من بروم جلو و باز ی argv از 1. این برنامه ظاهرا چاپ استدلال است، اما در شرایط انگلیسی، با نگاه کردن به این کد، چه این کار را انجام دهند به طور خاص تر است؟ اگر من در فرمان a.out صنایع غذایی نوار نوع، چه می شود در پنجره سیاه و سفید چاپ شده است؟ بار، صنایع غذایی A.out را وارد کنید. پیش بروید. آره. >> [پاسخ دانش آموز نامفهوم] خوب است. بنابراین a.out، خط جدید، صنایع غذایی، خط جدید، نوار، خط جدید. چرا این؟ ما مطمئنا می تواند در یک لحظه به تایید. این نوع خط کرکی از کد است.  این فقط به چاپ یک خط جدید درست کنی تا همه چیز زیباتر بر روی صفحه نمایش. این حلقه که تکرار از 0 تا argc، و این افزایش در هر تکرار + +. پس این است که در حال حاضر گفت: چاپ یک رشته، به عنوان توسط S٪ ضمنی است. ی argv [من] است که تقریبا ایده از همان مثال قبلی. ما برای تماس ثانیه متغیر و در حال حاضر آن را نامیده می شود، خودسرانه، و argv. این به این معنی چاپ استدلال i ام است که در خط فرمان تایپ شده، و سپس بعد از این همه چیز که انجام شده است، فقط برای اندازه گیری خوبی چاپ یک خط جدید دیگر. پس دیدن این اجازه. اجازه بدهید باز کردن پنجره ترمینال. اجازه ی argv، از مجموع 1 کامپایل کنم، و در حال حاضر اجازه ی argv اجرا، از مجموع 1 را وارد کنید. سلام. باشه. اجرا نوار صنایع غذایی. جالب است. باز. و اگر شما همیشه تعجب که چرا من با تایپ این، این کنوانسیون علوم کامپیوتر و نرم افزار کامپیوتر. جهان اغلب نیاز به متغیرهایی کلامی برای کلمات. بنابراین اگر شما می خواهید به بحث در مورد برخی از رشته عمومی، دانشمندان کامپیوتر فقط تمایل دارند برای گفتن صنایع غذایی زمانی که آنها نیاز به یک کلمه تصادفی، سپس آنها می گویند نوار اگر آنها نیاز به یک دومین کلمه تصادفی، سپس آنها را باز می گویند اگر آنها نیاز به یک کلمه سوم، پس از آن که آنها می گویند qux اگر آنها نیاز به یک کلمه چهارم، و پس از آن بزرگ آنلاین بحث مذهبی که به آنچه پس از qux می آید وجود دارد، بنابراین شما می توانید به گوگل است که به شکل از آنچه به عبارت دیگر خودسرانه باید. اما این امر به هیچ وجه به این معنی، هر چند صنایع غذایی نوار، اگر شما گوگل که، که به این معنی، که بخشی از ریشه شناسی در اینجا است. بنابراین همه این است که انجام این کار پس از آن چاپ 1، از مجموع این رشته ها در هر خط. بنابراین اگر من به جای هر چند، می خواستم برای به دست آوردن کمی خیال باف، فرض کنید که من نمی خواهم هر رشته در هر خط را به چاپ؛ من می خواستم برای چاپ هر کاراکتر از هر رشته ای در هر خط. چگونه می تواند من به جای انجام این کار؟ چه می توانم در مورد این برنامه را تغییر دهید اگر من می خواهم به چاپ هر کلمه نیست اما من می خواهم برای چاپ هر حرف واژه نامه نامه، سپس واژه نامه بعدی نامه نامه؟ چگونه می توانم این ایده ترکیب تا کنون؟ آره. [دانشجو]٪ C است. >> همه حق است. بنابراین ما در جایی نیاز به یک C٪. خوب است، چرا که من نمی خواهم به چاپ رشته ها در کل، من می خواهم به چاپ کاراکتر. چه چیز دیگری؟ [پاسخ دانش آموز نامفهوم] >> جالب است. بنابراین ما نیاز به مرتب کردن بر اساس از بعد دوم در اینجا در حال حاضر به دلیل argv را به عنوان یک آرایه فکر می کنم، اما آن را به یک آرایه از رشته ها است. اما به عنوان دوست دارید، 15 دقیقه قبل، چه یک رشته؟ این یک آرایه ای از کاراکتر ها است. پس در واقع، ی argv یک آرایه ای از آرایه ای از کاراکتر ها است، آرایه ای از آرایه از کاراکتر ها است. بنابراین معلوم می شود که ما می توانیم از نمادهای فقط مربع براکت استفاده کنید. بنابراین این کار را کنیم. در بالای این حلقه در خط 19، من قصد دارم به تکرار از من تا به argc، اما بعد از آن من قصد دارم برای انجام این کار: برای - من می توانم من استفاده نمی کند در حال حاضر. من نیاز به متغیر دیگر چون من می خواهم به تکرار بیش از کلمات اما پس از آن نیز بیش از حروف در کلمات بنابراین من نوعی از یک محور عمودی و یک محور افقی، مرتب کردن بر اساس مفهومی است. بنابراین د نوع int می شود 0 در نظر گرفته شده است، و سپس من می خواهم به انجام د به عنوان زمانی که د کمتر از - و من این تمیز را در کمی. چگونه می توانم بیش از حروف در یک رشته تکرار؟ ما این را یک لحظه پیش. Strlen ی argv []. خوب است. و دوباره، من ناکارآمدی کوچک در اینجا با ایجاد نمی N یا هر چیز دیگری، اما ما را دوباره به آن. بنابراین در حال حاضر د + +. در حال حاضر من به تورفتگی بیشتر در اینجا. چه من در حال حاضر می خواهم تا در هر تکرار چاپ؟ [پاسخ دانش آموز نامفهوم] >> پس [من] به من کلمه ای به من بدهید. های [i] [J]، مرتب کردن و مانند یک ماتریس. کسانی که از شما با ریاضی-y زمینه های، ما در حال مرتب کردن بر اساس نمایه سازی حتی عمیق تر به این ماتریس یا آرایه ای از آرایه، این ساختار 2 بعدی است. بنابراین در حال حاضر اجازه دهید ببینیم که چه چیزی اتفاق می افتد در اینجا. اجازه بدهید من بزرگتر پنجره ترمینال باز کردن. اجازه بدهید من عمل را از argv را از 1. و من پیچ تا اینجا، است که درس خوبی به خاطر من هم فراموش کرده به انجام این کار شده است. به طور ضمنی اعلام 'strlen C تابع کتابخانه با نوع بدون علامت "- من حتی نمی دانم آنچه را که بقیه از آن وسیله است، اما من را دیده اند، پیش از این، به طور ضمنی اعلام کرد. هر زمان که ما می بینیم این خطا، چه این معمولا نشان؟ [پاسخ دانش آموز نامفهوم] >> من یک کتابخانه تا بالا را فراموش کرده. اما یک دقیقه صبر کنید. معمولا من screwed تا به خاطر من فراموش کتابخانه CS50، اما وجود دارد. معمولا من پیچ زیرا فراموش کرده ام استاندارد I / O. و صادقانه بگویم، من حتی نمی نیاز به این. ما GetString استفاده امروز. بنابراین آنچه که من از دست رفته؟ یکی دیگر از کتابخانه که در حال حاضر ما نیاز به استفاده از string.h گاهی اوقات به نام وجود دارد، و این فقط در عین حال یکی دیگر از کتابخانه که دارای توابع بیشتری را که در استاندارد I / O. بازگشت به پنجره ترمینال بزرگ من. باشه. در حال حاضر، لعنت، من حدس می زنم من اشتباه بود. من با استفاده از کتابخانه CS50. بنابراین ما می توانیم این کار را در هر کدام از 2 راه حل. ما می توانیم چرخ های آموزشی را در حال حاضر و فقط این کار را، یا نوع بیایید از نگه داشتن که ساده فقط در حال حاضر، رب این پشت در، حل این مشکل، و در حال حاضر به بازگشت به پنجره ترمینال. بنابراین برای روشن، در کتابخانه CS50 است نه تنها توابع، آن را نیز در رشته کلمه کلیدی، به همین دلیل است که خطا رخ داده است. بنابراین در اینجا ما بروید. من ثابت هر دو از مسائل مربوط به کتابخانه. را وارد کنید. خوب است. ی argv، صنایع غذایی، از مجموع 1 بار، را وارد کنید. عالی. بنابراین در حال حاضر ما هر حرف از هر کلمه 1 در هر خط چاپ، که برای یک برنامه بسیار جالب را ندارد، اما توجه کنید در حال حاضر در حال حاضر توانایی نه تنها کلمات تکرار اما همچنین بیش از نامه های فردی در کلمات، به نظر می رسد که بدجور آشنا حتی ساده ترین برنامه های کاربردی مانند تقلا حروف در یک رشته مانند این. اجازه دهید به جلو و 5 دقیقه استراحت ما در اینجا. و هنگامی که ما آمده ایم، ما شروع به صحبت در مورد بهره وری که ما می توانیم این چیزها را بهتر انجام دهد. بسیار خوب. ما برگشت. تشکر به یکی از TFS ما که نقش بسیاری از bananagrams، ما در واقع یک دسته کامل از کاراکتر با ما امروز در اینجا از لحاظ فیزیکی تجسم با این قطعه کوچک پلاستیکی، و اجازه دهید به من پیشنهاد می کنند که این لوح سفید خالی در اینجا نشان دهنده RAM در کامپیوتر من - لپ تاپ، دسکتاپ، هر آنچه که - وجود دارد و به نظر می رسد مانند بسیاری از آن چرا که اگر ما شروع به سفت این RAM به اندازه تکه های کوچک بایت، اجازه دهید خودسرانه می گویند این چیزی است که اندازه و تار نشان دهنده - وجود دارد می رویم، و بیایید زوم کردن کمی - بیایید می گویند، چیزی که اندازه نشان دهنده یک بایت. بنابراین، ما در واقع می تواند کل یک دسته از بایت ها یا شخصیت های داخل این حافظه مناسب، اندازه نسبی در اینجا پیشنهاد شده است. بنابراین در حال حاضر فرض کنید که هدف این است که به تخصیص حافظه برای یک رشته است. چگونه این در واقع کار می کند؟ در برنامه های ما در حال نوشتن، ما معمولا با استفاده از GetString، اما در حال حاضر، به وضوح، این کانال دیگر از طریق آن ما می توانیم ورودی کاربر در argv وجود دارد از طریق خط فرمان استدلال. اما آنچه واقعا در زیر هود؟ به نظر می رسد اگر ما تماس بگیرید - بیایید حرکت بازگشت به GetString - GetString تابع در کتابخانه CS50، کاربر یک رشته را برانگیخت، انواع کاربر در برخی از کلمه ها - اجازه دهید آن را فراخوانی خوش آمدید. و ما شده ایم گفت: در چند هفته گذشته است که مقدار بازگشتی GetString در واقع یک رشته مانند کلمه HELLO. اما آنچه GetString واقعا انجام؟ عنوان نوع کاربر در HELLO را وارد کنید، GetString است تا بدانند که، خوب، چند حرف است؟ این H-E-L-L-O است. پس از آن نیاز به تخصیص، به آن نیاز دارد در این مورد از سیستم عامل - لینوکس - برای حداقل 5 کلمه در ادامه متن برای ذخیره HELLO. و آنچه در آن سپس به انجام یک بار آن را می شود به آن 5 بایت از سیستم عامل است به وضع HELLO پشت به پشت به پشت به پشت. و بنابراین، آنچه که واقعا از GetString بازگردانده یک تکه از داده ها است که به نظر می رسد مثل این است. اما این است که کمی نادرست است چرا که معلوم است که آن را به عنوان ساده ای نیست فقط در حافظه کامپیوتر ذخیره HELLO چرا که برنامه من این است که من نوشتن در C و سپس خواستار GetString دوباره فرض کنید و کلمه بعدی نوع کاربر در خداحافظ، خداحافظ. خب، من باید به تناسب جایی که خداحافظی کلمه در حافظه است. من نمی توانم وصله سلام. به عنوان مثال، من نمی خواهم که کامپیوتر برای شروع به جای نوشتن مثل این کلمه اصلی که چرا من هنوز هم ممکن است با استفاده از کلمه HELLO در یک متغیر در جایی دیگر در برنامه های من. B-Y-E برای پایان دادن به جایی دیگر در حافظه است. اما این کنوانسیون به طور معمول این است که رشته شما اختصاص احتمالا، اما نه همیشه، در جریان است تا در محل حافظه موجود برای پایان دادن به. و اگر من سیستم عامل برای هر حافظه پرسیده شده از آخرین باری که من به نام GetString، شانس کلمه خداحافظ برای پایان دادن به حق بعد از کلمه HELLO در حافظه است. اما در این مرحله شما شاید می تواند که در آن یک مشکل بالقوه را ببینید. از آنجا که تکه های حافظه، بایت بعدی که فقط آزاد بودند - تمیز کردن تخته سنگ سفید - در حافظه کامپیوتر درست در کنار HELLO آن را مانند رشته من در حال حاضر ممکن است به طور ناگهانی تغییر خواستم احساس چون من اساسا عوض شده است آن را به HELLOBYE به جای به نحوی demarcing شروع از خداحافظی و پایان HELLO. پس از آن معلوم می کند که چه چیزی واقعا در زیر هود، که شما ممکن است در منابع آنلاین و یا بخش یا کتاب دیدم یا نه در تمام فقط رتبهدهی نشده است این است که در واقع وجود دارد علامت گذاری عمدی بین کلمات در حافظه کامپیوتر است. و در واقع، در این مورد در اینجا، نه تنها خداحافظی درست در کنار HELLO قرار دهید، در عوض، کامپیوتر قرار می دهد یک شخصیت خاص، کاراکتر ویژه ای تهی، پس به صحبت می کنند، است که با یک نشانگر با بک اسلش 0 نشان داده شده است. بنابراین داستان کوتاه مدت، به یاد آورید که شخصیت ها در ASCII نشان داده شده است. ASCII است که فقط یک نگاشت بین اعداد و حروف، و بسیاری از کسانی که نامه شروع در حدود 65 برای سرمایه، اما این معلوم است که مطمئنا شما هم می توانید با نشان دادن 0 تعداد را به عنوان یک عدد صحیح و یا باینری، و معلوم جهان تصمیم گرفت طولانی، مدتها پیش، "شما می دانید چه؟" "بیایید رزرو 0 تعداد عنوان نمایندگی هر کاراکتر بر روی صفحه کلید - "هیچ حروف، اعداد، نقطه گذاری. 0 خاص است." "این می شود که از کاراکتر ویژه ای تهی، و ما در حال رفتن به آن را به عنوان \ 0 ارسال. تفاوت که اگر ما فقط نوشت: 0، 0، یک شخصیت است. به یاد بیاورید که کد ASCII برای 0 وجود دارد، به مدت 1، 2، برای 3 چون 0 کاراکتر از 0 تعداد متفاوت است. و شما می توانید ببینید که اگر شما نگاه از 1 هفته، هنگامی که ما برای اولین بار در مورد ASCII صحبت کردیم، 0 و 1 و 2 و 3 تمام راه را تا 9، خودش بود، خود را به کدهای ASCII. آنها، نه تصادفا، 0 تا 9. آنها بسیار متفاوت است. بنابراین 0 فقط به معنی "من ویژه،" و 0 \ معنی، به معنای واقعی کلمه، "من شخصیت 0. "من این مقدار خاص، شخصیت تهی است." بنابراین من در واقع نیاز به یکی دیگر از این از من می تواند همان اشتباه را دو بار. بنابراین بعد از خداحافظی کلمه ما همچنین نیاز به رفتن به یکی از این کاراکتر ها تهی است. قلم من گرفتن من در اینجا و به من اجازه به سرعت جلب یکی دیگر از \ 0 به طوری که پس از من از سیستم عامل به مدت 2 رشته خواسته از طریق GetString توسط یکی دیگر از تماس به GetString، این همان چیزی است که در واقع در حافظه است. بنابراین، هنگامی که من به عقب بر گردیم یک رشته، من واقعا پشت، و زمانی که من به رشته بعدی، من واقعا از برگشت آن است. بنابراین این مستلزم این سوال، strlen، اول از همه، چیزی است که باید آن را بازگشت؟ وقتی که من اسمش strlen در رشته s و کلمه HELLO که کاربر در تایپ بود، چه ما به وضوح می گویند طول HELLO چند دقیقه پیش بود؟ 5 بود، درست است؟ H-E-L-L-O. و این در واقع چگونه strlen با این نسخهها کار. این تابع چیزی است که یک موجود طبیعی انسان را در طول یک رشته به انتظار. اما در واقعیت، آرایه ای از کاراکتر است که ذخیره سازی سلام چقدر بزرگ است؟ در واقع 6. بنابراین strlen می کند که واقعیت را به شما اشاره نمی کند. اما در قسمت پایین هود کامپیوتر در واقع با استفاده از 6 بایت برای ذخیره یک کلمه 5-نامه، و این درست است بدون توجه به چه مدت کلمه است. همیشه وجود دارد برای رفتن به ویژه شخصیت فسخ تهی در پایان از رشته طول کل آن demarc. بنابراین اگر شما در حال حاضر پیاده سازی strlen 20، 30 سال پیش، چگونه می توانم شما را در مورد اجرای strlen خود برود؟ ما برای مسلم است که در آن وجود دارد، درست مثل ما برای مسلم است که printf وجود دارد، اما اگر HELLO کلمه در مورد و آنچه که من در حافظه چیزی است که به نظر می رسد مثل این است، اگر شما به reimplement strlen دلیل این که شما به پرسیده بودند از و یا به دلیل، رک و پوست کنده به شما بود نمی دانم strlen وجود داشته است - شما تا به حال به رول این یکی در را آن گونه که مایلید تغییر دهید - چگونه می تواند strlen شما پیاده سازی زمانی که به چیزی است که به نظر می رسد مثل این؟ حالا که ما می دانیم یک رشته آرایه، ما می توانیم تکرار بیش از هر یک از شخصیت های منحصر به فرد با استفاده از چیزی شبیه به - سعی کنید برای انجام این کار در پرواز. اجازه بدهید من به دستگاه. اجازه دهید یک فایل جدید، strlen.c ایجاد کنم. اجازه بدهید من به جلو بروید و در حال حاضر عبارتند از: stdio.h به طوری که در حال حاضر دسترسی به printf است. به من اجازه انجام اعضای هیات تحریریه اصلی (خالی). آه. من فقط این کار را بر روی خود من در حال حاضر برای انجام این کار پس از آن است. [chuckles] متشکرم. این همان چیزی است که من انجام می دهند. بسیار خوب. بنابراین قبل از من را بر روی صفحه نمایش تبدیل شده است، من تایپ تمام آن. و در حال حاضر آنچه که من قصد دارم برای انجام این کار به شرح زیر است: printf ("من یک رشته دهد:") که فقط دستورالعمل کرکی. در حال حاضر من می توانم GetString رشته = به شما اجازه می دهد تا. من در حال حاضر باید برای ایجاد یک تغییر در حال حاضر. من با استفاده از کتابخانه CS50 به طور ناگهانی، بنابراین اجازه دهید من به جلو بروید و تایپ در cs50.h. -٪ D، strlen [S]: printf ("طول: و در حال حاضر این کار را انجام و من انجام نشده است. چه چیز دیگری می توانم برای اضافه کردن به این برنامه؟ [دانشجوی] string.h. >> string.h. بنابراین در حال حاضر، ما در حال استفاده از strlen، بنابراین اطمینان حاصل کنید که کامپایلر می داند که در آن است، بنابراین سلامت عقل کمی بررسی کنید. من یک رشته در خط 8 و در خط 9 من چاپ کردن طول آن با D٪ است. پس جلو بروید و اجازه دهید تا باز. ما شده اند را strlen - کامپایل درست - strlen - اجازه بدهید من در زوم - را وارد کنید، H-E-L-L-O، را وارد کنید. طول 5 است. خوب، پس strlen به نظر می رسد به کار است، اما جهان می دانستند که. بنابراین در حال حاضر پیاده سازی strlen خودمان را به عنوان شرح زیر است. اجازه دهید این کتابخانه را به من دور است. ما دیگر دسترسی به string.h چرا که من حتی نمی دانند که آن وجود داشته است. اما این درست است زیرا من می توانم پیاده سازی strlen خودم و دارای یک رشته به نام ورودی آن را، و در حال حاضر من باید به شکل از طول این رشته است. پس چگونه می تواند این کار کنم؟ اگر من - بیایید ببینید که چگونه به انجام این کار - چه چیزی را می خواهید انجام دهید؟ [پاسخ دانش آموز نامفهوم] >> درست است. بنابراین ما می توانیم این کار را در یک دسته از راه انجام دهد. اجازه بدهید من سعی کنید این روش را به. اجازه دهید من خودم یک متغیر از نوع int و من، بنابراین من از 0 شروع می شود. و اجازه دهید این می گویند من: در حالی که ورودی های [i] برابر است به آنچه که نیست؟ \ 0 پس از آن معلوم است، با این مورد با تمام کاراکتر زمانی که آنها را به نوشتن به معنای واقعی کلمه در یک برنامه، شما مجبور به استفاده از نقل قول تکی، به نقل از دو برابر نکنید. بنابراین اگر من در حال نوشتن نامه، من می خواهم که انجام دهید، حرف ب، من می خواهد که انجام دهد. ، در مقابل این امر می تواند یک رشته، یک شخصیت نیست. بنابراین من می خواهم \ 0 به معنای واقعی کلمه. چه من می خواهم که در این حلقه انجام می شود؟ در واقع، من نیاز به یک متغیر دیگر، پس از 0 طول هوشمند می شود. حتی اگر شما مطمئن نیستید به همین دلیل ما شروع به راه ما، اکنون که ما در حال رفتن به پایین این جاده، چه چیزی من می خواهم در خط 9 انجام دهد؟ + طول + و پس از آن را در اینجا در خط 10، طول بازگشت. پس چگونه است strlen اجرا شده است؟ در واقع احتمالا شبیه به این انجام شده است. شاید شخص یک حلقه for استفاده می شود، شاید انجام این کار در حالی که حلقه - که می داند؟ ما واقعا می خواهم به زیر کاپوت نگاهی به کد منبع واقعی در بعضی از فایل به نام string.c احتمالا. اما در اینجا فکر می کنم در مورد آنچه که من انجام می دهند. من اعلام یک متغیر به نام من به، تنظیم آن را به 0 برابر است. من پس از آن اعلام طول متغیر دیگر به نام، تنظیم آن را به 0 برابر است. سپس به من گفت: در حالی که شخصیت i ام در ورودی برابر است به شخصیت تهی خاص، \ 0، افزایش طول. اما به محض به عنوان شخصیت i ام این است که از کاراکتر ویژه ای است، چه اتفاقی می افتد به حلقه؟ آن را کوتاه مدار. آن متوقف می شود، که به معنی است که ما پس از آن فورا بازگشت طول. بنابراین اگر من خراب نمی شوند، اجازه دهید به جلو و به عقب برویم به پنجره ترمینال من. اجازه بدهید من کامپایل مجدد. و من پیچ کردن. اعلان مجدد از تابع strlen کتابخانه ناسازگار است. بنابراین من تلاش برای بدست آوردن بیش از حد هوشمندانه برای خود من در اینجا. کامپایلر در واقع می داند که یک تابع به نام strlen وجود دارد حتی اگر ما کتابخانه را شامل نمی شود. که خوب است. هر چیز دیگری. ما فقط رفتن به همکاری پس از آن. اجازه دهید نام این طول. اجازه استفاده از آن را تغییر دهید به طول است، و این صدای شیپور را شادتر. به عنوان یک کنار، چرا که برخی از این توابع رفو مشترک - strlen، prinf - آنها در واقع مرتب کردن بر اساس وضعیت خاص است. و به این ترتیب صدای جرنگ جرنگ فقط چیزی کمی خاص در مورد آنها می داند. که همیشه مورد با بسیاری از توابع، به طوری که به همین دلیل ما رو فریاد می زدند: در. اجازه بدهید من دوباره سعی کنید. خوشبختانه، در آن زمان کار می کرد. بنابراین در حال حاضر خود strlen برنامه من اجرا شود من اجازه. من یک رشته: H-E-L-L-O، وارد کنید. و من پیچ. چرا؟ >> [پاسخ دانش آموز نامفهوم] >> دقیقا. بنابراین من خودم در اینجا یک حلقه بسیار خوب، به دنبال بی نهایت چرا که حتی اگر من افزایش طول در هر تکرار، چه هستم من به وضوح انجام نمی دهد؟ من هستم من افزایش نیست. باشه. تعمیر آسان می کند. بله؟ باشه. خیر در حال حاضر ما می خواهیم فرار کنی (دور بشی) گرفتار برخی از اشتباه های رایج دیگر، جایی که من نیاز به براکت. و صادقانه بگویم، این کد شروع به نگاه زشت، بنابراین ما هم در تمیز کردن این موضوع را در یک لحظه چاقو را. اما در حال حاضر من افزایش هم طول و هم من. صادقانه بگویم، من در حال حاضر فرصتی است برای پیشرفت در اینجا ببینید، اما ما را دوباره به آن. بنابراین در حال حاضر فقط مطمئن شوید که ما حداقل در حال پیشرفت است. این امر به تعداد کمی از شما اتفاق افتاده است، و من غفلت به ذکر است این کار را در پیشبرد. زمانی که شما بدبختی از یک سناریوی مثل این، چگونه می توانم این را تعمیر کنید کوتاه از راه اندازی مجدد دستگاه و یا کامپیوتر خود و یا بستن پنجره؟ در واقع آسان است. کنترل C هویج کوچک نماد C، ارسال و که فقط خاتمه ترین برنامه. اگر شما واقعا بد یک حلقه بینهایت است که چاپ چیزهای بسیاری از بی نهایت بار، گاهی اوقات شما ممکن است مجبور به ضربه کنترل C هزار بار آن را به واقع آن را بشنود. بنابراین فقط در حال حاضر متوجه زیرا من هر چیزی، بسیار آسان بود که چاپ نمی باشد. و از لحاظ فنی، یک بار کافی است، اما من دریافت بی تاب و من معمولا ضربه آن است که بسیاری از بار. بنابراین strlen. من رشته: سلام. آیا رفتن به محل کار این زمان؟ باشه. یکی دیگر از اشتباهات رایج است. آیا به کامپایل مجدد. که عمدی بود، که یکی از. بسیار خوب. بنابراین strlen، H-E-L-L-O، را وارد کنید. عالی. بنابراین ما در حال حاضر strlen تا 5. بنابراین ما به معنای واقعی کلمه reimplemented که چرخ. بنابراین در حال حاضر تمیز تا به شما اجازه می دهد زیرا این باعث نمی شود که من را تحت تاثیر قرار داد با طراحی از کد من. چه می توان به وضوح در این برنامه از بین بردن این تا تمیز؟ [پاسخ دانش آموز نامفهوم] >> آره. به معنای واقعی کلمه، ما در حال درمان و طول یکسان است. پس چرا ما نه تنها هوشمند دریافت کنید و در حالی که طول می گویند؟ در عوض، اجازه دهید فقط آن را به طول شروع، مقداردهی اولیه آن را به 0 چرا که به طور پیش فرض رشته طول می کنیم تا بفهمند که آنچه در آن است. در حال حاضر ما این کار را انجام، و در حال حاضر این است که یک برنامه بسیار ظریف است. یک متغیر است. من آن را تمیز کردن، اعمال آن را. بنابراین در حال حاضر بازگشت به پنجره ترمینال من. اجازه دهید به جلو و اجرا. را strlen. به نظر می رسد خوب است. اجرای strlen دوباره وارد کنید. من یک رشته: سلام، وارد کنید. و به نظر می رسد کار به عنوان 5. در حال حاضر، روشن، اگر من تا به حال نوشته شده، به عنوان مثال، HELLO در 1 رشته و پس از آن خداحافظی در دیگری، ما قطعا می تواند کلمات چندگانه داشته باشد. اگر بیان من در واقع می خواستم به نوع HELLO نیست اما به عنوان مثال، HELLO جهان، توجه داشته باشید که آنچه که ما نمی خواهد که این وضعیت در اینجا، درست است؟ است که نشان می دهد که که 2 رشته. شما مطمئنا می تواند فضای شخصیت های نوار، بنابراین اگر ما در واقع در یک عبارت طولانی تر تایپ مانند سلام جهان، چیزی است که ما واقعا در حافظه به نظر می رسد یک چیزی کمی مانند وجود دارد که. بسیار خوب. هر گونه سؤال در مورد نمایندگی از رشته ها؟ نه؟ بسیار خوب. بنابراین من گفت: قبل از آن که خواستار strlen دوباره و دوباره عمدا مانند که احتمالا بهترین ایده این است دلیل این که شما در حال رفتن به زیادی از کار انجام می شود دوباره و دوباره و دوباره. در واقع، چه نوع کار لازم است بدانند طول یک رشته، ظاهرا؟ شما باید برای شروع در ابتدا و پس از آن نگاه کنید، نگاه کنید، نگاه کنید، نگاه کنید، نگاه کنید تا زمانی که شما در نهایت می بینیم که شخصیت خاص، که در آن نقطه، آه، در حال حاضر من می دانم که طول. بنابراین قبل از زمانی که ما تا به حال strlen به نام دوباره و دوباره و دوباره، دلیل من پیشنهاد کرد که نوع احمقانه بود چرا که در دوباره، این رشته به نظر می رسد که می خواهم. این رفتن به تغییر در هر زمان شما را از طریق برخی از حلقه تکرار، بنابراین شما در حال انجام کار های غیر ضروری است. در همان زمان، شما باید بدانید، کنار گذاشته، که کامپایلرها مثل صدای جرنگ جرنگ این روزها در طول سال های بسیاری توسعه یافته شده اند، و نویسندگان کامپایلر، برنامه نویسان، بسیار هوشمند است. و پس از آن به نظر می رسد که صدای شیپور و دیگر کامپایلرهای در واقع می توانید از شکل است که، خوب، بله، شما strlen در شرط خود را نوشت، که از لحاظ فنی این بدان معنی است که ما آن را دوباره و دوباره و دوباره تماس بگیرید. اما کامپایلر های هوشمند در واقع می تواند این نوع از تصمیم گیری های کاربر فقیر بهینه سازی از کد خود را برای جبران همه چیز. بنابراین آیا درست است که گاهی اوقات کامپایلر هوشمندتر از ما درک و نوع پنهان کردن اشتباهات خود ما. اما مطمئنا زمانی که آن را به مجموعه مسائل و مانند آن می آید، انجام می شود به فکر کردن در مورد آن دسته از تصمیم گیری های طراحی اساسا نادرست به طور بالقوه به این دلیل ساده است که ما انجام می شود کار راه از ما واقعا باید انجام دهید. اما چقدر کار بیشتر؟ در مورد سلام جهان، اجازه دهید شروع به اندازه از این مشکل به تعمیم است. چه مدت از مشکل یا اندازه مشکل کاربر تایپ در زمانی که کلمه HELLO است؟ ظاهرا 5، شاید 6. به علاوه یا منهای 1. هر چیز دیگری. خیلی نزدیک است ما فقط به 5. پس چه اندازه مشکل در اینجا هنگامی که در تلاش برای کشف کردن در طول HELLO؟ 1، 2، 3، 4، 5، و شاید 6 شخصیت گذشته است، اما اجازه دهید تعمیم که به عنوان N. N، N متغیر است، همان چیزی است که دانشمندان کامپیوتر به طور معمول از آن استفاده برای توصیف اندازه یک مشکل است، و این مشکل در دست است که چه مدت است HELLO؟ چه مدت strlen را؟ منظور از N مرحله طول می کشد، که در آن هر مرحله به معنی نگاه یک شخصیت، نگاهی به یک شخصیت، یک شخصیت نگاه کنید. و ما تا به حال این بحث در حالی که برگشت، تعدادی از عملیات چیزی طول می کشد. روز اول کلاس ما تا به حال همه ناشیانه ایستاده، و سپس همه شروع به جفت شدن با یکدیگر به منظور در واقع در حالت ایده آل چگونه بسیاری از مردم در اتاق به حساب. و ما نیز چیز دیگری که به موجب آن اگر من به جای آن راه مدرسه قدیمی تنها با شروع 1، 2، 3، 4، 5، 6 و غیره، که بیش از حد، به اندازه از آن مشکل بود از n اندازه. n نفر در اتاق وجود دارد. اما من که می تواند سرعت، درست است؟ سبک مدرسه می تواند شروع به شمارش آرا در 2S. 2، 4، 6، 8، 10، 12. و این احساس بسیار سریع تر، و در واقع از آن است. این به معنای واقعی کلمه دو بار به عنوان سریع، اما دوباره، اگر 400 نفر دیگر را به این اتاق راه می رفت همه در یک بار، کسانی که از الگوریتم های یکی دیگر از 200 400 یا شاید اقدامات لازم را. اما در مقابل، اگر ما واقعا هوشمند و ما در عوض از همه شما خودتان تعداد دفعات مشاهده، به یاد بیاورید که چگونه است که الگوریتم کار می کرد. همه شما ایستاد. اجازه بدهید به سرعت رو به جلو به این. همه شما ایستاد، شما زوج خاموش، و سپس نیمی از شما نشستم، نیمی از تو نشستم، نیمی از تو نشستم، و در هر تکرار از این حلقه از هفته 0، ما این مشکل را در دست نصف و رفت تا n / 2، و سپس N / 4، و سپس N / 8. و مفهوم آن است که اگر 400 نفر دیگر را به اتاق راه رفتن، هیچ معامله بزرگ، آن را به ما دور 1 بیشتر نه، 400 دور، 200 دور. و به این ترتیب داستان ما گفت: در حالی که تا به حال برای انجام یک چیزی کمی با این. این خط قرمز در اینجا خطی است، آن را راست، و آن را به عنوان N برچسب زیرا به عنوان یک مشکل رشد می کند، اگر الگوریتم یا برنامه های خود را که شما با آن در حال حل آن N مرحله طول می کشد، ما می توانیم آن را به عنوان یک خط مستقیم که در آن زمان بیشتر طول می کشد به اندازه بزرگتر از مشکل رسم. و رویکرد twosies، شمارش 2، 4، 6، 8، هنوز هم یک خط راست، فقط کمی بهتر است. این زمان کمی کمتر طول می کشد، به طوری که خط زرد در زیر نقطه خط قرمز برای نقطه. اما حتی بهتر از این جام مقدس از آنچه که ما به نام لگاریتم که در آن حتی اگر دوباره ما دو برابر تعداد زیادی از مردم در اتاق، ما دو برابر اندازه دفترچه تلفن است که از روز اول کلاس، هیچ معامله بزرگ، آن را طول می کشد 1 صفحه اشک بیشتر، طول می کشد 1 نشسته به منظور حل مشکل این است که دو برابر بزرگ شده است. و به این ترتیب صحبت ما در حال حاضر برای شروع به داشتن چگونه ما در واقع مشکلات موثر حل اگر ما به ساده ترین مشکلات شبیه به این؟ فرض کنید در حال حاضر 8 درب پشت که برخی از اعداد، و هر یک از این اعداد به هیچ وجه طبقه بندی شده اند. آنها اعداد صحیح فقط به صورت تصادفی در پشت این درب، و ما از این سوال که چگونه می توانم به شما در مورد پیدا کردن شماره بروید - چه کسی می داند - 7 در پشت این درها؟ چه می خواهید، یک انسان، به منظور به من شماره 7 رو پیدا اگر دوباره هر یک از این درها و برای دیدن یک مقدار شما باید برای باز کردن درب؟ چه الگوریتم شما باشد شاید؟ [پاسخ دانش آموز نامفهوم] >> بنابراین با سمت چپ شروع شده و باز کردن یک درب، باز کردن درب، باز کردن درب. و در بدترین حالت، چه مدت است آن را به ما عدد 7 را برای پیدا کردن؟ و دوباره، آنها طبقه بندی شده اند نیست، بنابراین آن را به آسانی به عنوان، به خوبی، من قصد دارم برای باز کردن درب 7. این می تواند ما را به حداکثر، 8 مرحله. در بدترین حالت، 7 است که به طور تصادفی در انتهای خط از درب، بنابراین ما ممکن است باید سعی کنید تمام درها N. بنابراین دوباره در اینجا، ما به نظر می رسد به یک الگوریتم خطی است. در واقع، ما این فقط یک زن و شوهر از سال قبل است. یکی از پیشینیان خود را با دقیقا این به چالش کشیده شد که در آن ما یک نسخه دیجیتال را نداشته باشند، ما به جای تخته سیاه با بعضی از تکه های کاغذ را بر روی آن است. و آنچه که من فکر کردم من می خواهم انجام دهید این است که نگاهی سریع چگونه این رفت، یکی از بهترین و شاید فرصت های بی دست و پا بر روی صحنه تظاهرات در اینجا بر روی سندرز. ما تا به حال 2 ردیف از اعداد است. ما فقط رفتن را در آنچه اتفاق می افتد در اینجا با شان بسیار از این ردیف بالا نگاه کنید. مگر در مواردی که دیگر هیچ کس داوطلب در CS50، ما تا به حال برکت شان را برای حفظ این بر روی دوربین، بنابراین او می داند که صدها تن از مردم شده اند تماشای این در حال حاضر برای سال. اما شان یک کار شگفت انگیز - او - در واقع ما یک شماره خاص است. بنابراین اجازه دهید را ببینید که او چگونه حل این الگوریتم به طوری که ما این مکالمه را قبل از اینکه طولانی از سر گرفته ما چگونه پیدا کردن چیزهایی کارآمد. [مالان در ویدیو] من در پشت این درها پنهان شماره 7، اما در برخی از این درها جمع شده و همچنین اعداد دیگر غیر منفی، و هدف شما این است که از این ردیف بالا از اعداد فکر می کنم فقط به عنوان یک آرایه یا فقط یک دنباله ای از تکه های کاغذ با اعداد پشت سر آنها، و هدف شما این است، تنها با استفاده از آرایه بالا در اینجا، من شماره 7 رو پیدا کنید. و ما پس از آن به نقد شما در مورد انجام آن است. >> همه حق است. [مالان با ما شماره 7 رو پیدا، لطفا. [خنده] [مالان] شماره [خنده] 5، 19، 13، [خنده]. این ترفند نیست. 1. [خنده] در این مرحله نمره خود را خیلی خوب نیست، بنابراین شما به عنوان ممکن است به خوبی نگه داشتن رفتن. [خنده] 3. برو. صادقانه بگویم، من نمی تواند کمک کند اما در تعجبم که چه شما حتی فکر کردن. [خنده] فقط ردیف بالا، به طوری که شما رو 3 سمت چپ. بنابراین من پیدا کنید 7. [دانش آموزان زمزمه] [مالان] 17. [دانش آموزان زمزمه] [مالان] 7! [تشویق حضار] بنابراین در روز چهارشنبه ما را به این و الگوریتم های پیچیده تر برای پیدا کردن چیزهایی شیرجه رفتن. در حال حاضر ما به شما با شان را ترک کرده و شما را در روز چهارشنبه است. [CS50.TV]