[Powered by Google Translate] [هفته 2، ادامه داد] [دیوید J. مالان، دانشگاه هاروارد] [این CS50 است. - CS50.TV] بسیار خوب. این CS50 است، و این است که در پایان هفته 2. اگر شما انتظار می رود گرسنه در اطراف این زمان به فردا، می دانیم که ما در حال رفتن به تشکیل گروه کوچک فردا، پنج شنبه، 1:15 PM. این URL در اینجا وجود دارد اگر شما می خواهم به پاسخ دهید. فضا محدود است، بنابراین را ببخش اگر به صورت تا زمانی که شما این فرم را پر پر کنید. یکی دیگر از URL، هر چند که ممکن است مورد علاقه باشد این است. تنها در حدود یک ماه زمان، البته در حال رفتن به در دسترس همه گسترده تر است که از طریق آن از طریق EDX مردمی بر روی اینترنت قادر خواهد بود به دنبال همراه، شرکت در این دوره کاملا فعالانه، در واقع. آنها خواهید بود با استفاده از لوازم خانگی CS50 و CS50 بحث و بسیاری از ابزارهای نرم افزار های مختلف است که ما در حال حاضر با استفاده از این ترم. و یکی از طرح های ما می خواهم به عنوان یک آزمایش را در این سال این است که ببینیم چقدر محتوای ما می توانیم ترجمه به دیگر زبان های گفتاری و نوشتاری است. بنابراین اگر شما ممکن است علاقه مند به شرکت در این پروژه به موجب آن ما به رونوشت انگلیسی و زیرنویس برای سخنرانی دوره و شلوارک ها و سمینارها و بخش ها و مانند آن، اگر شما روان صحبت می کنند و یا ارسال نامه روان برخی از زبان های دیگر، ما خیلی دوست دارم به شما در این پروژه شرکت کنند که به موجب آن شما را بر روی یک یا تعداد بیشتری از فیلم ها را، ترجمه آنها به زبان شما می دانید به خوبی. برای شما یک حس رابط کاربری به من بدهید، این رابط کاربری مبتنی بر وب وجود دارد که ما استفاده خواهیم کرد که اساسا ایجاد یک UI شبیه به این. این به من آموزش برخی از هالووین گذشته، و در سمت راست وجود دارد در سیاه و سفید در کنار این تمبرها زمان، شما چیزهای مختلف است که از دهان من خارج شد آن روز، و سپس در زیر آن شما قادر خواهید بود به برخی از زبان های دیگر ترجمه کنید دقیقا همان چیزی است که نگاشت بین، در این مورد، به زبان انگلیسی و، می گویند، اسپانیایی. پس از آن در واقع یک ابزار بسیار کاربر پسند. شما می توانید به عقب و به سرعت رو به جلو به آسانی با میانبرهای صفحه کلید. بنابراین اگر شما می خواهم که برای شرکت در این آزمایش و کلمات خود را دیده و خوانده شده هزاران نفر از مردمی خارج وجود دارد، لطفا احساس رایگان برای شرکت در. یک کلمه در مورد بچه گربه از دوشنبه. تا مبادا ما فرستاده اند پیام بیش از حد ترسناک، متوجه آن، به عنوان ساعات اداری نشان می دهد و به عنوان بخش نشان می دهد، طراحی این دوره بسیار زیاد است به دانش آموزان همکاری و صحبت کردن به کار را از طریق مجموعه مشکل و مشکلات با هم، و در واقع خط به پایین می آید، دوباره، کار شما در نهایت تسلیم را آن گونه که مایلید تغییر دهید. و به این ترتیب کاملا صادقانه، در ساعات اداری کاملا طبیعی است، کاملا انتظار می رود حتی به چت با برخی از دوست در کنار شما. اگر او در حال مبارزه با برخی از موضوع و شما مانند، "اوه، خوب، اجازه دهید من به شما نگاهی اجمالی به برخی از خط از کد را که من نوشتم،" این خوب است، که اتفاق می افتد، و این بسیار مساعد است، من فکر می کنم، با فرایند یادگیری است. که در آن خط عبور می شود زمانی است که سر مرتب سازی بر اساس کج در اینجا برای ثانیه تعداد بسیار زیادی از یا چند دقیقه که واقعا فقط یک فرصت رفع انسداد دوست شما بوده است، و قطعا وقتی همه چیز را از طریق ایمیل و Dropbox و مانند رد و بدل شده است، نیز خط وجود دارد. بنابراین همه به معنی احساس راحتی و احساس را تشویق به گپ زدن با دوستان و همکلاسی درباره psets و بیشتر و فقط متوجه باشید که چیزی که شما در نهایت تسلیم واقعا باید محصول خود را ایجاد و نه شخص دیگری باشد. و به این ترتیب از مشکلات حوزه خاص برای pset2، که خواهد آمد از اواخر شب فردا، به شیرجه رفتن به جهان از رمزنگاری، که هنر از رمزنگاری یا تقلا اطلاعات است، و این در نهایت به جهانی امنیت. در حال حاضر، امنیت برای بسیاری از ما می آید را در فرم از مکانیزم نسبتا پیش پا افتاده است. همه از ما نام کاربری و کلمه عبور، و همه از ما نام کاربری و کلمه عبور بسیار بد، به احتمال زیاد. اگر رمز عبور خود را در وب سایت های متعدد است، که احتمالا بهترین ایده نیست، همانطور که ما به سوی پایان ترم بحث خواهیم کرد. شوخی نیست - - اگر رمز عبور خود را در یک یادداشت چسبنده نوشته شده بر روی مانیتور خود، است که بیش از حد است و نه لزوما بهترین طراحی، اما کاملا یک پدیده شایع است. و اگر شما در حال با استفاده از رمزنگاری به رمز در آوردن رمزهای عبور شما، آنها به ویژه آسیب پذیر هستند. بنابراین اگر شما فکر می کنم شما فوق العاده باهوش با داشتن یک سند Word پنهان در جایی بر روی هارد دیسک شما است که همه کلمات عبور شما را اما آن را در یک پوشه است که هیچ کس رفتن به نگاه، که بیش از یک مکانیسم بسیار امن نیست. و بنابراین، آنچه pset2 معرفی این هنر رمزنگاری و تقلا اطلاعات به طوری که همه چیز مانند کلمات عبور امن تر هستند. بافت در اینجا این است که با استفاده از داده های نا امن می آید فرصت را به رمز در آوردن و به آن تقلا. و بنابراین این، به عنوان مثال، یک نمونه از پیام های رمزگذاری شده است. این در واقع می گوید که چیزی در زبان انگلیسی است، اما آن را به وضوح به طور کامل آشکار و بدیهی نیست. و ما امروز می آیند دایره کامل به کسی را دست انداختن جدا چه این پیام های مخفی در اینجا است. اما در دنیای واقعی از کامپیوتر، همه چیز حتی نگاه نمی مانند آنها ممکن است عبارات انگلیسی است. به عنوان مثال، این همان چیزی است که شما ممکن است در استاندارد لینوکس یا مک و یا یونیکس کامپیوتر در یک فایل بود که یک بار پس از یک زمان به نام رمز عبور فایل. امروزه آن را به جاهای دیگر منتقل شده است. اما اگر شما را در جای مناسب بر روی یک سیستم نگاه کنید، شما نه تنها نام کاربری خود را ببینید یا این که از افراد دیگر بر روی سیستم است، اما شما یک نسخه رمز شده از رمز عبور خود را ببینید. در واقع، دخمه کلمه وجود دارد نشان می دهد که مسائل زیر رمزگذاری شده است. و این سری از حروف به ظاهر تصادفی و شخصیت ها و اعداد و غیره می توان تنها با به طور کلی دانستن برخی راز رمزگشایی - یک کلمه رمز، شماره های مخفی - و به همین ترتیب در واقع، هنر از رمزنگاری در نهایت جوش پایین به برخی از مرتب کردن بر اساس اعتماد و دانستن چیزی است که شخص دیگری را نمی کند. بنابراین ما باید این کار را در جزئیات کمی بیشتر کاوش امروز و در pset آمد. و در حال حاضر یک کلمه در پاس / خرابی. به خصوص که برخی از شما را به pset1، لوازم خانگی، شیرجه و جهان بسیار جدید برای خود، درک کنند که سرخوردگی و سردرگمی و فقط مشکلات فنی کاملا انتظار می رود، به خصوص با pset اول، که در آن فقط خیلی جدید وجود دارد، فقط آشنایی با LS و سی دی و تمام این دستورات محرمانه و یک محیط جدید است، و این جدا از مواد واقعی و برنامه نویسی خود است. نیز متوجه هستند که قطعا وجود دارد ساعات اداری که به عنوان ساختار پشتیبانی وجود دارد. بخش شروع روز یکشنبه آینده. اما مهمتر از همه، اگر شما احساس فقط این است که برای شما جهان، متوجه باشید که واقعا فقط نیاز به زمان است. شد و آن را برای این فرصت نه سال پیش برای من گرفتن یک کلاس پاس / خرابی راستش، من هرگز حتی پا در کلاس تنظیم شده است. و شما می توانید این را تغییر دهید، تا می گویند، دوشنبه پنجم این دوره، بنابراین اگر شما بر روی لبه در حال حاضر، درک کنند که به جای سر به برخی دیگر آب در دسترس نباشد، قطعا فقط در حال تغییر به پاس / خرابی در نظر بگیرند. باز هم، واقعا وجود ندارد این فرهنگ در اینجا در دانشگاه هاروارد از گرفتن چیزهایی پاس / خرابی از آنجایی که هر کس واقعا می خواهد برای رسیدن به و یا overachieve، اما صادقانه بگویم، این یک روش فوق العاده از تلاش چیزی است که ممکن است برای شما آشنا است، و شما در نهایت انجام می دهند، در بسیاری از موارد، بسیار خوب است، شاید با تعجب خود را. و در شرایط عینی تر، آنچه که من فکر می کنم پاس / خرابی به طور کلی آیا، به خصوص که شما ممکن است با pset0 تجربه، اگر شما در 10 ساعت، 15 ساعت، 25 ساعت را در برخی از pset قرار داده است و شما فقط کوبیدن سر خود را در برابر دیوار و آن را فوق العاده در اواخر شب اما تو گرفته pset 90 درصد از راه است و شما نه تنها می تواند از یک چیز، پاس / خرابی واقعا طول می کشد لبه از یک کلاس مثل این، که در آن شما می توانید از خوشحالی گفت، "خوب، من می دانم که کامل نیست مرتب کردن، اما من کار می کرد الاغ من در این مورد، من خیلی خوشحال هستم که در آن به پایان رسید تا " و این انتظارات برای ویزای دیدار خواهد کرد / شکست. پس وقت را در ذهن نگه دارید. بسیار خوب. پس کسانی از شما که تلاش کرده اند به دانشگاه هاروارد با استفاده از Wi-Fi را، می دانیم که یک SSID CS50، اتصال Wi-Fi، شناور در اطراف وجود دارد که شما ممکن است شانس بهتری داشته باشد. این یک کمی کنایه آمیز است که رمز عبور برای این کار، اگر شما می خواهم برای اتصال به این برای سرعت بهتر - و به ما اطلاع دهید اگر آن را بهتر - 12345، تمام راه را تا 8 به این دلیل است 8 امن تر از 5 است. بنابراین، اگر شما نیاز به رمز عبور از Wi-Fi، به CS50 اتصال بی سیم، 12،345،678، و پست در CS50 بحث اگر شما هنوز هم از مسائل مربوط به اتصال متناوب، و ما قدرت است که می شود برای این فضا می دانم. بسیار خوب. بنابراین یک تیزر، سریع، به خصوص برای کسانی از شما فن پسران یا دختران را از تمام چیزهایی اپل که. چیزی که من از چند سال حفر این فایل در اینجا، iUnlock.c، فقط به نوع بتن تر و پیچیده تر برخی از برنامه های پایه C ما در حال نوشتن است. بنابراین من باز کردن این فایل، iUnlock.c. در صفحه سخنرانی امروز در دسترس است. در سمت چپ شما یک لیست طولانی از توابع است. بنابراین شخص که این را نوشتهاید نوشت: بسیاری از توابع، بیشتر از فقط اصلی است. او با استفاده از یک دسته از کتابخانه ها در اینجا، و اگر ما شروع به پیمایش از طریق، این در واقع اولین، به اعتقاد من، نرم افزار برای آیفون اصلی است. هنگامی که شما می خواهید به فرار از زندان آی فون اصلی، که به معنی untether آن را از AT & T و در واقع نرم افزار خاص بر روی آن نصب کنید و انجام کارهای که اپل نمی خواست مردم را به انجام، کسی که در زمان هم برای کشف کردن دقیقا چگونه آنها می توانند معایب نرم افزار بهره برداری، - iUnlock.c اشتباهات، اشکالات، در نرم افزار اپل، و به این ترتیب به دنیا آمد که اگر شما آن را بر روی کامپیوتر خود وارد شده و آن را بر روی آی فون نصب که، می گویند، از طریق یک کابل USB به کامپیوتر شما متصل شده، این سیستم به شما امتیازات اداری و یا ریشه را بر روی آی فون خود را به من بدهید و به شما اجازه انجام این کار تا حد زیادی هر آنچه شما می خواهید. و بنابراین این گربه های جذاب و بازی موش وجود دارد بین اپل و سایر نقاط جهان به ویژه به عنوان آنها، مانند بسیاری از شرکت ها، سعی کنید مسائل خود را به قفل کردن به طوری که شما فقط می تواند با آن انجام دهد آنچه را که قصد. اما به لطف به مردم مثل این و درک درستی از جزئیات سطح پایین - و در این مورد برنامه نویسی C - و بسیاری از ساختار های آشنا که ما شروع به بازی کردن با، شما قادر به اهرم سخت افزار در یک روش مناسب می بینید و نه لزوما برخی از نهاد شرکت. بنابراین به عنوان مثال، من هیچ ایده چه چیزی این همه در حال انجام است، اما GetVersion به نظر می رسد بسیار ساده است، و به نظر می رسد مثل این است که یک تابع است که این فرد نوشت. طول می کشد تا برخی از نوع عدد صحیح را به عنوان آرگومان می کند، هر چیزی را بر نمی گرداند. اما به نظر می رسد به حلقه با حلقه for و اگر وضعیت، اگر شکستن بیماری، و به نحوی به شماره نسخه اگر ما در پایین حرکت کنید، حتی اگر بسیاری از این کلمات کلیدی را در حال رفتن به جدید باشد. و در کل بسیاری از توابع در اینجا دیده ام هرگز و ممکن است هرگز وجود ندارد در طول دوره ترم. در پایان روز، آن را به پیروی از قوانین و منطق است که ما شده است بازی کرده ام تا کنون. پس این است که بیش از حد قدیمی کرک 3S آی فون خود را و یا 4S و یا به زودی 5S این روزها، اما می دانم که همه بسیار از این دنیا گرفته شده است که ما را به شیرجه. بیایید نگاهی به یک مثال کمی ساده تر: این یکی، فقط به با برخی از نحو گرم و همچنین برخی دیگر از نوع داده که ما در موردش صحبت کردیم اما در C. واقعا دیده نمی شود این یک فایل به نام positive1.c است، و در هر نظر در بالا، این فقط خواستار آن است که یک کاربر یک عدد مثبت است. پس از آن یک مثال از یک حلقه DO-در حالی که، که خوب است برای برنامه های فعل و انفعالی کاربر که در آن شما نیاز به کاربر برای انجام کاری، و اگر آنها را به همکاری شما در آنها داد و یا رد نظرات آنها نیست. نکته: من می خواهم به انجام این کار خطوط 19 را از طریق 24 تا زمانی که کاربر داده نشده من یک عدد مثبت است. این جزئیات در اینجا در خط 18، چرا N من اعلام بالای این حلقه تمام ساخت به عنوان مخالف به راست در کنار خط 22 که من در واقع از آن مراقبت به N؟ آره. [دانشجو] محدوده. >> آره، به طوری که این موضوع دامنه است. و به عبارت دیگر، چه دامنه برای اشاره؟ آره. >> [پاسخ دانش آموز نامفهوم] >> آیا می توانم کمی بلندتر صحبت می کنید؟ [دانشجو] که در آن شما می توانید متغیر دسترسی داشته باشید. >> کامل. که در آن شما می توانید یک متغیر خاص دسترسی داشته باشید. و به طور کلی، قاعده کلی تا کنون این بوده است که در دامنه برخی از متغیر جدید ترین پرانتز فرفری که شما را دیده ام تعریف می شود. و بنابراین در این مورد، اگر من به اشتباه اعلام N در خط 22 این خط کار می کند. من می خواهم بین المللی، و من آن را به آن N متغیر در خط 22 قرار داده است، اما کدام خط از کد در حال حاضر هیچ ایده چه چیزی من صحبت کردن در مورد؟ >> [دانشجو] 25. [مالان] 25، و معلوم 24 و همچنین چون در این صورت آن می افتد خارج از آکولاد. پس فقط کمی از مزاحمت، اما به راحتی به سادگی با اعلام متغیر حل در خارج از تابع خود. خواهیم دید که بعد از امروز شما می توانید یک گام به جلو و شما حتی می تواند کمی تنبل. و این است که به طور کلی توصیه می شود، اما شما حتی می تواند تنبل و قرار دادن یک متغیر در سطح جهان، تا به صحبت می کنند، از یک تابع در داخل نیست، نه در داخل یک حلقه، اما در خود فایل، خارج از همه توابع شما نوشته شده است، به عنوان من در اینجا در خط 15. این است که به طور کلی بر اخم کرد، اما متوجه این است که یک راه حل که گاهی اوقات به مشکلات دیگر، همانطور که ما در نهایت خواهید دید. بنابراین در حال حاضر ما آن را شبیه به این را ترک کند، اما اجازه دهید ببینیم آیا می توانیم این بازنویسی فقط برای شروع به بیان خودمان کمی متفاوت است. این برنامه فقط برای روشن، positive1 است. اجازه دهید من جلو بروید و در پنجره ترمینال من positive1 را وارد کنید. کامپایل درست است. من قصد دارم برای اجرای positive1، ضربه را وارد کنید. من تقاضا می کنم که شما از من یک عدد صحیح مثبت را. من -1 می گویند. که کار نمی کند. 0، 99. که به نظر می رسد به کار است. شاید دقیق ترین تست، اما حداقل آن را بررسی سلامت عقل خوب که ما در مسیر درست هستیم. بنابراین در حال حاضر من به جلو بروید و باز کردن نسخه 2 از این اجازه، و آنچه که در حال حاضر؟ این پیاده سازی همان چیزی است، اما آنچه به وضوح های مختلف در این زمان بیرون پریدن؟ این بولی در سبز. این در سبز، این کلمه به عنوان شناخته شده بولی است، که یک نوع داده مشخص شده است. این کار در تمام نسخه های C. ساخته نشده است شما باید شامل یک کتابخانه خاص. در مورد ما، من شامل کتابخانه CS50 به طوری که در حال حاضر دسترسی به بولی. اما در خط 18، به نظر می رسد به یک مقدار بولی در اینجا به نام خدا را شکر. من می توانستم به نام این هر چیزی، اما من آن را به نام خدا را شکر فقط به نوع انتقال معنا معنایی است. بنابراین در ابتدا در خط 18، من ظاهرا خدا را شکر نیست به این دلیل که مقدار بولی خدا را شکر اولیه در خط 18 مقدار false است. و بعد از آن به نظر می رسد آنچه که من در اینجا در خطوط 21 تا 23 انجام می شود این است که من فقط نوع بازنویسی منطق من است. بنابراین هیچ عملکرد متفاوت است، اما در خط 22 در حال حاضر من چک می کنم اگر هوشمند کاربر را فراهم کرده است بزرگتر از 0 است، پس از آن من به سادگی ارزش خدا را شکر درست را تغییر دهید. و چرا من به انجام این کار؟ از آنجا که در خط 25، ظاهرا من قصد دارم به بررسی شرایط است. آیا این حلقه در حالی که خدا را شکر نادرست است. بنابراین من این کار را به عنوان یک جایگزین برای نسخه 1 پیشنهاد چرا که آن را حداقل کمی بیشتر بصری شاید کمی بیشتر ریشه در زبان انگلیسی است. بنابراین زیر را انجام دهید در حالی که شما خدا را شکر نمی کند و یا در حالی که خدا را شکر نادرست است. و این زمان بیش از حد من به ظاهر اهمیتی به خاطر داشته باشید آنچه را که کاربر در تایپ زیرا توجه داشته باشید که هیچ N متغیر است، پس در واقع، یک دروغ کوچک سفید وجود دارد. عملکرد برنامه کمی متفاوت است، هنگامی که ما به پایین از آن را دریافت کنید چون من به خاطر سپردن آنچه N است. اما من می خواستم برای نشان دادن بیش از حد است که حتی اگر ما دیده ایم GetInt و GetString که در سمت راست استفاده می شود برابر است نشانه ای تا کنون به طوری که ما به یاد داشته باشید ارزش، مشخصات فنی، که به شدت ضروری نیست. اگر به هر دلیلی شما اهمیتی نمی دهند مقدار را به صرفه جویی در، شما فقط می خواهم به بررسی ارزش، توجه داشته باشید که ما به سادگی می توانید به نوشتن این GetInt، پرانتز باز، پرانتز نزدیک. که تابع در حال رفتن به یک مقدار را برگرداند، گفته ایم. این به شما بین المللی است. بنابراین اگر شما روانی از این اتفاق می افتد فکر می کنم، زمانی که من در 99 نوع، GetInt شماره 99 را بر می گرداند، و به همین ترتیب مفهومی، آن را به عنوان اینکه کد من در واقع این است. بنابراین اگر 99 است که در واقع بزرگتر از 0 باشد، پس از آن خدا را شکر درست می شود، سپس خط 25 متوجه آه، ما در حال انجام می شود چون من در حال حاضر خدا را شکر، و در خط 26، ما به سادگی، می گویند: "با تشکر برای عدد صحیح مثبت!" هر آنچه در آن رخ داده است. در حال حاضر قند کمی نحوی را در اینجا اجازه دهید، پس به صحبت می کنند. بیایید ببینیم که اگر ما می توانیم پاک کردن این خط 25 با این نوع سوم و نهایی در positive3. توجه داشته باشید که تنها تفاوت در حال حاضر آن چیزی است که خط از کد؟ >> [دانشجو] 25. >> [مالان] آره، 25. و ما واقعا دیده نمی شود این ترفند فقط رتبهدهی نشده است، اما ما متوجه نقطه علامت تعجب در روز دوشنبه، که بیانگر گزینه ای است که پاسخ دادن به چه؟ >> [دانشجو] نیست. >> و یا نفی نیست. بنابراین یک مقدار بولی و ارزش خود را به تلنگر. واقعی می شود نادرست است، نادرست می شود درست است. بنابراین، پیشنهاد میکنم، حتی یک کمی بیشتر بصری راه نوشتن کد چرا که من هنوز هم خدا را شکر مقداردهی اولیه را به نادرست، من هنوز زیر را انجام دهید، من مجموعه خدا را شکر درست هنگامی که زمان می آید، اما در حال حاضر شما واقعا می تواند فقط این کد شفاهی چپ به راست ترجمه، در حالی که (خدا را شکر!) به دلیل انفجار و یا علامت تعجب بیانگر گزینه ای است که پاسخ دادن به آن مفهوم نیست، بنابراین در حالی که خدا را شکر. تا دوباره، ما را به مفاهیم جدید در هر SE معرفی شده است. ما در مورد Booleans صحبت زمانی که ما با ابتدا بازی، اما متوجه در حال حاضر ما فقط می توانید شروع به نوشتن کد خود را در راه های مختلف. بنابراین به خصوص در pset1 اگر شما مرتب کردن بر اساس تلاش برای کشف کردن راهی برای نوشتن برخی از برنامه های، شانس شما را در شانس هستید، آنجا که می تواند هر تعداد راه حل وجود دارد که شما می توانید بر اساس اتفاق می افتد. به عنوان مثال، این است که فقط 3 حتی ساده ترین برنامه های. بسیار خوب. و در حال حاضر در روز دوشنبه ما در این یادداشت با مقادیر بازگشتی را ترک یاد. بنابراین برای اولین بار نوشت: برنامه ای است که نه تنها اصلی؛ آن را نیز تابع سفارشی خود را دارد که من نوشتم اینجا. بنابراین در خط 31 از طریق 34 من پیاده سازی یک تابع مکعب است. این مجتمع نیست. این فقط یک * A * A در این مورد. اما آنچه مهم است در مورد آن این است که من در نظر گرفتن ورودی در فرم و من بازگشت به خروجی در قالب * A *. بنابراین در حال حاضر من از این توانایی، بسیار شبیه به من با prinf به تنهایی استفاده می شود، برای فراخوانی این تابع با فراخوانی تابع مکعب است. و تابع مکعب طول می کشد برخی از ورودی، و تابع مکعب برخی از خروجی را بر می گرداند. در مقابل، printf فقط به چیزی. این چیزی است که ما در مورد مراقبت بر نمی گرداند، حتی اگر به عنوان یک به کنار آن یک مقدار را برگرداند؛ شما فقط به طور کلی آن را نادیده گرفت. Printf فقط به چیزی. اما در هر حال یک عارضه جانبی از چاپ به روی صفحه نمایش است. در مقابل در اینجا، ما باید تابع مکعب، که در واقع چیزی را برمی گرداند. بنابراین برای کسانی که آشنا با این، آن را یک ایده نسبتا سر راست است. اما برای کسانی که آشنایی کمتری با این ایده عبور از در ورودی و گرفتن خروجی، بیایید سعی کنیم فقط به چیزی فوق العاده ساده. هر کسی راحت بالا آمدن بر روی صحنه به طور خلاصه؟ شما به راحتی با یک دوربین بر روی شما به عنوان خوب. آره؟ باشه. نام شما؟ >> [دانشجوی] کن. >> کن. بسیار خوب. کن، بیا تا. کن است برای رفتن به یک تابع انواع. اجازه دهید به جلو بروید و این کار. بیایید فانتزی کوچک. از ملاقات شما خوشبختم. به مرکز صحنه خوش آمدید. بسیار خوب. بیایید آمار این دکمه در اینجا. بسیار خوب. بنابراین در اینجا شما باید یک تخته مدرن، و آنچه که من تابع اصلی است، برای مثال، و من اپل در دست من نیست. من واقعا به یاد داشته باشید چگونه به - خب، من می توانم که می گویند نیست. من واقعا نمی دستخط خوب، و بنابراین من می خواهم شما را به چیزی بر روی صفحه نمایش برای من نسخه قابل چاپ. من برنامه اصلی، و من قصد دارم به شما می گویم این با نوشتن آن در ابتدا مرغ من و پس از آن عبور شما ورودی است. خیلی احمقانه است اگر این تمرین، مفهوم توابع و فراخوانی یک تابع و بازگشت عملکرد واقعا جوش را به این. من اصلی، من فقط printf، نقل قول، نقل قول را تمام کردن چیزی بر روی صفحه نمایش نوشته شده است، من در حال اجرا این برنامه، و به محض printf می شود به نام، یک آرگومان و یا یک پارامتر گاهی بین کوتیشن ها طول می کشد. در اینجا این است که استدلال است. من آن عبور کن. او یک جعبه سیاه نوشته شده است از چند سال قبل است که ظاهرا تنها می داند که چگونه به چاپ بر روی صفحه نمایش است. بنابراین اجرا کند. که بد نیست. بسیار خوب است. بنابراین در حال حاضر کن که انجام شده است به اجرا. آیا او باید به من هر چیزی دست به عقب؟ نه این که ما تا کنون دیده ایم. باز هم، printf می کند در واقع یک شماره، بازگشت، اما ما قصد داریم که در حال حاضر به چشم پوشی از آنجا که ما از آن استفاده می شود هرگز. به طوری که آن را برای کن. و بنابراین در حال حاضر طول می کشد بیش از کنترل برنامه را دوباره چرا که خط از کد، printf، انجام شده است اجرا شده است. و ما در مورد راه ما، اجرای هر آنچه که دیگر از خطوط وجود دارد. بنابراین در حال حاضر سعی کنید یک مثال کمی متفاوت به شما اجازه می دهد تا. این بار در اینجا برای اولین بار روشن روی صفحه نمایش به شما اجازه می دهد، و این بار ما می خواهیم از تابع cubing انجام، اما این بار، من انتظار دارم یک مقدار خروجی است. پس جلو بروید و اجازه دهید این کار را انجام. در حال حاضر من یک خط از کد را که می گوید: X می شود مکعب X است. خط از کد، فراخوان، به نظر می رسد، مثل این: x = مکعب (x)؛ پس چگونه است که این رفتن به محل کار؟ اجازه دهید به جلو بروید و به شما یک صفحه سفید را دوباره. من می خواهم برای نوشتن مقدار x، که در این لحظه در زمان اتفاق می افتد، اجازه دهید می گویند، 2 تا آن را ساده نگه دارید. من آن را بر روی یک تکه کاغذ ارزش 2 است، که مقدار x من نوشته شده است. من از آن دست کن. >> و من فقط پاسخ ارسال کنم؟ >> آره، بیایید تنها به نوشتن پاسخ. باشه. و هم اکنون از او چیزی به من بازگشت. کامل. نیس اش Segue. بنابراین در حال حاضر او به من دست ارزش 8 در این مورد، و آنچه را می توانم با آن انجام دهید؟ در واقع - بیایید ببینید، این حق را دریافت کنید. چه هستم من را با آن انجام دهید؟ حالا من قصد دارم به این مقدار و در واقع آن را در آن بیت در حافظه ذخیره. اما متوجه من از نوع مبارزه در اینجا. من کمی گیج شده زیرا که در آن به کار من در واقع مقدار x، زیرا آنچه من فقط از لحاظ جسمی دست کن یک تکه کاغذ است که تا به حال مقدار 2 است، که X بود، و در واقع، که دقیقا چه اتفاقی افتاده است. پس از آن معلوم می کند که هنگامی که با شما تماس تابع و شما را در بحث عبور مانند سلام، جهان یا شما را در استدلال مانند 2 منتقل می کند، به طور کلی، شما در حال عبور در یک کپی از آن بحث شده است. و به این ترتیب همانطور که من نوشت شماره 2 در اینجا و آن را به دست کن، است که باید به این معنی است که من هنوز یک کپی از مقدار 2 در جایی زیرا در واقع، در حال حاضر که من بدست ارزش 8، من باید برای رفتن به RAM و در واقع نوشتن 8 که در آن من یک بار تا به حال شماره 2. بنابراین بصری، به یاد داشته باشید این مفهوم عبور، به معنای واقعی کلمه، یک کپی از مقدار است. کن می کند چیزی که خود را، به من دست چیزی - در این مورد، یک مقدار مانند 8 - و سپس من را مجبور به انجام چیزی که با ارزش اگر من می خواهم به آن را نگه دارید. پس از این خواهد آمد برگشت به بیش از حد قبل از اینکه طولانی آشنا. از شما بسیار سپاسگزارم برای این دمو در اینجا کن. [تشویق حضار] خیلی خوب انجام می شود. بیایید ببینید که چگونه است که در نهایت به برخی از تابع فراخوانی شده ایم که انجام شده است در اینجا. اجازه بدهید من به جلو بروید و آن را با ما بازگشت به cubing به عنوان مثال در اینجا. توجه کنید که اگر ما می خواهیم به واقع شروع به مصرف این بیشتر، ما قصد داریم باید آگاه از این واقعیت که عدد X است که در اینجا به تصویب رسید متفاوت است از آنچه که در واقع در حال به تابع منتقل می. پس باز هم، این تصویب شده توسط نسخه در حال رفتن به تبدیل شدن فقط در یک لحظه کاملا وابسته است. بیایید یک نگاهی به چیزی می کند که کاملا کار نمی کند هنوز. من قصد دارم به جلو بروید و باز کردن یک نمونه حشره دار سوم، است که با ماهیت ناقص، و آن را به نام buggy3 و پیاده سازی یک تابع مبادله است. در اینجا ما باید یک تابع اصلی است که x و y خودسرانه به 1 و 2 مقداردهی اولیه، به ترتیب. ما می توانیم GetInt استفاده کنید، اما ما فقط نیاز به یک ورزش ساده، پس از آن سخت رمزی به عنوان 1 و 2 است. در خطوط 21 و 22، ظاهرا از چاپ X و Y، 1 در هر خط. سپس در خط 23، من ادعا می کنند من مبادله این ارزش ها، نقطه، نقطه، نقطه. ظاهرا من به یک تابع در خط 24 به اصطلاح مبادله است که طول می کشد 2 استدلال است. کاملا قانونی توابع را به 2 استدلال شده است. ما دیده ایم printf آن را انجام دهد در حال حاضر. بنابراین مبادله ظاهرا طول می کشد X و Y، و به عنوان نام آن نشان می دهد، من امیدوارم که آن را برای رفتن به تعویض این 2 مقدار. تا بعد من در خط ادعا می کنند 25 "تعویض! x و y و من چاپ با این فرض که آنها در واقع جابجا شده است. اما اگر من در واقع اجرای این برنامه - به من اجازه باز کردن یک پنجره ترمینال، buggy3 را به من - به عنوان نام نشان می دهد، این است که قصد ندارم برای پایان دادن به خوب زیرا زمانی که من ضربه را وارد کنید، توجه کنید که X است 1، y 2، و در عین حال در پایان این برنامه، آنها هنوز هم، در حقیقت، همان است. بر اساس تظاهرات فقط در حال حاضر با کن، آنچه در واقع در؟ بیایید شیرجه رفتن به این تابع swap. این فوق العاده کوتاه است. این فقط چند خط کد در طولانی مدت. اما آنچه مشکل اساسی بر اساس داستان ساده گفت: تا اینجا با کن؟ مبادله چرا شکسته؟ [دانشجو] شما در ذخیره سازی یک کپی، متغیر است. دقیقا. ما در حال ذخیره یک کپی، خود متغیر نیست. به عبارت دیگر، مبادله ظاهرا 2 استدلال، بین المللی، طول می کشد و آن را خودسرانه A و B نامیده می شود، و در اینجا من در X و Y که به ترتیب 1 و 2 گذشت، اما من به معنای واقعی کلمه در X گذشت، من به معنای واقعی کلمه در Y عبور من از گذراندن یک کپی از x و یک کپی از Y است. تقریبا به عنوان اینکه شما کپی و چسبانده به مبادله ارزش هایی که شما می خواهید آن را در واقع دستکاری. بنابراین در صورتی که این مورد، هنگامی که من از آغاز برنامه اجرای خط 35 سپس 36، زمانی که من به خط 37، در این نقطه در داستان، ارزش چیست؟ در این نقطه در داستان، خط 37، مقدار یک را در این نقطه چیست؟ >> [دانشجو] 1. [مالان] این فقط باید 1، حق، چرا که X به عنوان آرگومان اول به تصویب رسید، و این تابع فقط خودسرانه فراخوانی آرگومان اول آن است. به طور مشابه Y استدلال دوم، و آن را فقط خودسرانه خواستار B آرگومان دوم. این دوگانگی است که در واقع نسبتا به سادگی توضیح داده شده است. در مورد آن فکر کنید. هیچ یک از ما را ملاقات کرده اید کسی که نوشت printf، مطمئنا، او هیچ ایده چه چیزی متغیر ما به 30 سال بعد می رویم به نام. بنابراین به تمایز بین آنچه با شما تماس متغیر در توابع شما نوشتن وجود دارد و چه با شما تماس متغیر در توابع شما تماس و یا با استفاده از. بنابراین به عبارت دیگر، من که متغیرهای من به عنوان x و y نوشته شده است، اما اگر شخص دیگری تابع swap نوشته شده بود، او قطعا نه می دانم آنچه متغیر من در حال رفتن به آن می شود، به طوری که این است که چرا شما این دوگانگی از نام تحقق بخشند. با مشخصات فنی، من می توانم این کار را بر حسب تصادف انجام دهید، اما آنها هنوز هم به عنوان کپی می شود منتقل می شود. این فقط یک تصادف محض باشد زیبا و در صورتی که کسی که نوشت مبادله همان نام استفاده کرده اند. بنابراین در این نقطه در داستان، خط 37، 1 است، ب 2 است، و در حال حاضر من اقدام به تعویض آنها است. اول از همه، اجازه دهید من در واقع این کار را بسیار ساده تر است. من نمی دانم آنچه در آن 3 خط کد انجام می دهند. اجازه دهید من فقط این است: B =، A = B، انجام می شود. چرا این شکسته، منطقی است؟ این نوع از چیزی که بصری است، درست است؟ بنابراین A و B می شود و B می شود، اما مشکل این است که به زودی به عنوان خط 37 اجرا، مقدار A و B چه؟ همان، 1، زیرا شما clobbered، پس به صحبت می کنند، شما تغییر B برابر است. پس یک بار خط 37 را اعدام کرده است، که، شما در حال حاضر 2 نسخه شماره 1 در داخل این تابع، پس هنگامی که شما در خط 38 می گویند A = B، شما نوع پیچ است زیرا شما فقط اختصاص 1 تا 1 است. شما به نوعی ارزش شما در مورد مراقبت از دست داده است. بنابراین در نسخه اصلی از این، متوجه آنچه که من انجام داد. من به جای یک خط سوم از کد که شبیه این. من اعلام یک متغیر موقت است. TMP یک نام بسیار معمول است برای یک متغیر موقت است، و آن را از نوع int به دلیل آن است برای مطابقت با آنچه که من می خواهم برای ایجاد یک کپی از. من ذخیره سازی کپی از داخل TMP، به طوری یک بار در خط 37 را اعدام کرده است، ارزش است - بررسی سلامت عقل سریع - 1، ارزش ب 2 است، و ارزش TMP است 1. بنابراین در حال حاضر من اجرای خط 38. هنگامی که خط 38 اجرا، طول می کشد در ارزش ب. و B 2 بود، به طوری که در حال حاضر 2. بنابراین در این نقطه در داستان، 2، B 2 است، و TMP است: 1. بنابراین در حال حاضر منطقی است، ما می تواند ارزش فقط TMP با صدای تلپ به B است و ما در حال انجام می شود. بنابراین، ما این مشکل را حل شده است. متاسفانه، زمانی که من برای اجرای این برنامه در این فرم، آن را واقعا نمی تعویض هر مقدار. اما برای روشن شود، چرا؟ من مشکل منطقی از یک لحظه قبل ثابت، اما باز هم، اگر من برای اجرای این برنامه، X و Y بدون تغییر باقی می ماند در پایان از اجرای این برنامه است. [نظر دانش آموز نامفهوم] >> ما چیزی برنگشته است، به طوری که درست است. اما به نظر می رسد از یک بیت از یک مشکل وجود دارد در اینجا به دلیل تا کنون، تنها چیزی که ما قادر به بازگشت بوده ام یک چیز است، و این محدودیت از C. شما فقط می توانید واقعا برگرداندن یک مقدار، که در این صورت من نوع گیر کرده است اینجا زیرا من می توانم مقدار جدید X یا بازگشت من می تواند مقدار جدید Y بازگشت، اما من می خواهم هر دو بازگشت. پس از بازگشت، راه حل ساده نیست. اما مشکل اساسی این است که چرا؟ چه ما در واقع جابجا شده است؟ [دانشجوی] A و B است. >> A و B. اما A و B نسخه از X و Y، که بدین معناست که ما فقط به این کار، ما فقط 3 دقیقه را صرف صحبت کردن در مورد تابع swap و 3 از این متغیرها، و این فوق العاده است، کاملا درست است در انزوا، اما و دامنه ب تنها در این خطوط که در اینجا می باشد. بنابراین درست مانند یک حلقه for، اگر یک عدد صحیح به شما اعلام من در داخل حلقه به طور مشابه، اگر شما اعلام درون A و B یک تابع است که شما نوشته شده است، آنها تنها در داخل آن تابع معتبر، که بدین معناست که به زودی به عنوان مبادله انجام شده است اجرای و ما از خط 24 تا خط 25، X و Y شده اند تغییر نمی کند در تمام. شما فقط تلف زیادی از زمان مبادله کپی از متغیر. پس از آن معلوم است که راه حل این است که در واقع غیر آشکار است. این کاملا کافی برای بازگشت به ارزش ها نمی کند چرا که ما فقط می توانیم بازگشت 1 ارزش، و من واقعا نمی خواهم به مبادله هر دو X و Y در همان زمان، بنابراین ما در حال رفتن به برای آمدن به این. اما در حال حاضر، درک کنند که این مسئله اساسا از این واقعیت است که a و b نسخه مشتق شده است و آنها را در دامنه خود را. بیایید سعی کنید برای حل این مشکل در برخی از راه. اجازه بدهید در واقع حرکت به عقب و باز کردن، اجازه دهید می گویند، یک نوع چهارم از این، buggy4. در این مورد چه؟ این یک مشکل مشابه ولی ساده تر در نگاه به قبل از چاقو ما را در حل آن است. این برنامه به نام افزایش است، و آن ظاهرا یک عدد صحیح X تا 1 در خط 18 مقدار دهی اولیه شده است. من ادعای X 1 است، من پس از آن ادعا می کنند "ایجاد یک ..." من پس از آن تماس به افزایش است، اما بعد از آن در خطوط 22 و 23، من ادعا می کنند که از آن شده است افزایش مییابد، من ادعا X است در حال حاضر هر آنچه در آن است - 2، احتمالا - اما این برنامه دارای اشکال می باشد. چه مشکل؟ آره. >> [پاسخ دانش آموز نامفهوم] >> دقیقا. بنابراین X اعلام شده است، بدیهی است، در خط 18. این است که در داخل آکولاد اصلی. بنابراین پاسخ ساده این است که در حالی که X وجود دارد در اینجا، در خط 32 وجود ندارد، بنابراین این برنامه در واقع حتی نمی خواهد کامپایل. کامپایلر زمانی که من سعی می کنم جمع آوری این کد به من داد در مورد برخی از شناسه های اعلام نشده و یا چیزی به آن اثر است. در واقع، اجازه دهید به را امتحان کنید. این را buggy4. آن است که وجود دارد. استفاده از 'X' شناسه اعلام نشده در خط 32. و در واقع، اجازه دهید صریح تر می شود امروز در اینجا به طوری که این بسیار مفید است در ساعات اداری و در منزل. توجه داشته باشید که آن را کمی cryptically نوشته شده است. اما این واقعیت است که صدای جرنگ جرنگ است ما فریاد می زدند، گفت: buggy4.c: 32:5 است، در واقع مفید است. این بدان معنی است که خطا در خط 32 شخصیت در موقعیت 5. بنابراین 1، 2، 3، 4، 5. که، در واقع، که در آن مشکل است. و همچنین، بیش از حد، به خاطر داشته باشید در ساعات اداری و در منزل، من خوش شانس در اینجا. من یک اشتباه است. رفتن به نسبتا آسان به تعمیر. اما اگر شما یک صفحه کامل از پیام های خطا قریب به اتفاق، دوباره که یکی از پایین ترین تنها ممکن است علامتی از یکی از بالاترین تحقق بخشند. بنابراین همیشه تعقیب اشکالات خود را از بالا به پایین به همین دلیل ممکن است وجود داشته باشد اثر زنجیره ای گل افتاب گردان است که نشان می دهد شما دچار مشکل راه را بیش از شما در واقع می شود. پس چگونه می تواند این را حل کنیم اگر هدف من این است که افزایش X؟ >> [دانشجو] X جهانی است. خوب، بنابراین ما می توانیم X جهانی. بیایید میانبر است که من در مورد قبل از آن هشدار داد، اما هک، ما فقط نیاز به یک تعمیر سریع، بنابراین اجازه دهید فقط می گویند نوع int X اینجا. این باعث می شود X جهانی است. بنابراین در حال حاضر اصلی دسترسی به آن و افزایش دسترسی به آن را دارد، و اجازه دهید من به جلو بروید و تدوین این در حال حاضر. را buggy4 را وارد کنید. به نظر می رسد به کامپایل در حال حاضر است. اجازه اجرا buggy4. و به نظر میرسد در واقع کار. این یکی از این چیزهایی که به عنوان من می گویم، به عنوان کنم، من فقط در اینجا انجام می شود، چرا که به طور کلی، برنامه های ما در حال رفتن به بسیار جالب تر و بسیار طولانی تر از این، و اگر راه حل خود را به مشکلات زندگی را فقط با قرار دادن تمام متغیرهای در بالای فایل خود را، بسیار به سرعت انجام برنامه های دریافت horrifically دشوار است برای مدیریت. سخت تر می شود فکر می کنم تا نام متغیر جدید، آن سخت تر می شود به درک آنچه که متغیر در حال انجام است، و غیره به طور کلی، این یک راه حل خوب نیست. پس این کار را بهتر کنیم. ما نمی خواهیم که به استفاده از یک متغیر جهانی است. من نمی خواهم به افزایش x، بنابراین من به وضوح می تواند - در پایان روز، این نوع از یک داستان احمقانه است چرا که ما فقط این کار را - اما اگر من که در مورد اپراتور نمی دانند و یا اجازه نداشتم آن را در اصلی خود را تغییر دهید، چه چیز دیگری می توانم کن را اجرا کنم در اینجا این بار نه به مکعب اما به افزایش؟ چگونه می توانم این چیز را عوض کنم؟ آره. [دانشجو] عبور در X و سپس بازگشت [نامفهوم] >> خوب، خوب است. پس چرا در X من نمی منتقل می کند و سپس به جای بازگشت آن، چرا من نمی توانم، فقط بازگشت X + 1. زن و شوهر بیشتر چیزهایی که برای تغییر در اینجا. من در مسیر درست هستم. چه چیز دیگری می توانم نیاز به نیشگون گرفتن و کشیدن؟ شخص دیگری. آره. [پاسخ دانش آموز نامفهوم] من نیاز به تغییر نوع بازگشت از افزایش به دلیل آن را از درجه اعتبار ساقط است. خالی هیچ چیز بدان معنی است که بازگردانده می شود، اما به وضوح در حال حاضر آن است که، بنابراین این نیاز به تغییر - >> [دانشجو] int است. نوع int با هر آنچه من در واقع بازگشت سازگار باشد. در حال حاضر چیز دیگری است که هنوز هم حشره دار اینجا کلیک کنید. آره. [پاسخ دانش آموز نامفهوم] >> [مالان] بنابراین من نیاز به افزایش X؟ [پاسخ دانش آموز نامفهوم] >> [مالان] آه، بنابراین من نیاز به تصویب X است. بنابراین من نیاز به انجام این کار در اینجا. >> [نظر دانش آموز نامفهوم] [مالان] نمونه، من مجبور به تغییر این تا اینجا. بنابراین این برای تبدیل شدن به یک بین المللی، این برای تبدیل شدن به - HMM، من در واقع یک اشکال اینجا کلیک کنید. اجازه بدهید رفع این مشکل یکی از اولین. چه باید از این واقع می شود؟ باید به یک چیزی از نوع int است. این می تواند x، اما صادقانه بگویم، اگر شما شروع به دعوت از همه از شما متغیر X، آن را کمتر و کمتر روشن است که برای به دست آوردن. پس اجازه دهید فقط خودسرانه یک قرارداد نامگذاری مختلف برای توابع یاور من را انتخاب کنید، توابع من نوشتن. ما می خواهیم آن را، و یا ما می تواند از آن تماس بگیرید - بیایید آن را شماره حتی بیشتر آشکار می شود. تا بعد من مجبور به بازگشت هر چه تعداد به علاوه 1، و در حال حاضر من مجبور به تغییر 1 چیز دیگری در اینجا و یک چیز دیگر اینجا. چه می توانم در خط 21 اولین تغییر؟ >> [پاسخ دانش آموز نامفهوم] [مالان] من باید آن را اختصاص به X است. من فقط می توانید تماس بگیرید افزایش (x). من باید به خاطر داشته باشید پاسخ با تغییر مقدار x در سمت چپ. و حتی اگر X است که در حال حاضر در سمت چپ و راست، که کاملا خوب است زیرا سمت راست اول اجرا می شود و سپس می شود plopped به چیزی دست چپ - X در این مورد. و پس از آن در نهایت، این مشکل آسان است در حال حاضر. این فقط باید آنچه پایین، شماره هوشمند مطابقت داشته باشد. بنابراین یک دسته کامل از تغییرات عملکرد واقعا احمقانه اما نماینده از چیزهایی است که ما به طور فزاینده ای می خواهید انجام دهید. بنابراین buggy4 کند. من پیچ تا جایی. آه، خدای من. پنج اشتباه در یک برنامه خط 6. بنابراین چه در خط 18، شخصیت 5؟ بنابراین من باید به این هوشمند، اعلام. اجازه دهید را ببینید. یک دسته کامل از خطاهای دیگر وجود دارد. آه، خدای من - 19، 18، 21 - اما دوباره، اجازه دهید فقط پاک کردن صفحه نمایش، L کنترل در اینجا، و تکرار صدای جرنگ جرنگ. تا 5 مشکلات است در واقع درست است که 1. بنابراین در حال حاضر اجرا buggy4 را وارد کنید. صدای سوت حاکی از حیرت یا تحسین، x افزایش مییابد به درستی شده است. بسیار خوب. هر گونه سوال در مورد چگونه به افزایش تعداد؟ آره. [سوال دانش آموز نامفهوم] >> سوال خوب. چگونه است که من فقط می تواند تغییر X به تعداد و برنامه بلافاصله می دانید؟ باز هم، آن را به عنوان این انتزاع فکر می کنم. بنابراین اگر من اصلی و کن افزایش است، رک و پوست کنده، من اهمیتی نمی دهند چه کن اپل می نامد خود را. من اهمیتی نمی دهند چه او خواستار چیزی است که با اجرای خود را از این قابلیت انجام دهد. این جزئیات پیاده سازی است که من، اصلی، لازم نیست در مورد مراقبت است. و به این ترتیب به سادگی آن را در حال تغییر به طور مداوم در داخل تابع - شماره اینجا و شماره در اینجا - تمام طول می کشد تا زمانی که من کامپایل مجدد شده است. این نوعی مانند اگر شما فکر می کنم بسیاری از ما، کسانی که از شما با گواهی نامه ی رانندگی که رانده شده و یا اگر شما حتی در یک ماشین هدایت می شود، بسیاری از ما هیچ تصوری از اینکه چگونه یک ماشین با این نسخهها کار در قسمت پایین هود. و به معنای واقعی کلمه، اگر شما برای باز کردن هود، بسیاری از ما - از جمله خود من - قرار نیست واقعا می دانید به آنچه که ما در حال نگاه کردن به، نوع از مثل شما ممکن است با چیزهای مثل این حق را احساس کن. اما ما واقعا نمی باید به مراقبت از خودرو چگونه کار می کند، ما لازم نیست که به مراقبت از آنچه را که همه از میله و پیستون ها و کابل های داخل ماشین در واقع انجام می دهند. بنابراین چیزی شبیه به آنچه که با شما تماس پیستون در اینجا در این مورد مهم نیست. همین ایده است. آره. >> [سوال دانش آموز نامفهوم] اگر استفاده می کند بیش از لحظه ای متغیر XA قبل وجود دارد، شما، برنامه نویس، می باید در همه جا به آنها را تغییر دهید. یا شما به معنای واقعی کلمه می تواند فایل، منو، انجام دهد و سپس پیدا کردن، جایگزین - چیزی شبیه به آن - اما شما باید برای ایجاد این تغییرات خود را در حال رفتن به. شما باید سازگار باشد. >> [دانشجو] اگر متغیرهای چند گانه وجود دارد [نامفهوم] منظور خاصی مانند اینجا، اگر این INT تعداد دیگری؟ >> [دانشجو] گزارش خطای. [مالان] آره. ترتیب مهم است هنگامی که شما در حال فراخوانی تابع است. بنابراین اگر من خواستار افزایش در اینجا با چیزی کاما از هم، نقشه برداری مستقیم وجود دارد. متغیر اول، هر آنچه نامیده می شود، ساخته شده است یک کپی از این استدلال برای اولین بار در اینجا. متأسفم. این باید یک پرانتز. خط های آرگومان دوم را با یک دوم است. بنابراین سفارش، بله، مهم نیست. بسیار خوب. متأسفم. من در زمان راه طولانی برای رسیدن به آنجا. سوال دیگر؟ بسیار خوب. بنابراین اگر ما می توانیم تصویری از آنچه در واقع در اینجا رنگ نیست در قسمت پایین هود، پس به صحبت می کنند. این یک مستطیل است که ممکن است به حافظه کامپیوتر خود را نمایندگی می باشد. حتی اگر شما هیچ ایده چگونه حافظه کار می کند و یا چگونه با این نسخهها کار RAM، حداقل فرض می کنیم که شما از آن خوشه این روزها. تو مگابایت از آن، تو گیگابایت از آن، و ما از هفته 0 می دانیم که یک بایت است فقط آنچه را؟ >> [دانشجو] 8 بیت است. 8 بیت، درست است؟ بنابراین 8 صفر و 1. بنابراین اگر کامپیوتر شما دارای یک فرفره RAM، 2 گیگابایت RAM این روزها، شما باید یک میلیارد یا 2 میلیارد بایت از حافظه و یا حدود 8 میلیارد یا 16 میلیارد بیت در داخل کامپیوتر شما. بر خلاف کوچک ParsiForums :: تالارهای مثال ویلی، ذرات مغناطیسی به طور معمول دیگر. به طور فزاینده - در لپ تاپ ها حداقل - درایوهای حالت جامد SSD ها، که فقط باید اجزاء بدون حرکت است. تمام الکترونیکی است. این همه برق مبتنی بر. بنابراین از این مستطیل را فقط به عنوان به نمایندگی از 1 یا 2 گیگابایت حافظه است که شما فکر می کنم. پس از آن یک تکه از حافظه است. جهان از علم کامپیوتر است مرتب کردن بر اساس تقسیم کردن تکه های حافظه را به انجام کارهای مختلف است. به عنوان مثال، در صورتی که این RAM کامپیوتر خود را، به عنوان پیشنهاد توسط مستطیل وجود دارد، معلوم می شود که توسط کنوانسیون، در بالای RAM خود را، پس به صحبت می کنند، به طور کلی آنچه که به نام یک بخش متن. اینها 0s و 1S که شما را کامپایل کرده اند. بنابراین، هنگامی که ما که در قسمت پایین هود در چه a.out نگاه، تمام این 0s و 1S، و هنگامی که شما برای اجرای برنامه، و کسانی که 0s و 1S از هارد دیسک شما را به چیزی به نام RAM بارگذاری می شود، و در RAM، آنها در بالا قرار داده شده است. در همین حال، شما باید چیزهای دیگر: مقداردهی اولیه داده ها، uninitialize داده است. که 2 swaths از حافظه اشاره به متغیرهای جهانی، که شما اغلب استفاده از اما گاهی اوقات اگر شما انجام دهید، آنها تا پایان وجود دارد تا به عنوان خوب. سپس برخی دیگر از مسائل وجود دارد: متغیر های محیط زیست، که ما زمان زیادی را صرف نیست، اما بعد از آن 2 چیز مهم است که خواهد آمد در طول ترم، پشته و پشته. بنابراین بسیاری از حافظه کامپیوتر شما محفوظ است به هنگام اجرای برنامه چیزی به نام پشته و چیزی به نام پشته است. ما قصد داریم تا در باره پشته صحبت کنید، اما ما در باره پشته صحبت کنید. پشته به معنای به التماس کردن به تصویری از سالن ناهار خوری سینی های غذا در ماتر خانه یا هر کجا که شما اتفاق می افتد که در آن سالن غذاخوری کارکنان آنها را پاک کردن هر روز، آنها پشته تا آنها را از طبقه بالا و به همین ترتیب، در حافظه است، این ایده از قرار دادن چیزی در پشته وجود دارد، قرار دادن چیزی در یک پشته قرار دادن چیزی بر روی پشته. و چه چیزی ما با این؟ بیایید زوم در نیمه پایین تر از این تصویر، RAM کامپیوتر خود را، پیشنهاد به شرح زیر است. به نظر می رسد که زمانی که شما یک برنامه مثل a.out یا سلام - هر چه این برنامه این است که شما نوشته شده است - دوباره، و کسانی که 0s و 1S از هارد دیسک شما، است که در دراز مدت ذخیره سازی لود می شود. باقی می ماند وجود دارد حتی زمانی که پلاگین، لود شده به RAM شما را بکشد. RAM سریع تر از دیسک های سخت - آن را کوچکتر از دیسک های سخت - اما آن را که در آن برنامه های زنده در حالی که شما آنها را در حال اجرا می باشد. بنابراین شما دوبار کلیک کنید برنامه بر روی مک یا PC، آن را از هارد دیسک به RAM لود می شود. به محض این که آن را به RAM، برو 0s و 1S در راه بالا پر شده است، به اصطلاح بخش متن، اما پس از آن به محض این که برنامه شما در واقع شروع در حال اجرا، عملکرد اصلی این است نامیده می شود و اصلی، به عنوان دیده ایم، اغلب دارای متغیرهای محلی، و آن را به نوع داده int و رشته ها و کاراکتر ها و مانند آن. بنابراین اگر برنامه شما این است که شما نوشته اند و یا برنامه ای است که شما دو کلیک استفاده از برخی از متغیرهای داخل اصلی آنها در نهایت در پایین پشته خود را از حافظه، پس به صحبت می کنند. مشخص، چه در واقع چیست؟ این فقط بدان معنی است که اگر ما قرار بود به تعداد بایت RAM در کامپیوتر شما، توجه کنید که ممکن است این تعداد بایت 0، این ممکن است تعداد بایت 1، 2، 3، 4، 5، 6، تمام راه را تا به 2 میلیارد دلار خواهد بود تمام راه را در بالا وجود دارد. بنابراین به عبارت دیگر، هنگامی که ما در مورد RAM یا حافظه از کلمه در ادامه متن صحبت، این حالت فقط بدان معناست که کسی که تصمیم گرفته است به تعداد هر یک از کسانی که تکه های حافظه. بنابراین، هنگامی که شما نیاز به 32 بیت برای بین المللی و یا شما نیاز به 8 بیت برای یک کاراکتر، جایی که آنها در نهایت در حافظه؟ مفهومی، آنها فقط تا در پایین این چیزی که به نام پشته پایان می رسد. اما آنچه جالب است در حال حاضر زمانی است که بخش اصلی یک تابع - فرض کنید یک تابع به نام صنایع غذایی، فقط یک نام دلخواه - چه اتفاقی می افتد اصلی در پایین این پشته از حافظه است؛ صنایع غذایی در حال حاضر در بالای اصلی در حافظه قرار داده می شود. بنابراین متغیرهای محلی که در صنایع غذایی تا پایان مرتب کردن بر اساس مفهومی بالاتر از کسانی که در اصلی. اگر صنایع غذایی خواستار یک تابع دیگر به نام نوار، آن دسته از متغیرهای اینجا. اگر نوار خواستار چیز دیگری، در اینجا، اینجا، اینجا. بنابراین چه چیزی جالب در مورد یک برنامه در حال اجرا است که به عنوان با شما تماس توابع و به عنوان آن دسته از توابع تماس توابع و به عنوان آن دسته از توابع تماس توابع، شما برای ساختن این پشته از توابع در حافظه است. تنها یک بار، بازده عملکرد شما شروع به گرفتن که حافظه. بنابراین یکی از ساده ترین راه هایی برای اجرای خارج از حافظه در یک برنامه رایانه ای به نوشتن توابع که بازگشت هرگز. بنابراین به عنوان مثال، اجازه دهید نشان می دهد که با برنامه عمدا حشره دار. اجازه بدهید من بروم جلو و # شامل ، اعضای هیات تحریریه اصلی (خالی) و من قصد دارم برای انجام این کار در حالی که (2> 1)، که احتمالا تا به حال بر ما را تغییر نخواهد داد، و اجازه دهید من به جلو بروید در حال حاضر و انجام printf. در واقع، که به کمتر بصری جالب است. اجازه دهید این کار را انجام. برای من بین المللی = 0؛> 0 - اجازه دهید این اشتباه را - من + +. و اجازه دهید printf نیست. بیایید تمرین آنچه که من موعظه. اجازه دهید که در اینجا یک روش، کر درجه اعتبار ساقط، و ما می گویم من بین المللی، و پس از آن من قصد دارم برای گفتن printf - نه، اجازه دهید را در این جالب تر است. اجازه دهید در واقع هر چیزی چاپ نمی کند در تمام. اجازه دهید فقط این کار را کر (من). بسیار خوب. بنابراین این حشره دار است چرا که چرا؟ من این که من به این دلیل که برنامه نمی کند در واقع هر چیزی مورد علاقه است. اما این هدف نیست. هدف این است که برای نوشتن یک برنامه که تابع اصلی چه، ظاهرا؟ تماس خود را. و در واقع، ما حلقه لازم نیست. بیایید حتی این فقط بنابراین نه به از دست دادن دید واقعا اشکال اساسی را ساده کنید. اصلی تماس کر به خواندن برخی از گروه کر، پس از آن من به چیزی احمقانه است و من تا به حال کر کر تماس چرا که من شخص دیگری را به عهده گرفت که قرار بود برای پیاده سازی آن شاید، و در حال حاضر این است که قصد ندارم به کامپایل رتبهدهی نشده است. من نیاز به انجام چه؟ من نیاز به نمونه، به یاد داشته باشید. بنابراین من نیاز به کر خالی (من بین المللی)؛ بنابراین در حال حاضر اگر من به پایین در اینجا - در واقع، اجازه دهید با استفاده از پنجره های بزرگتر. اجازه دهید به جلو و کر. اجازه دهید به جلو و کر. استفاده از شناسه های اعلام نشده من به. اوه، که احمقانه بود. ما استدلال نیاز ندارد. اجازه دهید فقط این کار را انجام. من آرزو می کنم که ما در این راه آغاز شده بود. این می شده اند یک برنامه بسیار ساده تر به نوشتن. وجود دارد. در حال حاضر به بیش از به پنجره ترمینال من، تکرار صدای جرنگ جرنگ، و در اینجا ما به اجازه. بود که واقعا سریع است. آنچه واقعا اتفاق افتاده، هر چند است؟ خب، در حال حاضر من خط چاپ به طوری که مشاهده می کنید اضافه کنید. اجازه بدهید من می گویند printf ("من در اینجا هستم") - متغیر. ما می خواهیم آن را مانند که ترک کنید. اجازه بدهید عمل می کند. اجازه دهید من تکرار کر. و ... آمده است. ادامه دهم. تا به کنار، چرا آن را به سقوط هنوز رتبهدهی نشده است؟ تقسیم بندی گسل اتفاق افتاد سریع فوق العاده قبل از. [پاسخ دانش آموز نامفهوم] >> دقیقا. پس از آن طول می کشد زمان به چاپ، درست است؟ این فقط طول می کشد کار بیشتر بر روی بخشی از کامپیوتر است. و از آن است که وجود دارد: تقسیم بندی گسل. بنابراین فقط برنامه های سریع اجرا اطلاع می دهد. اگر شما هر چیزی، به سرعت فوق العاده چاپ نیست. اما ما هنوز هم این خطا تقسیم بندی به دلیل چه اتفاقی می افتد؟ اگر شما فکر می کنم چگونه حافظه کامپیوتر شما گذاشته است، این اتفاق می افتد به اصلی، اما در اینجا اجازه دهید فقط این کر، و این کر است. و در حال حاضر اگر من زیبایی شناسی من حق این است که فقط رفتن به می گویند کر، کر، کر، گروه کر، گروه کر، گروه کر، گروه کر، nauseum آگهی، و در نهایت، چه اتفاقی خواهد افتاد؟ اگر تصویر بزرگ، به معنای واقعی کلمه، این است که چه چیزی اتفاق می افتد مفهومی است؟ سرریز پشته پشته. یا، بدتر، شما فقط به تاخت و تاز کردن همه چیز، از جمله بخش متن، که 0s و 1S که نشان دهنده برنامه شما است. به طور خلاصه، این است که فقط فوق العاده، فوق العاده بد. برنامه شما است از کنترل خارج spiraled. شما با استفاده از حافظه راه را بیش از شما در نظر گرفته شده همه به خاطر اشتباه احمقانه در این مورد، یا در این مورد یک تابع بسیار عمدا انجام شده خود را خواستار است. در حال حاضر، این همه بد نیست. توابع که خود را در واقع قدرت بزرگ وقتی که شما استفاده از آن را به درستی. من آن را به درستی استفاده نمی شود در اینجا. بنابراین این همه بد نیست، اما واقعیت این است که من در واقع هرگز متوقف خواستار خودم ضعف اساسی از این برنامه است. تا جایی که ما با تمام این رفتن؟ آنچه واقعا اتفاق می افتد؟ وقتی که من اسمش تابع افزایش مانند ما در آن نمونه ها انجام شد، من یک ارزش مانند 1 که من عبور شوید. من در یک کپی از شماره 1 منتقل می کند، به طوری که موارد زیر اتفاق می افتد. بیایید به عنوان مثال افزایش، این مرد حق در اینجا. در اینجا چیزی است که در واقع اتفاق می افتد. وقتی که من اسمش Increment و من در X منتقل می کند، pictorially، چه خبر است در اینجا این است. اگر من ارزش، از مجموع 1 ذخیره می شود و من در واقع تماس افزایش، که در حال حاضر گروه کر نامیده می شود - از iPad من پرتاب کردن اینجا. بیایید به این افزایش، و ما نمی دانیم که این تابع بعدی این است که برای رفتن به. بنابراین آنچه در واقع اتفاق می افتد این است در اینجا به جایی در اصلی من یک تکه از حافظه است که نگهداری از شماره 1 است. وقتی که من اسمش افزایش، من با استفاده از تکه های دیگری از حافظه، اما در حال حاضر من کپی از مجموع 1. هنگامی که مقدار افزایش، این 2 می شود، اما بعد از آن چه اتفاقی می افتد و به زودی به عنوان بازده افزایش؟ این حافظه فقط میشود با بازگشت به سیستم عامل تحویل داده، که بدان معنی است که شما انجام داده ام هیچ چیز مفید است. 1 است که در ابتدا در اصلی موجود بود هنوز هم در واقع وجود دارد. تا جایی که ما با این رفتن؟ به نظر می رسد که در حافظه شما این توالی پشت به پشت کلمه در ادامه متن که شما می توانید مسائل در قرار داده، و معلوم است که ما قبلا هم دیده می شود چیزی که شامل قرار دادن چیزهای پشت به پشت به پشت به پشت. بر اساس یک رشته در هفته (1) و در حال حاضر هفته 2 چیست؟ این فقط یک مجموعه از کاراکتر ها است. بنابراین به نظر می رسد همانطور که شما می توانید اعداد را در حافظه قرار داده است، به همین ترتیب می تواند شخصیت شما را در حافظه است. و زمانی که ما شروع به قرار دادن کاراکتر در حافظه پشت به پشت به پشت به پشت، معلوم می شود که با استفاده از ساده ترین چیزهایی مثل حلقه و یا یک حلقه در حالی که، ما می توانیم از چپ به راست تکرار در بیش از کاراکتر در یک رشته و شروع به ماساژ دادن آنها را به شخصیت های مختلف در دسترس نباشد - می تواند تبدیل به B، B می تواند تبدیل به C - به طوری که در نهایت، ما می توانیم یک جمله انگلیسی است که در واقع باعث می شود احساس را و تبدیل هر یک از آن یکی از حروف در یک زمان با راه رفتن را از طریق حافظه های کامپیوتری ما را از چپ به راست در واقع به رمز در آوردن. پس اجازه دهید پنج دقیقه استراحت ما در اینجا، و هنگامی که ما آمده ایم، ما می خواهیم این روند را از تقلا اطلاعات شروع می شود. بسیار خوب. قبل از اینکه ما به برخی از رمزنگاری شیرجه رفتن و این چیزها را به نام آرایه، به من اجازه توقف به هر گونه سوال به دلیل احساس می کنم واقعا به نوعی مبهم برخی از آن موضوعات است. بنابراین رفع در حال حاضر اگر ما می توانیم. ما فقط در مورد مقادیر بازگشتی صحبت کردیم، ما در مورد استدلال صحبت کردیم، و ما در مورد این مفهوم صحبت کنیم که دوباره به در هفته آینده، کیفیت حافظه به عنوان یک دسته از این سینی های انباشته شده، پس به صحبت می کنند، از پایین به بالا، از جمله که هر یک از سینی که در پشته قرار داده می شود نشان دهنده یک تابع است که در حال حاضر در حال نامیده می شود. هر گونه سؤال؟ اجازه بدهید یک سوال در اینجا از من بپرسید. بازگشت ساده به آنچه که آن را قبل از برخی از ما زودتر Q & A. واقعیت این است که افزایش پرانتز باز، شماره هوشمند، پرانتز بسته - چه تعداد از نوع int باشد؟ [دانشجوی استدلال. >> استدلال. باشه. اما آنچه بحث؟ [پاسخ دانش آموز نامفهوم] >> که؟ >> [دانشجو] چیزی است که به شما منتقل شوید. خوب، چیزی است که به شما منتقل شوید. و به طور کلی، آن را فقط ورودی است. اگر شما در حال نوشتن یک تابع و هدف آن تابع در زندگی است که برای انجام کاری کمی متفاوت است در هر زمانی که شما از آن استفاده کنید. پس تنها راهی که برای آن که این اتفاق می افتد واقعا به نظر می رسد آن را با ورودی به طوری که می توان آن را چیزی متفاوت با آن ورودی در هر زمان. بنابراین شما نیاز به مشخص کردن دو چیز، زمانی که یک تابع ورودی است. شما نیاز به مشخص کردن نام است که شما می خواهید که ورودی را به صرفا برای راحتی خود را به طوری که شما می توانید به آن مراجعه کنید در تابع که شما خودتان را در حال نوشتن، که من در اینجا در خط 32. اما شما همچنین نیاز به تعیین نوع آن به دلیل C یک زبان برنامه نویسی که فقط مستلزم آن است که اگر شما می خواهید یک متغیر، شما باید به کامپیوتر چه نوع داده آن است که، در بخش های بزرگ به طوری که آن را می داند که چگونه بسیاری از بیت را برای آن متغیر اختصاص به دلیل آن می تواند 6 - با عرض پوزش، آن را نمی خواهد بود 6. این می تواند 16، می توان آن را 8، آن را می تواند 32، حتی 64، اما کامپیوتر نیاز به دانستن است. در حال حاضر، از نوع int در سمت چپ نشان دهنده چه، در مقابل؟ [پاسخ دانش آموز نامفهوم] >> که؟ >> [دانشجو] نوع عملکرد است. نوع عملکرد و، به طور خاص، نوع از خروجی آن است. راست. بنابراین در حالی که چیزی در پرانتز نشان دهنده ورودی آن، در صورت وجود، چیزی که به سمت چپ نشان دهنده خروجی آن است. و در این مورد، افزایش ظاهرا بین المللی را بر می گرداند، و به همین ترتیب بین المللی نوع برگشتی این تابع است. برای بازگشت به چه معنی است؟ به معنای واقعی کلمه، شما با استفاده از کلید واژه ها بازگشت و پس از آن اگر چه شما در حال بازگشت به سمت راست از کلید واژه ها یک عدد صحیح است، پس از آن است که در واقع مطابق با آنچه که ما وعده داده اند. - سلام جهان - شما می توانید چیزی شبیه به این انجام دهد چرا که یک رشته است. بدیهی است، آن را به یک عدد صحیح نمی باشد. بنابراین به طور خلاصه، این بار واقعا در تماس با ما، برنامه نویس، به خاص به آنچه که ما در حال بازگشت و پس از آن در واقع در مورد بازگشت آن بروید. بافت در اینجا در حال حاضر این است که حافظه کامپیوتر شما است، گیگابایت، 2 گیگابایت - هر چه - شاید بیشتر، شاید کمتر، اما کامپیوتر آن را بمثابه داشتن بخش های مختلف می باشد. چیزی می رود وجود دارد، چیز دیگری بالا می رود وجود دارد، چیزهای مختلف می رود در وسط، و امروز ما فقط از آن شروع می کنید. گفتن داستان، اما ما را دوباره به این زمان بیش از حد است. در حال حاضر، تنها قطعه از حافظه ما واقعا در مورد مراقبت در بخش متن چرا که فقط نشان دهنده 0s و 1S که صدای جرنگ جرنگ خروجی. بنابراین، هنگامی که شما یک فرمان را در صفحه کلید مانند a.out یا شما دو آیکون در سیستم عامل مکینتاش یا ویندوز اینجا را کلیک کنید. برنامه های خود را از هارد دیسک خود را به RAM لود می شود و آن را plopped در بالا از RAM کامپیوتر خود را، پس به صحبت می کنند. در همین حال، به عنوان برنامه خود را شروع می شود در حال اجرا و اصلی می شود به نام در این برنامه شما می نویسد و یا برنامه مایکروسافت یا اپل نوشت، هر یک از متغیرهای محلی خود را تا پایان پایین وجود دارد و در پایین از حافظه کامپیوتر شما است. اما اگر تماس های اصلی یک تابع دیگر که به خودی خود دارای متغیر یا استدلال، آنها در نهایت در بالای آن است. و در صورتی که تابع خواستار چیزی باشد، آنها تا پایان بالاتر از آن، بالاتر از آن، در بالای آن است. تنها یک بار، یک تابع انجام شده است اجرا کند انبوهی از سینی، پس به صحبت می کنند، شروع به پایین تر و پایین تر است. و این همان چیزی است که پس از آن، به طور خلاصه، توضیح می دهد که چرا زمانی که با شما تماس مکعب و یا با شما تماس افزایش، شما در حال گذر در یک کپی از مقدار است. و این بدان معناست که pictorially است که شما به معنای واقعی کلمه نوشتن شماره 1 در بخش دیگری از حافظه، در حال تغییر است که از شماره 1 تا 2 در مورد افزایش و یا تا 8 در مورد مکعب و پس از آن پرتاب که حافظه دور به زودی به عنوان افزایش یا مکعب گرداند. سوال. [دانشجو] که در آن متغیرهای جهانی ذخیره می شود؟ متغیر های جهانی در آنچه در حال حاضر به نام داده مقداردهی اولیه و یا آماده سازی داده های ذخیره شده، این تفاوت که اگر شما یک متغیر جهانی است و شما آن را اختصاص فورا یک مقدار با علامت مساوی، آن را به پایان می رسد تا در بالا وجود دارد، و اگر شما فقط می گویند X هوشمند؛ بدون ارزش، آن را به پایان می رسد تا کمی پایین تر در RAM به سادگی با کنوانسیون است. سوال دیگر؟ بسیار خوب. بنابراین این تصویر باز خواهد گشت که ما را قوی تر با آنچه که ما می توانیم با کامپیوتر انجام دهید، اما در حال حاضر، اجازه دهید که یک مقدمه کوتاه به رمزنگاری، نوع خاصی از رمزنگاری می کند که تمام مشکلات جهان را حل نمی کند کند، اما برخی از آنها را حل کند. در این مورد در اینجا، ما باید چیزی به نام راز کلید رمزنگاری است. راز کلید رمزنگاری، به عنوان نام نشان می دهد، ناشی امنیت خود را از یک راز است. به عنوان مثال، اگر شما در مدرسه ابتدایی بودند و شما تصویب نامه عشق راز کوچک به پسر یا دختر شما را در خرد کردن، اگر شما می خواهید به تصویب است که توجه داشته باشید از طریق مخاطبان، شما احتمالا چنین توجه داشته باشید به زبان انگلیسی نوشتن نیست یا هر چیز دیگری زبان مادری خود است. در عوض، شما ممکن است آن را یا رمزگذاری شما فقط ممکن است آنها را در یک پیام به صورت متن ارسال این روز است. اما شما در واقع ممکن است آنها را منتقل می کند توجه داشته باشید در طول کلاس درس. و انجام این کار ایمن در چنین راهی است که دوستان و معلم خود را نمی دانم آنچه که شما در حال نوشتن، شما ممکن است در آمده تا با یک الگوریتم نسبتا ساده است، جوان هر چند شما ممکن است، فقط به تقلا کلمات. بنابراین به جای نوشتن شما ممکن است ب نوشتن، به جای B شما ممکن است C بنویسید به جای C شما ممکن است D، نوشتن و غیره. شما می توانید با ترجمه پیچیده تر نامه به نامه های مختلف. اما گرفتن پسر و یا دختر به چه کسی در حال فرستادن این یادداشت است نیاز به دانستن چیزی، که همان چیزی است که، بدیهی است؟ >> [دانشجوی] آنچه که شما در حال ارسال. چه راز خود است، مانند آن نگاشت بین و B و C و D 'ها است. آن است که تنها اضافه کردن 1 به هر یک از حروف برای رفتن از A به B، B به C؟ آیا آن را پیچیده تر از آن است؟ بنابراین شما و له شدن شما نیاز به این اطلاعات محرمانه، اما این نوع از گرفتن-22 در اینجا وجود دارد. اگر این اولین بار است که شما با فرستادن این ایمیل نامه عشق را از طریق کلاس، حال چگونه است که پسر یا دختر می خواهم به دانستن آنچه که حتی راز است؟ تا راز کلید رمزنگاری می کند همه مشکلات جهان را حل نمی کند، و در واقع یک رابطه وجود دارد که در اینجا خواهیم دوباره به سمت پایان ترم. به همین ترتیب بسیاری از ما کسی است که کار می کند، به عنوان مثال، در Amazon.com را نمی دانم، و در عین حال بسیاری از ما احتمالا چیزهای در Amazon.com خریداری شده، و به ما آموخته اند، به فرض که این معاملات تجارت الکترونیکی امن هستند. URL احتمالا می گوید HTTPS، شاید احمقانه آیکون قفل کوچک در جایی وجود دارد، نوعی از رمزنگاری تامین امنیت اطلاعات کارت اعتباری شما وجود دارد بین شما و Amazon.com. و اما اگر رمزنگاری شامل دانستن برخی از راز و در عین حال من کسی را در آمازون را نمی دانند و من قطعا از هر نوع راز مرتب نشده با کسی در آمازون، کامپیوتر و یا مرورگر من انجام این کار چگونه است؟ به نظر می رسد از انواع دیگری از رمزنگاری هم رفته است که حل این مشکل است. اما امروز، ما تمرکز بر روی یکی از ساده که در آن شما می توانید در پیشبرد ترتیب به دانستن برخی از راز مانند +1 یا برخی از نگاشت بین و B است. و فرایند رمزنگاری به طور کلی شامل این. شما باید برخی از متن ساده، در اینجا در سمت چپ نشان داده شده، آن را اجرا کنید از طریق نوعی از الگوریتم یا روش برای رمزنگاری آن - شاید که فقط می شود B، B، C می شود - و سپس شما را تا پایان با متن رمزی. در همین حال، یک بار له شما دریافت این یادداشت مخفی، او پس از رمزگشایی آن را با به طور کلی معکوس است که الگوریتم به طوری که به عقب بر گردیم متن ساده است. تجسم فیزیکی وجود دارد. به عنوان مثال، این یک راز کوچک حلقه رسیور، و این یک حلقه به این معنا که دو صفحة در اینجا وجود دارد. در حاشیه در خارج از این چیز، حروف A تا Z وجود دارد، اگر چه آنها به منظور تصادفی هستیم، و در داخل، در واقع برخی از اعداد وجود دارد چنین که با این حلقه شما را به نوعی می تواند به نوبه خود در خارج است، اما در داخل در جهت به خط کردن اعداد با حروف. از یک فیلم به نام داستان کریسمس، شما که Ralphie کوچک بسیار مشتاق به کشف کردن آنچه پیام راز کوچک یتیم آنی بود به او بود که ابلاغ شده است، من فکر می کنم، در قالب پیام های عددی در جعبه غلات و شما را مجبور به جمع آوری تمام کارت های کمی که در جعبه غلات آمد، شما تا به حال به آنها ایمیل در، شما را مجبور به عقب بر گردیم حلقه رسیور مخفی به طوری که شما در نهایت می توانید از کشف آنچه نگاشت بین حروف و اعداد یا حروف و حروف. چگونه در یک کامپیوتر می تواند به ما در مورد اجرا یا به نمایندگی از چیزهایی مثل این؟ ما نیاز به یک راه برای بیان خود کمی بیشتر انعطاف پذیر از متغیر های ما تا کنون اجازه داده اند. ما تا به حال نوع داده int، ما کاراکتر، ما تا به حال شناور و دو برابر و چند نفر دیگر، ولی برای کسانی که قطعه مجزا از حافظه است که واقعا به ما اجازه می دهد به بیان همه چیز مانند کلمات و جملات و عبارات است. در واقع، ما به نام رشته چنین چیزهایی، اما قول می دهم که این است که واقعا فقط یک ساده سازی در کتابخانه CS50 که ما قصد بازگشت به پوست. و بنابراین شروع به انجام این کار در اینجا بگذارید. اجازه بدهید من بروم جلو و باز کردن یک فایل - تمامی این فایل ها در دسترس هستند، به طور معمول، آنلاین - اصطلاح array.c برای حل یک مشکل ربطی به رشته اما رنگ یک عکس در اینجا ما چگونه ممکن است چیزی به نام یک آرایه استفاده کنید. آرایه یک نوع داده است. این نوع متغیر از انواع چندگانه ای دارد که نوع داده کوچکتر در داخل آن پشت به پشت به پشت به پشت. بنابراین به عنوان مثال، اگر ما می خواستیم برای نوشتن یک برنامه کوچک است که به شما می دهد به طور متوسط ​​مسابقه شما برای یک دوره مثل 50 که دارای 2 آزمونها، شما به راحتی می تواند نوشتن این برنامه حتی در برخی از مواد در هفته گذشته با با استفاده از GetInt و یک زن و شوهر از متغیر: کد: int quiz1، اعضای هیات quiz2. و این بسیار سر راست است. این شاید 10، 20 خط از کد حداکثر برای اجرای یک برنامه که می پرسد کاربر برای نمرات کوئیز 2 و سپس محاسبه متوسط با اضافه کردن آنها را با هم، تقسیم بر 2، و سپس چاپ نتایج. ما احتمالا می تواند خیلی به آسانی در حال حاضر پس از چند دقیقه. اما مشکل این است که فرض کنید که 50 به حال 3 آزمونها یا 4 است. فرض کنید که شما می خواهید به استفاده از این برنامه برای یک کلاس که تا به حال در هفته آزمونها. فکر می کنم در مورد یک کلاس است که در هفته آزمونها. اگر 16 یا هفته در یک ترم وجود دارد، در حال حاضر دارای 16 متغیر: و اعضای هیات quiz1، و اعضای هیات quiz2، نوع int quiz3، اعضای هیات quiz4. به محض اینکه شما شروع به دیدن این افزونگی، کپی و چسباندن کد، این باید شروع به ساختن می خواهید یک راه بهتر وجود دارد. و خوشبختانه، زیرا از آرایه ها وجود دارد. بنابراین این کار را کنیم. اول، اجازه دهید یک چیز بسیار ساده است که ما استفاده کرده ایم تا کنون معرفی کنم، اما گاهی اوقات شما آن را در کد ها را ببینید. این همان چیزی است که به طور کلی گفته می شود ثابت است. پس از آن ثابت به این معنا که این مقدار تغییر هرگز. کنوانسیون انسان در هنگام ایجاد یک ثابت برای استفاده از تمامی حروف بزرگ به طوری که آن را واقعا خارج از غرفه در کد خود را، و از کلمه کلیدی خاص است که شما در C استفاده کنید # تعریف کنیم. بنابراین ما می گویند # تعریف، و سپس یک فاصله و سپس کلمه ای که می خواهید برای نام ثابت استفاده کنید و پس از آن مقدار ثابت است. توجه کنید این است که از نسبت دادن چیزی به یک متغیر متفاوت است. هیچ برابر است با ثبت نام در سایت وجود دارد، هیچ نقطه و ویرگول بدین شکل وجود دارد. این همان چیزی است که به طور کلی به عنوان یک دستور پیش پردازنده شناخته شده است، اما بیشتر که زمان دیگری است. در حال حاضر، این ایجاد ارزش تغییرناپذیر به نام آزمونها واقعی که ارزش عددی 2 است. بنابراین در هر جایی که باشید دیدن آزمونها، آزمون، آزمونها در طول این فایل: که فقط عدد 2 است. اگر من در اصلی در حال حاضر، بیایید ببینید که چگونه این کار. اول آن کمی مرموز به نظر می رسد، اما این همه مسائل از 1 هفته. از کاربر برای نمرات. چگونه این کار را انجام دهید؟ در خط 22 - این است که در واقع بخشی آبدار - من اعلام شناور اما فقط یک شناور نیست. من اعلام، بلکه آرایه ای از مقادیر ممیز شناور است. این متغیر به نام نمرات، به عنوان ضمنی، اما تنها قطعه از تگ های جدید این براکت است. واقعیت این است که من گفته ام کلاس های شناور و سپس براکت باز و سپس یک عدد - توجه کنید اگر این ثابت است این است که درست مثل ما این - این به این معنی: "هی، کامپیوتر، من 2 شناور را و اجازه دهید در مجموع آنها را نمرات. این است که در مقایسه با یک فرآیند بسیار خسته کننده مثل این: شناور grade1؛ grade2 شناور، و غیره. بنابراین یک آرایه این اجازه می دهد تا ما را به پیاده سازی این ایده اما بسیار کمتر messily، در چنین راهی است که ما می توانیم 1 خط از کد را به جای نوشتن، می گویند، 16 برای یک ترم 16 هفته است. من به سخت کد 2 می خواهید نمی کند چرا که اگر شما در این مورد فکر می کنم در حال حاضر منطقی، فرض کنید سال آینده CS50 تغییرات تا 3 آزمونها به جای و من تا به حال شماره 2 در اینجا، من تا به حال شماره 2 در اینجا، من تا به حال شماره 2، شماره 2 در اینجا. آن را بسیار خسته کننده و بسیار آسان برای پیچ کردن و به طور تصادفی تغییر 1 مقدار را به 3 و از دست برخی از ارزش های دیگر، از مجموع 2. بنابراین من قصد دارم به جای خلاصه این دور و استفاده از این ثابت است که، به عنوان نام آن نشان می دهد، تغییر نکرده است. و در حال حاضر مهم نیست که ما در آنها متفاوت است آزمونها در سال جاری یا آینده، من فقط باید آن را در یک مکان را تغییر دهید در اینجا در بالا. به طوری که همه ثابت شده است. در همین حال، از ویژگی های جدید و مفهومی که از یک آرایه است. پس از براکت مربع به من این شناور زیادی است و به من اجازه می دهد که در مجموع آنها را نمرات اینجا. بنابراین در حال حاضر اجازه دهید ببینیم که چه چیزی من قصد دارم به انجام. در اینجا در خط 24 است که ابتدا از یک حلقه for است. این است که واقعا فانتزی هیچ چیز. فقط با استفاده از آزمون ها به جای استفاده از یک شماره hard-coded بودن. اما هیچ فکری متفاوت وجود دارد از هفته گذشته وجود دارد. این فقط printf، بنابراین printf ("امتحان D #٪٪ D:) چرا که من فقط می خواهم برای چاپ کردن به تعداد 1 از 2 مسابقه من و پس از آن 2، از مجموع 2. پس این یک چیز صرفا زیبایی شناسانه است. اما قسمت جالب در حال حاضر در خط 27 است. به منظور پر کردن در یکی از این دو متغیرهایی با یک مقدار ممیز شناور، شما دوباره از براکت استفاده کنید. در این مورد، من با استفاده از چون این حلقه for با من معادل چه مقدار آغاز شده است، ظاهرا؟ [دانشجو] 0. >> [مالان] 0. بنابراین تکرار برای اولین بار از این حلقه، آن را به عنوان اینکه من این کار را در کد نوشت، اما در تکرار دوم از این حلقه آن است که به عنوان اینکه من این کار را در کد من نوشت. اما واقعیت این است که من با استفاده از یک متغیر است کامل، زیرا به عنوان نام نشان می دهد، آن را متفاوت از ارزش خود را در هر تکرار، بنابراین من پر کردن این آرایه یک نقطه در یک زمان. این آرایه چه شکلی است؟ دلیل من کشید مستطیل ساده و فوق العاده بر روی صفحه نمایش در اینجا قبل از اینکه به این دلیل بود. آرایه است فقط یک تکه از حافظه با تکه های دیگری از حافظه به دنبال تکه های دیگری از حافظه و غیره. بنابراین اگر آرایه با اندازه 2 در این مورد در اینجا، همه من انجام می شود با تایپ کردن در نمرات آزمون من اینجا را دوست دارم - من 100 بر روی یکی از این و پس از آن من 99 در این یکی رو - سپس این حافظه حتی ممکن است مورد استفاده قرار گیرد زیرا من فقط خواسته های کامپیوتری مجموعه ای از اندازه 2. این مربع ها هنوز هم وجود دارد، درست است؟ شما هنوز هم باید 2 گیگابایت RAM، حتی اگر شما تنها به مدت 2 شناور پرسیدن. بنابراین ایده آرایه است که کامپیوتر فقط طول می کشد یک تکه از حافظه و پس از آن apportions قطعات کوچکتر پشت به پشت به پشت به پشت. و به طوری که تمام یک آرایه است. این تکه های به هم پیوسته در داخل حافظه است که شما می توانید همه چیز قرار داده است. این اتفاق می افتد پس لطفا فقط برخی از ریاضی خسته کننده است. اگر من در پایین حرکت کنید در اینجا، این است که من پس از آن بیش از آرایه تکرار. من می آیند تا با جمع از همه ارزش ها در آرایه، و سپس با استفاده از تابع دور در اینجا در واقع مجموع تقسیم آزمونها. اما دست من موج من که در آن به عنوان مرتب سازی بر اساس حساب به اندازه کافی برای در حال حاضر. اما همه که انجام این کار برای من در نهایت محاسبه متوسط ​​است. پس آزمون اول به علاوه مسابقه دوم تقسیم بر 2 و سپس آن را چاپ را به عنوان بین المللی است. اما اجازه دهید در حال حاضر به عنوان مثال مختلف به نام string1 گذار، که تصویری مشابه اما با استفاده از رشته ها است. اجازه بدهید من به جلو بروید و ساده این کار را برای یک لحظه. ببخشید دندانه دار در حال حاضر است. توجه کنید که در خط 19 از این مثال، من یک رشته از کاربر است. اما متوجه چیزی است که من بعد در خط انجام 22 به بعد. من در واقع از من تکرار تا - و این است که یک ترفند - strlen، طول رشته است. این یک تابع است که می آید با C است که اگر شما تصویب آن یک رشته است آن را به شما می گوید که چگونه بسیاری از شخصیت های این رشته هستند. که تمام است. و این واقعیت است که آن را strlen به جای طول رشته است فقط به خاطر اینکه آن را موجز است. سی سال پیش، مردم علاقه به نوشتن چیزهایی به عنوان موجز به عنوان امکان پذیر است، بنابراین ما این کنوانسیون در اینجا نگه داشته ام. + + فقط به معنی افزایش من در هر تکرار. و در حال حاضر این توجه کنید که واقعا جالب است. در خط 24، به من می گویند، "کامپیوتر، من یک شخصیت می دهد، 8 بیت، و آن را ج. اما آنچه در این است که بر روی سمت راست گفت؟ در زبان انگلیسی، چه می کند که نشان دهنده؟ [دانشجوی] اولین شخصیت در آرایه. دقیقا. اولین کاراکتر در آرایه را به من بده. ، یا به طور کلی، شخصیت i ام در آرایه به من می دهد. و تحقق این مهم است که در حال حاضر به عنوان دانشمندان کامپیوتر، ما در واقع از 0 شمارش. شما اختیار ندارد در حال حاضر به شروع به انجام این کار است. حالا شما باید به رفتار مطابق با انتظارات کامپیوتر و شمارش از 0 زیرا [0] رفتن به اولین کاراکتر در یک رشته [1] برای رفتن به دوم، [2] رفتن به سوم، و غیره. بنابراین این برنامه، اگر من آن را کامپایل، این است که دوباره string1، بنابراین مطمئن string1، و در حال حاضر من string1 در پنجره ترمینال من اجرا شود. این انتظار برای ورودی، بنابراین من قصد دارم به داوود تایپ می کنید، وارد کنید و در حال حاضر آن را چاپ دیوید در خطوط مختلف به دلیل اطلاعیه آنچه که من انجام می دهند. من چاپ یکی از شخصیت ها در یک زمان. ما نمی خواهد به جزئیات در این مورد، اما من یک لحظه قبل این چک در اینجا حذف شده. به نظر می رسد که در صورتی که کاربر بی ادبی، خصمانه، یا فقط اشتباه گرفته است، شما در واقع می تواند برخی از طول یک رشته را به شکست منجر میشود. اگر شما کلید اشتباه بر روی صفحه کلید، شما ممکن است هیچ رشته ای در تمام بدهد، و یا اگر شما مخرب، شما ممکن است سعی کنید در ارزش یک گیگابایت از یک مقاله، متن را بچسبانید برای پر کردن این رشته، و در صورتی که کامپیوتر اجرا می شود از حافظه، معلوم می شود که ما قصد داریم به عقب بر گردیم این مقدار خاص به نام NULL است. بنابراین در حال حاضر، درست است که این مقدار خاص به نام NULL وجود دارد می دانیم است که به شما این امکان را می دهد که ما را به بررسی زمانی که ما از حافظه، در میان چیزهای دیگر. اما اگر باز هم اکنون string2، متوجه یک تفاوت در اینجا است. توجه داشته باشید که در اینجا یک تفاوت با string2. با string2، این حلقه کمی متفاوت است. اجازه دهید نقاط صفر را حذف کنید به طوری که ما می توانیم در مورد آن زمان دیگری صحبت کنید. چه در مورد حلقه for این زمان متفاوت است؟ من می توانم به بازگشت به مثال قبلی. به طوری که نسخه 2 این نسخه 1 است. 1، 2. 1، 2. تماس strlen این است که کجا؟ در بخش اول از حلقه for است. هر گونه افکار به همین دلیل من برای انجام این کار؟ آره. [دانشجو] بنابراین شما هر زمان تابع را صدا نمی زنم. [مالان] بنابراین ما تابع را صدا نمی زنم هر بار تنها. دقیقا. از حلقه for به یاد بیاورید که آنها فوق العاده ساده هنگامی که شما در نوعی از درک کنند که این شروع، شرایط، و به روز رسانی است. مشکل این است که این وضعیت در هر تکرار از حلقه اتفاق می افتد. و به این ترتیب در این مثال در اینجا، چه در مورد این واقعیت است که این شرایط و موقعیت من بد است؟ [دانشجوی] شما تماس strlen. [مالان] شما تماس strlen دوباره و دوباره و دوباره. اما هنگامی که من در دیوید تایپ شده، طول این رشته 5، و آن را نمی خواهید در هر تکرار از حلقه را تغییر دهید از آنجا که رشته هنوز هم D-a-V-I-D. بنابراین این یک اشاره در رفتن به تبدیل شدن به یک ایده به طور فزاینده مهم است شناخته شده به عنوان تصمیم گیری طراحی شده که در آن فقط نمیدهیم کامپیوتر کار غیر ضروری است. فقط به عنوان یک پیش نمایش دزدکی حرکت کردن از pset2، pset2 در نسخه استاندارد قصد دارد شما را به چالش برخی از تعدادی از رمزهای در واقع پیاده سازی، برخی از تعدادی از الگوریتم های رمز نگاری، به طوری که شما می توانید هر دو را رمزگذاری و پیام های رمزگشایی راز بسیار شبیه به یک Ralphie وجود دارد رمزگشایی شده است. در ویرایش هکر pset2، ما در حال رفتن به کمی بیشتر است. ما قصد داریم به شما یک فایل دست از یک سیستم رایانه ای واقعی که شامل یک دسته از نام های کاربری و کلمات عبور رمز شده واقعی، و چالش برای نسخه هکر خواهد بود برای شکستن این رمز عبور و کشف کردن آنچه که رمزنگاری و یا چه راز در واقع ایجاد آن رمزهای عبور مورد استفاده قرار گرفت. و ما قصد داریم برای انجام این کار با استفاده از یکی از ویژگی های جدید در اینجا C که من به شما فقط یک نسخه ی نمایشی شناخته شده به عنوان استدلال خط فرمان می دهد. به نظر می رسد، به عنوان برخی از شما ممکن است که در قسمت و یا در کتاب های درسی دیده می شود، اصلی همیشه باید به باطل در پرانتز. به نظر می رسد که اصلی نیز می تواند مانند این نوشته، با دو آرگومان، argc و argv را، که در آن argc تعداد کلمات که شما بعد از نام برنامه را در خط فرمان تایپ کنید و ی argv کلمات واقعی است. و به عنوان براکت مربع وجود دارد نشان می دهد، و argv است که ظاهرا یک آرایه است. این رفتن به یک رشته پس از یک رشته پس از یک رشته در حافظه است. بنابراین آنچه که ما در حال رفتن به قادر به انجام شروع با pset 2 است چیزی شبیه به این. اگر من را argv1، است که به عنوان مثال خواهیم دوباره در روز دوشنبه، و آن را اجرا کنید. توجه کنید که به نظر نمی رسد به انجام هر کاری هنوز. این فقط به نام خود چاپ. اما اگر من می گویم کلاس خداحافظی، توجه داشته باشید که این برنامه ظاهرا تکرار بر هر یک از کلمات که در اعلان تایپ شد. و وسیله ای که ما به دست آوردن دسترسی به کلمات که کاربر در اعلان تایپ با تغییر اصلی شروع این آخر هفته از اعضای هیات تحریریه اصلی (خالی) به اعضای هیات تحریریه اصلی (argc، argv را) و به این ترتیب خط فرمان استدلال متولد خواهد شد. و یک بار شما واقعا پیچیده در این، شما قادر خواهید بود برای نوشتن برنامه های واقعا trippy مانند این یکی در اینجا، می رود که در بالا و فراتر از آن برخی از قابلیت های ما تا کنون انجام داده ایم اما بسیار قدرتمند است. بنابراین ما این کار را با این بر روی صفحه نمایش را ترک کند، و ما شما را در روز دوشنبه را ببینید. [CS50.TV]