DAVID J. مالان: هذا هو CS50 و هذه هي بداية الأسبوع الأربعة. و، فتى، هو فولكس واجن في مشكلة كل ذلك بسبب البرنامج. دعونا نلقي نظرة. [تشغيل الفيديو] -Cars، أذكى الشخصيات في الأفلام سريع وغاضب. هذا الاسبوع صناعة السيارات الألمانية فولكس واجن وجدت نفسها في وسط فضيحة نسب يحتمل الجنائية. فولكس واجن تستعد لمليارات في الغرامات، اتهامات جنائية محتملة لقياداتها، كما تعتذر الشركة لتزوير 11 مليون سيارة ل مساعدته على فوز اختبارات الانبعاثات. وكانت النماذج الديزل -Certain صمم مع برمجيات متطورة أن المعلومات المستخدمة بما في ذلك موقف القيادة والمركبات سرعة لتحديد وكانت السيارة تمر اختبار الانبعاثات. تحت هذا الظرف، المحرك من شأنه أن يقلل من الانبعاثات السامة. ولكن السيارة زورت لالالتفافية أنه عندما كانت تسير عليه. ازدادت انبعاثات 10-40 مرات فوق مستويات EPA مقبولة. [END قراءة] DAVID J. مالان: لذلك دعونا نلقي نظرة على هذه ونرى بالضبط كيف هذا قد تنفذ وكيف يمكن أن تؤثر هذه العديد من السيارات من هذا القبيل. حتى في يدي هنا الصحافة الإفراج الذي صدر من قبل EPA-- على البيئة وكالة الحماية التي هي وكالة الولايات المتحدة التنظيمية التي يعالج المخاوف البيئية، ثم الفعلي الإشعار القانوني الذي كان إرسال إلى فولكس واجن قبل بضعة أيام فقط. وبالتالي فإن وكالة حماية البيئة يكتب، ويكشف الآن علنا، وهو برنامج متطور الخوارزمية على يقين سيارات فولكس واجن بالكشف عندما تمر السيارة اختبار الانبعاثات الرسمية ويتحول انبعاثات الكاملة تسيطر على فقط أثناء الاختبار. فعالية هذه المركبات التلوث أجهزة التحكم في انبعاثات هي إلى حد كبير انخفاض خلال كل القيادة العادية الحالات. هذه النتائج في السيارات التي تلبي المعايير في المختبر أو اختبار المحطة، ولكن أثناء التشغيل العادي تنبعث oxides-- النيتروجين أو NOx-- بسرعة تصل إلى 40 ضعف المعيار. البرنامج التي تنتجها فولكس واجن هو جهاز الإقتباس، الهزيمة، على النحو الذي حدده النظيفة قانون الهواء في الولايات المتحدة. يذهبون إلى القول بأن وكالة حماية البيئة وكالة أخرى كشف الجهاز هزيمة البرامج بعد تحليل مستقل قبل الباحثين في الغرب جامعة فرجينيا. يساهم التلوث أكاسيد النيتروجين ل ثاني أكسيد النيتروجين والأوزون على مستوى الأرض، والجسيمات الدقيقة. التعرض لهذه وقد تم ربط الملوثات مع مجموعة واسعة من آثار صحية خطيرة، بما في ذلك زيادة الربو الهجمات وغيرها من أمراض الجهاز التنفسي الأمراض التي يمكن أن تكون خطيرة بما فيه الكفاية الى ارسال الناس الى المستشفى. التعرض للأوزون و الجسيمات تحتوي أيضا ارتبط سابق لأوانه الموت بسبب أمراض الجهاز التنفسي ذات الصلة أو القلب والأوعية الدموية الآثار ذات الصلة. الأطفال وكبار السن والأشخاص الذين يعانون من أمراض الجهاز التنفسي قبل الإيجاد بشكل خاص لخطر الآثار الصحية لهذه الملوثات. تكفي هو القول، انها خطيرة جدا. ودعنا نذهب إلى قراءة واحد فقط أكثر مقتطفات وبعد ذلك سنقوم نلقي نظرة على الآثار الكامنة هذا في سياق سيارة. على وجه التحديد، فولكس واجن تصنيع وتركيب البرمجيات في ما يسمى التحكم الإلكتروني module-- أو ECM-- من هذه المركبات التي مست عندما كان يجري اختبار السيارة ل الامتثال لمعايير الانبعاثات EPA. على أساس المدخلات المختلفة بما في ذلك موقف عجلة القيادة والمركبات سرعة ومدة المحرك العملية، والضغط الجوي، هذه المدخلات على وجه التحديد تعقب المعلمات من إجراء الاختبار الاتحادي تستخدم ل اختبار الانبعاثات للحصول على شهادة وكالة حماية البيئة الأغراض. خلال اختبار الانبعاثات وكالة حماية البيئة، البرنامج المركبات ECM ركض البرمجيات التي تنتجها النتائج انبعاثات متوافقة. في جميع الأوقات الأخرى، و برنامج ECM مركبة ركض طريق منفصل المعايرة التي خفضت فعالية نظام التحكم في الانبعاثات بشكل عام، على وجه التحديد التحفيزي الانتقائي الحد من أكاسيد النيتروجين الهزيل trap-- وسنرى في لحظة. ونتيجة لذلك، انبعاثات أكاسيد النيتروجين زيادة بعامل من 10 إلى 40 مرة فوق مستويات متوافقة مع وكالة حماية البيئة اعتمادا على نوع دورة محرك. لذلك ماذا يعني هذا حقا، و كود المصدر لبرنامج تشغيل على فولكسفاغن لم يتم الكشف علنا، غير أنه، على نحو فعال، وهذا تعادل في مكان ما هناك في الداخل من التعليمات البرمجية فولكس واجن. إذا كان يتم اختبار لك، وإذا كانت السيارة بالكشف عن عوامل بيئية معينة مثل عجلة القيادة موقف أو حركة أو عدم وجودها في السيارة أو أي عدد من العوامل الأخرى التي يفترض حاليا أن تكون جزءا من هذه الصيغة، انهم ببساطة تشغيل التحكم في الانبعاثات كاملة. وبعبارة أخرى، فإنها تبدأ ينبعث منها أقل من الملوثات. آخر، في كل حالة أخرى عندما لا يكتشف بأنها في المختبر، وأنها فقط لا. وهكذا يمكنك تبسيط ذلك في أكثر شبة الكود ملموس مع شيء مثله. إذا عجلات تحول ولكن عجلة القيادة ليست كذلك، موحية أن السيارة على بعض نوع من اسطوانة دوارة ولكن في بعض نوع من مستودع يجري اختبارها، ثم تتصرف مثل سوف EPA مثلك. عدم القيام بذلك لا. لذلك دعونا نلقي نظرة في شريط فيديو قصير يأخذ نظرة على ما آثار هي من هذا الواقع ميكانيكيا. [تشغيل الفيديو] -Last الجمعة أعلنت وكالة حماية البيئة أن بعض سيارات فولكس واجن أودي قدمت بين عامي 2009 وهذا العام كانت تستخدم ما يسمى جهاز هزيمة للالتفاف على قوانين الانبعاثات مصممة للحفاظ على الهواء النقي. ولكن ماذا يعني ذلك بالضبط؟ حسنا، السيارات الحديثة العشرات من أجهزة الكمبيوتر داخلها. وبعض من هذه الحواسيب مساعدة في تنسيق وظائف المحرك الأمثل ل الأداء أثناء التأكد من أنه لا يوجد الكثير من القمامة الخروج من أنبوب العادم. لقد تم بالفعل العمل بهذه الطريقة لعدة عقود حتى الآن. أساسا، كل جزء محرك سيارة الحديثة لديها جهاز استشعار أو وحدة تحكم على ذلك، وهذه الحواسيب قراءة في بيانات الآلاف من مرات في إجراء تعديلات الثانية مثل نسبة الوقود إلى الهواء ما يجري في اسطوانات. هذه الغش فولكس واجن وطرازات أودي هي الديزل، والديزل أكثر واحد كمبيوتر المهم حقا المعلمات التي تسيطر عليها، وهو كمية الوقود غير المحترق الذهاب في العادم. الآن يبدو سيئا. لا يبدو وكأنك تريد الوقود غير المحترق الخوض في العادم. ولكن في حالة وجود الديزل، لديك شيء دعا فخ أكاسيد النيتروجين وهو الجهاز الذي يمتص والفخاخ لأكاسيد النيتروجين التي هي ملوثات التي من شأنها أن وإلا انتقل إلى الغلاف الجوي. وتأثير هذا الفخ أكاسيد النيتروجين ومما يعزز مع الوقود غير المحترق. حتى جهاز الهزيمة هو برنامج خاص داخل هذه أجهزة الكمبيوتر التي يمكن أن تجعل من تبدو وكأنها سيارة تجتمع الانبعاثات المعايير حتى عندما لا. كان فولكس واجن مشكلة على يديها. كانت معروفة محركات الديزل للحصول على الاقتصاد في استهلاك الوقود العظيم، ولكن في فخ أكاسيد النيتروجين يعمل فقط بشكل جيد عندما يتم استخدام المزيد من الوقود. وبالتالي فإن السيارة سوف يكشف، باستخدام هذا الجهاز الهزيمة، عندما كان الحصول على الانبعاثات الاختبار، فإنه يستخدم المزيد من الوقود، جعل فخ العمل أكاسيد النيتروجين بشكل جيد، أن انبعاثات يكون على ما يرام. ولكن بعد ذلك تحصل على الطريق، والجهاز إيقاف، كنت حرق كمية أقل من الوقود ولكن أنك تضع ما يصل الى 40 مرات المزيد من الملوثات في الغلاف الجوي. ولكن كيف هيك السيارة يعرفون أنه كان يجري اختبار للامتثال الانبعاثات؟ وتقول وكالة حماية البيئة أنها كانت متطورة نظام فحص الأشياء مثل موقف عجلة القيادة، السرعة، متى كان المحرك على، وحتى الضغط الجوي. وبعبارة أخرى، كان هناك بأي حال من الأحوال وهذا عرضي لأنه لم يكن البرنامج مصممة بعناية فائقة للكشف عن اختبار الانبعاثات الرسمي. هذا بعض خطيرة جدا الخداع وهذا لماذا فولكس واجن في هذه مشكلة خطيرة. في الواقع، الرئيس التنفيذي، ومارتن فينتركورن، نزلت للتو. ذلك ما سيحدث بعد ذلك؟ حسنا، إذا كنت واحدا من نصف مليون Jettas الديزل، البيتلز، الركبة، Passats، أو أودي A3s تنفذ، والخبر السار هو هو أن السيارة لا تزال آمنة للدفع. لم يكن لديك لوضعها بعيدا حتى يصدر فولكس واجن التذكير. ولكن في بعض نقطة انهم ربما ستكون لدينا لتحديث البرامج داخل سيارتك. وعندما يحدث ذلك كنت قد الحصول على أقل ميلا للدبابات. المحامون يستعدون بالفعل حتى لدعاوى الطبقة العمل لذلك قد تحصل على تعويض أصحاب في مرحلة ما في المستقبل. ولكن هذا لن يحدث في أي وقت قريب. [END قراءة] DAVID J. مالان: ولذلك فإن هذا يثير في الواقع مثيرة للاهتمام اكبر السؤال الصورة كما أن تثق. الصحيح؟ كل منا لديه فون أو في androids أو شيء ما في جيوبنا على الأرجح في هذه الأيام، أو أجهزة الكمبيوتر المحمولة على لفات لدينا التي هي تشغيل برنامج مصنوعة من قبل شركة آبل ومايكروسوفت وعناقيد من الشركات الأخرى. ولكن كيف نعرف أن ما تقوم هذه البرمجيات هو في الواقع ما هذه وتقول شركات يفعلون؟ على سبيل المثال، من الذي نقول انه في كل مرة كنت إجراء مكالمة هاتفية على اي فون الخاص بك أو الروبوت الهاتف أو ما شابه ذلك، أن هذا رقم الهاتف ليست أيضا يجري تحميلها على الخادم بعض الشركة بسبب بعض البرامج قمت مكتوبة، سواء كان ذلك في التشغيل النظام نفسه مثل دائرة الرقابة الداخلية أو الروبوت، أو لأنك قمت بتحميل بعض التطبيقات طرف ثالث بطريقة أو بأخرى هو الاستماع لكل ما تكتبه أو كل ما تقوله فعلا. كيف يمكنك أن تعرف ذلك، عندما يا رفاق تشغيل رنة أو تقديم لتجميع الخاصة بك البرمجيات الخاصة بها في CS50، كيف هل لموظفي أن CS50 الخاصة، عن طريق المكتبة CS50، لم يكن تسجيل كل سلسلة كنت قد حصلت من أي وقت مضى أو كل شبر كنت قد حصلت من أي وقت مضى؟ حسنا، هل يمكن أن ننظر بالتأكيد في شفرة المصدر لشيء مثل المكتبة CS50، كنت يمكن أن ننظر في شفرة المصدر لنظام التشغيل لينكس يعمل على IDE CS50. لكن عرضا مذهلا وبالنظر الى الوراء في عام 1984 في استلام جائزة تورينج من قبل عالم الكمبيوتر الشهير المعروف جدا as-- يدعى كين طومسون الذي حصل على جائزة تورينج التي هو نوع من علم الحاسوب في جائزة نوبل، اذا صح التعبير، لعمله على نظام التشغيل تسمى يونيكس، التي هي مشابهة جدا في روح لماذا نستخدم الذي هو لينكس. والسؤال الذي سأل في بلده خطاب القبول، أساسا وضع إطار ل سنوات وسنوات من المناقشة حول الثقة والأمن، وكان هذا. إلى أي مدى ينبغي الثقة واحد بيان أن program-- قطعة من software-- خال من أحصنة طروادة؟ ربما هو أكثر أهمية للثقة الشعب الذي كتب البرنامج. في واقع الأمر، لقد ربط إلى الحديث أنه قدم عند قبول هذه الجائزة في '80s على موقع CS50 ل تحت الصفحة محاضرات لهذا اليوم. لأن ما سترى غير أنه يعطي في الواقع مثال بسيط إلى حد ما كيف حتى مترجم مثل رنة أو أيا كان المجمعين الآخرين قد استخدمت في الماضي، ماذا لو جزءا لا يتجزأ من نحن مترجم أنفسنا تستخدم قليلا إذا شرط أن يقول أساسا، إذا لاحظت أن هذا الرمز يستخدم وظيفة GetString أو GetInt وظيفة، والمضي قدما وإدراج الباب الخلفي أو حصان طروادة مثل أن هذا البرنامج لديها الآن بعض الأصفار وتلك التي تفعل شيئا الخبيثة. تسجيل كل الخاص بك ضربات المفاتيح، وتحميل البيانات لبعض الخادم، أو أي شيء حقا. وما كين تومسون وغني عن القيام به في كلامه هو إظهار أنه حتى لو لديك حق الوصول إلى مصدر مدونة مترجم أن ضار يمكن القيام بذلك، لا يهم لأن هناك هذا الدجاج والبيض واقع العديد الماضي سنوات حيث المجمعين تستخدم لتجميع أنفسهم. وبعبارة أخرى، في طريق العودة عندما يقوم شخص ما وكان قد كتب المترجم الأول. وبعد ذلك، في أي وقت انهم تحديث مترجم عن طريق تغيير شفرة المصدر، إضافة ميزات واعادة تجميع ذلك بالنسبة للأشخاص مثلنا لاستخدام، وأيضا، أنهم يستخدمون القديمة نسخة من مترجم تجميع جديدة نسخة من المترجم. وإذا كنت تأخذ نظرة في الحديث أنه أعطى، سترى أن ل لذلك دائرية، هل يمكن أن يكون فعلا أو البق أحصنة طروادة جزءا لا يتجزأ من البرنامج نستخدمه. وحتى لو نظرتم الى شفرة المصدر لتلك البرامج، قد لا يكون واضحا حتى لأن الخداع هو في الواقع في بعض نسخة قديمة من المترجم الذي كان منذ ذلك الحين حقن التهديد في برنامجنا. الذي لا يبعد سوى أن أقول، نحن حقا لا يمكن ويجب أن لا البرامج الثقة التي تعمل على أجهزة الكمبيوتر المحمولة لدينا أو الهواتف أو أي عدد من الأماكن. في واقع الأمر، في وقت لاحق في هذا الفصل الدراسي عندما نبدأ بالحديث عن برمجة الويب وفعلا بدء بناء تطبيقات الويب أنفسنا، سوف نتحدث عن هذه التهديدات وغيرها. الآن، كنت قد لاحظت وتساءل أن هناك دارث الصغير للغاية فيدر في القصاصات التي على حافة كان يظهر هناك حول فولكس واجن. إذا كنت قد رأيت أبدا، وأنا أعتقد أننا يجب أن يخفف مزاج لأن هذا هو كل شيء الاكتئاب جدا ومخيفة. أنا ذاهب لننظر إلى الوراء في السوبر بول 2011 عندما التجارية من قبل Volkswagen-- وهذا تقريبا يجعلها محبب again-- بثت لأول مرة على شاشة التلفزيون. انها مقطع الثاني 60 أعتقد أن عليك التمتع بها. [تشغيل الفيديو] [MUSIC - موضوع من "حرب النجوم"] [نباح الكلب] [CAR تبدأ التشغيل] [END قراءة] DAVID J. مالان: نعم. كنت فحص فقط. تلك السيارة هي على قائمة الانتهاكات. حسنا. لذلك نحن ننظر في بعض شبة الكود لحظة مضت. وهنا لأكبر مقتطف من التعليمات البرمجية شبة الكود التي شهدناها عدة مرات حتى الآن. ودعونا استخدام هذه فرصة الآن لإدخال البرمجة الجديدة الاسلوب الذي فعلناه رؤية حسابيا الأسبوع الماضي عندما نظرنا في دمج النوع. ولكن دعونا إضفاء الطابع الرسمي على ذلك ونرى كيف نحن قد تستخدم في الرمز الفعلي، ثم نحن في طريقنا لاستخدام هذه تقنية أسفل الطريق أكثر من المرجح أن يحل بعض المشاكل الأخرى. لذلك كان هذا أحد البرامج الأولى التي كتب من أي وقت مضى، وإن كان ذلك في التعليمات البرمجية شبة الكود. وما هذا البرنامج سمح لنا أن نفعل بالطبع تم العثور على مايك سميث في دفتر الهاتف. وتلاحظ في بنود معينة من ثمانية و11 التي كان هذا البيان الانتقال إلى. في واقع الأمر، مؤكدة لغات، C بينها، فعلا لديها بيان هذا هو حرفيا الذهاب إلى التي تسمح لك ل القفز إلى سطر معين. لقد عبس عموما على ل ويمكن أن يساء استخدامها بسهولة جدا ويمكنك البدء في القفز الخاص بك برنامج في كل مكان في مقابل لاستخدام هذا النوع من المنطق والتحكم في التدفق أننا قد استخدمت حتى الآن مع فقط الحلقات والظروف وما شابه ذلك. لكننا يمكن تبسيط هذه الخوارزمية في التعليمات البرمجية شبة الكود كما يلي. بدلا من هذا تكرارية أو نهج حلقات حيث واصلنا ذهابا و مرة أخرى والعودة إلى خط الثلاث، لماذا لا يمكننا مجرد نوع من البونت وأكثر من ذلك أقول عموما في خط سبعة و 10، استبدال فقط هذين أزواج من خطوط مع، الا اذا سميث سابق في الكتاب سنقوم البحث عن مايك في النصف الأيسر من الكتاب. الا اذا سميث في وقت لاحق الكتاب، والبحث عن مايك في الحق نصف الكتاب. وتلاحظ بالفعل دائرية. الصحيح؟ إنني أبحث عن مايك في دفتر الهاتف ثم أنا في نهاية المطاف ربما ضرب خط سبعة أو ربما خط 10 وتعليماتي لنفسي هو البحث لمايك في نصف دفتر الهاتف. حسنا، كيف يمكنني البحث عن مايك؟ أنا في منتصف البحث عن مايك، لماذا أنت نوع من يرسل لي في الدائرة؟ ولكن هذا موافق لأن ما هو يحدث لحجم المشكلة، كما هو مكتوب في السطر 7 و 10؟ نحن لسنا مجرد القول بحث لمايك، والبحث عن مايك. نحن على وجه التحديد قائلا ماذا؟ البحث عنه في النصف الأيسر من النصف الأيمن وهو فعال نصف حجم المشكلة. لذلك لا بأس أننا نوع من الانخراط في هذه دائرية، هذه الحجة دائرية، لأنه على الأقل نحن مما يجعل من مشكلة أصغر وأصغر. وأخيرا ونحن في طريقنا للوصول إلى أن ما يسمى قضية القاعدة حيث لدينا صفحة واحدة فقط left-- كما لدينا المتطوعين الأسبوع الماضي did-- كان لدينا صفحة واحدة اليسار ومن ثم فإننا لا لديك للحفاظ البحث عن مايك سميث لأنه إما على تلك الصفحة أو أنه ليس كذلك. فكيف يمكننا أن تنفيذ هذه الفكرة، وهذا نوع من دائرية في الرمز الفعلي؟ حسنا، يمكننا الاستفادة تقنية وهذا ما يعرف عموما باسم العودية. وقد رأينا هذا في شبة الكود لدمج النوع الأسبوع الماضي. نذكر أن هذا هو شبة الكود لدمج النوع. انه يمكن القول حتى أبسط من فقاعة أو اختيار أو الإدراج الفرز فقط من حيث البساطة والتي يمكنك التعبير عن ذلك. ولكن هذا ل نحن نوع من دائري قائلا البحث عن شيء ما عن طريق البحث عنه مرة أخرى. لكننا تبحث إما على النصف الأيسر أو النصف الأيمن ثم في النهاية نحن دمج في هذه الحالة. ولكن هنا أيضا، مع تلك خطين النوع، لم لدينا هذا مرة أخرى فكرة العودية. وبشكل ملموس ما يعنيه هذا، في سياق خوارزمية، غير أن الخوارزمية العودية إذا كان يستخدم أو تطلق على نفسها. أو من حيث C، وهي وظيفة هي recursive-- دالة تسمى فو هو عودي إذا فو، في مكان ما في شفرة المصدر، باستدعاء الدالة فو نفسها. وهذا أمر سيئ إذا كان كل فو من أي وقت مضى لا غير تسمي نفسها مرارا وتكرارا. لا بأس إذا فو توقف في نهاية المطاف، كما يفعل دمج النوع، بالقول، انتظر لحظة، إذا كانت هذه المشكلة هي السوبر الصغيرة، على سبيل المثال، أو وجدته منهم أنا تبحث عنه، يعود فقط. لا متكرر، لا استدعاء دوريا نفسي مرة أخرى. وذلك دعونا نلقي نظرة على كيف يمكن عمل هذا الواقع. لذلك أنا ذاهب إلى المضي قدما وفتح حتى مثالين شفرة المصدر هنا. ويسمى أحدها سيجما 0. وهذا ليس على الإطلاق العودية، ولكن دعونا نلقي نظرة على ما يفعله هذا البرنامج. لقد جردت من كل تعليقات من ذلك، ولكن كل من شفرة المصدر على لCS50 الموقع يحتوي تعليقات إذا كنت تريد أن تقرأ من خلال ذلك مرة أخرى في وقت لاحق. ودعونا نفعل زوجين من التعقل يتحقق هنا. حتى في الجزء العلوي من هذا الرمز، لدينا تشمل CS50.h. ما علاقة كل هذا؟ لماذا هو هنا؟ في شروط للشخص العادي المعقولة. ماذا يفعل؟ نعم. الجمهور: ذلك أن تعمل وظيفة GetInt. DAVID J. مالان: ول وتعمل وظيفة GetInt. لأن داخل هذا ملف، CS50.h، التي سنرى قبل مضي وقت طويل في حيث شفرة المصدر، لديه مجموعة من الوظائف declared-- GetInt، GetString، وحفنة من بالآخرين وإلا لدينا في الواقع أن تشمل الخط، على رنة مترجم ليس الذهاب لمعرفة ان كان موجودا. والشيء نفسه ينطبق على خط اثنين حيث يتم تعريف الباحث printf، والتي هي وظيفة نحن الاستمرار في استخدام قليلا جدا. الآن، أربعة أسطر يبدو قليلا غير تقليدي لأنها مجرد بطانة واحدة. انها حصلت على فاصلة منقوطة، لا مجعد الأقواس، أي رمز داخل منه. ولكن ما فعله نسميه هذا الشيء في الاسابيع الماضية؟ نعم. لذلك النموذج. ولماذا لدينا النموذج الذي يبدو ليكون قليلا زائدة عن الحاجة عادة لأننا عادة انظر وظيفة أخرى في وقت لاحق في الملف، أليس كذلك؟ فلماذا نحن have-- كنت فقط الخدش رأسك ولكنني سوف أعتبر. نعم. الحضور: (غير مسموع) وظيفة بعد الرئيسية. DAVID J. مالان: بالضبط. بحيث مترجم يعرفك وتعريف أو تنفيذ في نهاية المطاف أن وظيفة بعد الرئيسية، ويفترض. حتى رنة وأكثر المجمعين هي نوع من البكم وأنها سوف تعرف فقط ما كنت أقول لهم. وإذا كنت ترغب في استخدام وظيفة تسمى سيغما، كنت تعلم أفضل مترجم أنه موجود مسبقا. الآن، في حد ذاته الرئيسي، حتى على الرغم من انها مجموعة من الخطوط، هو مألوف جدا ونأمل الآن. انها حصلت على القيام به أثناء الحلقة الغرض الذي في الحياة يبدو هنا هو الحصول على صحيح موجب من المستخدم. وتبقي فقط المضايقه له أو لها حتى التعاون. ثم في السطر 16 ولدي مكالمة مثيرة للاهتمام. IntAnswer. والتي على اليد اليسرى الجانب يعطيني كثافة العمليات والتي يمكن أن store-- دعا Answer-- وهو ذاهب لتخزين، على ما يبدو، قيمة الإرجاع سيغما. حتى سيغما هو فقط اسم عشوائية ولكن ذات مغزى التي اعطيت لوظيفة الغرض الذي في الحياة هو اتخاذ argument-- واحد نحن سوف يطلق عليه N في هذا case-- وفقط لاتخاذ مجموع هذا العدد بالإضافة إلى كل رقم موجب وهذا أصغر من ذلك. حتى لو كنت تمر في عدد 2 ل سيغما، وأود أن أضيف 2 زائد 1 بالإضافة إلى 0-- لا 0-- بحيث يعطيني 3. إذا كنت تمر في 3 إلى سيغما، أريد أن لدينا 3 زائد 2 زائد 1، الذي يعطيني 6. وهكذا دواليك. لذلك يضيف للتو جميع الأرقام أقل من أو يساوي إليها. الآن، إلى هنا انا فقط لطباعة الجواب. وذلك شيك التعقل سريع، دعونا جعل سيغما 0-- دوت مائل سيغما 0-- واسمحوا لي أن اكتب في 2. وأنا في الواقع الحصول على 3. اسمحوا لي أن اكتب في 3. أنا في الواقع الحصول على 6. وإذا كان أي شخص يمكن أن تفعل الرياضيات بسرعة، إذا كنت تفعل 50 ما أنا ذاهب يحصل؟ الحضور: (غير مسموع). DAVID J. مالان: حسنا، لا. لكن 1275 التي هي قريبة جدا. لذلك هذا هو نتيجة لفعل 50 بالإضافة إلى 49 زائد 48 زائد 47 زائد 46 على طول الطريق وصولا الى 1. ذلك أن يفعل كل سيغما. ولكن دعونا نرى كيف كنا تنفيذه الآن. حتى أسفل هنا هي وظيفة نفسها. وهذا لا يبدو أن لديها أي شيء للقيام مع العودية حتى الان. في الواقع، نحن باستخدام تقنية المدرسة القديمة. أنا تهيئة متغير يسمى المبلغ إلى الصفر، ثم لدي foreloop هنا، وأنا أعلن من يسمى كثافة العمليات الأول، وضع ذلك يساوي 1-- على الرغم من أنني يمكن تعيينها مساوية ل الصفر، ولكن منذ أفعله بالإضافة إلى ذلك، من يهتم إذا كان صفر أو واحد. انها ستكون لدينا أي تأثير. لذلك أنا بالتكرار طالما أنا غير أقل من أو يساوي م، والتي هي الحجة التي تم تمريرها في. ثم أواصل تزايد I. والبصيرة الحلقة كل ما أفعله هو القيام المبلغ بالإضافة إلى يساوي I. وهذا متعمدة. أنا لا أريد القيام به، في هذا الحالة، مثل مبلغ زائد زائد. وأود أن أضيف في الواقع القيمة الحالية للI والتي تحافظ على الحصول على أكبر وأكبر وأكبر إلى رصيده التوالي. ثم أعود المبلغ. وهكذا الجواب يحصل على مبلغ القيمة. وبعد ذلك طباعته. لذلك هناك فرصة هنا، على الرغم من أن نوع من تبسيط هذا الرمز المفهوم وهذا النوع من ضربة واحدة هو تمانع من حيث البساطة على الرغم من أنها يستغرق بعض الوقت لفرز من نقدر لماذا هذا هي قوية في هذه الأمثلة الصغيرة. هنا هو سيجما احدا-- ذلك النسخة الثانية من هذا القانون. كل شيء حتى أعلى مطابق لذلك تنطبق هذه القصة نفسها كما كانت من قبل. ولكن الآن دعونا ننظر إلى تنفيذ سيغما التي لقد تتفكك وصولا الى هذه فقط lines-- أربعة خطوط للقانون، حقا، بالإضافة إلى بعض الأقواس المعقوفة والمساحة البيضاء. ولكن ماذا أفعل؟ إذا م أقل من أو يساوي الصفر، ولست بحاجة للتعامل مع نوع من هذه الحالة فائقة بسيطة. وإذا كنت تسلم لي صفر أو أي شيء السلبية الذي هو مجرد غريب، أنا ذاهب لمجرد تعسفا ولكن باستمرار إرجاع صفر. أنا لا أريد هذا الشيء ل الحصول على بعض انهائية غريب حلقة بسبب قيمة سالبة. لذلك أنا فقط أقول، إذا كنت تعطيني الصفر أو أقل، وأنا أعود صفر. ولكن هذا امر جيد لأن هذا هو أن صفحة واحدة من الكتاب الهاتف ما تبقى. أنا قضم مشكلة محددة جدا ولا يدعو شيء متكرر. ولكن في خط 31، ما لا يبدو لي أن تفعل؟ الأقواس هي مجرد حفظ الأشياء، ونأمل، أوضح قليلا. ولكن كل ما أفعله هو أنا العودة m-- أيا كان يمكنك تسليم me-- بالإضافة إلى قيمة m-- آسف، بالإضافة إلى قيمة سيجما للمتر ناقص 1. فماذا يعني هذا؟ إذا كنت تعطيني رقم 3 كمدخل، الجواب أريد الحصول في نهاية المطاف هو 6 ل3 زائد 2 زائد 1 يعطيني 6. ولكن كيف يمكنني التفكير كيف هذا الرمز يعمل؟ أول مرة أدعو سيغما وأمرر في قيمة 3، وهذا مثل قوله على قطعة من الورق، وهنا قيمة 3 ولقد تم تمرير هذا كما سيغما. 3 ومن الواضح أن ما لا يقل عن 0 حتى لا ينطبق شرط IF. وآخر لا. فماذا أفعل؟ أريد أن أعود م، وهو 3، بالإضافة إلى سيجما للمتر ناقص 1. لذلك اسمحوا لي تتبع ذلك. انا ذاهب الى وضع هذا قطعة من الورق لأسفل. وما قيمة، ليكون واضح، أنا ذاهب لتمرير في سيغما في هذه المرحلة من القصة؟ ما العدد؟ 2، أليس كذلك؟ 3 ناقص 1 هو 2. لذلك أنا فقط بحاجة قليلا قصاصة من الورق هنا. وحتى الآن سيغما هو الحصول على ودعا مرة أخرى. ولقد وضعت عمدا هذا إلى أسفل لأنه وكأنه نوع من التوقف هذا الإصدار من القصة لأنه الآن تركيزي ينصب في إشارة م ناقص 1. لذلك كان م 3، م ناقص 1 هو 2. حتى هنا هو أن 2 لقد تم تمريرها. 2 ومن الواضح أن لا يقل عن 0 لذلك لا تنطبق هذه الحالة. آخر أعود م، وهو هذا شيء، بالإضافة إلى سيغما ما قيمة؟ حتى إذا سيغما من 1-- لم هو الآن 2 حتى 2 ناقص 1 هو 1. حتى الآن أنا فقط القيمة 1. أنا مجرد تمرير عدد 1 إلى وظيفة sigma-- أو نفسي here-- حتى 1 ومن الواضح أن لا أقل من الصفر، لا تزال لا ينطبق. عودة شيء آخر زائد 1 سيغما لماذا؟ 0. لذلك اسمحوا لي فقط تذكر ذلك. سأعود إلى ذلك لاحقا. الآن انا ذاهب الى المضي قدما وذرة خفض عدد 0 لأن هذا هو حجتي أو المعلمة. انا مرت الرقم 0 وأخيرا هذه العملية من مجرد تكرار نفسي الإعلان nauseum لا تتوقف لأن ما أفعل فورا بمجرد أرى هذا 0؟ أعود صفر. حتى الآن لديك لترجيع القصة. لو كنت الآن نعود إلى الوراء في الوقت المناسب، ما هو الشيء الأخير فعلت لو كنت حرفيا لف شريط فيديو؟ انا ذاهب لالتقاط آخرها 1 وأن ​​يعطيني 1 زائد 0 هو 1. إذا أظل اللف على القصة، وهذا سوف تعطيني 2 بالإضافة إلى هذه القيمة على التوالي، والذي هو 1. ولهذا +3. ثم انا ذاهب للحفاظ على اللف. عندما كنت أول اخماد عدد 3-- حتى 3 زائد 3 يعطيني 6. والآن، إذا كنت قد لف وحتى الفيديو حتى هذه النقطة، هذا كان جدا السؤال الأول سألت. عندما مرت 3، ما هو سيجما من 3؟ انها في الواقع 6، ومجموع كل هذه القطع من الورق. حتى إذا كان هذا يأخذ بعض الوقت ل التفاف حول عقلك، فلا بأس. ولكن النظر كان little-- ذلك كان متعمدا جدا لأنني مكدسة هذه الأرقام على رأس كل منهما الآخر. انها نوع من مثل وجود memory-- سجل في الوقت المناسب، مثل الغسيل في شريط فيديو، أستطيع أن الترجيع الواقع في. ونحن في طريقنا للعودة إلى هذا التشبيه في قليلا. ولكن أولا، اتضح أن هناك الكثير من المهوسون والناس مضحك، أعتقد في جوجل. أراد شخص حساس جدا جدا جيدة في غوغلينغ العقل الخروج لمجرد لحظة و مساعدتي البحث عن شيء ما؟ جدا، مفتاح منخفضة جدا. شخص أبدا الخروج من قبل، ربما. حسنا. نعم؟ هيا. تعال للأسفل. ما اسمك؟ SAM: سام. DAVID J. مالان: سام، هيا. وهذا هو نفس. تشرفت بمقابلتك. مرحبا. اقترب مني أكثر. لذلك كل ما عليك القيام به، إذا هل يمكن، وسام، وهنا جوجل. يمكنك البحث عن العودية المدى؟ لا تفسد. وlet's-- الآن نعم. OK انقر فوق ذلك. أفضل فوق ذلك. آه، والحصول عليها. لا؟ حسنا. لذلك دعونا نفعل زوجين آخرين. وليس ذلك بكثير ذات الصلة أكاديميا هنا، ولكن هل من أي وقت مضى البحث جوجل لالجناس الناقص؟ SAM: رقم DAVID J. مالان: OK. البحث عن الجناس الناقص بدلا من العودية. ماذا عن منحرف. طلبت البحث عن أي وقت مضى لمنحرف؟ الآن، هذا واحد من الصعب قليلا ل ولكن انظر everything's-- نأمل OK. انها مجرد أنت وأنا أستمتع هذا. حسنا. حتى النهاية، وهذا one's-- انها قليلا منحرف. الآن قيام لفة برميل. رائع. حسنا. شكرا جزيلا لسام. ها أنت ذا. شكر. فما يحدث في كل من هذه الأمثلة سخيفة؟ ذلك حقا، تحت غطاء محرك السيارة من الملايين جوجل من الأسطر من التعليمات البرمجية على ما يبدو هو قليل سخيفة IF الظروف التي هي في جوهرها فحص ما إذا كان المستخدم لديه كتبته في هذه العبارة، تفعل شيئا ربما أخذت كمية غير بديهي من الزمن لتنفيذ فقط ل تكون مسلية في هذا السبيل. ولكن هذا هو كل ما يغلي وصولا الى تحت غطاء محرك السيارة. ولكن، بطبيعة الحال، العودية أكثر من geekier مثال من بين تلك الحيل الخاصة. وبالتأكيد هناك آخرون الى هناك وكذلك أن لدينا ربما ولا حتى اكتشفت للتو بعد. حتى تأخذ نظرة، أو النظر الآن البرنامج التالي، وبالتأكيد انتزاع أي هذه في طريقك للخروج. انا ذاهب الى المضي قدما و فتح البرنامج الذي ذاهب الى محاولة لمبادلة قيمتين. ولكن قبل أن نذهب إلى هناك، دعونا نفعل ذلك. يمكننا الحصول على واحد أكثر المتطوعين، وأعتقد؟ هل ترغب في التطوع؟ لا؟ تأتي على ما يصل. تأتي على ما يصل. حسنا. حتى اسمك ما هو؟ لورين: لورين. DAVID J. مالان: لورين. تأتي على ما يصل، لورين. حتى لورين يجري تحدى هنا على النحو التالي. تشرفت بمقابلتك. حتى لورين له هنا أمام لها كوبين فارغة. ونحن لدينا بعض البرتقال عصير وبعض الحليب ونحن في طريقنا للذهاب قدما ونفعل ما يلي. نحن ذاهبون لمجرد ملء هذا. هناك عدد قليل من أوقية من الحليب أكثر من هنا ودعونا ملء القليل من عصير البرتقال أكثر من هنا. وأمام كل من هؤلاء الاعضاء الجمهور، مبادلة القيمتين من هذه الكؤوس. وضع عصير البرتقال في كوب حليب والحليب في كوب عصير برتقال. كيف يمكنك أن تفعل ذلك لو كنت في وكان منزل الوصول إلى إمدادات أخرى؟ لورين: وضعه في كوب آخر. DAVID J. مالان: OK. لذلك دعونا مؤقتة متغير، إذا ما سنفعله. والمضي قدما الآن وتنفيذ هذا الإجراء مبادلة نفسه. جيد جدا. لقد وضعنا OJ إلى مؤقتة متغير، الحليب في متغير OJ، والآن متغير مؤقت في متغير الحليب. حسنا. حتى جيد جدا حتى الآن. لذلك نرى أن يتحول out-- فكرت لمجرد لحظة. هنا، لمجرد المهوس عنه قليلا، وهذا سيكون رمز C المقابلة أن نفذنا فقط. كان لدينا اثنين من المدخلات، أ و ب، كل من ونحن سوف نقول فقط عن البساطة هي والباحث. وتلاحظ هنا، إذا كنت ترغب في مبادلة قيم متغيرين، أ و ب، نحن حقا في حاجة الى وسيط، ل متغير مؤقت، كوب مؤقت، إلى الذي صب إحدى القيم حتى يكون لدينا عنصر نائب لذلك. ولكن بعد ذلك رمز هو بالضبط كما لورين تنفيذها هنا. الآن، فقط للحصول على جنونا قليلا، وتبين التي يمكنك القيام بذلك دون متغير مؤقت. للقيام بذلك بشكل صحيح، على الرغم من أننا ذاهبون لدينا لخداع مع بعض الكيمياء. لدينا بعض أكواب إضافية هنا. وبالتالي فإن أقرب شيء أن يبدو مثل الحليب والماء perhaps-- أو الحليب وOJ-- هو ان لدينا بعض المياه، ولذا فإننا سوف ملء هذا واحد حتى مع عدد قليل من أوقية من الماء واضحة. وهذا ربما أكثر من اللازم. نعم. هذا هو بالتأكيد أكثر من اللازم. عقد على واحدة ثانية. والآن لدينا نفط، والتي، على ما أذكر من الطبقة المتوسطة كيمياء في المدرسة، نأمل أن لا تخلط مع الماء. ولكنه نوع من نوع من يبدو مثل الحليب وOJ. وحتى الآن، من دون استخدام متغير مؤقت، يمكنك مبادلة تلك القيمتين؟ حتى الزيوت يذهب الى كوب ماء، وغني عن الماء في كوب زيت. لورين: لا أكواب أخرى؟ DAVID J. مالان: لا الكؤوس الأخرى. ولدي لم يكن في الواقع اختبار هذا قبل هذا العام لذلك أنا لا أعرف إذا كان هذا سوف فعلا العمل كيميائيا. والتي ليس من المفترض أن يحدث. هل تعمل؟ حسنا. حتى يفصل؟ جيد. الآن وصلنا للحصول على الماء في كوب آخر. مركزات الكيمياء ذكاء يمكن ربما تفعل ذلك أفضل مني. لورين: في الماء في القاع. DAVID J. مالان: إن water-- التي كانت ما هو أساسي في المرة الأخيرة فعلنا هذا. عليك أن تفعل ذلك في حق النظام. نعم. وهذا موافق. حتى الآن لدينا كوبين من النفط. حسنا. وهذا موافق. ولكن كيميائيا إذا كان هذا العمل من I-- لورين: هذا هو الماء. DAVID J. مالان: هذا هو الغالب المياه. حسنا. لكن هذا لا يزال نفس الكأس كما كان من قبل. لذلك صب it-- تجربته هناك. حسنا. هذا هو الاستخدام الجيد للوقت فئة اليوم. حسنا. وحتى الآن we-- لطيفة. نوعا ما. حسنا. حتى جيد جدا. شكرا لك لورين. عمل جيد جدا. وذلك فقط لتفجير عقولكم، ولعل هذا هو شيء للعب مع إذا كنت ترغب في ID CS50، يمكنك، في الواقع، مبادلة اثنين من المتغيرات دون استخدام صحيحا مؤقت. وهذا هو رمز C المقابلة. وإذا كنت تذكر من الماضي الأربعاء، قدمنا، إذا لفترة وجيزة، بعض المشغلين الجدد في C. وهل أي شخص يتذكر ما الجزرة قليلا الرمز هو أن الثلاثي الصغير رمز من لوحة المفاتيح يمثل؟ ما المختصة بالبت المشغل؟ الحضور: EXOR. DAVID J. مالان: EXOR. حصري أو. حتى إذا كنت تريد، فقط من أجل المتعة في المنزل، لإعطاء وب اثنين تعسفيا قيم مثل أي eight-- وI أن تختار قيمة ثمانية بت. إذا كنت تفعل هذا مع 32 بت، عليك بسرعة الحصول على بالملل. ولكن مجرد إعطاء ثمانية بت قيمة هذا أيا كان، واحد أو اثنين، وتعطي ب قيمة مماثلة. ثم باستخدام التعريف من XOR من يوم الأربعاء الماضي، تطبيق ذلك شيئا فشيئا، كل من هذه البتات الثمانية في كل من أ و ب، ثم تفعل ذلك بالضبط في هذه التعليمات البرمجية. وانها ليست صحيحة ما ترى هنا على الشاشة. يغلي في الواقع أسفل لثلاث عمليات XOR وبطريقة أو بأخرى سحرية و ب وتبادل المواقف دون أن تفقد أي معلومات. لذلك خدعة النفط والمياه هي أقرب تجسيد العالم الحقيقي كنت أفكر فيه لتقليد ذلك. لكن من الأسهل بالتأكيد ل استخدام متغير مؤقت، كما في هذه الحالة هنا. وهذا أيضا هو يقول فرصة، أيضا، وهذا النوع من التحسين الجزئي، كعالم كمبيوتر أن أقول، في حين نوع من المرح التباهي كيف فعلت ذلك دون مثل مبادلة مع متغير إضافي، انها ليست كل ما مقنعة. لأن لانقاذ 32 بت، كما في حالة وجود كثافة العمليات الفعلية، ليس كل ما مقنعة على نظام حيث كنت قد تستخدم عشرات ميغابايت أو أكثر حتى هذه الذاكرة في هذه الأيام. في واقع الأمر، وعندما نحصل لمجموعة المشكلة لاحق وتقوم بتنفيذ الإملائي المدقق وسوف الطعن في القيام بذلك مع هذا RAM أقل قدر واقل من الوقت وقت ممكن على computer-- كنت لا تزال لدينا أسبوع لتنفيذ it-- عليك have-- عليك أن تكون تحدى للحد من تلك الموارد. وهذا هو حقا فقط بمناسبه هذا الفصل الدراسي حيث سيتم تشجيع لك أن يحلق قبالة حتى أفضل أداء تكاليف خلاف ذلك. حتى what-- كيف يمكننا نرى هذا في الرمز الفعلي؟ اسمحوا لي أن المضي قدما الآن وفتح مثالا أن تعمد يسمى لا مبادلة لأنه لا في الواقع مبادلة المتغيرات كما كنت في الواقع قد تتوقع. لذلك دعونا نلقي نظرة. وفيما يلي البرنامج الذي لا يوجد لديه CS50 مكتبة مستمرة، مجرد معيار I / O. الآن لدينا نموذج أولي للمبادلة حتى أعلى مما فقط يعني انها حصلت على أن يحدد في وقت لاحق. وهنا الرئيسية. تكليفي بشكل تعسفي x و y، على التوالي، والقيم واحد واثنين فقط لأنهم صغار وسهلة للتفكير. وبعد ذلك يكون مجرد حفنة من printfs حيث لدي الاختيار التعقل. x هو 1 و y هو 2 من المفترض ماذا سيقول هؤلاء printfs. لذلك لا السحر حتى الآن. ثم انا ذاهب الى المطالبة مع طباعة صفر، مبادلة نقطة نقطة نقطة. انا ذاهب الى استدعاء مبادلة وظيفة، ويمر في x و y. ودعونا نفترض الآن أن ويتم تنفيذ مبادلة بالضبط كما كان منذ لحظة مع متغير مؤقت. وهكذا أزعم بجرأة، تبادلت. x هو الآن هذا و y هو الآن ذلك. لكن الملف، بطبيعة الحال، ويسمى لا تبديل. لذلك دعونا نرى ما يحدث في الواقع. إذا كنت تجميع أي مقايضة ثم القيام ./noswap، س 1، ص هو 2. مبادلة مبادلة. س 1، ص هو 2. لذلك يبدو فعلا أن تكون معيبة حتى على الرغم من swap-- دعونا انتقل لأسفل now-- وينفذ بالضبط فقا ل كود اقترحت قبل لحظة. لذلك نحن لن تحصل على الهوى مع الاشياء XOR في الوقت الراهن. هذا، أيضا، يجب أن تعمل فقط كما هو الحال مع الحليب وOJ، ولكن لا يبدو أن العمل. لذلك دعونا نفعل ذلك مرة أخرى. ربما أنا فقط لم يكن يعمل بشكل صحيح. لذلك دعونا تشغيل لا مبادلة مرة أخرى. ربما I-- لا. حتى انها مجرد لا يعمل. لذلك دعونا نفعل شيك التعقل قليلا. اسمحوا لي أن المضي قدما هنا في مبادلة وإضافة فقط، انتظر لحظة، من هو٪ ط / ن ودعونا المكونات في قيمة. لأنني أريد حقا لمعرفة ما يجري. والواقع، وهذا هو تقنية التصحيح التي قد تستخدم في ساعات العمل أو في المنزل بالفعل، أقرب إلى النصف الأول من دان فيديو ارمينداريز في PSET3 حيث قدمنا ​​الطباعة مواطنه كما تقنية الموصى بها، على الأقل في الحالات البسيطة. اسمحوا لي أن المضي قدما وجعل تشغيل لا مبادلة مرة أخرى، ./noswap. مثيرة للاهتمام. لذلك تلاحظ ما يبدو أن يكون صحيحا. س هو 1، ص هو 2، ولكن هو 2 عندما ب هو 1. حتى هذين بطريقة ما حصلت على تبادلت لكن x و y لا يحصلون على تبديل. لكي نكون واضحين، ما يحدث هو، هنا لا بد لي x و y وتلك هي المتغيرات المحلية في نطاق الرئيسي، وأنا تمر في x و y لمبادلة. الآن، مبادلة، بوصفها وظيفة منفصلة، غير تتردد في الاتصال حججها أو معلمات أي شيء لها أنه يريد. فو أو شريط أو x أو Y أو أو ب. فقط لنوضح انهم لم تكن متطابقة إلى x و y في حد ذاته، لقد قال أ و ب. ولكن يمكننا أن نسميها أي شيء نريده. وهكذا يبدو يتم تمرير مبادلة x-- AKA a-- وانها يتم تمريرها y-- AKA ب. بطريقة أو بأخرى هذه الخطوط الثلاثة مبادلة تلك القيم بالضبط كما فعل لورين مع الحليب وOJ. ولكن عندما وطباعة القيم، أ و ب في الواقع مبادلة لكن x و ذ ديك أي تغيير عليها. أذكر أن x و y هنا. حتى نتمكن من معرفة ذلك عن طريق أسلوب آخر كذلك. وهذا هو أيضا تقنية جزءا لا يتجزأ من المشكلة وضع ثلاثة. دعونا نمضي قدما ونفعل ذلك في CS50 ID إذا لم تقم بذلك بالفعل. عن يمين نحن الجانبية يكون هذا التبويب المصحح. وإذا قمت بفتح هذا الأمر، هناك بعض المعلومات الغامضة هذا ما ألقيت عليك في البداية. ولكن دعونا ندف هذا بصرف النظر بسرعة حقيقية. حتى واحد، ترى المتغيرات المحلية. تبين أن بناء إلى IDE CS50، و الكثير من بيئات البرمجة أكثر عموما، هو المصحح. ومن الأدوات التي تسمح لك أن ترى بالعين المجردة ما يجري داخل برنامجك دون الحاجة إلى اللجوء إلى إضافة printfs وتجميع وتشغيل وإضافة printf وتجميع و تشغيل، والتي بالفعل، في الساعات المكتبية أو المنزل، وربما الحصول على مملة جدا. حتى هنا، في لحظة فقط، ونحن الذهاب إلى أن نرى في الوقت الحقيقي قيم المتغيرات المحلية الخاصة بنا. ونحن في طريقنا أيضا أن تكون قادرة على ضبط ما يسمى نقاط التوقف التي هي الفرص المتاحة في برنامجي إلى وقفة التنفيذ في خط معين من التعليمات البرمجية أنني غريبة عن. الصحيح؟ هذه البرامج تعمل في جزء من الثانية. انها نوع من لطيفة بالنسبة لنا البشر أبطأ لتكون قادرة على التوقف، ونتوقف لحظة، انظر ما يدور حولها خط معين من التعليمات البرمجية دون حراثة برنامج وذلك من خلال الانتهاء تماما. لذلك نقاط التوقف سوف تسمح لنا ل كسر وقفة عند نقطة معينة. مكدس الاستدعاءات هو وسيلة يتوهم من قائلا ما هي وظائف حاليا يطلق عليها في الوقت الراهن. دائما دعا الرئيسية أولا. ولكن إذا دعا الرئيسية ل وظيفة تسمى مقايضة، نحن ذاهبون فعلا لرؤية هذا برج من الوظائف التي كانت دعا بترتيب زمني عكسي. لذلك دعونا نرى ذلك. انا ذاهب للتصغير. انا ذاهب الى العودة الى قانون بلدي. وفقط لأنني أريد أن تكون متحذلق هنا، انا ذاهب الى المضي قدما وانقر فقط على يسار السطر الخامس. وهذا يخلق نقطة حمراء. وتلاحظ على الجانب الأيمن أن المصحح يعرف، مهلا، قلت للتو نقطة توقف في خط noswap.c خمسة، على وجه التحديد في هذا الخط من التعليمات البرمجية. لذلك المصحح يعرف بأنني وقد طلبت في المرة القادمة أركض بلدي هو برنامج وقفة إعدام هناك بدلا من مجرد تشغيل كل شيء بسرعة فائقة. أنا حتى الآن ذاهب فوق التصحيح زر في أعلى جدا من IDE وهذا ما تنوي القيام به ليلي. انها سوف تفتح في البداية إلى حد ما مخيفة أبحث محطة الثانية window-- تصحيح الأخطاء عن بعد من استضافة مثل وsuch-- وسوف نعود إلى ما كل ذلك يعني قبل فترة طويلة. ولكن ما هو مهم الآن غير أن ذلك النقطة الحمراء وضرب، المصحح له عمدا توقف execution-- ليس على هذا الخط في حد ذاته ولكن في الأول سطر من التعليمات البرمجية الفعلي في تلك الوظيفة. وهذا هو السبب في خط سبعة هو أبرز الآن باللون الأصفر. والآن دعونا نلقي نظرة في الجهة اليمنى. يبدو افتراضيا، جيد بما فيه الكفاية، والعاشر لديه ما قيمة؟ 0. و y لديه ما قيمة؟ الصفر. وهذا هو المتوقع بمعنى أن x و y-- أن line-- الأصفر لديها لم ينفذ حتى الآن. لذلك ينبغي أن س ليس لديها قيمة 1. قد تكون لديها أي قيمة أخرى، ما يسمى قيمة القمامة. وصلنا محظوظ في أنه صفر في هذه المرحلة، أساسا. وحتى الآن لا يوجد سوى عدد قليل أزرار نحن بحاجة لرعاية حول متى التصحيح في هذا السبيل. لاحظ هنا، لدينا زر التشغيل. واذا لعبنا أو ضرب استئناف، وهذا فقط الذهاب لتشغيل من خلال ما تبقى من البرنامج أو حتى يضرب نقطة أخرى. ولكني لم يحدد أي دولة أخرى نقاط التوقف حتى انها مجرد الذهاب لتشغيل خلال نهاية. هذا النوع من الهزائم لل الغرض من بدس حولها. بدلا من ذلك، ما يهمني هذه الرموز إلى اليمين. وإذا كنت تحوم فوق لهم، كما يجب عليك أيضا، سترى القليل نصائح أداة tips--. هذا هو واحد خطوة أكثر. الآن هذا لا يعني تخطي السطر التالي من التعليمات البرمجية. وهذا يعني مجرد تنفيذه و الانتقال الى المرحلة التالية، الانتقال الى المرحلة التالية، الانتقال الى المرحلة التالية. وبعبارة أخرى، عبر هذا الزر، يمكنني السير من خلال وجهتي قانون واحد في وقت واحد. سطرا سطرا، حرفيا. الآن، على يمين ذلك، هناك واحد آخر أننا سوف نرى في مجرد لحظة. وهذا هو ما يسمى خطوة الى رمز هذا الذهاب إلى اسمحوا لي الغوص إلى وظيفة أخرى. ولكن دعونا نرى هذا في مجرد لحظة. لذلك أنا ذاهب للنقر خطوة أكثر. والآن لاحظت، وأنا انقر هذا الزر في أعلى اليمين، تبقي عينيك تقريبا تحت المحلية المتغيرات ونرى ما سيحدث إلى x. x هو الآن 1 لأن نفذت الخط الأصفر الآن ولقد انتقلت الى خط 8. وفقط في ذ حظة يجب أن نأمل أن تصبح 2. الآن، لا شيء للاهتمام يحدث قليلا. كل هذا هو printf. وتلاحظ، في بلدي المحطة الثانوية نافذة، وأرى إخراج مواطنه الطباعة. والآن لا بد لي من تقديم القرار بأنه مبرمج. يمكنني تخطي هذا الخط من رمز، تنفيذ ذلك، ولكن لا الحصول غريبة عن ما هو في الداخل. أو أنا يمكن أن خطوة الواقع فيه ويذهب داخل جسم نفسها. لذلك دعونا نفعل هذا الأخير. اسمحوا لي أن المضي قدما وانقر لا تخطي ولكن خطوة الى. إشعار، فجأة التغييرات نافذة لتسليط الضوء على أول سطر من التعليمات البرمجية في مبادلة. وهذا هو الخط 21. والآن، ما هو نوع من غير تقليدي هو أنه، إذا نظرتم إلى هنا، كما هو متوقع، فاصلة ب هي 1 و 2 على التوالي. لماذا هو مؤقت 32،767؟ وإذ تشير إلى أن درجة الحرارة، يشبه إلى حد كبير الكأس الفارغ قبل لحظة، أعلن هنا على خط 21. لماذا 32،000- أعني، لماذا هو فقط بعض القيمة غريبة؟ نعم؟ الحضور: ليست تهيئة و. DAVID J. مالان: انها لم يتم تهيئة. حتى جهاز الكمبيوتر الخاص بنا دائما يوجد الذاكرة الفعلية. كان لديه دائما RAM البدني. وهناك دائما صفر ل واحد من هناك، أليس كذلك؟ لأننا باستخدام لدينا الكمبيوتر طوال اليوم، كنت تستخدم IDE CS50 أو خوادم طوال اليوم. بحيث RAM إما لديه بعض الأصفار أو بعض واحد أو بعض الآحاد والأصفار و. بغض النظر عن ما إذا كان أو لا كنت تستخدم لهم. لا يمكنك فقط أن يكون فارغا الأماكن التي تريد بت. انهم إما الآحاد والأصفار و. هكذا اتضح أن درجة الحرارة، ل ليس لدينا تهيئته بعد، لدينا هذه البتات 32 ولانهم لم تم تهيئة إلى أي القيم المعروفة. لذلك مهما كانت الأكثر المستخدمة مؤخرا for-- تلك 32 bits-- نحن مجرد رؤية القطع الأثرية من بعض استخدام السابق من معين تلك 32 بت. وسرعان ما فوق تخطي الرغم من ذلك، تفو، درجة الحرارة هو الذهاب الى الحصول على قيمة 1. وإذا كنت تفعل ذلك مرة أخرى، هو ستكون نظرا للقيمة 2 وبعد ذلك ب هو الذهاب الى أن تعطى قيمة 1. وحتى ما هو جميل الآن في هذه النقطة في القصة غير أن المصحح هو تبين لي، سوبر ببطء وتيرة بلدي، ما حالة المبادلة. ولكن لاحظ في الجزء العلوي هنا، لاحظ أن مكدس الاستدعاءات في الواقع فقد اثنين من طبقات إليها. الآن واحد وهذا ما يسلط الضوء عليها مبادلة، إذا كنت اضغط على الصفحة الرئيسية بدلا من ذلك، لاحظ كيف تتغير المتغيرات المحلية لأن المطور يمكن هوب فقط حول والخوض في أي مجال آخر. حتى على الرغم من أننا نفعل كل هذا العمل ومبادلة أ و ب صحيح، إذا ذهبت ذهابا وإيابا بين مبادلة حيث هو 2 و ب 1 و هو الرئيسي، تمت الرئيسية تأثرت في كل شيء؟ لا. فما هي الوجبات الجاهزة هنا؟ حسنا، اتضح أنه في أي وقت استدعاء دالة مثل مقايضة، وأنت تمر عليه الحجج، ما كنت عابرة إلى وظيفة مبادلة في هذه الحالة هو نسخة تلك الحجج. لذلك إذا كان x و y لكل منهما على التوالي 32 بت، ما مبادله هو الحصول على غير محلية اثنين من جديد المتغيرات، أو المجادلات، دعا وb-- ولكن هذه هي التعسفي names-- لكن النمط من الأصفار ومنها داخل أ و ب هي اصطف ليكون مطابقا لx و y لكنها ليست هي نفس الشيء كما x و y. فهو كما لو أن لديه منزل على قطعة من الورقة رقم 1 و 2 x و y، ثم عندما الأيدي التي قطعة من الورق لمبادلة، مبادلة يحصل بسرعة جدا القلم الخاص بها، ويكتب أسفل 1 و 2 على ورقة خاصة به من الورق، ظهر اليدين س ص الأصلي إلى الرئيسية ويفعل ذلك بمفرده الشيء مع أ و ب. وهذا هو الآن السوبر مهم ل هذا له آثار غير بديهي لكتابة الرمز الصحيح في الواقع لأنه يبدو أننا لا يمكن مبادلة متغيرين. كنت قد كتبت وظيفة مبادلة الصحيحة. لقد تنفيذه مع لورين كما وظيفة مبادلة صحيحة في الواقع، ولكن يبدو أن لا شيء من ذلك المسائل إذا كنت لا تستطيع في الواقع مبادلة قيمتين بشكل دائم. لذلك نحن بحاجة الى وسيلة أخرى للحصول فعلا في ذلك، ونحن بحاجة إلى أن تكون قادرة على حل هذه المشكلة في الواقع. ويتحول out-- وسنأتي العودة إلى هذه الصورة خاصة قبل long-- هذا هو أحد السبل التي قد رسم ذاكرة الكمبيوتر الخاص بك. انها مجرد مستطيل. هل يمكن استدراجه أي عدد من الطرق ولكنها ل مريحة للرسم على أنها المستطيل للأسباب التالية. ونحن في طريقنا لبدء اليوم وما بعده الحديث عن ما يسمى المكدس. والمكدس هو مجرد قطعة من RAM-- قطعة من memory-- الذي يعمل لدى وصول لانهم عندما دعا. وهكذا اتضح أنه في أسفل جدا من هذا المكدس حيث كل المتغيرات المحلية الرئيسية ل وORG C و V هيكلي وجميع الاشياء التي في سبيلنا للذهاب افتراضيا. وإذا الرئيسية يدعو بعض الوظائف الأخرى مثل مقايضة، كذلك، مبادله هو الذهاب الى الحصول على آخر طبقة من ذاكرة تصل فوقه. وذلك فقط لإعطائك سطحية سريعة صورة لهذا، إذا ذهبت على here-- واسمحوا لي أن يعكس هذا على النفقات العامة كما well-- حقيقة ما لدي، إذا كنا نهتم فقط أسفل هذه الصورة في الوقت الحالي، غير أنني عندما تشغيل برنامج ويحصل يسمى الرئيسي، وتعطى الرئيسية قطعة من RAM في جهاز الكمبيوتر الخاص بي وهذا هو في الجزء السفلي من هذا ما يسمى المكدس. وانا ذاهب لاستدراجه كما عمد مربع. لذلك فمن مثل 32 بت أو أربعة بايت. وإذا كان هذا الوظيفة الرئيسية لديها متغير يسمى X بقيمة 1 وأنه يحتوي على متغير يسمى ذ مع قيمة 2، هذا مثل أخذ هذه القطعة من الذاكرة التي وقد أعطيت الرئيسية من قبل التشغيل نظام وتقسيمه حتى أن أول متغير محلي يذهب هنا، ثانية واحدة يذهب هنا، وهذا كل شيء. عندما يدعو الرئيسية مقايضة، مبادله يحصل حصتها الخاصة من الذاكرة أننا سوف يوجه مثل هذا من نظام التشغيل، وانها ستكون لدينا ل المتغيرات المحلية الخاصة مقرها في وقت سابق من تنفيذنا مع المتغيرات المحلية وب أن البداية الحصول على قيم 1 و 2. ولكن بعد ذلك، في أقرب وقت رمز مبادله ينفذ، ولورين مقايضة الواقع OJ والحليب، ما الذي يحدث؟ حسنا، هذا 2 وتصبح 1، وهذا 1 أصبح 2، وبالمناسبة، هناك متغير درجة الحرارة وهذا ما يجري يستخدم هذا الوقت كله في نهاية المطاف ذهب بعيدا. ولكن لا يهم كم العمل الذي تقوم به في هذا الخط of-- في هذه المساحة الذاكرة، x و y هي لم يمسها تماما. لذلك نحن بحاجة إلى طريقة إعطاء مبادلة وظائف مثل ذلك الوصول السري، اذا صح التعبير، ل وظائف like-- إلى الذاكرة مثل x و y. لذلك دعونا نلقي نظرة على مثال ذلك يساعد لنرى بالضبط ما كان يحدث هذا طوال الوقت. انا ذاهب الى المضي قدما وفتح قارن صفر. وانا ذاهب الى إغلاق مصحح لدينا، انا ذاهب لإغلاق هذه الرسالة مخيفة أبحث ويقول فقط، انتظر لحظة، كنت في تصحيح الأخطاء الأوسط. أنا ذاهب لإخفاء هذا التبويب هنا فقط للعودة إلى البساطة. لذلك لا داعي للقلق إذا قتل GDB. هذا يعني فقط أن البرنامج لديه تم الإقلاع عن التدخين، عمدا في هذه الحالة، من قبلي. وقارن الآن صفر يفعل ذلك. أنا باستخدام CS50 المكتبة في معيار I / O. لقد حصلت على وظيفة الرئيسية التي لأول مرة يقول، ويقول شيئا، ويحصل على السلسلة. ثم يقول مرة أخرى و يحصل سلسلة أخرى. وتلاحظ أن هذه السلسلتين وتسمى الصورة ور، على التوالي. والآن هذا البرنامج، قارن الصفر، والغرض منه في الحياة، أنه من المفترض أن تقول لي، أنا لم اكتب نفس الشيء؟ وحتى وأنا ذاهب إلى أسبوع واحد. أنا باستخدام بلدي مشغل المساواة المساواة وهو عامل الجودة. لا عامل التعيين، المشغل المساواة. أنا فقط مقارنة الصورة ور. لذلك دعونا فعلا المضي قدما ونفعل ذلك. وانا ذاهب الى المضي قدما وجعل قارن صفر. انا ذاهب الى القيام ./comparezero. وانا ذاهب للذهاب وقبل أن أقول شيئا مثل، دعونا نفعل أمي في صغيرة وماذا عن أمي في الأحرف الكبيرة. وبالطبع أنا اكتب أشياء مختلفة. حسنا. هذا هو المتوقع. دعونا تشغيله مرة أخرى. في كل مرة تفعل صغيرة، صغيرة. التي تبدو فائقة متطابقة بالنسبة لي. أدخل. حسنا. ربما انها مجرد غريب ل انها لا تروق لي النحوي. لذلك دعونا نفعل عاصمة MOM، العاصمة MOM، متطابقة. أشياء مختلفة. ذلك هو السبب في ذلك؟ حسنا، ما الذي يحدث في الواقع تحت غطاء محرك السيارة هنا؟ لذلك دعونا نذهب إلى أكثر من هنا لمجرد لحظة والنظر في ما GetString هو القيام بالفعل. عند استدعاء GetString، هذا هو وظيفة نحن كتب أنفسنا وأنها تحصل على نحو ما تسلسل الأحرف من المستخدم. ودعونا نفترض أن أول الوقت أدعو GetString، أن يعطيني قطعة من الذاكرة التي تبدو مثل هذا. وإذا كنت كتبته في كل صغيرة م-س-m-- وما يجري بعد ذلك؟ مجرد الاختيار العقل سريع. صفر مائل. نعلم أن. وأذكر أننا لعبنا حولها مع اسم Zamila ل وحفنة من الأسماء الأخرى عندما كان روب هنا بحثا في ما يجري داخل الذاكرة. بحيث القصة بالضبط نفس. هذا هو ما GetString تعود لي. الآن، قانون بلدي لحظة قبل تخزينها قيمة الإرجاع GetString في متغير يسمى الصورة. ثم للمرة الثانية دعوت عليه، ذلك تخزينها في متغير يسمى ر. حتى إذا ذهبت أكثر من هنا، ولست بحاجة رسم هذا variable-- المحلية وأنا عموما الذهاب الى رسم السلسلة ك just-- سنقوم نسميها s-- كما يذكر مربع هنا. والآن، somehow-- كيف أمي انتقل داخل هذه الصورة متغير؟ حسنا، نحن بحاجة إلى العودة إلى المبادئ الأولى هنا. ما GetString العودة فعلا؟ هكذا اتضح أن M-O-M مائل الصفر، وأي عدد سلاسل أخرى في الذاكرة مثل Zamila وروب أو اندي أو أي أشخاص آخرين، بالطبع لدينا في RAM الكمبيوتر أو الذاكرة. وRAM لديه like-- لديك أزعج من ذاكرة الوصول العشوائي، واثنين من العربات من ذاكرة الوصول العشوائي، أو مليار أو ملياري بايت، أو ربما أكثر من ذلك في هذه الأيام. لذلك دعونا نفترض، لأغراض اليوم، أنه لا يهم كيف يمكننا عددهم لهم، ولكن يمكننا أن عددهم كل تلك مليار أو مليارين أو أربعة مليار بايت. ودعنا نقول فقط أن تعسفا هذا هو لدغة الأولى، لدغة الثانية، الثالث والرابع. أنا تعمدت عدم استخدام الصفر ل اليوم ولكننا سوف نعود لذلك. لذلك وبعبارة أخرى، إذا كان هذا هو أول مرة أنا باستخدام البرنامج، أنا مجرد الحصول على الحظ وأول لدغة هي في مكان واحد ثم اثنين ثم ثلاثة من أربعة. وإذا ظللت الرسم رقم صندوق ملياري سيكون الطريق أكثر من هنا. فما رأيك، ثم، GetString يعود في الواقع؟ انها ليست عودة M-O-M مائل صفر في حد ذاته لأن ذلك بوضوح لن تجد لها مكانا في المربع الذي رسمتها. فما آخر قد GetString الواقع سيعود كل هذه الأسابيع؟ الجواب على مجلس هنا في مكان ما. لا يمكنك تناسب M-O-M مائل الصفر، وذلك ما قد يكون له معنى بدلا من ذلك؟ إذا كان لديك لتكون فائقة ذكي، وضع على ما يسمى قبعة الهندسة، ما يمكن أن تعود؟ ما هو أقل قدر من المعلومات هل يمكن العودة التي ما زالت تمكنك من العثور M-O-M في الذاكرة؟ نعم؟ الحضور: واحد. DAVID J. مالان: واحد. والسبب واحد؟ الحضور: لأنه سيقول لكم أين تذهب (غير مسموع). DAVID J. مالان: بالضبط. أنا مجرد الذهاب إلى إرجاع عنوان من السلسلة التي اقتنيت. العنوان في هذا القضية هي مكان واحد. فما حقا يتم تخزينها في s-- وكل متغير سلسلة بالتالي far-- لقد كان مجرد عنوان هذه السلسلة. وفي الوقت نفسه، إذا أسميه GetString مرة ثانية وأنا اكتب في حرفيا نفس thing-- M-O-M مع lowercase-- M-O-M ومائل آخر الصفر، والآن ربما برنامجي ل تم تشغيل لبعض الوقت ولذلك ربما يكون هذا هو 10، وهذا هو المكان 11، وهذا هو 12، هذا هو 13. أجهزة الكمبيوتر باستخدام بعض الآخر الذاكرة لأي سبب من الأسباب. ما يجري الآن في بلدي الثاني متغير في برنامجي ر؟ 10. بالضبط. وذلك عندما ننظر إلى شفرة المصدر من هذا البرنامج أين أنا مجرد محاولة لمقارنة قيمتين، هو قدم المساواة مع الرجل على قدم المساواة إلى t، ما هو الجواب الإنسان واضحة؟ فقط لا ل1 لا يساوي 10. وحتى هنا تكمن ل فرصة لنا حقا للذهاب لتوه إلى، مرة أخرى، لأول مرة المبادئ والتفكير، حسنا، ما يجري تحت غطاء محرك السيارة؟ كنا نتحدث عن بت وبايت وذاكرة، لكنه في الواقع مفيدة لفهم لأن عند استدعاء GetString، على الرغم من أننا نفكر من هو العودة M-O-M أو سلسلة أمي أو اندي أو Zamila أو شابه ذلك، من الناحية التقنية انها مجرد اعادة عنوان ذلك جزء من الذاكرة. ولكن هذا موافق. لأن كيف أعرف حيث تنتهي السلسلة؟ إذا أنا أعطيت فقط البداية؟ حسنا، مائل الصفر، أليس كذلك؟ فقط في الزمن الخطي يمكنني طباعة مع مواطنه الطباعة M-O-M. وحالما أرى مائل الصفر، لا يهمني أين بدأت، أعرف مسبقا ضمنيا حيث كنت في حاجة لهذه الغاية. وهكذا يصادف اليوم beginning-- و اسمحوا لي أن تفعل هذا بشكل كبير لأننا ذهبت من خلال الكثير من المتاعب ل الحصول على هذه هنا تدريب wheels-- حتى اليوم عجلات التدريب تبدأ للخروج من الملعب ونحن تكشف في least-- [تصفيق] كان ذلك تستحق الزيارة إلى الهدف هذا الصباح، نعم؟ حتى now-- هناك، فإنه يتحول بها، لا يوجد شيء مثل السلسلة. سلسلة غير موجود. انها مرادف التي كانت لدينا داخل مكتبة CS50. من الآن فصاعدا، ونحن في طريقنا للبدء الدعوة الصورة ور لم سلاسل لكن شار النجوم. والنجم شار سنقوم ندف بصرف النظر قبل فترة طويلة. ولكن هذا هو القول، أنه حتى لو واصلنا باستخدام GetString الآن، من الناحية الفنية ينبغي لي يكون قوله نجمة شار ونجم شار. واتضح ما هذا النجم يجري للدلالة على شيء دعا مؤشر أو عنوان. في واقع الأمر، دعابة لماذا ينتظرنا هذا هو 20 مقطع الثاني من وجهة نظرنا صديق نيك Parlante في جامعة ستانفورد الذين، منذ بعض الوقت، وقضاء مبلغ سخيف من الزمن، أفضل ما استطيع ان اقول له في المطبخ أو قبو منزله، جعل claymation أعرض على العالم حرف اسمه بينكي معه ونحن يتم عرضه في المرة القادمة لمؤشرات. حتى هنا هو معاينة ما يأتي. [تشغيل الفيديو] -Hey، بينكي. استيقظ. حان الوقت لمؤشر المرح. -ما هذا؟ تعرف على مؤشرات؟ أوه، جودي. [END قراءة] DAVID J. مالان: وعلى تلك المذكرة، سوف نرى لك يوم الاربعاء. حسنا. من هو الرقص؟ هيا. من هو الرقص؟ تريد مني للحصول على انها بدأت؟ سأحضر بدأت. Woooo! لورين: يتوهم الحلو موسى.