[Powered by Google Translate] [نقد و بررسی] [امتحان 0]
>> [Lexi راس، تامی MacWilliam، لوکاس فریتاس، جوزف اونگ] [دانشگاه هاروارد]
>> [این CS50.] [CS50.TV]
>> با سلام، به همه.
خوش آمدید به جلسه برای بررسی امتحان 0، که در حال وقوع است چهارشنبه.
آنچه که ما در حال رفتن به امشب، من با 3 TFS دیگر هستم،
و با هم ما قصد داریم تا از طریق یک بررسی از آنچه که ما در این دوره انجام شده تا کنون است.
رفتن به 100٪ جامع، اما این باید به شما یک ایده بهتر را
از آنچه شما در حال حاضر پایین و چیزی است که شما هنوز هم نیاز به مطالعه قبل از چهارشنبه.
و در صورت تمایل به بالا بردن دست خود را با سوالات و ما قصد داریم همراه،
اما به خاطر داشته باشید که ما نیز باید کمی از وقت در پایان
اگر ما از طریق چند دقیقه به فراغت به انجام پرسش به طور کلی،
به طوری که در ذهن داشته باشیم، و ما در حال رفتن به در آغاز با هفته 0 شروع.
>> [0 نقد و بررسی امتحان!] [بخش 0] [Lexi راس] اما قبل از ما انجام می دهیم که اجازه صحبت کردن در مورد
تدارکات از مسابقه است.
>> [تدارکات] [امتحان می گیرد به جای سخنرانی در روز چهارشنبه 10/10]
>> [(http://cdn.cs50.net/2012/fall/quizzes/0/about0.pdf برای جزئیات بیشتر را مشاهده کنید)] در تاریخ چهارشنبه، اکتبر 10th است.
>> که این چهارشنبه است، و اگر شما به این URL در اینجا،
که آن هم در دسترس از CS50.net وجود دارد، یک لینک به آن
شما می توانید اطلاعات در مورد که در آن به بر اساس
نام خانوادگی خود و یا وابستگی به مدرسه و همچنین
آن را می گوید دقیقا همان چیزی است که مسابقه را پوشش و نوع سوالات است که شما در حال رفتن به.
به خاطر داشته باشید که شما نیز باید یک فرصتی برای این فایل نقد می نویسید: در بخش مسابقه،
بنابراین TFS شما باید بیش از برخی از مشکلات عمل،
و این یکی دیگر از فرصت خوبی است برای دیدن جایی که شما هنوز هم نیاز به مطالعه برای آزمون است.
بیایید در ابتدا با بایت 'N' بیت.
به یاد داشته باشید فقط یک بیت 0 یا 1 (یک)
و یک بایت مجموعه ای از 8 از کسانی که بیت است.
اجازه دهید نگاهی به این مجموعه از بیت حق در اینجا.
ما باید قادر به کشف کردن که چگونه بسیاری از بیت وجود دارد.
جایی که ما تعداد دفعات مشاهده فقط 8 نفر، هشت 0 یا 1 واحد.
و از 8 بیت است، که 1 بایت وجود دارد،
و اجازه دهید آن را تبدیل به هگزادسیمال.
هگزادسیمال پایه 16 است، و آن را بسیار آسان برای تبدیل
تعداد در دودویی، که همان چیزی است که شده است، به یک عدد در مبنای شانزده است.
همه ما انجام می دهیم این است که ما در گروه 4 نگاه کنید،
و ما آنها را تبدیل به رقم هگزادسیمال مناسب.
ما با گروه راست بیشتر از 4 آغاز شود، بنابراین 0011.
که رفتن به یکی 1 و 2، به طوری با هم که باعث می شود 3.
و پس از آن اجازه دهید نگاهی به بلوک دیگر از 4.
1101 که رفتن به 1، 4، و یک 8.
با هم که رفتن به 13، که باعث می شود D.
و ما باید به یاد داشته باشید که در هگزادسیمال ما فقط رفتن نیست 0 تا 9.
ما به 0 تا F، به طوری که پس از 9، 10 مربوط به،
11 تا B، و غیره که در آن F است 15.
در اینجا 13 D،
بنابراین برای تبدیل آن به دهدهی همه ما انجام می دهیم این است که ما در واقع
درمان هر موقعیت به عنوان یک قدرت 2.
این یک 1، 1 2، صفر 4S، صفر 8s، ی 16، و غیره،
و آن را یک کمی سخت است که در سر خود را محاسبه است، اما اگر ما به اسلاید بعدی بروید
ما می توانیم پاسخ به آن را ببینید.
>> اساسا ما قصد داریم در سراسر از راست به چپ،
و ما در حال ضرب هر رقم با قدرت مربوطه را از 2.
و به یاد داشته باشید، برای هگزادسیمال ما نشان دهنده این اعداد را با 0x در ابتدای
بنابراین ما آن را با یک عدد دهدهی اشتباه نیست.
در ادامه، این جدول ASCII است،
و آنچه ما استفاده از ASCII برای به نقشه از شخصیت مقادیر عددی.
به یاد داشته باشید در pset رمزنگاری استفاده گسترده از جدول ASCII
به منظور استفاده از روش های مختلف رمزنگاری،
سزار و رمزنگاری Vigenère، برای تبدیل حروف مختلف
در یک رشته با توجه به کلید داده شده توسط کاربر.
اجازه دهید نگاهی به یک کمی از ریاضی ASCII.
نگاهی به 'P' + 1، در قالب شخصیت است که می تواند Q،
و به یاد داشته باشید که "'5 ≠ 5.
و چگونه دقیقا ما بین این 2 فرم تبدیل کنم؟
در واقع خیلی سخت نیست.
به منظور دریافت 5 '0 ما تفریق '
چون 5 منطقه بین '0 وجود دارد و '5.
به منظور به راه دیگر ما فقط اضافه کردن 0،
پس از آن مرتب سازی بر مانند حساب منظم.
درست است که هنگامی که چیزی به نقل از پیرامون آن به یاد داشته باشید یک شخصیت
و به این ترتیب به یک مقدار در جدول ASCII مربوط است.
حرکت به مباحث علم کامپیوتر به طور کلی.
ما یاد گرفتیم چه یک الگوریتم است و چگونه ما در استفاده از برنامه نویسی
برای پیاده سازی الگوریتم های.
برخی از نمونه هایی از الگوریتم چیزی واقعا ساده مانند
چک کردن اینکه آیا یک عدد می باشد و یا حتی عجیب و غریب است.
برای آن که به یاد داشته باشید ما در وزارت دفاع شماره 2 و بررسی کنید اگر نتیجه 0 است.
اگر چنین است، آن را حتی. اگر نه، آن را عجیب و غریب.
و این نمونه ای از یک الگوریتم واقعا پایه است.
>> کمی بیشتر درگیر جستجوی دودویی است،
که ما رو به بعد از آن در جلسه بررسی است.
و برنامه نویسی مدت ما برای گرفتن یک الگوریتم استفاده شده است
و تبدیل آن به کد کامپیوتر می توانید بخوانید.
2 نمونه از برنامه نویسی است ابتدا،
که چیزی است که ما در هفته 0.
گرچه ما در واقع نه تایپ کردن کد این راه از اجرای
این الگوریتم است، که چاپ اعداد 1-10،
و در اینجا ما همین کار را در زبان برنامه نویسی C است.
این عملکرد معادل آن، تنها در زبان های مختلف و یا نحو نوشته شده است.
سپس ما در مورد عبارات بولی آموخته،
و یک مقدار Boolean مقدار که درست یا نادرست است،
و در اینجا اغلب عبارات بولی
به داخل شرایط، پس اگر (x ≤ 5)
خب، ما در حال حاضر مجموعه ای از x = 5، به طوری که وضعیت به ارزیابی درست شده است.
و اگر درست است، هر فعال است زیر شرایط
رفتن به توسط کامپیوتر ارزیابی شود، به طوری که رشته به چاپ
به خروجی استاندارد و شرایط مدت
اشاره به آنچه در داخل پرانتز عبارت if است.
به یاد داشته باشید تمام اپراتورهای.
به یاد داشته باشید && و | | هنگامی که ما در حال تلاش برای ترکیب 2 یا بیشتر از شرایط،
== = برای بررسی اینکه آیا 2 چیز با هم برابر هستند.
به یاد داشته باشید که = برای انتساب است در حالی که == عملگر بولی است.
≤، ≥ و پس از آن 2 نتیجه نهایی خود توضیحی هستند.
بررسی کلی از منطق بولی در اینجا.
و عبارات بولی نیز مهم هستند در حلقه،
که ما رو به حال حاضر.
ما یاد گرفتیم حدود 3 نوع حلقه ها تا کنون در CS50، برای، در حالی که، و انجام این کار در حالی که.
و این مهم است که بدانید که در حالی که برای بسیاری از اهداف
ما در واقع می توانید به طور کلی استفاده از هر نوع حلقه
انواع خاصی از اهداف و الگوهای مشترک وجود دارد
در برنامه نویسی است که به طور خاص برای یکی از این حلقه ها
که آن را کارآمد ترین و ظریف در راه است که به آن کد
اجازه دهید به بیش از آنچه هر یک از این حلقه ها تمایل به استفاده می شود اغلب.
>> در حلقه ما به طور کلی در حال حاضر چند بار ما می خواهیم تکرار می دانم.
این چیزی است که ما را در این وضعیت قرار داده است.
، من = 0، من <10، به عنوان مثال.
ما در حال حاضر می دانیم که ما می خواهیم برای انجام کاری 10 بار.
در حال حاضر، برای حلقه در حالی که، به طور کلی ما لزوما نمی
می دانم که چگونه بسیاری از ما می خواهیم برای اجرای حلقه.
اما ما نمی دانیم نوعی بیماری است که ما می خواهیم آن را به
همیشه درست یا همیشه نادرست است.
به عنوان مثال، در حالی که قرار است.
بیایید می گویند که یک متغیر بولی است.
در حالی که درست است که ما می خواهیم کد برای ارزیابی،
بنابراین یک کمی بیشتر گسترش، کمی بیشتر از یک کمی برای حلقه،
اما هر یک برای حلقه نیز می تواند به حلقه در حالی که یک تبدیل شوند.
در نهایت، می توانم در حالی که حلقه ها، که ممکن است مهم ترین درک حق دور،
اغلب استفاده می شود زمانی که ما می خواهیم به بررسی کد
قبل از اولین بار این وضعیت ما را بررسی کنید.
مورد استفاده مشترک برای انجام این کار در حالی که حلقه
زمانی است که شما می خواهید برای دریافت ورودی کاربر است، و شما می دانید که شما می خواهید به درخواست کاربر
برای ورودی حداقل یک بار، اما اگر این کار را به شما ورودی خوب نیست حق دور
شما می خواهید به درخواست آنها را تا زمانی که آنها به شما ورودی.
که رایج ترین استفاده از یک در حالی که حلقه،
و اجازه دهید نگاهی به ساختار واقعی از این حلقه ها.
آنها معمولا همیشه تمایل به پیروی از این الگوها است.
>> حلقه داخل دارای 3 مولفه است:
دهی اولیه، به طور معمول چیزی شبیه اعضای هیات من = 0 جایی که من شمارنده
شرایط، که در آن ما می خواهیم به می گویند اجرای این حلقه تا زمانی که این وضعیت هنوز هم نگه می دارد،
مثل من <10، و پس از آن در نهایت، به روز رسانی، که این است که چگونه ما افزایش
متغیر شمارنده در هر نقطه در حلقه.
یک چیز مشترک برای دیدن وجود دارد فقط من + +،
که به معنی افزایش من از 1 در هر زمان است.
شما همچنین می تواند چیزی مثل من + = 2،
که به معنی اضافه 2 تا من هر بار شما را از طریق حلقه.
و پس از آن این کار را فقط به هر کد که در واقع به عنوان بخشی از حلقه را اجرا می کند اشاره دارد.
و در حالی که حلقه، این زمان ما در واقع مقدار دهی اولیه به خارج از حلقه،
بنابراین به عنوان مثال، اجازه دهید می گویند که ما در حال تلاش برای انجام همان نوع از حلقه به عنوان من فقط توصیف است.
ما می گفت من بین المللی = 0 قبل از حلقه شروع می شود.
سپس ما می گویند در حالی که من <10 این کار را،
بنابراین همان بلوک از کد به عنوان قبل از،
و در این زمان بخشی از به روز رسانی از کد، به عنوان مثال، من + +،
در واقع می رود در داخل حلقه است.
و در نهایت، برای انجام این کار در حالی که، آن را شبیه به حلقه در حالی که،
اما ما باید به خاطر داشته باشید که کد یک بار ارزیابی
قبل از این وضعیت بررسی شده است، به طوری که آن را حس می کند خیلی بیشتر از
اگر شما را در آن به ترتیب از بالا به پایین نگاه کنید.
در یک انجام دهید، در حالی که حلقه کد را ارزیابی قبل از اینکه شما حتی در شرایط در حالی که نگاه
در حالی که حلقه در حالی که، این چک اول است.
بیانیهها و متغیر.
هنگامی که ما می خواهیم برای ایجاد یک متغیر جدید که برای اولین بار می خواهید آن را مقداردهی اولیه.
>> به عنوان مثال، نوار هوشمند نوار متغیر را مقدار دهی اولیه،
اما آن را نشانی از آن را یک ارزش نیست، بنابراین ارزش نوار که در حال حاضر؟
ما نمی دانیم.
این می تواند برخی از ارزش زباله که قبلا در حافظه ما ذخیره شده وجود دارد.
و ما نمی خواهیم که به استفاده از متغیر
تا زمانی که ما در واقع آن را یک ارزش،
پس از آن ما اعلام می کنیم.
سپس ما مقداردهی اولیه آن را به 42 زیر.
در حال حاضر، البته، ما می دانیم که این می تواند انجام شود در یک خط، نوار و اعضای هیات = 42.
اما فقط برای پاک کردن چند مرحله است که می رویم،
تعریف و مقدار دهی اولیه به طور جداگانه در اینجا اتفاق می افتد.
آن را در یک مرحله اتفاق می افتد، و بعد از یکی، اعضای هیات باز = نوار + 1،
این بیانیه در زیر، که باز افزایش است، به طوری که در پایان این بلوک کد
اگر ما ارزش باز به چاپ آن خواهد بود 44
از آنجا که ما اعلام و مقداردهی اولیه آن 1> نوار،
و سپس آن را به ما افزایش یک بار دیگر با + +.
ما بیش از این به طور خلاصه زیبا رفت، اما این خوب است که به طور کلی
درک درستی از موضوعات و حوادث چه هستند.
ما عمدتا به خراش،
بنابراین شما می توانید به موضوعات فکر می کنم به عنوان دنباله های متعدد از کد
در حال اجرا در همان زمان.
در واقعیت، آن را احتمالا در همان زمان در حال اجرا نیست،
اما نوعی از انتزاعی که ما می توانیم از آن در راه است که فکر می کنم.
>> در ابتدا، به عنوان مثال، ما تا به حال جن های متعدد است.
این می تواند به اجرای کد های مختلف در همان زمان.
را می توان به پیاده روی در حالی که دیگر چیزی گفته باشد
در بخش های مختلف از صفحه نمایش است.
حوادث یکی دیگر از راه جدا کردن منطق
بین عناصر مختلف از کد خود را،
و در ابتدا قادر به شبیه سازی با استفاده از پخش،
و در واقع وقتی که من دریافت، زمانی که من می شنوم،
اما در اصل این یک راه برای انتقال اطلاعات
از یک اسپریت خود را به دیگری.
برای مثال، شما ممکن است بخواهید برای انتقال بیش از بازی،
و هنگامی که یکی دیگر از اسپریت دریافت بیش از بازی،
آن را در یک راه خاص پاسخ می دهد.
این مدل مهم برای برنامه نویسی به درک.
فقط به بیش از هفته پایه 0، آنچه که ما رفته است تا کنون،
اجازه دهید نگاهی به این برنامه ساده C است.
متن ممکن است کمی کوچک از اینجا، اما من بیش از آن واقعا سریع است.
ما شامل 2 فایل های هدر در بالا، cs50.h و stdio.h.
ما پس از تعریف حد ثابت نامیده می شود می شود 100.
ما پس از اجرای تابع اصلی ما است.
از آنجا که ما استدلال خط فرمان استفاده کنید نه در اینجا ما نیاز به قرار دادن درجه اعتبار ساقط
به عنوان استدلال اصلی.
ما می بینیم که از نوع int بالا اصلی است. این نوع بازگشت، از این رو 0 در پایین بازگشت.
و ما از CS50 کتابخانه تابع از نوع int دریافت
به درخواست کاربر برای ورودی، و آن را ذخیره ما در این متغیر x،
بنابراین X ما اعلام شده در بالا، و آن را مقداردهی اولیه ما با x = GetInt.
>> سپس ما برای دیدن در صورتی که کاربر به ما ورودی خوب بررسی کنید.
اگر LIMIT ≥ ما می خواهیم برای بازگرداندن کد خطا، از مجموع 1 و چاپ پیغام خطا.
و در نهایت، در صورتی که کاربر به ما داده است ورودی خوب
ما قصد داریم برای جذر گرفتن شماره و چاپ کرد که در نتیجه.
فقط مطمئن شوید که آن همه خانه آمار
شما می توانید برچسب ها را از بخش های مختلف از کد اینجا را ببینید.
من ثابت ذکر شده، فایل های سرآیند.
اوه، INT X. اطمینان حاصل کنید که به خاطر داشته باشید که یک متغیر محلی است.
است که آن را در تضاد از یک متغیر جهانی، که ما با هم خواهیم در مورد آن صحبت
کمی بعد در جلسه بررسی،
و ما در حال فراخوانی تابع کتابخانه printf،
بنابراین اگر ما تا به حال هدر فایل stdio.h شامل نمی شود
ما قادر نخواهد بود به تماس printf است.
و من اعتقاد دارم که فلش است که قطع کردم در اینجا با اشاره به D٪
است که یک رشته قالب بندی در printf است.
این گزارش می گوید نسخه قابل چاپ کردن این متغیر به عنوان یک عدد،٪ D.
و آن است که هفته 0.
در حال حاضر لوکاس رفتن ادامه خواهد داد.
سلام، بچه ها. نام من لوکاس است.
من دانشجوی سال دوم در بهترین خانه در محوطه دانشگاه، مدر،
و من قصد دارم به بحث کمی در مورد هفته 1 و 2.1.
[1 هفته و 2.1!] [لوکاس فریتاس]
همانطور که Lexi شد و گفت: هنگامی که ما شروع به ترجمه کد خود را از ابتدا به C
یکی از چیزهایی که ما متوجه شدیم این است که شما می توانید نه تنها
نوشتن کد خود را و آن را اجرا کنید با استفاده از یک پرچم سبز دیگر.
در واقع، شما مجبور به استفاده از برخی از مراحل را به برنامه شما C
تبدیل به فایل اجرایی.
اساسا چه چیزی شما را بکنید هنگامی که شما در حال نوشتن یک برنامه است که
نظر شما در ترجمه شما را به یک زبان است که یک کامپایلر می تواند به درک،
بنابراین، هنگامی که شما در حال نوشتن یک برنامه در C
آنچه که شما در حال انجام است که در واقع نوشتن چیزی است که کامپایلر شما در حال رفتن به درک،
و سپس کامپایلر را به ترجمه آن کد
به چیزی است که کامپیوتر شما را درک خواهد کرد.
>> و چیزی است که کامپیوتر شما است که در واقع بسیار گنگ است.
کامپیوتر شما فقط می توانید 0s و و 1S درک،
پس در واقع در اولین کامپیوتر است که مردم معمولا برنامه ریزی
با استفاده از 0s و 1S، اما نه دیگر، خدا را شکر.
ما مجبور به حفظ توالی برای 0s و 1S
برای برای حلقه یا یک حلقه و در حالی که به همین ترتیب است.
به همین دلیل است که ما باید یک کامپایلر است.
یک کامپایلر انجام می دهد آن است که اساسا ترجمه کد C
در مورد ما، به یک زبان است که کامپیوتر شما را درک خواهد کرد،
که در آن کد شیء، و کامپایلر است که ما با استفاده از
نامیده می شود صدای جرنگ جرنگ، این است که در واقع نمادی برای صدای جرنگ جرنگ.
هنگامی که شما برنامه خود را، شما باید برای انجام این کار 2 چیز است.
اول، شما باید به کامپایل کردن برنامه های خود را، و سپس شما را در حال رفتن به اجرای برنامه خود را.
برای کامپایل برنامه های خود را به شما مقدار زیادی از گزینه ها برای انجام این کار است.
اول این است که انجام program.c صدای جرنگ جرنگ
که در آن برنامه نام برنامه شما است.
در این صورت شما می توانید به آنها گفت: "هی، تدوین برنامه مراجعه کنید."
شما نمی گویم: "من می خواهم این نام را برای برنامه من" یا هر چیزی.
>> گزینه دوم این است که با دادن یک نام به برنامه شما.
شما می توانید می گویند صدای جرنگ جرنگ ای و پس از آن نام است که شما می خواهید
فایل اجرایی به نام عنوان و سپس program.c.
و شما همچنین می توانید برنامه را انجام دهید، و ببینید که چگونه در 2 مورد اول
من قرار داده است. C، و در یک سوم من فقط برنامه؟
بله، شما در واقع نباید قرار داده است. ج زمانی که شما استفاده کنید.
در غیر این صورت کامپایلر است که در واقع می خواهم به شما داد.
و همچنین، من نمی دانم اگر شما بچه ها به یاد داشته باشید،
اما بسیاری از زمان ما نیز استفاده می شود lcs50 یا LM.
است که به نام ارتباط است.
این فقط به کامپایلر می گوید که شما را از کسانی که کتابخانه سمت راست وجود دارد استفاده کنید.
بنابراین اگر شما می خواهید به استفاده از cs50.h شما در واقع به نوع
صدای جرنگ جرنگ program.c lcs50.
اگر شما این کار را انجام ندهید، کامپایلر نمی دانم
که شما با استفاده از این توابع در cs50.h.
و زمانی که شما می خواهید برای اجرای برنامه های خود را به شما باید 2 گزینه.
اگر شما program.c صدای جرنگ جرنگ شما یک نام را به برنامه شما نمی دهد.
شما باید آن را اجرا کنید با استفاده از / a.out.
A.out نام استاندارد است که صدای جرنگ جرنگ می دهد برنامه خود را اگر شما آن را یک نام نمی باشد.
در غیر این صورت شما قصد انجام / برنامه اگر شما به یک نام برای برنامه شما،
و همچنین اگر شما برنامه به نام که برنامه رفتن به
در حال حاضر به همین نام به عنوان فایل C برنامه ریزی شده است.
سپس ما در مورد انواع داده ها و اطلاعات صحبت کردیم.
>> در واقع نوع داده ها همان جعبه های کوچک از آن استفاده میکنند
برای ذخیره ارزش، به طوری که انواع داده ها در واقع درست مثل Pokémons.
آنها در تمام اندازه ها و انواع آمده است.
من نمی دانم در صورتی که قیاس را حس می کند.
اندازه داده ها در واقع در معماری ماشین بستگی دارد.
تمام اندازه داده است که من قصد دارم به نشان می دهد در اینجا
در واقع برای یک ماشین 32 بیتی است، که در مورد دستگاه ما،
اما اگر شما در واقع برنامه نویسی مک خود و یا در یک ویندوز نیز
احتمالا شما در حال رفتن به یک ماشین 64 بیتی،
به طوری که اندازه های داده است که من قصد دارم برای نشان دادن در اینجا به یاد داشته باشید
برای ماشین های 32 بیتی هستند.
یکی از اولین بار است که ما شاهد یک int بود،
است که بسیار سر راست است.
شما با استفاده از نوع int برای ذخیره یک عدد صحیح است.
ما همچنین شاهد شخصیت، کاراکتر است.
اگر شما می خواهید به استفاده از یک نامه و یا یک نماد کوچک شما احتمالا به استفاده از یک کاراکتر است.
کاراکتر 1 بایت، که به معنی 8 بیت، Lexi گفت.
در واقع ما باید یک جدول ASCII که ها 256
ترکیب های ممکن از 0s و 1S
و سپس وقتی که شما نوع کاراکتر آن را برای ترجمه
شخصیت است که ورودی شما یک شماره که شما در جدول ASCII، مانند Lexi گفت.
ما همچنین باید شناور، که ما از آن برای ذخیره اعداد اعشاری.
اگر شما می خواهید را انتخاب کنید 3.14، برای مثال، شما در حال رفتن به استفاده از شناور
یا دو برابر است که دارای دقت بیشتری است.
شناور دارای 4 بایت است.
دو دارای 8 بیت است، بنابراین تنها تفاوت در این است که با دقت است.
ما همچنین یک زمانی است که برای اعداد صحیح استفاده می شود،
و شما می توانید برای یک ماشین 32 بیتی int و طولانی به همان اندازه،
پس از آن را واقعا نمی کند احساس به استفاده از بلند در ماشین های 32 بیتی است.
>> اما اگر شما با استفاده از مک و دستگاه 64 بیتی، در واقع تا به اندازه 8
بنابراین آن را واقعا در معماری بستگی دارد.
برای ماشین های 32 بیتی معنی ندارد برای استفاده طولانی واقعا.
و طولانی مدت، از سوی دیگر، دارای 8 بایت،
پس از آن است که بسیار خوب اگر شما می خواهید به یک عدد صحیح دیگر است.
و در نهایت، ما باید رشته، است که در واقع یک کاراکتر *
که یک اشاره گر به کاراکتر است.
بسیار آسان به این فکر می کنم که به اندازه رشته است برای رفتن به مثل
تعدادی از شخصیت های که شما وجود دارد،
اما در واقع * کاراکتر خود
به اندازه یک اشاره گر به کاراکتر است، که 4 بایت است.
اندازه * کاراکتر 4 بایت است.
مهم نیست که اگر شما یک کلمه کوچک و یا یک نامه یا هر چیز.
رفتن به 4 بایت است.
ما هم کمی در مورد ریخته گری آموخته،
به طوری که شما می توانید ببینید، اگر شما، به عنوان مثال، برنامه ای است که می گوید:
نوع int x = 3 و سپس printf ("٪ D"، X / 2)
شما بچه ها می دانم آنچه در آن می گذرد به روی صفحه نمایش چاپ
>> کسی؟ >> [دانش آموزان] 2.
1. >> صفحه 1، آره.
هنگامی که شما باید انجام دهید 3/2 آن را رفتن به گرفتن 1.5،
اما از آنجایی که ما در حال استفاده از یک عدد صحیح آن را به چشم پوشی از بخشی دهدهی،
و شما در حال رفتن به (1).
اگر شما نمی خواهید که اتفاق می افتد چیزی است که شما می توانید انجام دهید، به عنوان مثال،
اعلام شناور Y = X.
سپس X استفاده می شود که به 3 در حال حاضر برای رفتن به 3.000 در Y است.
و پس از آن شما می توانید y / 2 چاپ.
در واقع، من باید به 2 داشته باشد. بیش از وجود دارد.
رفتن به 3.00/2.00
و شما در حال رفتن به 1.5.
و ما باید این F 0.2 فقط برای 2 واحد اعشار در قسمت اعشار بپرسید.
اگر شما 0.3 F برای رفتن به واقع 1.500.
اگر آن را 2 رفتن به 1.50.
ما همچنین باید این مورد در اینجا.
اگر شما شناور X = 3.14 و سپس شما printf X
شما در حال رفتن به 3.14.
و اگر شما = X هوشمند X،
که به معنی درمان X را از نوع int و شما نسخه قابل چاپ X در حال حاضر
شما در حال رفتن به 3.00.
آیا این را حس؟
از آنجا که شما برای اولین بار درمان X را به عنوان یک عدد صحیح است، بنابراین شما در حال نادیده گرفتن اعشار،
و پس از آن شما چاپ X است.
و در نهایت، شما همچنین می توانید این کار را انجام دهند،
نوع int x = 65، و پس از آن کاراکتر C = X شما اعلام،
و پس از آن اگر شما نسخه قابل چاپ C شما در واقع رفتن به
A، بنابراین اساسا آنچه که شما در حال انجام
ترجمه صحیح به شخصیت،
درست مانند جدول ASCII هم اینکار را در مورد شما نمی کنند.
ما همچنین در مورد اپراتور ریاضی صحبت.
بسیاری از آنها بسیار سر راست است، بنابراین +، -، *، /،
و همچنین ما در مورد وزارت دفاع، که باقی مانده است از یک بخش از 2 عدد سخن گفته است.
اگر شما از 10٪ 3، برای مثال،
به این معنی تقسیم 10 بر 3، و آنچه باقی مانده است؟
رفتن به (1)، پس از آن در واقع بسیار مفید برای بسیاری از برنامه ها است.
برای Vigenère و سزار من کاملا اطمینان حاصل کنید که همه از شما بچه ها استفاده می شود وزارت دفاع است.
درباره اپراتورهای ریاضی، بسیار مراقب باشید در هنگام ترکیب * و /.
>> به عنوان مثال، اگر شما (3/2) * 2 آنچه که شما قصد دارید برای به دست آوردن؟
[دانش آموزان] 2.
آره، 2، چون 3/2 به 1.5،
اما از آنجایی که شما در حال انجام عملیات بین 2 اعداد صحیح
شما در واقع فقط رفتن به در نظر گرفتن (1)
و پس از آن 1 * 2 به 2، بسیار، بسیار مراقب باشید
هنگام انجام محاسبات با اعداد صحیح به دلیل
شما ممکن است که 2 = 3، در آن صورت است.
و نیز بسیار دقیق در مورد اولویت باشد.
شما معمولا باید از پرانتز تا مطمئن شوید که شما می دانید آنچه شما انجام می دهند استفاده کنید.
برخی از کلید های میانبر مفید است، البته، + + یا من + = 1 است
و یا با استفاده از + =.
این همان چیزی انجام من = + 1 است.
شما همچنین می توانید کنم - یا من - = 1
که همان من = -1،
چیزی است که شما بچه ها استفاده زیادی در حلقه، حداقل.
همچنین، برای *، اگر شما می * = و اگر شما به عنوان مثال، استفاده از،
I * = 2 همان گفتن = I * 2،
و همان چیزی که برای تقسیم.
اگر شما از من / = 2 همان چیزی که به عنوان من = 2 /.
>> در حال حاضر در مورد توابع.
شما بچه ها متوجه شدند که توابع یک استراتژی بسیار خوبی برای صرفه جویی در کد
در حالی که شما در حال برنامه ریزی است، بنابراین اگر شما می خواهید برای انجام کار مشابه
در کد دوباره و دوباره، احتمالا شما می خواهید به استفاده از یک تابع
بنابراین شما لازم نیست که برای کپی و چسباندن کد بارها و بارها.
در واقع، اصلی یک تابع است، و هنگامی که من به شما نشان می دهد قالب یک تابع
شما در حال رفتن به دیدن که خیلی واضح است.
ما همچنین از برخی از کتابخانه ها استفاده کنید،
به عنوان مثال، printf، GetIn، که از کتابخانه CS50،
و دیگر توابع مثل toupper.
همه از آن دسته از توابع در واقع در کتابخانه های دیگر اجرا شده است،
و هنگامی که شما آن فایل افسار را در ابتدای برنامه های خود را قرار داده است
شما می گویید می تواند به شما لطفا به کد برای آن دسته از توابع را به من بدهید
بنابراین من لازم نیست که آنها را پیاده سازی توسط خودم؟
و شما همچنین می توانید وظایف خود را، نوشتن بنابراین، هنگامی که شما شروع به برنامه نویسی
شما متوجه است که کتابخانه ها تمام توابع است که شما نیاز ندارد.
برای آخرین pset، به عنوان مثال، ما نوشت: قرعه کشی، تقلا، و مراجعه،
و آن را بسیار، بسیار مهم است که قادر به نوشتن توابع
زیرا آنها مفید هستند، و ما از همه آنها را هم در برنامه ریزی،
و آن را موجب صرفه جویی در تعداد زیادی از کد است.
قالب یک تابع است.
ما باید نوع بازگشت در ابتدا. نوع بازگشتی به چه صورت است؟
این فقط زمانی که عملکرد خود را در حال رفتن به بازگشت.
اگر شما از یک تابع، به عنوان مثال، فاکتوریل،
است که رفتن به محاسبه فاکتوریل یک عدد صحیح،
احتمالا آن را یک عدد صحیح به بازگشت.
سپس نوع بازگشت است به نوع int است.
Printf در واقع یک نوع بازگشت از درجه اعتبار ساقط
چرا که شما هر چیزی بازگشت نیست.
شما فقط چاپ همه چیز را به صفحه نمایش
و ترک تابع پس از آن.
سپس شما می نام تابع است که شما می توانید انتخاب کنید.
شما باید کمی منطقی است، مانند یک نام مانند XYZ را انتخاب کنید
یا مانند x2f.
سعی کنید یک نام است که حس می کند به را تشکیل می دهند.
>> برای مثال، اگر آن را فاکتوریل، فاکتوریل می گویند.
اگر یک تابع است که چیزی را به منظور جلب، نام آن را رسم.
و پس از آن ما باید پارامترهای، که همچنین به نام استدلال،
که مانند منابع است که عملکرد شما نیاز به
از کد خود را به انجام وظیفه است.
اگر شما می خواهید برای محاسبه فاکتوریل یک عدد
احتمالا شما نیاز به یک عدد را محاسبه فاکتوریل.
یکی از استدلالهایی که شما در حال رفتن به خود شماره است.
و سپس آن را برای انجام کاری و بازگشت به ارزش در پایان
مگر اینکه آن را به یک تابع از درجه اعتبار ساقط است.
بیایید ببینید یک مثال.
اگر من می خواهم برای نوشتن یک تابع است که خلاصه تمام اعداد در یک آرایه از اعداد صحیح،
اول از همه، نوع بازگشتی است رفتن به اعضای هیات تحریریه
چرا که من یک آرایه از اعداد صحیح است.
و سپس من قصد دارم به نام تابع مانند sumArray،
و سپس آن را به آرایه خود، به nums نوع int،
و پس از آن طول آرایه، بنابراین من می دانم که چگونه بسیاری از اعداد است که من به طور خلاصه.
پس من باید به مقداردهی اولیه یک متغیر به نام خلاصه، به عنوان مثال، تا 0،
و هر بار که می بینم یک عنصر در آرایه من باید آن را به طور خلاصه اضافه کنید، بنابراین من یک حلقه for انجام داد.
درست مثل Lexi گفت: شما اعضای هیات من = 0، من <طول و من + +.
و برای هر عنصر در آرایه مجموع + = nums های [i]،
و پس از آن به من بازگشت مجموع، پس از آن بسیار ساده است، و آن را موجب صرفه جویی در تعداد زیادی از کد
اگر شما با استفاده از این تابع مقدار زیادی از بار است.
سپس نگاهی به شرایط ما در زمان.
ما اگر، دیگری داشته باشد، و اگر دیگری است.
بیایید ببینید که چه تفاوت بین این است.
نگاهی به در این 2 کد. چه تفاوتی بین آنها وجود دارد؟
یکی از اولین و در واقع کد می خواهم به شما بگویم
0 - اگر یک عدد +، است.
یکی از اولین بار می گوید اگر آن> 0 سپس آن را مثبت.
اگر آن را = به 0 و سپس آن را 0، و اگر آن را <0 سپس آن را منفی است.
>> و یکی دیگر در حال انجام است اگر، اگر دیگری، دیگری است.
تفاوت بین این دو این است که این است که در واقع به رفتن
بررسی کنید که آیا> 0 <0 OR = 0 سه بار،
بنابراین اگر شما شماره 2، به عنوان مثال، آن را با رفتن به اینجا می آیند و می گویند
اگر (x> 0) است، و آن را از رفتن به می گویند بله، بنابراین من نسخه قابل چاپ مثبت است.
اما حتی اگر من می دانم که آن> 0 است و آن را نمی تواند 0 یا <0
من هنوز هم انجام دهید این است آن را 0 است، آن را <0،
پس من در واقع در داخل IFS که من لازم نیست به
چرا که من در حال حاضر می دانیم که آن را نمی خواهید برای ارضای هر یک از این شرایط است.
من می توانم اگر، اگر دیگری، دیگری بیانیه.
اساسا می گوید اگر x = 0 من نسخه قابل چاپ مثبت می باشد.
اگر این طور نیست، من قصد دارم به آزمایش این است.
اگر آن را 2 من قصد دارم برای انجام این کار است.
در واقع اگر من تا به حال x = 2 شما می گویند
اگر (x> 0)، بله، پس این را چاپ کنید.
حالا که من می دانم که آن را> 0 است و از آن راضی اولین اگر
من حتی نمی رفتن برای اجرای این کد می باشد.
کد سریعتر اجرا می شود، در واقع، 3 بار سریعتر اگر شما استفاده از این.
ما همچنین یاد گرفته و یا.
من قصد دارم از این به دلیل Lexi در حال حاضر در مورد آنها صحبت کردیم.
این فقط && و | عملگر |.
>> تنها چیزی که من می گویم این است که مراقب باشید که شما باید 3 شرایط.
از پرانتز استفاده کنید، زیرا این بسیار گیج کننده است زمانی که شما یک شرط
و یکی دیگر و یا یکی دیگر.
استفاده از پرانتز فقط تا مطمئن شوید که شرایط خود را حس
چرا که در آن صورت، به عنوان مثال، شما می توانید تصور کنید که
این می تواند اولین شرط و یک یا
یا شرایط 2 ترکیب در و
و یا سوم، به طوری که فقط مراقب باشید.
و در نهایت، ما در مورد سوئیچ ها صحبت کردیم.
روشن است بسیار مفید هنگامی که شما یک متغیر است.
اجازه دهید بگویم که شما باید یک متغیر مانند N
است که می تواند 0، 1، یا 2، و برای هر یک از این موارد
شما قصد انجام یک کار است.
شما می توانید می گویند تغییر متغیر، و آن را نشان می دهد که
سپس مقدار است مانند VALUE1 من قصد دارم برای انجام این کار،
و پس از آن من شکسته، که به معنی من قصد ندارم در هر یک از موارد دیگر نگاه کنید
از آنجا که ما در حال حاضر راضی است که مورد
و سپس VALUE2 و غیره، و من هم می توانید یک سوئیچ به طور پیش فرض داشته باشد.
این بدان معناست که اگر آن را به هر یک از موارد است که من تا به حال راضی نیست
که من قصد دارم برای انجام کاری دیگری، اما این اختیاری است.
این همه برای من است. در حال حاضر داشته باشند تامی اجازه.
تمامی حقوق، این است که رفتن به هفته 3-پذیری است.
اینها برخی از مباحث پوشش خواهیم، ​​رمزنگاری، دامنه ها، آرایه ها، و غیره.
فقط یک کلمه سریع در رمزنگاری. ما قصد داریم این خانه به چکش.
>> ما این کار را در pset 2 انجام داد، اما برای مسابقه، مطمئن شوید که شما می دانید تفاوت
بین رمزنگاری سزار و رمزنگاری Vigenère،
چگونه هر دو از این کار رمز و آنچه در آن مانند به رمز در آوردن
و متن رمزگشایی با استفاده از آن 2 رمزهای.
به یاد داشته باشید، رمزنگاری سزار به سادگی می چرخد ​​هر کاراکتر را با همان مقدار،
مطمئن شوید شما وزارت دفاع با تعداد حروف در الفبا.
و رمزنگاری Vigenère، از سوی دیگر، می چرخد ​​هر یک از شخصیت
با یک مقدار متفاوت است، بنابراین به جای گفتن
هر چرخش شخصیت توسط 3 Vigenère هر یک از شخصیت چرخش
بسته به مقدار متفاوت در برخی از کلمه کلیدی
که در آن هر حرف در کلمه نشان دهنده مقداری متفاوت
به چرخش متن روشن.
اجازه دهید بحث در مورد دامنه متغیر است.
2 انواع مختلف متغیر وجود دارد.
ما باید متغیرهای محلی، و این در حال رفتن به تعریف می شود
در خارج از اصلی یا خارج از هر تابع یا بلوک،
و این در هر نقطه در برنامه شما در دسترس خواهد بود.
اگر شما یک تابع و در آن تابع است در حالی که یک حلقه
متغیر بزرگ جهانی در همه جا در دسترس است.
یک متغیر محلی، از سوی دیگر، scoped است به جایی که در آن تعریف شده است.
>> اگر شما از یک تابع در اینجا، به عنوان مثال، ما باید تابع این گرم،
و در داخل از G یک متغیر به نام Y وجود دارد،
و این بدان معناست که این یک متغیر محلی است.
حتی اگر این متغیر به نام Y
و این متغیر Y این 2 تابع به نام
هیچ ایده چه متغیرهای محلی به یکدیگر هستند.
از سوی دیگر، در اینجا ما می گویند نوع int x = 5،
و این است که در خارج از محدوده ی هر تابع است.
آن را در خارج از محدوده ی اصلی است، بنابراین این یک متغیر جهانی است.
این بدان معنی است که در داخل از این 2 تابع زمانی که من می گویم X - و یا X + +
من دسترسی به X همان است که در آن این Y و Y متغیرهای مختلف است.
این تفاوت بین یک متغیر جهانی و یک متغیر محلی است.
تا آنجا که به طراحی مربوط می شود، گاهی اوقات آن را احتمالا یک ایده بهتر
برای حفظ متغیرهای محلی در هر زمان که شما احتمالا می تواند
از داشتن یک دسته از متغیر های جهانی می تواند واقعا گیج کننده است.
اگر شما یک دسته از توابع اصلاح همان چیزی که
شما ممکن است فراموش کنیم چه می شود اگر این تابع به طور تصادفی تغییر این جهانی،
و این تابع دیگر در مورد آن نمی دانم،
و این کار خیلی گیج کننده است که شما دریافت کد.
نگه داشتن متغیرهای محلی در هر زمان که شما احتمالا می تواند
فقط خوب طراحی شده است.
به یاد داشته باشید، آرایه ها، به سادگی لیستی از عناصر از نوع مشابه است.
داخل CI می توانید یک لیست مانند 1، 2.0، خوش آمدید.
ما فقط می تواند به انجام این کار نیست.
>> هنگامی که ما اعلام می کنیم آرایه در C تمام عناصر باید از همان نوع باشد.
من در اینجا مجموعه ای از 3 عدد صحیح است.
در اینجا من باید طول آرایه است، اما اگر من فقط آن را اعلام کرد در این نحو
که در آن مشخص آنچه را که همه از عناصر من از لحاظ فنی باید این 3.
کامپایلر به اندازه کافی هوشمند است به شکل آرایه باید چقدر بزرگ باشد.
حالا زمانی که من می خواهم برای به دست آوردن و یا مجموعه ای از ارزش یک آرایه
این نحو به انجام این کار است.
این در واقع دومین عنصر از آرایه به دلیل، به یاد داشته باشید تغییر دهید،
شماره از 0 شروع می شود، نه در 1.
اگر من می خواهم به خواندن که ارزش من، می تواند چیزی شبیه به نوع int x = آرایه [1].
یا اگر من می خواهم به مجموعه ای است که ارزش، مثل من در اینجا انجام،
می توانم بگویم که آرایه [1] = 4.
آن زمان دسترسی به عناصر با استفاده از شاخص
و یا موقعیت خود را و یا در جایی که آنها در آرایه،
و این فهرست از 0 شروع می شود.
ما همچنین می توانیم آرایه ای از آرایه ها داشته باشد،
و این است که نام آرایه چند بعدی است.
هنگامی که ما یک آرایه چند بعدی
این بدان معناست که ما می تواند چیزی شبیه به سطر و ستون داشته باشد،
و این تنها یکی از راه های تجسم این یا فکر کردن درباره آن است.
هنگامی که من یک آرایه چند بعدی این بدان معناست که من قصد دارم برای شروع نیاز
بیش از 1 شاخص چرا که اگر یک شبکه
فقط گفت: چه در ردیف شما در آن هستید در اختیار ما یک عدد نیست.
که واقعا فقط به ما یک لیست از اعداد است.
اجازه دهید بگویم که این آرایه است.
من یک آرایه به نام شبکه، و من گفت: آن را 2 سطر و 3 ستون،
و بنابراین این یکی از راه های از تجسم آن است.
وقتی که من می گویند من می خواهم به این عنصر در [1] [2]
که بدان معنی است که به دلیل این سطر اول و پس از آن ستون
من قصد دارم به پرش به سطر 1 از من گفت: 1.
>> سپس من قصد دارم در اینجا به ستون 2، و من قصد دارم به ارزش 6.
را حس؟
آرایه های چند بعدی، به یاد داشته باشید، از لحاظ فنی فقط آرایه ای از آرایه.
ما می توانیم آرایه از آرایه ای از آرایه ها داشته باشد.
ما می توانیم به رفتن، اما واقعا یک راه برای فکر کردن در مورد
که چگونه این است که گذاشته شده و چه خبر است که آن را تجسم
در یک شبکه شبیه به این.
هنگامی که ما از آرایه ها به توابع، آنها در حال رفتن به رفتار
کمی کمی متفاوت نسبت به زمانی که ما از متغیرها به طور منظم به توابع
مثل گذر بین المللی و یا شناور.
هنگامی که ما در یک نوع از نوع int یا کاراکتر و یا هر یک از این داده های دیگر منتقل می کند
ما فقط در زمان نگاهی اگر تابع تغییر
مقدار آن متغیر که تغییر به انتشار
به تابع فراخوانی شده است.
با استفاده از یک آرایه، از سوی دیگر، این اتفاق خواهد افتاد.
اگر من در یک آرایه به برخی از عملکرد عبور و آن تابع تغییر برخی از عناصر،
وقتی که من دوباره به تابع که آن را به نام
آرایه من در حال حاضر متفاوت خواهد بود، و واژگان آن
آرایه است توسط مرجع تصویب شده است، همانطور که بعدا خواهید دید.
این است که چگونه کار اشاره گر، که در آن این نوع داده های اولیه،
از سوی دیگر، با مقدار منتقل می شود.
>> ما می توانیم از آن به عنوان ساخت یک کپی از برخی متغیر و سپس عبور در نسخه فکر می کنم.
مهم نیست که چه ما که با متغیر انجام دهید.
تابع فراخوانی شده، آگاه باشید که آن را تغییر نخواهد بود.
آرایه ها فقط کمی متفاوت است که در زمینه.
به عنوان مثال، همانطور که ما فقط دیدم، اصلی است که به سادگی یک تابع
است که می تواند در 2 استدلال کنند.
اولین آرگومان به تابع اصلی argc، و یا تعدادی از استدلال است،
و آرگومان دوم نام ی argv
و کسانی که ارزشهای واقعی از آن استدلال است.
بیایید می گویند من یک برنامه ای به نام this.c،
و من می گویم را در این، و من قصد دارم این کار را در خط فرمان اجرا کنید.
در حال حاضر به تصویب در برخی از استدلال به برنامه من به نام این،
من می توانم بگویم چیزی شبیه به / CS 50.
این همان چیزی است که ما تصور دیوید به انجام این کار هر روز در ترمینال.
اما در حال حاضر در داخل تابع اصلی از این برنامه
این ارزش دارد، بنابراین argc 4 است.
این ممکن است کمی گیج کننده است زیرا واقعا ما فقط در CS 50 عبور.
این تنها 3.
اما به یاد داشته باشید که این عنصر برای اولین بار از ی argv یا آرگومان اول
نام خود تابع است.
به طوری که بدان معنی است که در حال حاضر 4 همه چیز در اینجا،
و عنصر اول خواهد بود / این.
خواهد شد و این به عنوان یک رشته نشان داده شده است.
سپس عناصر باقی مانده همان چیزی است که ما در بعد از نام برنامه تایپ.
بنابراین فقط به عنوان به کنار، ما احتمالا در pset 2 را دیدم،
به یاد داشته باشید که 50 رشته از 50 عدد صحیح است ≠.
بنابراین ما می توانید چیزی شبیه این را می گویند نیست اعضای هیات X = ی argv 3.
>> که فقط رفتن نیست برای درک، به دلیل این است که یک رشته، و این است که یک عدد صحیح است.
بنابراین اگر شما می خواهید برای تبدیل بین 2، به یاد داشته باشید، ما در حال رفتن به
این تابع سحر و جادو نامیده می شود atoi.
طول می کشد که یک رشته و عدد صحیح نشان داده شده در داخل این رشته را برمی گرداند.
به طوری که یک اشتباه ساده در مسابقه را،
فقط فکر که این نوع صحیح به طور خودکار خواهد بود.
اما درست این است که این همیشه خواهد بود رشته دانم
حتی اگر این رشته تنها شامل یک عدد صحیح و یا یک شخصیت و یا شناور.
بنابراین در حال حاضر بحث در مورد زمان اجرای بگذارید.
هنگامی که ما تمام این الگوریتم است که انجام تمام این کارها دیوانه،
آن را تبدیل به واقعا مفید برای پرسیدن این سوال، "چه مدت آنها را؟"
ما نشانگر این است که چیزی به نام نماد مجانبی است.
بنابراین این بدان معنی است که - خب، اجازه دهید به ما می گویند الگوریتم ما را
برخی از ورودی واقعا، واقعا، واقعا بزرگ است.
ما می خواهیم به این سوال، چه مدت است که آن را رفتن به گرفتن؟
چگونه بسیاری از مراحل الگوریتم ما آن را به اجرا
به عنوان تابعی از اندازه ورودی؟ "
بنابراین اولین راهی که ما می توانیم توصیف زمان اجرا است که با بزرگ O.
و این بدترین زمان در حال اجرا است.
بنابراین اگر ما می خواهیم برای مرتب کردن یک آرایه، و ما به الگوریتم ما یک آرایه
که در نزولی زمانی که آن را باید در جهت صعودی،
که رفتن به بدترین حالت است.
این بالا ما در طول حداکثر زمان الگوریتم ما را موظف می باشد.
از سوی دیگر، این Ω رفتن به توصیف بهترین مورد در حال اجرا زمان.
بنابراین اگر ما به یک آرایه در حال حاضر مرتب شده اند به یک الگوریتم مرتب سازی،
چه مدت طول خواهد کشید تا این نوع؟
و این، پس از آن، توصیف حد پایین زمان در حال اجرا است.
بنابراین در اینجا فقط برخی از واژه ها که در توضیح برخی از در حال اجرا بار.
این صعودی هستند.
سریعترین زمان در حال اجرا در حال حاضر ثابت نامیده می شود.
>> این بدان معناست که هیچ مهم نیست که چگونه بسیاری از عناصر ما به الگوریتم ما،
مهم نیست چقدر بزرگ آرایه ما، مرتب سازی آن
و یا انجام هر آنچه که ما انجام می دهیم به آرایه همیشه همان مقدار از زمان.
بنابراین ما می توانیم که فقط با 1 است، که ثابت را نمایندگی کند.
ما نیز در زمان اجرا لگاریتمی نگاه کرد.
بنابراین چیزی مانند جستجوی دودویی لگاریتمی است،
که در آن ما قطع این مشکل را در نصف هر زمان
و سپس همه چیز درست بالاتر از آنجا دریافت کنید.
و اگر شما در حال نوشتن یک O هیچکدام از الگوریتم فاکتوریل،
شما احتمالا باید این کار را به عنوان شغل روز خود را در نظر بگیرند.
هنگامی که ما در مقایسه بار در حال اجرا این مهم است که در ذهن داشته باشیم این چیزها.
بنابراین اگر من یک الگوریتم O (N)، و شخص دیگری
یک الگوریتم O (2N) این در واقع مجانبی معادل است.
بنابراین اگر ما تصور N به تعداد های بزرگ مانند eleventy میلیارد:
بنابراین، هنگامی که ما در حال مقایسه eleventy میلیارد به چیزی شبیه eleventy میلیارد + 3،
ناگهان که 3 واقعا ایجاد یک تفاوت بزرگ دیگر.
به همین دلیل است که ما قصد داریم با توجه به این چیزها را به معادل.
بنابراین چیزهایی مانند این ثابت، 2 * این وجود دارد، و یا اضافه کردن یک کودک 3
این ها فقط ثابت است، و این در حال رفتن به رها کردن.
بنابراین به همین دلیل است که همه 3 از زمان اجرای این همان است که گفتن آنها O (n) است.
به طور مشابه، اگر ما 2 بار اجرا دیگر، اجازه دهید بگویم O (n + 2N ³ ²)، ما می توانید اضافه کنید
+ N + 7، و پس از آن دیگری را نیز در زمان اجرا است که تنها O (N ³).
باز هم، این همان چیزی که به خاطر این - این همان نیست.
این همان چیز، با عرض پوزش. پس این ها همان است زیرا
این ³ N به تسلط این مربع 2N.
>> چه شده است همین است اگر ما مثل O O (N ³) و اجرا (n ²)
زیرا این ³ N است که بسیار بزرگتر از این مربع N است.
بنابراین اگر ما شارحان، به طور ناگهانی شروع به مهم،
اما زمانی که ما فقط با عوامل خرید و فروش از آنجا که ما در اینجا،
سپس آن را نمی خواهید برای مهم است زیرا آنها فقط رفتن به رها کردن.
بیایید نگاهی به برخی از الگوریتم های ما تا کنون دیده ام
و صحبت در مورد زمان اجرا خود را.
راه اول این که به دنبال یک شماره در یک لیست، که ما را دید، جستجوی خطی بود.
و اجرای از جستجوی خطی فوق العاده ساده است.
ما فقط باید یک لیست است، و ما در حال رفتن به در هر عنصر تنها در لیست
تا زمانی که ما پیدا کردن شماره ما به دنبال آن هستید.
به طوری که بدان معنی است که در بدترین حالت، این O (n) است.
و در بدترین حالت می تواند در صورتی که عنصر است
آخرین عنصر، و سپس با استفاده از جستجوی خطی، ما باید در هر عنصر واحد نگاه کنند
تا زمانی که ما به یکی از آخرین به منظور می دانیم که آن را در واقع در این فهرست بود.
ما فقط نمی تواند به من بدهید تا در نیمه راه و می گویند، "این احتمالا وجود ندارد."
با استفاده از جستجوی خطی ما باید به همه چیز نگاه کنید.
بهترین مورد در حال اجرا، از سوی دیگر، ثابت است
چرا که در بهترین حالت ما به دنبال عنصر برای اولین بار در این فهرست است.
پس از آن به ما دقیقا 1 مرحله، مهم نیست چقدر بزرگ لیست می باشد
اگر ما به دنبال اولین عنصر در هر زمان است.
>> بنابراین، هنگامی که شما جستجو، به یاد داشته باشید، آن را نشانی از نیاز نیست که لیست ما مرتب شوند.
از آنجا که ما در حال به سادگی رفتن که بیش از هر عنصر واحد نگاه کنند، و آن را واقعا مهم نیست
آنچه منظور این عناصر شوید.
الگوریتم جستجو هوشمند تر چیزی شبیه به جستجوی دودویی است.
به یاد داشته باشید، پیاده سازی جستجو دودویی است که هنگامی که شما در حال رفتن به
به دنبال در وسط لیست.
و از آنجا که ما به دنبال آن هستید در وسط، ما نیاز دارند که این فهرست طبقه بندی شده اند
و یا دیگری ما نمی دانیم که در آن میانه است، و ما باید به نگاه بیش از
لیست کل آن را پیدا کنید، و پس از آن در آن نقطه ما فقط اتلاف وقت است.
بنابراین اگر ما یک لیست طبقه بندی شده اند و ما در وسط، ما قصد داریم به مقایسه میانه
به این عنصر ما دنبال آن هستید.
اگر آن را بیش از حد بالا است، پس از آن ما می توانیم به نیمه سمت راست را فراموش کرده ام
از آنجا که ما می دانیم که اگر عنصر ما این است که در حال حاضر بیش از حد بالا
و همه چیز را به در سمت راست این عنصر حتی بیشتر است
پس ما لازم نیست که به دنبال وجود ندارد.
جایی که در از سوی دیگر، اگر عنصر ما این است که بیش از حد کم است،
ما می دانیم که همه چیز را به سمت چپ که عنصر نیز بسیار کم است،
پس از آن واقعا نمی معنا که به دنبال وجود دارد، یا.
به این ترتیب، با هر گام و هر زمان که ما نگاه در نقطه میانی از لیست،
ما قصد داریم برای کاهش مشکل ما در نیمی به دلیل ناگهان ما می دانیم
یک دسته ای از اعداد است که نمی تواند یکی از ما به دنبال.
>> در شبه این چیزی شبیه به این،
و از آنجا که ما در حال کاهش فهرست در نصف هر زمان،
بدترین اجرا جهش زمان را از خطی به لگاریتمی است.
تا به طور ناگهانی ما ورود در مراحل به منظور پیدا کردن یک عنصر در یک لیست.
بهترین مورد در حال اجرا است، هر چند، هنوز ثابت
چرا که در حال حاضر، اجازه دهید فقط می گویند که عنصر ما به دنبال این است
همیشه وسط دقیق از لیست اصلی است.
بنابراین ما می توانیم لیست ما به عنوان بزرگ به عنوان ما می خواهیم به رشد است، اما در صورتی که عنصر ما به دنبال این است که در وسط است،
سپس آن را تنها به ما 1 گام را.
بنابراین به همین دلیل است که ما O (log n است) و Ω (1) و یا ثابت.
اجازه دهید در واقع اجرای جستجوی دودویی در این فهرست است.
پس اجازه دهید بگویم که ما به دنبال عنصر 164.
اولین چیزی که ما می رویم به انجام این است که پیدا کردن نقطه میانی این لیست است.
این فقط اتفاق می افتد که از نقطه میانی در حال رفتن به سقوط در بین این 2 عدد،
پس خودسرانه اجازه دهید فقط می گویند، هر بار از نقطه میانی می افتد بین 2 عدد،
اجازه دهید فقط دور تا.
ما فقط نیاز به مطمئن شوید که ما این کار را در هر مرحله از راه.
بنابراین ما در حال رفتن به دور، و ما در حال رفتن به می گویند که 161 وسط لیست ما است.
بنابراین 161 <164، و هر عنصر را به سمت چپ از 161
<164 است، بنابراین ما می دانیم که آن را نمی خواهید به ما در کمک
برای شروع به دنبال در اینجا چرا که این عنصر به دنبال آن هستید نمی تواند وجود داشته باشد.
بنابراین آنچه که ما می توانیم انجام دهیم این است که ما فقط می توانید در مورد که نیمه چپ و تمام فهرست را فراموش کرده ام
و در حال حاضر تنها از سمت راست به بعد 161 را در نظر بگیرند.
>> پس باز هم، این نقطه میانی است، اجازه دهید فقط دور تا.
در حال حاضر 175 می باشد بیش از حد بزرگ است.
بنابراین ما می دانیم که آن را نمی خواهید به ما کمک می کند به دنبال در اینجا و یا اینجا،
بنابراین ما فقط می تواند که به دور پرتاب، و در نهایت ما باید 164 ضربه.
هر گونه سوال در مورد جستجوی دودویی؟
اجازه دهید از جستجو از طریق فهرست در حال حاضر طبقه بندی شده اند
به واقع گرفتن یک لیست از اعداد در هر سفارش
و ساخت این فهرست صعودی است.
اولین الگوریتم ما در نگاه مرتب سازی بر حباب نامیده می شد.
و این امر می تواند ساده از الگوریتم دیدم.
مرتب سازی بر حباب می گوید که زمانی که هر 2 عناصر داخل لیست در خارج از محل،
این معنی است که یک شماره بالاتر وجود دارد را به سمت چپ از یک شماره پایین تر،
پس از آن ما در حال رفتن به آنها را مبادله، چرا که این بدان معنی است که این لیست خواهد بود
"بیشتر طبقه بندی شده اند" از آن را قبل از.
و ما در حال رفتن به ادامه این روند دوباره و دوباره و دوباره
تا در نهایت نوع عناصر حباب به محل صحیح خود و ما باید یک لیست طبقه بندی شده اند.
>> زمان اجرا از این رفتن به O (n ²). چرا؟
خب، چرا که در بدترین حالت، ما در حال رفتن به هر عنصر را، و
ما قصد داریم برای پایان دادن به مقایسه آن را برای هر عنصر دیگر در این فهرست.
اما در بهترین حالت، ما باید فهرست طبقه بندی شده اند در حال حاضر، حباب مرتب سازی بر اساس
فقط رفتن به رفتن را از طریق یک بار، می گویند: "نه. من با هیچ معاوضه را ندارد، پس من انجام شده است."
بنابراین ما باید در بهترین زمان در حال اجرا Ω (n) است.
اجازه اجرا حباب مرتب سازی بر روی یک لیست.
یا اول، اجازه دهید فقط در برخی از شبه نگاه واقعا سریع است.
ما می خواهم بگویم ما می خواهیم برای پیگیری، در هر تکرار از حلقه،
پیگیری یا نه ما تغییر هر عنصر.
بنابراین به همین دلیل است که ما قصد داریم برای متوقف کردن که ما باید هر عنصر جابجا شده است.
بنابراین در ابتدای حلقه ما هر چیزی را عوض نمی کند، بنابراین ما می گویند که نادرست است.
در حال حاضر، ما در حال رفتن به از طریق لیست و مقایسه عنصر به عنصر i + 1
و اگر آن را به صورتی که یک عدد بزرگتر را به سمت چپ از یک شماره کوچکتر وجود دارد،
پس از آن ما در حال رفتن به آنها را مبادله.
>> و پس از آن ما در حال رفتن به یاد داشته باشید که ما یک عنصر تعویض.
این بدان معنی است که ما نیاز داریم که از طریق فهرست حداقل 1 بار
به خاطر وضعیتی که در آن متوقف شد، زمانی است که کل لیست در حال حاضر طبقه بندی شده اند.
به این معنی که ما به هیچ وجه معاوضه ساخته شده است.
بنابراین به همین دلیل است که شرایط ما را در اینجا این است: "در حالی که برخی از عناصر جابجا شده اند.
بنابراین در حال حاضر فقط در این در حال اجرا بر روی یک لیست نگاه کنیم.
من لیست 5،0،1،6،4.
مرتب سازی بر حباب برای شروع تمام راه را در سمت چپ، و آن را برای مقایسه
عناصر من است، پس 0 تا I + 1، که عنصر 1.
رفتن به می گویند، خوب 5> 0 است، اما در حال حاضر 5 است به سمت چپ،
بنابراین من نیاز به تعویض 5 و 0.
هنگامی که آنها را مبادله، به طور ناگهانی این لیست های مختلف را دریافت کنم.
در حال حاضر 5> 1 است، بنابراین ما در حال رفتن به آنها را مبادله.
> 5 6 نیست، بنابراین ما نیاز به انجام هر چیزی در اینجا.
اما 6> 4، بنابراین ما نیاز به مبادله.
باز هم، ما نیاز به اجرا از طریق لیست کل در نهایت کشف
که این از ما آنها را مبادله،
و در این مرحله ما نیاز به از طریق لیست و زمان اجرا 1
مطمئن شوید که همه چیز در جهت آن، و در این مرتب کردن بر اساس نقطه حباب به پایان رسید.
الگوریتم های مختلف برای در نظر گرفتن برخی از عناصر و مرتب سازی آنها، مرتب کردن بر اساس انتخاب شده است.
ایده مرتب کردن بر اساس انتخاب این است که ما قصد داریم به ایجاد یک بخش طبقه بندی شده اند از لیست
1 عنصر در یک زمان.
>> و ما قصد داریم برای انجام این کار است با ایجاد بخش چپ فهرست شده است.
و اساسا، هر - در هر مرحله، ما در حال رفتن را به کوچکترین عنصر ما را ترک کرده اند
است که طبقه بندی شده اند با این حال، و ما در حال رفتن به آن را که به بخش طبقه بندی شده اند حرکت می کند.
این بدان معناست که ما باید به طور مداوم به پیدا کردن عنصر حداقل نامرتب
و پس از آن عنصر حداقل و مبادله آن را با هر
چپ ترین عنصر است که طبقه بندی شده اند نیست.
زمان اجرا از این است که رفتن به O (n ²) چرا که در بدترین حالت
ما نیاز به مقایسه هر عنصر واحد را برای هر عنصر دیگر است.
از آنجا که ما در حال گفت که اگر ما در نیمه سمت چپ را از لیست شروع، ما باید
رفتن را از طریق تمام بخش سمت راست برای پیدا کردن کوچکترین عنصر.
و پس از آن، دوباره، ما باید برای رفتن به تمام بخش سمت راست و
رفتن که بیش و بیش از بیش و بیش از دوباره.
که رفتن به مربع N. ما نیاز به رفتن به داخل حلقه دیگری برای حلقه
که مربع N را نشان می دهد.
در بهترین تفکر در مورد، اجازه دهید می گویند که ما به آن فهرست طبقه بندی شده اند در حال حاضر؛
ما در واقع هیچ بهتر از مربع N نمی کنند.
از آنجا که مرتب سازی بر انتخاب هیچ راهی برای دانستن این که
حداقل عنصر است که فقط یکی از من اتفاق می افتد به دنبال در.
هنوز هم نیاز به مطمئن شوید که این است که در واقع حداقل.
>> و تنها راه برای مطمئن شوید که آن را حداقل، با استفاده از این الگوریتم،
در هر عنصر تنها نگاه دوباره.
پس در واقع، اگر آن را به شما بدهد - اگر شما را مرتب سازی بر انتخاب فهرست طبقه بندی شده اند در حال حاضر،
آن را نمی خواهید برای انجام هر گونه بهتر از دادن آن است که طبقه بندی شده اند هنوز رتبهدهی نشده است.
به هر حال، اگر آن اتفاق می افتد را به صورت که چیزی O (چیزی) است
و امگا از چیزی، ما فقط می تواند موجز است که آن را از چیزی θ می گویند.
بنابراین اگر شما می بینید که می آیند تا در هر نقطه، این چیزی است که فقط به این معنی است.
>> اگر چیزی تتا از n ²، این هر دو O بزرگ (n ²) و Ω (n ²) است.
بنابراین بهترین حالت و بدترین حالت، این تفاوت را ندارد،
الگوریتم رفتن به همان چیزی که در هر زمان است.
پس این همان چیزی است که شبه برای مرتب کردن بر اساس انتخاب می تواند شبیه است.
ما اساسا رفتن به می گویند که من می خواهم به تکرار بیش از فهرست
از چپ به راست و در هر تکرار از حلقه، من قصد دارم به حرکت می کند
عنصر حداقل به این بخش از فهرست طبقه بندی شده اند.
و وقتی چیزی رو حرکت وجود دارد، من هرگز نیاز به دوباره نگاه می کنم که در آن عنصر است.
از آنجا که به محض این که من مبادله یک عنصر در بخش چپ فهرست طبقه بندی شده اند، آن را به
از آنجا که ما در حال انجام همه چیز را به کاربران معرفی شده چیدمان صعودی چیدمان با استفاده از حداقل.
پس ما گفت: بسیار خوب، ما در موقعیت من به هستی، و ما نیاز به نگاه در تمام عناصر
به حق از من در جهت پیدا کردن حداقل است.
بنابراین این بدان معناست که ما می خواهیم از i + 1 نگاهی به انتهای لیست.
و در حال حاضر، اگر این عنصر است که ما در حال حاضر به دنبال کمتر از حداقل ما تا کنون،
که به یاد داشته باشید، ما در حال شروع کردن حداقل فقط
هر عنصر ما در حال حاضر، من فرض کنیم که حداقل.
اگر من عنصر را که کوچکتر از آن است که، پس از آن من قصد دارم برای گفتن، خوب،
خوب، حداقل من پیدا کرده اند.
من قصد دارم به خاطر داشته باشید که در آن است که حداقل.
>> بنابراین در حال حاضر، هنگامی که من از طریق آن بخش سمت راست نامرتب رفته،
می توانم بگویم من قصد دارم به مبادله حداقل عنصر با عنصر است که در موقعیت من به.
که برای ساخت لیست، بخش طبقه بندی شده اند من لیست از چپ به راست،
و ما هرگز نیاز به یک عنصر را دوباره نگاه می کنم یک بار آن را در آن بخش است.
هنگامی که ما آن را جابجا شده است.
بنابراین اجرای مرتب کردن بر اساس انتخاب در این فهرست است.
عنصر آبی در اینجا رفتن به من، و عنصر قرمز است برای رفتن به حداقل عنصر است.
پس من شروع می شود تمام راه را در سمت چپ این فهرست، در 5.
در حال حاضر ما نیاز به پیدا کردن عنصر حداقل نامرتب.
بنابراین ما می گویند 0 <5، 0 است حداقل جدید من است.
>> اما من نمی تواند متوقف شود وجود دارد، چرا که حتی اگر ما تشخیص می دهند که 0 است کوچکترین،
ما نیاز داریم تا از طریق هر عنصر لیست تا مطمئن شوید که اجرا شود.
بنابراین 1 بزرگتر است، 6 بزرگتر است، 4 بزرگتر است.
این بدان معنی است که پس از نگاه کردن به همه از این عناصر، من 0 است که کوچکترین است.
بنابراین من قصد دارم برای تعویض 5 و 0.
به محض این که من مبادله، من قصد دارم برای به دست آوردن یک لیست جدید، و من می دانم که من هرگز نیاز به دوباره نگاه می کنم که در آن 0
زیرا هنگامی که من آن را جابجا، من آن طبقه بندی شده اند و ما در حال انجام می شود.
در حال حاضر آن را فقط اتفاق می افتد که عنصر آبی است دوباره از 5
و ما باید در 1 نگاه کنید، 6 و 4 به تعیین که 1
کوچکترین عنصر حداقل است، بنابراین خواهیم 1 و 5 مبادله است.
باز هم، ما نیاز به نگاه کنید - مقایسه 5 تا 6 و 4،
و ما در حال رفتن به تعویض 4 و 5، و در نهایت، مقایسه
افراد 2 اعداد و مبادله آنها را تا زمانی که ما طبقه بندی شده اند ما فهرست.
هر گونه سوال در مورد مرتب کردن بر اساس انتخاب؟
باشه. اجازه دهید به آخرین موضوع در اینجا، و آن بازگشت.
>> بازگشت، به یاد داشته باشید، این واقعا متا چیزی است که در آن یک تابع
بارها و بارها به خود فرا می خواند.
بنابراین در برخی از نقطه، در حالی که fuction ما این است که بارها و بارها خود را فراخوانی،
نیاز به برخی از نقطه ای که در آن ما خواستار خودمان را متوقف وجود دارد.
چرا که اگر ما این کار را انجام نمی، پس از آن ما فقط رفتن به ادامه برای انجام این کار برای همیشه لطفا برای،
و برنامه ما این است که فقط رفتن نیست برای پایان دادن به.
ما به این وضعیت در مورد پایه.
و در مورد پایه می گوید، به جای فراخوانی یک تابع دوباره،
من فقط رفتن به بازگشت برخی از ارزش است.
بنابراین زمانی که ما از بازگشت ارزش، ما خواستار خودمان را متوقف کرده اید،
و بقیه از تماس های ساخته ایم، تا کنون نیز می تواند بازگشت.
در مقابل مورد پایه مورد بازگشتی است.
و این زمانی است که ما می خواهیم را به یکی دیگر از فراخوانی به تابع است که ما در حال حاضر شوید.
و ما احتمالا، اگر چه نه همیشه، می خواهم به استفاده از آرگومان های مختلف است.
>> بنابراین اگر ما یک تابع به نام F و F فقط به نام را 1 بحث،
و ما فقط خواستار F (1)، f (1)، F (1) نگه دارید، و آن را فقط اتفاق می افتد که
استدلال 1 را به صورت بازگشتی می افتد، ما هنوز هم هرگز متوقف شود.
حتی اگر ما در مورد پایه، ما باید مطمئن شوید که در نهایت ما در حال رفتن به ضربه است که برای مورد پایه.
ما نه تنها ماندن در این مورد بازگشتی.
به طور کلی، زمانی که ما خودمان، ما احتمالا رفتن به استدلال های مختلف در هر زمان است.
در اینجا این است که تابع بازگشتی واقعا ساده است.
بنابراین این محاسبه فاکتوریل یک عدد.
بازگشت به بالا در اینجا ما در مورد پایگاه ما است.
در مورد N ≤ 1، ما در حال رفتن به تماس دوباره فاکتوریل.
ما قصد داریم برای متوقف کردن ما فقط رفتن به بازگشت برخی از ارزش است.
اگر این درست نیست، پس ما در حال رفتن به ضربه بازگشتی مورد ما.
توجه داشته باشید که در اینجا است که ما نه فقط فاکتوریل (N) خواستار، چرا که می تواند بسیار مفید است.
ما قصد داریم به تماس فاکتوریل چیز دیگری است.
>> و بنابراین شما می توانید ببینید، در نهایت اگر ما چیزی فاکتوریل (5) و یا عبور،
ما قصد داریم به تماس فاکتوریل (4) و به همین ترتیب است، و در نهایت ما قصد داریم به آمار این مورد پایه.
پس این به نظر می رسد خوب است. بیایید ببینید که چه اتفاقی می افتد هنگامی که ما در واقع اجرای این.
این پشته، و اجازه دهید بگویم که اصلی است برای رفتن به این تابع را با یک آرگومان (4).
پس یک بار فاکتوریل می بیند و = 4، فاکتوریل خود تماس بگیرید.
در حال حاضر، به طور ناگهانی، ما باید فاکتوریل (3).
بنابراین این توابع در حال رفتن به نگه داشتن در حال رشد است تا در نهایت ما مورد پایگاه ما است.
در این نقطه، مقدار بازگشتی از این بازگشت (NX مقدار بازگشتی از این)،
مقدار بازگشتی، NX مقدار بازگشتی این است.
در نهایت ما نیاز به آمار برخی از شماره است.
در بالا در اینجا، ما می گویند بازگشت 1.
این بدان معناست که به محض این که تعداد ما به بازگشت، ما می توانیم این کار را در خارج از پشته پاپ.
بنابراین این فاکتوریل (1) انجام شده است.
وقتی 1 را برمی گرداند، این فاکتوریل (1) برمی گرداند، و این بازگشت به 1 است.
مقدار بازگشتی از این، به یاد داشته باشید، NX مقدار بازگشتی از این بود.
تا به طور ناگهانی، این مرد می داند که من می خواهم به بازگشت 2.
>> بنابراین، به یاد داشته باشید بازگشت مقدار این فقط NX مقدار بازگشتی در اینجا.
بنابراین در حال حاضر ما می توانیم بگویم 3 × 2، و در نهایت، در اینجا می توان گفت
این فقط برای رفتن به 4 × 3 × 2.
و هنگامی که این بازده، ما را به داخل عدد صحیح واحد اصلی است.
هر گونه سوال در مورد بازگشت؟
بسیار خوب. بنابراین زمان بیشتری را برای سوالات وجود دارد در پایان،
اما در حال حاضر جوزف موضوعات باقی مانده را پوشش میدهد.
>> [جوزف اونگ] همه حق. بنابراین در حال حاضر که ما در مورد بازگشتی صحبت کردیم،
اجازه دهید بحث کمی در مورد آنچه با یکدیگر ادغام می شوند مرتب کردن بر اساس است.
است که اساسا ادغام مرتب کردن بر اساس یکی دیگر از راه های مرتب سازی یک لیست از اعداد است.
و چگونه آن را با این نسخهها کار، با مرتب کردن بر اساس ادغام شما باید یک فهرست، و چه کار می کنیم
ما می گویند، اجازه دهید به 2 نیمه تقسیم این.
ما برای اولین بار می خواهید مرتب سازی بر ادغام دوباره در نیمه سمت چپ اجرا شود،
پس از آن خواهیم فرار کنی (دور بشی) مرتب کردن بر اساس ادغام در نیمه سمت راست،
و می دهد که ما در حال حاضر 2 نیمه هستند که طبقه بندی شده اند، و در حال حاضر ما در حال رفتن به ترکیب این دو نیمه با هم.
این کمی سخت است بدون یک مثال را ببینید، بنابراین خواهیم از طریق حرکات بروید و ببینید که چه اتفاقی می افتد.
بنابراین شما شروع با این فهرست، ما آن را به 2 نیمه تقسیم است.
ما برای اجرای ادغام مرتب کردن بر اساس در نیمه سمت چپ برای اولین بار.
به طوری که در نیمه سمت چپ، و در حال حاضر آنها را اجرا می کنیم از طریق این لیست دوباره
که می شود به مرتب کردن بر اساس ادغام به تصویب رسید، و پس از آن که نگاه می کنیم، دوباره،
در سمت چپ این فهرست و اجرا می کنیم ادغام مرتب کردن بر اساس بر روی آن است.
در حال حاضر، ما را به یک لیست از 2 عدد،
و در حال حاضر نیمه چپ تنها 1 عنصر طولانی است، و ما می توانیم
تقسیم یک لیست است که تنها 1 عنصر به نصف، بنابراین ما فقط می گویند، یک بار ما باید 50،
است که تنها 1 عنصر، آن را در حال حاضر طبقه بندی شده اند.
>> هنگامی که ما با آن انجام می شود، ما می توانید ببینید که ما می توانیم
حرکت به نیمه سمت راست این لیست،
و 3 نیز طبقه بندی شده اند، و بنابراین در حال حاضر که هر دو نیمه این لیست طبقه بندی شده اند
ما می توانیم این اعداد را به هم ملحق شوند.
بنابراین ما در 50 و 3، 3 از 50 کوچکتر است، بنابراین آن را برای اولین بار در می رود و پس از آن 50 می شوید.
در حال حاضر، که انجام می شود، ما به عقب برویم تا به آن لیست و مرتب کردن بر اساس آن نیمه راست شده است.
42 تعداد خود آن است، پس از آن در حال حاضر طبقه بندی شده اند.
بنابراین در حال حاضر این مقایسه می کنیم 2 و 3 از 42 کوچکتر است، به طوری که می شود در اول قرار داده است،
در حال حاضر 42 می شود در قرار داده است، و 50 می شود قرار داده شوید.
در حال حاضر، که طبقه بندی شده اند، ما به تمام راه برگشت به بالا، 1337 و 15.
خب، ما در حال حاضر در نیمه چپ این لیست نگاه کنید، 1337 توسط خود را پس از آن طبقه بندی شده اند و همین کار را با 15.
بنابراین در حال حاضر این 2 عدد ترکیب که در لیست اولیه و 15 <سال 1337 تا مرتب کردن،
پس از آن برای اولین بار در می رود، پس از آن 1337 می رود شوید.
و در حال حاضر ما در هر دو نیمه از فهرست اصلی تا بالا طبقه بندی شده اند.
و همه ما باید انجام دهیم این است که ترکیب این.
ما در 2 عدد اول از این لیست، 3 15 <نگاه کنید، به طوری که آن را به آرایه مرتب سازی بر رود برای اولین بار است.
15 <42، پس از آن می رود سایت شوید. حالا، 42 <1337، می رود که شوید.
50 <1337، پس از آن می رود. توجه داشته باشید که ما فقط در زمان 2 تعداد از این لیست است.
بنابراین ما نه تنها بین 2 لیست متناوب است.
ما در ابتدا فقط به دنبال، و ما در حال در نظر گرفتن عنصر
که کوچکتر و سپس قرار دادن آن در آرایه ما.
حالا ما همه نیمه را با هم ادغام شدند و ما در حال انجام می شود.
>> هرگونه سوال در مورد مرتب سازی بر ادغام؟ بله؟
[دانشجو] اگر آن را تقسیم به گروه های مختلف است، چرا که آنها نه تنها از آن تقسیم یک بار
و شما باید 3 و 2 در یک گروه؟ [بقیه ناخوانا سوال]
دلیل - بنابراین سوال این است، چرا ما نمی توانیم فقط آنها را به ادغام در آن مرحله اول بعد از اینکه ما آنها را؟
به این دلیل ما می توانیم این کار را انجام دهند، در عناصر چپ بیشتر از هر دو طرف شروع،
و پس از آن یکی از کوچک و قرار دادن آن در این است که ما می دانیم این است که این
لیست فردی در دستورات طبقه بندی شده اند.
پس اگر من به دنبال عناصر چپ بیشتر از هر دو نیمه،
من می دانم که آنها در حال رفتن به کوچکترین عناصر از آن فهرست است.
بنابراین من می توانم آنها را به کوچکترین نقاط عنصر از این لیست بزرگ قرار داده است.
از سوی دیگر، اگر من در آن 2 لیست در سطح دوم بیش از وجود دارد نگاه کنید،
50، 3، 42، 1337 و 15، هستند کسانی که طبقه بندی شده اند نیست.
بنابراین اگر من در 50 و 1337 نگاه کنید، من قصد دارم برای قرار دادن 50 به لیست من برای اولین بار.
اما این واقعا ایجاد حس، چرا که 3 است که کوچکترین عنصر از همه از آن.
بنابراین تنها به این دلیل که ما می توانیم از این مرحله ترکیب است، زیرا لیست ما در حال حاضر طبقه بندی شده اند.
که به همین دلیل است که ما را به تمام راه را به پایین
زیرا هنگامی که ما فقط یک عدد است، شما می دانید که یک عدد
به خودی خود در حال حاضر یک لیست طبقه بندی شده اند.
>> هر گونه سؤال؟ نه؟
پیچیدگی؟ خب، شما می توانید ببینید که در هر مرحله تعداد پایان وجود دارد،
و ما می توانیم یک فهرست ورود نیمه N بار تقسیم،
که جایی است که ما این ورود N X N پیچیدگی می باشد.
و شما خواهید دید بهترین حالت برای مرتب سازی ادغام n log n استفاده، و آن را فقط اتفاق می افتد
که بدترین حالت، یا Ω بیش از وجود دارد، نیز n log n استفاده است.
چیزی به خاطر داشته باشید.
حرکت، اجازه دهید به بعضی از فایل فوق العاده پایه I / O.
اگر شما در تقلا نگاه کرد، شما متوجه خواهید شد که ما تا به حال برخی از مرتب کردن بر اساس سیستم
که در آن شما می توانید به فایل ورود ارسال اگر شما را از طریق کد به عنوان خوانده شده.
بیایید ببینید که چگونه شما ممکن است انجام این کار.
خب، ما باید fprintf، که شما می توانید به عنوان تنها printf فکر می کنم،
اما فقط به یک فایل چاپ به جای آن، و از این رو F در ابتدا.
این نوع از کد بالا اینجا چه می کند این است که شما ممکن است در تقلا دیده می شود،
آن را از طریق چاپ آرایه 2 بعدی کردن سطر سطر اعداد می رود.
در این مورد، printf چاپ به ترمینال خود را و یا چیزی است که ما به خروجی استاندارد بخش است.
>> و در حال حاضر، در این مورد، همه ما باید انجام دهیم این است که جایگزین printf با fprintf،
بگو چه فایل شما می خواهید تا در آن چاپ شود، و در این مورد فقط آن را چاپ که به فایل
به جای آن چاپ را به ترمینال شما.
خب، پس از آن که begs سوال: از کجا می توانم این نوع از فایل های ما را از، درست است؟
ما گذشت وارد شوید به این fuction fprintf، اما ما تا به حال هیچ ایده آن از کجا آمده است.
خب، در اوایل کد، آنچه ما تا به حال این قطعه از کد را در اینجا بود،
که اساسا می گوید که باز کردن فایل log.txt می نامد.
آنچه که ما انجام می دهیم، بعد از آن ما باید مطمئن شوید که این فایل در واقع با موفقیت افتتاح شد.
پس از آن ممکن است به دلایل مختلف شکست و فضای کافی بر روی کامپیوتر خود شما را نداشته باشند، به عنوان مثال.
پس از آن همیشه مهم است قبل از انجام هر گونه عملیات با فایل
که ما بررسی کنید که آیا فایل با موفقیت افتتاح شد.
بنابراین آنچه که یک، که یک بحث ها و منازعات را به fopen، خوب، ما می توانیم یک فایل را در بسیاری جهات باز است.
آنچه ما می توانیم انجام دهد، ما می توانیم آن W عبور، که به معنی نادیده گرفتن فایل اگر از خارج در حال حاضر،
ما می توانیم، منتقل می کند که آنها را به انتهای فایل اضافه به جای برجسته آن،
و یا ما می توانیم تحقیق، مشخص است که به این معنی است، اجازه دهید باز کردن فایل به عنوان خوانده شده فقط.
بنابراین اگر برنامه تلاش می کند تا هر گونه تغییرات در فایل.
در آنها داد و اجازه ندهید که آنها این کار را انجام.
در نهایت، زمانی که ما در حال با فایل انجام می شود انجام شده است، انجام عملیات بر روی آن،
ما نیاز داریم تا مطمئن شوید که فایل را نزدیک ما.
و بنابراین در پایان برنامه های خود را، شما در حال رفتن به آنها را به تصویب دوباره
این فایل که شما باز شده، و فقط آن را ببندید.
بنابراین این چیزی است که مهم است که شما باید مطمئن شوید که شما باید انجام دهید این است.
بنابراین به یاد داشته باشید شما می توانید یک فایل را باز کنید، سپس شما می توانید فایل ارسال
انجام عملیات در فایل، اما بعد از آن شما را مجبور به بستن فایل در پایان.
>> هر گونه سوال در مورد فایل ها پایه I / O؟ بله؟
[سوال دانشجو، ناخوانا]
همینجا. سوال این است، که در آن به این فایل log.txt ظاهر می شود؟
خب، اگر شما فقط آن را log.txt را، آن را در همان دایرکتوری به عنوان اجرایی ایجاد.
بنابراین اگر you're - >> [سوال دانشجو، ناخوانا]
بله. در همان پوشه، و یا در همان شاخه، به عنوان شما آن تماس بگیرید.
در حال حاضر حافظه، پشته، پشته و.
پس چگونه است که حافظه در کامپیوتر گذاشته؟
خب، شما می توانید حافظه به عنوان مرتب کردن بر اساس از این بلوک در اینجا قابل تصور است.
و در حافظه به نام پشته گیر بیش از وجود دارد، و پشته که در پایین وجود دارد.
و پشته رو به پایین رشد می کند و پشته به سمت بالا رشد می کند.
بنابراین به عنوان تامی ذکر شده - اوه، خوب، و ما باید این 4 بخش که من در یک ثانیه -
همانطور که تامی گفت: پیش از این، شما می دانید که چگونه توابع را بخواند خود و تماس با یکدیگر؟
آنها در ساخت این نوع قاب پشته.
خوب، اگر تماس های اصلی صنایع غذایی، صنایع غذایی می شود را بر روی پشته قرار داده شده است.
FOO خواستار نوار، نوار را در پشته قرار داده، و این که می شود در پشته پس از قرار داده شده است.
و بازگشت آنها، آنها هر یک از دریافت برداشته پشته.
چه هر یک از این مکان ها و حافظه نگه دارید؟
خوب، بالا، است که در بخش متن، شامل خود برنامه است.
بنابراین کد ماشین، که وجود دارد، یک بار برنامه شما کامپایل.
در مرحله بعد، هر مقداردهی اولیه متغیر های جهانی شده است.
>> بنابراین شما باید متغیرهای سراسری را در برنامه خود را، و شما مانند، 5 = می گویند،
می شود که در آن بخش قرار داده شده است، و درست در زیر آن،
شما باید هر گونه اطلاعات آماده سازی جهانی، است که فقط INT،
اما شما می گویند نیست آن را به هر چیزی برابر است.
تحقق این متغیرهای جهانی، به طوری که آنها در خارج از بخش اصلی است.
پس این به این معنی هر متغیر های جهانی که اعلام شده اما مقداردهی نشده است.
بنابراین آنچه در پشته؟ حافظه اختصاص داده شده با استفاده از malloc کنیم که در کمی.
و در نهایت، با استفاده از پشته شما باید متغیرهای محلی
و هر عملکردهای شما ممکن است در هر یک از پارامترهای خود تماس بگیرید.
آخرین چیزی که شما واقعا نمی باید بدانید که چه متغیر های محیط زیست انجام،
اما هر زمان که شما برای اجرای برنامه، چیزی است که در ارتباط وجود دارد، مانند
این نام کاربری کسی که فرار این برنامه است.
و این رفتن به مرتب کردن بر اساس در پایین.
در شرایط استفاده از آدرس حافظه، که مقادیر هگزادسیمال،
ارزش در شروع بالا در 0، و آنها را به تمام راه را به پایین.
در این مورد، اگر شما بر روی سیستم 32 بیتی هستید،
آدرس در پایین برای رفتن به 0x، AF، چرا که 32 بیت،
که 8 کلمه در ادامه متن می باشد، و در این مورد 8 کلمه در ادامه متن مربوط به 8 رقم هگزادسیمال است.
تا پایین در اینجا شما قصد داشته باشد، دوست دارم، 0xffffff، و بالا وجود دارد شما در حال رفتن به: 0.
پس چه هستند اشاره گر؟ برخی از شما ممکن است این در بخش پوشش داده نمی شوند، قبل از.
اما ما بیش از آن سخنرانی، یک اشاره گر است که فقط یک نوع داده
است که فروشگاه، به جای استفاده از برخی از مرتب کردن بر اساس ارزش مانند 50، آدرس برخی از محل در حافظه آن ذخیره است.
مانند حافظه [ناخوانا].
بنابراین در این مورد، چیزی است که ما داشته باشد، ما باید یک اشاره گر به یک عدد صحیح و یا نوع int *،
و آن را شامل این آدرس هگزادسیمال 0xDEADBEEF.
>> بنابراین آنچه که ما داریم، در حال حاضر، این اشاره در برخی از نوشته ها در حافظه،
و فقط، مقدار 50 در این محل حافظه است.
در برخی از سیستم های 32 بیتی، بر روی تمام سیستم های 32 بیتی، اشاره گر را تا بیت 32 یا 4 بایت است.
اما، برای مثال، در یک سیستم 64 بیتی، اشاره گر 64 بیت هستند.
به طوری که چیزی است که شما می خواهید در ذهن داشته باشیم.
بنابراین در سیستم نهایی بیتی، یک اشاره گر به بیت پایان طولانی است.
اشاره گرها مرتب سازی بر اساس سخت هضم هستند بدون چیزهای اضافی،
بنابراین از طریق یک مثال از تخصیص حافظه پویا.
تخصیص حافظه پویا برای شما، و یا آنچه ما تماس بگیرید malloc،
به شما اجازه می دهد تا شما اختصاص برخی از مرتب کردن بر اساس داده ها را در خارج از مجموعه.
بنابراین این داده ها مرتب سازی بر اساس بیش دائمی در طول مدت این برنامه است.
چون همانطور که می دانید، اگر x در داخل یک تابع است، و این که بازده عملکرد شما اعلام،
شما دیگر لازم نیست دسترسی به داده ها که در X ذخیره شده بود.
اشاره گر اجازه ما انجام می دهید این است که آنها ارزش ذخیره حافظه و یا فروشگاه تماس با ما
در بخش های مختلف حافظه، یعنی پشته.
در حال حاضر زمانی که ما به بازگشت از تابع، تا زمانی که ما یک اشاره گر
به آن محل در حافظه، پس از آن چیزی است که ما می توانیم انجام دهیم این است که ما فقط می تواند در ارزش وجود دارد نگاه کنید.
اجازه دهید نگاهی به یک مثال: این قالب قرار گیری حافظه ما دوباره است.
و ما باید این تابع اصلی است.
چه میکند - خوب، بسیار ساده، راست - نوع int x = 5، که تنها یک متغیر را بر روی پشته در اصلی.
>> در سوی دیگر، در حال حاضر یک اشاره گر است که خواستار giveMeThreeInts تابع را ما اعلام می کنیم.
و بنابراین در حال حاضر ما به این تابع بروید و یک قاب پشته جدیدی را برای آن ایجاد می کنیم.
با این حال، در این قاب پشته، ما اعلام می کنیم هوشمند * موقت،
که در mallocs 3 عدد صحیح برای ما.
بنابراین اندازه از نوع int به ما خواهد گفت که چگونه بسیاری از بایت این نوع int است.
و malloc به ما می دهد که بسیاری از بایت فضا در پشته.
بنابراین در این مورد، ما باید ایجاد فضای کافی برای 3 اعداد صحیح،
و راه پشته است تا وجود دارد، به همین دلیل است که من آن را کشیده بالاتر است.
هنگامی که ما در حال انجام می شود، ما آمده ایم تا در اینجا، شما تنها نیاز به 3 نوع داده int بازگشت،
و آن آدرس را بر می گرداند، در این مورد بیش از جایی که حافظه است.
و ما به مجموعه ای اشاره گر = سوئیچ، و بالا وجود دارد ما باید فقط یک اشاره گر است.
اما آنچه که بازده عملکرد انباشته اینجا و از بین می رود.
بنابراین دما از بین می رود، اما ما هنوز هم حفظ آدرس از جایی که
کسانی که 3 عدد صحیح در داخل برق هستند.
بنابراین در این مجموعه، اشاره گر scoped محلی برای قاب انباشته،
اما از حافظه که به آن اشاره شده است در پشته.
>> آیا این را حس؟
[دانشجو] آیا می توانید تکرار کنید که؟ >> [جوزف] بله.
بنابراین اگر من فقط یک کمی به عقب برگردید، می بینید که موقت اختصاص داده شده
برخی از حافظه در پشته وجود دارد تا.
بنابراین زمانی که این تابع، بازده giveMeThreeInts، این پشته در اینجا رفتن به ناپدید می شوند.
و با آن هر یک از متغیرها، در این مورد، این اشاره گر که در قاب انباشته اختصاص داده شده است.
است که رفتن به ناپدید می شوند، اما از آنجایی که ما به بازگشت موقت
و ما مجموعه = دما، اشاره گر اشاره گر در حال حاضر به نقطه حافظه همان محل به عنوان موقت بود.
بنابراین در حال حاضر، حتی اگر ما از دست دادن موقت، که اشاره گر محلی،
ما هنوز آدرس حافظه را از آنچه در آن بود با اشاره به داخل که اشاره گر متغیر را حفظ کنید.
پرسش و پاسخ؟ است که می تواند نوع یک موضوع گیج کننده است اگر شما بیش از آن در بخش رفته است.
ما می توانیم، TF شما قطعا بیش از آن و البته ما می توانند به پرسش
در پایان جلسه بررسی برای این است.
اما این نوع از یک موضوع پیچیده است، و من نمونه های که در حال رفتن به نشان می دهد تا
کمک خواهد کرد که به روشن کردن آنچه که اشاره گر در واقع.
>> در این مورد، اشاره گرها معادل آرایه،
بنابراین من فقط می تواند از این اشاره گر به عنوان همان چیزی که به عنوان یک آرایه از نوع int استفاده کنید.
بنابراین من نمایه سازی را به 0، در حال تغییر و اولین عدد صحیح تا 1،
تغییر دومین عدد صحیح را به 2 و عدد صحیح 3 به 3 است.
بنابراین بیشتر در مورد اشاره گر است. خب، به یاد Binky.
در این مورد ما اختصاص داده ام یک اشاره گر، یا اعلام یک اشاره گر،
اما در ابتدا، وقتی که من فقط یک اشاره گر اعلام کرد، آن را به هر نقطه در حافظه اشاره نمی شود.
این فقط ارزش زباله در داخل آن است.
بنابراین من هیچ نظری ندارم که این اشاره گر با اشاره به.
این دارای یک آدرس است که فقط پر از 0 و 1 که در آن در ابتدا اعلام شد.
من می تواند هر چیزی را با این کار تا زمانی که من اسمش malloc بر روی آن
و سپس آن را به من می دهد یک فضای کوچک بر روی پشته که در آن من می توانم ارزش در داخل قرار داده است.
سپس دوباره، من نمی دانم چه چیزی در داخل این حافظه است.
پس اولین کاری که من باید انجام دهید این است که بررسی کنید که آیا این سیستم دارای حافظه کافی
به من 1 عدد صحیح در وهله اول، به همین دلیل است که من انجام این کار را بررسی کنید.
اگر اشاره گر تهی است، که بدان معنی است که فضای کافی و یا برخی از خطا رخ داده است،
بنابراین من باید خروج از برنامه.
اما اگر موفق بود، در حال حاضر من می توانم که اشاره گر استفاده کنید
و آنچه اشاره گر * آیا به شرح زیر است که در آن آدرس است
به جایی که ارزش ها است و آن را به 1 برابر است.
بنابراین در اینجا، ما در حال بررسی در صورتی که حافظه وجود داشته است.
>> هنگامی که شما می دانید که وجود دارد، شما می توانید به آن قرار داده است
چه مقدار می خواهید به آن قرار داده است، در این مورد 1.
هنگامی که ما با آن انجام می شود، شما نیاز به رایگان است که اشاره گر
زیرا ما نیاز به برگشت به سیستمی است که حافظه است که شما را در وهله اول خواستم.
از آنجا که کامپیوتر نمی داند زمانی که ما با آن انجام می شود.
در این مورد ما به صراحت به آن گفتن، خوب، ما که با حافظه انجام شده است.
اگر برخی از فرآیند دیگر به آن نیاز دارد، برخی از برنامه های دیگر به آن نیاز دارد، به جلو بروید و آن را احساس می کنید.
چیزی که ما نیز می توانید انجام دهید این است که ما فقط می توانید آدرس متغیرهای محلی در مجموعه است.
بنابراین اعضای هیات ایکس است در داخل قاب انباشته اصلی.
و زمانی که ما در استفاده از این علامت، و این اپراتور، می کند آنچه در آن است
آن طول می کشد x، و X است که فقط بعضی از داده ها در حافظه است، اما آن را تا به آدرس.
آن را در جایی قرار گرفته است. بنابراین با تماس و x، چه این امر آن است که به ما می دهد آدرس X است.
با انجام این کار، ما در حال ساخت نقطه اشاره گر به جایی که x در حافظه است.
در حال حاضر ما فقط چیزی شبیه * x، ما در حال رفتن به دریافت 5 بازگشت.
ستاره نامیده می شود، بصورت غیر مرجع آن.
شما به دنبال آدرس و شما می توانید مقدار آن ذخیره می شود وجود دارد.
>> هر گونه سؤال؟ بله؟
[دانشجو] اگر شما 3 اشاره کرد چیز را انجام نمی، آیا آن را هنوز هم کامپایل؟
بله. اگر شما چیزی 3 اشاره گر انجام نمی، آن را هنوز هم به کامپایل،
اما من شما را از آنچه اتفاق می افتد در یک ثانیه نشان می دهد، و بدون انجام این کار،
این چیزی است که ما به نشت حافظه است. شما به سیستم
پشت حافظه خود را، به طوری که پس از در حالی که برنامه در حال رفتن به جمع آوری
حافظه است که آن را با استفاده از نیست، و هیچ چیز دیگری می تواند از آن استفاده کنید.
اگر تا کنون فایرفاکس با 1.5 میلیون کیلوبایت بر روی کامپیوتر شما دیده می شود،
در Task Manager، که چه خبر است.
شما باید نشت حافظه در این برنامه که آنها را در حال دست زدن نیست.
پس چگونه اشاره گر کار حسابی؟
خب، ریاضی اشاره گر نوع نمایه سازی شبیه به یک آرایه است.
در این مورد، من یک اشاره گر، و آنچه که من انجام می دهم این است که من را نقطه اشاره گر به اولین عنصر
این مجموعه شامل 3 عدد صحیح است که من اختصاص داده شده است.
بنابراین در حال حاضر آنچه که من انجام می دهند، اشاره گر ستاره فقط تغییر این عنصر برای اولین بار در این فهرست است.
ستاره اشاره گر +1 در اینجا.
پس اشاره گر است در اینجا، اشاره گر +1 در اینجا، اشاره گر +2 می باشد در اینجا.
>> پس فقط با اضافه کردن 1 همان حرکت در طول این آرایه است.
آنچه ما انجام می دهیم این است، زمانی که ما انجام می دهیم اشاره گر 1 شما می توانید از آدرس در اینجا،
و به منظور به دست آوردن ارزش در اینجا، شما یک ستاره در کل بیان قرار داده است
به آن dereference.
بنابراین، در این مورد، من تعیین محل برای اولین بار در این آرایه تا 1،
مکان دوم به 2، و مکان سوم به 3 است.
پس آنچه که من انجام می دهند در اینجا این است که من چاپ اشاره گر ما 1
که فقط به من می دهد 2.
در حال حاضر من افزایش اشاره گر، به طوری که اشاره گر به اشاره گر برابر با 1،
که به جلو حرکت می کند.
و به این ترتیب در حال حاضر اگر من نسخه قابل چاپ کردن اشاره گر 1، اشاره گر در حال حاضر +1 3،
که در این مورد چاپ 3.
و در را به چیزی، اشاره گر است که من آن را
باید اشاره در آغاز از آرایه که من از malloc کردم.
بنابراین، در این مورد، اگر من به تماس 3 حق در اینجا، این را نمی خواهد حق
زیرا آن را در وسط آرایه است.
من را به جمع و تفریق برای رسیدن به محل اصلی
نقطه اولیه برای اولین بار قبل از من می توانم این برنامه رایگان است.
بنابراین، در اینجا یک مثال بیشتر درگیر است.
در این مورد، ما در حال تخصیص 7 کاراکتر در آرایه شخصیت.
>> و در این مورد آنچه ما انجام می دهیم این است که ما در حال حلقه بیش از 6 نخست از آنها،
و ما آنها را تنظیم Z.
بنابراین، برای اعضای هیات من = 0، من> 6، من + +،
بنابراین، اشاره گر + من فقط به ما خواهد گفت، به در این مورد،
اشاره گر، اشاره گر به اشاره گر +1، +2، اشاره گر +3، و غیره و غیره در حلقه.
آنچه در آن به انجام آن می شود که آدرس، ارجاع میدهد آن را به مقدار
و تغییراتی که در ارزش به زهرا
سپس در پایان به یاد داشته باشید این است که یک رشته است، درست است؟
تمام رشته کاراکتر تهی پایان پایان است.
بنابراین، آنچه که من انجام می دهم این است در اشاره گر 6 من قرار تهی شخصیت ترمیناتور شوید.
و در حال حاضر آنچه که من اساسا انجام این کار در اینجا است که اجرای printf برای یک رشته، درست است؟
>> بنابراین، هنگامی که می کند printf در حال حاضر زمانی که آن را به انتهای یک رشته؟
هنگامی که آن را بازدید شخصیت تهی فسخ.
بنابراین، در این مورد، اشاره اصلی به آغاز این آرایه است.
من چاپ اولین کاراکتر است. من از آن حرکت می کند بیش از یک.
من نسخه قابل چاپ است که شخصیت. من از آن حرکت بیش از.
و من در حفظ و انجام این کار تا پایان برسد.
و در حال حاضر در پایان اشاره گر * dereference این و کاراکتر تهی پایان.
و به این ترتیب حلقه در حالی که من اجرا می شود تنها زمانی که ارزش شخصیت فسخ تهی نیست.
بنابراین، در حال حاضر من در خروج از این حلقه است.
و بنابراین اگر 6 من از این اشاره گر تفریق،
بازگشت به ابتدای.
به یاد داشته باشید، من برای انجام این کار به خاطر اینکه من را برای رفتن به ابتدای این برنامه رایگان است.
>> بنابراین، من می دانم که بسیاری بود. آیا هر گونه سؤال وجود دارد؟
خواهش می کنم، بله؟
[ناخوانا سوال دانشجویی]
که به شما می گویند بلندتر؟ متأسفم.
[دانشجو] آخرین اسلاید درست قبل از آزاد اشاره گر،
که در آن شما در واقع در حال تغییر ارزش از اشاره گر؟
[جوزف] بنابراین، در اینجا ببینید. >> [دانشجو] اوه، درست است.
[جوزف] بنابراین، من یک اشاره گر منهای منفی، درست است،
که حرکت چیزی پشت، و سپس آن را آزاد من،
چرا که این اشاره گر را به ابتدای آرایه اشاره کرد.
[دانشجو] اما این امر می تواند به نه مورد نیاز بود و شما بعد از آن خط متوقف شده است.
[جوزف] بنابراین، اگر من پس از این متوقف شده بود، که این امر در نظر گرفته شود نشت حافظه،
به خاطر من آزاد اجرا کنید.
[دانشجو] I [ناخوانا] پس از سه خط اول جایی که شما تا به حال اشاره گر 1 [ناخوانا].
[جوزف] اوهو. بنابراین، آنچه این سوال وجود دارد؟
متأسفم. نه، نه. برو، برو، لطفا.
[دانشجو] بنابراین، شما مقدار اشاره گر تغییر نیست.
شما می توانید به حال به انجام این کار اشاره گر منهای منفی است.
[جوزف] بله، دقیقا.
بنابراین، وقتی که من می توانم اشاره گر +1 و اشاره گر +2،
من اشاره گر انجام نمی برابر اشاره گر 1.
بنابراین، اشاره گر فقط می ماند اشاره در آغاز از آرایه.
این تنها زمانی که من به علاوه به علاوه که از آن مجموعه ارزش در داخل اشاره گر،
که آن را در واقع حرکت می کند این همراه است.
بسیار خوب.
بیشتر است؟
>> باز هم، اگر این نوع از قریب به اتفاق، این خواهد شد در جلسه پوشانده شده است.
همکار تدریس خود را در مورد آن بپرسید، و ما می توانیم در پایان پاسخ.
و معمولا ما دوست ندارم این چیز منفی به انجام.
این امر نیاز به پیگیری چقدر من در آرایه افست.
بنابراین، به طور کلی، این است که فقط به توضیح دهید که چگونه با این نسخهها کار های محاسباتی اشاره گر است.
اما چیزی که ما معمولا می خواهم به انجام این کار ما می خواهم برای ایجاد یک کپی از اشاره گر است،
و پس از آن خواهیم کرد که نسخه زمانی که ما در حال حرکت در اطراف رشته استفاده کنید.
بنابراین، در این مورد شما با استفاده از نسخه به چاپ کل رشته،
اما ما مجبور به مانند اشاره گر منهای 6 یا پیگیری چقدر ما در این نقل مکان کرد،
فقط به خاطر اینکه ما می دانیم که نقطه اصلی ما این است که هنوز هم با اشاره به آغاز از لیست
و همه آن چه ما را تغییر داده است این نسخه بود.
بنابراین، به طور کلی، تغییر کپی از اشاره گر اصلی خود را.
سعی نکنید به مانند مرتب سازی بر اساس - don't تغییر نسخه اصلی.
تلاش به تغییر نسخه تنها اصلی خود را.
بنابراین، شما متوجه هنگامی که ما با تصویب رشته را به printf
شما لازم نیست که یک ستاره را در مقابل آن قرار داده است مانند ما با دیگر ارجاع میدهد، درست است؟
بنابراین، اگر شما نسخه قابل چاپ کردن کل رشته از٪ s انتظار یک آدرس است.
و در این مورد یک اشاره گر و یا در این مورد مانند آرایه ای از کاراکتر ها است.
>> شخصیت، کاراکتر *، و آرایه های همین.
اشاره گر به کاراکتر ها، و آرایه های شخصیت همان چیزی هستند.
و بنابراین، همه ما باید انجام دهیم این است که در اشاره گر منتقل می شود.
ما لازم نیست که به مانند اشاره گر * و یا هر چیزی شبیه به آن منتقل می کند.
بنابراین، آرایه ها و اشاره گر ها همین.
هنگامی که شما در حال انجام چیزی شبیه به X [Y] در اینجا یک آرایه،
آنچه که آن را در زیر هود انجام آن را گفت، خوب، آن یک آرایه شخصیت،
پس از آن یک اشاره گر است.
و به این ترتیب X هستند هم همین است،
و بنابراین آنچه که آن را نشانی از آن می افزاید: از Y به X است،
است که همان حرکت رو به جلو در حافظه که بسیار است.
و در حال حاضر X + Y به ما می دهد برخی از مرتب کردن بر اساس آدرس
و ما dereference آدرس و یا به دنبال فلش
به جایی که محل سکونت در حافظه است و ما مقدار از آن محل در حافظه است.
بنابراین، به طوری که این دو دقیقا همان چیزی که هستند.
این فقط یک قند نحوی.
آنها همان چیزی. آنها فقط به نحو های مختلف برای هر یک از دیگر.
>> بنابراین، آنچه می تواند به اشتباه با اشاره گر؟ مانند، بسیاری. باشه. بنابراین، همه چیز بد است.
برخی از چیزهای بد که شما می توانید انجام دهید در حال بررسی نیست اگر malloc تماس خود را تهی می گرداند، درست است؟
در این مورد، من پرسیدن این سیستم را به من بدهد - چه چیزی است که تعداد؟
مانند 2 میلیارد بار 4، چرا که به اندازه یک عدد صحیح 4 بایت است.
من از آن درخواست مثل 8 میلیارد بایت است.
البته کامپیوتر من نخواهد بود قادر به به من که به حافظه زیادی را.
و ما را چک کنید در صورتی که این تهی، بنابراین، هنگامی که ما به dereference آن را بیش از وجود دارد را امتحان کنید -
به دنبال فلش به جایی که آن را برای رفتن به - ما این کار را به حافظه ندارد.
این همان چیزی است که ما آنرا بصورت غیر مرجع اشاره گر تهی.
و این اساسا باعث می شود شما را به segfault.
این یکی از راه هایی که شما می توانید segfault است.
همه چیز بد دیگری که می توانید انجام دهید - خیلی خوب.
بود که بصورت غیر مرجع اشاره گر تهی است. باشه.
سایر چیزهای بد - خوب، برای تعمیر که شما فقط با قرار دادن یک چک در آن وجود دارد
که بررسی می کند که آیا اشاره گر تهی است
و خروج از برنامه در صورتی اتفاق می افتد که malloc یک اشاره گر تهی را بر می گرداند.
این کمیک XKCD است. مردم آن را درک. مرتب کردن بر اساس.
>> بنابراین، حافظه است. و من بیش از این رفت.
ما خواستار malloc در یک حلقه است، اما هر زمان ما تماس بگیرید malloc
ما در حال از دست دادن مسیر از جایی که این اشاره گر با اشاره به
چون ما آن را clobbering.
بنابراین، تماس اولیه به malloc به من می دهد حافظه در اینجا.
اشاره گر اشاره گر من به این.
در حال حاضر، من می توانم این برنامه رایگان نیست، بنابراین در حال حاضر من اسمش malloc دوباره.
در حال حاضر به آن اشاره در اینجا. در حال حاضر حافظه من است اشاره در اینجا.
اشاره در اینجا. اشاره در اینجا.
اما من مسیر از آدرس تمام حافظه بیش از اینجا که من اختصاص داده شده از دست داده است.
و بنابراین در حال حاضر من هیچ اشاره ای به آنها ندارد دیگر.
بنابراین، من می توانم آنها را در خارج از این حلقه آزاد نیست.
و بنابراین به منظور رفع چیزی شبیه به این،
اگر شما به حافظه آزاد را فراموش کرده ام و شما این نشت حافظه،
شما باید برای آزاد کردن حافظه در داخل این حلقه هنگامی که شما با آن انجام می شود.
خوب، این چیزی است که اتفاق می افتد. من می دانم که بسیاری از شما نفرت این.
اما در حال حاضر - عالیست! شما مانند 44،000 کیلوبایت دریافت کنید.
بنابراین، شما این برنامه رایگان در پایان از حلقه،
و آن رفتن به آزاد کردن حافظه در هر زمان است.
اساسا، برنامه شما نشت حافظه نمی کنه.
>> و در حال حاضر چیز دیگری که می توانید انجام دهید، رایگان است برخی از حافظه است که شما دو بار خواسته.
در این حالت، شما چیزی malloc، شما مقدار آن را تغییر دهید.
یک بار به خاطر شما این برنامه رایگان به شما گفت که شما را با آن انجام شد.
اما پس از آن که ما آن را دوباره آزاد است.
این چیزی است که خیلی بد است.
این رفتن نیست ابتدا segfault،
اما پس از مدتی چه می کند این است که دو برابر آزادی این فساد ساختار پشته،
و شما باید یاد بگیرند که کمی بیشتر در این مورد اگر شما انتخاب می کنید را به یک کلاس مانند CS61.
اما در اصل بعد از در حالی که کامپیوتر خود را به اشتباه گرفته
در مورد چه مکان حافظه هستند که در آن و جایی که ذخیره شده -
که در آن داده ها در حافظه ذخیره می شود.
و بنابراین آزاد کردن یک اشاره گر دو برابر یک چیز بد است که شما نمی خواهید به انجام این کار است.
>> چیز دیگری که می تواند به اشتباه sizeof استفاده نمی کنید.
بنابراین، در این مورد شما malloc 8 بایت،
و این همان چیزی که به عنوان دو عدد صحیح، درست است؟
بنابراین، کاملا بی خطر است، اما از آن است؟
خب، به عنوان لوکاس در مورد معماری های مختلف صحبت کردیم،
اعداد صحیح از طول های مختلف هستند.
بنابراین، در دستگاه است که شما با استفاده از اعداد صحیح 4 بایت،
اما در برخی از سیستم های دیگر آنها ممکن است تا 8 کلمه در ادامه متن و یا آنها ممکن است به 16 بایت است.
بنابراین، اگر من تنها با استفاده از این شماره در اینجا،
این برنامه ممکن است بر روی دستگاه کار می کنند،
اما آن را نمی خواهید برای تخصیص حافظه به اندازه کافی در برخی از سیستم های دیگر است.
در این مورد، این همان چیزی است که عملگر sizeof برای استفاده است.
وقتی ما تماس sizeof (هوشمند)، چه می کند این است
آن را به ما می دهد به اندازه یک عدد صحیح بر روی سیستم که برنامه در حال اجرا است.
بنابراین، در این مورد، sizeof (بین المللی) 4 چیزی شبیه به دستگاه بازگشت،
و در حال حاضر این اراده 4 * 2، 8،
است که تنها مقدار فضای لازم برای دو عدد صحیح است.
بر روی سیستم های مختلف، اگر از نوع int است مانند 16 بایت یا 8 بایت،
آن را فقط به بازگشت بایت کافی است که مقدار ذخیره.
>> و در نهایت، ساختمانها.
بنابراین، اگر شما می خواهید برای ذخیره یک هیئت مدیره سودوکو در حافظه، چگونه ممکن است این ما کاری انجام دهید؟
شما ممکن است مانند یک متغیر اولین چیزی که فکر می کنم،
یک متغیر برای چیز دوم، متغیر برای سومین چیزی،
یک متغیر برای چیزی چهارم - بد، درست است؟
بنابراین، بهبود شما می توانید در بالا این است که به 9 x 9 به آرایه.
این خوب است، اما اگر شما می خواهید به شریک چیزهای دیگر با هیئت مدیره سودوکو
می خواهم آنچه را که مشکل هیئت مدیره است،
یا به عنوان مثال، چه نمره خود را، و یا چقدر وقت آن است که به شما برای حل این هیئت مدیره؟
خب، آنچه که شما می توانید انجام دهید این است که شما می توانید یک ساختار ایجاد کنید.
آنچه من اساسا گفت این است که من تعریف این ساختار در اینجا،
و من تعریف سودوکو یک هیئت مدیره که متشکل از یک هیئت مدیره است که 9 * 9 است.
>> و آنچه در آن است اشاره گر به نام از سطح آن است.
این شهر همچنین دارای X و Y که مختصات جایی که من در حال حاضر است.
همچنین زمان صرف شده [ناخوانا]، و از آن است که تعداد کل حرکت من نظامها بشوند تا کنون است.
و بنابراین در این مورد، من می توانم یک دسته از اطلاعات را تنها در یک ساختار گروه
به جای داشتن آن را مانند پرواز در اطراف مانند متغیرهای مختلف
که من واقعا نمی تواند پیگیری.
و این به ما اجازه می دهد که فقط نحو خوبی برای مرتب کردن بر اساس ارجاع کارهای مختلف در داخل این ساختار می باشد.
من می توانم board.board انجام درست، و من در هیئت مدیره سودوکو.
Board.level، من چقدر سخت آن است.
Board.x و board.y مختصات جایی که من ممکن است در هیئت مدیره به من می دهد.
و من دسترسی به چیزی است که ما زمینه در ساختار.
این تعریف sudokuBoard است، که یک نوع که من آن را.
و در حال حاضر ما اینجا هستیم. من یک متغیر به نام "هیئت مدیره" از sudokuBoard نوع.
و بنابراین در حال حاضر من می توانید تمام زمینه هایی که این ساختار را تشکیل می دهند در اینجا دسترسی داشته باشید.
>> هرگونه سوال در مورد ساختمانها؟ بله؟
[دانشجو] برای نوع int x، y، هر دو در یک خط اعلام کرد؟ >> [جوزف] اوهو.
[دانشجو] بنابراین، می تواند شما را فقط با همه آنها؟
مانند X، Y بار کاما از هم که در کل؟
[جوزف] بله، شما قطعا می تواند انجام این کار است، اما دلیل من x و y را در همان خط قرار داده است -
و سوال این است که چرا ما فقط این کار را در همان خط؟
چرا ما نه تنها از این در همان خط قرار داده است
x و y مربوط به هر یک از دیگر،
و این تنها سبک درست باشد، به یک معنا،
زیرا این گروه بندی دو چیز را در همان خط
که مرتب سازی بر اساس مانند مربوط به یک چیز واحد است.
و من فقط تقسیم این از هم جدا. این فقط یک چیز سبک است.
این عملکرد باعث می شود تفاوت آنچه.
هر گونه سؤال دیگر در ساختمانها؟
شما می توانید یک Pokédex با یک ساختار تعریف کنیم.
کلیپ های یک عدد و آن را به یک نامه، مالک، یک نوع است.
و پس از آن اگر شما یک مجموعه ای از کلیپ های شما باعث می شود که Pokédex، درست است؟
خوب، سرد است. بنابراین، سوال در مورد ساختمانها. اینها مربوط به ساختمانها.
>> در نهایت، GDB. چه GDB به شما اجازه انجام این کار؟ این به شما اجازه می دهد تا برنامه های خود را اشکال زدایی کنید.
و اگر شما از GDB استفاده نمی شود، من می خواهم در کوتاه مدت توصیه می شود تماشای
و فقط رفتن را بیش از آنچه که GDB است، چگونه شما با آن کار می کنند، شما ممکن است استفاده از آن،
و آزمایش آن بر روی یک برنامه است.
و بنابراین، آنچه GDB اجازه می دهد که شما باید انجام دهید این است که به شما اجازه می دهد توقف [نامفهوم] برنامه خود را
و عملی است.
به عنوان مثال، من به توقف اعدام در مثل خط 3 از برنامه من می خواهم،
و در حالی که من در خط 3 هستم من می توانم نسخه قابل چاپ همه ارزش هایی که وجود دارد.
و بنابراین، آنچه که ما مانند توقف در یک خط
این است که ما به این قرار دادن یک نقطه انفصال در آن خط
و پس از آن ما می توانید نسخه قابل چاپ کردن متغیرها در دولت از این برنامه که در آن زمان است.
>> ما پس از آن می توانید از از طریق برنامه خط به خط گام وجود دارد.
و پس از آن ما می توانیم در دولت از پشته در آن زمان نگاه کنید.
و بنابراین به منظور استفاده از GDB، چه کار می کنیم این است صدای جرنگ جرنگ تماس بگیرید ما بر روی فایل C،
اما ما باید آن را به پرچم ggdb عبور.
و زمانی که ما در حال انجام می شود که ما فقط اجرا GDB بر روی فایل خروجی حاصل شده است.
و به این ترتیب شما می توانید برخی از توده مانند متن مانند این،
اما واقعا همه شما باید انجام دهید این است که در دستورات در ابتدا تایپ کنید.
فرار از اصلی قرار می دهد نقطه انفصال در اصلی.
فهرست 400 خط از کد را در سراسر خط 400 است.
و بنابراین در این مورد شما فقط می توانید در اطراف نگاه کنند و می گویند، آه،
من می خواهم به یک Break Point در خط 397 است، که این خط،
و سپس برنامه خود را اجرا می کند که به مرحله و رفتن به شکستن.
رفتن به مکث وجود دارد، و شما می توانید نسخه قابل چاپ کردن، به عنوان مثال، ارزش پایین یا بالا.
و به این ترتیب یک دسته از دستورات شما نیاز به دانستن وجود دارد،
و این تصاویر به صورت خودکار بالا خواهد رفت بر روی وب سایت،
بنابراین اگر شما فقط می خواهم به این مرجع یا دوست قرار داده و آنها خود را در بازی ورق، احساس رایگان.
>> دانلود. که امتحان نقد و بررسی 0 بود، و ما در اطراف چوب اگر شما هر گونه سوال.
بسیار خوب.
>> [تشویق حضار]
>> [CS50.TV]