1 00:00:00,000 --> 00:00:02,200 [Powered by Google Translate] [هفته 3] 2 00:00:02,200 --> 00:00:03,950 [دیوید J. مالان - دانشگاه هاروارد] 3 00:00:03,950 --> 00:00:07,140 [این CS50 است. - CS50.TV] 4 00:00:07,140 --> 00:00:10,720 اجازه بدهید به ما هدایت من در جهت از جایی که آخرین بار ما را ترک کردن، 5 00:00:10,720 --> 00:00:13,890 بود که شروع به فکر می کنم کمی بیشتر از در مورد نحو 6 00:00:13,890 --> 00:00:17,150 و تلاش کمی کمتر به فکر می کنم در مورد تمام فروع 7 00:00:17,150 --> 00:00:20,630 است که زمان کمی طول می کشد تا به آب و هوای جدید خو گرفتن به تا کنون در شرایط استفاده از سمی کالن 8 00:00:20,630 --> 00:00:22,360 و پرانتز و آکولاد، 9 00:00:22,360 --> 00:00:25,630 برای شروع مصرف چیزهای کمی را به سطح بالاتری مفهومی 10 00:00:25,630 --> 00:00:28,800 به طوری که مشکلات ما در حال حاضر شروع به حل بیش از چند هفته آینده 11 00:00:28,800 --> 00:00:32,340 در صدد خیلی بیشتر به مشکلات مفهومی سطح بالاتر 12 00:00:32,340 --> 00:00:36,310 و کمی کمتر در نحوی به عنوان شما می توانید پای خود را خیس 13 00:00:36,310 --> 00:00:40,090 و دستان خود را کثیف با برخی از نحو از این چند هفته گذشته است. 14 00:00:40,090 --> 00:00:43,690 >> پس به یاد آورید که در هفته گذشته، ما به معرفی این مفهوم از یک آرایه. 15 00:00:43,690 --> 00:00:49,320 و یک آرایه در زبان انگلیسی را می توان به عنوان آنچه که شرح داده شده است؟ >> [پاسخ دانش آموز نامفهوم] 16 00:00:49,320 --> 00:00:51,710 ببخشید؟ 17 00:00:51,710 --> 00:00:54,810 مجموعه ای از؟ >> [پاسخ دانش آموز نامفهوم] >> خوب، خوب است. 18 00:00:54,810 --> 00:00:57,820 مجموعه ای از اقلام است. بنابراین ما شاهد آرایه به خراش است. 19 00:00:57,820 --> 00:01:01,880 اگر شما اتفاق افتاده است به برای pset استفاده از 0 یکی از لیست خراشی است که شما می توانید همه چیز را بکشید 20 00:01:01,880 --> 00:01:05,410 مانند پرتقال و موز را به موجودی از انواع، 21 00:01:05,410 --> 00:01:07,100 که این نوع مانند آنچه که یک آرایه است. 22 00:01:07,100 --> 00:01:10,980 و پس از آن بیشتر از لحاظ فنی، در چارچوب یک کامپیوتر واقعی، 23 00:01:10,980 --> 00:01:14,730 یک آرایه است که به سادگی تکه هم پیوسته از حافظه است. 24 00:01:14,730 --> 00:01:18,590 به عبارت دیگر، شما باید یک بایت، پس از آن دیگر بایت، پس از آن یک بایت دیگر، پس از آن دیگر بایت، 25 00:01:18,590 --> 00:01:21,330 و اگر شما آن کلمه در ادامه متن در یک تصویر را به منظور جلب. 26 00:01:21,330 --> 00:01:24,510 آنها را به عقب خواهد بود به پشت به پشت به پشت. این چیزی است که ما به معنای به هم پیوسته است. 27 00:01:24,510 --> 00:01:26,690 >> پس از آن بایت شماره 1، پس از آن 2، سپس 3. 28 00:01:26,690 --> 00:01:29,680 این به آن معنا نیست که در اینجا، اینجا، اینجا، اینجا. 29 00:01:29,680 --> 00:01:33,800 آرایه یک تکه به هم پیوسته از 0 یا چند بایت است. 30 00:01:33,800 --> 00:01:36,160 پس چه هستند آنها مفید است؟ 31 00:01:36,160 --> 00:01:40,090 به یاد ما این نوع از نمونه ساختگی از نمرات آزمون مردم ذخیره سازی در یک برنامه 32 00:01:40,090 --> 00:01:42,580 برای محاسبه میانگین آزمون خود را برای برخی از دوره، 33 00:01:42,580 --> 00:01:46,780 و به یاد داشته باشید که ما می توانیم شروع به نوشتن آن برنامه اعلام quiz1 متغیر است. 34 00:01:46,780 --> 00:01:49,550 پس ما می تواند متغیر دیگر به نام quiz2 داشته باشد. 35 00:01:49,550 --> 00:01:52,030 اما اگر 3 نفر وجود دارد آزمونها در این کلاس، quiz4. 36 00:01:52,030 --> 00:01:55,710 و یا اگر مسابقه بارگیری در این هفته وجود دارد، خواهد بود quiz5، quiz6، quiz7. 37 00:01:55,710 --> 00:01:58,520 بنابراین شما می توانید تمام از این متغیر ها در داخل تابع main اعلام کرد 38 00:01:58,520 --> 00:02:00,470 و یا در جایی دیگر در برنامه شما، 39 00:02:00,470 --> 00:02:03,870 و مشکل با این رویکرد، آسان هر چند از آن است که فقط به کپی و چسباندن، 40 00:02:03,870 --> 00:02:06,120 آن است که تنها بسیار به سرعت تبدیل به گنده. 41 00:02:06,120 --> 00:02:09,360 خدای ناکرده شما در واقع باید 30 آزمونها تا 50 آزمونها. 42 00:02:09,360 --> 00:02:12,080 اگر آن را مانند یک مدرسه به سبک مسابقه پاپ روزانه، 43 00:02:12,080 --> 00:02:15,910 پس شما فقط باید مسخره فهرست طولانی از متغیرهای اعلام شده، 44 00:02:15,910 --> 00:02:17,780 و این بسیار به سرعت از کنترل خارج می شود. 45 00:02:17,780 --> 00:02:20,820 این زشت است، آن را سخت به حفظ، آن را بسیار آسان تر را به یک وارد 46 00:02:20,820 --> 00:02:23,910 اگر شما 1 تعداد در جایی در برنامه شما mistyped. 47 00:02:23,910 --> 00:02:26,800 >> بنابراین ما به معرفی مفهوم یک آرایه به جای. 48 00:02:26,800 --> 00:02:30,760 و به یاد آورید که ما این برنامه را با انجام یک چیزی کمی شبیه به این اجرا. 49 00:02:30,760 --> 00:02:33,950 اجازه بدهید من به منبع امروز 3 دوشنبه دایرکتوری 50 00:02:33,950 --> 00:02:37,160 و باز کردن آرایه، که ما آن را دیدم آخرین باری. 51 00:02:37,160 --> 00:02:39,940 و حتی اگر یک زن و شوهر از کلاهبرداری های جدید C در اینجا وجود دارد، 52 00:02:39,940 --> 00:02:41,920 در میان آنها مفهوم ثابت، 53 00:02:41,920 --> 00:02:47,140 به یاد بیاورید که ما اعلام کرد شناور متعدد در اصل با استفاده از این نحو: 54 00:02:47,140 --> 00:02:51,750 شناور، و سپس نام متغیر، پس از آن ما با استفاده از پرانتز مربع واقعا برای اولین بار، 55 00:02:51,750 --> 00:02:55,450 و آنچه ما در داخل این پرانتز مربع بود به طور موثر یک عدد قرار داده است. 56 00:02:55,450 --> 00:02:59,780 اما به جای قرار دادن یک شماره، من قرار داده است این کلمه با حروف بزرگ، آزمونها. 57 00:02:59,780 --> 00:03:03,220 و آنچه انگیزه برای قرار دادن یک کلمه با حروف بزرگ مانند آزمونها 58 00:03:03,220 --> 00:03:08,170 و پس از آن با استفاده از فوت و فن 17 خط در اینجا به واقع که به یک عدد است؟ 59 00:03:08,170 --> 00:03:11,240 انگیزه وجود دارد چه بود؟ آره. 60 00:03:11,240 --> 00:03:13,360 >> [پاسخ دانش آموز نامفهوم] >> دقیقا. 61 00:03:13,360 --> 00:03:16,630 اگر ما می خواهیم که ارزش 2 را تغییر دهید، ما فقط باید آن را در 1 مکان را تغییر دهید 62 00:03:16,630 --> 00:03:19,680 به دلیل در نظر گرفتن - من حتی به یاد داشته باشید که این برنامه دقیقا، 63 00:03:19,680 --> 00:03:22,040 اما اگر شما آن را فقط تماس مختصر حاصل کردن به شما را ببینید آزمونها، آزمونها. 64 00:03:22,040 --> 00:03:24,720 همانطور که می بینید آزمونها، پایین تر آزمونها. 65 00:03:24,720 --> 00:03:28,180 بنابراین اگر ما این را ثابت، استفاده از این تیز تعریف، 66 00:03:28,180 --> 00:03:33,320 ما را تایپ 2، بعد، 2، و سپس 2، پس از آن 2، که خوب است. این امر می تواند به همان اندازه درست است. 67 00:03:33,320 --> 00:03:36,220 اما فرض کنید که در سال آینده در حال حاضر 3 آزمونها در CS50. 68 00:03:36,220 --> 00:03:39,190 پس من باید بروم و به روز رسانی کد، من باید آن را کامپایل مجدد، 69 00:03:39,190 --> 00:03:43,820 اما مشکل این است که اگر من به چیزی احمقانه، مثل من نادیده می گیرند 1 اشاره از 2 70 00:03:43,820 --> 00:03:46,750 و فراموش پلاگین در 3، این برنامه کل خیلی خوب می تواند بشکند. 71 00:03:46,750 --> 00:03:48,720 بنابراین ما فقط برای درخواست مشکل است. 72 00:03:48,720 --> 00:03:53,170 >> بنابراین مفهوم ثابت شده است همه چیز در مورد مقاطعه از برخی تکه ای از داده ها، 73 00:03:53,170 --> 00:03:56,070 که آیا آن یک رشته و یا یک کاراکتر و یا شناور و یا هر چیز دیگری است، 74 00:03:56,070 --> 00:04:00,070 و اعلام آن 1 به طوری که شما به آسانی می توانید آن را تغییر دهید در آینده است. 75 00:04:00,070 --> 00:04:03,660 و آن را نیز، رک و پوست کنده، کمی آسان تر است را بخوانید چرا که اگر شما فقط به این فکر می کنم در حال حاضر، 76 00:04:03,660 --> 00:04:07,840 آن آزمونها، و یا حتی می تواند آن را چیزی تغییر نام NUMBER_OF_QUIZZES 77 00:04:07,840 --> 00:04:09,430 یا چیزی صریح تر است. 78 00:04:09,430 --> 00:04:11,830 این کد فقط کمی واضح تر به آنچه در آن انجام می شود، 79 00:04:11,830 --> 00:04:15,780 و شما تعجب می کنم که کمی کمتر چه شماره 2 ممکن است رخ دهد به معنی. 80 00:04:15,780 --> 00:04:18,920 بنابراین ثابت تا به حال چیزی برای انجام اساسا با آرایه. 81 00:04:18,920 --> 00:04:22,990 آرایه از طریق این پرانتز مربع معرفی شد. 82 00:04:22,990 --> 00:04:26,610 >> پس توجه کنید که در خط 23 ما از کاربر، "چه نمره آزمون خود را؟" 83 00:04:26,610 --> 00:04:31,120 پس ما فقط این حلقه که ظاهرا می پرسد کاربر برای نمرات خود را داشته باشد. چگونه؟ 84 00:04:31,120 --> 00:04:37,460 از 0 تا 2 تکرار. و من می گویم 2 چون آزمونها در همه کلاه است در حال حاضر 2. 85 00:04:37,460 --> 00:04:42,310 پس از آن از 0 تا 2 تکرار و سپس آن را چاپ # از امتحان چیزی از چیزی، 86 00:04:42,310 --> 00:04:45,830 و سپس آن را با استفاده از GetFloat برای گرفتن مقدار از کاربر است. 87 00:04:45,830 --> 00:04:49,050 بنابراین این تنها قطعه جدیدی از نحو از چهارشنبه گذشته اطلاع می دهد. 88 00:04:49,050 --> 00:04:53,120 اگر شما می خواهید برای ذخیره چیزی در یک مکان خاص که در آن آرایه، 89 00:04:53,120 --> 00:04:55,460 دوباره از براکت استفاده کنید. 90 00:04:55,460 --> 00:04:57,030 >> بنابراین یک بیت از دوگانگی در اینجا وجود دارد. 91 00:04:57,030 --> 00:04:59,040 اولین بار که شما با استفاده از براکت مربع 92 00:04:59,040 --> 00:05:02,250 شما با استفاده از آن مشخص چقدر بزرگ است که شما می خواهید به آرایه. 93 00:05:02,250 --> 00:05:06,580 اما این زمینه در اینجا جایی که ما دوباره این براکت استخدام 94 00:05:06,580 --> 00:05:10,540 به این معنی است که در آن آرایه می خواهید برای قرار دادن برخی از ارزش؟ 95 00:05:10,540 --> 00:05:13,650 و تمایز در اینجا می توان از متن استنباط شده است. 96 00:05:13,650 --> 00:05:17,130 توجه داشته باشید که در اینجا ما باید یک نوع داده، پس ما باید به نام یک متغیر، 97 00:05:17,130 --> 00:05:20,770 پس ما باید پرانتز مربع خود را با یک شماره در داخل، نقطه و ویرگول بدین شکل؛ همین. 98 00:05:20,770 --> 00:05:22,290 به طوری که یک اعلامیه است. 99 00:05:22,290 --> 00:05:28,390 این فقط به عنوان اینکه ما چیزی مانند شناور grade1 انجام شده بود، شناور grade2؛ 100 00:05:28,390 --> 00:05:31,730 اما باز هم، این بسیار به سرعت devolves بیش از حد به راه کپی، چسباندن، 101 00:05:31,730 --> 00:05:34,260 بنابراین به جای ما فقط آن را به عنوان چنین ساده، 102 00:05:34,260 --> 00:05:38,800 که بدان معنی است پس ما یک درجه است که می تواند در براکت 0 ذخیره می شوند، 103 00:05:38,800 --> 00:05:41,760 ما دیگر از کلاس است که می تواند در براکت 1 ذخیره می شود، 104 00:05:41,760 --> 00:05:46,890 اما اگر من خیط و پیت کردن، و برای مثال، حلقه من می رود تا کنون - 105 00:05:46,890 --> 00:05:48,740 به عنوان مثال، من را در این کمتر از یا مساوی با 106 00:05:48,740 --> 00:05:50,620 فراخوان منبع اشکال قبلی بود - 107 00:05:50,620 --> 00:05:55,590 که بدان معنی است که در برخی از تکرار تصادفی سوم از این حلقه 108 00:05:55,590 --> 00:06:00,380 من با استفاده از براکت 2. به طور موثر، آنچه ممکن است اتفاق می افتد؟ ببخشید؟ 109 00:06:00,380 --> 00:06:02,860 [دانشجو] به جا شود. >> آیا آن جا به جا شود؟ 110 00:06:02,860 --> 00:06:04,520 چه می توان جایگزین کرد؟ 111 00:06:04,520 --> 00:06:10,890 این به معنای گفتن است جایگزین در محل 2 با مقدار بازگشتی از GetFloat. 112 00:06:10,890 --> 00:06:13,690 اما مشکل این است که چقدر بزرگ است مجموعه ای در این نقطه در داستان است؟ 113 00:06:13,690 --> 00:06:17,730 [پاسخ دانش آموز نامفهوم] >> آرایه است هنوز هم تنها به اندازه 2 114 00:06:17,730 --> 00:06:22,730 چون آرایه، مانند هر متغیر، برای اولین بار اعلام شد، قبل از ما آن را با استفاده از، 115 00:06:22,730 --> 00:06:27,220 و ما در اینجا به خاطر این ثابت است که من 2 نمرات است که من قصد دارم برای قرار دادن مشخص شده است. 116 00:06:27,220 --> 00:06:29,930 >> اما به یاد داشته باشید، دانشمندان کامپیوتر شروع به شمارش از 0. 117 00:06:29,930 --> 00:06:33,620 بنابراین اولین محل که در آن آرایه براکت 0 است. 118 00:06:33,620 --> 00:06:40,210 مکان بعدی 1 است. این چیزی است که تا کنون کمی بیش از حد به سمت. 119 00:06:40,210 --> 00:06:42,870 بنابراین به عبارت دیگر، اگر من در واقع تا به حال این آرایه - 120 00:06:42,870 --> 00:06:46,790 و به من اجازه ببینید که چگونه به خوبی این همکاری اینجا برای ما - 121 00:06:46,790 --> 00:06:52,360 اگر من یک آرایه است که من به سادگی به شرح زیر کشیده شده است 122 00:06:52,360 --> 00:06:56,750 و من به مدت 2 عناصر اختصاص داده شده، من ممکن است این مثل این در حافظه قرعه کشی 123 00:06:56,750 --> 00:06:58,020 که این بوم سفید بزرگ است. 124 00:06:58,020 --> 00:07:00,920 این فقط RAM من در کامپیوتر من، فرفره از RAM، 2 گیگابایت RAM، حالا هر چی، 125 00:07:00,920 --> 00:07:05,400 اما این 2 جعبه در حال حاضر به صورت جداگانه شناور، 32 بیت باشد. 126 00:07:05,400 --> 00:07:10,860 بنابراین اگر من قرار شماره 1 در اینجا مانند 1.0، پس از آن دیگر شماره من قرار اینجا مثل 3.2 127 00:07:10,860 --> 00:07:15,280 اما بعد از آن من براکت 2، است که مانند قرار دادن چیزی در اینجا. 128 00:07:15,280 --> 00:07:17,820 و به عنوان تصویر نشان می دهد، هیچ چیز وجود دارد. 129 00:07:17,820 --> 00:07:20,450 این نوعی مانند زمین بدون انسان چون من سیستم عامل پرسیده نشده 130 00:07:20,450 --> 00:07:23,550 این مسابقه سوم را به من بدهد. 131 00:07:23,550 --> 00:07:26,940 اگر من می خواهم که مسابقه سوم، من باید تا به حال احتیاط 132 00:07:26,940 --> 00:07:31,700 به درخواست سیستم عامل برای آن با اعلام این آزمونها به 2 نیست 133 00:07:31,700 --> 00:07:34,210 اما به جای آن 3 برابر است. 134 00:07:34,210 --> 00:07:39,000 >> بنابراین به عبارت دیگر، تصویری که ما به طور موثر در دست داشته به نظر می رسد شبیه به این در اینجا. 135 00:07:39,000 --> 00:07:42,260 این دوباره زمین بدون انسان است. ما بهتر است سعی کنید نوشتن مقادیر اینجا. 136 00:07:42,260 --> 00:07:45,300 اما باز هم، چرا که دانشمندان کامپیوتر از 0 تعداد، 137 00:07:45,300 --> 00:07:49,520 هنگامی که ما در مورد این مکان در آرایه صحبت می کنید، که تصور می شود محل سکونت: 0، 138 00:07:49,520 --> 00:07:53,890 این مکان 1 قرار است، و این بدان وجود ندارد 139 00:07:53,890 --> 00:07:57,380 از آنجا که ما تنها به سیستم عامل برای 2 چنین مکان هایی ازش پرسید. 140 00:07:57,380 --> 00:08:00,130 بنابراین کسانی که از شما با تجربه برنامه نویسی قبل از زبان های دیگر 141 00:08:00,130 --> 00:08:04,150 ممکن است بدانید که این همیشه صدق نمی کند با آرایه و یا همه چیز به نام بردار است. 142 00:08:04,150 --> 00:08:06,930 در عوض، شما فقط می توانید اضافه کردن و اضافه کردن و اضافه کردن همه چیز را به آرایه نگه دارید، 143 00:08:06,930 --> 00:08:10,720 که رک و پوست کنده، ما تا به حال که توانایی، در ابتدا و در عین حال ما به نظر می رسد که به آن داده شده است تا در اینجا 144 00:08:10,720 --> 00:08:15,160 چرا که با C برنامه نویسی بسیار صریح است. 145 00:08:15,160 --> 00:08:17,980 این تنها شما و کامپیوتر در حال حاضر، و در کامپیوتر است که تنها به انجام 146 00:08:17,980 --> 00:08:19,530 آنچه در آن به شما می گویند را انجام دهد. 147 00:08:19,530 --> 00:08:24,270 بنابراین اگر شما فقط آن را بگوید به شما 2 شناور از طریق خط 22 را در اینجا، 148 00:08:24,270 --> 00:08:27,640 که همه قصد دارید به عقب بر گردیم از سیستم عامل: فضا برای 2. 149 00:08:27,640 --> 00:08:34,049 >> بنابراین به طور فزاینده ای از برنامه های خود را برای رفتن به گاهی اوقات حشره دار با توجه به آرایه. 150 00:08:34,049 --> 00:08:37,520 این تنها مرتب کردن بر اساس از طبیعت وحش است که به موجب آن همه از ما هستند معروض خطا باشد، 151 00:08:37,520 --> 00:08:42,490 و در برخی از نقطه شما به احتمال بسیار زیاد شاخص فراتر از مرز از آرایه. 152 00:08:42,490 --> 00:08:45,980 و این تنها راه فانتزی و گفت: شما را به چیزی براکت رفت 153 00:08:45,980 --> 00:08:49,970 و چیزی بیش از حد از یک عدد بزرگ بود. شما فراتر از مرزهای آرایه خود را رفت. 154 00:08:49,970 --> 00:08:51,530 اما حرکت صعودی در حال حاضر این است. 155 00:08:51,530 --> 00:08:54,990 بقیه از این برنامه واقعا هیچ چیز اساسا برای کار با آرایه ها می باشد. 156 00:08:54,990 --> 00:08:58,180 این همه فقط در مورد برخی از حساب های ساده برای محاسبات به طور متوسط. 157 00:08:58,180 --> 00:09:03,200 بنابراین ما در اینجا در این حلقه for در اینجا برای اولین بار یک متغیر به نام مجموع است که ما را به 0 مقداردهی اولیه. 158 00:09:03,200 --> 00:09:09,020 سپس ما از 0 تا 2 تکرار دوباره و ما به آن متغیر جمع اضافه کنید 159 00:09:09,020 --> 00:09:12,620 کلاس i ام، به طوری که براکت 0 سپس براکت 1. 160 00:09:12,620 --> 00:09:15,130 و سپس به عنوان شما می توانید در مدرسه انجام دهد که به طور متوسط ​​به محاسبه، 161 00:09:15,130 --> 00:09:19,420 ما به سادگی این مجموع، آن را تقسیم تعداد کل آزمونها، 162 00:09:19,420 --> 00:09:22,520 و پس از آن برای اندازه گیری خوب ما به یک تابع نامیده می شود دور. 163 00:09:22,520 --> 00:09:28,580 >> در حال حاضر، به عنوان به کنار، آنچه که مقابله با این نوع int پرانتز در خط 34؟ 164 00:09:28,580 --> 00:09:31,730 ممکن است آمده اند تا در حال حاضر در بخش، در مورد آن واقعا نمی صحبت به طور رسمی در اینجا، 165 00:09:31,730 --> 00:09:35,210 اما آنچه در این بین المللی در parens احتمالا انجام است؟ >> [پاسخ دانش آموز نامفهوم] 166 00:09:35,210 --> 00:09:38,500 آره، این اشاره ریخته گری یا typecasting، 167 00:09:38,500 --> 00:09:41,690 که به معنی 1 نوع داده ها و تبدیل آن به دیگری است. 168 00:09:41,690 --> 00:09:45,400 شما می توانید این کار را با انواع داده ها کار نمی کند چرا که گاهی اوقات این امر می تواند یک کمی عجیب و غریب است. 169 00:09:45,400 --> 00:09:49,640 اما در این مورد، اگر مقدار بازگشتی از دور شناور است 170 00:09:49,640 --> 00:09:53,880 زیرا، بعد از همه، من شناور و تقسیم آن را با یک عدد مانند 2، 171 00:09:53,880 --> 00:09:55,840 من قصد دارم به عقب بر گردیم شناور. 172 00:09:55,840 --> 00:10:00,760 اما مردم مدرسه واقعا نمی خواهم بدانم که متوسط ​​آنها 93.4 بود 173 00:10:00,760 --> 00:10:04,420 چون آنها را متوجه آنها همیشه به طوری که به 95 گرد نقطه نزدیک است. 174 00:10:04,420 --> 00:10:09,540 >> بنابراین ما می خواهیم به جای استفاده از نوع int به دور همگان را به نزدیکترین بین المللی، 175 00:10:09,540 --> 00:10:12,730 که در این مورد در حال رفتن به 94 با هیچ نقطه پس از آن است. 176 00:10:12,730 --> 00:10:14,530 به طوری که فقط یک ترفند کوچک ریاضی است. 177 00:10:14,530 --> 00:10:17,570 و ما دوباره به این مفهوم از ریخته گری به دلیل آن کاربرد داشته باشند، 178 00:10:17,570 --> 00:10:21,640 اگر شما را کشف کرده اند در حال حاضر، مشکل مجموعه 2. 179 00:10:21,640 --> 00:10:25,210 بنابراین آرایه پس از آن، شما می توانید از فکر می کنم - رفتن به من لبخند در تمام طول روز. 180 00:10:25,210 --> 00:10:27,830 مثل این به نظر می رسد اگر تصویری از آن رسم کنید. 181 00:10:27,830 --> 00:10:31,460 اما مهم این است که اندازه نیز توسط شما انتخاب شده است 182 00:10:31,460 --> 00:10:34,050 هنگامی که شما به آن درخواست از سیستم عامل است. 183 00:10:34,050 --> 00:10:39,460 هر گونه سؤال و سپس بر روی آرایه ها؟ آره. 184 00:10:39,460 --> 00:10:47,080 [سوال دانش آموز نامفهوم] 185 00:10:47,080 --> 00:10:49,310 آه، سوال خوبی است. 186 00:10:49,310 --> 00:10:53,150 سوال این است که چه اتفاقی می افتد به 0 صفر در آرایه؟ این کار را در این زمینه وجود ندارد. 187 00:10:53,150 --> 00:10:57,430 است که تنها در زمینه رشته ها، که ما برای رسیدن به تنها در یک لحظه وجود دارد. 188 00:10:57,430 --> 00:11:02,300 اما برای یک آرایه، همانطور که در این حالت، شما می توانید آن چیزی است که شما از سیستم عامل است. 189 00:11:02,300 --> 00:11:04,050 >> و به عنوان یک کنار، تا مبادا این معلوم نیست، 190 00:11:04,050 --> 00:11:07,030 من گفت: شما از سیستم عامل، سیستم عامل بپرسید. 191 00:11:07,030 --> 00:11:10,090 همانطور که احتمالا می دانید، سیستم عامل، سیستم عامل مک، ویندوز، لینوکس است. 192 00:11:10,090 --> 00:11:13,560 هنگامی که شما در حال فراخوانی توابع مانند GetFloat 193 00:11:13,560 --> 00:11:19,280 یا شما تعریف متغیرها مانند نمرات، 194 00:11:19,280 --> 00:11:23,200 در پایان روز شما به طور موثر به درخواست شخص دیگری به شما که حافظه را 195 00:11:23,200 --> 00:11:25,940 از آنجا که ما به عنوان مشتاق برنامه نویسان 196 00:11:25,940 --> 00:11:28,800 هیچ نظری ندارم که چگونه می توان به دسترسی فیزیکی به حافظه. 197 00:11:28,800 --> 00:11:31,100 اما کسی: سیستم عامل. 198 00:11:31,100 --> 00:11:36,630 پس علاوه بر این ما که با آیکون های زیبا و منوها و پوشه ها و مانند آن 199 00:11:36,630 --> 00:11:39,050 که شما را بر روی میز کار خود را مشاهده کنید، آیا مک یا PC، 200 00:11:39,050 --> 00:11:42,240 سیستم عامل نیز انجام چیزهای سطح پایین دنیوی، 201 00:11:42,240 --> 00:11:44,680 مسائل بسیار فنی مدیریت گیگابایت 202 00:11:44,680 --> 00:11:48,780 یا 2 گیگابایت حافظه است که شما را، مدیریت CPU است که شما را، و غیره. 203 00:11:48,780 --> 00:11:50,170 بنابراین، هنگامی که شما در حال نوشتن کد، 204 00:11:50,170 --> 00:11:53,900 شما واقعا به اتصال به سیستم عامل خود را در آن حس است. 205 00:11:53,900 --> 00:11:55,720 من قصد دارم برای به حداقل رساندن آن است. بسیار خوب. 206 00:11:55,720 --> 00:11:59,980 >> سوال دیگر در مورد آرایه؟ 207 00:12:00,330 --> 00:12:02,520 نه؟ باشه. 208 00:12:02,520 --> 00:12:06,680 بنابراین انتقال به طور طبیعی از آرایه است که در واقع به یک موضوع که کمی آشنا. 209 00:12:06,680 --> 00:12:09,570 و ما نگاه تا کنون به طور خلاصه در این زمان بیش از حد. 210 00:12:09,570 --> 00:12:12,500 این مثال رشته از روز چهارشنبه بود. 211 00:12:12,500 --> 00:12:15,060 در این مثال رشته یک برنامه خیلی ساده بود، 212 00:12:15,060 --> 00:12:18,120 و من در واقع آن را توسط یک زن و شوهر از خطوط برای مقاصد امروزی ساده است. 213 00:12:18,120 --> 00:12:22,680 همه آن را در خط 19 می کند این است که یک رشته از کاربر، آن را در یک متغیر به نام ها ذخیره می کند. 214 00:12:22,680 --> 00:12:28,670 سپس در خط 22 به بعد آن را ظاهرا چاپ این رشته 1 کاراکتر در هر خط. 215 00:12:28,670 --> 00:12:30,730 اما چگونه آن را انجام؟ 216 00:12:30,730 --> 00:12:33,350 ما اعلام رو به صورت متغیر، تنظیم آن را برابر با 0، 217 00:12:33,350 --> 00:12:35,770 و این در حال تبدیل شدن به عادت های قدیمی در حال حاضر. 218 00:12:35,770 --> 00:12:39,270 ما تا به حال این کار را تا روز چهارشنبه دیده نمی شود، اما شما می توانید نوع استنباط از نام آن 219 00:12:39,270 --> 00:12:44,610 strlen فقط می گرداند چه وقتی S داده می شود؟ طول رشته. 220 00:12:44,610 --> 00:12:47,940 بنابراین اگر من تصویب آن رشته، نقل قول، نقل قول را تمام DAVID، 221 00:12:47,940 --> 00:12:51,810 امیدوارم رفتن را به من بازگردان شماره 5 به دلیل DAVID. 222 00:12:51,810 --> 00:12:55,600 به طوری که هدف خود را در زندگی این است که یک رشته، چه سخت کدگذاری 223 00:12:55,600 --> 00:12:58,840 یا در این مورد، به عنوان یک متغیر گذارند، به عنوان یک استدلال، 224 00:12:58,840 --> 00:13:01,980 آن ارقام و آنچه را که طول این رشته است. 225 00:13:01,980 --> 00:13:06,470 >> بنابراین در اینجا در حال حاضر ما در حال قرض گرفتن برخی از نماد به عنوان مثال در مسابقه قبلی. 226 00:13:06,470 --> 00:13:09,390 این است که چیزی برای انجام با شناور، تا به چیزی برای انجام با آزمونها، 227 00:13:09,390 --> 00:13:13,100 اما معلوم است که دروغ کوچک سفید بوده ایم به شما گفتن از هفته 1 228 00:13:13,100 --> 00:13:16,330 این است که یک رشته واقعا وجود داشته باشد در C. 229 00:13:16,330 --> 00:13:20,230 رشته در پایان روز است، واقعا فقط یک آرایه است. 230 00:13:20,230 --> 00:13:25,140 آرایه ای از بایت، بنابراین بایت، بایت، بایت، بایت، فراخوان است که فقط 8 بیت، 231 00:13:25,140 --> 00:13:28,130 بنابراین تکه حافظه، تکه از حافظه، تکه از حافظه، تکه از حافظه است. 232 00:13:28,130 --> 00:13:31,210 و ابزار است که توسط آن یک رشته اجرا 233 00:13:31,210 --> 00:13:33,070 با قرار دادن شخصیت اول در اینجا، 234 00:13:33,070 --> 00:13:37,470 و سپس در اینجا و سپس در اینجا، اینجا، پشت به پشت به پشت در حافظه کامپیوتر است. 235 00:13:37,470 --> 00:13:42,160 بنابراین اگر شما می خواهید به هجی کردن یک کلمه مانند HELLO، شما می توانید 1 شخصیت H قرار دهید، 236 00:13:42,160 --> 00:13:48,240 پس از آن E، سپس L و سپس L، سپس O - 5 کاراکتر در مجموع - در جایی در RAM کامپیوتر شما. 237 00:13:48,240 --> 00:13:52,080 اما جزئیات کلیدی در اینجا این است که آنها در حال رفتن به پشت به پشت به پشت به پشت، 238 00:13:52,080 --> 00:13:54,200 درست در کنار یکدیگر است. 239 00:13:54,200 --> 00:13:58,820 زمانی که من می گویم های [i]، در زبان انگلیسی به این است که به من دادن؟ 240 00:14:01,240 --> 00:14:04,550 چه [من] در این مورد نشان می دهد؟ آره. 241 00:14:04,550 --> 00:14:07,800 >> [دانشجوی] شخصیت i ام در رشته. >> دقیقا. ویژگی i ام در رشته. 242 00:14:07,800 --> 00:14:12,260 در حال حاضر، من در حال رفتن در 0 شروع در من حلقه for در اینجا، 243 00:14:12,260 --> 00:14:14,850 اما این خوب است زیرا همه چیز شروع به شمارش از 0. 244 00:14:14,850 --> 00:14:19,160 پس [0] رفتن به نمایندگی از H نامه در یک کلام مثل HELLO 245 00:14:19,160 --> 00:14:24,530 [1] به نمایش نامه در یک کلمه مانند HELLO مانند E، و غیره. 246 00:14:24,530 --> 00:14:27,130 و آنچه که ما به نظر می رسد انجام این کار در هر تکرار از این حلقه 247 00:14:27,130 --> 00:14:32,780 به طور موقت ذخیره سازی شخصیت i ام در یک متغیر به نام C است، که فقط یک کاراکتر، 248 00:14:32,780 --> 00:14:35,010 و پس از آن ما در حال چاپ کردن C 249 00:14:35,010 --> 00:14:37,620 به طوری که در پایان روز از آنچه که این برنامه انجام می دهد به شرح زیر است. 250 00:14:37,620 --> 00:14:42,900 اگر من را به دایرکتوری منبع و من را string1 و من به جلو بروید و آن را اجرا string1، 251 00:14:42,900 --> 00:14:51,920 و پس از آن من یک کلمه مانند سلام، را وارد کنید تایپ، همه آن کند است چاپ این شخصیت (1) در یک زمان. 252 00:14:51,920 --> 00:14:54,010 >> بنابراین فرصتی برای پالایش وجود دارد. 253 00:14:54,010 --> 00:14:58,150 من نوع انجام کار بیشتر است، حتی اگر آن را روشن تر شاید در این راه، از لزوم. 254 00:14:58,150 --> 00:15:03,270 کدام خط از کد را در اینجا می تواند احتمالا دور پرتاب در دسترس نباشد؟ آره. 255 00:15:03,270 --> 00:15:08,290 خط 24. در خط 24 من اعلام C متغیر است. 256 00:15:08,290 --> 00:15:14,320 من ذخیره سازی شخصیت i ام از S در آن است، اما بعد از آن من با استفاده از C. 257 00:15:14,320 --> 00:15:20,160 بنابراین من با استفاده از C، به طوری که من احساس می کنم مثل من فقط نمی تواند پرتاب خط 24 دور. 258 00:15:20,160 --> 00:15:23,850 [نظر دانش آموز نامفهوم] >> دقیقا. 259 00:15:23,850 --> 00:15:26,240 پس زمانی که نوبت به صحبت کردن در مورد طراحی برنامه های، 260 00:15:26,240 --> 00:15:30,740 متوجه این ساده کمی از کد، که به همان اندازه قابل خواندن است، 261 00:15:30,740 --> 00:15:34,680 اما متوجه است که تنها یک متغیر، نوع داده آن یک آرایه است، 262 00:15:34,680 --> 00:15:38,610 تا [من] فقط می خواهم تا فورا به شما شخصیت i ام در این رشته است. 263 00:15:38,610 --> 00:15:40,620 و اگر شما می خواهید آن را چاپ کنید، که خوب است. 264 00:15:40,620 --> 00:15:43,680 شما فقط باید برای استفاده از سی درصد به دلیل این که شما در حال یک رشته چاپ، 265 00:15:43,680 --> 00:15:48,520 شما در حال چاپ یک کاراکتر در یک رشته، و نیز دارای اثر چاپ شخصیت i ام است. 266 00:15:48,520 --> 00:15:51,390 و به یاد تنها تفاوت واقعا از هفته گذشته با استفاده از printf 267 00:15:51,390 --> 00:15:54,220 این است که در حالی که در هفته های گذشته ما را به چیزی فوق العاده ساده 268 00:15:54,220 --> 00:15:58,510 مانند حفره یا سوراخ٪ s را پس از آن به نام یک رشته در اینجا، 269 00:15:58,510 --> 00:16:01,190 در حال حاضر ما در حال غواصی در کمی عمیق تر در زیر هود و گفت، 270 00:16:01,190 --> 00:16:06,090 رشته نسخه قابل چاپ نیست، چاپ کاراکتر در آنجا. 271 00:16:06,090 --> 00:16:10,570 >> بنابراین ما می توانیم چیزی کمی متفاوت است در اینجا به خاطر 1 نفر دیگر وجود دارد - اشکال نیست 272 00:16:10,570 --> 00:16:14,090 از آنجا که این برنامه درست است، اما من در انجام کاری احمقانه 273 00:16:14,090 --> 00:16:16,810 که من به طور خلاصه در روز چهارشنبه اشاره شده است. 274 00:16:16,810 --> 00:16:22,680 اما فکر کردن به عقب، چگونه می تواند طراحی این برنامه بهبود یافته و حتی بیشتر؟ آره. 275 00:16:22,680 --> 00:16:28,280 [پاسخ دانش آموز نامفهوم] >> آه، خوب است. 276 00:16:28,280 --> 00:16:32,120 بنابراین یاد داشته باشید که ما یک متغیر دوم به نام N آخرین بار، 277 00:16:32,120 --> 00:16:34,850 که به نظر می رسد خودمان در تناقض زیرا هدف من این یک ثانیه قبل 278 00:16:34,850 --> 00:16:37,380 فقط به دور انداختن یک متغیر را به عنوان غیر ضروری، 279 00:16:37,380 --> 00:16:40,700 اما به یاد داشته باشید که در روز چهارشنبه ما در واقع این است. 280 00:16:40,700 --> 00:16:46,170 من حلقه تغییر در واقع با کاما، سپس N = strlen، 281 00:16:46,170 --> 00:16:52,120 و سپس در اینجا من I 00:16:57,660 افزایش اساسی که من دارم برای رسیدن به با تغییر دهی اولیه من به این 283 00:16:57,660 --> 00:17:01,590 و شرایط و موقعیت من را به این در حال حاضر؟ >> [پاسخ دانش آموز نامفهوم] >> دقیقا. 284 00:17:01,590 --> 00:17:06,170 من strlen یادآوری نیست، دوباره و دوباره و دوباره به دلیل به یاد چگونه برای کارهای حلقه. 285 00:17:06,170 --> 00:17:08,790 حتی اگر آنها شروع به پیچیده تر است، به دنبال، 286 00:17:08,790 --> 00:17:12,480 به یاد بیاورید که چیزی که قبل از نقطه و ویرگول اول مقدار دهی اولیه، که یک بار اتفاق می افتد. 287 00:17:12,480 --> 00:17:14,359 شرایط، هر چند، در وسط، 288 00:17:14,359 --> 00:17:17,710 و این می شود هر زمان که شما را از طریق حلقه بررسی می شود. 289 00:17:17,710 --> 00:17:22,420 >> پس از آن نوع احمقانه به درخواست کامپیوتر همان سوال را دوباره و دوباره - 290 00:17:22,420 --> 00:17:25,920 طول HELLO چه خبر؟ طول HELLO چه خبر؟ طول HELLO - 291 00:17:25,920 --> 00:17:29,740 چرا که همانگونه که خواهید دید امروز و در روز چهارشنبه، این است که قطعا به زمان، 292 00:17:29,740 --> 00:17:34,320 و از آن استفاده بسیار خوبی از زمان نیست چرا که به شکل از طول یک رشته 293 00:17:34,320 --> 00:17:37,030 در واقع طول می کشد کمی تلاش. 294 00:17:37,030 --> 00:17:39,760 این لحظه، به عنوان آن را در برخی از زبان ها است. 295 00:17:39,760 --> 00:17:43,920 بنابراین با تغییر این به ازت، قیمت من پرداخت شده است چه؟ 296 00:17:43,920 --> 00:17:45,640 ما شاهد یک تجارت کردن در اینجا. 297 00:17:45,640 --> 00:17:49,460 من با پرسیدن همین سوال لعنتی دوباره و دوباره می توانید در زمان صرفه جویی، 298 00:17:49,460 --> 00:17:51,740 اما آن را به من چیزی، که همان چیزی است که هزینه؟ 299 00:17:51,740 --> 00:17:55,050 >> [دانشجو] شما یک مقدار مشخصی از حافظه خود را از دست میدهند. >> دقیقا. این به من برخی از حافظه های هزینه. 300 00:17:55,050 --> 00:17:56,670 بنابراین در این حالت هزینه آن به من چه؟ 301 00:17:56,670 --> 00:18:01,530 یکی دیگر از 32 بیت به دلیل N فقط بین المللی، به عنوان ضمنی بین المللی کلمه در اینجا. 302 00:18:01,530 --> 00:18:03,300 اما این است که درست است؟ 303 00:18:03,300 --> 00:18:05,800 صادقانه بگویم، که احتمالا درست است چرا که اگر شما در مورد آن فکر می کنم، 304 00:18:05,800 --> 00:18:09,030 دیگر رشته است، زمان بیشتری را من قصد دارم به هدر رفتن 305 00:18:09,030 --> 00:18:11,920 زیرا strlen رفتن دوباره و دوباره و دوباره برای دریافت نام 306 00:18:11,920 --> 00:18:13,520 برای هر تکرار از حلقه. 307 00:18:13,520 --> 00:18:18,070 و این روزها، مک من دارای 2 گیگابایت RAM، این روز 4 گیگابایت RAM گاهی اوقات. 308 00:18:18,070 --> 00:18:22,420 من فکر می کنم من می توانم 4 از آن بایت در واقع به سرعت همه چیز را استطاعت. 309 00:18:22,420 --> 00:18:26,590 اما این امر به عنوان یک تجارت خاموش و یک تم واقعا در برنامه نویسی و علم کامپیوتر 310 00:18:26,590 --> 00:18:28,320 واقعا هرگز به دست آوردن هر چیزی به صورت رایگان. 311 00:18:28,320 --> 00:18:32,880 اگر شما می خواهید برای بهبود چیزی است که در اینجا، شما را مجبور به پرداخت هزینه برای آن از سوی دیگر به نحوی است. 312 00:18:32,880 --> 00:18:35,880 فضا در مقابل زمان در این مورد است. 313 00:18:35,880 --> 00:18:40,700 >> پس این همه منجر شد تا نسبت به چیزی مرموز شبیه به این، 314 00:18:40,700 --> 00:18:44,070 که همانطور که شما احتمالا در حال حاضر نمیفهمد، در واقع می گوید؟ 315 00:18:44,070 --> 00:18:47,420 [پاسخ دانش آموز نامفهوم] >> آره، بنابراین این، مطمئن شوید که به نوشیدن Ovaltine شما، 316 00:18:47,420 --> 00:18:52,490 در واقع با استفاده از یک الگوریتم به نام ROT13، ROT 1-3، 317 00:18:52,490 --> 00:18:55,500 که فقط به معنی چرخش تمام از حروف 13 مکان، 318 00:18:55,500 --> 00:18:58,720 که این معنی را و پس از آن اضافه کردن 13 به آن و به نقطه، نقطه، نقطه 319 00:18:58,720 --> 00:19:04,640 تمام راه را به نامه 13TH دور، انجام همان چیزی که برای B و C و D و غیره. 320 00:19:04,640 --> 00:19:10,850 بنابراین اگر ما در واقع تبدیل این در اینجا با استفاده از یک شیفت از 13 مکان، 321 00:19:10,850 --> 00:19:14,580 ما باید به آنچه کمی Ralphie، که، مطمئن بود که به نوشیدن Ovaltine شما. 322 00:19:14,580 --> 00:19:18,160 اما در حال حاضر برای مشکل مجموعه 2، در نسخه استاندارد حداقل، 323 00:19:18,160 --> 00:19:21,680 شما را به نوع از این کار خود را enciphering، 324 00:19:21,680 --> 00:19:25,990 و ما باید به نحوی در ورودی شبیه به این را رمزگذاری یا رمزگشایی آن است. 325 00:19:25,990 --> 00:19:29,850 >> پس کدام یک از این نوع اصول ما را به این فرصت؟ 326 00:19:29,850 --> 00:19:32,650 بیایید یک نگاهی به این مثال سوم در اینجا. 327 00:19:32,650 --> 00:19:38,430 اول از همه، آن را به نام ASCII. چه ASCII برگشت به اشاره؟ 328 00:19:38,430 --> 00:19:40,460 کد استاندارد آمریکایی برای تبادل اطلاعات، 329 00:19:40,460 --> 00:19:43,850 که واقعا طولانی از راه گفت: چه شده است؟ ASCII چیست؟ 330 00:19:43,850 --> 00:19:47,890 [پاسخ دانش آموز نامفهوم] >> که؟ >> [دانشجو] نقشه شخصیت. >> نقشه شخصیت. 331 00:19:47,890 --> 00:19:51,390 این فقط نقشه اعداد به حروف چرا که جهان به استاندارد 332 00:19:51,390 --> 00:19:55,380 چه تعداد نشان دادن حروف به طوری که همه ما می تواند از رایانه 333 00:19:55,380 --> 00:19:59,340 و تمام برنامه های ما سازگار فقط زمانی که آن را برای چاپ کردن همه چیز بر روی صفحه نمایش می آید. 334 00:19:59,340 --> 00:20:04,680 بنابراین به یاد می آورم که 65 اتفاق می افتد به نمایندگی، 97 اتفاق می افتد به نمایندگی از کوچک. 335 00:20:04,680 --> 00:20:08,510 و بنابراین این برنامه ساده ASCII با استفاده از این واقعیت - 336 00:20:08,510 --> 00:20:12,770 که جهان می داند که سرمایه 65 - و آن را فقط در چاپ نقشه برداری. 337 00:20:12,770 --> 00:20:16,320 >> پس قبل از اینکه ما به این کد شیرجه رفتن، اجازه دهید من به جای باز کردن یک پنجره ترمینال. 338 00:20:16,320 --> 00:20:21,550 اجازه بدهید من به جلو بروید و ASCII را، و پس از آن اجازه دهید فقط اجرای این چیزی که فقط خروجی به از بین بردن. 339 00:20:21,550 --> 00:20:25,960 و آن را فقط این است: یک نمودار واقعا بزرگ است که فقط به من می گوید همه از کدهای مختلف 340 00:20:25,960 --> 00:20:27,950 برای همه حروف مختلف. 341 00:20:27,950 --> 00:20:32,100 بنابراین یک برنامه فوق العاده ساده است، اما من به کد سخت آن 52 خط خروجی: 342 00:20:32,100 --> 00:20:34,860 26 بزرگ، 26 حروف کوچک. 343 00:20:34,860 --> 00:20:37,790 در عوض، من این برنامه نویسی با یک زن و شوهر از حلقه است. 344 00:20:37,790 --> 00:20:39,720 توجه داشته باشید که آنچه که من در اینجا. 345 00:20:39,720 --> 00:20:44,790 من از من به 65 تکرار تا 65 + 26 چرا که من می خواستم برای چاپ از 26 حرف است 346 00:20:44,790 --> 00:20:49,860 ، من در الفبای انگلیسی + + در هر تکرار، و در حال حاضر دوباره اطلاع می دهد. 347 00:20:49,860 --> 00:20:52,540 این عود از typecasting دوست ما است 348 00:20:52,540 --> 00:20:54,620 به موجب آن شما 1 نوع داده خود را به دیگری تبدیل 349 00:20:54,620 --> 00:20:57,480 زیرا آنچه من می خواهم در این برنامه خاص انجام دهد؟ 350 00:20:57,480 --> 00:21:02,650 من می خواهم برای شمارش عددی چرا که چگونه رشد کردم شمارش - 65، 66، 67، و غیره - 351 00:21:02,650 --> 00:21:04,420 اما من نمی خواهم تا چاپ فقط اعداد. 352 00:21:04,420 --> 00:21:08,030 من می خواهم به چاپ نامه توسط تعدادی. 353 00:21:08,030 --> 00:21:18,640 من می خواهم به چاپ: تعداد، B: شماره است، اما من می توانم این کار را با متغیر یکسان انجام دهید. 354 00:21:18,640 --> 00:21:21,630 بنابراین من نسخه قابل چاپ کردن C٪ به عنوان یک نگهدارنده برای یک شخصیت، 355 00:21:21,630 --> 00:21:25,080 D٪ به عنوان یک نگهدارنده برای یک عدد یا شماره. 356 00:21:25,080 --> 00:21:27,750 سپس آنچه را می توانم برای کسانی که 2 متغیرهایی وصل کنم؟ 357 00:21:27,750 --> 00:21:33,960 من پلاگین برای اولین بار در شخصیت معادل از من، و سپس به من از خود من نسخه قابل چاپ. 358 00:21:33,960 --> 00:21:36,400 >> پس این فقط بیش از حد کار می کند اطلاع می دهد. 359 00:21:36,400 --> 00:21:39,320 همانطور که من می توانم از float به نوع int بازیگران 360 00:21:39,320 --> 00:21:41,750 منظور از یک عدد حقیقی را به یک عدد صحیح، 361 00:21:41,750 --> 00:21:46,100 من در اینجا می توانید از یک int به یک کاراکتر است که کمی عجیب و غریب - 362 00:21:46,100 --> 00:21:48,680 را بر روی جهان واقعی کاملا نقشه - اما در کامپیوتر 363 00:21:48,680 --> 00:21:51,140 کاراکتر فقط یک عدد در قسمت پایین هود، 364 00:21:51,140 --> 00:21:53,590 بنابراین ما تا کنون صریح بودن در اینجا به کامپیوتر، و گفت: 365 00:21:53,590 --> 00:21:58,920 printf، چاپ 65 من نیست، چاپ آن را به عنوان معادل عددی آن است. 366 00:21:58,920 --> 00:22:02,110 و معلوم می شود که من از لحاظ فنی و نه حتی نیاز به این. 367 00:22:02,110 --> 00:22:05,020 آنچه که من انجام شده بود یک لحظه پیش به صراحت ریخته گری 368 00:22:05,020 --> 00:22:08,760 تعیین چه نوع داده من می خواهم برای رفتن از و. 369 00:22:08,760 --> 00:22:11,840 اما توجه کنید که من در حال حاضر این حفره یا سوراخ٪ C 370 00:22:11,840 --> 00:22:14,930 و این حفره یا سوراخ٪ C در اینجا. 371 00:22:14,930 --> 00:22:18,880 حتی اگر این نوع int، کامپیوتر متوجه می شود که یک کاراکتر، 372 00:22:18,880 --> 00:22:21,080 این فقط یک int در زیر هود. 373 00:22:21,080 --> 00:22:25,100 >> بنابراین اگر من در واقع کامپایل مجدد و تکرار برنامه ASCII، 374 00:22:25,100 --> 00:22:31,210 متوجه آن هنوز هم کار می کند به این دلیل که کامپیوتر متوجه می شود که این مکاتبات وجود دارد. 375 00:22:31,210 --> 00:22:34,870 در حال حاضر، آن را مهم تر را به انجام ریخته گری صریح در جهان شناور را به نوع داده int 376 00:22:34,870 --> 00:22:37,460 چون شما در واقع از تصمیم گیری محاسبه: 377 00:22:37,460 --> 00:22:40,140 دور انداختن همه چیز را بعد از نقطه اعشار. 378 00:22:40,140 --> 00:22:44,990 در اینجا هیچ چیز واقعا به دور انداختن زیرا شخصیت فقط یک عدد وجود دارد، 379 00:22:44,990 --> 00:22:48,220 و یک رشته آرایه ای از کاراکتر ها است. 380 00:22:48,220 --> 00:22:52,530 بنابراین، هنگامی که از آن زمان به اجرای برخی از رمزگذاری یا رمزگشایی می آید، 381 00:22:52,530 --> 00:22:56,770 چگونه است آن است که ما در واقع می تواند چیزی شبیه به این مزخرفات به ترجمه، 382 00:22:56,770 --> 00:22:58,670 مطمئن شوید که به نوشیدن Ovaltine شما؟ 383 00:22:58,670 --> 00:23:02,700 چه می شود اگر ما می دانیم در حال حاضر - را به عنوان فرض - که کلید، 384 00:23:02,700 --> 00:23:08,010 تعدادی است که ما در حال چرخش همه این نامه ها، شماره 13 است؟ 385 00:23:08,010 --> 00:23:11,800 بنابراین ما از حرف B رفت و تمام راه را در آغاز جمله ای، 386 00:23:11,800 --> 00:23:14,710 مطمئن شوید که به نوشیدن Ovaltine خود را، چرا که اگر من B 387 00:23:14,710 --> 00:23:19,600 و پس از آن من به C، D، E، F، G، H، I، J، K، L، M، N، O، 388 00:23:19,600 --> 00:23:23,760 به همین دلیل است که رمزگذاری B نامه می شود O 389 00:23:23,760 --> 00:23:26,570 چرا که من فقط 13 تا از آن است. 390 00:23:26,570 --> 00:23:33,460 >> پس اگر من می خواهم به رمزگشایی این، من اساسا را ​​به O و سپس تفریق 13 از آن. 391 00:23:33,460 --> 00:23:36,880 رک و پوست کنده، چرا که 26 حروف الفبا وجود دارد، این است که زیبا و متقارن، 392 00:23:36,880 --> 00:23:41,260 ما همچنین می توانیم فقط 13 و اضافه می کنیم به عقب بر گردیم به B. نامه 393 00:23:41,260 --> 00:23:44,290 اما چگونه می توانم شما را در مورد اجرای چیزی شبیه به این در سزار 394 00:23:44,290 --> 00:23:46,600 یا واقعا دستکاری رشته ها به طور کلی؟ 395 00:23:46,600 --> 00:23:51,380 اگر حرف B چه تعداد است؟ 396 00:23:51,380 --> 00:23:55,290 حرف B چه خبر؟ بنابراین 66 است، درست است؟ 397 00:23:55,290 --> 00:23:59,220 بنابراین اگر نامه 65 و حرف B 66، 398 00:23:59,220 --> 00:24:03,940 تا 66، همه من را مجبور به انجام اضافه 13 به آن است، و این به من می دهد 79. 399 00:24:03,940 --> 00:24:09,150 و اگر ما به کمی ورق بازی، 79 در واقع بر روی O. نقشه 400 00:24:09,150 --> 00:24:11,290 >> اما کمی در مورد گوشه ای در اینجا وجود دارد. 401 00:24:11,290 --> 00:24:15,170 چیست، می گویند، حرف Z؟ 402 00:24:15,170 --> 00:24:20,180 اگر ما 66 + 25 را به تمام راه را تا پایان از حروف الفبا، در 91 هستید. 403 00:24:20,180 --> 00:24:24,520 91 + 13 به من می دهد 104، و حدس بزنید چه؟ 404 00:24:24,520 --> 00:24:29,200 104 حرف بزرگ برابر نیست. 405 00:24:29,200 --> 00:24:31,610 بازگشت به ورق تقلب کمی در اینجا. 406 00:24:31,610 --> 00:24:38,070 اگر این برنامه را در لوازم خانگی، اخطار تکرار است که 104، اگر من به بازگشت به پنجره ترمینال، 407 00:24:38,070 --> 00:24:41,800 آن 104 میباشد ظاهرا ساعت حروف کوچک است. 408 00:24:41,800 --> 00:24:46,400 بنابراین ما نیاز به برخی از ترفند های کلیدی در اینجا به منظور مطمئن شوید که هنگامی که ما در Z شروع 409 00:24:46,400 --> 00:24:50,260 و اضافه می کنیم 13 تا از آن ما نمی خواهیم فقط به حفظ جعل آینده به اعداد بزرگتر و بزرگتر. 410 00:24:50,260 --> 00:24:52,600 چه ما واقعا می خواهید کاری انجام دهید؟ 411 00:24:52,600 --> 00:24:54,570 شما می خواهید به پوشش در اطراف. 412 00:24:54,570 --> 00:25:00,250 >> پس از آن معلوم است، همانطور که احتمالا در بخش در حال حاضر و یا در تنظیمات مشکل مجموعه خود دیده می شود 413 00:25:00,250 --> 00:25:05,730 متوجه شدم که این اپراتور دیگر در C وجود دارد که نیز یک علامت درصد، 414 00:25:05,730 --> 00:25:11,020 اما در حالی که ما استفاده کرده ایم٪ در اینجا برای مشخص کردن یک مکان نگه دار، 415 00:25:11,020 --> 00:25:15,420 می دانیم که، به ویژه برای مجموعه مشکل 2، نیز وجود دارد چیزی شبیه به این: 416 00:25:15,420 --> 00:25:18,990 دانشنامه هوشمند = X٪ Y Z. 417 00:25:18,990 --> 00:25:22,770 اجازه دهید من فقط در حال حاضر این کار را به عنوان یک شکل بسیار کلی از این. 418 00:25:22,770 --> 00:25:25,580 درصد به این معنی است که در یک زبان برنامه نویسی است؟ >> [دانشجوی] باقی مانده. 419 00:25:25,580 --> 00:25:28,790 باقی مانده است که راه فانتزی گفت: باقی مانده است. 420 00:25:28,790 --> 00:25:31,620 حتی اگر یک تفاوت اندکی با تعریف وجود دارد وجود دارد، 421 00:25:31,620 --> 00:25:37,210 این به این معنی تقسیم Y Z، اما در نتیجه از این بخش بر نمی گرداند؛ 422 00:25:37,210 --> 00:25:39,650 در عوض، آن را به باقی مانده است. 423 00:25:39,650 --> 00:25:47,390 >> بنابراین اگر Y است که در واقع 3 و Z است که در واقع 2، 3 تقسیم بر 2 1 با باقی مانده، از مجموع 1 424 00:25:47,390 --> 00:25:51,550 چه چیزی X در این سناریو در واقع برابر است؟ 1. 425 00:25:51,550 --> 00:25:54,540 این ایده ساده، سطح پایین است. 426 00:25:54,540 --> 00:25:56,480 آن را به زمان کمی به ذهن خود را در اطراف آن پیچیده 427 00:25:56,480 --> 00:25:58,740 به دلیل آن را احتمالا در حالی که از شما حتی تا به حال در مورد باقیمانده مراقبت 428 00:25:58,740 --> 00:26:01,160 و در واقع آنها را برای چیزی هدفمند استفاده کنید. 429 00:26:01,160 --> 00:26:05,290 اما در این مورد این واقعیت ساده است که شما می توانید از یک عدد بزرگ مثل 3 430 00:26:05,290 --> 00:26:08,920 به تعداد نسبتا کوچک مثل 2 و پس از آن پوشش در اطراف به طور موثر 431 00:26:08,920 --> 00:26:14,160 با استفاده از باقی مانده را به یک مقدار کوچکتر مانند 1 رفتن به ترفند ارزشمند 432 00:26:14,160 --> 00:26:17,690 که ما می توانیم برای هر دو چیزی شبیه به سزار و این Vigenere چیز دیگری استفاده کنید 433 00:26:17,690 --> 00:26:22,240 مشکل مجموعه 2 است، اما این است که برای رفتن به یک ترفند در محدوده زمانی معین در طول ترم. 434 00:26:22,240 --> 00:26:24,880 این ایده ساده و ساده، فقط با در نظر گرفتن باقی مانده به طور کلی 435 00:26:24,880 --> 00:26:26,530 رفتن اجازه می دهد تا ما را به پوشش در اطراف. 436 00:26:26,530 --> 00:26:31,140 و همانطور که ما شروع به بازی بیشتر با آرایه، همانطور که ما شروع به بازی بیشتر با حافظه خود، 437 00:26:31,140 --> 00:26:35,800 این است که رفتن به تبدیل شدن بیشتر و بیشتر از یک فوت و فن های قدرتمند است. 438 00:26:35,800 --> 00:26:43,420 >> بنابراین هر گونه سؤال و سپس بر روی ASCII و یا نمایندگی از رشته ها به عنوان آرایه؟ 439 00:26:43,420 --> 00:26:47,430 و ما آن را تا 1 درجه یک بیشتر است. آره. 440 00:26:47,430 --> 00:26:52,350 [سوال دانش آموز نامفهوم] >> سوال خوب. 441 00:26:52,350 --> 00:26:55,370 به چه معنی است وقتی که یک متغیر دارای یک ستاره در مقابل آن؟ 442 00:26:55,370 --> 00:26:57,720 اجازه بدهید من به تعویق انداختن پاسخ دادن که در هر جزئیات، 443 00:26:57,720 --> 00:27:00,100 اما اشاره به یک موضوع شناخته شده به عنوان یک اشاره گر است. 444 00:27:00,100 --> 00:27:03,440 اشاره گرها باید با حافظه انجام دهید، و ما در واقع امروز 445 00:27:03,440 --> 00:27:06,330 برداشتن قدم اول برای دستیابی به این بحث، 446 00:27:06,330 --> 00:27:08,600 اما در حال حاضر، اجازه دهید به من وانمود که ستاره وجود ندارد 447 00:27:08,600 --> 00:27:15,380 ادامه خواهیم داد و خواستار رشته رشته به جای استفاده از کاراکتر * 448 00:27:15,380 --> 00:27:19,530 که شما احتمالا دیده می شود قبل و من فقط در یک لحظه بر روی صفحه نمایش را به عنوان یک تیزر. 449 00:27:19,530 --> 00:27:23,010 بنابراین ما دوباره که در جزئیات راه از بسیاری از شما احتمالا می خواهم. 450 00:27:23,010 --> 00:27:25,760 در نهایت، امروز نیست. آره. 451 00:27:25,760 --> 00:27:42,810 >> [سوال دانش آموز نامفهوم] 452 00:27:42,810 --> 00:27:47,080 در چه زمینه ورود به سیستم به یک شخصیت؟ >> [دانشجو] آره. 453 00:27:47,080 --> 00:27:52,130 بنابراین به طور پیش فرض، زمانی که شما یک + قرار نیست، فقط اعداد مثبت در نظر گرفته شده است. 454 00:27:52,130 --> 00:27:55,390 بنابراین اگر فقط ارسال نامه شماره 1، آن را یک 1 مثبت است. 455 00:27:55,390 --> 00:27:57,710 اگر شما واقعا می خواهید برای مشخص نفی ارزش، 456 00:27:57,710 --> 00:28:01,060 شما به معنای واقعی کلمه را مجبور به انجام -1 بر روی صفحه کلید خود را. 457 00:28:01,060 --> 00:28:20,440 اما این احتمالا سوال شما نیست. >> [پاسخ دانش آموز نامفهوم] 458 00:28:20,440 --> 00:28:22,200 >> خوب سوال. باشه. 459 00:28:22,200 --> 00:28:24,970 بنابراین این را به انجام، جمع آوری، من با برخی از انواع مشکلات شما را به فرار 460 00:28:24,970 --> 00:28:27,640 دلیل این که شما تبدیل یک عدد صحیح به یک شخصیت، 461 00:28:27,640 --> 00:28:29,780 اما به نحوی منفی درگیر کردم، 462 00:28:29,780 --> 00:28:32,380 و بنابراین شخصیت بیرون آمد به نحوی munged. 463 00:28:32,380 --> 00:28:36,710 بنابراین در حال حاضر، اجازه دهید کمی ساده من تا زمانی که ما دوباره به این نوع از موضوع. 464 00:28:36,710 --> 00:28:39,570 در حال حاضر، از چیزهایی که فکر می کنم این راه - و این ساده است. 465 00:28:39,570 --> 00:28:43,500 اما در جهان یک عدد صحیح، شما که چگونه بسیاری از بیت ها را در اختیار خود دارند؟ 466 00:28:43,500 --> 00:28:45,190 شما باید 32 بیت. 467 00:28:45,190 --> 00:28:49,030 و تا کنون، ما در مورد تعداد کل اعداد صحیح بنابراین شما می توانید نمایندگی صحبت کردیم 468 00:28:49,030 --> 00:28:52,430 حدود 4 میلیارد و در مجموع به دلیل این که شما 32 بیت، 469 00:28:52,430 --> 00:28:55,100 به طوری که 2 سال از 32، به طوری که تقریبا 4 میلیارد. 470 00:28:55,100 --> 00:28:58,810 اما ما شاهد یک یا 2 هفته قبل که شما واقعا نمی طیف وسیعی از اعداد 471 00:28:58,810 --> 00:29:01,240 از 0 تا تا 4 میلیارد. 472 00:29:01,240 --> 00:29:06,340 محدوده به جای از تقریبا منفی 2 میلیارد تا مثبت 2 میلیارد می رود. 473 00:29:06,340 --> 00:29:10,990 اما این begs سوال، چگونه می توانم به شما نشان دهنده مفهوم منفی 2 میلیارد 474 00:29:10,990 --> 00:29:13,260 اجازه دهید به تنهایی منفی 1؟ 475 00:29:13,260 --> 00:29:17,960 در حال حاضر، ما می توانیم ساده و فقط می گویند که ما قصد داریم با استفاده از کمی سمت چپ 476 00:29:17,960 --> 00:29:22,380 از کسانی که 32 بیت است، و اگر آن را یک 1 یک عدد منفی است، 477 00:29:22,380 --> 00:29:25,090 و اگر آن را یک 0 عدد مثبت است. 478 00:29:25,090 --> 00:29:28,570 مشکل این است که با بازنمایی ساده شده ای از اعداد منفی 479 00:29:28,570 --> 00:29:33,700 این است که اگر شما عمدا بودن شد باهوش و در تلاش است که از یک شخصیت تبدیل به یک عدد 480 00:29:33,700 --> 00:29:37,190 یا برعکس، هیچ چیز مانند یک شخصیت منفی وجود دارد. 481 00:29:37,190 --> 00:29:42,550 در جهان ASCII که با استفاده از فقط 8 بیت 8 از کسانی که موضوع بیت، 482 00:29:42,550 --> 00:29:46,810 و کمی سمت چپ تا به چیزی برای انجام با منفی است. 483 00:29:46,810 --> 00:29:49,670 و تنها به روشن است، وقتی که من می گویند که بیت سمت چپ، 484 00:29:49,670 --> 00:29:54,610 به یاد بیاورید که زمانی که ما نمونه های مربوط به بیت ما در هفته اول 485 00:29:54,610 --> 00:30:02,570 به یاد بیاورید که ما چیزهایی مثل 1001101، چیزی شبیه به این را به خود جلب کرد. 486 00:30:02,570 --> 00:30:07,210 وقتی که من می گویند که بیت سمت چپ، من فقط به معنای واقعی کلمه به معنای 1 که تو می نویسم تمام راه را به سمت چپ. 487 00:30:07,210 --> 00:30:11,910 بنابراین در جهان از کاراکتر ها هیچ مفهوم منفی وجود دارد، 488 00:30:11,910 --> 00:30:16,360 به طوری که کمی سمت چپ در واقع تا به چیزی برای انجام با ASCII، هیچ چیزی برای انجام با منفی. 489 00:30:16,360 --> 00:30:19,390 >> بنابراین آن را برای تلفن های موبایل مانند - و خارج از چهار چوب آن را سخت به پاسخ دقیقا - 490 00:30:19,390 --> 00:30:25,840 اما به هر طریقی، کد خود را گیج کننده است که بیت سمت چپ به عنوان نماینده یک مقدار منفی 491 00:30:25,840 --> 00:30:29,160 هنگامی که آن را در واقع بخشی از شخصیت در سوال بود. 492 00:30:29,160 --> 00:30:32,250 و دوباره، من را ساده انگاشت، از آنجا که کامپیوتر در واقع چیزی که کمی خیال باف 493 00:30:32,250 --> 00:30:37,080 از فقط تغییر که کمی سمت چپ یک علامت منفی در مقابل یک 0 به 1 (یک) است. 494 00:30:37,080 --> 00:30:41,270 آنها در عوض، اگر شما کنجکاو هستید به گوگل، استفاده از چیزی که به طور معمول به نام متمم 2، 495 00:30:41,270 --> 00:30:43,830 است که کمی پیچیده تر از روش 496 00:30:43,830 --> 00:30:45,490 اما ایده این است که در نهایت همان است. 497 00:30:45,490 --> 00:30:50,530 >> بنابراین در کوتاه مدت، آن را تا به حال با این واقعیت که شما ماساژ یک عدد به یک شخصیت 498 00:30:50,530 --> 00:30:53,750 و یا بالعکس اما کد شما از این حقیقت آگاه بود 499 00:30:53,750 --> 00:30:56,510 1 از کسانی که بیت اهمیت در جهان عددی بود. 500 00:30:56,510 --> 00:30:59,940 که در مورد شخصیت جهان نیست. 501 00:30:59,940 --> 00:31:04,270 اما آن را برای تلفن های موبایل مانند شما ثابت است، که در این مورد قابل بحث در حال حاضر. سوالات دیگر. 502 00:31:06,030 --> 00:31:07,110 باشه. 503 00:31:07,110 --> 00:31:11,560 پس تا کنون، همه برنامه های ما نوشته ام گرفته اند ورودی ممکن است از کاربر 504 00:31:11,560 --> 00:31:14,330 در فرم از توابع مانند GetInt، GetString، 505 00:31:14,330 --> 00:31:16,990 یا اگر شما شده است با خواندن پیش در کتاب های مختلف و یا منابع آنلاین، 506 00:31:16,990 --> 00:31:21,390 شما خودتان ممکن است با استفاده از توابعی مثل scanf که رک و پوست کنده، ما در کتابخانه CS50 استفاده کنید. 507 00:31:21,390 --> 00:31:25,370 اما در یک یا 2 هفته، ما در واقع شما چگونه کتابخانه CS50 اجرا شده است نشان می دهد 508 00:31:25,370 --> 00:31:27,890 به طوری که ما می توانیم با چرخ آموزش ها را در دسترس نباشد. 509 00:31:27,890 --> 00:31:31,340 >> اما به نظر می رسد از راه دیگری وجود دارد برای دریافت ورودی از کاربر است. 510 00:31:31,340 --> 00:31:34,670 در واقع، ما خودمان شده اند با استفاده از استدلال خط فرمان 511 00:31:34,670 --> 00:31:36,500 برای چند هفته در حال حاضر. 512 00:31:36,500 --> 00:31:41,150 هر بار که ما اجرا صدای جرنگ جرنگ و یا دست اجرا داریم که را، 513 00:31:41,150 --> 00:31:45,050 ما نه فقط تایپ صدای جرنگ جرنگ، وارد، ما را تایپ نمی کند، وارد شده است. 514 00:31:45,050 --> 00:31:49,340 چه ما به طور معمول بعد از صدای جرنگ جرنگ کلمه در ترمینال ویندوز سریع نوشته شده است؟ 515 00:31:51,110 --> 00:31:52,900 [دانشجو] نام فایل. >> نام فایل، درست است؟ 516 00:31:52,900 --> 00:31:57,560 Hello.c یا mario.c و یا هر چه که نام فایل مربوطه است. 517 00:31:57,560 --> 00:32:01,910 و به این معنا که آنچه که تو واقعا انجام می شود این است که شما تحت تاثیر رفتار از صدای جرنگ جرنگ 518 00:32:01,910 --> 00:32:05,750 چرا که قطعا مردم نوشت که صدای جرنگ جرنگ تا به حال هیچ ایده که کمی قدیمی شما 519 00:32:05,750 --> 00:32:08,890 رفتن به نوشتن یک برنامه به نام سال mario.c بعد. 520 00:32:08,890 --> 00:32:13,150 بنابراین شما تا به حال به نوعی رفتار که برنامه را تحت تاثیر قرار، 521 00:32:13,150 --> 00:32:18,140 که صدای جرنگ جرنگ برنامه تا به حال به چنین نوشته شده است که می تواند ورودی را از شما قبول 522 00:32:18,140 --> 00:32:23,480 علاوه بر این از کلمات در سریع قبل از بازدید کاربر را وارد کنید. 523 00:32:23,480 --> 00:32:27,860 >> بنابراین معلوم می شود که برای برخی از زمان ما شده اند اعلام کرد تقریبا تمام برنامه های ما 524 00:32:27,860 --> 00:32:32,840 برای شروع شبیه به این - اعضای هیات تحریریه اصلی (خالی) - و پس از آن جلوتر رفته ایم 525 00:32:32,840 --> 00:32:35,110 و شروع به نوشتن کد ما. 526 00:32:35,110 --> 00:32:37,910 و ما ممکن است برخی از تیز در بالای فایل شامل داشته باشد، 527 00:32:37,910 --> 00:32:40,660 اما تقریبا تمام برنامه های ما تا کنون با این شروع 528 00:32:40,660 --> 00:32:44,200 حتی اگر شما ممکن است که در قسمت دیده می شود، در کتاب، منابع آنلاین 529 00:32:44,200 --> 00:32:46,570 که این در حقیقت باید از درجه اعتبار ساقط است. 530 00:32:46,570 --> 00:32:55,820 یکی دیگر از شکل های مشروع برای این را به argc هوشمند و پس از آن رشته argv []. 531 00:32:55,820 --> 00:32:57,500 بنابراین در حال حاضر این چیزی است که دلالت؟ 532 00:32:57,500 --> 00:33:01,320 به نظر می رسد که argc، است که کنوانسیون انسان - شما می توانید از این صنایع غذایی تماس بگیرید: 533 00:33:01,320 --> 00:33:03,710 اما آن را فقط می بسیار کمتر روشن به خوانندگان - 534 00:33:03,710 --> 00:33:09,330 argc فقط یک آرگومان به تابع اصلی به نام که نشان دهنده چه می باشد؟ 535 00:33:09,330 --> 00:33:12,450 چه argc برای کسانی که ایستاده اند؟ 536 00:33:12,450 --> 00:33:14,980 >> [پاسخ دانش آموز نامفهوم] >> بله، تعدادی از استدلال و یا تعداد بحث. 537 00:33:14,980 --> 00:33:16,510 این را به عنوان ساده ای است که به عنوان. 538 00:33:16,510 --> 00:33:19,160 چگونه بسیاری از استدلال به این برنامه منتقل شده است؟ 539 00:33:19,160 --> 00:33:20,630 به چه معنا است؟ 540 00:33:20,630 --> 00:33:27,090 صدای جرنگ جرنگ mario.c - - اگر در خط فرمان من چیزی شبیه به این اداره 541 00:33:27,090 --> 00:33:35,440 argc زمانی که من ضربه را وارد کنید رفتن به ارزش، تا حدودی اشتباه، 2. 542 00:33:35,440 --> 00:33:40,150 بنابراین معلوم می شود که argc تعداد آرگومان، 543 00:33:40,150 --> 00:33:46,280 اما به دلایل تاریخی، نام خود را از این برنامه است که در آن شمارش شده است. 544 00:33:46,280 --> 00:33:51,950 بنابراین argc 2 است که زمانی که من نوشتم صدای جرنگ جرنگ mario.c. 545 00:33:51,950 --> 00:33:54,290 چه ی argv شامل؟ 546 00:33:54,290 --> 00:33:57,020 اول از همه، ی argv به نظر می رسد مثل یک رشته است اما نه کاملا 547 00:33:57,020 --> 00:33:59,310 چرا که همان طور که از چهارشنبه گذشته و همه بیشتر امروز، 548 00:33:59,310 --> 00:34:02,890 این براکت نشان داده چه؟ این آرایه است. 549 00:34:02,890 --> 00:34:07,110 هیچ عدد در آرایه وجود دارد و باید به طور مستقیم احساس را 550 00:34:07,110 --> 00:34:10,790 چرا که افرادی که سال صدای جرنگ جرنگ پیش نوشت: مطمئنا تا به حال هیچ ایده 551 00:34:10,790 --> 00:34:16,300 چگونه بسیاری از واژه ها افرادی مانند ما را در سریع قبل از ضربه را وارد کنید را تایپ کنید. 552 00:34:16,300 --> 00:34:22,280 >> بنابراین در این مورد در اینجا به آنها اعلام کرده اند که تابع اصلی به عنوان یک آرایه از استدلال، 553 00:34:22,280 --> 00:34:24,590 0 یا بیشتر از استدلال است. 554 00:34:24,590 --> 00:34:26,460 آنها در پیشبرد دانم که چگونه بسیاری وجود دارد، 555 00:34:26,460 --> 00:34:29,690 بنابراین به عمد وجود ندارد در داخل تعدادی از این براکت است. 556 00:34:29,690 --> 00:34:32,750 اما واقعیت این است که از براکت مربع وجود دارد در حال گفتن کامپیوتر، 557 00:34:32,750 --> 00:34:34,639 انتظار یک آرایه. 558 00:34:34,639 --> 00:34:37,489 ی argv است که فقط نماد مختصر را برای بردار استدلال است. 559 00:34:37,489 --> 00:34:39,889 بردار راه فانتزی از گفتن آرایه، 560 00:34:39,889 --> 00:34:42,980 و آرایه های فانتزی از راه گفت: یک لیست و یا مجموعه است. 561 00:34:42,980 --> 00:34:47,360 بنابراین این حالت فقط بدان معناست که اگر شما مثل این می نویسم اصلی 562 00:34:47,360 --> 00:34:51,100 به جای اینکه مانند چگونه ما در حال انجام آن را برای چند هفته گذشته، 563 00:34:51,100 --> 00:34:54,699 برنامه شما در حال حاضر به پذیرفتن استدلال خط فرمان 564 00:34:54,699 --> 00:34:58,520 به طوری که دیگر نمی توانم شما را مجبور به نوشتن ماریو و سپس Enter را فشار دهید. 565 00:34:58,520 --> 00:35:01,610 پس از آن در یک عدد نوع که چگونه بسیاری از بلوک های بالا شما می خواهید هرم، 566 00:35:01,610 --> 00:35:03,100 را وارد کنید و سپس دوباره ضربه. 567 00:35:03,100 --> 00:35:07,720 ما حتی نمی نیاز به استفاده از GetString دیگر یا GetInt یا GetFloat که برای ماده. 568 00:35:07,720 --> 00:35:12,370 ما فقط می تواند کاربر را به تایپ این کلمات در اعلان خود انتظار 569 00:35:12,370 --> 00:35:16,850 درست مثل نویسندگان صدای جرنگ جرنگ تصمیم گرفت این امر می تواند یک برنامه واقعا آزار دهنده است 570 00:35:16,850 --> 00:35:20,550 اگر به کامپایل کد شما را برای نخستین بار صدای جرنگ جرنگ تایپ، ضربه را وارد کنید، 571 00:35:20,550 --> 00:35:24,090 پس از آن ما را به کاربر گفت: لطفا نام فایلی که می خواهید به کامپایل، 572 00:35:24,090 --> 00:35:26,920 پس از آن ما در mario.c تایپ و Enter را فشار دهید. 573 00:35:26,920 --> 00:35:29,850 اما این دقیقا همان چیزی است که ما انجام داده ایم را برای کاربران خود گذشته دو هفته است. 574 00:35:29,850 --> 00:35:33,550 ما با استفاده از GetString و صبر کنید تا زمانی که برنامه در حال اجرا است تا آنها را برای ورودی بی درنگ. 575 00:35:33,550 --> 00:35:36,710 که دیگر نیاز به صورت. 576 00:35:36,710 --> 00:35:41,160 >> بنابراین در این مثال در اینجا، ما در حال حاضر رشته argv، 577 00:35:41,160 --> 00:35:43,390 و این بیش از حد ساده است، 578 00:35:43,390 --> 00:35:45,610 چرخ آموزشی است که خیلی زود خواهد آمد. 579 00:35:45,610 --> 00:35:50,860 این روش مناسب تر از نوشتن این بیانیه جایگزین اصلی 580 00:35:50,860 --> 00:35:54,740 زیرا به نظر می رسد که آنچه که ما خواستار رشته در واقع یک ستاره، 581 00:35:54,740 --> 00:35:58,440 ستاره، در تعریف واقعی آن است، اما این فقط به نظر می رسد پیچیده، 582 00:35:58,440 --> 00:36:02,600 آن را در ابتدا گیج کننده است، بنابراین ما با ایجاد یک مترادف انواع ساده 583 00:36:02,600 --> 00:36:09,340 در کتابخانه CS50 که نقشه * کاراکتر کلمه بیشتر کاربر پسند به این رشته است. 584 00:36:09,340 --> 00:36:13,180 >> پس در واقع سعی کنید پس از آن اجازه دهید. اجازه بدهید من به جلو بروید و باز کردن gedit اینجا. 585 00:36:13,180 --> 00:36:17,010 اجازه بدهید من بروم جلو و باز ی argv از 1. 586 00:36:17,010 --> 00:36:21,620 این برنامه ظاهرا چاپ استدلال است، اما در شرایط انگلیسی، 587 00:36:21,620 --> 00:36:26,290 با نگاه کردن به این کد، چه این کار را انجام دهند به طور خاص تر است؟ 588 00:36:26,290 --> 00:36:35,910 اگر من در فرمان a.out صنایع غذایی نوار نوع، چه می شود در پنجره سیاه و سفید چاپ شده است؟ 589 00:36:35,910 --> 00:36:41,260 بار، صنایع غذایی A.out را وارد کنید. 590 00:36:43,120 --> 00:36:48,300 پیش بروید. آره. >> [پاسخ دانش آموز نامفهوم] 591 00:36:48,300 --> 00:36:52,730 خوب است. بنابراین a.out، خط جدید، صنایع غذایی، خط جدید، نوار، خط جدید. 592 00:36:52,730 --> 00:36:54,980 چرا این؟ ما مطمئنا می تواند در یک لحظه به تایید. 593 00:36:54,980 --> 00:36:56,940 این نوع خط کرکی از کد است. 594 00:36:56,940 --> 00:36:59,560  این فقط به چاپ یک خط جدید درست کنی تا همه چیز زیباتر بر روی صفحه نمایش. 595 00:36:59,560 --> 00:37:03,730 این حلقه که تکرار از 0 تا argc، 596 00:37:03,730 --> 00:37:07,210 و این افزایش در هر تکرار + +. 597 00:37:07,210 --> 00:37:12,270 پس این است که در حال حاضر گفت: چاپ یک رشته، به عنوان توسط S٪ ضمنی است. 598 00:37:12,270 --> 00:37:16,460 ی argv [من] است که تقریبا ایده از همان مثال قبلی. 599 00:37:16,460 --> 00:37:19,580 ما برای تماس ثانیه متغیر و در حال حاضر آن را نامیده می شود، خودسرانه، و argv. 600 00:37:19,580 --> 00:37:24,270 این به این معنی چاپ استدلال i ام است که در خط فرمان تایپ شده، 601 00:37:24,270 --> 00:37:28,690 و سپس بعد از این همه چیز که انجام شده است، فقط برای اندازه گیری خوبی چاپ یک خط جدید دیگر. 602 00:37:28,690 --> 00:37:31,600 >> پس دیدن این اجازه. اجازه بدهید باز کردن پنجره ترمینال. 603 00:37:31,600 --> 00:37:37,470 اجازه ی argv، از مجموع 1 کامپایل کنم، و در حال حاضر اجازه ی argv اجرا، از مجموع 1 را وارد کنید. سلام. باشه. 604 00:37:37,470 --> 00:37:40,850 اجرا نوار صنایع غذایی. جالب است. باز. 605 00:37:40,850 --> 00:37:42,640 و اگر شما همیشه تعجب که چرا من با تایپ این، 606 00:37:42,640 --> 00:37:45,010 این کنوانسیون علوم کامپیوتر و نرم افزار کامپیوتر. 607 00:37:45,010 --> 00:37:48,050 جهان اغلب نیاز به متغیرهایی کلامی برای کلمات. 608 00:37:48,050 --> 00:37:50,090 بنابراین اگر شما می خواهید به بحث در مورد برخی از رشته عمومی، 609 00:37:50,090 --> 00:37:53,250 دانشمندان کامپیوتر فقط تمایل دارند برای گفتن صنایع غذایی زمانی که آنها نیاز به یک کلمه تصادفی، 610 00:37:53,250 --> 00:37:55,530 سپس آنها می گویند نوار اگر آنها نیاز به یک دومین کلمه تصادفی، 611 00:37:55,530 --> 00:37:59,100 سپس آنها را باز می گویند اگر آنها نیاز به یک کلمه سوم، پس از آن که آنها می گویند qux اگر آنها نیاز به یک کلمه چهارم، 612 00:37:59,100 --> 00:38:01,520 و پس از آن بزرگ آنلاین بحث مذهبی که به آنچه پس از qux می آید وجود دارد، 613 00:38:01,520 --> 00:38:04,940 بنابراین شما می توانید به گوگل است که به شکل از آنچه به عبارت دیگر خودسرانه باید. 614 00:38:04,940 --> 00:38:07,480 اما این امر به هیچ وجه به این معنی، 615 00:38:07,480 --> 00:38:10,100 هر چند صنایع غذایی نوار، اگر شما گوگل که، که به این معنی، 616 00:38:10,100 --> 00:38:12,780 که بخشی از ریشه شناسی در اینجا است. 617 00:38:12,780 --> 00:38:17,550 >> بنابراین همه این است که انجام این کار پس از آن چاپ 1، از مجموع این رشته ها در هر خط. 618 00:38:17,550 --> 00:38:19,900 بنابراین اگر من به جای هر چند، می خواستم برای به دست آوردن کمی خیال باف، 619 00:38:19,900 --> 00:38:22,550 فرض کنید که من نمی خواهم هر رشته در هر خط را به چاپ؛ 620 00:38:22,550 --> 00:38:26,220 من می خواستم برای چاپ هر کاراکتر از هر رشته ای در هر خط. 621 00:38:26,220 --> 00:38:28,550 چگونه می تواند من به جای انجام این کار؟ 622 00:38:28,550 --> 00:38:33,720 چه می توانم در مورد این برنامه را تغییر دهید اگر من می خواهم به چاپ هر کلمه نیست 623 00:38:33,720 --> 00:38:37,290 اما من می خواهم برای چاپ هر حرف واژه نامه نامه، 624 00:38:37,290 --> 00:38:40,590 سپس واژه نامه بعدی نامه نامه؟ 625 00:38:40,590 --> 00:38:43,650 چگونه می توانم این ایده ترکیب تا کنون؟ آره. 626 00:38:43,650 --> 00:38:47,390 [دانشجو]٪ C است. >> همه حق است. بنابراین ما در جایی نیاز به یک C٪. 627 00:38:47,390 --> 00:38:50,680 خوب است، چرا که من نمی خواهم به چاپ رشته ها در کل، من می خواهم به چاپ کاراکتر. چه چیز دیگری؟ 628 00:38:50,680 --> 00:38:54,290 >> [پاسخ دانش آموز نامفهوم] >> جالب است. 629 00:38:54,290 --> 00:38:56,860 بنابراین ما نیاز به مرتب کردن بر اساس از بعد دوم در اینجا در حال حاضر 630 00:38:56,860 --> 00:39:02,300 به دلیل argv را به عنوان یک آرایه فکر می کنم، اما آن را به یک آرایه از رشته ها است. 631 00:39:02,300 --> 00:39:07,170 اما به عنوان دوست دارید، 15 دقیقه قبل، چه یک رشته؟ این یک آرایه ای از کاراکتر ها است. 632 00:39:07,170 --> 00:39:12,320 پس در واقع، ی argv یک آرایه ای از آرایه ای از کاراکتر ها است، 633 00:39:12,320 --> 00:39:14,870 آرایه ای از آرایه از کاراکتر ها است. 634 00:39:14,870 --> 00:39:19,170 بنابراین معلوم می شود که ما می توانیم از نمادهای فقط مربع براکت استفاده کنید. بنابراین این کار را کنیم. 635 00:39:19,170 --> 00:39:23,650 در بالای این حلقه در خط 19، من قصد دارم به تکرار از من تا به argc، 636 00:39:23,650 --> 00:39:25,760 اما بعد از آن من قصد دارم برای انجام این کار: 637 00:39:25,760 --> 00:39:27,580 برای - من می توانم من استفاده نمی کند در حال حاضر. 638 00:39:27,580 --> 00:39:30,300 من نیاز به متغیر دیگر چون من می خواهم به تکرار بیش از کلمات 639 00:39:30,300 --> 00:39:32,640 اما پس از آن نیز بیش از حروف در کلمات 640 00:39:32,640 --> 00:39:37,280 بنابراین من نوعی از یک محور عمودی و یک محور افقی، مرتب کردن بر اساس مفهومی است. 641 00:39:37,280 --> 00:39:43,930 بنابراین د نوع int می شود 0 در نظر گرفته شده است، و سپس من می خواهم به انجام د به عنوان زمانی که د کمتر از - و من این تمیز را در کمی. 642 00:39:43,930 --> 00:39:48,410 چگونه می توانم بیش از حروف در یک رشته تکرار؟ ما این را یک لحظه پیش. 643 00:39:48,410 --> 00:39:54,670 Strlen ی argv []. خوب است. 644 00:39:54,670 --> 00:39:57,860 و دوباره، من ناکارآمدی کوچک در اینجا با ایجاد نمی N یا هر چیز دیگری، 645 00:39:57,860 --> 00:39:59,610 اما ما را دوباره به آن. 646 00:39:59,610 --> 00:40:03,270 >> بنابراین در حال حاضر د + +. در حال حاضر من به تورفتگی بیشتر در اینجا. 647 00:40:03,270 --> 00:40:06,950 چه من در حال حاضر می خواهم تا در هر تکرار چاپ؟ 648 00:40:06,950 --> 00:40:09,720 [پاسخ دانش آموز نامفهوم] >> پس [من] به من کلمه ای به من بدهید. 649 00:40:09,720 --> 00:40:12,910 های [i] [J]، مرتب کردن و مانند یک ماتریس. 650 00:40:12,910 --> 00:40:14,810 کسانی که از شما با ریاضی-y زمینه های، 651 00:40:14,810 --> 00:40:19,340 ما در حال مرتب کردن بر اساس نمایه سازی حتی عمیق تر به این ماتریس یا آرایه ای از آرایه، 652 00:40:19,340 --> 00:40:21,380 این ساختار 2 بعدی است. 653 00:40:21,380 --> 00:40:25,070 بنابراین در حال حاضر اجازه دهید ببینیم که چه چیزی اتفاق می افتد در اینجا. اجازه بدهید من بزرگتر پنجره ترمینال باز کردن. 654 00:40:25,070 --> 00:40:28,170 اجازه بدهید من عمل را از argv را از 1. 655 00:40:28,170 --> 00:40:33,090 و من پیچ تا اینجا، است که درس خوبی به خاطر من هم فراموش کرده به انجام این کار شده است. 656 00:40:33,090 --> 00:40:37,150 به طور ضمنی اعلام 'strlen C تابع کتابخانه با نوع بدون علامت "- 657 00:40:37,150 --> 00:40:40,360 من حتی نمی دانم آنچه را که بقیه از آن وسیله است، اما من را دیده اند، پیش از این، 658 00:40:40,360 --> 00:40:42,000 به طور ضمنی اعلام کرد. 659 00:40:42,000 --> 00:40:45,540 هر زمان که ما می بینیم این خطا، چه این معمولا نشان؟ 660 00:40:45,540 --> 00:40:48,520 >> [پاسخ دانش آموز نامفهوم] >> من یک کتابخانه تا بالا را فراموش کرده. اما یک دقیقه صبر کنید. 661 00:40:48,520 --> 00:40:51,690 معمولا من screwed تا به خاطر من فراموش کتابخانه CS50، اما وجود دارد. 662 00:40:51,690 --> 00:40:54,480 معمولا من پیچ زیرا فراموش کرده ام استاندارد I / O. 663 00:40:54,480 --> 00:40:57,960 و صادقانه بگویم، من حتی نمی نیاز به این. ما GetString استفاده امروز. 664 00:40:57,960 --> 00:40:59,900 بنابراین آنچه که من از دست رفته؟ 665 00:40:59,900 --> 00:41:04,860 یکی دیگر از کتابخانه که در حال حاضر ما نیاز به استفاده از string.h گاهی اوقات به نام وجود دارد، 666 00:41:04,860 --> 00:41:08,980 و این فقط در عین حال یکی دیگر از کتابخانه که دارای توابع بیشتری را که در استاندارد I / O. 667 00:41:08,980 --> 00:41:11,640 >> بازگشت به پنجره ترمینال بزرگ من. 668 00:41:11,640 --> 00:41:16,670 باشه. در حال حاضر، لعنت، من حدس می زنم من اشتباه بود. من با استفاده از کتابخانه CS50. 669 00:41:16,670 --> 00:41:18,460 بنابراین ما می توانیم این کار را در هر کدام از 2 راه حل. 670 00:41:18,460 --> 00:41:21,510 ما می توانیم چرخ های آموزشی را در حال حاضر و فقط این کار را، 671 00:41:21,510 --> 00:41:26,600 یا نوع بیایید از نگه داشتن که ساده فقط در حال حاضر، رب این پشت در، 672 00:41:26,600 --> 00:41:30,180 حل این مشکل، و در حال حاضر به بازگشت به پنجره ترمینال. 673 00:41:30,180 --> 00:41:33,080 بنابراین برای روشن، در کتابخانه CS50 است نه تنها توابع، 674 00:41:33,080 --> 00:41:36,920 آن را نیز در رشته کلمه کلیدی، به همین دلیل است که خطا رخ داده است. 675 00:41:36,920 --> 00:41:43,010 >> بنابراین در اینجا ما بروید. من ثابت هر دو از مسائل مربوط به کتابخانه. را وارد کنید. خوب است. 676 00:41:43,010 --> 00:41:49,250 ی argv، صنایع غذایی، از مجموع 1 بار، را وارد کنید. عالی. 677 00:41:49,250 --> 00:41:52,830 بنابراین در حال حاضر ما هر حرف از هر کلمه 1 در هر خط چاپ، 678 00:41:52,830 --> 00:41:55,290 که برای یک برنامه بسیار جالب را ندارد، 679 00:41:55,290 --> 00:41:59,350 اما توجه کنید در حال حاضر در حال حاضر توانایی نه تنها کلمات تکرار 680 00:41:59,350 --> 00:42:04,090 اما همچنین بیش از نامه های فردی در کلمات، به نظر می رسد که بدجور آشنا 681 00:42:04,090 --> 00:42:10,330 حتی ساده ترین برنامه های کاربردی مانند تقلا حروف در یک رشته مانند این. 682 00:42:10,330 --> 00:42:12,410 اجازه دهید به جلو و 5 دقیقه استراحت ما در اینجا. 683 00:42:12,410 --> 00:42:14,410 و هنگامی که ما آمده ایم، ما شروع به صحبت در مورد بهره وری 684 00:42:14,410 --> 00:42:17,670 که ما می توانیم این چیزها را بهتر انجام دهد. 685 00:42:19,370 --> 00:42:21,900 >> بسیار خوب. ما برگشت. 686 00:42:21,900 --> 00:42:26,970 تشکر به یکی از TFS ما که نقش بسیاری از bananagrams، 687 00:42:26,970 --> 00:42:30,000 ما در واقع یک دسته کامل از کاراکتر با ما امروز در اینجا 688 00:42:30,000 --> 00:42:32,520 از لحاظ فیزیکی تجسم با این قطعه کوچک پلاستیکی، 689 00:42:32,520 --> 00:42:36,910 و اجازه دهید به من پیشنهاد می کنند که این لوح سفید خالی در اینجا نشان دهنده RAM در کامپیوتر من - 690 00:42:36,910 --> 00:42:39,790 لپ تاپ، دسکتاپ، هر آنچه که - وجود دارد و به نظر می رسد مانند بسیاری از آن 691 00:42:39,790 --> 00:42:44,090 چرا که اگر ما شروع به سفت این RAM به اندازه تکه های کوچک بایت، 692 00:42:44,090 --> 00:42:48,970 اجازه دهید خودسرانه می گویند این چیزی است که اندازه و تار نشان دهنده - 693 00:42:48,970 --> 00:42:52,430 وجود دارد می رویم، و بیایید زوم کردن کمی - 694 00:42:52,430 --> 00:42:56,120 بیایید می گویند، چیزی که اندازه نشان دهنده یک بایت. 695 00:42:56,120 --> 00:43:00,400 بنابراین، ما در واقع می تواند کل یک دسته از بایت ها یا شخصیت های داخل این حافظه مناسب، 696 00:43:00,400 --> 00:43:02,860 اندازه نسبی در اینجا پیشنهاد شده است. 697 00:43:02,860 --> 00:43:06,780 >> بنابراین در حال حاضر فرض کنید که هدف این است که به تخصیص حافظه برای یک رشته است. 698 00:43:06,780 --> 00:43:08,680 چگونه این در واقع کار می کند؟ 699 00:43:08,680 --> 00:43:11,380 در برنامه های ما در حال نوشتن، ما معمولا با استفاده از GetString، 700 00:43:11,380 --> 00:43:16,300 اما در حال حاضر، به وضوح، این کانال دیگر از طریق آن ما می توانیم ورودی کاربر در argv وجود دارد 701 00:43:16,300 --> 00:43:18,190 از طریق خط فرمان استدلال. 702 00:43:18,190 --> 00:43:20,580 اما آنچه واقعا در زیر هود؟ 703 00:43:20,580 --> 00:43:24,920 به نظر می رسد اگر ما تماس بگیرید - بیایید حرکت بازگشت به GetString - GetString تابع 704 00:43:24,920 --> 00:43:28,190 در کتابخانه CS50، کاربر یک رشته را برانگیخت، 705 00:43:28,190 --> 00:43:30,780 انواع کاربر در برخی از کلمه ها - اجازه دهید آن را فراخوانی خوش آمدید. 706 00:43:30,780 --> 00:43:35,410 و ما شده ایم گفت: در چند هفته گذشته است که مقدار بازگشتی GetString 707 00:43:35,410 --> 00:43:37,750 در واقع یک رشته مانند کلمه HELLO. 708 00:43:37,750 --> 00:43:39,660 >> اما آنچه GetString واقعا انجام؟ 709 00:43:39,660 --> 00:43:45,230 عنوان نوع کاربر در HELLO را وارد کنید، GetString است تا بدانند که، 710 00:43:45,230 --> 00:43:47,930 خوب، چند حرف است؟ این H-E-L-L-O است. 711 00:43:47,930 --> 00:43:52,500 پس از آن نیاز به تخصیص، به آن نیاز دارد در این مورد از سیستم عامل - لینوکس - 712 00:43:52,500 --> 00:43:55,410 برای حداقل 5 کلمه در ادامه متن برای ذخیره HELLO. 713 00:43:55,410 --> 00:43:59,570 و آنچه در آن سپس به انجام یک بار آن را می شود به آن 5 بایت از سیستم عامل 714 00:43:59,570 --> 00:44:04,120 است به وضع HELLO پشت به پشت به پشت به پشت. 715 00:44:04,120 --> 00:44:11,070 و بنابراین، آنچه که واقعا از GetString بازگردانده یک تکه از داده ها است که به نظر می رسد مثل این است. 716 00:44:11,070 --> 00:44:16,850 اما این است که کمی نادرست است چرا که معلوم است که آن را به عنوان ساده ای نیست 717 00:44:16,850 --> 00:44:20,310 فقط در حافظه کامپیوتر ذخیره HELLO 718 00:44:20,310 --> 00:44:24,140 چرا که برنامه من این است که من نوشتن در C و سپس خواستار GetString دوباره فرض کنید 719 00:44:24,140 --> 00:44:28,210 و کلمه بعدی نوع کاربر در خداحافظ، خداحافظ. 720 00:44:28,210 --> 00:44:31,300 خب، من باید به تناسب جایی که خداحافظی کلمه در حافظه است. 721 00:44:31,300 --> 00:44:33,790 من نمی توانم وصله سلام. 722 00:44:33,790 --> 00:44:37,320 به عنوان مثال، من نمی خواهم که کامپیوتر برای شروع به جای نوشتن مثل این 723 00:44:37,320 --> 00:44:41,400 کلمه اصلی که چرا من هنوز هم ممکن است با استفاده از کلمه HELLO در یک متغیر 724 00:44:41,400 --> 00:44:43,070 در جایی دیگر در برنامه های من. 725 00:44:43,070 --> 00:44:45,900 >> B-Y-E برای پایان دادن به جایی دیگر در حافظه است. 726 00:44:45,900 --> 00:44:50,460 اما این کنوانسیون به طور معمول این است که رشته شما اختصاص 727 00:44:50,460 --> 00:44:54,940 احتمالا، اما نه همیشه، در جریان است تا در محل حافظه موجود برای پایان دادن به. 728 00:44:54,940 --> 00:44:57,370 و اگر من سیستم عامل برای هر حافظه پرسیده شده 729 00:44:57,370 --> 00:45:01,380 از آخرین باری که من به نام GetString، شانس کلمه خداحافظ 730 00:45:01,380 --> 00:45:05,790 برای پایان دادن به حق بعد از کلمه HELLO در حافظه است. 731 00:45:05,790 --> 00:45:10,550 اما در این مرحله شما شاید می تواند که در آن یک مشکل بالقوه را ببینید. 732 00:45:10,550 --> 00:45:13,310 از آنجا که تکه های حافظه، بایت بعدی که فقط آزاد بودند - 733 00:45:13,310 --> 00:45:18,230 تمیز کردن تخته سنگ سفید - در حافظه کامپیوتر درست در کنار HELLO 734 00:45:18,230 --> 00:45:23,670 آن را مانند رشته من در حال حاضر ممکن است به طور ناگهانی تغییر خواستم احساس 735 00:45:23,670 --> 00:45:26,410 چون من اساسا عوض شده است آن را به HELLOBYE 736 00:45:26,410 --> 00:45:31,310 به جای به نحوی demarcing شروع از خداحافظی و پایان HELLO. 737 00:45:31,310 --> 00:45:33,920 >> پس از آن معلوم می کند که چه چیزی واقعا در زیر هود، 738 00:45:33,920 --> 00:45:37,570 که شما ممکن است در منابع آنلاین و یا بخش یا کتاب دیدم 739 00:45:37,570 --> 00:45:41,780 یا نه در تمام فقط رتبهدهی نشده است این است که در واقع وجود دارد علامت گذاری عمدی 740 00:45:41,780 --> 00:45:45,890 بین کلمات در حافظه کامپیوتر است. 741 00:45:45,890 --> 00:45:52,480 و در واقع، در این مورد در اینجا، نه تنها خداحافظی درست در کنار HELLO قرار دهید، 742 00:45:52,480 --> 00:45:58,610 در عوض، کامپیوتر قرار می دهد یک شخصیت خاص، کاراکتر ویژه ای تهی، پس به صحبت می کنند، 743 00:45:58,610 --> 00:46:03,050 است که با یک نشانگر با بک اسلش 0 نشان داده شده است. 744 00:46:03,050 --> 00:46:06,700 بنابراین داستان کوتاه مدت، به یاد آورید که شخصیت ها در ASCII نشان داده شده است. 745 00:46:06,700 --> 00:46:09,680 ASCII است که فقط یک نگاشت بین اعداد و حروف، 746 00:46:09,680 --> 00:46:13,870 و بسیاری از کسانی که نامه شروع در حدود 65 برای سرمایه، 747 00:46:13,870 --> 00:46:19,780 اما این معلوم است که مطمئنا شما هم می توانید با نشان دادن 0 تعداد را به عنوان یک عدد صحیح و یا باینری، 748 00:46:19,780 --> 00:46:22,690 و معلوم جهان تصمیم گرفت طولانی، مدتها پیش، "شما می دانید چه؟" 749 00:46:22,690 --> 00:46:27,550 "بیایید رزرو 0 تعداد عنوان نمایندگی هر کاراکتر بر روی صفحه کلید - 750 00:46:27,550 --> 00:46:30,810 "هیچ حروف، اعداد، نقطه گذاری. 0 خاص است." 751 00:46:30,810 --> 00:46:35,830 "این می شود که از کاراکتر ویژه ای تهی، و ما در حال رفتن به آن را به عنوان \ 0 ارسال. 752 00:46:35,830 --> 00:46:41,170 تفاوت که اگر ما فقط نوشت: 0، 0، یک شخصیت است. 753 00:46:41,170 --> 00:46:45,700 به یاد بیاورید که کد ASCII برای 0 وجود دارد، به مدت 1، 2، برای 3 754 00:46:45,700 --> 00:46:50,570 چون 0 کاراکتر از 0 تعداد متفاوت است. 755 00:46:50,570 --> 00:46:54,270 و شما می توانید ببینید که اگر شما نگاه از 1 هفته، هنگامی که ما برای اولین بار در مورد ASCII صحبت کردیم، 756 00:46:54,270 --> 00:46:59,130 0 و 1 و 2 و 3 تمام راه را تا 9، خودش بود، خود را به کدهای ASCII. 757 00:46:59,130 --> 00:47:02,300 آنها، نه تصادفا، 0 تا 9. آنها بسیار متفاوت است. 758 00:47:02,300 --> 00:47:08,770 بنابراین 0 فقط به معنی "من ویژه،" و 0 \ معنی، به معنای واقعی کلمه، "من شخصیت 0. 759 00:47:08,770 --> 00:47:11,360 "من این مقدار خاص، شخصیت تهی است." 760 00:47:11,360 --> 00:47:16,930 بنابراین من در واقع نیاز به یکی دیگر از این از من می تواند همان اشتباه را دو بار. 761 00:47:16,930 --> 00:47:21,550 >> بنابراین بعد از خداحافظی کلمه ما همچنین نیاز به رفتن به یکی از این کاراکتر ها تهی است. 762 00:47:21,550 --> 00:47:27,090 قلم من گرفتن من در اینجا و به من اجازه به سرعت جلب یکی دیگر از \ 0 763 00:47:27,090 --> 00:47:30,480 به طوری که پس از من از سیستم عامل به مدت 2 رشته خواسته 764 00:47:30,480 --> 00:47:33,270 از طریق GetString توسط یکی دیگر از تماس به GetString، 765 00:47:33,270 --> 00:47:35,640 این همان چیزی است که در واقع در حافظه است. 766 00:47:35,640 --> 00:47:39,900 بنابراین، هنگامی که من به عقب بر گردیم یک رشته، من واقعا پشت، 767 00:47:39,900 --> 00:47:43,450 و زمانی که من به رشته بعدی، من واقعا از برگشت آن است. 768 00:47:43,450 --> 00:47:47,910 بنابراین این مستلزم این سوال، strlen، اول از همه، چیزی است که باید آن را بازگشت؟ 769 00:47:47,910 --> 00:47:54,650 وقتی که من اسمش strlen در رشته s و کلمه HELLO که کاربر در تایپ بود، 770 00:47:54,650 --> 00:47:57,800 چه ما به وضوح می گویند طول HELLO چند دقیقه پیش بود؟ 771 00:47:57,800 --> 00:48:01,290 5 بود، درست است؟ H-E-L-L-O. و این در واقع چگونه strlen با این نسخهها کار. 772 00:48:01,290 --> 00:48:05,670 این تابع چیزی است که یک موجود طبیعی انسان را در طول یک رشته به انتظار. 773 00:48:05,670 --> 00:48:11,030 اما در واقعیت، آرایه ای از کاراکتر است که ذخیره سازی سلام چقدر بزرگ است؟ 774 00:48:11,030 --> 00:48:12,770 در واقع 6. 775 00:48:12,770 --> 00:48:15,740 بنابراین strlen می کند که واقعیت را به شما اشاره نمی کند. 776 00:48:15,740 --> 00:48:20,300 اما در قسمت پایین هود کامپیوتر در واقع با استفاده از 6 بایت برای ذخیره یک کلمه 5-نامه، 777 00:48:20,300 --> 00:48:22,380 و این درست است بدون توجه به چه مدت کلمه است. 778 00:48:22,380 --> 00:48:26,470 همیشه وجود دارد برای رفتن به ویژه شخصیت فسخ تهی در پایان از رشته 779 00:48:26,470 --> 00:48:28,800 طول کل آن demarc. 780 00:48:28,800 --> 00:48:33,430 >> بنابراین اگر شما در حال حاضر پیاده سازی strlen 20، 30 سال پیش، 781 00:48:33,430 --> 00:48:35,520 چگونه می توانم شما را در مورد اجرای strlen خود برود؟ 782 00:48:35,520 --> 00:48:39,980 ما برای مسلم است که در آن وجود دارد، درست مثل ما برای مسلم است که printf وجود دارد، 783 00:48:39,980 --> 00:48:42,850 اما اگر HELLO کلمه در مورد 784 00:48:42,850 --> 00:48:45,220 و آنچه که من در حافظه چیزی است که به نظر می رسد مثل این است، 785 00:48:45,220 --> 00:48:48,130 اگر شما به reimplement strlen دلیل این که شما به پرسیده بودند از 786 00:48:48,130 --> 00:48:50,260 و یا به دلیل، رک و پوست کنده به شما بود نمی دانم strlen وجود داشته است - 787 00:48:50,260 --> 00:48:54,280 شما تا به حال به رول این یکی در را آن گونه که مایلید تغییر دهید - چگونه می تواند strlen شما پیاده سازی 788 00:48:54,280 --> 00:48:57,760 زمانی که به چیزی است که به نظر می رسد مثل این؟ 789 00:48:57,760 --> 00:49:02,750 حالا که ما می دانیم یک رشته آرایه، ما می توانیم تکرار بیش از هر یک از شخصیت های منحصر به فرد 790 00:49:02,750 --> 00:49:06,320 با استفاده از چیزی شبیه به - سعی کنید برای انجام این کار در پرواز. 791 00:49:06,320 --> 00:49:12,060 >> اجازه بدهید من به دستگاه. اجازه دهید یک فایل جدید، strlen.c ایجاد کنم. 792 00:49:12,060 --> 00:49:19,260 اجازه بدهید من به جلو بروید و در حال حاضر عبارتند از: stdio.h به طوری که در حال حاضر دسترسی به printf است. 793 00:49:19,260 --> 00:49:25,820 به من اجازه انجام اعضای هیات تحریریه اصلی (خالی). آه. من فقط این کار را بر روی خود من در حال حاضر برای انجام این کار پس از آن است. [chuckles] 794 00:49:25,820 --> 00:49:28,300 متشکرم. 795 00:49:28,300 --> 00:49:31,000 این همان چیزی است که من انجام می دهند. بسیار خوب. 796 00:49:31,000 --> 00:49:34,820 بنابراین قبل از من را بر روی صفحه نمایش تبدیل شده است، من تایپ تمام آن. 797 00:49:34,820 --> 00:49:37,550 و در حال حاضر آنچه که من قصد دارم برای انجام این کار به شرح زیر است: 798 00:49:37,550 --> 00:49:40,360 printf ("من یک رشته دهد:") 799 00:49:40,360 --> 00:49:42,700 که فقط دستورالعمل کرکی. 800 00:49:42,700 --> 00:49:45,700 در حال حاضر من می توانم GetString رشته = به شما اجازه می دهد تا. 801 00:49:45,700 --> 00:49:47,260 من در حال حاضر باید برای ایجاد یک تغییر در حال حاضر. 802 00:49:47,260 --> 00:49:52,740 من با استفاده از کتابخانه CS50 به طور ناگهانی، بنابراین اجازه دهید من به جلو بروید و تایپ در cs50.h. 803 00:49:52,740 --> 00:50:00,720 -٪ D، strlen [S]: printf ("طول: و در حال حاضر این کار را انجام 804 00:50:00,720 --> 00:50:03,540 و من انجام نشده است. چه چیز دیگری می توانم برای اضافه کردن به این برنامه؟ 805 00:50:03,540 --> 00:50:05,740 >> [دانشجوی] string.h. >> string.h. 806 00:50:05,740 --> 00:50:10,800 بنابراین در حال حاضر، ما در حال استفاده از strlen، بنابراین اطمینان حاصل کنید که کامپایلر می داند که در آن است، 807 00:50:10,800 --> 00:50:12,390 بنابراین سلامت عقل کمی بررسی کنید. 808 00:50:12,390 --> 00:50:16,400 من یک رشته در خط 8 و در خط 9 من چاپ کردن طول آن با D٪ است. 809 00:50:16,400 --> 00:50:19,400 پس جلو بروید و اجازه دهید تا باز. 810 00:50:19,400 --> 00:50:23,380 ما شده اند را strlen - کامپایل درست - 811 00:50:23,380 --> 00:50:30,120 strlen - اجازه بدهید من در زوم - را وارد کنید، H-E-L-L-O، را وارد کنید. طول 5 است. 812 00:50:30,120 --> 00:50:32,730 >> خوب، پس strlen به نظر می رسد به کار است، اما جهان می دانستند که. 813 00:50:32,730 --> 00:50:37,310 بنابراین در حال حاضر پیاده سازی strlen خودمان را به عنوان شرح زیر است. 814 00:50:37,310 --> 00:50:39,490 اجازه دهید این کتابخانه را به من دور است. 815 00:50:39,490 --> 00:50:42,590 ما دیگر دسترسی به string.h چرا که من حتی نمی دانند که آن وجود داشته است. 816 00:50:42,590 --> 00:50:45,970 اما این درست است زیرا من می توانم پیاده سازی strlen خودم 817 00:50:45,970 --> 00:50:50,200 و دارای یک رشته به نام ورودی آن را، 818 00:50:50,200 --> 00:50:53,830 و در حال حاضر من باید به شکل از طول این رشته است. 819 00:50:53,830 --> 00:50:55,880 پس چگونه می تواند این کار کنم؟ 820 00:50:55,880 --> 00:51:00,190 اگر من - بیایید ببینید که چگونه به انجام این کار - چه چیزی را می خواهید انجام دهید؟ 821 00:51:00,190 --> 00:51:04,130 >> [پاسخ دانش آموز نامفهوم] >> درست است. 822 00:51:04,130 --> 00:51:05,970 بنابراین ما می توانیم این کار را در یک دسته از راه انجام دهد. اجازه بدهید من سعی کنید این روش را به. 823 00:51:05,970 --> 00:51:10,220 اجازه دهید من خودم یک متغیر از نوع int و من، بنابراین من از 0 شروع می شود. 824 00:51:10,220 --> 00:51:19,380 و اجازه دهید این می گویند من: در حالی که ورودی های [i] برابر است به آنچه که نیست؟ \ 0 825 00:51:19,380 --> 00:51:23,480 پس از آن معلوم است، با این مورد با تمام کاراکتر زمانی که آنها را به نوشتن به معنای واقعی کلمه در یک برنامه، 826 00:51:23,480 --> 00:51:25,940 شما مجبور به استفاده از نقل قول تکی، به نقل از دو برابر نکنید. 827 00:51:25,940 --> 00:51:29,250 بنابراین اگر من در حال نوشتن نامه، من می خواهم که انجام دهید، حرف ب، من می خواهد که انجام دهد. 828 00:51:29,250 --> 00:51:33,440 ، در مقابل این امر می تواند یک رشته، یک شخصیت نیست. 829 00:51:33,440 --> 00:51:38,470 >> بنابراین من می خواهم \ 0 به معنای واقعی کلمه. چه من می خواهم که در این حلقه انجام می شود؟ 830 00:51:38,470 --> 00:51:42,650 در واقع، من نیاز به یک متغیر دیگر، پس از 0 طول هوشمند می شود. 831 00:51:42,650 --> 00:51:46,190 حتی اگر شما مطمئن نیستید به همین دلیل ما شروع به راه ما، 832 00:51:46,190 --> 00:51:50,110 اکنون که ما در حال رفتن به پایین این جاده، چه چیزی من می خواهم در خط 9 انجام دهد؟ 833 00:51:50,110 --> 00:51:55,820 + طول + و پس از آن را در اینجا در خط 10، طول بازگشت. 834 00:51:55,820 --> 00:51:58,370 پس چگونه است strlen اجرا شده است؟ 835 00:51:58,370 --> 00:52:00,550 در واقع احتمالا شبیه به این انجام شده است. 836 00:52:00,550 --> 00:52:03,470 شاید شخص یک حلقه for استفاده می شود، شاید انجام این کار در حالی که حلقه - که می داند؟ 837 00:52:03,470 --> 00:52:05,940 ما واقعا می خواهم به زیر کاپوت نگاهی به کد منبع واقعی 838 00:52:05,940 --> 00:52:08,520 در بعضی از فایل به نام string.c احتمالا. 839 00:52:08,520 --> 00:52:10,480 >> اما در اینجا فکر می کنم در مورد آنچه که من انجام می دهند. 840 00:52:10,480 --> 00:52:13,640 من اعلام یک متغیر به نام من به، تنظیم آن را به 0 برابر است. 841 00:52:13,640 --> 00:52:17,520 من پس از آن اعلام طول متغیر دیگر به نام، تنظیم آن را به 0 برابر است. 842 00:52:17,520 --> 00:52:25,440 سپس به من گفت: در حالی که شخصیت i ام در ورودی برابر است به شخصیت تهی خاص، \ 0، 843 00:52:25,440 --> 00:52:27,070 افزایش طول. 844 00:52:27,070 --> 00:52:32,550 اما به محض به عنوان شخصیت i ام این است که از کاراکتر ویژه ای است، چه اتفاقی می افتد به حلقه؟ 845 00:52:32,550 --> 00:52:36,540 آن را کوتاه مدار. آن متوقف می شود، که به معنی است که ما پس از آن فورا بازگشت طول. 846 00:52:36,540 --> 00:52:40,740 >> بنابراین اگر من خراب نمی شوند، اجازه دهید به جلو و به عقب برویم به پنجره ترمینال من. 847 00:52:40,740 --> 00:52:43,550 اجازه بدهید من کامپایل مجدد. و من پیچ کردن. 848 00:52:43,550 --> 00:52:46,320 اعلان مجدد از تابع strlen کتابخانه ناسازگار است. 849 00:52:46,320 --> 00:52:48,650 بنابراین من تلاش برای بدست آوردن بیش از حد هوشمندانه برای خود من در اینجا. 850 00:52:48,650 --> 00:52:51,610 کامپایلر در واقع می داند که یک تابع به نام strlen وجود دارد 851 00:52:51,610 --> 00:52:55,290 حتی اگر ما کتابخانه را شامل نمی شود. که خوب است. هر چیز دیگری. 852 00:52:55,290 --> 00:52:58,230 ما فقط رفتن به همکاری پس از آن. اجازه دهید نام این طول. 853 00:52:58,230 --> 00:53:04,110 اجازه استفاده از آن را تغییر دهید به طول است، و این صدای شیپور را شادتر. 854 00:53:04,110 --> 00:53:08,900 به عنوان یک کنار، چرا که برخی از این توابع رفو مشترک - 855 00:53:08,900 --> 00:53:12,390 strlen، prinf - آنها در واقع مرتب کردن بر اساس وضعیت خاص است. 856 00:53:12,390 --> 00:53:15,310 و به این ترتیب صدای جرنگ جرنگ فقط چیزی کمی خاص در مورد آنها می داند. 857 00:53:15,310 --> 00:53:18,760 که همیشه مورد با بسیاری از توابع، به طوری که به همین دلیل ما رو فریاد می زدند: در. 858 00:53:18,760 --> 00:53:21,350 >> اجازه بدهید من دوباره سعی کنید. خوشبختانه، در آن زمان کار می کرد. 859 00:53:21,350 --> 00:53:23,560 بنابراین در حال حاضر خود strlen برنامه من اجرا شود من اجازه. 860 00:53:23,560 --> 00:53:29,740 من یک رشته: H-E-L-L-O، وارد کنید. و من پیچ. 861 00:53:29,740 --> 00:53:34,750 چرا؟ >> [پاسخ دانش آموز نامفهوم] >> دقیقا. 862 00:53:34,750 --> 00:53:39,180 بنابراین من خودم در اینجا یک حلقه بسیار خوب، به دنبال بی نهایت 863 00:53:39,180 --> 00:53:42,270 چرا که حتی اگر من افزایش طول در هر تکرار، 864 00:53:42,270 --> 00:53:47,860 چه هستم من به وضوح انجام نمی دهد؟ من هستم من افزایش نیست. باشه. تعمیر آسان می کند. بله؟ 865 00:53:47,860 --> 00:53:52,430 باشه. خیر در حال حاضر ما می خواهیم فرار کنی (دور بشی) گرفتار برخی از اشتباه های رایج دیگر، جایی که من نیاز به براکت. 866 00:53:52,430 --> 00:53:54,430 و صادقانه بگویم، این کد شروع به نگاه زشت، 867 00:53:54,430 --> 00:53:56,460 بنابراین ما هم در تمیز کردن این موضوع را در یک لحظه چاقو را. 868 00:53:56,460 --> 00:53:58,810 اما در حال حاضر من افزایش هم طول و هم من. 869 00:53:58,810 --> 00:54:02,630 صادقانه بگویم، من در حال حاضر فرصتی است برای پیشرفت در اینجا ببینید، اما ما را دوباره به آن. 870 00:54:02,630 --> 00:54:05,270 >> بنابراین در حال حاضر فقط مطمئن شوید که ما حداقل در حال پیشرفت است. 871 00:54:05,270 --> 00:54:08,320 این امر به تعداد کمی از شما اتفاق افتاده است، و من غفلت به ذکر است این کار را در پیشبرد. 872 00:54:08,320 --> 00:54:12,420 زمانی که شما بدبختی از یک سناریوی مثل این، چگونه می توانم این را تعمیر کنید 873 00:54:12,420 --> 00:54:15,130 کوتاه از راه اندازی مجدد دستگاه و یا کامپیوتر خود و یا بستن پنجره؟ 874 00:54:15,130 --> 00:54:16,860 در واقع آسان است. 875 00:54:16,860 --> 00:54:21,680 کنترل C هویج کوچک نماد C، ارسال و که فقط خاتمه ترین برنامه. 876 00:54:21,680 --> 00:54:25,990 اگر شما واقعا بد یک حلقه بینهایت است که چاپ چیزهای بسیاری از بی نهایت بار، 877 00:54:25,990 --> 00:54:29,960 گاهی اوقات شما ممکن است مجبور به ضربه کنترل C هزار بار آن را به واقع آن را بشنود. 878 00:54:29,960 --> 00:54:33,910 بنابراین فقط در حال حاضر متوجه زیرا من هر چیزی، بسیار آسان بود که چاپ نمی باشد. 879 00:54:33,910 --> 00:54:37,970 و از لحاظ فنی، یک بار کافی است، اما من دریافت بی تاب و من معمولا ضربه آن است که بسیاری از بار. 880 00:54:37,970 --> 00:54:43,400 >> بنابراین strlen. من رشته: سلام. آیا رفتن به محل کار این زمان؟ 881 00:54:44,580 --> 00:54:47,490 باشه. یکی دیگر از اشتباهات رایج است. آیا به کامپایل مجدد. 882 00:54:47,490 --> 00:54:50,430 که عمدی بود، که یکی از. بسیار خوب. 883 00:54:50,430 --> 00:54:54,260 بنابراین strlen، H-E-L-L-O، را وارد کنید. عالی. 884 00:54:54,260 --> 00:54:55,910 بنابراین ما در حال حاضر strlen تا 5. 885 00:54:55,910 --> 00:54:58,100 بنابراین ما به معنای واقعی کلمه reimplemented که چرخ. 886 00:54:58,100 --> 00:55:02,080 بنابراین در حال حاضر تمیز تا به شما اجازه می دهد زیرا این باعث نمی شود که من را تحت تاثیر قرار داد 887 00:55:02,080 --> 00:55:04,080 با طراحی از کد من. 888 00:55:04,080 --> 00:55:07,200 چه می توان به وضوح در این برنامه از بین بردن این تا تمیز؟ 889 00:55:07,200 --> 00:55:11,840 [پاسخ دانش آموز نامفهوم] >> آره. به معنای واقعی کلمه، ما در حال درمان و طول یکسان است. 890 00:55:11,840 --> 00:55:16,440 پس چرا ما نه تنها هوشمند دریافت کنید و در حالی که طول می گویند؟ 891 00:55:16,440 --> 00:55:20,450 در عوض، اجازه دهید فقط آن را به طول شروع، مقداردهی اولیه آن را به 0 892 00:55:20,450 --> 00:55:23,340 چرا که به طور پیش فرض رشته طول می کنیم تا بفهمند که آنچه در آن است. 893 00:55:23,340 --> 00:55:26,160 >> در حال حاضر ما این کار را انجام، و در حال حاضر این است که یک برنامه بسیار ظریف است. 894 00:55:26,160 --> 00:55:28,660 یک متغیر است. من آن را تمیز کردن، اعمال آن را. 895 00:55:28,660 --> 00:55:31,980 بنابراین در حال حاضر بازگشت به پنجره ترمینال من. اجازه دهید به جلو و اجرا. 896 00:55:31,980 --> 00:55:35,670 را strlen. به نظر می رسد خوب است. اجرای strlen دوباره وارد کنید. 897 00:55:35,670 --> 00:55:40,680 من یک رشته: سلام، وارد کنید. و به نظر می رسد کار به عنوان 5. 898 00:55:40,680 --> 00:55:45,580 در حال حاضر، روشن، اگر من تا به حال نوشته شده، به عنوان مثال، HELLO در 1 رشته 899 00:55:45,580 --> 00:55:48,840 و پس از آن خداحافظی در دیگری، ما قطعا می تواند کلمات چندگانه داشته باشد. 900 00:55:48,840 --> 00:55:53,150 اگر بیان من در واقع می خواستم به نوع HELLO نیست اما به عنوان مثال، 901 00:55:53,150 --> 00:55:58,920 HELLO جهان، توجه داشته باشید که آنچه که ما نمی خواهد که این وضعیت در اینجا، درست است؟ 902 00:55:58,920 --> 00:56:00,580 است که نشان می دهد که که 2 رشته. 903 00:56:00,580 --> 00:56:06,060 شما مطمئنا می تواند فضای شخصیت های نوار، بنابراین اگر ما در واقع در یک عبارت طولانی تر تایپ 904 00:56:06,060 --> 00:56:08,390 مانند سلام جهان، چیزی است که ما واقعا در حافظه 905 00:56:08,390 --> 00:56:12,730 به نظر می رسد یک چیزی کمی مانند وجود دارد که. 906 00:56:12,730 --> 00:56:18,910 >> بسیار خوب. هر گونه سؤال در مورد نمایندگی از رشته ها؟ 907 00:56:18,910 --> 00:56:20,450 نه؟ بسیار خوب. 908 00:56:20,450 --> 00:56:25,130 بنابراین من گفت: قبل از آن که خواستار strlen دوباره و دوباره عمدا مانند که 909 00:56:25,130 --> 00:56:28,070 احتمالا بهترین ایده این است دلیل این که شما در حال رفتن به زیادی از کار انجام می شود 910 00:56:28,070 --> 00:56:30,280 دوباره و دوباره و دوباره. 911 00:56:30,280 --> 00:56:36,150 در واقع، چه نوع کار لازم است بدانند طول یک رشته، ظاهرا؟ 912 00:56:36,150 --> 00:56:40,720 شما باید برای شروع در ابتدا و پس از آن نگاه کنید، نگاه کنید، نگاه کنید، نگاه کنید، نگاه کنید 913 00:56:40,720 --> 00:56:44,930 تا زمانی که شما در نهایت می بینیم که شخصیت خاص، که در آن نقطه، آه، در حال حاضر من می دانم که طول. 914 00:56:44,930 --> 00:56:48,040 بنابراین قبل از زمانی که ما تا به حال strlen به نام دوباره و دوباره و دوباره، 915 00:56:48,040 --> 00:56:52,080 دلیل من پیشنهاد کرد که نوع احمقانه بود چرا که در دوباره، این رشته به نظر می رسد که می خواهم. 916 00:56:52,080 --> 00:56:54,880 این رفتن به تغییر در هر زمان شما را از طریق برخی از حلقه تکرار، 917 00:56:54,880 --> 00:56:56,890 بنابراین شما در حال انجام کار های غیر ضروری است. 918 00:56:56,890 --> 00:57:00,620 در همان زمان، شما باید بدانید، کنار گذاشته، که کامپایلرها مثل صدای جرنگ جرنگ این روزها 919 00:57:00,620 --> 00:57:02,530 در طول سال های بسیاری توسعه یافته شده اند، 920 00:57:02,530 --> 00:57:05,690 و نویسندگان کامپایلر، برنامه نویسان، بسیار هوشمند است. 921 00:57:05,690 --> 00:57:10,170 و پس از آن به نظر می رسد که صدای شیپور و دیگر کامپایلرهای در واقع می توانید از شکل است که، 922 00:57:10,170 --> 00:57:13,650 خوب، بله، شما strlen در شرط خود را نوشت، 923 00:57:13,650 --> 00:57:17,520 که از لحاظ فنی این بدان معنی است که ما آن را دوباره و دوباره و دوباره تماس بگیرید. 924 00:57:17,520 --> 00:57:21,880 اما کامپایلر های هوشمند در واقع می تواند این نوع از تصمیم گیری های کاربر فقیر بهینه سازی 925 00:57:21,880 --> 00:57:23,870 از کد خود را برای جبران همه چیز. 926 00:57:23,870 --> 00:57:27,360 >> بنابراین آیا درست است که گاهی اوقات کامپایلر هوشمندتر از ما درک 927 00:57:27,360 --> 00:57:29,210 و نوع پنهان کردن اشتباهات خود ما. 928 00:57:29,210 --> 00:57:31,620 اما مطمئنا زمانی که آن را به مجموعه مسائل و مانند آن می آید، 929 00:57:31,620 --> 00:57:35,340 انجام می شود به فکر کردن در مورد آن دسته از تصمیم گیری های طراحی اساسا نادرست 930 00:57:35,340 --> 00:57:38,110 به طور بالقوه به این دلیل ساده است که ما انجام می شود کار راه 931 00:57:38,110 --> 00:57:41,330 از ما واقعا باید انجام دهید. اما چقدر کار بیشتر؟ 932 00:57:41,330 --> 00:57:44,960 در مورد سلام جهان، اجازه دهید شروع به اندازه از این مشکل به تعمیم است. 933 00:57:44,960 --> 00:57:48,100 چه مدت از مشکل یا اندازه مشکل 934 00:57:48,100 --> 00:57:50,770 کاربر تایپ در زمانی که کلمه HELLO است؟ 935 00:57:50,770 --> 00:57:53,790 ظاهرا 5، شاید 6. به علاوه یا منهای 1. هر چیز دیگری. 936 00:57:53,790 --> 00:57:55,680 خیلی نزدیک است ما فقط به 5. 937 00:57:55,680 --> 00:58:00,480 >> پس چه اندازه مشکل در اینجا هنگامی که در تلاش برای کشف کردن در طول HELLO؟ 938 00:58:00,480 --> 00:58:06,790 1، 2، 3، 4، 5، و شاید 6 شخصیت گذشته است، اما اجازه دهید تعمیم که به عنوان N. 939 00:58:06,790 --> 00:58:10,300 N، N متغیر است، همان چیزی است که دانشمندان کامپیوتر به طور معمول از آن استفاده 940 00:58:10,300 --> 00:58:13,890 برای توصیف اندازه یک مشکل است، و این مشکل در دست است که چه مدت است HELLO؟ 941 00:58:13,890 --> 00:58:17,050 چه مدت strlen را؟ 942 00:58:17,050 --> 00:58:21,010 منظور از N مرحله طول می کشد، که در آن هر مرحله به معنی نگاه یک شخصیت، 943 00:58:21,010 --> 00:58:23,350 نگاهی به یک شخصیت، یک شخصیت نگاه کنید. 944 00:58:23,350 --> 00:58:26,850 و ما تا به حال این بحث در حالی که برگشت، تعدادی از عملیات چیزی طول می کشد. 945 00:58:26,850 --> 00:58:29,910 روز اول کلاس ما تا به حال همه ناشیانه ایستاده، 946 00:58:29,910 --> 00:58:32,060 و سپس همه شروع به جفت شدن با یکدیگر 947 00:58:32,060 --> 00:58:35,990 به منظور در واقع در حالت ایده آل چگونه بسیاری از مردم در اتاق به حساب. 948 00:58:35,990 --> 00:58:39,860 و ما نیز چیز دیگری که به موجب آن اگر من به جای آن راه مدرسه قدیمی 949 00:58:39,860 --> 00:58:44,800 تنها با شروع 1، 2، 3، 4، 5، 6 و غیره، 950 00:58:44,800 --> 00:58:49,360 که بیش از حد، به اندازه از آن مشکل بود از n اندازه. n نفر در اتاق وجود دارد. 951 00:58:49,360 --> 00:58:52,010 اما من که می تواند سرعت، درست است؟ سبک مدرسه می تواند شروع به شمارش آرا در 2S. 952 00:58:52,010 --> 00:58:55,560 2، 4، 6، 8، 10، 12. و این احساس بسیار سریع تر، و در واقع از آن است. 953 00:58:55,560 --> 00:59:01,720 این به معنای واقعی کلمه دو بار به عنوان سریع، اما دوباره، اگر 400 نفر دیگر را به این اتاق راه می رفت 954 00:59:01,720 --> 00:59:08,250 همه در یک بار، کسانی که از الگوریتم های یکی دیگر از 200 400 یا شاید اقدامات لازم را. 955 00:59:08,250 --> 00:59:13,310 >> اما در مقابل، اگر ما واقعا هوشمند و ما در عوض از همه شما خودتان تعداد دفعات مشاهده، 956 00:59:13,310 --> 00:59:15,280 به یاد بیاورید که چگونه است که الگوریتم کار می کرد. 957 00:59:15,280 --> 00:59:17,110 همه شما ایستاد. اجازه بدهید به سرعت رو به جلو به این. 958 00:59:17,110 --> 00:59:20,430 همه شما ایستاد، شما زوج خاموش، و سپس نیمی از شما نشستم، 959 00:59:20,430 --> 00:59:22,510 نیمی از تو نشستم، نیمی از تو نشستم، 960 00:59:22,510 --> 00:59:27,350 و در هر تکرار از این حلقه از هفته 0، ما این مشکل را در دست نصف 961 00:59:27,350 --> 00:59:30,040 و رفت تا n / 2، و سپس N / 4، و سپس N / 8. 962 00:59:30,040 --> 00:59:35,350 و مفهوم آن است که اگر 400 نفر دیگر را به اتاق راه رفتن، هیچ معامله بزرگ، 963 00:59:35,350 --> 00:59:40,120 آن را به ما دور 1 بیشتر نه، 400 دور، 200 دور. 964 00:59:40,120 --> 00:59:43,640 و به این ترتیب داستان ما گفت: در حالی که تا به حال برای انجام یک چیزی کمی با این. 965 00:59:43,640 --> 00:59:47,750 این خط قرمز در اینجا خطی است، آن را راست، و آن را به عنوان N برچسب 966 00:59:47,750 --> 00:59:50,250 زیرا به عنوان یک مشکل رشد می کند، 967 00:59:50,250 --> 00:59:54,690 اگر الگوریتم یا برنامه های خود را که شما با آن در حال حل آن N مرحله طول می کشد، 968 00:59:54,690 --> 00:59:58,620 ما می توانیم آن را به عنوان یک خط مستقیم که در آن زمان بیشتر طول می کشد به اندازه بزرگتر از مشکل رسم. 969 00:59:58,620 --> 01:00:03,280 و رویکرد twosies، شمارش 2، 4، 6، 8، هنوز هم یک خط راست، فقط کمی بهتر است. 970 01:00:03,280 --> 01:00:08,440 این زمان کمی کمتر طول می کشد، به طوری که خط زرد در زیر نقطه خط قرمز برای نقطه. 971 01:00:08,440 --> 01:00:12,580 >> اما حتی بهتر از این جام مقدس از آنچه که ما به نام لگاریتم 972 01:00:12,580 --> 01:00:14,830 که در آن حتی اگر دوباره ما دو برابر تعداد زیادی از مردم در اتاق، 973 01:00:14,830 --> 01:00:18,240 ما دو برابر اندازه دفترچه تلفن است که از روز اول کلاس، 974 01:00:18,240 --> 01:00:22,310 هیچ معامله بزرگ، آن را طول می کشد 1 صفحه اشک بیشتر، طول می کشد 1 نشسته 975 01:00:22,310 --> 01:00:25,550 به منظور حل مشکل این است که دو برابر بزرگ شده است. 976 01:00:25,550 --> 01:00:27,460 و به این ترتیب صحبت ما در حال حاضر برای شروع به داشتن 977 01:00:27,460 --> 01:00:30,380 چگونه ما در واقع مشکلات موثر حل 978 01:00:30,380 --> 01:00:32,510 اگر ما به ساده ترین مشکلات شبیه به این؟ 979 01:00:32,510 --> 01:00:36,210 فرض کنید در حال حاضر 8 درب پشت که برخی از اعداد، 980 01:00:36,210 --> 01:00:39,720 و هر یک از این اعداد به هیچ وجه طبقه بندی شده اند. 981 01:00:39,720 --> 01:00:42,830 آنها اعداد صحیح فقط به صورت تصادفی در پشت این درب، 982 01:00:42,830 --> 01:00:47,290 و ما از این سوال که چگونه می توانم به شما در مورد پیدا کردن شماره بروید - چه کسی می داند - 983 01:00:47,290 --> 01:00:50,250 7 در پشت این درها؟ 984 01:00:50,250 --> 01:00:53,400 چه می خواهید، یک انسان، به منظور به من شماره 7 رو پیدا 985 01:00:53,400 --> 01:00:56,810 اگر دوباره هر یک از این درها و برای دیدن یک مقدار شما باید برای باز کردن درب؟ 986 01:00:56,810 --> 01:00:59,650 چه الگوریتم شما باشد شاید؟ 987 01:00:59,650 --> 01:01:05,310 >> [پاسخ دانش آموز نامفهوم] >> بنابراین با سمت چپ شروع شده و باز کردن یک درب، باز کردن درب، باز کردن درب. 988 01:01:05,310 --> 01:01:08,570 و در بدترین حالت، چه مدت است آن را به ما عدد 7 را برای پیدا کردن؟ 989 01:01:08,570 --> 01:01:12,800 و دوباره، آنها طبقه بندی شده اند نیست، بنابراین آن را به آسانی به عنوان، به خوبی، من قصد دارم برای باز کردن درب 7. 990 01:01:12,800 --> 01:01:15,240 این می تواند ما را به حداکثر، 8 مرحله. 991 01:01:15,240 --> 01:01:19,940 در بدترین حالت، 7 است که به طور تصادفی در انتهای خط از درب، 992 01:01:19,940 --> 01:01:22,090 بنابراین ما ممکن است باید سعی کنید تمام درها N. 993 01:01:22,090 --> 01:01:24,440 بنابراین دوباره در اینجا، ما به نظر می رسد به یک الگوریتم خطی است. 994 01:01:24,440 --> 01:01:27,030 در واقع، ما این فقط یک زن و شوهر از سال قبل است. 995 01:01:27,030 --> 01:01:29,910 یکی از پیشینیان خود را با دقیقا این به چالش کشیده شد 996 01:01:29,910 --> 01:01:32,050 که در آن ما یک نسخه دیجیتال را نداشته باشند، ما به جای تخته سیاه 997 01:01:32,050 --> 01:01:33,780 با بعضی از تکه های کاغذ را بر روی آن است. 998 01:01:33,780 --> 01:01:36,940 و آنچه که من فکر کردم من می خواهم انجام دهید این است که نگاهی سریع چگونه این رفت، 999 01:01:36,940 --> 01:01:40,760 یکی از بهترین و شاید فرصت های بی دست و پا بر روی صحنه 1000 01:01:40,760 --> 01:01:42,530 تظاهرات در اینجا بر روی سندرز. 1001 01:01:42,530 --> 01:01:44,000 ما تا به حال 2 ردیف از اعداد است. 1002 01:01:44,000 --> 01:01:47,280 ما فقط رفتن را در آنچه اتفاق می افتد در اینجا با شان بسیار از این ردیف بالا نگاه کنید. 1003 01:01:47,280 --> 01:01:49,660 مگر در مواردی که دیگر هیچ کس داوطلب در CS50، 1004 01:01:49,660 --> 01:01:52,010 ما تا به حال برکت شان را برای حفظ این بر روی دوربین، 1005 01:01:52,010 --> 01:01:54,670 بنابراین او می داند که صدها تن از مردم شده اند تماشای این در حال حاضر برای سال. 1006 01:01:54,670 --> 01:01:59,500 اما شان یک کار شگفت انگیز - او - در واقع ما یک شماره خاص است. 1007 01:01:59,500 --> 01:02:04,570 >> بنابراین اجازه دهید را ببینید که او چگونه حل این الگوریتم به طوری که ما این مکالمه را قبل از اینکه طولانی از سر گرفته 1008 01:02:04,570 --> 01:02:08,300 ما چگونه پیدا کردن چیزهایی کارآمد. 1009 01:02:08,300 --> 01:02:12,300 [مالان در ویدیو] من در پشت این درها پنهان شماره 7، 1010 01:02:12,300 --> 01:02:16,710 اما در برخی از این درها جمع شده و همچنین اعداد دیگر غیر منفی، 1011 01:02:16,710 --> 01:02:19,980 و هدف شما این است که از این ردیف بالا از اعداد فکر می کنم فقط به عنوان یک آرایه 1012 01:02:19,980 --> 01:02:22,920 یا فقط یک دنباله ای از تکه های کاغذ با اعداد پشت سر آنها، 1013 01:02:22,920 --> 01:02:26,960 و هدف شما این است، تنها با استفاده از آرایه بالا در اینجا، من شماره 7 رو پیدا کنید. 1014 01:02:26,960 --> 01:02:30,800 و ما پس از آن به نقد شما در مورد انجام آن است. >> همه حق است. 1015 01:02:30,800 --> 01:02:33,880 [مالان با ما شماره 7 رو پیدا، لطفا. 1016 01:02:36,210 --> 01:02:38,350 [خنده] 1017 01:02:41,610 --> 01:02:44,460 [مالان] شماره [خنده] 1018 01:02:45,760 --> 01:02:58,080 5، 19، 13، [خنده]. این ترفند نیست. 1019 01:03:00,560 --> 01:03:02,390 1. 1020 01:03:04,560 --> 01:03:06,910 [خنده] 1021 01:03:06,910 --> 01:03:10,760 در این مرحله نمره خود را خیلی خوب نیست، بنابراین شما به عنوان ممکن است به خوبی نگه داشتن رفتن. [خنده] 1022 01:03:12,490 --> 01:03:14,070 3. 1023 01:03:17,340 --> 01:03:23,480 برو. صادقانه بگویم، من نمی تواند کمک کند اما در تعجبم که چه شما حتی فکر کردن. [خنده] 1024 01:03:25,010 --> 01:03:28,870 فقط ردیف بالا، به طوری که شما رو 3 سمت چپ. بنابراین من پیدا کنید 7. 1025 01:03:28,870 --> 01:03:45,360 [دانش آموزان زمزمه] 1026 01:03:46,270 --> 01:03:49,870 [مالان] 17. 1027 01:03:49,870 --> 01:03:55,460 [دانش آموزان زمزمه] 1028 01:03:56,920 --> 01:04:01,550 [مالان] 7! [تشویق حضار] 1029 01:04:01,550 --> 01:04:06,080 >> بنابراین در روز چهارشنبه ما را به این و الگوریتم های پیچیده تر برای پیدا کردن چیزهایی شیرجه رفتن. 1030 01:04:06,080 --> 01:04:10,200 در حال حاضر ما به شما با شان را ترک کرده و شما را در روز چهارشنبه است. 1031 01:04:11,280 --> 01:04:13,000 [CS50.TV]