1 00:00:00,000 --> 00:00:03,000 [Powered by Google Translate] [نقد و بررسی] [امتحان 0] 2 00:00:03,000 --> 00:00:05,000 >> [Lexi راس، تامی MacWilliam، لوکاس فریتاس، جوزف اونگ] [دانشگاه هاروارد] 3 00:00:05,000 --> 00:00:08,000 >> [این CS50.] [CS50.TV] 4 00:00:08,000 --> 00:00:10,000 >> با سلام، به همه. 5 00:00:10,000 --> 00:00:15,000 خوش آمدید به جلسه برای بررسی امتحان 0، که در حال وقوع است چهارشنبه. 6 00:00:15,000 --> 00:00:19,000 آنچه که ما در حال رفتن به امشب، من با 3 TFS دیگر هستم، 7 00:00:19,000 --> 00:00:24,000 و با هم ما قصد داریم تا از طریق یک بررسی از آنچه که ما در این دوره انجام شده تا کنون است. 8 00:00:24,000 --> 00:00:27,000 رفتن به 100٪ جامع، اما این باید به شما یک ایده بهتر را 9 00:00:27,000 --> 00:00:31,000 از آنچه شما در حال حاضر پایین و چیزی است که شما هنوز هم نیاز به مطالعه قبل از چهارشنبه. 10 00:00:31,000 --> 00:00:34,000 و در صورت تمایل به بالا بردن دست خود را با سوالات و ما قصد داریم همراه، 11 00:00:34,000 --> 00:00:38,000 اما به خاطر داشته باشید که ما نیز باید کمی از وقت در پایان 12 00:00:38,000 --> 00:00:41,000 اگر ما از طریق چند دقیقه به فراغت به انجام پرسش به طور کلی، 13 00:00:41,000 --> 00:00:47,000 به طوری که در ذهن داشته باشیم، و ما در حال رفتن به در آغاز با هفته 0 شروع. 14 00:00:47,000 --> 00:00:50,000 >> [0 نقد و بررسی امتحان!] [بخش 0] [Lexi راس] اما قبل از ما انجام می دهیم که اجازه صحبت کردن در مورد 15 00:00:50,000 --> 00:00:53,000 تدارکات از مسابقه است. 16 00:00:53,000 --> 00:00:55,000 >> [تدارکات] [امتحان می گیرد به جای سخنرانی در روز چهارشنبه 10/10] 17 00:00:55,000 --> 00:00:57,000 >> [(http://cdn.cs50.net/2012/fall/quizzes/0/about0.pdf برای جزئیات بیشتر را مشاهده کنید)] در تاریخ چهارشنبه، اکتبر 10th است. 18 00:00:57,000 --> 00:01:00,000 >> که این چهارشنبه است، و اگر شما به این URL در اینجا، 19 00:01:00,000 --> 00:01:03,000 که آن هم در دسترس از CS50.net وجود دارد، یک لینک به آن 20 00:01:03,000 --> 00:01:06,000 شما می توانید اطلاعات در مورد که در آن به بر اساس 21 00:01:06,000 --> 00:01:10,000 نام خانوادگی خود و یا وابستگی به مدرسه و همچنین 22 00:01:10,000 --> 00:01:14,000 آن را می گوید دقیقا همان چیزی است که مسابقه را پوشش و نوع سوالات است که شما در حال رفتن به. 23 00:01:14,000 --> 00:01:19,000 به خاطر داشته باشید که شما نیز باید یک فرصتی برای این فایل نقد می نویسید: در بخش مسابقه، 24 00:01:19,000 --> 00:01:21,000 بنابراین TFS شما باید بیش از برخی از مشکلات عمل، 25 00:01:21,000 --> 00:01:29,000 و این یکی دیگر از فرصت خوبی است برای دیدن جایی که شما هنوز هم نیاز به مطالعه برای آزمون است. 26 00:01:29,000 --> 00:01:32,000 بیایید در ابتدا با بایت 'N' بیت. 27 00:01:32,000 --> 00:01:35,000 به یاد داشته باشید فقط یک بیت 0 یا 1 (یک) 28 00:01:35,000 --> 00:01:38,000 و یک بایت مجموعه ای از 8 از کسانی که بیت است. 29 00:01:38,000 --> 00:01:42,000 اجازه دهید نگاهی به این مجموعه از بیت حق در اینجا. 30 00:01:42,000 --> 00:01:44,000 ما باید قادر به کشف کردن که چگونه بسیاری از بیت وجود دارد. 31 00:01:44,000 --> 00:01:48,000 جایی که ما تعداد دفعات مشاهده فقط 8 نفر، هشت 0 یا 1 واحد. 32 00:01:48,000 --> 00:01:51,000 و از 8 بیت است، که 1 بایت وجود دارد، 33 00:01:51,000 --> 00:01:53,000 و اجازه دهید آن را تبدیل به هگزادسیمال. 34 00:01:53,000 --> 00:01:58,000 هگزادسیمال پایه 16 است، و آن را بسیار آسان برای تبدیل 35 00:01:58,000 --> 00:02:01,000 تعداد در دودویی، که همان چیزی است که شده است، به یک عدد در مبنای شانزده است. 36 00:02:01,000 --> 00:02:04,000 همه ما انجام می دهیم این است که ما در گروه 4 نگاه کنید، 37 00:02:04,000 --> 00:02:07,000 و ما آنها را تبدیل به رقم هگزادسیمال مناسب. 38 00:02:07,000 --> 00:02:11,000 ما با گروه راست بیشتر از 4 آغاز شود، بنابراین 0011. 39 00:02:11,000 --> 00:02:16,000 که رفتن به یکی 1 و 2، به طوری با هم که باعث می شود 3. 40 00:02:16,000 --> 00:02:19,000 و پس از آن اجازه دهید نگاهی به بلوک دیگر از 4. 41 00:02:19,000 --> 00:02:24,000 1101 که رفتن به 1، 4، و یک 8. 42 00:02:24,000 --> 00:02:28,000 با هم که رفتن به 13، که باعث می شود D. 43 00:02:28,000 --> 00:02:32,000 و ما باید به یاد داشته باشید که در هگزادسیمال ما فقط رفتن نیست 0 تا 9. 44 00:02:32,000 --> 00:02:36,000 ما به 0 تا F، به طوری که پس از 9، 10 مربوط به، 45 00:02:36,000 --> 00:02:40,000 11 تا B، و غیره که در آن F است 15. 46 00:02:40,000 --> 00:02:44,000 در اینجا 13 D، 47 00:02:44,000 --> 00:02:49,000 بنابراین برای تبدیل آن به دهدهی همه ما انجام می دهیم این است که ما در واقع 48 00:02:49,000 --> 00:02:52,000 درمان هر موقعیت به عنوان یک قدرت 2. 49 00:02:52,000 --> 00:02:58,000 این یک 1، 1 2، صفر 4S، صفر 8s، ی 16، و غیره، 50 00:02:58,000 --> 00:03:03,000 و آن را یک کمی سخت است که در سر خود را محاسبه است، اما اگر ما به اسلاید بعدی بروید 51 00:03:03,000 --> 00:03:05,000 ما می توانیم پاسخ به آن را ببینید. 52 00:03:05,000 --> 00:03:09,000 >> اساسا ما قصد داریم در سراسر از راست به چپ، 53 00:03:09,000 --> 00:03:14,000 و ما در حال ضرب هر رقم با قدرت مربوطه را از 2. 54 00:03:14,000 --> 00:03:19,000 و به یاد داشته باشید، برای هگزادسیمال ما نشان دهنده این اعداد را با 0x در ابتدای 55 00:03:19,000 --> 00:03:23,000 بنابراین ما آن را با یک عدد دهدهی اشتباه نیست. 56 00:03:23,000 --> 00:03:29,000 در ادامه، این جدول ASCII است، 57 00:03:29,000 --> 00:03:35,000 و آنچه ما استفاده از ASCII برای به نقشه از شخصیت مقادیر عددی. 58 00:03:35,000 --> 00:03:39,000 به یاد داشته باشید در pset رمزنگاری استفاده گسترده از جدول ASCII 59 00:03:39,000 --> 00:03:43,000 به منظور استفاده از روش های مختلف رمزنگاری، 60 00:03:43,000 --> 00:03:47,000 سزار و رمزنگاری Vigenère، برای تبدیل حروف مختلف 61 00:03:47,000 --> 00:03:52,000 در یک رشته با توجه به کلید داده شده توسط کاربر. 62 00:03:52,000 --> 00:03:56,000 اجازه دهید نگاهی به یک کمی از ریاضی ASCII. 63 00:03:56,000 --> 00:04:02,000 نگاهی به 'P' + 1، در قالب شخصیت است که می تواند Q، 64 00:04:02,000 --> 00:04:07,000 و به یاد داشته باشید که "'5 ≠ 5. 65 00:04:07,000 --> 00:04:10,000 و چگونه دقیقا ما بین این 2 فرم تبدیل کنم؟ 66 00:04:10,000 --> 00:04:13,000 در واقع خیلی سخت نیست. 67 00:04:13,000 --> 00:04:16,000 به منظور دریافت 5 '0 ما تفریق ' 68 00:04:16,000 --> 00:04:20,000 چون 5 منطقه بین '0 وجود دارد و '5. 69 00:04:20,000 --> 00:04:23,000 به منظور به راه دیگر ما فقط اضافه کردن 0، 70 00:04:23,000 --> 00:04:25,000 پس از آن مرتب سازی بر مانند حساب منظم. 71 00:04:25,000 --> 00:04:29,000 درست است که هنگامی که چیزی به نقل از پیرامون آن به یاد داشته باشید یک شخصیت 72 00:04:29,000 --> 00:04:37,000 و به این ترتیب به یک مقدار در جدول ASCII مربوط است. 73 00:04:37,000 --> 00:04:40,000 حرکت به مباحث علم کامپیوتر به طور کلی. 74 00:04:40,000 --> 00:04:43,000 ما یاد گرفتیم چه یک الگوریتم است و چگونه ما در استفاده از برنامه نویسی 75 00:04:43,000 --> 00:04:45,000 برای پیاده سازی الگوریتم های. 76 00:04:45,000 --> 00:04:48,000 برخی از نمونه هایی از الگوریتم چیزی واقعا ساده مانند 77 00:04:48,000 --> 00:04:51,000 چک کردن اینکه آیا یک عدد می باشد و یا حتی عجیب و غریب است. 78 00:04:51,000 --> 00:04:54,000 برای آن که به یاد داشته باشید ما در وزارت دفاع شماره 2 و بررسی کنید اگر نتیجه 0 است. 79 00:04:54,000 --> 00:04:57,000 اگر چنین است، آن را حتی. اگر نه، آن را عجیب و غریب. 80 00:04:57,000 --> 00:04:59,000 و این نمونه ای از یک الگوریتم واقعا پایه است. 81 00:04:59,000 --> 00:05:02,000 >> کمی بیشتر درگیر جستجوی دودویی است، 82 00:05:02,000 --> 00:05:05,000 که ما رو به بعد از آن در جلسه بررسی است. 83 00:05:05,000 --> 00:05:09,000 و برنامه نویسی مدت ما برای گرفتن یک الگوریتم استفاده شده است 84 00:05:09,000 --> 00:05:15,000 و تبدیل آن به کد کامپیوتر می توانید بخوانید. 85 00:05:15,000 --> 00:05:20,000 2 نمونه از برنامه نویسی است ابتدا، 86 00:05:20,000 --> 00:05:22,000 که چیزی است که ما در هفته 0. 87 00:05:22,000 --> 00:05:25,000 گرچه ما در واقع نه تایپ کردن کد این راه از اجرای 88 00:05:25,000 --> 00:05:29,000 این الگوریتم است، که چاپ اعداد 1-10، 89 00:05:29,000 --> 00:05:32,000 و در اینجا ما همین کار را در زبان برنامه نویسی C است. 90 00:05:32,000 --> 00:05:41,000 این عملکرد معادل آن، تنها در زبان های مختلف و یا نحو نوشته شده است. 91 00:05:41,000 --> 00:05:44,000 سپس ما در مورد عبارات بولی آموخته، 92 00:05:44,000 --> 00:05:48,000 و یک مقدار Boolean مقدار که درست یا نادرست است، 93 00:05:48,000 --> 00:05:51,000 و در اینجا اغلب عبارات بولی 94 00:05:51,000 --> 00:05:55,000 به داخل شرایط، پس اگر (x ≤ 5) 95 00:05:55,000 --> 00:06:00,000 خب، ما در حال حاضر مجموعه ای از x = 5، به طوری که وضعیت به ارزیابی درست شده است. 96 00:06:00,000 --> 00:06:03,000 و اگر درست است، هر فعال است زیر شرایط 97 00:06:03,000 --> 00:06:08,000 رفتن به توسط کامپیوتر ارزیابی شود، به طوری که رشته به چاپ 98 00:06:08,000 --> 00:06:12,000 به خروجی استاندارد و شرایط مدت 99 00:06:12,000 --> 00:06:16,000 اشاره به آنچه در داخل پرانتز عبارت if است. 100 00:06:16,000 --> 00:06:20,000 به یاد داشته باشید تمام اپراتورهای. 101 00:06:20,000 --> 00:06:26,000 به یاد داشته باشید && و | | هنگامی که ما در حال تلاش برای ترکیب 2 یا بیشتر از شرایط، 102 00:06:26,000 --> 00:06:30,000 == = برای بررسی اینکه آیا 2 چیز با هم برابر هستند. 103 00:06:30,000 --> 00:06:36,000 به یاد داشته باشید که = برای انتساب است در حالی که == عملگر بولی است. 104 00:06:36,000 --> 00:06:41,000 ≤، ≥ و پس از آن 2 نتیجه نهایی خود توضیحی هستند. 105 00:06:41,000 --> 00:06:45,000 بررسی کلی از منطق بولی در اینجا. 106 00:06:45,000 --> 00:06:48,000 و عبارات بولی نیز مهم هستند در حلقه، 107 00:06:48,000 --> 00:06:50,000 که ما رو به حال حاضر. 108 00:06:50,000 --> 00:06:56,000 ما یاد گرفتیم حدود 3 نوع حلقه ها تا کنون در CS50، برای، در حالی که، و انجام این کار در حالی که. 109 00:06:56,000 --> 00:06:59,000 و این مهم است که بدانید که در حالی که برای بسیاری از اهداف 110 00:06:59,000 --> 00:07:02,000 ما در واقع می توانید به طور کلی استفاده از هر نوع حلقه 111 00:07:02,000 --> 00:07:06,000 انواع خاصی از اهداف و الگوهای مشترک وجود دارد 112 00:07:06,000 --> 00:07:09,000 در برنامه نویسی است که به طور خاص برای یکی از این حلقه ها 113 00:07:09,000 --> 00:07:13,000 که آن را کارآمد ترین و ظریف در راه است که به آن کد 114 00:07:13,000 --> 00:07:18,000 اجازه دهید به بیش از آنچه هر یک از این حلقه ها تمایل به استفاده می شود اغلب. 115 00:07:18,000 --> 00:07:21,000 >> در حلقه ما به طور کلی در حال حاضر چند بار ما می خواهیم تکرار می دانم. 116 00:07:21,000 --> 00:07:24,000 این چیزی است که ما را در این وضعیت قرار داده است. 117 00:07:24,000 --> 00:07:28,000 ، من = 0، من <10، به عنوان مثال. 118 00:07:28,000 --> 00:07:31,000 ما در حال حاضر می دانیم که ما می خواهیم برای انجام کاری 10 بار. 119 00:07:31,000 --> 00:07:34,000 در حال حاضر، برای حلقه در حالی که، به طور کلی ما لزوما نمی 120 00:07:34,000 --> 00:07:36,000 می دانم که چگونه بسیاری از ما می خواهیم برای اجرای حلقه. 121 00:07:36,000 --> 00:07:39,000 اما ما نمی دانیم نوعی بیماری است که ما می خواهیم آن را به 122 00:07:39,000 --> 00:07:41,000 همیشه درست یا همیشه نادرست است. 123 00:07:41,000 --> 00:07:44,000 به عنوان مثال، در حالی که قرار است. 124 00:07:44,000 --> 00:07:46,000 بیایید می گویند که یک متغیر بولی است. 125 00:07:46,000 --> 00:07:48,000 در حالی که درست است که ما می خواهیم کد برای ارزیابی، 126 00:07:48,000 --> 00:07:52,000 بنابراین یک کمی بیشتر گسترش، کمی بیشتر از یک کمی برای حلقه، 127 00:07:52,000 --> 00:07:55,000 اما هر یک برای حلقه نیز می تواند به حلقه در حالی که یک تبدیل شوند. 128 00:07:55,000 --> 00:08:00,000 در نهایت، می توانم در حالی که حلقه ها، که ممکن است مهم ترین درک حق دور، 129 00:08:00,000 --> 00:08:04,000 اغلب استفاده می شود زمانی که ما می خواهیم به بررسی کد 130 00:08:04,000 --> 00:08:06,000 قبل از اولین بار این وضعیت ما را بررسی کنید. 131 00:08:06,000 --> 00:08:09,000 مورد استفاده مشترک برای انجام این کار در حالی که حلقه 132 00:08:09,000 --> 00:08:12,000 زمانی است که شما می خواهید برای دریافت ورودی کاربر است، و شما می دانید که شما می خواهید به درخواست کاربر 133 00:08:12,000 --> 00:08:15,000 برای ورودی حداقل یک بار، اما اگر این کار را به شما ورودی خوب نیست حق دور 134 00:08:15,000 --> 00:08:18,000 شما می خواهید به درخواست آنها را تا زمانی که آنها به شما ورودی. 135 00:08:18,000 --> 00:08:21,000 که رایج ترین استفاده از یک در حالی که حلقه، 136 00:08:21,000 --> 00:08:23,000 و اجازه دهید نگاهی به ساختار واقعی از این حلقه ها. 137 00:08:23,000 --> 00:08:27,000 آنها معمولا همیشه تمایل به پیروی از این الگوها است. 138 00:08:27,000 --> 00:08:30,000 >> حلقه داخل دارای 3 مولفه است: 139 00:08:30,000 --> 00:08:35,000 دهی اولیه، به طور معمول چیزی شبیه اعضای هیات من = 0 جایی که من شمارنده 140 00:08:35,000 --> 00:08:40,000 شرایط، که در آن ما می خواهیم به می گویند اجرای این حلقه تا زمانی که این وضعیت هنوز هم نگه می دارد، 141 00:08:40,000 --> 00:08:44,000 مثل من <10، و پس از آن در نهایت، به روز رسانی، که این است که چگونه ما افزایش 142 00:08:44,000 --> 00:08:47,000 متغیر شمارنده در هر نقطه در حلقه. 143 00:08:47,000 --> 00:08:50,000 یک چیز مشترک برای دیدن وجود دارد فقط من + +، 144 00:08:50,000 --> 00:08:52,000 که به معنی افزایش من از 1 در هر زمان است. 145 00:08:52,000 --> 00:08:55,000 شما همچنین می تواند چیزی مثل من + = 2، 146 00:08:55,000 --> 00:08:58,000 که به معنی اضافه 2 تا من هر بار شما را از طریق حلقه. 147 00:08:58,000 --> 00:09:03,000 و پس از آن این کار را فقط به هر کد که در واقع به عنوان بخشی از حلقه را اجرا می کند اشاره دارد. 148 00:09:03,000 --> 00:09:09,000 و در حالی که حلقه، این زمان ما در واقع مقدار دهی اولیه به خارج از حلقه، 149 00:09:09,000 --> 00:09:12,000 بنابراین به عنوان مثال، اجازه دهید می گویند که ما در حال تلاش برای انجام همان نوع از حلقه به عنوان من فقط توصیف است. 150 00:09:12,000 --> 00:09:16,000 ما می گفت من بین المللی = 0 قبل از حلقه شروع می شود. 151 00:09:16,000 --> 00:09:20,000 سپس ما می گویند در حالی که من <10 این کار را، 152 00:09:20,000 --> 00:09:22,000 بنابراین همان بلوک از کد به عنوان قبل از، 153 00:09:22,000 --> 00:09:26,000 و در این زمان بخشی از به روز رسانی از کد، به عنوان مثال، من + +، 154 00:09:26,000 --> 00:09:29,000 در واقع می رود در داخل حلقه است. 155 00:09:29,000 --> 00:09:33,000 و در نهایت، برای انجام این کار در حالی که، آن را شبیه به حلقه در حالی که، 156 00:09:33,000 --> 00:09:36,000 اما ما باید به خاطر داشته باشید که کد یک بار ارزیابی 157 00:09:36,000 --> 00:09:40,000 قبل از این وضعیت بررسی شده است، به طوری که آن را حس می کند خیلی بیشتر از 158 00:09:40,000 --> 00:09:44,000 اگر شما را در آن به ترتیب از بالا به پایین نگاه کنید. 159 00:09:44,000 --> 00:09:49,000 در یک انجام دهید، در حالی که حلقه کد را ارزیابی قبل از اینکه شما حتی در شرایط در حالی که نگاه 160 00:09:49,000 --> 00:09:55,000 در حالی که حلقه در حالی که، این چک اول است. 161 00:09:55,000 --> 00:09:59,000 بیانیهها و متغیر. 162 00:09:59,000 --> 00:10:04,000 هنگامی که ما می خواهیم برای ایجاد یک متغیر جدید که برای اولین بار می خواهید آن را مقداردهی اولیه. 163 00:10:04,000 --> 00:10:07,000 >> به عنوان مثال، نوار هوشمند نوار متغیر را مقدار دهی اولیه، 164 00:10:07,000 --> 00:10:10,000 اما آن را نشانی از آن را یک ارزش نیست، بنابراین ارزش نوار که در حال حاضر؟ 165 00:10:10,000 --> 00:10:12,000 ما نمی دانیم. 166 00:10:12,000 --> 00:10:14,000 این می تواند برخی از ارزش زباله که قبلا در حافظه ما ذخیره شده وجود دارد. 167 00:10:14,000 --> 00:10:16,000 و ما نمی خواهیم که به استفاده از متغیر 168 00:10:16,000 --> 00:10:19,000 تا زمانی که ما در واقع آن را یک ارزش، 169 00:10:19,000 --> 00:10:21,000 پس از آن ما اعلام می کنیم. 170 00:10:21,000 --> 00:10:24,000 سپس ما مقداردهی اولیه آن را به 42 زیر. 171 00:10:24,000 --> 00:10:28,000 در حال حاضر، البته، ما می دانیم که این می تواند انجام شود در یک خط، نوار و اعضای هیات = 42. 172 00:10:28,000 --> 00:10:30,000 اما فقط برای پاک کردن چند مرحله است که می رویم، 173 00:10:30,000 --> 00:10:34,000 تعریف و مقدار دهی اولیه به طور جداگانه در اینجا اتفاق می افتد. 174 00:10:34,000 --> 00:10:38,000 آن را در یک مرحله اتفاق می افتد، و بعد از یکی، اعضای هیات باز = نوار + 1، 175 00:10:38,000 --> 00:10:44,000 این بیانیه در زیر، که باز افزایش است، به طوری که در پایان این بلوک کد 176 00:10:44,000 --> 00:10:48,000 اگر ما ارزش باز به چاپ آن خواهد بود 44 177 00:10:48,000 --> 00:10:52,000 از آنجا که ما اعلام و مقداردهی اولیه آن 1> نوار، 178 00:10:52,000 --> 00:10:58,000 و سپس آن را به ما افزایش یک بار دیگر با + +. 179 00:10:58,000 --> 00:11:02,000 ما بیش از این به طور خلاصه زیبا رفت، اما این خوب است که به طور کلی 180 00:11:02,000 --> 00:11:04,000 درک درستی از موضوعات و حوادث چه هستند. 181 00:11:04,000 --> 00:11:06,000 ما عمدتا به خراش، 182 00:11:06,000 --> 00:11:09,000 بنابراین شما می توانید به موضوعات فکر می کنم به عنوان دنباله های متعدد از کد 183 00:11:09,000 --> 00:11:11,000 در حال اجرا در همان زمان. 184 00:11:11,000 --> 00:11:14,000 در واقعیت، آن را احتمالا در همان زمان در حال اجرا نیست، 185 00:11:14,000 --> 00:11:17,000 اما نوعی از انتزاعی که ما می توانیم از آن در راه است که فکر می کنم. 186 00:11:17,000 --> 00:11:20,000 >> در ابتدا، به عنوان مثال، ما تا به حال جن های متعدد است. 187 00:11:20,000 --> 00:11:22,000 این می تواند به اجرای کد های مختلف در همان زمان. 188 00:11:22,000 --> 00:11:26,000 را می توان به پیاده روی در حالی که دیگر چیزی گفته باشد 189 00:11:26,000 --> 00:11:29,000 در بخش های مختلف از صفحه نمایش است. 190 00:11:29,000 --> 00:11:34,000 حوادث یکی دیگر از راه جدا کردن منطق 191 00:11:34,000 --> 00:11:37,000 بین عناصر مختلف از کد خود را، 192 00:11:37,000 --> 00:11:40,000 و در ابتدا قادر به شبیه سازی با استفاده از پخش، 193 00:11:40,000 --> 00:11:43,000 و در واقع وقتی که من دریافت، زمانی که من می شنوم، 194 00:11:43,000 --> 00:11:47,000 اما در اصل این یک راه برای انتقال اطلاعات 195 00:11:47,000 --> 00:11:49,000 از یک اسپریت خود را به دیگری. 196 00:11:49,000 --> 00:11:52,000 برای مثال، شما ممکن است بخواهید برای انتقال بیش از بازی، 197 00:11:52,000 --> 00:11:56,000 و هنگامی که یکی دیگر از اسپریت دریافت بیش از بازی، 198 00:11:56,000 --> 00:11:58,000 آن را در یک راه خاص پاسخ می دهد. 199 00:11:58,000 --> 00:12:03,000 این مدل مهم برای برنامه نویسی به درک. 200 00:12:03,000 --> 00:12:07,000 فقط به بیش از هفته پایه 0، آنچه که ما رفته است تا کنون، 201 00:12:07,000 --> 00:12:10,000 اجازه دهید نگاهی به این برنامه ساده C است. 202 00:12:10,000 --> 00:12:14,000 متن ممکن است کمی کوچک از اینجا، اما من بیش از آن واقعا سریع است. 203 00:12:14,000 --> 00:12:20,000 ما شامل 2 فایل های هدر در بالا، cs50.h و stdio.h. 204 00:12:20,000 --> 00:12:23,000 ما پس از تعریف حد ثابت نامیده می شود می شود 100. 205 00:12:23,000 --> 00:12:26,000 ما پس از اجرای تابع اصلی ما است. 206 00:12:26,000 --> 00:12:29,000 از آنجا که ما استدلال خط فرمان استفاده کنید نه در اینجا ما نیاز به قرار دادن درجه اعتبار ساقط 207 00:12:29,000 --> 00:12:32,000 به عنوان استدلال اصلی. 208 00:12:32,000 --> 00:12:38,000 ما می بینیم که از نوع int بالا اصلی است. این نوع بازگشت، از این رو 0 در پایین بازگشت. 209 00:12:38,000 --> 00:12:41,000 و ما از CS50 کتابخانه تابع از نوع int دریافت 210 00:12:41,000 --> 00:12:45,000 به درخواست کاربر برای ورودی، و آن را ذخیره ما در این متغیر x، 211 00:12:45,000 --> 00:12:51,000 بنابراین X ما اعلام شده در بالا، و آن را مقداردهی اولیه ما با x = GetInt. 212 00:12:51,000 --> 00:12:53,000 >> سپس ما برای دیدن در صورتی که کاربر به ما ورودی خوب بررسی کنید. 213 00:12:53,000 --> 00:12:59,000 اگر LIMIT ≥ ما می خواهیم برای بازگرداندن کد خطا، از مجموع 1 و چاپ پیغام خطا. 214 00:12:59,000 --> 00:13:02,000 و در نهایت، در صورتی که کاربر به ما داده است ورودی خوب 215 00:13:02,000 --> 00:13:08,000 ما قصد داریم برای جذر گرفتن شماره و چاپ کرد که در نتیجه. 216 00:13:08,000 --> 00:13:11,000 فقط مطمئن شوید که آن همه خانه آمار 217 00:13:11,000 --> 00:13:17,000 شما می توانید برچسب ها را از بخش های مختلف از کد اینجا را ببینید. 218 00:13:17,000 --> 00:13:19,000 من ثابت ذکر شده، فایل های سرآیند. 219 00:13:19,000 --> 00:13:21,000 اوه، INT X. اطمینان حاصل کنید که به خاطر داشته باشید که یک متغیر محلی است. 220 00:13:21,000 --> 00:13:24,000 است که آن را در تضاد از یک متغیر جهانی، که ما با هم خواهیم در مورد آن صحبت 221 00:13:24,000 --> 00:13:27,000 کمی بعد در جلسه بررسی، 222 00:13:27,000 --> 00:13:30,000 و ما در حال فراخوانی تابع کتابخانه printf، 223 00:13:30,000 --> 00:13:34,000 بنابراین اگر ما تا به حال هدر فایل stdio.h شامل نمی شود 224 00:13:34,000 --> 00:13:37,000 ما قادر نخواهد بود به تماس printf است. 225 00:13:37,000 --> 00:13:42,000 و من اعتقاد دارم که فلش است که قطع کردم در اینجا با اشاره به D٪ 226 00:13:42,000 --> 00:13:45,000 است که یک رشته قالب بندی در printf است. 227 00:13:45,000 --> 00:13:52,000 این گزارش می گوید نسخه قابل چاپ کردن این متغیر به عنوان یک عدد،٪ D. 228 00:13:52,000 --> 00:13:58,000 و آن است که هفته 0. 229 00:13:58,000 --> 00:14:06,000 در حال حاضر لوکاس رفتن ادامه خواهد داد. 230 00:14:06,000 --> 00:14:08,000 سلام، بچه ها. نام من لوکاس است. 231 00:14:08,000 --> 00:14:10,000 من دانشجوی سال دوم در بهترین خانه در محوطه دانشگاه، مدر، 232 00:14:10,000 --> 00:14:14,000 و من قصد دارم به بحث کمی در مورد هفته 1 و 2.1. 233 00:14:14,000 --> 00:14:16,000 [1 هفته و 2.1!] [لوکاس فریتاس] 234 00:14:16,000 --> 00:14:19,000 همانطور که Lexi شد و گفت: هنگامی که ما شروع به ترجمه کد خود را از ابتدا به C 235 00:14:19,000 --> 00:14:23,000 یکی از چیزهایی که ما متوجه شدیم این است که شما می توانید نه تنها 236 00:14:23,000 --> 00:14:26,000 نوشتن کد خود را و آن را اجرا کنید با استفاده از یک پرچم سبز دیگر. 237 00:14:26,000 --> 00:14:30,000 در واقع، شما مجبور به استفاده از برخی از مراحل را به برنامه شما C 238 00:14:30,000 --> 00:14:33,000 تبدیل به فایل اجرایی. 239 00:14:33,000 --> 00:14:36,000 اساسا چه چیزی شما را بکنید هنگامی که شما در حال نوشتن یک برنامه است که 240 00:14:36,000 --> 00:14:40,000 نظر شما در ترجمه شما را به یک زبان است که یک کامپایلر می تواند به درک، 241 00:14:40,000 --> 00:14:44,000 بنابراین، هنگامی که شما در حال نوشتن یک برنامه در C 242 00:14:44,000 --> 00:14:47,000 آنچه که شما در حال انجام است که در واقع نوشتن چیزی است که کامپایلر شما در حال رفتن به درک، 243 00:14:47,000 --> 00:14:50,000 و سپس کامپایلر را به ترجمه آن کد 244 00:14:50,000 --> 00:14:53,000 به چیزی است که کامپیوتر شما را درک خواهد کرد. 245 00:14:53,000 --> 00:14:55,000 >> و چیزی است که کامپیوتر شما است که در واقع بسیار گنگ است. 246 00:14:55,000 --> 00:14:57,000 کامپیوتر شما فقط می توانید 0s و و 1S درک، 247 00:14:57,000 --> 00:15:01,000 پس در واقع در اولین کامپیوتر است که مردم معمولا برنامه ریزی 248 00:15:01,000 --> 00:15:04,000 با استفاده از 0s و 1S، اما نه دیگر، خدا را شکر. 249 00:15:04,000 --> 00:15:07,000 ما مجبور به حفظ توالی برای 0s و 1S 250 00:15:07,000 --> 00:15:10,000 برای برای حلقه یا یک حلقه و در حالی که به همین ترتیب است. 251 00:15:10,000 --> 00:15:13,000 به همین دلیل است که ما باید یک کامپایلر است. 252 00:15:13,000 --> 00:15:17,000 یک کامپایلر انجام می دهد آن است که اساسا ترجمه کد C 253 00:15:17,000 --> 00:15:21,000 در مورد ما، به یک زبان است که کامپیوتر شما را درک خواهد کرد، 254 00:15:21,000 --> 00:15:25,000 که در آن کد شیء، و کامپایلر است که ما با استفاده از 255 00:15:25,000 --> 00:15:30,000 نامیده می شود صدای جرنگ جرنگ، این است که در واقع نمادی برای صدای جرنگ جرنگ. 256 00:15:30,000 --> 00:15:33,000 هنگامی که شما برنامه خود را، شما باید برای انجام این کار 2 چیز است. 257 00:15:33,000 --> 00:15:37,000 اول، شما باید به کامپایل کردن برنامه های خود را، و سپس شما را در حال رفتن به اجرای برنامه خود را. 258 00:15:37,000 --> 00:15:41,000 برای کامپایل برنامه های خود را به شما مقدار زیادی از گزینه ها برای انجام این کار است. 259 00:15:41,000 --> 00:15:44,000 اول این است که انجام program.c صدای جرنگ جرنگ 260 00:15:44,000 --> 00:15:47,000 که در آن برنامه نام برنامه شما است. 261 00:15:47,000 --> 00:15:51,000 در این صورت شما می توانید به آنها گفت: "هی، تدوین برنامه مراجعه کنید." 262 00:15:51,000 --> 00:15:56,000 شما نمی گویم: "من می خواهم این نام را برای برنامه من" یا هر چیزی. 263 00:15:56,000 --> 00:15:58,000 >> گزینه دوم این است که با دادن یک نام به برنامه شما. 264 00:15:58,000 --> 00:16:02,000 شما می توانید می گویند صدای جرنگ جرنگ ای و پس از آن نام است که شما می خواهید 265 00:16:02,000 --> 00:16:06,000 فایل اجرایی به نام عنوان و سپس program.c. 266 00:16:06,000 --> 00:16:11,000 و شما همچنین می توانید برنامه را انجام دهید، و ببینید که چگونه در 2 مورد اول 267 00:16:11,000 --> 00:16:15,000 من قرار داده است. C، و در یک سوم من فقط برنامه؟ 268 00:16:15,000 --> 00:16:18,000 بله، شما در واقع نباید قرار داده است. ج زمانی که شما استفاده کنید. 269 00:16:18,000 --> 00:16:22,000 در غیر این صورت کامپایلر است که در واقع می خواهم به شما داد. 270 00:16:22,000 --> 00:16:24,000 و همچنین، من نمی دانم اگر شما بچه ها به یاد داشته باشید، 271 00:16:24,000 --> 00:16:29,000 اما بسیاری از زمان ما نیز استفاده می شود lcs50 یا LM. 272 00:16:29,000 --> 00:16:31,000 است که به نام ارتباط است. 273 00:16:31,000 --> 00:16:35,000 این فقط به کامپایلر می گوید که شما را از کسانی که کتابخانه سمت راست وجود دارد استفاده کنید. 274 00:16:35,000 --> 00:16:39,000 بنابراین اگر شما می خواهید به استفاده از cs50.h شما در واقع به نوع 275 00:16:39,000 --> 00:16:43,000 صدای جرنگ جرنگ program.c lcs50. 276 00:16:43,000 --> 00:16:45,000 اگر شما این کار را انجام ندهید، کامپایلر نمی دانم 277 00:16:45,000 --> 00:16:50,000 که شما با استفاده از این توابع در cs50.h. 278 00:16:50,000 --> 00:16:52,000 و زمانی که شما می خواهید برای اجرای برنامه های خود را به شما باید 2 گزینه. 279 00:16:52,000 --> 00:16:57,000 اگر شما program.c صدای جرنگ جرنگ شما یک نام را به برنامه شما نمی دهد. 280 00:16:57,000 --> 00:17:01,000 شما باید آن را اجرا کنید با استفاده از / a.out. 281 00:17:01,000 --> 00:17:06,000 A.out نام استاندارد است که صدای جرنگ جرنگ می دهد برنامه خود را اگر شما آن را یک نام نمی باشد. 282 00:17:06,000 --> 00:17:11,000 در غیر این صورت شما قصد انجام / برنامه اگر شما به یک نام برای برنامه شما، 283 00:17:11,000 --> 00:17:15,000 و همچنین اگر شما برنامه به نام که برنامه رفتن به 284 00:17:15,000 --> 00:17:23,000 در حال حاضر به همین نام به عنوان فایل C برنامه ریزی شده است. 285 00:17:23,000 --> 00:17:26,000 سپس ما در مورد انواع داده ها و اطلاعات صحبت کردیم. 286 00:17:26,000 --> 00:17:31,000 >> در واقع نوع داده ها همان جعبه های کوچک از آن استفاده میکنند 287 00:17:31,000 --> 00:17:35,000 برای ذخیره ارزش، به طوری که انواع داده ها در واقع درست مثل Pokémons. 288 00:17:35,000 --> 00:17:39,000 آنها در تمام اندازه ها و انواع آمده است. 289 00:17:39,000 --> 00:17:43,000 من نمی دانم در صورتی که قیاس را حس می کند. 290 00:17:43,000 --> 00:17:46,000 اندازه داده ها در واقع در معماری ماشین بستگی دارد. 291 00:17:46,000 --> 00:17:49,000 تمام اندازه داده است که من قصد دارم به نشان می دهد در اینجا 292 00:17:49,000 --> 00:17:53,000 در واقع برای یک ماشین 32 بیتی است، که در مورد دستگاه ما، 293 00:17:53,000 --> 00:17:56,000 اما اگر شما در واقع برنامه نویسی مک خود و یا در یک ویندوز نیز 294 00:17:56,000 --> 00:17:59,000 احتمالا شما در حال رفتن به یک ماشین 64 بیتی، 295 00:17:59,000 --> 00:18:03,000 به طوری که اندازه های داده است که من قصد دارم برای نشان دادن در اینجا به یاد داشته باشید 296 00:18:03,000 --> 00:18:06,000 برای ماشین های 32 بیتی هستند. 297 00:18:06,000 --> 00:18:08,000 یکی از اولین بار است که ما شاهد یک int بود، 298 00:18:08,000 --> 00:18:10,000 است که بسیار سر راست است. 299 00:18:10,000 --> 00:18:13,000 شما با استفاده از نوع int برای ذخیره یک عدد صحیح است. 300 00:18:13,000 --> 00:18:16,000 ما همچنین شاهد شخصیت، کاراکتر است. 301 00:18:16,000 --> 00:18:20,000 اگر شما می خواهید به استفاده از یک نامه و یا یک نماد کوچک شما احتمالا به استفاده از یک کاراکتر است. 302 00:18:20,000 --> 00:18:26,000 کاراکتر 1 بایت، که به معنی 8 بیت، Lexi گفت. 303 00:18:26,000 --> 00:18:31,000 در واقع ما باید یک جدول ASCII که ها 256 304 00:18:31,000 --> 00:18:34,000 ترکیب های ممکن از 0s و 1S 305 00:18:34,000 --> 00:18:37,000 و سپس وقتی که شما نوع کاراکتر آن را برای ترجمه 306 00:18:37,000 --> 00:18:44,000 شخصیت است که ورودی شما یک شماره که شما در جدول ASCII، مانند Lexi گفت. 307 00:18:44,000 --> 00:18:48,000 ما همچنین باید شناور، که ما از آن برای ذخیره اعداد اعشاری. 308 00:18:48,000 --> 00:18:53,000 اگر شما می خواهید را انتخاب کنید 3.14، برای مثال، شما در حال رفتن به استفاده از شناور 309 00:18:53,000 --> 00:18:55,000 یا دو برابر است که دارای دقت بیشتری است. 310 00:18:55,000 --> 00:18:57,000 شناور دارای 4 بایت است. 311 00:18:57,000 --> 00:19:01,000 دو دارای 8 بیت است، بنابراین تنها تفاوت در این است که با دقت است. 312 00:19:01,000 --> 00:19:04,000 ما همچنین یک زمانی است که برای اعداد صحیح استفاده می شود، 313 00:19:04,000 --> 00:19:09,000 و شما می توانید برای یک ماشین 32 بیتی int و طولانی به همان اندازه، 314 00:19:09,000 --> 00:19:13,000 پس از آن را واقعا نمی کند احساس به استفاده از بلند در ماشین های 32 بیتی است. 315 00:19:13,000 --> 00:19:17,000 >> اما اگر شما با استفاده از مک و دستگاه 64 بیتی، در واقع تا به اندازه 8 316 00:19:17,000 --> 00:19:19,000 بنابراین آن را واقعا در معماری بستگی دارد. 317 00:19:19,000 --> 00:19:22,000 برای ماشین های 32 بیتی معنی ندارد برای استفاده طولانی واقعا. 318 00:19:22,000 --> 00:19:25,000 و طولانی مدت، از سوی دیگر، دارای 8 بایت، 319 00:19:25,000 --> 00:19:30,000 پس از آن است که بسیار خوب اگر شما می خواهید به یک عدد صحیح دیگر است. 320 00:19:30,000 --> 00:19:34,000 و در نهایت، ما باید رشته، است که در واقع یک کاراکتر * 321 00:19:34,000 --> 00:19:37,000 که یک اشاره گر به کاراکتر است. 322 00:19:37,000 --> 00:19:40,000 بسیار آسان به این فکر می کنم که به اندازه رشته است برای رفتن به مثل 323 00:19:40,000 --> 00:19:42,000 تعدادی از شخصیت های که شما وجود دارد، 324 00:19:42,000 --> 00:19:45,000 اما در واقع * کاراکتر خود 325 00:19:45,000 --> 00:19:49,000 به اندازه یک اشاره گر به کاراکتر است، که 4 بایت است. 326 00:19:49,000 --> 00:19:52,000 اندازه * کاراکتر 4 بایت است. 327 00:19:52,000 --> 00:19:56,000 مهم نیست که اگر شما یک کلمه کوچک و یا یک نامه یا هر چیز. 328 00:19:56,000 --> 00:19:58,000 رفتن به 4 بایت است. 329 00:19:58,000 --> 00:20:01,000 ما هم کمی در مورد ریخته گری آموخته، 330 00:20:01,000 --> 00:20:04,000 به طوری که شما می توانید ببینید، اگر شما، به عنوان مثال، برنامه ای است که می گوید: 331 00:20:04,000 --> 00:20:08,000 نوع int x = 3 و سپس printf ("٪ D"، X / 2) 332 00:20:08,000 --> 00:20:12,000 شما بچه ها می دانم آنچه در آن می گذرد به روی صفحه نمایش چاپ 333 00:20:12,000 --> 00:20:14,000 >> کسی؟ >> [دانش آموزان] 2. 334 00:20:14,000 --> 00:20:16,000 1. >> صفحه 1، آره. 335 00:20:16,000 --> 00:20:20,000 هنگامی که شما باید انجام دهید 3/2 آن را رفتن به گرفتن 1.5، 336 00:20:20,000 --> 00:20:24,000 اما از آنجایی که ما در حال استفاده از یک عدد صحیح آن را به چشم پوشی از بخشی دهدهی، 337 00:20:24,000 --> 00:20:26,000 و شما در حال رفتن به (1). 338 00:20:26,000 --> 00:20:29,000 اگر شما نمی خواهید که اتفاق می افتد چیزی است که شما می توانید انجام دهید، به عنوان مثال، 339 00:20:29,000 --> 00:20:33,000 اعلام شناور Y = X. 340 00:20:33,000 --> 00:20:40,000 سپس X استفاده می شود که به 3 در حال حاضر برای رفتن به 3.000 در Y است. 341 00:20:40,000 --> 00:20:44,000 و پس از آن شما می توانید y / 2 چاپ. 342 00:20:44,000 --> 00:20:50,000 در واقع، من باید به 2 داشته باشد. بیش از وجود دارد. 343 00:20:50,000 --> 00:20:55,000 رفتن به 3.00/2.00 344 00:20:55,000 --> 00:20:58,000 و شما در حال رفتن به 1.5. 345 00:20:58,000 --> 00:21:06,000 و ما باید این F 0.2 فقط برای 2 واحد اعشار در قسمت اعشار بپرسید. 346 00:21:06,000 --> 00:21:12,000 اگر شما 0.3 F برای رفتن به واقع 1.500. 347 00:21:12,000 --> 00:21:16,000 اگر آن را 2 رفتن به 1.50. 348 00:21:16,000 --> 00:21:18,000 ما همچنین باید این مورد در اینجا. 349 00:21:18,000 --> 00:21:22,000 اگر شما شناور X = 3.14 و سپس شما printf X 350 00:21:22,000 --> 00:21:24,000 شما در حال رفتن به 3.14. 351 00:21:24,000 --> 00:21:29,000 و اگر شما = X هوشمند X، 352 00:21:29,000 --> 00:21:34,000 که به معنی درمان X را از نوع int و شما نسخه قابل چاپ X در حال حاضر 353 00:21:34,000 --> 00:21:36,000 شما در حال رفتن به 3.00. 354 00:21:36,000 --> 00:21:38,000 آیا این را حس؟ 355 00:21:38,000 --> 00:21:41,000 از آنجا که شما برای اولین بار درمان X را به عنوان یک عدد صحیح است، بنابراین شما در حال نادیده گرفتن اعشار، 356 00:21:41,000 --> 00:21:45,000 و پس از آن شما چاپ X است. 357 00:21:45,000 --> 00:21:47,000 و در نهایت، شما همچنین می توانید این کار را انجام دهند، 358 00:21:47,000 --> 00:21:52,000 نوع int x = 65، و پس از آن کاراکتر C = X شما اعلام، 359 00:21:52,000 --> 00:21:56,000 و پس از آن اگر شما نسخه قابل چاپ C شما در واقع رفتن به 360 00:21:56,000 --> 00:21:59,000 A، بنابراین اساسا آنچه که شما در حال انجام 361 00:21:59,000 --> 00:22:02,000 ترجمه صحیح به شخصیت، 362 00:22:02,000 --> 00:22:05,000 درست مانند جدول ASCII هم اینکار را در مورد شما نمی کنند. 363 00:22:05,000 --> 00:22:08,000 ما همچنین در مورد اپراتور ریاضی صحبت. 364 00:22:08,000 --> 00:22:14,000 بسیاری از آنها بسیار سر راست است، بنابراین +، -، *، /، 365 00:22:14,000 --> 00:22:20,000 و همچنین ما در مورد وزارت دفاع، که باقی مانده است از یک بخش از 2 عدد سخن گفته است. 366 00:22:20,000 --> 00:22:23,000 اگر شما از 10٪ 3، برای مثال، 367 00:22:23,000 --> 00:22:27,000 به این معنی تقسیم 10 بر 3، و آنچه باقی مانده است؟ 368 00:22:27,000 --> 00:22:30,000 رفتن به (1)، پس از آن در واقع بسیار مفید برای بسیاری از برنامه ها است. 369 00:22:30,000 --> 00:22:38,000 برای Vigenère و سزار من کاملا اطمینان حاصل کنید که همه از شما بچه ها استفاده می شود وزارت دفاع است. 370 00:22:38,000 --> 00:22:43,000 درباره اپراتورهای ریاضی، بسیار مراقب باشید در هنگام ترکیب * و /. 371 00:22:43,000 --> 00:22:48,000 >> به عنوان مثال، اگر شما (3/2) * 2 آنچه که شما قصد دارید برای به دست آوردن؟ 372 00:22:48,000 --> 00:22:50,000 [دانش آموزان] 2. 373 00:22:50,000 --> 00:22:54,000 آره، 2، چون 3/2 به 1.5، 374 00:22:54,000 --> 00:22:57,000 اما از آنجایی که شما در حال انجام عملیات بین 2 اعداد صحیح 375 00:22:57,000 --> 00:22:59,000 شما در واقع فقط رفتن به در نظر گرفتن (1) 376 00:22:59,000 --> 00:23:03,000 و پس از آن 1 * 2 به 2، بسیار، بسیار مراقب باشید 377 00:23:03,000 --> 00:23:07,000 هنگام انجام محاسبات با اعداد صحیح به دلیل 378 00:23:07,000 --> 00:23:12,000 شما ممکن است که 2 = 3، در آن صورت است. 379 00:23:12,000 --> 00:23:14,000 و نیز بسیار دقیق در مورد اولویت باشد. 380 00:23:14,000 --> 00:23:21,000 شما معمولا باید از پرانتز تا مطمئن شوید که شما می دانید آنچه شما انجام می دهند استفاده کنید. 381 00:23:21,000 --> 00:23:27,000 برخی از کلید های میانبر مفید است، البته، + + یا من + = 1 است 382 00:23:27,000 --> 00:23:30,000 و یا با استفاده از + =. 383 00:23:30,000 --> 00:23:34,000 این همان چیزی انجام من = + 1 است. 384 00:23:34,000 --> 00:23:39,000 شما همچنین می توانید کنم - یا من - = 1 385 00:23:39,000 --> 00:23:42,000 که همان من = -1، 386 00:23:42,000 --> 00:23:46,000 چیزی است که شما بچه ها استفاده زیادی در حلقه، حداقل. 387 00:23:46,000 --> 00:23:52,000 همچنین، برای *، اگر شما می * = و اگر شما به عنوان مثال، استفاده از، 388 00:23:52,000 --> 00:23:57,000 I * = 2 همان گفتن = I * 2، 389 00:23:57,000 --> 00:23:59,000 و همان چیزی که برای تقسیم. 390 00:23:59,000 --> 00:24:08,000 اگر شما از من / = 2 همان چیزی که به عنوان من = 2 /. 391 00:24:08,000 --> 00:24:10,000 >> در حال حاضر در مورد توابع. 392 00:24:10,000 --> 00:24:13,000 شما بچه ها متوجه شدند که توابع یک استراتژی بسیار خوبی برای صرفه جویی در کد 393 00:24:13,000 --> 00:24:16,000 در حالی که شما در حال برنامه ریزی است، بنابراین اگر شما می خواهید برای انجام کار مشابه 394 00:24:16,000 --> 00:24:20,000 در کد دوباره و دوباره، احتمالا شما می خواهید به استفاده از یک تابع 395 00:24:20,000 --> 00:24:25,000 بنابراین شما لازم نیست که برای کپی و چسباندن کد بارها و بارها. 396 00:24:25,000 --> 00:24:28,000 در واقع، اصلی یک تابع است، و هنگامی که من به شما نشان می دهد قالب یک تابع 397 00:24:28,000 --> 00:24:32,000 شما در حال رفتن به دیدن که خیلی واضح است. 398 00:24:32,000 --> 00:24:35,000 ما همچنین از برخی از کتابخانه ها استفاده کنید، 399 00:24:35,000 --> 00:24:39,000 به عنوان مثال، printf، GetIn، که از کتابخانه CS50، 400 00:24:39,000 --> 00:24:43,000 و دیگر توابع مثل toupper. 401 00:24:43,000 --> 00:24:46,000 همه از آن دسته از توابع در واقع در کتابخانه های دیگر اجرا شده است، 402 00:24:46,000 --> 00:24:49,000 و هنگامی که شما آن فایل افسار را در ابتدای برنامه های خود را قرار داده است 403 00:24:49,000 --> 00:24:53,000 شما می گویید می تواند به شما لطفا به کد برای آن دسته از توابع را به من بدهید 404 00:24:53,000 --> 00:24:57,000 بنابراین من لازم نیست که آنها را پیاده سازی توسط خودم؟ 405 00:24:57,000 --> 00:25:00,000 و شما همچنین می توانید وظایف خود را، نوشتن بنابراین، هنگامی که شما شروع به برنامه نویسی 406 00:25:00,000 --> 00:25:04,000 شما متوجه است که کتابخانه ها تمام توابع است که شما نیاز ندارد. 407 00:25:04,000 --> 00:25:10,000 برای آخرین pset، به عنوان مثال، ما نوشت: قرعه کشی، تقلا، و مراجعه، 408 00:25:10,000 --> 00:25:13,000 و آن را بسیار، بسیار مهم است که قادر به نوشتن توابع 409 00:25:13,000 --> 00:25:17,000 زیرا آنها مفید هستند، و ما از همه آنها را هم در برنامه ریزی، 410 00:25:17,000 --> 00:25:19,000 و آن را موجب صرفه جویی در تعداد زیادی از کد است. 411 00:25:19,000 --> 00:25:21,000 قالب یک تابع است. 412 00:25:21,000 --> 00:25:24,000 ما باید نوع بازگشت در ابتدا. نوع بازگشتی به چه صورت است؟ 413 00:25:24,000 --> 00:25:27,000 این فقط زمانی که عملکرد خود را در حال رفتن به بازگشت. 414 00:25:27,000 --> 00:25:29,000 اگر شما از یک تابع، به عنوان مثال، فاکتوریل، 415 00:25:29,000 --> 00:25:31,000 است که رفتن به محاسبه فاکتوریل یک عدد صحیح، 416 00:25:31,000 --> 00:25:34,000 احتمالا آن را یک عدد صحیح به بازگشت. 417 00:25:34,000 --> 00:25:37,000 سپس نوع بازگشت است به نوع int است. 418 00:25:37,000 --> 00:25:41,000 Printf در واقع یک نوع بازگشت از درجه اعتبار ساقط 419 00:25:41,000 --> 00:25:43,000 چرا که شما هر چیزی بازگشت نیست. 420 00:25:43,000 --> 00:25:45,000 شما فقط چاپ همه چیز را به صفحه نمایش 421 00:25:45,000 --> 00:25:48,000 و ترک تابع پس از آن. 422 00:25:48,000 --> 00:25:51,000 سپس شما می نام تابع است که شما می توانید انتخاب کنید. 423 00:25:51,000 --> 00:25:55,000 شما باید کمی منطقی است، مانند یک نام مانند XYZ را انتخاب کنید 424 00:25:55,000 --> 00:25:58,000 یا مانند x2f. 425 00:25:58,000 --> 00:26:02,000 سعی کنید یک نام است که حس می کند به را تشکیل می دهند. 426 00:26:02,000 --> 00:26:04,000 >> برای مثال، اگر آن را فاکتوریل، فاکتوریل می گویند. 427 00:26:04,000 --> 00:26:08,000 اگر یک تابع است که چیزی را به منظور جلب، نام آن را رسم. 428 00:26:08,000 --> 00:26:11,000 و پس از آن ما باید پارامترهای، که همچنین به نام استدلال، 429 00:26:11,000 --> 00:26:14,000 که مانند منابع است که عملکرد شما نیاز به 430 00:26:14,000 --> 00:26:17,000 از کد خود را به انجام وظیفه است. 431 00:26:17,000 --> 00:26:20,000 اگر شما می خواهید برای محاسبه فاکتوریل یک عدد 432 00:26:20,000 --> 00:26:23,000 احتمالا شما نیاز به یک عدد را محاسبه فاکتوریل. 433 00:26:23,000 --> 00:26:27,000 یکی از استدلالهایی که شما در حال رفتن به خود شماره است. 434 00:26:27,000 --> 00:26:31,000 و سپس آن را برای انجام کاری و بازگشت به ارزش در پایان 435 00:26:31,000 --> 00:26:35,000 مگر اینکه آن را به یک تابع از درجه اعتبار ساقط است. 436 00:26:35,000 --> 00:26:37,000 بیایید ببینید یک مثال. 437 00:26:37,000 --> 00:26:40,000 اگر من می خواهم برای نوشتن یک تابع است که خلاصه تمام اعداد در یک آرایه از اعداد صحیح، 438 00:26:40,000 --> 00:26:43,000 اول از همه، نوع بازگشتی است رفتن به اعضای هیات تحریریه 439 00:26:43,000 --> 00:26:46,000 چرا که من یک آرایه از اعداد صحیح است. 440 00:26:46,000 --> 00:26:51,000 و سپس من قصد دارم به نام تابع مانند sumArray، 441 00:26:51,000 --> 00:26:54,000 و سپس آن را به آرایه خود، به nums نوع int، 442 00:26:54,000 --> 00:26:58,000 و پس از آن طول آرایه، بنابراین من می دانم که چگونه بسیاری از اعداد است که من به طور خلاصه. 443 00:26:58,000 --> 00:27:02,000 پس من باید به مقداردهی اولیه یک متغیر به نام خلاصه، به عنوان مثال، تا 0، 444 00:27:02,000 --> 00:27:08,000 و هر بار که می بینم یک عنصر در آرایه من باید آن را به طور خلاصه اضافه کنید، بنابراین من یک حلقه for انجام داد. 445 00:27:08,000 --> 00:27:15,000 درست مثل Lexi گفت: شما اعضای هیات من = 0، من <طول و من + +. 446 00:27:15,000 --> 00:27:20,000 و برای هر عنصر در آرایه مجموع + = nums های [i]، 447 00:27:20,000 --> 00:27:24,000 و پس از آن به من بازگشت مجموع، پس از آن بسیار ساده است، و آن را موجب صرفه جویی در تعداد زیادی از کد 448 00:27:24,000 --> 00:27:28,000 اگر شما با استفاده از این تابع مقدار زیادی از بار است. 449 00:27:28,000 --> 00:27:32,000 سپس نگاهی به شرایط ما در زمان. 450 00:27:32,000 --> 00:27:38,000 ما اگر، دیگری داشته باشد، و اگر دیگری است. 451 00:27:38,000 --> 00:27:42,000 بیایید ببینید که چه تفاوت بین این است. 452 00:27:42,000 --> 00:27:45,000 نگاهی به در این 2 کد. چه تفاوتی بین آنها وجود دارد؟ 453 00:27:45,000 --> 00:27:49,000 یکی از اولین و در واقع کد می خواهم به شما بگویم 454 00:27:49,000 --> 00:27:51,000 0 - اگر یک عدد +، است. 455 00:27:51,000 --> 00:27:55,000 یکی از اولین بار می گوید اگر آن> 0 سپس آن را مثبت. 456 00:27:55,000 --> 00:28:00,000 اگر آن را = به 0 و سپس آن را 0، و اگر آن را <0 سپس آن را منفی است. 457 00:28:00,000 --> 00:28:04,000 >> و یکی دیگر در حال انجام است اگر، اگر دیگری، دیگری است. 458 00:28:04,000 --> 00:28:07,000 تفاوت بین این دو این است که این است که در واقع به رفتن 459 00:28:07,000 --> 00:28:13,000 بررسی کنید که آیا> 0 <0 OR = 0 سه بار، 460 00:28:13,000 --> 00:28:17,000 بنابراین اگر شما شماره 2، به عنوان مثال، آن را با رفتن به اینجا می آیند و می گویند 461 00:28:17,000 --> 00:28:21,000 اگر (x> 0) است، و آن را از رفتن به می گویند بله، بنابراین من نسخه قابل چاپ مثبت است. 462 00:28:21,000 --> 00:28:25,000 اما حتی اگر من می دانم که آن> 0 است و آن را نمی تواند 0 یا <0 463 00:28:25,000 --> 00:28:29,000 من هنوز هم انجام دهید این است آن را 0 است، آن را <0، 464 00:28:29,000 --> 00:28:33,000 پس من در واقع در داخل IFS که من لازم نیست به 465 00:28:33,000 --> 00:28:38,000 چرا که من در حال حاضر می دانیم که آن را نمی خواهید برای ارضای هر یک از این شرایط است. 466 00:28:38,000 --> 00:28:41,000 من می توانم اگر، اگر دیگری، دیگری بیانیه. 467 00:28:41,000 --> 00:28:45,000 اساسا می گوید اگر x = 0 من نسخه قابل چاپ مثبت می باشد. 468 00:28:45,000 --> 00:28:48,000 اگر این طور نیست، من قصد دارم به آزمایش این است. 469 00:28:48,000 --> 00:28:51,000 اگر آن را 2 من قصد دارم برای انجام این کار است. 470 00:28:51,000 --> 00:28:54,000 در واقع اگر من تا به حال x = 2 شما می گویند 471 00:28:54,000 --> 00:28:57,000 اگر (x> 0)، بله، پس این را چاپ کنید. 472 00:28:57,000 --> 00:29:00,000 حالا که من می دانم که آن را> 0 است و از آن راضی اولین اگر 473 00:29:00,000 --> 00:29:02,000 من حتی نمی رفتن برای اجرای این کد می باشد. 474 00:29:02,000 --> 00:29:09,000 کد سریعتر اجرا می شود، در واقع، 3 بار سریعتر اگر شما استفاده از این. 475 00:29:09,000 --> 00:29:11,000 ما همچنین یاد گرفته و یا. 476 00:29:11,000 --> 00:29:15,000 من قصد دارم از این به دلیل Lexi در حال حاضر در مورد آنها صحبت کردیم. 477 00:29:15,000 --> 00:29:17,000 این فقط && و | عملگر |. 478 00:29:17,000 --> 00:29:21,000 >> تنها چیزی که من می گویم این است که مراقب باشید که شما باید 3 شرایط. 479 00:29:21,000 --> 00:29:24,000 از پرانتز استفاده کنید، زیرا این بسیار گیج کننده است زمانی که شما یک شرط 480 00:29:24,000 --> 00:29:27,000 و یکی دیگر و یا یکی دیگر. 481 00:29:27,000 --> 00:29:30,000 استفاده از پرانتز فقط تا مطمئن شوید که شرایط خود را حس 482 00:29:30,000 --> 00:29:34,000 چرا که در آن صورت، به عنوان مثال، شما می توانید تصور کنید که 483 00:29:34,000 --> 00:29:38,000 این می تواند اولین شرط و یک یا 484 00:29:38,000 --> 00:29:41,000 یا شرایط 2 ترکیب در و 485 00:29:41,000 --> 00:29:45,000 و یا سوم، به طوری که فقط مراقب باشید. 486 00:29:45,000 --> 00:29:48,000 و در نهایت، ما در مورد سوئیچ ها صحبت کردیم. 487 00:29:48,000 --> 00:29:53,000 روشن است بسیار مفید هنگامی که شما یک متغیر است. 488 00:29:53,000 --> 00:29:55,000 اجازه دهید بگویم که شما باید یک متغیر مانند N 489 00:29:55,000 --> 00:29:59,000 است که می تواند 0، 1، یا 2، و برای هر یک از این موارد 490 00:29:59,000 --> 00:30:01,000 شما قصد انجام یک کار است. 491 00:30:01,000 --> 00:30:04,000 شما می توانید می گویند تغییر متغیر، و آن را نشان می دهد که 492 00:30:04,000 --> 00:30:08,000 سپس مقدار است مانند VALUE1 من قصد دارم برای انجام این کار، 493 00:30:08,000 --> 00:30:12,000 و پس از آن من شکسته، که به معنی من قصد ندارم در هر یک از موارد دیگر نگاه کنید 494 00:30:12,000 --> 00:30:15,000 از آنجا که ما در حال حاضر راضی است که مورد 495 00:30:15,000 --> 00:30:20,000 و سپس VALUE2 و غیره، و من هم می توانید یک سوئیچ به طور پیش فرض داشته باشد. 496 00:30:20,000 --> 00:30:24,000 این بدان معناست که اگر آن را به هر یک از موارد است که من تا به حال راضی نیست 497 00:30:24,000 --> 00:30:29,000 که من قصد دارم برای انجام کاری دیگری، اما این اختیاری است. 498 00:30:29,000 --> 00:30:36,000 این همه برای من است. در حال حاضر داشته باشند تامی اجازه. 499 00:30:36,000 --> 00:30:41,000 تمامی حقوق، این است که رفتن به هفته 3-پذیری است. 500 00:30:41,000 --> 00:30:45,000 اینها برخی از مباحث پوشش خواهیم، ​​رمزنگاری، دامنه ها، آرایه ها، و غیره. 501 00:30:45,000 --> 00:30:49,000 فقط یک کلمه سریع در رمزنگاری. ما قصد داریم این خانه به چکش. 502 00:30:49,000 --> 00:30:52,000 >> ما این کار را در pset 2 انجام داد، اما برای مسابقه، مطمئن شوید که شما می دانید تفاوت 503 00:30:52,000 --> 00:30:54,000 بین رمزنگاری سزار و رمزنگاری Vigenère، 504 00:30:54,000 --> 00:30:57,000 چگونه هر دو از این کار رمز و آنچه در آن مانند به رمز در آوردن 505 00:30:57,000 --> 00:30:59,000 و متن رمزگشایی با استفاده از آن 2 رمزهای. 506 00:30:59,000 --> 00:31:03,000 به یاد داشته باشید، رمزنگاری سزار به سادگی می چرخد ​​هر کاراکتر را با همان مقدار، 507 00:31:03,000 --> 00:31:06,000 مطمئن شوید شما وزارت دفاع با تعداد حروف در الفبا. 508 00:31:06,000 --> 00:31:09,000 و رمزنگاری Vigenère، از سوی دیگر، می چرخد ​​هر یک از شخصیت 509 00:31:09,000 --> 00:31:12,000 با یک مقدار متفاوت است، بنابراین به جای گفتن 510 00:31:12,000 --> 00:31:15,000 هر چرخش شخصیت توسط 3 Vigenère هر یک از شخصیت چرخش 511 00:31:15,000 --> 00:31:17,000 بسته به مقدار متفاوت در برخی از کلمه کلیدی 512 00:31:17,000 --> 00:31:20,000 که در آن هر حرف در کلمه نشان دهنده مقداری متفاوت 513 00:31:20,000 --> 00:31:26,000 به چرخش متن روشن. 514 00:31:26,000 --> 00:31:28,000 اجازه دهید بحث در مورد دامنه متغیر است. 515 00:31:28,000 --> 00:31:30,000 2 انواع مختلف متغیر وجود دارد. 516 00:31:30,000 --> 00:31:33,000 ما باید متغیرهای محلی، و این در حال رفتن به تعریف می شود 517 00:31:33,000 --> 00:31:36,000 در خارج از اصلی یا خارج از هر تابع یا بلوک، 518 00:31:36,000 --> 00:31:39,000 و این در هر نقطه در برنامه شما در دسترس خواهد بود. 519 00:31:39,000 --> 00:31:41,000 اگر شما یک تابع و در آن تابع است در حالی که یک حلقه 520 00:31:41,000 --> 00:31:44,000 متغیر بزرگ جهانی در همه جا در دسترس است. 521 00:31:44,000 --> 00:31:48,000 یک متغیر محلی، از سوی دیگر، scoped است به جایی که در آن تعریف شده است. 522 00:31:48,000 --> 00:31:53,000 >> اگر شما از یک تابع در اینجا، به عنوان مثال، ما باید تابع این گرم، 523 00:31:53,000 --> 00:31:56,000 و در داخل از G یک متغیر به نام Y وجود دارد، 524 00:31:56,000 --> 00:31:58,000 و این بدان معناست که این یک متغیر محلی است. 525 00:31:58,000 --> 00:32:00,000 حتی اگر این متغیر به نام Y 526 00:32:00,000 --> 00:32:03,000 و این متغیر Y این 2 تابع به نام 527 00:32:03,000 --> 00:32:06,000 هیچ ایده چه متغیرهای محلی به یکدیگر هستند. 528 00:32:06,000 --> 00:32:10,000 از سوی دیگر، در اینجا ما می گویند نوع int x = 5، 529 00:32:10,000 --> 00:32:12,000 و این است که در خارج از محدوده ی هر تابع است. 530 00:32:12,000 --> 00:32:16,000 آن را در خارج از محدوده ی اصلی است، بنابراین این یک متغیر جهانی است. 531 00:32:16,000 --> 00:32:20,000 این بدان معنی است که در داخل از این 2 تابع زمانی که من می گویم X - و یا X + + 532 00:32:20,000 --> 00:32:26,000 من دسترسی به X همان است که در آن این Y و Y متغیرهای مختلف است. 533 00:32:26,000 --> 00:32:30,000 این تفاوت بین یک متغیر جهانی و یک متغیر محلی است. 534 00:32:30,000 --> 00:32:33,000 تا آنجا که به طراحی مربوط می شود، گاهی اوقات آن را احتمالا یک ایده بهتر 535 00:32:33,000 --> 00:32:37,000 برای حفظ متغیرهای محلی در هر زمان که شما احتمالا می تواند 536 00:32:37,000 --> 00:32:39,000 از داشتن یک دسته از متغیر های جهانی می تواند واقعا گیج کننده است. 537 00:32:39,000 --> 00:32:42,000 اگر شما یک دسته از توابع اصلاح همان چیزی که 538 00:32:42,000 --> 00:32:45,000 شما ممکن است فراموش کنیم چه می شود اگر این تابع به طور تصادفی تغییر این جهانی، 539 00:32:45,000 --> 00:32:47,000 و این تابع دیگر در مورد آن نمی دانم، 540 00:32:47,000 --> 00:32:50,000 و این کار خیلی گیج کننده است که شما دریافت کد. 541 00:32:50,000 --> 00:32:53,000 نگه داشتن متغیرهای محلی در هر زمان که شما احتمالا می تواند 542 00:32:53,000 --> 00:32:56,000 فقط خوب طراحی شده است. 543 00:32:56,000 --> 00:33:00,000 به یاد داشته باشید، آرایه ها، به سادگی لیستی از عناصر از نوع مشابه است. 544 00:33:00,000 --> 00:33:04,000 داخل CI می توانید یک لیست مانند 1، 2.0، خوش آمدید. 545 00:33:04,000 --> 00:33:06,000 ما فقط می تواند به انجام این کار نیست. 546 00:33:06,000 --> 00:33:11,000 >> هنگامی که ما اعلام می کنیم آرایه در C تمام عناصر باید از همان نوع باشد. 547 00:33:11,000 --> 00:33:14,000 من در اینجا مجموعه ای از 3 عدد صحیح است. 548 00:33:14,000 --> 00:33:18,000 در اینجا من باید طول آرایه است، اما اگر من فقط آن را اعلام کرد در این نحو 549 00:33:18,000 --> 00:33:21,000 که در آن مشخص آنچه را که همه از عناصر من از لحاظ فنی باید این 3. 550 00:33:21,000 --> 00:33:25,000 کامپایلر به اندازه کافی هوشمند است به شکل آرایه باید چقدر بزرگ باشد. 551 00:33:25,000 --> 00:33:28,000 حالا زمانی که من می خواهم برای به دست آوردن و یا مجموعه ای از ارزش یک آرایه 552 00:33:28,000 --> 00:33:30,000 این نحو به انجام این کار است. 553 00:33:30,000 --> 00:33:33,000 این در واقع دومین عنصر از آرایه به دلیل، به یاد داشته باشید تغییر دهید، 554 00:33:33,000 --> 00:33:36,000 شماره از 0 شروع می شود، نه در 1. 555 00:33:36,000 --> 00:33:42,000 اگر من می خواهم به خواندن که ارزش من، می تواند چیزی شبیه به نوع int x = آرایه [1]. 556 00:33:42,000 --> 00:33:44,000 یا اگر من می خواهم به مجموعه ای است که ارزش، مثل من در اینجا انجام، 557 00:33:44,000 --> 00:33:47,000 می توانم بگویم که آرایه [1] = 4. 558 00:33:47,000 --> 00:33:50,000 آن زمان دسترسی به عناصر با استفاده از شاخص 559 00:33:50,000 --> 00:33:52,000 و یا موقعیت خود را و یا در جایی که آنها در آرایه، 560 00:33:52,000 --> 00:33:57,000 و این فهرست از 0 شروع می شود. 561 00:33:57,000 --> 00:34:00,000 ما همچنین می توانیم آرایه ای از آرایه ها داشته باشد، 562 00:34:00,000 --> 00:34:03,000 و این است که نام آرایه چند بعدی است. 563 00:34:03,000 --> 00:34:05,000 هنگامی که ما یک آرایه چند بعدی 564 00:34:05,000 --> 00:34:07,000 این بدان معناست که ما می تواند چیزی شبیه به سطر و ستون داشته باشد، 565 00:34:07,000 --> 00:34:11,000 و این تنها یکی از راه های تجسم این یا فکر کردن درباره آن است. 566 00:34:11,000 --> 00:34:14,000 هنگامی که من یک آرایه چند بعدی این بدان معناست که من قصد دارم برای شروع نیاز 567 00:34:14,000 --> 00:34:17,000 بیش از 1 شاخص چرا که اگر یک شبکه 568 00:34:17,000 --> 00:34:19,000 فقط گفت: چه در ردیف شما در آن هستید در اختیار ما یک عدد نیست. 569 00:34:19,000 --> 00:34:22,000 که واقعا فقط به ما یک لیست از اعداد است. 570 00:34:22,000 --> 00:34:25,000 اجازه دهید بگویم که این آرایه است. 571 00:34:25,000 --> 00:34:30,000 من یک آرایه به نام شبکه، و من گفت: آن را 2 سطر و 3 ستون، 572 00:34:30,000 --> 00:34:32,000 و بنابراین این یکی از راه های از تجسم آن است. 573 00:34:32,000 --> 00:34:37,000 وقتی که من می گویند من می خواهم به این عنصر در [1] [2] 574 00:34:37,000 --> 00:34:41,000 که بدان معنی است که به دلیل این سطر اول و پس از آن ستون 575 00:34:41,000 --> 00:34:44,000 من قصد دارم به پرش به سطر 1 از من گفت: 1. 576 00:34:44,000 --> 00:34:49,000 >> سپس من قصد دارم در اینجا به ستون 2، و من قصد دارم به ارزش 6. 577 00:34:49,000 --> 00:34:51,000 را حس؟ 578 00:34:51,000 --> 00:34:55,000 آرایه های چند بعدی، به یاد داشته باشید، از لحاظ فنی فقط آرایه ای از آرایه. 579 00:34:55,000 --> 00:34:57,000 ما می توانیم آرایه از آرایه ای از آرایه ها داشته باشد. 580 00:34:57,000 --> 00:35:00,000 ما می توانیم به رفتن، اما واقعا یک راه برای فکر کردن در مورد 581 00:35:00,000 --> 00:35:03,000 که چگونه این است که گذاشته شده و چه خبر است که آن را تجسم 582 00:35:03,000 --> 00:35:09,000 در یک شبکه شبیه به این. 583 00:35:09,000 --> 00:35:12,000 هنگامی که ما از آرایه ها به توابع، آنها در حال رفتن به رفتار 584 00:35:12,000 --> 00:35:16,000 کمی کمی متفاوت نسبت به زمانی که ما از متغیرها به طور منظم به توابع 585 00:35:16,000 --> 00:35:18,000 مثل گذر بین المللی و یا شناور. 586 00:35:18,000 --> 00:35:21,000 هنگامی که ما در یک نوع از نوع int یا کاراکتر و یا هر یک از این داده های دیگر منتقل می کند 587 00:35:21,000 --> 00:35:24,000 ما فقط در زمان نگاهی اگر تابع تغییر 588 00:35:24,000 --> 00:35:28,000 مقدار آن متغیر که تغییر به انتشار 589 00:35:28,000 --> 00:35:32,000 به تابع فراخوانی شده است. 590 00:35:32,000 --> 00:35:35,000 با استفاده از یک آرایه، از سوی دیگر، این اتفاق خواهد افتاد. 591 00:35:35,000 --> 00:35:39,000 اگر من در یک آرایه به برخی از عملکرد عبور و آن تابع تغییر برخی از عناصر، 592 00:35:39,000 --> 00:35:43,000 وقتی که من دوباره به تابع که آن را به نام 593 00:35:43,000 --> 00:35:47,000 آرایه من در حال حاضر متفاوت خواهد بود، و واژگان آن 594 00:35:47,000 --> 00:35:50,000 آرایه است توسط مرجع تصویب شده است، همانطور که بعدا خواهید دید. 595 00:35:50,000 --> 00:35:53,000 این است که چگونه کار اشاره گر، که در آن این نوع داده های اولیه، 596 00:35:53,000 --> 00:35:55,000 از سوی دیگر، با مقدار منتقل می شود. 597 00:35:55,000 --> 00:35:59,000 >> ما می توانیم از آن به عنوان ساخت یک کپی از برخی متغیر و سپس عبور در نسخه فکر می کنم. 598 00:35:59,000 --> 00:36:01,000 مهم نیست که چه ما که با متغیر انجام دهید. 599 00:36:01,000 --> 00:36:06,000 تابع فراخوانی شده، آگاه باشید که آن را تغییر نخواهد بود. 600 00:36:06,000 --> 00:36:10,000 آرایه ها فقط کمی متفاوت است که در زمینه. 601 00:36:10,000 --> 00:36:13,000 به عنوان مثال، همانطور که ما فقط دیدم، اصلی است که به سادگی یک تابع 602 00:36:13,000 --> 00:36:15,000 است که می تواند در 2 استدلال کنند. 603 00:36:15,000 --> 00:36:20,000 اولین آرگومان به تابع اصلی argc، و یا تعدادی از استدلال است، 604 00:36:20,000 --> 00:36:23,000 و آرگومان دوم نام ی argv 605 00:36:23,000 --> 00:36:27,000 و کسانی که ارزشهای واقعی از آن استدلال است. 606 00:36:27,000 --> 00:36:30,000 بیایید می گویند من یک برنامه ای به نام this.c، 607 00:36:30,000 --> 00:36:34,000 و من می گویم را در این، و من قصد دارم این کار را در خط فرمان اجرا کنید. 608 00:36:34,000 --> 00:36:38,000 در حال حاضر به تصویب در برخی از استدلال به برنامه من به نام این، 609 00:36:38,000 --> 00:36:42,000 من می توانم بگویم چیزی شبیه به / CS 50. 610 00:36:42,000 --> 00:36:45,000 این همان چیزی است که ما تصور دیوید به انجام این کار هر روز در ترمینال. 611 00:36:45,000 --> 00:36:48,000 اما در حال حاضر در داخل تابع اصلی از این برنامه 612 00:36:48,000 --> 00:36:52,000 این ارزش دارد، بنابراین argc 4 است. 613 00:36:52,000 --> 00:36:56,000 این ممکن است کمی گیج کننده است زیرا واقعا ما فقط در CS 50 عبور. 614 00:36:56,000 --> 00:36:58,000 این تنها 3. 615 00:36:58,000 --> 00:37:02,000 اما به یاد داشته باشید که این عنصر برای اولین بار از ی argv یا آرگومان اول 616 00:37:02,000 --> 00:37:05,000 نام خود تابع است. 617 00:37:05,000 --> 00:37:07,190 به طوری که بدان معنی است که در حال حاضر 4 همه چیز در اینجا، 618 00:37:07,190 --> 00:37:10,530 و عنصر اول خواهد بود / این. 619 00:37:10,530 --> 00:37:12,970 خواهد شد و این به عنوان یک رشته نشان داده شده است. 620 00:37:12,970 --> 00:37:18,590 سپس عناصر باقی مانده همان چیزی است که ما در بعد از نام برنامه تایپ. 621 00:37:18,590 --> 00:37:22,720 بنابراین فقط به عنوان به کنار، ما احتمالا در pset 2 را دیدم، 622 00:37:22,720 --> 00:37:28,780 به یاد داشته باشید که 50 رشته از 50 عدد صحیح است ≠. 623 00:37:28,780 --> 00:37:32,520 بنابراین ما می توانید چیزی شبیه این را می گویند نیست اعضای هیات X = ی argv 3. 624 00:37:32,520 --> 00:37:36,470 >> که فقط رفتن نیست برای درک، به دلیل این است که یک رشته، و این است که یک عدد صحیح است. 625 00:37:36,470 --> 00:37:38,510 بنابراین اگر شما می خواهید برای تبدیل بین 2، به یاد داشته باشید، ما در حال رفتن به 626 00:37:38,510 --> 00:37:40,810 این تابع سحر و جادو نامیده می شود atoi. 627 00:37:40,810 --> 00:37:46,270 طول می کشد که یک رشته و عدد صحیح نشان داده شده در داخل این رشته را برمی گرداند. 628 00:37:46,270 --> 00:37:48,360 به طوری که یک اشتباه ساده در مسابقه را، 629 00:37:48,360 --> 00:37:51,590 فقط فکر که این نوع صحیح به طور خودکار خواهد بود. 630 00:37:51,590 --> 00:37:53,860 اما درست این است که این همیشه خواهد بود رشته دانم 631 00:37:53,860 --> 00:38:00,920 حتی اگر این رشته تنها شامل یک عدد صحیح و یا یک شخصیت و یا شناور. 632 00:38:00,920 --> 00:38:03,380 بنابراین در حال حاضر بحث در مورد زمان اجرای بگذارید. 633 00:38:03,380 --> 00:38:06,700 هنگامی که ما تمام این الگوریتم است که انجام تمام این کارها دیوانه، 634 00:38:06,700 --> 00:38:11,580 آن را تبدیل به واقعا مفید برای پرسیدن این سوال، "چه مدت آنها را؟" 635 00:38:11,580 --> 00:38:15,500 ما نشانگر این است که چیزی به نام نماد مجانبی است. 636 00:38:15,500 --> 00:38:18,430 بنابراین این بدان معنی است که - خب، اجازه دهید به ما می گویند الگوریتم ما را 637 00:38:18,430 --> 00:38:20,840 برخی از ورودی واقعا، واقعا، واقعا بزرگ است. 638 00:38:20,840 --> 00:38:23,840 ما می خواهیم به این سوال، چه مدت است که آن را رفتن به گرفتن؟ 639 00:38:23,840 --> 00:38:26,370 چگونه بسیاری از مراحل الگوریتم ما آن را به اجرا 640 00:38:26,370 --> 00:38:29,980 به عنوان تابعی از اندازه ورودی؟ " 641 00:38:29,980 --> 00:38:33,080 بنابراین اولین راهی که ما می توانیم توصیف زمان اجرا است که با بزرگ O. 642 00:38:33,080 --> 00:38:35,380 و این بدترین زمان در حال اجرا است. 643 00:38:35,380 --> 00:38:38,590 بنابراین اگر ما می خواهیم برای مرتب کردن یک آرایه، و ما به الگوریتم ما یک آرایه 644 00:38:38,590 --> 00:38:41,000 که در نزولی زمانی که آن را باید در جهت صعودی، 645 00:38:41,000 --> 00:38:43,130 که رفتن به بدترین حالت است. 646 00:38:43,130 --> 00:38:49,800 این بالا ما در طول حداکثر زمان الگوریتم ما را موظف می باشد. 647 00:38:49,800 --> 00:38:54,740 از سوی دیگر، این Ω رفتن به توصیف بهترین مورد در حال اجرا زمان. 648 00:38:54,740 --> 00:38:58,210 بنابراین اگر ما به یک آرایه در حال حاضر مرتب شده اند به یک الگوریتم مرتب سازی، 649 00:38:58,210 --> 00:39:00,940 چه مدت طول خواهد کشید تا این نوع؟ 650 00:39:00,940 --> 00:39:06,610 و این، پس از آن، توصیف حد پایین زمان در حال اجرا است. 651 00:39:06,610 --> 00:39:10,980 بنابراین در اینجا فقط برخی از واژه ها که در توضیح برخی از در حال اجرا بار. 652 00:39:10,980 --> 00:39:13,120 این صعودی هستند. 653 00:39:13,120 --> 00:39:16,060 سریعترین زمان در حال اجرا در حال حاضر ثابت نامیده می شود. 654 00:39:16,060 --> 00:39:19,800 >> این بدان معناست که هیچ مهم نیست که چگونه بسیاری از عناصر ما به الگوریتم ما، 655 00:39:19,800 --> 00:39:22,280 مهم نیست چقدر بزرگ آرایه ما، مرتب سازی آن 656 00:39:22,280 --> 00:39:26,510 و یا انجام هر آنچه که ما انجام می دهیم به آرایه همیشه همان مقدار از زمان. 657 00:39:26,510 --> 00:39:30,270 بنابراین ما می توانیم که فقط با 1 است، که ثابت را نمایندگی کند. 658 00:39:30,270 --> 00:39:32,410 ما نیز در زمان اجرا لگاریتمی نگاه کرد. 659 00:39:32,410 --> 00:39:34,800 بنابراین چیزی مانند جستجوی دودویی لگاریتمی است، 660 00:39:34,800 --> 00:39:37,140 که در آن ما قطع این مشکل را در نصف هر زمان 661 00:39:37,140 --> 00:39:40,970 و سپس همه چیز درست بالاتر از آنجا دریافت کنید. 662 00:39:40,970 --> 00:39:43,580 و اگر شما در حال نوشتن یک O هیچکدام از الگوریتم فاکتوریل، 663 00:39:43,580 --> 00:39:47,850 شما احتمالا باید این کار را به عنوان شغل روز خود را در نظر بگیرند. 664 00:39:47,850 --> 00:39:53,910 هنگامی که ما در مقایسه بار در حال اجرا این مهم است که در ذهن داشته باشیم این چیزها. 665 00:39:53,910 --> 00:39:57,760 بنابراین اگر من یک الگوریتم O (N)، و شخص دیگری 666 00:39:57,760 --> 00:40:03,590 یک الگوریتم O (2N) این در واقع مجانبی معادل است. 667 00:40:03,590 --> 00:40:06,590 بنابراین اگر ما تصور N به تعداد های بزرگ مانند eleventy میلیارد: 668 00:40:06,590 --> 00:40:13,090 بنابراین، هنگامی که ما در حال مقایسه eleventy میلیارد به چیزی شبیه eleventy میلیارد + 3، 669 00:40:13,090 --> 00:40:17,640 ناگهان که 3 واقعا ایجاد یک تفاوت بزرگ دیگر. 670 00:40:17,640 --> 00:40:20,980 به همین دلیل است که ما قصد داریم با توجه به این چیزها را به معادل. 671 00:40:20,980 --> 00:40:24,220 بنابراین چیزهایی مانند این ثابت، 2 * این وجود دارد، و یا اضافه کردن یک کودک 3 672 00:40:24,220 --> 00:40:27,180 این ها فقط ثابت است، و این در حال رفتن به رها کردن. 673 00:40:27,180 --> 00:40:32,480 بنابراین به همین دلیل است که همه 3 از زمان اجرای این همان است که گفتن آنها O (n) است. 674 00:40:32,480 --> 00:40:37,490 به طور مشابه، اگر ما 2 بار اجرا دیگر، اجازه دهید بگویم O (n + 2N ³ ²)، ما می توانید اضافه کنید 675 00:40:37,490 --> 00:40:42,070 + N + 7، و پس از آن دیگری را نیز در زمان اجرا است که تنها O (N ³). 676 00:40:42,070 --> 00:40:46,290 باز هم، این همان چیزی که به خاطر این - این همان نیست. 677 00:40:46,290 --> 00:40:49,840 این همان چیز، با عرض پوزش. پس این ها همان است زیرا 678 00:40:49,840 --> 00:40:53,090 این ³ N به تسلط این مربع 2N. 679 00:40:53,090 --> 00:40:59,130 >> چه شده است همین است اگر ما مثل O O (N ³) و اجرا (n ²) 680 00:40:59,130 --> 00:41:02,820 زیرا این ³ N است که بسیار بزرگتر از این مربع N است. 681 00:41:02,820 --> 00:41:05,470 بنابراین اگر ما شارحان، به طور ناگهانی شروع به مهم، 682 00:41:05,470 --> 00:41:08,280 اما زمانی که ما فقط با عوامل خرید و فروش از آنجا که ما در اینجا، 683 00:41:08,280 --> 00:41:12,810 سپس آن را نمی خواهید برای مهم است زیرا آنها فقط رفتن به رها کردن. 684 00:41:12,810 --> 00:41:16,760 بیایید نگاهی به برخی از الگوریتم های ما تا کنون دیده ام 685 00:41:16,760 --> 00:41:19,260 و صحبت در مورد زمان اجرا خود را. 686 00:41:19,260 --> 00:41:23,850 راه اول این که به دنبال یک شماره در یک لیست، که ما را دید، جستجوی خطی بود. 687 00:41:23,850 --> 00:41:26,950 و اجرای از جستجوی خطی فوق العاده ساده است. 688 00:41:26,950 --> 00:41:30,490 ما فقط باید یک لیست است، و ما در حال رفتن به در هر عنصر تنها در لیست 689 00:41:30,490 --> 00:41:34,260 تا زمانی که ما پیدا کردن شماره ما به دنبال آن هستید. 690 00:41:34,260 --> 00:41:38,370 به طوری که بدان معنی است که در بدترین حالت، این O (n) است. 691 00:41:38,370 --> 00:41:40,860 و در بدترین حالت می تواند در صورتی که عنصر است 692 00:41:40,860 --> 00:41:45,710 آخرین عنصر، و سپس با استفاده از جستجوی خطی، ما باید در هر عنصر واحد نگاه کنند 693 00:41:45,710 --> 00:41:50,180 تا زمانی که ما به یکی از آخرین به منظور می دانیم که آن را در واقع در این فهرست بود. 694 00:41:50,180 --> 00:41:52,910 ما فقط نمی تواند به من بدهید تا در نیمه راه و می گویند، "این احتمالا وجود ندارد." 695 00:41:52,910 --> 00:41:55,980 با استفاده از جستجوی خطی ما باید به همه چیز نگاه کنید. 696 00:41:55,980 --> 00:41:59,090 بهترین مورد در حال اجرا، از سوی دیگر، ثابت است 697 00:41:59,090 --> 00:42:04,200 چرا که در بهترین حالت ما به دنبال عنصر برای اولین بار در این فهرست است. 698 00:42:04,200 --> 00:42:08,930 پس از آن به ما دقیقا 1 مرحله، مهم نیست چقدر بزرگ لیست می باشد 699 00:42:08,930 --> 00:42:12,140 اگر ما به دنبال اولین عنصر در هر زمان است. 700 00:42:12,140 --> 00:42:15,390 >> بنابراین، هنگامی که شما جستجو، به یاد داشته باشید، آن را نشانی از نیاز نیست که لیست ما مرتب شوند. 701 00:42:15,390 --> 00:42:19,430 از آنجا که ما در حال به سادگی رفتن که بیش از هر عنصر واحد نگاه کنند، و آن را واقعا مهم نیست 702 00:42:19,430 --> 00:42:23,560 آنچه منظور این عناصر شوید. 703 00:42:23,560 --> 00:42:28,110 الگوریتم جستجو هوشمند تر چیزی شبیه به جستجوی دودویی است. 704 00:42:28,110 --> 00:42:31,500 به یاد داشته باشید، پیاده سازی جستجو دودویی است که هنگامی که شما در حال رفتن به 705 00:42:31,500 --> 00:42:34,320 به دنبال در وسط لیست. 706 00:42:34,320 --> 00:42:38,000 و از آنجا که ما به دنبال آن هستید در وسط، ما نیاز دارند که این فهرست طبقه بندی شده اند 707 00:42:38,000 --> 00:42:40,580 و یا دیگری ما نمی دانیم که در آن میانه است، و ما باید به نگاه بیش از 708 00:42:40,580 --> 00:42:44,480 لیست کل آن را پیدا کنید، و پس از آن در آن نقطه ما فقط اتلاف وقت است. 709 00:42:44,480 --> 00:42:48,480 بنابراین اگر ما یک لیست طبقه بندی شده اند و ما در وسط، ما قصد داریم به مقایسه میانه 710 00:42:48,480 --> 00:42:51,590 به این عنصر ما دنبال آن هستید. 711 00:42:51,590 --> 00:42:54,640 اگر آن را بیش از حد بالا است، پس از آن ما می توانیم به نیمه سمت راست را فراموش کرده ام 712 00:42:54,640 --> 00:42:57,810 از آنجا که ما می دانیم که اگر عنصر ما این است که در حال حاضر بیش از حد بالا 713 00:42:57,810 --> 00:43:01,080 و همه چیز را به در سمت راست این عنصر حتی بیشتر است 714 00:43:01,080 --> 00:43:02,760 پس ما لازم نیست که به دنبال وجود ندارد. 715 00:43:02,760 --> 00:43:05,430 جایی که در از سوی دیگر، اگر عنصر ما این است که بیش از حد کم است، 716 00:43:05,430 --> 00:43:08,700 ما می دانیم که همه چیز را به سمت چپ که عنصر نیز بسیار کم است، 717 00:43:08,700 --> 00:43:11,390 پس از آن واقعا نمی معنا که به دنبال وجود دارد، یا. 718 00:43:11,390 --> 00:43:15,760 به این ترتیب، با هر گام و هر زمان که ما نگاه در نقطه میانی از لیست، 719 00:43:15,760 --> 00:43:19,060 ما قصد داریم برای کاهش مشکل ما در نیمی به دلیل ناگهان ما می دانیم 720 00:43:19,060 --> 00:43:23,040 یک دسته ای از اعداد است که نمی تواند یکی از ما به دنبال. 721 00:43:23,040 --> 00:43:26,950 >> در شبه این چیزی شبیه به این، 722 00:43:26,950 --> 00:43:30,990 و از آنجا که ما در حال کاهش فهرست در نصف هر زمان، 723 00:43:30,990 --> 00:43:34,920 بدترین اجرا جهش زمان را از خطی به لگاریتمی است. 724 00:43:34,920 --> 00:43:39,260 تا به طور ناگهانی ما ورود در مراحل به منظور پیدا کردن یک عنصر در یک لیست. 725 00:43:39,260 --> 00:43:42,460 بهترین مورد در حال اجرا است، هر چند، هنوز ثابت 726 00:43:42,460 --> 00:43:45,180 چرا که در حال حاضر، اجازه دهید فقط می گویند که عنصر ما به دنبال این است 727 00:43:45,180 --> 00:43:48,380 همیشه وسط دقیق از لیست اصلی است. 728 00:43:48,380 --> 00:43:52,080 بنابراین ما می توانیم لیست ما به عنوان بزرگ به عنوان ما می خواهیم به رشد است، اما در صورتی که عنصر ما به دنبال این است که در وسط است، 729 00:43:52,080 --> 00:43:54,910 سپس آن را تنها به ما 1 گام را. 730 00:43:54,910 --> 00:44:00,920 بنابراین به همین دلیل است که ما O (log n است) و Ω (1) و یا ثابت. 731 00:44:00,920 --> 00:44:04,510 اجازه دهید در واقع اجرای جستجوی دودویی در این فهرست است. 732 00:44:04,510 --> 00:44:08,020 پس اجازه دهید بگویم که ما به دنبال عنصر 164. 733 00:44:08,020 --> 00:44:11,650 اولین چیزی که ما می رویم به انجام این است که پیدا کردن نقطه میانی این لیست است. 734 00:44:11,650 --> 00:44:15,060 این فقط اتفاق می افتد که از نقطه میانی در حال رفتن به سقوط در بین این 2 عدد، 735 00:44:15,060 --> 00:44:18,960 پس خودسرانه اجازه دهید فقط می گویند، هر بار از نقطه میانی می افتد بین 2 عدد، 736 00:44:18,960 --> 00:44:21,150 اجازه دهید فقط دور تا. 737 00:44:21,150 --> 00:44:24,330 ما فقط نیاز به مطمئن شوید که ما این کار را در هر مرحله از راه. 738 00:44:24,330 --> 00:44:29,040 بنابراین ما در حال رفتن به دور، و ما در حال رفتن به می گویند که 161 وسط لیست ما است. 739 00:44:29,040 --> 00:44:34,640 بنابراین 161 <164، و هر عنصر را به سمت چپ از 161 740 00:44:34,640 --> 00:44:39,120 <164 است، بنابراین ما می دانیم که آن را نمی خواهید به ما در کمک 741 00:44:39,120 --> 00:44:42,690 برای شروع به دنبال در اینجا چرا که این عنصر به دنبال آن هستید نمی تواند وجود داشته باشد. 742 00:44:42,690 --> 00:44:47,060 بنابراین آنچه که ما می توانیم انجام دهیم این است که ما فقط می توانید در مورد که نیمه چپ و تمام فهرست را فراموش کرده ام 743 00:44:47,060 --> 00:44:51,700 و در حال حاضر تنها از سمت راست به بعد 161 را در نظر بگیرند. 744 00:44:51,700 --> 00:44:54,050 >> پس باز هم، این نقطه میانی است، اجازه دهید فقط دور تا. 745 00:44:54,050 --> 00:44:56,260 در حال حاضر 175 می باشد بیش از حد بزرگ است. 746 00:44:56,260 --> 00:44:59,180 بنابراین ما می دانیم که آن را نمی خواهید به ما کمک می کند به دنبال در اینجا و یا اینجا، 747 00:44:59,180 --> 00:45:06,610 بنابراین ما فقط می تواند که به دور پرتاب، و در نهایت ما باید 164 ضربه. 748 00:45:06,610 --> 00:45:10,560 هر گونه سوال در مورد جستجوی دودویی؟ 749 00:45:10,560 --> 00:45:14,180 اجازه دهید از جستجو از طریق فهرست در حال حاضر طبقه بندی شده اند 750 00:45:14,180 --> 00:45:17,660 به واقع گرفتن یک لیست از اعداد در هر سفارش 751 00:45:17,660 --> 00:45:20,960 و ساخت این فهرست صعودی است. 752 00:45:20,960 --> 00:45:24,060 اولین الگوریتم ما در نگاه مرتب سازی بر حباب نامیده می شد. 753 00:45:24,060 --> 00:45:27,300 و این امر می تواند ساده از الگوریتم دیدم. 754 00:45:27,300 --> 00:45:32,970 مرتب سازی بر حباب می گوید که زمانی که هر 2 عناصر داخل لیست در خارج از محل، 755 00:45:32,970 --> 00:45:36,500 این معنی است که یک شماره بالاتر وجود دارد را به سمت چپ از یک شماره پایین تر، 756 00:45:36,500 --> 00:45:40,190 پس از آن ما در حال رفتن به آنها را مبادله، چرا که این بدان معنی است که این لیست خواهد بود 757 00:45:40,190 --> 00:45:42,860 "بیشتر طبقه بندی شده اند" از آن را قبل از. 758 00:45:42,860 --> 00:45:45,180 و ما در حال رفتن به ادامه این روند دوباره و دوباره و دوباره 759 00:45:45,180 --> 00:45:52,100 تا در نهایت نوع عناصر حباب به محل صحیح خود و ما باید یک لیست طبقه بندی شده اند. 760 00:45:52,100 --> 00:45:57,230 >> زمان اجرا از این رفتن به O (n ²). چرا؟ 761 00:45:57,230 --> 00:46:00,370 خب، چرا که در بدترین حالت، ما در حال رفتن به هر عنصر را، و 762 00:46:00,370 --> 00:46:04,570 ما قصد داریم برای پایان دادن به مقایسه آن را برای هر عنصر دیگر در این فهرست. 763 00:46:04,570 --> 00:46:08,030 اما در بهترین حالت، ما باید فهرست طبقه بندی شده اند در حال حاضر، حباب مرتب سازی بر اساس 764 00:46:08,030 --> 00:46:12,230 فقط رفتن به رفتن را از طریق یک بار، می گویند: "نه. من با هیچ معاوضه را ندارد، پس من انجام شده است." 765 00:46:12,230 --> 00:46:17,410 بنابراین ما باید در بهترین زمان در حال اجرا Ω (n) است. 766 00:46:17,410 --> 00:46:20,680 اجازه اجرا حباب مرتب سازی بر روی یک لیست. 767 00:46:20,680 --> 00:46:23,560 یا اول، اجازه دهید فقط در برخی از شبه نگاه واقعا سریع است. 768 00:46:23,560 --> 00:46:28,160 ما می خواهم بگویم ما می خواهیم برای پیگیری، در هر تکرار از حلقه، 769 00:46:28,160 --> 00:46:32,190 پیگیری یا نه ما تغییر هر عنصر. 770 00:46:32,190 --> 00:46:37,610 بنابراین به همین دلیل است که ما قصد داریم برای متوقف کردن که ما باید هر عنصر جابجا شده است. 771 00:46:37,610 --> 00:46:41,980 بنابراین در ابتدای حلقه ما هر چیزی را عوض نمی کند، بنابراین ما می گویند که نادرست است. 772 00:46:41,980 --> 00:46:47,170 در حال حاضر، ما در حال رفتن به از طریق لیست و مقایسه عنصر به عنصر i + 1 773 00:46:47,170 --> 00:46:50,310 و اگر آن را به صورتی که یک عدد بزرگتر را به سمت چپ از یک شماره کوچکتر وجود دارد، 774 00:46:50,310 --> 00:46:52,310 پس از آن ما در حال رفتن به آنها را مبادله. 775 00:46:52,310 --> 00:46:54,490 >> و پس از آن ما در حال رفتن به یاد داشته باشید که ما یک عنصر تعویض. 776 00:46:54,490 --> 00:46:58,900 این بدان معنی است که ما نیاز داریم که از طریق فهرست حداقل 1 بار 777 00:46:58,900 --> 00:47:02,160 به خاطر وضعیتی که در آن متوقف شد، زمانی است که کل لیست در حال حاضر طبقه بندی شده اند. 778 00:47:02,160 --> 00:47:04,890 به این معنی که ما به هیچ وجه معاوضه ساخته شده است. 779 00:47:04,890 --> 00:47:09,960 بنابراین به همین دلیل است که شرایط ما را در اینجا این است: "در حالی که برخی از عناصر جابجا شده اند. 780 00:47:09,960 --> 00:47:13,720 بنابراین در حال حاضر فقط در این در حال اجرا بر روی یک لیست نگاه کنیم. 781 00:47:13,720 --> 00:47:16,640 من لیست 5،0،1،6،4. 782 00:47:16,640 --> 00:47:19,850 مرتب سازی بر حباب برای شروع تمام راه را در سمت چپ، و آن را برای مقایسه 783 00:47:19,850 --> 00:47:24,700 عناصر من است، پس 0 تا I + 1، که عنصر 1. 784 00:47:24,700 --> 00:47:29,020 رفتن به می گویند، خوب 5> 0 است، اما در حال حاضر 5 است به سمت چپ، 785 00:47:29,020 --> 00:47:32,500 بنابراین من نیاز به تعویض 5 و 0. 786 00:47:32,500 --> 00:47:35,470 هنگامی که آنها را مبادله، به طور ناگهانی این لیست های مختلف را دریافت کنم. 787 00:47:35,470 --> 00:47:38,260 در حال حاضر 5> 1 است، بنابراین ما در حال رفتن به آنها را مبادله. 788 00:47:38,260 --> 00:47:42,160 > 5 6 نیست، بنابراین ما نیاز به انجام هر چیزی در اینجا. 789 00:47:42,160 --> 00:47:46,690 اما 6> 4، بنابراین ما نیاز به مبادله. 790 00:47:46,690 --> 00:47:49,740 باز هم، ما نیاز به اجرا از طریق لیست کل در نهایت کشف 791 00:47:49,740 --> 00:47:52,330 که این از ما آنها را مبادله، 792 00:47:52,330 --> 00:47:57,120 و در این مرحله ما نیاز به از طریق لیست و زمان اجرا 1 793 00:47:57,120 --> 00:48:05,390 مطمئن شوید که همه چیز در جهت آن، و در این مرتب کردن بر اساس نقطه حباب به پایان رسید. 794 00:48:05,390 --> 00:48:10,720 الگوریتم های مختلف برای در نظر گرفتن برخی از عناصر و مرتب سازی آنها، مرتب کردن بر اساس انتخاب شده است. 795 00:48:10,720 --> 00:48:15,740 ایده مرتب کردن بر اساس انتخاب این است که ما قصد داریم به ایجاد یک بخش طبقه بندی شده اند از لیست 796 00:48:15,740 --> 00:48:18,150 1 عنصر در یک زمان. 797 00:48:18,150 --> 00:48:23,170 >> و ما قصد داریم برای انجام این کار است با ایجاد بخش چپ فهرست شده است. 798 00:48:23,170 --> 00:48:27,510 و اساسا، هر - در هر مرحله، ما در حال رفتن را به کوچکترین عنصر ما را ترک کرده اند 799 00:48:27,510 --> 00:48:32,310 است که طبقه بندی شده اند با این حال، و ما در حال رفتن به آن را که به بخش طبقه بندی شده اند حرکت می کند. 800 00:48:32,310 --> 00:48:35,850 این بدان معناست که ما باید به طور مداوم به پیدا کردن عنصر حداقل نامرتب 801 00:48:35,850 --> 00:48:40,720 و پس از آن عنصر حداقل و مبادله آن را با هر 802 00:48:40,720 --> 00:48:45,090 چپ ترین عنصر است که طبقه بندی شده اند نیست. 803 00:48:45,090 --> 00:48:50,890 زمان اجرا از این است که رفتن به O (n ²) چرا که در بدترین حالت 804 00:48:50,890 --> 00:48:55,070 ما نیاز به مقایسه هر عنصر واحد را برای هر عنصر دیگر است. 805 00:48:55,070 --> 00:48:59,250 از آنجا که ما در حال گفت که اگر ما در نیمه سمت چپ را از لیست شروع، ما باید 806 00:48:59,250 --> 00:49:02,970 رفتن را از طریق تمام بخش سمت راست برای پیدا کردن کوچکترین عنصر. 807 00:49:02,970 --> 00:49:05,430 و پس از آن، دوباره، ما باید برای رفتن به تمام بخش سمت راست و 808 00:49:05,430 --> 00:49:08,210 رفتن که بیش و بیش از بیش و بیش از دوباره. 809 00:49:08,210 --> 00:49:11,350 که رفتن به مربع N. ما نیاز به رفتن به داخل حلقه دیگری برای حلقه 810 00:49:11,350 --> 00:49:13,350 که مربع N را نشان می دهد. 811 00:49:13,350 --> 00:49:16,530 در بهترین تفکر در مورد، اجازه دهید می گویند که ما به آن فهرست طبقه بندی شده اند در حال حاضر؛ 812 00:49:16,530 --> 00:49:19,270 ما در واقع هیچ بهتر از مربع N نمی کنند. 813 00:49:19,270 --> 00:49:21,730 از آنجا که مرتب سازی بر انتخاب هیچ راهی برای دانستن این که 814 00:49:21,730 --> 00:49:25,540 حداقل عنصر است که فقط یکی از من اتفاق می افتد به دنبال در. 815 00:49:25,540 --> 00:49:28,970 هنوز هم نیاز به مطمئن شوید که این است که در واقع حداقل. 816 00:49:28,970 --> 00:49:31,670 >> و تنها راه برای مطمئن شوید که آن را حداقل، با استفاده از این الگوریتم، 817 00:49:31,670 --> 00:49:34,640 در هر عنصر تنها نگاه دوباره. 818 00:49:34,640 --> 00:49:38,420 پس در واقع، اگر آن را به شما بدهد - اگر شما را مرتب سازی بر انتخاب فهرست طبقه بندی شده اند در حال حاضر، 819 00:49:38,420 --> 00:49:42,720 آن را نمی خواهید برای انجام هر گونه بهتر از دادن آن است که طبقه بندی شده اند هنوز رتبهدهی نشده است. 820 00:49:42,720 --> 00:49:46,320 به هر حال، اگر آن اتفاق می افتد را به صورت که چیزی O (چیزی) است 821 00:49:46,320 --> 00:49:50,640 و امگا از چیزی، ما فقط می تواند موجز است که آن را از چیزی θ می گویند. 822 00:49:50,640 --> 00:49:52,760 بنابراین اگر شما می بینید که می آیند تا در هر نقطه، این چیزی است که فقط به این معنی است. 823 00:49:52,760 --> 00:49:57,580 >> اگر چیزی تتا از n ²، این هر دو O بزرگ (n ²) و Ω (n ²) است. 824 00:49:57,580 --> 00:49:59,790 بنابراین بهترین حالت و بدترین حالت، این تفاوت را ندارد، 825 00:49:59,790 --> 00:50:04,400 الگوریتم رفتن به همان چیزی که در هر زمان است. 826 00:50:04,400 --> 00:50:06,610 پس این همان چیزی است که شبه برای مرتب کردن بر اساس انتخاب می تواند شبیه است. 827 00:50:06,610 --> 00:50:10,630 ما اساسا رفتن به می گویند که من می خواهم به تکرار بیش از فهرست 828 00:50:10,630 --> 00:50:15,180 از چپ به راست و در هر تکرار از حلقه، من قصد دارم به حرکت می کند 829 00:50:15,180 --> 00:50:19,780 عنصر حداقل به این بخش از فهرست طبقه بندی شده اند. 830 00:50:19,780 --> 00:50:23,260 و وقتی چیزی رو حرکت وجود دارد، من هرگز نیاز به دوباره نگاه می کنم که در آن عنصر است. 831 00:50:23,260 --> 00:50:28,600 از آنجا که به محض این که من مبادله یک عنصر در بخش چپ فهرست طبقه بندی شده اند، آن را به 832 00:50:28,600 --> 00:50:32,600 از آنجا که ما در حال انجام همه چیز را به کاربران معرفی شده چیدمان صعودی چیدمان با استفاده از حداقل. 833 00:50:32,600 --> 00:50:38,740 پس ما گفت: بسیار خوب، ما در موقعیت من به هستی، و ما نیاز به نگاه در تمام عناصر 834 00:50:38,740 --> 00:50:42,260 به حق از من در جهت پیدا کردن حداقل است. 835 00:50:42,260 --> 00:50:46,150 بنابراین این بدان معناست که ما می خواهیم از i + 1 نگاهی به انتهای لیست. 836 00:50:46,150 --> 00:50:51,610 و در حال حاضر، اگر این عنصر است که ما در حال حاضر به دنبال کمتر از حداقل ما تا کنون، 837 00:50:51,610 --> 00:50:54,190 که به یاد داشته باشید، ما در حال شروع کردن حداقل فقط 838 00:50:54,190 --> 00:50:57,020 هر عنصر ما در حال حاضر، من فرض کنیم که حداقل. 839 00:50:57,020 --> 00:51:00,270 اگر من عنصر را که کوچکتر از آن است که، پس از آن من قصد دارم برای گفتن، خوب، 840 00:51:00,270 --> 00:51:02,700 خوب، حداقل من پیدا کرده اند. 841 00:51:02,700 --> 00:51:06,080 من قصد دارم به خاطر داشته باشید که در آن است که حداقل. 842 00:51:06,080 --> 00:51:09,560 >> بنابراین در حال حاضر، هنگامی که من از طریق آن بخش سمت راست نامرتب رفته، 843 00:51:09,560 --> 00:51:16,690 می توانم بگویم من قصد دارم به مبادله حداقل عنصر با عنصر است که در موقعیت من به. 844 00:51:16,690 --> 00:51:21,100 که برای ساخت لیست، بخش طبقه بندی شده اند من لیست از چپ به راست، 845 00:51:21,100 --> 00:51:25,190 و ما هرگز نیاز به یک عنصر را دوباره نگاه می کنم یک بار آن را در آن بخش است. 846 00:51:25,190 --> 00:51:27,930 هنگامی که ما آن را جابجا شده است. 847 00:51:27,930 --> 00:51:30,260 بنابراین اجرای مرتب کردن بر اساس انتخاب در این فهرست است. 848 00:51:30,260 --> 00:51:38,220 عنصر آبی در اینجا رفتن به من، و عنصر قرمز است برای رفتن به حداقل عنصر است. 849 00:51:38,220 --> 00:51:41,570 پس من شروع می شود تمام راه را در سمت چپ این فهرست، در 5. 850 00:51:41,570 --> 00:51:44,610 در حال حاضر ما نیاز به پیدا کردن عنصر حداقل نامرتب. 851 00:51:44,610 --> 00:51:49,480 بنابراین ما می گویند 0 <5، 0 است حداقل جدید من است. 852 00:51:49,480 --> 00:51:53,820 >> اما من نمی تواند متوقف شود وجود دارد، چرا که حتی اگر ما تشخیص می دهند که 0 است کوچکترین، 853 00:51:53,820 --> 00:51:59,390 ما نیاز داریم تا از طریق هر عنصر لیست تا مطمئن شوید که اجرا شود. 854 00:51:59,390 --> 00:52:01,760 بنابراین 1 بزرگتر است، 6 بزرگتر است، 4 بزرگتر است. 855 00:52:01,760 --> 00:52:05,850 این بدان معنی است که پس از نگاه کردن به همه از این عناصر، من 0 است که کوچکترین است. 856 00:52:05,850 --> 00:52:09,800 بنابراین من قصد دارم برای تعویض 5 و 0. 857 00:52:09,800 --> 00:52:15,480 به محض این که من مبادله، من قصد دارم برای به دست آوردن یک لیست جدید، و من می دانم که من هرگز نیاز به دوباره نگاه می کنم که در آن 0 858 00:52:15,480 --> 00:52:19,380 زیرا هنگامی که من آن را جابجا، من آن طبقه بندی شده اند و ما در حال انجام می شود. 859 00:52:19,380 --> 00:52:22,730 در حال حاضر آن را فقط اتفاق می افتد که عنصر آبی است دوباره از 5 860 00:52:22,730 --> 00:52:26,030 و ما باید در 1 نگاه کنید، 6 و 4 به تعیین که 1 861 00:52:26,030 --> 00:52:31,520 کوچکترین عنصر حداقل است، بنابراین خواهیم 1 و 5 مبادله است. 862 00:52:31,520 --> 00:52:36,890 باز هم، ما نیاز به نگاه کنید - مقایسه 5 تا 6 و 4، 863 00:52:36,890 --> 00:52:39,830 و ما در حال رفتن به تعویض 4 و 5، و در نهایت، مقایسه 864 00:52:39,830 --> 00:52:45,740 افراد 2 اعداد و مبادله آنها را تا زمانی که ما طبقه بندی شده اند ما فهرست. 865 00:52:45,740 --> 00:52:49,730 هر گونه سوال در مورد مرتب کردن بر اساس انتخاب؟ 866 00:52:49,730 --> 00:52:56,420 باشه. اجازه دهید به آخرین موضوع در اینجا، و آن بازگشت. 867 00:52:56,420 --> 00:52:59,810 >> بازگشت، به یاد داشته باشید، این واقعا متا چیزی است که در آن یک تابع 868 00:52:59,810 --> 00:53:02,740 بارها و بارها به خود فرا می خواند. 869 00:53:02,740 --> 00:53:05,620 بنابراین در برخی از نقطه، در حالی که fuction ما این است که بارها و بارها خود را فراخوانی، 870 00:53:05,620 --> 00:53:10,100 نیاز به برخی از نقطه ای که در آن ما خواستار خودمان را متوقف وجود دارد. 871 00:53:10,100 --> 00:53:13,670 چرا که اگر ما این کار را انجام نمی، پس از آن ما فقط رفتن به ادامه برای انجام این کار برای همیشه لطفا برای، 872 00:53:13,670 --> 00:53:16,660 و برنامه ما این است که فقط رفتن نیست برای پایان دادن به. 873 00:53:16,660 --> 00:53:19,200 ما به این وضعیت در مورد پایه. 874 00:53:19,200 --> 00:53:22,570 و در مورد پایه می گوید، به جای فراخوانی یک تابع دوباره، 875 00:53:22,570 --> 00:53:25,330 من فقط رفتن به بازگشت برخی از ارزش است. 876 00:53:25,330 --> 00:53:28,080 بنابراین زمانی که ما از بازگشت ارزش، ما خواستار خودمان را متوقف کرده اید، 877 00:53:28,080 --> 00:53:32,550 و بقیه از تماس های ساخته ایم، تا کنون نیز می تواند بازگشت. 878 00:53:32,550 --> 00:53:36,050 در مقابل مورد پایه مورد بازگشتی است. 879 00:53:36,050 --> 00:53:39,050 و این زمانی است که ما می خواهیم را به یکی دیگر از فراخوانی به تابع است که ما در حال حاضر شوید. 880 00:53:39,050 --> 00:53:44,690 و ما احتمالا، اگر چه نه همیشه، می خواهم به استفاده از آرگومان های مختلف است. 881 00:53:44,690 --> 00:53:48,940 >> بنابراین اگر ما یک تابع به نام F و F فقط به نام را 1 بحث، 882 00:53:48,940 --> 00:53:52,010 و ما فقط خواستار F (1)، f (1)، F (1) نگه دارید، و آن را فقط اتفاق می افتد که 883 00:53:52,010 --> 00:53:56,510 استدلال 1 را به صورت بازگشتی می افتد، ما هنوز هم هرگز متوقف شود. 884 00:53:56,510 --> 00:54:01,620 حتی اگر ما در مورد پایه، ما باید مطمئن شوید که در نهایت ما در حال رفتن به ضربه است که برای مورد پایه. 885 00:54:01,620 --> 00:54:04,250 ما نه تنها ماندن در این مورد بازگشتی. 886 00:54:04,250 --> 00:54:09,870 به طور کلی، زمانی که ما خودمان، ما احتمالا رفتن به استدلال های مختلف در هر زمان است. 887 00:54:09,870 --> 00:54:12,700 در اینجا این است که تابع بازگشتی واقعا ساده است. 888 00:54:12,700 --> 00:54:15,090 بنابراین این محاسبه فاکتوریل یک عدد. 889 00:54:15,090 --> 00:54:17,790 بازگشت به بالا در اینجا ما در مورد پایگاه ما است. 890 00:54:17,790 --> 00:54:22,330 در مورد N ≤ 1، ما در حال رفتن به تماس دوباره فاکتوریل. 891 00:54:22,330 --> 00:54:26,490 ما قصد داریم برای متوقف کردن ما فقط رفتن به بازگشت برخی از ارزش است. 892 00:54:26,490 --> 00:54:30,170 اگر این درست نیست، پس ما در حال رفتن به ضربه بازگشتی مورد ما. 893 00:54:30,170 --> 00:54:33,550 توجه داشته باشید که در اینجا است که ما نه فقط فاکتوریل (N) خواستار، چرا که می تواند بسیار مفید است. 894 00:54:33,550 --> 00:54:36,810 ما قصد داریم به تماس فاکتوریل چیز دیگری است. 895 00:54:36,810 --> 00:54:40,850 >> و بنابراین شما می توانید ببینید، در نهایت اگر ما چیزی فاکتوریل (5) و یا عبور، 896 00:54:40,850 --> 00:54:45,900 ما قصد داریم به تماس فاکتوریل (4) و به همین ترتیب است، و در نهایت ما قصد داریم به آمار این مورد پایه. 897 00:54:45,900 --> 00:54:51,730 پس این به نظر می رسد خوب است. بیایید ببینید که چه اتفاقی می افتد هنگامی که ما در واقع اجرای این. 898 00:54:51,730 --> 00:54:57,840 این پشته، و اجازه دهید بگویم که اصلی است برای رفتن به این تابع را با یک آرگومان (4). 899 00:54:57,840 --> 00:55:02,200 پس یک بار فاکتوریل می بیند و = 4، فاکتوریل خود تماس بگیرید. 900 00:55:02,200 --> 00:55:05,010 در حال حاضر، به طور ناگهانی، ما باید فاکتوریل (3). 901 00:55:05,010 --> 00:55:10,780 بنابراین این توابع در حال رفتن به نگه داشتن در حال رشد است تا در نهایت ما مورد پایگاه ما است. 902 00:55:10,780 --> 00:55:17,830 در این نقطه، مقدار بازگشتی از این بازگشت (NX مقدار بازگشتی از این)، 903 00:55:17,830 --> 00:55:21,290 مقدار بازگشتی، NX مقدار بازگشتی این است. 904 00:55:21,290 --> 00:55:23,290 در نهایت ما نیاز به آمار برخی از شماره است. 905 00:55:23,290 --> 00:55:26,560 در بالا در اینجا، ما می گویند بازگشت 1. 906 00:55:26,560 --> 00:55:30,650 این بدان معناست که به محض این که تعداد ما به بازگشت، ما می توانیم این کار را در خارج از پشته پاپ. 907 00:55:30,650 --> 00:55:36,570 بنابراین این فاکتوریل (1) انجام شده است. 908 00:55:36,570 --> 00:55:41,190 وقتی 1 را برمی گرداند، این فاکتوریل (1) برمی گرداند، و این بازگشت به 1 است. 909 00:55:41,190 --> 00:55:46,910 مقدار بازگشتی از این، به یاد داشته باشید، NX مقدار بازگشتی از این بود. 910 00:55:46,910 --> 00:55:50,720 تا به طور ناگهانی، این مرد می داند که من می خواهم به بازگشت 2. 911 00:55:50,720 --> 00:55:55,910 >> بنابراین، به یاد داشته باشید بازگشت مقدار این فقط NX مقدار بازگشتی در اینجا. 912 00:55:55,910 --> 00:56:01,160 بنابراین در حال حاضر ما می توانیم بگویم 3 × 2، و در نهایت، در اینجا می توان گفت 913 00:56:01,160 --> 00:56:04,010 این فقط برای رفتن به 4 × 3 × 2. 914 00:56:04,010 --> 00:56:09,570 و هنگامی که این بازده، ما را به داخل عدد صحیح واحد اصلی است. 915 00:56:09,570 --> 00:56:15,460 هر گونه سوال در مورد بازگشت؟ 916 00:56:15,460 --> 00:56:17,090 بسیار خوب. بنابراین زمان بیشتری را برای سوالات وجود دارد در پایان، 917 00:56:17,090 --> 00:56:23,360 اما در حال حاضر جوزف موضوعات باقی مانده را پوشش میدهد. 918 00:56:23,360 --> 00:56:25,590 >> [جوزف اونگ] همه حق. بنابراین در حال حاضر که ما در مورد بازگشتی صحبت کردیم، 919 00:56:25,590 --> 00:56:27,840 اجازه دهید بحث کمی در مورد آنچه با یکدیگر ادغام می شوند مرتب کردن بر اساس است. 920 00:56:27,840 --> 00:56:31,740 است که اساسا ادغام مرتب کردن بر اساس یکی دیگر از راه های مرتب سازی یک لیست از اعداد است. 921 00:56:31,740 --> 00:56:36,430 و چگونه آن را با این نسخهها کار، با مرتب کردن بر اساس ادغام شما باید یک فهرست، و چه کار می کنیم 922 00:56:36,430 --> 00:56:39,120 ما می گویند، اجازه دهید به 2 نیمه تقسیم این. 923 00:56:39,120 --> 00:56:42,750 ما برای اولین بار می خواهید مرتب سازی بر ادغام دوباره در نیمه سمت چپ اجرا شود، 924 00:56:42,750 --> 00:56:45,040 پس از آن خواهیم فرار کنی (دور بشی) مرتب کردن بر اساس ادغام در نیمه سمت راست، 925 00:56:45,040 --> 00:56:50,240 و می دهد که ما در حال حاضر 2 نیمه هستند که طبقه بندی شده اند، و در حال حاضر ما در حال رفتن به ترکیب این دو نیمه با هم. 926 00:56:50,240 --> 00:56:55,010 این کمی سخت است بدون یک مثال را ببینید، بنابراین خواهیم از طریق حرکات بروید و ببینید که چه اتفاقی می افتد. 927 00:56:55,010 --> 00:56:59,590 بنابراین شما شروع با این فهرست، ما آن را به 2 نیمه تقسیم است. 928 00:56:59,590 --> 00:57:02,300 ما برای اجرای ادغام مرتب کردن بر اساس در نیمه سمت چپ برای اولین بار. 929 00:57:02,300 --> 00:57:06,660 به طوری که در نیمه سمت چپ، و در حال حاضر آنها را اجرا می کنیم از طریق این لیست دوباره 930 00:57:06,660 --> 00:57:09,800 که می شود به مرتب کردن بر اساس ادغام به تصویب رسید، و پس از آن که نگاه می کنیم، دوباره، 931 00:57:09,800 --> 00:57:13,270 در سمت چپ این فهرست و اجرا می کنیم ادغام مرتب کردن بر اساس بر روی آن است. 932 00:57:13,270 --> 00:57:15,880 در حال حاضر، ما را به یک لیست از 2 عدد، 933 00:57:15,880 --> 00:57:19,010 و در حال حاضر نیمه چپ تنها 1 عنصر طولانی است، و ما می توانیم 934 00:57:19,010 --> 00:57:23,380 تقسیم یک لیست است که تنها 1 عنصر به نصف، بنابراین ما فقط می گویند، یک بار ما باید 50، 935 00:57:23,380 --> 00:57:26,400 است که تنها 1 عنصر، آن را در حال حاضر طبقه بندی شده اند. 936 00:57:26,400 --> 00:57:29,860 >> هنگامی که ما با آن انجام می شود، ما می توانید ببینید که ما می توانیم 937 00:57:29,860 --> 00:57:32,230 حرکت به نیمه سمت راست این لیست، 938 00:57:32,230 --> 00:57:36,480 و 3 نیز طبقه بندی شده اند، و بنابراین در حال حاضر که هر دو نیمه این لیست طبقه بندی شده اند 939 00:57:36,480 --> 00:57:39,080 ما می توانیم این اعداد را به هم ملحق شوند. 940 00:57:39,080 --> 00:57:45,320 بنابراین ما در 50 و 3، 3 از 50 کوچکتر است، بنابراین آن را برای اولین بار در می رود و پس از آن 50 می شوید. 941 00:57:45,320 --> 00:57:49,340 در حال حاضر، که انجام می شود، ما به عقب برویم تا به آن لیست و مرتب کردن بر اساس آن نیمه راست شده است. 942 00:57:49,340 --> 00:57:52,440 42 تعداد خود آن است، پس از آن در حال حاضر طبقه بندی شده اند. 943 00:57:52,440 --> 00:57:57,850 بنابراین در حال حاضر این مقایسه می کنیم 2 و 3 از 42 کوچکتر است، به طوری که می شود در اول قرار داده است، 944 00:57:57,850 --> 00:58:02,340 در حال حاضر 42 می شود در قرار داده است، و 50 می شود قرار داده شوید. 945 00:58:02,340 --> 00:58:07,220 در حال حاضر، که طبقه بندی شده اند، ما به تمام راه برگشت به بالا، 1337 و 15. 946 00:58:07,220 --> 00:58:14,560 خب، ما در حال حاضر در نیمه چپ این لیست نگاه کنید، 1337 توسط خود را پس از آن طبقه بندی شده اند و همین کار را با 15. 947 00:58:14,560 --> 00:58:19,020 بنابراین در حال حاضر این 2 عدد ترکیب که در لیست اولیه و 15 <سال 1337 تا مرتب کردن، 948 00:58:19,020 --> 00:58:23,060 پس از آن برای اولین بار در می رود، پس از آن 1337 می رود شوید. 949 00:58:23,060 --> 00:58:26,640 و در حال حاضر ما در هر دو نیمه از فهرست اصلی تا بالا طبقه بندی شده اند. 950 00:58:26,640 --> 00:58:30,440 و همه ما باید انجام دهیم این است که ترکیب این. 951 00:58:30,440 --> 00:58:36,890 ما در 2 عدد اول از این لیست، 3 15 <نگاه کنید، به طوری که آن را به آرایه مرتب سازی بر رود برای اولین بار است. 952 00:58:36,890 --> 00:58:44,460 15 <42، پس از آن می رود سایت شوید. حالا، 42 <1337، می رود که شوید. 953 00:58:44,460 --> 00:58:51,010 50 <1337، پس از آن می رود. توجه داشته باشید که ما فقط در زمان 2 تعداد از این لیست است. 954 00:58:51,010 --> 00:58:53,640 بنابراین ما نه تنها بین 2 لیست متناوب است. 955 00:58:53,640 --> 00:58:56,050 ما در ابتدا فقط به دنبال، و ما در حال در نظر گرفتن عنصر 956 00:58:56,050 --> 00:59:00,270 که کوچکتر و سپس قرار دادن آن در آرایه ما. 957 00:59:00,270 --> 00:59:04,080 حالا ما همه نیمه را با هم ادغام شدند و ما در حال انجام می شود. 958 00:59:04,080 --> 00:59:07,780 >> هرگونه سوال در مورد مرتب سازی بر ادغام؟ بله؟ 959 00:59:07,780 --> 00:59:14,190 [دانشجو] اگر آن را تقسیم به گروه های مختلف است، چرا که آنها نه تنها از آن تقسیم یک بار 960 00:59:14,190 --> 00:59:19,970 و شما باید 3 و 2 در یک گروه؟ [بقیه ناخوانا سوال] 961 00:59:19,970 --> 00:59:24,940 دلیل - بنابراین سوال این است، چرا ما نمی توانیم فقط آنها را به ادغام در آن مرحله اول بعد از اینکه ما آنها را؟ 962 00:59:24,940 --> 00:59:29,530 به این دلیل ما می توانیم این کار را انجام دهند، در عناصر چپ بیشتر از هر دو طرف شروع، 963 00:59:29,530 --> 00:59:33,040 و پس از آن یکی از کوچک و قرار دادن آن در این است که ما می دانیم این است که این 964 00:59:33,040 --> 00:59:35,290 لیست فردی در دستورات طبقه بندی شده اند. 965 00:59:35,290 --> 00:59:37,290 پس اگر من به دنبال عناصر چپ بیشتر از هر دو نیمه، 966 00:59:37,290 --> 00:59:40,490 من می دانم که آنها در حال رفتن به کوچکترین عناصر از آن فهرست است. 967 00:59:40,490 --> 00:59:43,930 بنابراین من می توانم آنها را به کوچکترین نقاط عنصر از این لیست بزرگ قرار داده است. 968 00:59:43,930 --> 00:59:47,810 از سوی دیگر، اگر من در آن 2 لیست در سطح دوم بیش از وجود دارد نگاه کنید، 969 00:59:47,810 --> 00:59:51,640 50، 3، 42، 1337 و 15، هستند کسانی که طبقه بندی شده اند نیست. 970 00:59:51,640 --> 00:59:55,770 بنابراین اگر من در 50 و 1337 نگاه کنید، من قصد دارم برای قرار دادن 50 به لیست من برای اولین بار. 971 00:59:55,770 --> 01:00:00,130 اما این واقعا ایجاد حس، چرا که 3 است که کوچکترین عنصر از همه از آن. 972 01:00:00,130 --> 01:00:04,390 بنابراین تنها به این دلیل که ما می توانیم از این مرحله ترکیب است، زیرا لیست ما در حال حاضر طبقه بندی شده اند. 973 01:00:04,390 --> 01:00:07,010 که به همین دلیل است که ما را به تمام راه را به پایین 974 01:00:07,010 --> 01:00:09,800 زیرا هنگامی که ما فقط یک عدد است، شما می دانید که یک عدد 975 01:00:09,800 --> 01:00:14,120 به خودی خود در حال حاضر یک لیست طبقه بندی شده اند. 976 01:00:14,120 --> 01:00:19,360 >> هر گونه سؤال؟ نه؟ 977 01:00:19,360 --> 01:00:24,260 پیچیدگی؟ خب، شما می توانید ببینید که در هر مرحله تعداد پایان وجود دارد، 978 01:00:24,260 --> 01:00:27,590 و ما می توانیم یک فهرست ورود نیمه N بار تقسیم، 979 01:00:27,590 --> 01:00:31,700 که جایی است که ما این ورود N X N پیچیدگی می باشد. 980 01:00:31,700 --> 01:00:34,940 و شما خواهید دید بهترین حالت برای مرتب سازی ادغام n log n استفاده، و آن را فقط اتفاق می افتد 981 01:00:34,940 --> 01:00:39,340 که بدترین حالت، یا Ω بیش از وجود دارد، نیز n log n استفاده است. 982 01:00:39,340 --> 01:00:42,480 چیزی به خاطر داشته باشید. 983 01:00:42,480 --> 01:00:45,750 حرکت، اجازه دهید به بعضی از فایل فوق العاده پایه I / O. 984 01:00:45,750 --> 01:00:48,830 اگر شما در تقلا نگاه کرد، شما متوجه خواهید شد که ما تا به حال برخی از مرتب کردن بر اساس سیستم 985 01:00:48,830 --> 01:00:51,270 که در آن شما می توانید به فایل ورود ارسال اگر شما را از طریق کد به عنوان خوانده شده. 986 01:00:51,270 --> 01:00:53,730 بیایید ببینید که چگونه شما ممکن است انجام این کار. 987 01:00:53,730 --> 01:00:57,450 خب، ما باید fprintf، که شما می توانید به عنوان تنها printf فکر می کنم، 988 01:00:57,450 --> 01:01:01,720 اما فقط به یک فایل چاپ به جای آن، و از این رو F در ابتدا. 989 01:01:01,720 --> 01:01:07,570 این نوع از کد بالا اینجا چه می کند این است که شما ممکن است در تقلا دیده می شود، 990 01:01:07,570 --> 01:01:12,310 آن را از طریق چاپ آرایه 2 بعدی کردن سطر سطر اعداد می رود. 991 01:01:12,310 --> 01:01:17,850 در این مورد، printf چاپ به ترمینال خود را و یا چیزی است که ما به خروجی استاندارد بخش است. 992 01:01:17,850 --> 01:01:22,170 >> و در حال حاضر، در این مورد، همه ما باید انجام دهیم این است که جایگزین printf با fprintf، 993 01:01:22,170 --> 01:01:26,770 بگو چه فایل شما می خواهید تا در آن چاپ شود، و در این مورد فقط آن را چاپ که به فایل 994 01:01:26,770 --> 01:01:32,230 به جای آن چاپ را به ترمینال شما. 995 01:01:32,230 --> 01:01:36,500 خب، پس از آن که begs سوال: از کجا می توانم این نوع از فایل های ما را از، درست است؟ 996 01:01:36,500 --> 01:01:39,840 ما گذشت وارد شوید به این fuction fprintf، اما ما تا به حال هیچ ایده آن از کجا آمده است. 997 01:01:39,840 --> 01:01:43,980 خب، در اوایل کد، آنچه ما تا به حال این قطعه از کد را در اینجا بود، 998 01:01:43,980 --> 01:01:48,340 که اساسا می گوید که باز کردن فایل log.txt می نامد. 999 01:01:48,340 --> 01:01:53,220 آنچه که ما انجام می دهیم، بعد از آن ما باید مطمئن شوید که این فایل در واقع با موفقیت افتتاح شد. 1000 01:01:53,220 --> 01:01:57,070 پس از آن ممکن است به دلایل مختلف شکست و فضای کافی بر روی کامپیوتر خود شما را نداشته باشند، به عنوان مثال. 1001 01:01:57,070 --> 01:01:59,790 پس از آن همیشه مهم است قبل از انجام هر گونه عملیات با فایل 1002 01:01:59,790 --> 01:02:03,300 که ما بررسی کنید که آیا فایل با موفقیت افتتاح شد. 1003 01:02:03,300 --> 01:02:09,330 بنابراین آنچه که یک، که یک بحث ها و منازعات را به fopen، خوب، ما می توانیم یک فایل را در بسیاری جهات باز است. 1004 01:02:09,330 --> 01:02:13,510 آنچه ما می توانیم انجام دهد، ما می توانیم آن W عبور، که به معنی نادیده گرفتن فایل اگر از خارج در حال حاضر، 1005 01:02:13,510 --> 01:02:18,070 ما می توانیم، منتقل می کند که آنها را به انتهای فایل اضافه به جای برجسته آن، 1006 01:02:18,070 --> 01:02:22,730 و یا ما می توانیم تحقیق، مشخص است که به این معنی است، اجازه دهید باز کردن فایل به عنوان خوانده شده فقط. 1007 01:02:22,730 --> 01:02:24,890 بنابراین اگر برنامه تلاش می کند تا هر گونه تغییرات در فایل. 1008 01:02:24,890 --> 01:02:30,140 در آنها داد و اجازه ندهید که آنها این کار را انجام. 1009 01:02:30,140 --> 01:02:33,320 در نهایت، زمانی که ما در حال با فایل انجام می شود انجام شده است، انجام عملیات بر روی آن، 1010 01:02:33,320 --> 01:02:35,860 ما نیاز داریم تا مطمئن شوید که فایل را نزدیک ما. 1011 01:02:35,860 --> 01:02:38,830 و بنابراین در پایان برنامه های خود را، شما در حال رفتن به آنها را به تصویب دوباره 1012 01:02:38,830 --> 01:02:42,120 این فایل که شما باز شده، و فقط آن را ببندید. 1013 01:02:42,120 --> 01:02:44,650 بنابراین این چیزی است که مهم است که شما باید مطمئن شوید که شما باید انجام دهید این است. 1014 01:02:44,650 --> 01:02:47,180 بنابراین به یاد داشته باشید شما می توانید یک فایل را باز کنید، سپس شما می توانید فایل ارسال 1015 01:02:47,180 --> 01:02:51,270 انجام عملیات در فایل، اما بعد از آن شما را مجبور به بستن فایل در پایان. 1016 01:02:51,270 --> 01:02:53,270 >> هر گونه سوال در مورد فایل ها پایه I / O؟ بله؟ 1017 01:02:53,270 --> 01:02:58,050 [سوال دانشجو، ناخوانا] 1018 01:02:58,050 --> 01:03:02,480 همینجا. سوال این است، که در آن به این فایل log.txt ظاهر می شود؟ 1019 01:03:02,480 --> 01:03:07,890 خب، اگر شما فقط آن را log.txt را، آن را در همان دایرکتوری به عنوان اجرایی ایجاد. 1020 01:03:07,890 --> 01:03:10,500 بنابراین اگر you're - >> [سوال دانشجو، ناخوانا] 1021 01:03:10,500 --> 01:03:18,830 بله. در همان پوشه، و یا در همان شاخه، به عنوان شما آن تماس بگیرید. 1022 01:03:18,830 --> 01:03:21,400 در حال حاضر حافظه، پشته، پشته و. 1023 01:03:21,400 --> 01:03:23,400 پس چگونه است که حافظه در کامپیوتر گذاشته؟ 1024 01:03:23,400 --> 01:03:26,270 خب، شما می توانید حافظه به عنوان مرتب کردن بر اساس از این بلوک در اینجا قابل تصور است. 1025 01:03:26,270 --> 01:03:30,260 و در حافظه به نام پشته گیر بیش از وجود دارد، و پشته که در پایین وجود دارد. 1026 01:03:30,260 --> 01:03:34,480 و پشته رو به پایین رشد می کند و پشته به سمت بالا رشد می کند. 1027 01:03:34,480 --> 01:03:38,620 بنابراین به عنوان تامی ذکر شده - اوه، خوب، و ما باید این 4 بخش که من در یک ثانیه - 1028 01:03:38,620 --> 01:03:42,890 همانطور که تامی گفت: پیش از این، شما می دانید که چگونه توابع را بخواند خود و تماس با یکدیگر؟ 1029 01:03:42,890 --> 01:03:44,930 آنها در ساخت این نوع قاب پشته. 1030 01:03:44,930 --> 01:03:47,360 خوب، اگر تماس های اصلی صنایع غذایی، صنایع غذایی می شود را بر روی پشته قرار داده شده است. 1031 01:03:47,360 --> 01:03:52,430 FOO خواستار نوار، نوار را در پشته قرار داده، و این که می شود در پشته پس از قرار داده شده است. 1032 01:03:52,430 --> 01:03:57,040 و بازگشت آنها، آنها هر یک از دریافت برداشته پشته. 1033 01:03:57,040 --> 01:04:00,140 چه هر یک از این مکان ها و حافظه نگه دارید؟ 1034 01:04:00,140 --> 01:04:03,110 خوب، بالا، است که در بخش متن، شامل خود برنامه است. 1035 01:04:03,110 --> 01:04:06,390 بنابراین کد ماشین، که وجود دارد، یک بار برنامه شما کامپایل. 1036 01:04:06,390 --> 01:04:08,520 در مرحله بعد، هر مقداردهی اولیه متغیر های جهانی شده است. 1037 01:04:08,520 --> 01:04:12,660 >> بنابراین شما باید متغیرهای سراسری را در برنامه خود را، و شما مانند، 5 = می گویند، 1038 01:04:12,660 --> 01:04:15,260 می شود که در آن بخش قرار داده شده است، و درست در زیر آن، 1039 01:04:15,260 --> 01:04:18,990 شما باید هر گونه اطلاعات آماده سازی جهانی، است که فقط INT، 1040 01:04:18,990 --> 01:04:20,990 اما شما می گویند نیست آن را به هر چیزی برابر است. 1041 01:04:20,990 --> 01:04:23,870 تحقق این متغیرهای جهانی، به طوری که آنها در خارج از بخش اصلی است. 1042 01:04:23,870 --> 01:04:28,560 پس این به این معنی هر متغیر های جهانی که اعلام شده اما مقداردهی نشده است. 1043 01:04:28,560 --> 01:04:32,310 بنابراین آنچه در پشته؟ حافظه اختصاص داده شده با استفاده از malloc کنیم که در کمی. 1044 01:04:32,310 --> 01:04:35,990 و در نهایت، با استفاده از پشته شما باید متغیرهای محلی 1045 01:04:35,990 --> 01:04:39,950 و هر عملکردهای شما ممکن است در هر یک از پارامترهای خود تماس بگیرید. 1046 01:04:39,950 --> 01:04:43,720 آخرین چیزی که شما واقعا نمی باید بدانید که چه متغیر های محیط زیست انجام، 1047 01:04:43,720 --> 01:04:46,700 اما هر زمان که شما برای اجرای برنامه، چیزی است که در ارتباط وجود دارد، مانند 1048 01:04:46,700 --> 01:04:49,550 این نام کاربری کسی که فرار این برنامه است. 1049 01:04:49,550 --> 01:04:51,550 و این رفتن به مرتب کردن بر اساس در پایین. 1050 01:04:51,550 --> 01:04:54,540 در شرایط استفاده از آدرس حافظه، که مقادیر هگزادسیمال، 1051 01:04:54,540 --> 01:04:58,170 ارزش در شروع بالا در 0، و آنها را به تمام راه را به پایین. 1052 01:04:58,170 --> 01:05:00,440 در این مورد، اگر شما بر روی سیستم 32 بیتی هستید، 1053 01:05:00,440 --> 01:05:05,390 آدرس در پایین برای رفتن به 0x، AF، چرا که 32 بیت، 1054 01:05:05,390 --> 01:05:10,890 که 8 کلمه در ادامه متن می باشد، و در این مورد 8 کلمه در ادامه متن مربوط به 8 رقم هگزادسیمال است. 1055 01:05:10,890 --> 01:05:20,110 تا پایین در اینجا شما قصد داشته باشد، دوست دارم، 0xffffff، و بالا وجود دارد شما در حال رفتن به: 0. 1056 01:05:20,110 --> 01:05:23,660 پس چه هستند اشاره گر؟ برخی از شما ممکن است این در بخش پوشش داده نمی شوند، قبل از. 1057 01:05:23,660 --> 01:05:26,660 اما ما بیش از آن سخنرانی، یک اشاره گر است که فقط یک نوع داده 1058 01:05:26,660 --> 01:05:34,030 است که فروشگاه، به جای استفاده از برخی از مرتب کردن بر اساس ارزش مانند 50، آدرس برخی از محل در حافظه آن ذخیره است. 1059 01:05:34,030 --> 01:05:36,020 مانند حافظه [ناخوانا]. 1060 01:05:36,020 --> 01:05:41,120 بنابراین در این مورد، چیزی است که ما داشته باشد، ما باید یک اشاره گر به یک عدد صحیح و یا نوع int *، 1061 01:05:41,120 --> 01:05:46,210 و آن را شامل این آدرس هگزادسیمال 0xDEADBEEF. 1062 01:05:46,210 --> 01:05:50,880 >> بنابراین آنچه که ما داریم، در حال حاضر، این اشاره در برخی از نوشته ها در حافظه، 1063 01:05:50,880 --> 01:05:56,020 و فقط، مقدار 50 در این محل حافظه است. 1064 01:05:56,020 --> 01:06:01,810 در برخی از سیستم های 32 بیتی، بر روی تمام سیستم های 32 بیتی، اشاره گر را تا بیت 32 یا 4 بایت است. 1065 01:06:01,810 --> 01:06:06,020 اما، برای مثال، در یک سیستم 64 بیتی، اشاره گر 64 بیت هستند. 1066 01:06:06,020 --> 01:06:08,040 به طوری که چیزی است که شما می خواهید در ذهن داشته باشیم. 1067 01:06:08,040 --> 01:06:12,310 بنابراین در سیستم نهایی بیتی، یک اشاره گر به بیت پایان طولانی است. 1068 01:06:12,310 --> 01:06:17,320 اشاره گرها مرتب سازی بر اساس سخت هضم هستند بدون چیزهای اضافی، 1069 01:06:17,320 --> 01:06:20,300 بنابراین از طریق یک مثال از تخصیص حافظه پویا. 1070 01:06:20,300 --> 01:06:25,130 تخصیص حافظه پویا برای شما، و یا آنچه ما تماس بگیرید malloc، 1071 01:06:25,130 --> 01:06:29,280 به شما اجازه می دهد تا شما اختصاص برخی از مرتب کردن بر اساس داده ها را در خارج از مجموعه. 1072 01:06:29,280 --> 01:06:31,830 بنابراین این داده ها مرتب سازی بر اساس بیش دائمی در طول مدت این برنامه است. 1073 01:06:31,830 --> 01:06:36,430 چون همانطور که می دانید، اگر x در داخل یک تابع است، و این که بازده عملکرد شما اعلام، 1074 01:06:36,430 --> 01:06:40,910 شما دیگر لازم نیست دسترسی به داده ها که در X ذخیره شده بود. 1075 01:06:40,910 --> 01:06:44,420 اشاره گر اجازه ما انجام می دهید این است که آنها ارزش ذخیره حافظه و یا فروشگاه تماس با ما 1076 01:06:44,420 --> 01:06:46,840 در بخش های مختلف حافظه، یعنی پشته. 1077 01:06:46,840 --> 01:06:49,340 در حال حاضر زمانی که ما به بازگشت از تابع، تا زمانی که ما یک اشاره گر 1078 01:06:49,340 --> 01:06:54,960 به آن محل در حافظه، پس از آن چیزی است که ما می توانیم انجام دهیم این است که ما فقط می تواند در ارزش وجود دارد نگاه کنید. 1079 01:06:54,960 --> 01:06:58,020 اجازه دهید نگاهی به یک مثال: این قالب قرار گیری حافظه ما دوباره است. 1080 01:06:58,020 --> 01:07:00,050 و ما باید این تابع اصلی است. 1081 01:07:00,050 --> 01:07:06,870 چه میکند - خوب، بسیار ساده، راست - نوع int x = 5، که تنها یک متغیر را بر روی پشته در اصلی. 1082 01:07:06,870 --> 01:07:12,450 >> در سوی دیگر، در حال حاضر یک اشاره گر است که خواستار giveMeThreeInts تابع را ما اعلام می کنیم. 1083 01:07:12,450 --> 01:07:16,800 و بنابراین در حال حاضر ما به این تابع بروید و یک قاب پشته جدیدی را برای آن ایجاد می کنیم. 1084 01:07:16,800 --> 01:07:20,440 با این حال، در این قاب پشته، ما اعلام می کنیم هوشمند * موقت، 1085 01:07:20,440 --> 01:07:23,210 که در mallocs 3 عدد صحیح برای ما. 1086 01:07:23,210 --> 01:07:25,880 بنابراین اندازه از نوع int به ما خواهد گفت که چگونه بسیاری از بایت این نوع int است. 1087 01:07:25,880 --> 01:07:29,620 و malloc به ما می دهد که بسیاری از بایت فضا در پشته. 1088 01:07:29,620 --> 01:07:32,890 بنابراین در این مورد، ما باید ایجاد فضای کافی برای 3 اعداد صحیح، 1089 01:07:32,890 --> 01:07:36,830 و راه پشته است تا وجود دارد، به همین دلیل است که من آن را کشیده بالاتر است. 1090 01:07:36,830 --> 01:07:42,900 هنگامی که ما در حال انجام می شود، ما آمده ایم تا در اینجا، شما تنها نیاز به 3 نوع داده int بازگشت، 1091 01:07:42,900 --> 01:07:47,000 و آن آدرس را بر می گرداند، در این مورد بیش از جایی که حافظه است. 1092 01:07:47,000 --> 01:07:51,250 و ما به مجموعه ای اشاره گر = سوئیچ، و بالا وجود دارد ما باید فقط یک اشاره گر است. 1093 01:07:51,250 --> 01:07:54,550 اما آنچه که بازده عملکرد انباشته اینجا و از بین می رود. 1094 01:07:54,550 --> 01:07:59,250 بنابراین دما از بین می رود، اما ما هنوز هم حفظ آدرس از جایی که 1095 01:07:59,250 --> 01:08:01,850 کسانی که 3 عدد صحیح در داخل برق هستند. 1096 01:08:01,850 --> 01:08:06,180 بنابراین در این مجموعه، اشاره گر scoped محلی برای قاب انباشته، 1097 01:08:06,180 --> 01:08:09,860 اما از حافظه که به آن اشاره شده است در پشته. 1098 01:08:09,860 --> 01:08:12,190 >> آیا این را حس؟ 1099 01:08:12,190 --> 01:08:14,960 [دانشجو] آیا می توانید تکرار کنید که؟ >> [جوزف] بله. 1100 01:08:14,960 --> 01:08:20,270 بنابراین اگر من فقط یک کمی به عقب برگردید، می بینید که موقت اختصاص داده شده 1101 01:08:20,270 --> 01:08:23,500 برخی از حافظه در پشته وجود دارد تا. 1102 01:08:23,500 --> 01:08:28,680 بنابراین زمانی که این تابع، بازده giveMeThreeInts، این پشته در اینجا رفتن به ناپدید می شوند. 1103 01:08:28,680 --> 01:08:35,819 و با آن هر یک از متغیرها، در این مورد، این اشاره گر که در قاب انباشته اختصاص داده شده است. 1104 01:08:35,819 --> 01:08:39,649 است که رفتن به ناپدید می شوند، اما از آنجایی که ما به بازگشت موقت 1105 01:08:39,649 --> 01:08:46,330 و ما مجموعه = دما، اشاره گر اشاره گر در حال حاضر به نقطه حافظه همان محل به عنوان موقت بود. 1106 01:08:46,330 --> 01:08:50,370 بنابراین در حال حاضر، حتی اگر ما از دست دادن موقت، که اشاره گر محلی، 1107 01:08:50,370 --> 01:08:59,109 ما هنوز آدرس حافظه را از آنچه در آن بود با اشاره به داخل که اشاره گر متغیر را حفظ کنید. 1108 01:08:59,109 --> 01:09:03,740 پرسش و پاسخ؟ است که می تواند نوع یک موضوع گیج کننده است اگر شما بیش از آن در بخش رفته است. 1109 01:09:03,740 --> 01:09:09,240 ما می توانیم، TF شما قطعا بیش از آن و البته ما می توانند به پرسش 1110 01:09:09,240 --> 01:09:11,500 در پایان جلسه بررسی برای این است. 1111 01:09:11,500 --> 01:09:14,220 اما این نوع از یک موضوع پیچیده است، و من نمونه های که در حال رفتن به نشان می دهد تا 1112 01:09:14,220 --> 01:09:18,790 کمک خواهد کرد که به روشن کردن آنچه که اشاره گر در واقع. 1113 01:09:18,790 --> 01:09:22,500 >> در این مورد، اشاره گرها معادل آرایه، 1114 01:09:22,500 --> 01:09:25,229 بنابراین من فقط می تواند از این اشاره گر به عنوان همان چیزی که به عنوان یک آرایه از نوع int استفاده کنید. 1115 01:09:25,229 --> 01:09:29,840 بنابراین من نمایه سازی را به 0، در حال تغییر و اولین عدد صحیح تا 1، 1116 01:09:29,840 --> 01:09:39,689 تغییر دومین عدد صحیح را به 2 و عدد صحیح 3 به 3 است. 1117 01:09:39,689 --> 01:09:44,210 بنابراین بیشتر در مورد اشاره گر است. خب، به یاد Binky. 1118 01:09:44,210 --> 01:09:48,319 در این مورد ما اختصاص داده ام یک اشاره گر، یا اعلام یک اشاره گر، 1119 01:09:48,319 --> 01:09:52,760 اما در ابتدا، وقتی که من فقط یک اشاره گر اعلام کرد، آن را به هر نقطه در حافظه اشاره نمی شود. 1120 01:09:52,760 --> 01:09:54,930 این فقط ارزش زباله در داخل آن است. 1121 01:09:54,930 --> 01:09:56,470 بنابراین من هیچ نظری ندارم که این اشاره گر با اشاره به. 1122 01:09:56,470 --> 01:10:01,630 این دارای یک آدرس است که فقط پر از 0 و 1 که در آن در ابتدا اعلام شد. 1123 01:10:01,630 --> 01:10:04,810 من می تواند هر چیزی را با این کار تا زمانی که من اسمش malloc بر روی آن 1124 01:10:04,810 --> 01:10:08,390 و سپس آن را به من می دهد یک فضای کوچک بر روی پشته که در آن من می توانم ارزش در داخل قرار داده است. 1125 01:10:08,390 --> 01:10:11,980 سپس دوباره، من نمی دانم چه چیزی در داخل این حافظه است. 1126 01:10:11,980 --> 01:10:16,780 پس اولین کاری که من باید انجام دهید این است که بررسی کنید که آیا این سیستم دارای حافظه کافی 1127 01:10:16,780 --> 01:10:20,850 به من 1 عدد صحیح در وهله اول، به همین دلیل است که من انجام این کار را بررسی کنید. 1128 01:10:20,850 --> 01:10:25,020 اگر اشاره گر تهی است، که بدان معنی است که فضای کافی و یا برخی از خطا رخ داده است، 1129 01:10:25,020 --> 01:10:26,320 بنابراین من باید خروج از برنامه. 1130 01:10:26,320 --> 01:10:29,400  اما اگر موفق بود، در حال حاضر من می توانم که اشاره گر استفاده کنید 1131 01:10:29,400 --> 01:10:35,020 و آنچه اشاره گر * آیا به شرح زیر است که در آن آدرس است 1132 01:10:35,020 --> 01:10:38,480 به جایی که ارزش ها است و آن را به 1 برابر است. 1133 01:10:38,480 --> 01:10:41,850 بنابراین در اینجا، ما در حال بررسی در صورتی که حافظه وجود داشته است. 1134 01:10:41,850 --> 01:10:45,380 >> هنگامی که شما می دانید که وجود دارد، شما می توانید به آن قرار داده است 1135 01:10:45,380 --> 01:10:50,460 چه مقدار می خواهید به آن قرار داده است، در این مورد 1. 1136 01:10:50,460 --> 01:10:53,060 هنگامی که ما با آن انجام می شود، شما نیاز به رایگان است که اشاره گر 1137 01:10:53,060 --> 01:10:57,160 زیرا ما نیاز به برگشت به سیستمی است که حافظه است که شما را در وهله اول خواستم. 1138 01:10:57,160 --> 01:10:59,690 از آنجا که کامپیوتر نمی داند زمانی که ما با آن انجام می شود. 1139 01:10:59,690 --> 01:11:02,510 در این مورد ما به صراحت به آن گفتن، خوب، ما که با حافظه انجام شده است. 1140 01:11:02,510 --> 01:11:10,780 اگر برخی از فرآیند دیگر به آن نیاز دارد، برخی از برنامه های دیگر به آن نیاز دارد، به جلو بروید و آن را احساس می کنید. 1141 01:11:10,780 --> 01:11:15,110 چیزی که ما نیز می توانید انجام دهید این است که ما فقط می توانید آدرس متغیرهای محلی در مجموعه است. 1142 01:11:15,110 --> 01:11:19,080 بنابراین اعضای هیات ایکس است در داخل قاب انباشته اصلی. 1143 01:11:19,080 --> 01:11:23,060 و زمانی که ما در استفاده از این علامت، و این اپراتور، می کند آنچه در آن است 1144 01:11:23,060 --> 01:11:27,310 آن طول می کشد x، و X است که فقط بعضی از داده ها در حافظه است، اما آن را تا به آدرس. 1145 01:11:27,310 --> 01:11:33,790 آن را در جایی قرار گرفته است. بنابراین با تماس و x، چه این امر آن است که به ما می دهد آدرس X است. 1146 01:11:33,790 --> 01:11:38,430 با انجام این کار، ما در حال ساخت نقطه اشاره گر به جایی که x در حافظه است. 1147 01:11:38,430 --> 01:11:41,710 در حال حاضر ما فقط چیزی شبیه * x، ما در حال رفتن به دریافت 5 بازگشت. 1148 01:11:41,710 --> 01:11:43,820 ستاره نامیده می شود، بصورت غیر مرجع آن. 1149 01:11:43,820 --> 01:11:46,640 شما به دنبال آدرس و شما می توانید مقدار آن ذخیره می شود وجود دارد. 1150 01:11:51,000 --> 01:11:53,310 >> هر گونه سؤال؟ بله؟ 1151 01:11:53,310 --> 01:11:56,500 [دانشجو] اگر شما 3 اشاره کرد چیز را انجام نمی، آیا آن را هنوز هم کامپایل؟ 1152 01:11:56,500 --> 01:11:59,490 بله. اگر شما چیزی 3 اشاره گر انجام نمی، آن را هنوز هم به کامپایل، 1153 01:11:59,490 --> 01:12:02,720 اما من شما را از آنچه اتفاق می افتد در یک ثانیه نشان می دهد، و بدون انجام این کار، 1154 01:12:02,720 --> 01:12:04,860 این چیزی است که ما به نشت حافظه است. شما به سیستم 1155 01:12:04,860 --> 01:12:07,850 پشت حافظه خود را، به طوری که پس از در حالی که برنامه در حال رفتن به جمع آوری 1156 01:12:07,850 --> 01:12:10,940 حافظه است که آن را با استفاده از نیست، و هیچ چیز دیگری می تواند از آن استفاده کنید. 1157 01:12:10,940 --> 01:12:15,750 اگر تا کنون فایرفاکس با 1.5 میلیون کیلوبایت بر روی کامپیوتر شما دیده می شود، 1158 01:12:15,750 --> 01:12:17,840 در Task Manager، که چه خبر است. 1159 01:12:17,840 --> 01:12:20,760 شما باید نشت حافظه در این برنامه که آنها را در حال دست زدن نیست. 1160 01:12:23,080 --> 01:12:26,240 پس چگونه اشاره گر کار حسابی؟ 1161 01:12:26,240 --> 01:12:29,480 خب، ریاضی اشاره گر نوع نمایه سازی شبیه به یک آرایه است. 1162 01:12:29,480 --> 01:12:36,370 در این مورد، من یک اشاره گر، و آنچه که من انجام می دهم این است که من را نقطه اشاره گر به اولین عنصر 1163 01:12:36,370 --> 01:12:42,100 این مجموعه شامل 3 عدد صحیح است که من اختصاص داده شده است. 1164 01:12:42,100 --> 01:12:46,670 بنابراین در حال حاضر آنچه که من انجام می دهند، اشاره گر ستاره فقط تغییر این عنصر برای اولین بار در این فهرست است. 1165 01:12:46,670 --> 01:12:49,140 ستاره اشاره گر +1 در اینجا. 1166 01:12:49,140 --> 01:12:53,140 پس اشاره گر است در اینجا، اشاره گر +1 در اینجا، اشاره گر +2 می باشد در اینجا. 1167 01:12:53,140 --> 01:12:56,610 >> پس فقط با اضافه کردن 1 همان حرکت در طول این آرایه است. 1168 01:12:56,610 --> 01:12:59,880 آنچه ما انجام می دهیم این است، زمانی که ما انجام می دهیم اشاره گر 1 شما می توانید از آدرس در اینجا، 1169 01:12:59,880 --> 01:13:04,180 و به منظور به دست آوردن ارزش در اینجا، شما یک ستاره در کل بیان قرار داده است 1170 01:13:04,180 --> 01:13:05,990 به آن dereference. 1171 01:13:05,990 --> 01:13:09,940 بنابراین، در این مورد، من تعیین محل برای اولین بار در این آرایه تا 1، 1172 01:13:09,940 --> 01:13:13,970 مکان دوم به 2، و مکان سوم به 3 است. 1173 01:13:13,970 --> 01:13:18,180 پس آنچه که من انجام می دهند در اینجا این است که من چاپ اشاره گر ما 1 1174 01:13:18,180 --> 01:13:19,970 که فقط به من می دهد 2. 1175 01:13:19,970 --> 01:13:23,650 در حال حاضر من افزایش اشاره گر، به طوری که اشاره گر به اشاره گر برابر با 1، 1176 01:13:23,650 --> 01:13:26,780 که به جلو حرکت می کند. 1177 01:13:26,780 --> 01:13:30,810 و به این ترتیب در حال حاضر اگر من نسخه قابل چاپ کردن اشاره گر 1، اشاره گر در حال حاضر +1 3، 1178 01:13:30,810 --> 01:13:33,990 که در این مورد چاپ 3. 1179 01:13:33,990 --> 01:13:36,560 و در را به چیزی، اشاره گر است که من آن را 1180 01:13:36,560 --> 01:13:40,540 باید اشاره در آغاز از آرایه که من از malloc کردم. 1181 01:13:40,540 --> 01:13:43,430 بنابراین، در این مورد، اگر من به تماس 3 حق در اینجا، این را نمی خواهد حق 1182 01:13:43,430 --> 01:13:45,070 زیرا آن را در وسط آرایه است. 1183 01:13:45,070 --> 01:13:48,820 من را به جمع و تفریق برای رسیدن به محل اصلی 1184 01:13:48,820 --> 01:13:50,420 نقطه اولیه برای اولین بار قبل از من می توانم این برنامه رایگان است. 1185 01:13:56,300 --> 01:13:58,450 بنابراین، در اینجا یک مثال بیشتر درگیر است. 1186 01:13:58,450 --> 01:14:03,360 در این مورد، ما در حال تخصیص 7 کاراکتر در آرایه شخصیت. 1187 01:14:03,360 --> 01:14:06,480 >> و در این مورد آنچه ما انجام می دهیم این است که ما در حال حلقه بیش از 6 نخست از آنها، 1188 01:14:06,480 --> 01:14:09,900 و ما آنها را تنظیم Z. 1189 01:14:09,900 --> 01:14:13,350 بنابراین، برای اعضای هیات من = 0، من> 6، من + +، 1190 01:14:13,350 --> 01:14:16,220 بنابراین، اشاره گر + من فقط به ما خواهد گفت، به در این مورد، 1191 01:14:16,220 --> 01:14:20,860 اشاره گر، اشاره گر به اشاره گر +1، +2، اشاره گر +3، و غیره و غیره در حلقه. 1192 01:14:20,860 --> 01:14:24,040 آنچه در آن به انجام آن می شود که آدرس، ارجاع میدهد آن را به مقدار 1193 01:14:24,040 --> 01:14:27,440 و تغییراتی که در ارزش به زهرا 1194 01:14:27,440 --> 01:14:30,350 سپس در پایان به یاد داشته باشید این است که یک رشته است، درست است؟ 1195 01:14:30,350 --> 01:14:33,560 تمام رشته کاراکتر تهی پایان پایان است. 1196 01:14:33,560 --> 01:14:38,620 بنابراین، آنچه که من انجام می دهم این است در اشاره گر 6 من قرار تهی شخصیت ترمیناتور شوید. 1197 01:14:38,620 --> 01:14:43,980 و در حال حاضر آنچه که من اساسا انجام این کار در اینجا است که اجرای printf برای یک رشته، درست است؟ 1198 01:14:43,980 --> 01:14:46,190 >> بنابراین، هنگامی که می کند printf در حال حاضر زمانی که آن را به انتهای یک رشته؟ 1199 01:14:46,190 --> 01:14:48,230 هنگامی که آن را بازدید شخصیت تهی فسخ. 1200 01:14:48,230 --> 01:14:52,030 بنابراین، در این مورد، اشاره اصلی به آغاز این آرایه است. 1201 01:14:52,030 --> 01:14:56,410 من چاپ اولین کاراکتر است. من از آن حرکت می کند بیش از یک. 1202 01:14:56,410 --> 01:14:58,420 من نسخه قابل چاپ است که شخصیت. من از آن حرکت بیش از. 1203 01:14:58,420 --> 01:15:02,180 و من در حفظ و انجام این کار تا پایان برسد. 1204 01:15:02,180 --> 01:15:07,750 و در حال حاضر در پایان اشاره گر * dereference این و کاراکتر تهی پایان. 1205 01:15:07,750 --> 01:15:11,780 و به این ترتیب حلقه در حالی که من اجرا می شود تنها زمانی که ارزش شخصیت فسخ تهی نیست. 1206 01:15:11,780 --> 01:15:13,770 بنابراین، در حال حاضر من در خروج از این حلقه است. 1207 01:15:18,780 --> 01:15:21,180 و بنابراین اگر 6 من از این اشاره گر تفریق، 1208 01:15:21,180 --> 01:15:22,860 بازگشت به ابتدای. 1209 01:15:22,860 --> 01:15:27,880 به یاد داشته باشید، من برای انجام این کار به خاطر اینکه من را برای رفتن به ابتدای این برنامه رایگان است. 1210 01:15:27,880 --> 01:15:30,270 >> بنابراین، من می دانم که بسیاری بود. آیا هر گونه سؤال وجود دارد؟ 1211 01:15:30,270 --> 01:15:31,870 خواهش می کنم، بله؟ 1212 01:15:31,870 --> 01:15:36,610 [ناخوانا سوال دانشجویی] 1213 01:15:36,610 --> 01:15:38,190 که به شما می گویند بلندتر؟ متأسفم. 1214 01:15:38,190 --> 01:15:44,140 [دانشجو] آخرین اسلاید درست قبل از آزاد اشاره گر، 1215 01:15:44,140 --> 01:15:47,300 که در آن شما در واقع در حال تغییر ارزش از اشاره گر؟ 1216 01:15:47,300 --> 01:15:50,370 [جوزف] بنابراین، در اینجا ببینید. >> [دانشجو] اوه، درست است. 1217 01:15:50,370 --> 01:15:51,890 [جوزف] بنابراین، من یک اشاره گر منهای منفی، درست است، 1218 01:15:51,890 --> 01:15:54,140 که حرکت چیزی پشت، و سپس آن را آزاد من، 1219 01:15:54,140 --> 01:15:57,000 چرا که این اشاره گر را به ابتدای آرایه اشاره کرد. 1220 01:15:57,000 --> 01:16:00,420 [دانشجو] اما این امر می تواند به نه مورد نیاز بود و شما بعد از آن خط متوقف شده است. 1221 01:16:00,420 --> 01:16:03,130 [جوزف] بنابراین، اگر من پس از این متوقف شده بود، که این امر در نظر گرفته شود نشت حافظه، 1222 01:16:03,130 --> 01:16:04,810 به خاطر من آزاد اجرا کنید. 1223 01:16:04,810 --> 01:16:11,290 [دانشجو] I [ناخوانا] پس از سه خط اول جایی که شما تا به حال اشاره گر 1 [ناخوانا]. 1224 01:16:11,290 --> 01:16:13,140 [جوزف] اوهو. بنابراین، آنچه این سوال وجود دارد؟ 1225 01:16:13,140 --> 01:16:14,780 متأسفم. نه، نه. برو، برو، لطفا. 1226 01:16:14,780 --> 01:16:16,870 [دانشجو] بنابراین، شما مقدار اشاره گر تغییر نیست. 1227 01:16:16,870 --> 01:16:19,130 شما می توانید به حال به انجام این کار اشاره گر منهای منفی است. 1228 01:16:19,130 --> 01:16:19,730 [جوزف] بله، دقیقا. 1229 01:16:19,730 --> 01:16:21,890 بنابراین، وقتی که من می توانم اشاره گر +1 و اشاره گر +2، 1230 01:16:21,890 --> 01:16:24,410 من اشاره گر انجام نمی برابر اشاره گر 1. 1231 01:16:24,410 --> 01:16:27,260 بنابراین، اشاره گر فقط می ماند اشاره در آغاز از آرایه. 1232 01:16:27,260 --> 01:16:31,460 این تنها زمانی که من به علاوه به علاوه که از آن مجموعه ارزش در داخل اشاره گر، 1233 01:16:31,460 --> 01:16:33,550 که آن را در واقع حرکت می کند این همراه است. 1234 01:16:36,860 --> 01:16:37,780 بسیار خوب. 1235 01:16:40,550 --> 01:16:42,030 بیشتر است؟ 1236 01:16:44,680 --> 01:16:47,790 >> باز هم، اگر این نوع از قریب به اتفاق، این خواهد شد در جلسه پوشانده شده است. 1237 01:16:47,790 --> 01:16:50,710 همکار تدریس خود را در مورد آن بپرسید، و ما می توانیم در پایان پاسخ. 1238 01:16:53,510 --> 01:16:56,600 و معمولا ما دوست ندارم این چیز منفی به انجام. 1239 01:16:56,600 --> 01:16:59,760 این امر نیاز به پیگیری چقدر من در آرایه افست. 1240 01:16:59,760 --> 01:17:04,520 بنابراین، به طور کلی، این است که فقط به توضیح دهید که چگونه با این نسخهها کار های محاسباتی اشاره گر است. 1241 01:17:04,520 --> 01:17:07,970 اما چیزی که ما معمولا می خواهم به انجام این کار ما می خواهم برای ایجاد یک کپی از اشاره گر است، 1242 01:17:07,970 --> 01:17:11,640 و پس از آن خواهیم کرد که نسخه زمانی که ما در حال حرکت در اطراف رشته استفاده کنید. 1243 01:17:11,640 --> 01:17:14,660 بنابراین، در این مورد شما با استفاده از نسخه به چاپ کل رشته، 1244 01:17:14,660 --> 01:17:19,040 اما ما مجبور به مانند اشاره گر منهای 6 یا پیگیری چقدر ما در این نقل مکان کرد، 1245 01:17:19,040 --> 01:17:22,700 فقط به خاطر اینکه ما می دانیم که نقطه اصلی ما این است که هنوز هم با اشاره به آغاز از لیست 1246 01:17:22,700 --> 01:17:25,340 و همه آن چه ما را تغییر داده است این نسخه بود. 1247 01:17:25,340 --> 01:17:28,250 بنابراین، به طور کلی، تغییر کپی از اشاره گر اصلی خود را. 1248 01:17:28,250 --> 01:17:32,350 سعی نکنید به مانند مرتب سازی بر اساس - don't تغییر نسخه اصلی. 1249 01:17:32,350 --> 01:17:35,290 تلاش به تغییر نسخه تنها اصلی خود را. 1250 01:17:41,540 --> 01:17:44,870 بنابراین، شما متوجه هنگامی که ما با تصویب رشته را به printf 1251 01:17:44,870 --> 01:17:48,990 شما لازم نیست که یک ستاره را در مقابل آن قرار داده است مانند ما با دیگر ارجاع میدهد، درست است؟ 1252 01:17:48,990 --> 01:17:54,180 بنابراین، اگر شما نسخه قابل چاپ کردن کل رشته از٪ s انتظار یک آدرس است. 1253 01:17:54,180 --> 01:17:57,610 و در این مورد یک اشاره گر و یا در این مورد مانند آرایه ای از کاراکتر ها است. 1254 01:17:57,610 --> 01:18:00,330 >> شخصیت، کاراکتر *، و آرایه های همین. 1255 01:18:00,330 --> 01:18:03,690 اشاره گر به کاراکتر ها، و آرایه های شخصیت همان چیزی هستند. 1256 01:18:03,690 --> 01:18:05,720 و بنابراین، همه ما باید انجام دهیم این است که در اشاره گر منتقل می شود. 1257 01:18:05,720 --> 01:18:08,150 ما لازم نیست که به مانند اشاره گر * و یا هر چیزی شبیه به آن منتقل می کند. 1258 01:18:13,110 --> 01:18:14,930 بنابراین، آرایه ها و اشاره گر ها همین. 1259 01:18:14,930 --> 01:18:19,160 هنگامی که شما در حال انجام چیزی شبیه به X [Y] در اینجا یک آرایه، 1260 01:18:19,160 --> 01:18:21,960 آنچه که آن را در زیر هود انجام آن را گفت، خوب، آن یک آرایه شخصیت، 1261 01:18:21,960 --> 01:18:23,690 پس از آن یک اشاره گر است. 1262 01:18:23,690 --> 01:18:26,510 و به این ترتیب X هستند هم همین است، 1263 01:18:26,510 --> 01:18:28,650 و بنابراین آنچه که آن را نشانی از آن می افزاید: از Y به X است، 1264 01:18:28,650 --> 01:18:31,820 است که همان حرکت رو به جلو در حافظه که بسیار است. 1265 01:18:31,820 --> 01:18:34,930 و در حال حاضر X + Y به ما می دهد برخی از مرتب کردن بر اساس آدرس 1266 01:18:34,930 --> 01:18:37,570 و ما dereference آدرس و یا به دنبال فلش 1267 01:18:37,570 --> 01:18:41,640 به جایی که محل سکونت در حافظه است و ما مقدار از آن محل در حافظه است. 1268 01:18:41,640 --> 01:18:43,720 بنابراین، به طوری که این دو دقیقا همان چیزی که هستند. 1269 01:18:43,720 --> 01:18:45,840 این فقط یک قند نحوی. 1270 01:18:45,840 --> 01:18:48,090 آنها همان چیزی. آنها فقط به نحو های مختلف برای هر یک از دیگر. 1271 01:18:51,500 --> 01:18:57,590 >> بنابراین، آنچه می تواند به اشتباه با اشاره گر؟ مانند، بسیاری. باشه. بنابراین، همه چیز بد است. 1272 01:18:57,590 --> 01:19:02,410 برخی از چیزهای بد که شما می توانید انجام دهید در حال بررسی نیست اگر malloc تماس خود را تهی می گرداند، درست است؟ 1273 01:19:02,410 --> 01:19:06,560 در این مورد، من پرسیدن این سیستم را به من بدهد - چه چیزی است که تعداد؟ 1274 01:19:06,560 --> 01:19:11,200 مانند 2 میلیارد بار 4، چرا که به اندازه یک عدد صحیح 4 بایت است. 1275 01:19:11,200 --> 01:19:13,810 من از آن درخواست مثل 8 میلیارد بایت است. 1276 01:19:13,810 --> 01:19:17,270 البته کامپیوتر من نخواهد بود قادر به به من که به حافظه زیادی را. 1277 01:19:17,270 --> 01:19:20,960 و ما را چک کنید در صورتی که این تهی، بنابراین، هنگامی که ما به dereference آن را بیش از وجود دارد را امتحان کنید - 1278 01:19:20,960 --> 01:19:24,270 به دنبال فلش به جایی که آن را برای رفتن به - ما این کار را به حافظه ندارد. 1279 01:19:24,270 --> 01:19:27,150 این همان چیزی است که ما آنرا بصورت غیر مرجع اشاره گر تهی. 1280 01:19:27,150 --> 01:19:29,710 و این اساسا باعث می شود شما را به segfault. 1281 01:19:29,710 --> 01:19:31,790 این یکی از راه هایی که شما می توانید segfault است. 1282 01:19:34,090 --> 01:19:38,090 همه چیز بد دیگری که می توانید انجام دهید - خیلی خوب. 1283 01:19:38,090 --> 01:19:40,650 بود که بصورت غیر مرجع اشاره گر تهی است. باشه. 1284 01:19:40,650 --> 01:19:45,160 سایر چیزهای بد - خوب، برای تعمیر که شما فقط با قرار دادن یک چک در آن وجود دارد 1285 01:19:45,160 --> 01:19:46,980 که بررسی می کند که آیا اشاره گر تهی است 1286 01:19:46,980 --> 01:19:51,000 و خروج از برنامه در صورتی اتفاق می افتد که malloc یک اشاره گر تهی را بر می گرداند. 1287 01:19:55,110 --> 01:19:59,850 این کمیک XKCD است. مردم آن را درک. مرتب کردن بر اساس. 1288 01:20:06,120 --> 01:20:09,350 >> بنابراین، حافظه است. و من بیش از این رفت. 1289 01:20:09,350 --> 01:20:12,000 ما خواستار malloc در یک حلقه است، اما هر زمان ما تماس بگیرید malloc 1290 01:20:12,000 --> 01:20:14,370 ما در حال از دست دادن مسیر از جایی که این اشاره گر با اشاره به 1291 01:20:14,370 --> 01:20:15,750 چون ما آن را clobbering. 1292 01:20:15,750 --> 01:20:18,410 بنابراین، تماس اولیه به malloc به من می دهد حافظه در اینجا. 1293 01:20:18,410 --> 01:20:19,990 اشاره گر اشاره گر من به این. 1294 01:20:19,990 --> 01:20:23,020 در حال حاضر، من می توانم این برنامه رایگان نیست، بنابراین در حال حاضر من اسمش malloc دوباره. 1295 01:20:23,020 --> 01:20:26,070 در حال حاضر به آن اشاره در اینجا. در حال حاضر حافظه من است اشاره در اینجا. 1296 01:20:26,070 --> 01:20:27,640 اشاره در اینجا. اشاره در اینجا. 1297 01:20:27,640 --> 01:20:31,820 اما من مسیر از آدرس تمام حافظه بیش از اینجا که من اختصاص داده شده از دست داده است. 1298 01:20:31,820 --> 01:20:35,100 و بنابراین در حال حاضر من هیچ اشاره ای به آنها ندارد دیگر. 1299 01:20:35,100 --> 01:20:37,230 بنابراین، من می توانم آنها را در خارج از این حلقه آزاد نیست. 1300 01:20:37,230 --> 01:20:39,390 و بنابراین به منظور رفع چیزی شبیه به این، 1301 01:20:39,390 --> 01:20:42,250 اگر شما به حافظه آزاد را فراموش کرده ام و شما این نشت حافظه، 1302 01:20:42,250 --> 01:20:45,810 شما باید برای آزاد کردن حافظه در داخل این حلقه هنگامی که شما با آن انجام می شود. 1303 01:20:45,810 --> 01:20:51,400 خوب، این چیزی است که اتفاق می افتد. من می دانم که بسیاری از شما نفرت این. 1304 01:20:51,400 --> 01:20:55,270 اما در حال حاضر - عالیست! شما مانند 44،000 کیلوبایت دریافت کنید. 1305 01:20:55,270 --> 01:20:57,110 بنابراین، شما این برنامه رایگان در پایان از حلقه، 1306 01:20:57,110 --> 01:20:59,770 و آن رفتن به آزاد کردن حافظه در هر زمان است. 1307 01:20:59,770 --> 01:21:03,620 اساسا، برنامه شما نشت حافظه نمی کنه. 1308 01:21:03,620 --> 01:21:08,150 >> و در حال حاضر چیز دیگری که می توانید انجام دهید، رایگان است برخی از حافظه است که شما دو بار خواسته. 1309 01:21:08,150 --> 01:21:11,060 در این حالت، شما چیزی malloc، شما مقدار آن را تغییر دهید. 1310 01:21:11,060 --> 01:21:13,140 یک بار به خاطر شما این برنامه رایگان به شما گفت که شما را با آن انجام شد. 1311 01:21:13,140 --> 01:21:14,940 اما پس از آن که ما آن را دوباره آزاد است. 1312 01:21:14,940 --> 01:21:16,730 این چیزی است که خیلی بد است. 1313 01:21:16,730 --> 01:21:18,820 این رفتن نیست ابتدا segfault، 1314 01:21:18,820 --> 01:21:23,350 اما پس از مدتی چه می کند این است که دو برابر آزادی این فساد ساختار پشته، 1315 01:21:23,350 --> 01:21:27,200 و شما باید یاد بگیرند که کمی بیشتر در این مورد اگر شما انتخاب می کنید را به یک کلاس مانند CS61. 1316 01:21:27,200 --> 01:21:30,000 اما در اصل بعد از در حالی که کامپیوتر خود را به اشتباه گرفته 1317 01:21:30,000 --> 01:21:33,010 در مورد چه مکان حافظه هستند که در آن و جایی که ذخیره شده - 1318 01:21:33,010 --> 01:21:34,800 که در آن داده ها در حافظه ذخیره می شود. 1319 01:21:34,800 --> 01:21:38,080 و بنابراین آزاد کردن یک اشاره گر دو برابر یک چیز بد است که شما نمی خواهید به انجام این کار است. 1320 01:21:38,080 --> 01:21:41,600 >> چیز دیگری که می تواند به اشتباه sizeof استفاده نمی کنید. 1321 01:21:41,600 --> 01:21:44,460 بنابراین، در این مورد شما malloc 8 بایت، 1322 01:21:44,460 --> 01:21:46,700 و این همان چیزی که به عنوان دو عدد صحیح، درست است؟ 1323 01:21:46,700 --> 01:21:49,580 بنابراین، کاملا بی خطر است، اما از آن است؟ 1324 01:21:49,580 --> 01:21:52,160 خب، به عنوان لوکاس در مورد معماری های مختلف صحبت کردیم، 1325 01:21:52,160 --> 01:21:54,220 اعداد صحیح از طول های مختلف هستند. 1326 01:21:54,220 --> 01:21:57,970 بنابراین، در دستگاه است که شما با استفاده از اعداد صحیح 4 بایت، 1327 01:21:57,970 --> 01:22:02,370 اما در برخی از سیستم های دیگر آنها ممکن است تا 8 کلمه در ادامه متن و یا آنها ممکن است به 16 بایت است. 1328 01:22:02,370 --> 01:22:05,680 بنابراین، اگر من تنها با استفاده از این شماره در اینجا، 1329 01:22:05,680 --> 01:22:07,310 این برنامه ممکن است بر روی دستگاه کار می کنند، 1330 01:22:07,310 --> 01:22:10,360 اما آن را نمی خواهید برای تخصیص حافظه به اندازه کافی در برخی از سیستم های دیگر است. 1331 01:22:10,360 --> 01:22:14,020 در این مورد، این همان چیزی است که عملگر sizeof برای استفاده است. 1332 01:22:14,020 --> 01:22:16,880 وقتی ما تماس sizeof (هوشمند)، چه می کند این است 1333 01:22:16,880 --> 01:22:21,910  آن را به ما می دهد به اندازه یک عدد صحیح بر روی سیستم که برنامه در حال اجرا است. 1334 01:22:21,910 --> 01:22:25,490 بنابراین، در این مورد، sizeof (بین المللی) 4 چیزی شبیه به دستگاه بازگشت، 1335 01:22:25,490 --> 01:22:29,980 و در حال حاضر این اراده 4 * 2، 8، 1336 01:22:29,980 --> 01:22:32,330 است که تنها مقدار فضای لازم برای دو عدد صحیح است. 1337 01:22:32,330 --> 01:22:36,710 بر روی سیستم های مختلف، اگر از نوع int است مانند 16 بایت یا 8 بایت، 1338 01:22:36,710 --> 01:22:39,380 آن را فقط به بازگشت بایت کافی است که مقدار ذخیره. 1339 01:22:41,830 --> 01:22:45,310 >> و در نهایت، ساختمانها. 1340 01:22:45,310 --> 01:22:48,340 بنابراین، اگر شما می خواهید برای ذخیره یک هیئت مدیره سودوکو در حافظه، چگونه ممکن است این ما کاری انجام دهید؟ 1341 01:22:48,340 --> 01:22:51,570 شما ممکن است مانند یک متغیر اولین چیزی که فکر می کنم، 1342 01:22:51,570 --> 01:22:53,820 یک متغیر برای چیز دوم، متغیر برای سومین چیزی، 1343 01:22:53,820 --> 01:22:56,420 یک متغیر برای چیزی چهارم - بد، درست است؟ 1344 01:22:56,420 --> 01:23:00,750 بنابراین، بهبود شما می توانید در بالا این است که به 9 x 9 به آرایه. 1345 01:23:00,750 --> 01:23:04,480 این خوب است، اما اگر شما می خواهید به شریک چیزهای دیگر با هیئت مدیره سودوکو 1346 01:23:04,480 --> 01:23:06,490 می خواهم آنچه را که مشکل هیئت مدیره است، 1347 01:23:06,490 --> 01:23:11,740 یا به عنوان مثال، چه نمره خود را، و یا چقدر وقت آن است که به شما برای حل این هیئت مدیره؟ 1348 01:23:11,740 --> 01:23:14,970 خب، آنچه که شما می توانید انجام دهید این است که شما می توانید یک ساختار ایجاد کنید. 1349 01:23:14,970 --> 01:23:18,910 آنچه من اساسا گفت این است که من تعریف این ساختار در اینجا، 1350 01:23:18,910 --> 01:23:23,230 و من تعریف سودوکو یک هیئت مدیره که متشکل از یک هیئت مدیره است که 9 * 9 است. 1351 01:23:23,230 --> 01:23:26,650 >> و آنچه در آن است اشاره گر به نام از سطح آن است. 1352 01:23:26,650 --> 01:23:30,730 این شهر همچنین دارای X و Y که مختصات جایی که من در حال حاضر است. 1353 01:23:30,730 --> 01:23:35,980 همچنین زمان صرف شده [ناخوانا]، و از آن است که تعداد کل حرکت من نظامها بشوند تا کنون است. 1354 01:23:35,980 --> 01:23:40,010 و بنابراین در این مورد، من می توانم یک دسته از اطلاعات را تنها در یک ساختار گروه 1355 01:23:40,010 --> 01:23:42,790 به جای داشتن آن را مانند پرواز در اطراف مانند متغیرهای مختلف 1356 01:23:42,790 --> 01:23:44,540 که من واقعا نمی تواند پیگیری. 1357 01:23:44,540 --> 01:23:49,720 و این به ما اجازه می دهد که فقط نحو خوبی برای مرتب کردن بر اساس ارجاع کارهای مختلف در داخل این ساختار می باشد. 1358 01:23:49,720 --> 01:23:53,430 من می توانم board.board انجام درست، و من در هیئت مدیره سودوکو. 1359 01:23:53,430 --> 01:23:56,320 Board.level، من چقدر سخت آن است. 1360 01:23:56,320 --> 01:24:00,540 Board.x و board.y مختصات جایی که من ممکن است در هیئت مدیره به من می دهد. 1361 01:24:00,540 --> 01:24:04,730 و من دسترسی به چیزی است که ما زمینه در ساختار. 1362 01:24:04,730 --> 01:24:08,840 این تعریف sudokuBoard است، که یک نوع که من آن را. 1363 01:24:08,840 --> 01:24:14,800 و در حال حاضر ما اینجا هستیم. من یک متغیر به نام "هیئت مدیره" از sudokuBoard نوع. 1364 01:24:14,800 --> 01:24:18,820 و بنابراین در حال حاضر من می توانید تمام زمینه هایی که این ساختار را تشکیل می دهند در اینجا دسترسی داشته باشید. 1365 01:24:20,830 --> 01:24:22,450 >> هرگونه سوال در مورد ساختمانها؟ بله؟ 1366 01:24:22,450 --> 01:24:25,890 [دانشجو] برای نوع int x، y، هر دو در یک خط اعلام کرد؟ >> [جوزف] اوهو. 1367 01:24:25,890 --> 01:24:27,400 [دانشجو] بنابراین، می تواند شما را فقط با همه آنها؟ 1368 01:24:27,400 --> 01:24:31,200 مانند X، Y بار کاما از هم که در کل؟ 1369 01:24:31,200 --> 01:24:34,460 [جوزف] بله، شما قطعا می تواند انجام این کار است، اما دلیل من x و y را در همان خط قرار داده است - 1370 01:24:34,460 --> 01:24:36,330 و سوال این است که چرا ما فقط این کار را در همان خط؟ 1371 01:24:36,330 --> 01:24:38,600 چرا ما نه تنها از این در همان خط قرار داده است 1372 01:24:38,600 --> 01:24:42,090 x و y مربوط به هر یک از دیگر، 1373 01:24:42,090 --> 01:24:44,780 و این تنها سبک درست باشد، به یک معنا، 1374 01:24:44,780 --> 01:24:46,600 زیرا این گروه بندی دو چیز را در همان خط 1375 01:24:46,600 --> 01:24:49,340 که مرتب سازی بر اساس مانند مربوط به یک چیز واحد است. 1376 01:24:49,340 --> 01:24:51,440 و من فقط تقسیم این از هم جدا. این فقط یک چیز سبک است. 1377 01:24:51,440 --> 01:24:53,720 این عملکرد باعث می شود تفاوت آنچه. 1378 01:24:58,150 --> 01:24:59,270 هر گونه سؤال دیگر در ساختمانها؟ 1379 01:25:03,030 --> 01:25:06,620 شما می توانید یک Pokédex با یک ساختار تعریف کنیم. 1380 01:25:06,620 --> 01:25:11,720 کلیپ های یک عدد و آن را به یک نامه، مالک، یک نوع است. 1381 01:25:11,720 --> 01:25:16,990 و پس از آن اگر شما یک مجموعه ای از کلیپ های شما باعث می شود که Pokédex، درست است؟ 1382 01:25:16,990 --> 01:25:20,810 خوب، سرد است. بنابراین، سوال در مورد ساختمانها. اینها مربوط به ساختمانها. 1383 01:25:20,810 --> 01:25:25,270 >> در نهایت، GDB. چه GDB به شما اجازه انجام این کار؟ این به شما اجازه می دهد تا برنامه های خود را اشکال زدایی کنید. 1384 01:25:25,270 --> 01:25:27,650 و اگر شما از GDB استفاده نمی شود، من می خواهم در کوتاه مدت توصیه می شود تماشای 1385 01:25:27,650 --> 01:25:31,250 و فقط رفتن را بیش از آنچه که GDB است، چگونه شما با آن کار می کنند، شما ممکن است استفاده از آن، 1386 01:25:31,250 --> 01:25:32,900 و آزمایش آن بر روی یک برنامه است. 1387 01:25:32,900 --> 01:25:37,400 و بنابراین، آنچه GDB اجازه می دهد که شما باید انجام دهید این است که به شما اجازه می دهد توقف [نامفهوم] برنامه خود را 1388 01:25:37,400 --> 01:25:38,920 و عملی است. 1389 01:25:38,920 --> 01:25:42,600 به عنوان مثال، من به توقف اعدام در مثل خط 3 از برنامه من می خواهم، 1390 01:25:42,600 --> 01:25:46,010 و در حالی که من در خط 3 هستم من می توانم نسخه قابل چاپ همه ارزش هایی که وجود دارد. 1391 01:25:46,010 --> 01:25:49,710 و بنابراین، آنچه که ما مانند توقف در یک خط 1392 01:25:49,710 --> 01:25:52,350 این است که ما به این قرار دادن یک نقطه انفصال در آن خط 1393 01:25:52,350 --> 01:25:55,920 و پس از آن ما می توانید نسخه قابل چاپ کردن متغیرها در دولت از این برنامه که در آن زمان است. 1394 01:25:55,920 --> 01:25:58,990 >> ما پس از آن می توانید از از طریق برنامه خط به خط گام وجود دارد. 1395 01:25:58,990 --> 01:26:03,200 و پس از آن ما می توانیم در دولت از پشته در آن زمان نگاه کنید. 1396 01:26:03,200 --> 01:26:08,600 و بنابراین به منظور استفاده از GDB، چه کار می کنیم این است صدای جرنگ جرنگ تماس بگیرید ما بر روی فایل C، 1397 01:26:08,600 --> 01:26:11,290 اما ما باید آن را به پرچم ggdb عبور. 1398 01:26:11,290 --> 01:26:15,850 و زمانی که ما در حال انجام می شود که ما فقط اجرا GDB بر روی فایل خروجی حاصل شده است. 1399 01:26:15,850 --> 01:26:18,810 و به این ترتیب شما می توانید برخی از توده مانند متن مانند این، 1400 01:26:18,810 --> 01:26:21,990 اما واقعا همه شما باید انجام دهید این است که در دستورات در ابتدا تایپ کنید. 1401 01:26:21,990 --> 01:26:24,250 فرار از اصلی قرار می دهد نقطه انفصال در اصلی. 1402 01:26:24,250 --> 01:26:28,470 فهرست 400 خط از کد را در سراسر خط 400 است. 1403 01:26:28,470 --> 01:26:31,410 و بنابراین در این مورد شما فقط می توانید در اطراف نگاه کنند و می گویند، آه، 1404 01:26:31,410 --> 01:26:34,360 من می خواهم به یک Break Point در خط 397 است، که این خط، 1405 01:26:34,360 --> 01:26:37,170 و سپس برنامه خود را اجرا می کند که به مرحله و رفتن به شکستن. 1406 01:26:37,170 --> 01:26:41,120 رفتن به مکث وجود دارد، و شما می توانید نسخه قابل چاپ کردن، به عنوان مثال، ارزش پایین یا بالا. 1407 01:26:41,120 --> 01:26:46,410 و به این ترتیب یک دسته از دستورات شما نیاز به دانستن وجود دارد، 1408 01:26:46,410 --> 01:26:48,660 و این تصاویر به صورت خودکار بالا خواهد رفت بر روی وب سایت، 1409 01:26:48,660 --> 01:26:54,000 بنابراین اگر شما فقط می خواهم به این مرجع یا دوست قرار داده و آنها خود را در بازی ورق، احساس رایگان. 1410 01:26:54,000 --> 01:27:00,650 >> دانلود. که امتحان نقد و بررسی 0 بود، و ما در اطراف چوب اگر شما هر گونه سوال. 1411 01:27:00,650 --> 01:27:03,850 بسیار خوب. 1412 01:27:03,850 --> 01:27:09,030 >>  [تشویق حضار] 1413 01:27:09,030 --> 01:27:13,000 >> [CS50.TV]