[عزف الموسيقى] J. DAVID مالان: حسنا. هذا هو CS50، وهذا هي بداية أسبوعين. لذلك دعونا نبدأ اليوم مع خلل. الشوائب، بطبيعة الحال، هو خطأ في أحد البرامج، وستحصل جدا مألوفة مع هذا المفهوم إذا كنت قد برمجت أبدا قبل. pset0 والآن pset1. ولكن دعونا النظر في شيء قليلا بسيطة في البداية. هذا البرنامج هنا بأنني رمى معا مقدما، وأزعم أن هذا يجب طباعة 10 النجوم على الشاشة باستخدام printf، لكنه على ما يبدو عربات التي تجرها الدواب في بعض الطريق. وبالنظر إلى أن المواصفات التي أنه يجب طباعة 10 النجوم، ولكن لم يحدث ذلك على ما يبدو، ما هل المطالبة هي علة؟ نعم؟ حتى انها لمن قبل خطأ واحد، وماذا يعني ذلك؟ موافق. ممتازة. لذلك قمنا بتحديد تبدأ قيمة صفر لط، ولقد تحديد قيمة ن 10، ولكننا قد استخدمت أقل من أو يساوي. والسبب أن هذا هو اثنين أحرف وليس رمز واحد فقط، مثل في كتاب الرياضيات، هو ان لم يكن لديك وسيلة للتعبير عن أي ما يعادل حرف واحد. وهذا يعني أقل من، ولكن إذا كنت تبدأ العد من الصفر، ولكن كنت تعول على طول الطريق من خلال ويساوي 10، كنت بالطبع سوف عد 11 أشياء في المجموع. وحتى وأنت تسير لطباعة 11 النجوم. وذلك ما قد يكون إصلاح هذا؟ نعم؟ حتى مجرد ضبط أقل من أو يساوي أقل من أن يكون مجرد، وهناك، أنا أطالب، وربما حل آخر أيضا. آخر ما يمكن أن تفعله؟ نعم؟ حتى يبدأ يعادل إلى 1، و مغادرة أقل من أو يساوي. وبصراحة فانني ازعم أنه لإنسان نموذجي، وربما هذا هو أكثر وضوحا. بدء العد في 1 و العد حتى إلى 10. تفعل أساسا ما تقصد. ولكن الواقع هو في البرمجة، كما رأينا، علماء الكمبيوتر والمبرمجين عموما لم يبدأ العد من الصفر. وحتى هذا شيء طيب مرة كنت تعتاد على ذلك. سوف حالتك عموما يكون شيء من هذا القبيل أقل من. بكل بساطة منطقي الخطأ الذي نستطيع الآن إصلاح وإعادة ترجمة في نهاية المطاف هذا وتحصل فقط 10. حسنا ماذا عن هذا الخطأ هنا؟ هنا، مرة أخرى، أزعم أن لدي الهدف من طباعة 10 stars-- واحد في كل سطر هذا الوقت، ولكن لم يحدث ذلك. قبل أن نقترح ما الإصلاح هو، ماذا يفعل هذا طباعة بصريا إذا كان لي أن تجميع وتشغيل هذا البرنامج رأيك؟ نعم؟ نجوم. لذلك كل النجوم على نفس الخط هو ما سمعت، ثم حرف سطر جديد. لذلك دعونا نحاول ذلك. لذا تأكد عربات التي تجرها الدواب-1، أدخل، وأنا أرى الأمر رنة التي تحدثنا عنها في المرة السابقة. ./buggy-1، وبالفعل أرى كل النجوم 10 على نفس الخط على الرغم من أن أزعم في مواصفات بلدي مجرد تعليق على قمة التعليمات البرمجية التي كنت أنوي القيام به في واحد الخط. ولكن هذا يبدو صحيحا. الآن خط 15 يبدو أنا طباعة نجمة، ثم خط 16 يبدو وكأنني الطباعة حرف سطر جديد، وانهم على حد سواء بادئة بذلك أنا داخل الحلقة بشكل واضح. لذلك لا ينبغي لي أن تفعل نجمة، جديدة خط، نجمة، خط جديد، نجمة، خط جديد؟ نعم؟ نعم، على عكس اللغات مثل بيثون، إذا كنت على دراية، المسافة البادئة لا يهم إلى الكمبيوتر. يهم فقط على الإنسان. حتى خطوط بينما هنا لقد اخترع 15 و16-- أن تبدو جميلة، لكن الكمبيوتر لا يهتم. الكمبيوتر يهتم وجود في الواقع الأقواس المعقوفة حول هذه الأسطر من التعليمات البرمجية. بحيث انها clear-- مثلما هو الحال في Scratch-- أن هذين الخطين من التعليمات البرمجية يجب أن يعدم. مثل واحد من تلك الأصفر خدش لغز قطع مرارا وتكرارا وتكرارا. وحتى الآن ما إذا كنت إعادة تشغيل هذا program-- ./buggy-2-- جلالة الملك. لدي خطأ الآن. ما لم أنسى أن تفعل؟ نعم، لذلك لم أكن ترجمة عليه. لذا تأكد عربات التي تجرها الدواب 2. لا يوجد مثل هذا الملف لأنني لم في الواقع تجميع النسخة الثانية. وحتى الآن مثيرة للاهتمام غير معلنة variable-- ليس 2. نقوم به 1. جعل عربات التي تجرها الدواب، 1-- ./buggy-1-- والآن كل واحد منهم هو على نفس الخط. الآن هناك استثناء ل هذا الادعاء المفترض من الألغام التي تحتاجها هذه الأقواس المعقوفة. عندما هو في الواقع OK-- إذا كنت قد لاحظت في القسم أو textbooks-- لحذف الأقواس المعقوفة؟ نعم؟ بالضبط. عندما يكون هناك واحد فقط سطر من التعليمات البرمجية التي قمت تريد أن تكون مرتبطة مع حلقة كما في المثال الأول. فمن المشروع تماما لحذف الأقواس المعقوفة كما نوع من الراحة من المترجم لك. نعم؟ سؤال جيد. سيتم اعتبرته خطأ النمط؟ فإننا promote-- كما في CS50 دليل الاسلوب، وURL التي في pset1-- التي دائما استخدام الأقواس المعقوفة. بالتأكيد إذا كنت جديدا على البرمجة. الحقيقة هي أننا لسنا سوف تمنعك من فعل هذه الراحة. ولكن إذا كنت مجرد الحصول على الى التحول من الأشياء، على الاطلاق فقط دائما استخدام مجعد تستعد حتى تحصل على تعليق منه. سؤال جيد. كل الحق. حتى ذلك الحين كان علة. على الأقل في شيء بسيط إلى حد ما. وحتى الآن قد تعتقد أن هذا هو بدائية إلى حد ما، أليس كذلك؟ هذا هو نوع من الأسبوع الأول في النظر إلى اللغة مثل، انظر البق الخاص فيها. ولكن الواقع وهذه هي ممثل الواقع بعض المشاكل مخيفة جدا التي يمكن أن تنشأ في العالم الحقيقي. وحتى بعض من تذكرون إذا كنت تتبع أخبار تكنولوجيا المعلومات، أو ربما حتى اشتعلت الرياح من هذا في شهر فبراير من العام الماضي أن أبل كان قدم شيئا من الخطأ في كل من دائرة الرقابة الداخلية، نظام التشغيل على هواتفهم، وأيضا نظام التشغيل ماك، نظام التشغيل على سطح المكتب وأجهزة الكمبيوتر المحمولة. ورأيت مثل هذه العناوين في هذا. وبعد ذلك، أبل عدت لإصلاح هذا الخطأ، وبسرعة كبيرة لم إصلاحه في دائرة الرقابة الداخلية، ولكن بعد ذلك ثابتة في نهاية المطاف في نظام التشغيل Mac OS كذلك. الآن أيا من هذه العناوين وحدها حقا تكشف ما هي المشكلة الأساسية، ولكن علة انخفض في نهاية المطاف إلى خطأ في SSL، طبقة المقابس الآمنة. وقصة قصيرة طويلة، هذا هو البرنامج المتصفحات التي لدينا وغيرها البرمجيات المستخدمة لتفعل ماذا؟ إذا قلت إن SSL هو المعنية، كلما زيارة URL الذي يبدأ ب HTTPS، ماذا بعد ذلك قد تكون ذات صلة SSL ل؟ التشفير. ولذا فإننا سوف نتحدث عن هذا في الأيام المقبلة. التشفير، فن الهرولة المعلومات. لكن قصة قصيرة طويلة، وأبل في وقت ما قبل ارتكبت خطأ في تنفيذها لSSL، و البرامج التي تنفذ في نهاية المطاف عناوين المواقع مثل HTTPS أو كحد أقصى اتصالات هناك أيضا. نتيجة وهي أن لديك يمكن صلات محتملة يتم اعتراضها. وكانت الاتصالات الخاصة بك غير مشفرة بالضرورة إذا كان لديك بعض الرجل سيئة بين لكم وموقع الوجهة الذين عرف كيفية الاستفادة من هذا. الآن أبل نشرت في نهاية المطاف إصلاح لهذه النهاية، ووصف من اهتمامهم كان هذا. فشل نقل آمن للتحقق من صحة أصالة الاتصال. وقد وجهت هذه المسألة استعادة خطوات التحقق من صحة عداد المفقودين. لذلك هذا هو تفسير متموج اليد ذاتها لمجرد القول إننا ثمل. هناك حرفيا واحدة سطر من التعليمات البرمجية التي كانت عربات التي تجرها الدواب في تنفيذها لSSL، و إذا كنت انتقل عبر الإنترنت والبحث عن هذا يمكنك أن تجد في الواقع شفرة المصدر الأصلي. على سبيل المثال، وهذا هو لقطة شاشة من مجرد جزء من ملف كبير إلى حد ما، ولكن هذا هو دالة يسمى على ما يبدو SSL التحقق من الخادم علامة الصرف الرئيسية. ويستغرق حفنة من الحجج والمدخلات. ونحن لن نركز كثيرا على التفاصيل التافهة هناك، ولكن إذا كنت تركز على التعليمات البرمجية داخل لذلك دعونا الإطار العلوي function-- التكبير على ذلك. قد تشك بالفعل ما قد الخطأ يكون حتى إذا كان لديك أي فكرة في نهاية المطاف ما كنت تبحث في. هناك نوع من الشذوذ هنا، وهو ماذا؟ نعم، أنا لا أحب حقا فشل نظرة من اثنين غوتو. بصراحة، لا أعرف حقا ما غوتو تفشل الوسائل، ولكن وجود اثنين منهم العودة إلى الوراء. أن مجرد نوع من التدليك لي فكريا بطريقة خاطئة، والواقع أننا إذا التكبير في فقط تلك الخطوط، وهذا هو C. لذلك الكثير من التعليمات البرمجية أبل هو نفسه مكتوب في C، وهذا على ما يبدو هو حقا equivalent-- ألا أن المسافة البادئة جميلة نسخة، ولكن إذا كنت تعترف بحقيقة أنه لا يوجد الأقواس المجعدة، ما كتب التفاح حقا كانت التعليمات البرمجية التي يبدو مثل هذا. حتى لقد أسرع خارجا وأنا فقط ثابت المسافة البادئة بمعنى أنه إذا لم يكن هناك الأقواس المعقوفة، التي غوتو الثانية تفشل هذا هو باللون الأصفر يجري تنفيذ مهما كانت. غير مرتبط مع واذا كان الشرط فوقه. وذلك حتى مرة أخرى، إذا كنت لا تماما فهم ما يمكن لهذا ربما أن تفعل، ونعرف أن كل من هذه conditions-- كل من هذه الخطوط هي خطوة هامة جدا في عملية فحص إذا كانت البيانات الخاص بك هو في الواقع مشفرة. حتى تخطي واحدة من هذه خطوات، وليس أفضل فكرة. ولكن لأن لدينا هذا غوتو الثاني تفشل باللون الأصفر، لأنه بمجرد ونحن نوع من الجمالية تحريكه إلى اليسار حيث غير منطقيا في الوقت الحالي، ما يعني هذا للخط من التعليمات البرمجية أدناه أن غوتو الثاني الفشل سيكون رأيك؟ انها دائما ما يتم تخطي. بحيث يتم عبس gotos عموما على لأسباب لن نذهب حقا في، والواقع أننا نميل في CS50 لا لتعليم هذا البيان غوتو، ولكن يمكن ان يخطر لك غوتو كما تفشل معنى التنقل القفز إلى أي جزء آخر من التعليمات البرمجية. وبعبارة أخرى القفز فوق هذا السطر الأخير جملة وتفصيلا، وذلك نتيجة لهذا الغباء خطأ بسيط أن كان مجرد نتيجة لربما شخص نسخ ولصق واحد أيضا وكانت العديد من المرات أن كامل أمن دائرة الرقابة الداخلية ونظام التشغيل ماك كان عرضة للبالاعتراض قبل الأشرار لبعض الوقت. حتى أبل إصلاح هذا أخيرا. الآن إذا كان بعض من كنت فعلا تشغيل الإصدارات القديمة من نظام التشغيل ماك أو دائرة الرقابة الداخلية، يمكنك الذهاب إلى gotofail.com التي هو موقع على شبكة الانترنت أن شخصا إقامة لتحديد الأساس برمجيا إذا كان جهاز الكمبيوتر الخاص بك لا يزال عرضة للخطر. وبصراحة، إذا كان، هو على الأرجح فكرة جيدة لتحديث هاتفك أو ماك الخاص بك عند هذه النقطة. ولكن هناك، مجرد شهادة على مدى تقديرا لهذه أقل مستوى التفاصيل وإلى حد ما أفكار بسيطة يمكن حقا تترجم إلى قرارات والمشاكل التي affected-- في هذا case-- الملايين من الناس. الآن كلمة عن الإدارة. وسيبدأ القسم هذا الأحد المقبل. سوف تتلقى رسالة بريد إلكتروني من قبل عطلة نهاية الاسبوع حول القسم، وعند هذه النقطة عملية resectioning ستبدأ إذا كنت قد أدركت لديك الآن بعض صراعات جديدة. حتى يحدث هذا كل عام، ونحن سوف تستوعب في الأيام القادمة. مكتب hours-- القيام إبقاء العين على هذا الجدول هنا. يتغير قليلا هذا الاسبوع، خاصة وقت البدء والموقع، لذلك استشارة أن قبل أن يتوجه إلى ساعات العمل أي من الليالي الأربع القادمة. والآن كلمة عن التقييم، خاصة لك الغوص في مشكلة يحدد احدة وخارجها. لذا فقا للمواصفات، هذه هي عموما محاور على طول التي نقيم عملك. يشير إلى نطاق ما مدى تنفذ التعليمات البرمجية الميزات المطلوبة من مواصفات لدينا. وبعبارة أخرى، كم من مجموعة قطعة هل قضم. فعلت ثلث منه، نصف من ذلك، 100٪ من ذلك. حتى لو كان غير صحيح، وكم هل تحاول؟ بحيث يجسد مستوى من الجهد ومقدار الذي قمت بت قبالة مجموعة مشكلة من المشاكل. Correctness-- هذا واحد، ل أي مدى، هو التعليمات البرمجية بما يتفق مع شركائنا مواصفات وخالية من الأخطاء. لذلك لا تعمل بشكل صحيح؟ إذا كان لنا أن تعطيه بعض المدخلات، أليس كذلك تعطينا الإخراج الذي نتوقع؟ Design-- الآن هذا هو الأول من تلك النوعية بشكل خاص، أو تلك التي تتطلب الحكم البشري. وبالفعل، وهذا هو السبب لدينا الموظفين هذا العدد الكبير من زملاء التدريس وبالطبع مساعدين. إلى أي مدى لديك قانون مكتوب بشكل جيد؟ ومرة أخرى هذا هو جدا التقييم النوعي التي ستعمل معك على ثنائي إتجاهي في الأسابيع القادمة. بحيث عندما تحصل لا عشرات الرقمية فقط، ولكن أيضا وعشرات مكتوبة، أو ردود الفعل كتبته، أو ملاحظات مكتوبة في الكلمات الإنجليزية. هذا ما سنستخدم أن تدفع لك نحو كتابة أفضل مدونة في الواقع. وفي محاضرة والقسم، سنحاول أن نشير out-- بقدر ما نحن can-- ما الذي يجعل البرنامج ليس فقط صحيح وجيد وظيفيا، ولكن أيضا مصممة بشكل جيد. الأكثر كفاءة يمكن أن يكون، أو حتى أجمل ما يمكن. وهو ما يقودنا إلى النمط. النمط هو في نهاية المطاف حكم الجمالي. اخترتم جيد أسماء المتغيرات الخاصة بك؟ هل بادئة التعليمات البرمجية بشكل صحيح؟ أنها لا تبدو جيدة، وبالتالي، هل من السهل على إنسان آخر لقراءة كل الخاص من صحتها. الآن عموما في المنهج، فإننا تسجيل هذه الأشياء على مقياس من خمس نقاط. واسمحوا لي أن تدق المنزل نقطة أن ثلاثة هو جيد حقا. بسرعة جدا القيام به الناس تبدأ في فعل الحساب. عندما تحصل على ثلاث من خمسة على صحة لبعض pset ويعتقدون اللعنة، أنا ذاهب إلى 60٪ التي هي في جوهرها D أو E. هذه ليست الطريقة التي التفكير في هذه الأرقام. وهناك ثلاث جيدة حقا، وماذا نحن نتوقع عموما في بداية لهذا المصطلح هو أنه إذا كنت الحصول على حفنة من three's-- ربما بضعة المعارض، وزوجين من fours-- أو والاثنينات زوجين، زوجين من fours-- هذا هو مكان جيد للبدء. وطالما أننا نرى مسار تصاعدي مع مرور الوقت، كنت في مكان جيد للغاية. الصيغة التي نستخدمها ل الأشياء الوزن هي في الأساس في هذا المنهج، وهو ما يعني أننا فقط يعطي وزنا أكبر لصحتها. لأنه في كثير من الأحيان صحة التي تأخذ معظم الوقت. ثق بي الآن. سوف find-- على الأقل في pset-- احد ان كنت تنفق 90٪ من وقتك العمل على 10٪ من المشكلة. وكل نوع من يعمل باستثناء واحد أو اثنين البق، وتلك هي الأخطاء التي تبقي لكم حتى وقت متأخر في الليل. تلك هي تلك التي نوع من الهروب لك. ولكن بعد النوم على ذلك، أو حضور ساعات العمل أو طرح الأسئلة على شبكة الإنترنت، و عند الوصول إلى هذا الهدف 100٪، و وهذا هو السبب في أننا الوزن الأداء الدقيق أكثر من غيرها. تصميم أقل قليلا، و أسلوب أقل قليلا من ذلك. ولكن نأخذ في أسلوب mind-- وربما كان أسهل هذه لقضم وفقا لدليل الاسلوب. والآن، وأكثر خطورة ملاحظة على الصدق الأكاديمي. CS50 لديه تمييز مؤسف لل كونها أكبر منتج للوحة الإعلانات الحالات كل عام تقريبا تاريخيا. هذا ليس لأن الطلاب في الغش CS50 أي أكثر من ذلك من أي فئة أخرى، ولكن بسبب من طبيعة العمل، حقيقة أنه الإلكترونية، حقيقة أننا نبحث عن ذلك، و حقيقة نحن علماء الكمبيوتر، أستطيع أن أقول أننا للأسف جيد جدا في الكشف عن ذلك. فماذا يعني هذا من حيث القيمة الحقيقية؟ لذلك، في المنهج، فلسفة بالطبع ل حقا لا تختزل أن تكون معقولة. يوجد هذا الخط بين القيام بعمل واحد لوحدك والحصول على القليل من مساعدة معقولة من صديق، والقيام صريح أن العمل الخاص بك صديق، أو إرسال له أو لها التعليمات البرمجية حتى انه أو انها يمكن ببساطة اتخاذ أو الاقتراض بها الحق. والتي تعبر الخط أننا مرسومة في الصف. ترى، المنهج في نهاية المطاف للخطوط أن نرسم بأنها معقولة والسلوك غير معقول، ولكن هل حقا يغلي وصولا الى جوهر من عملك يحتاجون إلى تكون بنفسك في نهاية المطاف. الآن مع أن قال، هناك ارشادي. لأنه كما قد imagine-- من ساعات العمل ومرئيات وأشرطة الفيديو لدينا يظهر مما far-- CS50 بل من المفترض أن تكون تعاونية وكما تعاونية واجتماعية و ممكن. كما تعاونية كما هو صارم. ولكن مع هذا قال: الكشف عن مجريات الأمور، كما سترى في المنهج، هو أنه عندما كنت تواجه بعض المشاكل. لديك بعض الأخطاء في التعليمات البرمجية التي قمت لا يمكن أن تحل، فمن المعقول بالنسبة لك لعرض التعليمات البرمجية لشخص آخر. صديق حتى في الصف، صديق يجلس إلى جانبك في ساعات العمل، أو عضوا في الموظفين. ولكنها قد لا تظهر مدوناتها لك. وبعبارة أخرى، و الإجابة لديك question-- أنا بحاجة لا أوه، وهنا help-- قانون بلدي. نلقي نظرة على هذا و نستنتج من ذلك ما شئت. الآن، بالطبع، هناك طريقة بوضوح إلى اللعبة هذا النظام حيث سأريكم قانون بلدي قبل أن سؤال. تريني بلدي التعليمات البرمجية قبل وجود السؤال. ولكن انظر المنهج مرة أخرى لل التفاصيل الدقيقة عن مكان هذا الخط. فقط لرسم الآن الصورة و مشاركة وبشفافية ممكن أين نحن في في السنوات الأخيرة، هذا هو عدد الحالات وحة الإعلانات التي تمت زيارتها خلال CS50 خلال السنوات السبع الماضية. مع 14 حالة سقوط هذا الأخير. من حيث الطلاب المشاركين، كان بعض الطلاب الغريب 20 هذا الخريف الماضي. كان هناك ذروة من 33 الطلاب منذ بضع سنوات. وكثير منهم من سوء الحظ لم يعد هنا في الحرم الجامعي. الطلاب المشاركين كنسبة مئوية من الطبقة تراوح تاريخيا من 0٪ إلى 5.3٪، وهو فقط أن أقول هذا هو التحدي سنويا. ونحو هذه الغاية، ما نريد القيام به هو نقل احد أننا dd-- فقط FYI-- مقارنة في والإنصاف لهؤلاء الطلاب الذين تتبع الخط وفقا لذلك. نفعل مقارنة كل تيار المقدمة ضد جميع البعثات الماضية من السنوات العديدة الماضية. نحن نعرف أيضا كيفية جوجل حول وإيجاد مستودعات مدونة على الانترنت، ومنتديات المناقشة على الانترنت، ومواقع العمل على الإنترنت. إذا كان الطالب يمكن العثور عليه، يمكننا بالتأكيد تجد أنه بقدر ما نقوم به مع الأسف. فماذا سترى في المنهج على الرغم من هذا الشرط الأسف. يمكنني بالتأكيد نقدر، وكلنا لديه الموظفين بعد أن فعلت بالطبع مثل هذا، أو هذا واحد نفسه مع مرور الوقت، نعرف بالتأكيد ما يشبه عندما الحياة تحصل في الطريق عندما يكون لديك بعض وقت متأخر من الليل deadline-- ليس فقط في هذه الفئة، ولكن عندما كنت another-- استنفدت تماما، وشدد خارج، يكون وجود عدد مفرط من الأشياء الأخرى القيام به. سوف تجعل في مرحلة ما من الحياة بالتأكيد سيئة، وربما في وقت متأخر قرار الليل. حتى في المنهج، هناك هذا الشرط، بحيث إذا غضون 72 ساعة من اتخاذ بعض القرارات الفقراء، كنت تملك ما يصل إليها ويمد يده لي و أحد رؤساء دورة في وسيكون لدينا محادثة. وسوف نتعامل مع الأشياء داخليا في الآمال من أن يصبح أكثر من لحظة التدريس أو درس الحياة، وليس شيئا مع تداعيات جذرية خاصة كما قد نرى في هذه الرسوم البيانية هنا. لذلك هذا هو نغمة خطيرة جدا. دعونا نتوقف لمجرد عدد قليل ثانية لكسر حدة التوتر. [عزف الموسيقى] J. DAVID مالان: حسنا، فكيف كان ذلك لسغ]؟ على المواضيع الأساسية اليوم. أولها هو التجريد. آخر من الذي سوف يكون تمثيل البيانات، والتي بصراحة هو وسيلة الجافة حقا للقول كيف يمكننا التوجه نحو حل المشاكل والتفكير حول حل المشاكل؟ لذلك كنت قد رأيت في خدش، وكنت قد ربما ينظر بالفعل في pset1 مع C أنه لا يمكن فقط استخدام وظائف، مثل printf، أن الآخرين في كتب السنوات الماضية بالنسبة لك. يمكنك أيضا إرسال الدالات الخاصة بك. وعلى الرغم من قد لا يكون لديك فعلت هذا في C، وبصراحة في pset1 كنت لا حقا بحاجة الى الكتابة الخاصة وظيفة خاصة لأن problem-- في حين ربما شاقة في أولا glance-- سترى يمكن حلها في نهاية المطاف مع ليس كل ما العديد من الأسطر من التعليمات البرمجية. ولكن مع أن قال، من حيث كتابة وظيفة الخاصة بك، ندرك أن لا تعطي C لك هذه القدرة. انا ذاهب للذهاب في التعليمات البرمجية المصدر اليوم، وهي متاحة بالفعل على شبكة الإنترنت، وانا ذاهب الى المضي قدما في فتح برنامجا يسمى وظيفة 0.C، وظيفة الصفر سنرى بعض الأشياء. في الأسطر الأولى من خلال 18 23 غير بلدي الوظيفة الرئيسية. والآن بعد أن بدأنا قراءة كود أننا لا كتابة على الطاير، ولكن بدلا من ذلك لقد كتبت مسبقا أو أنك في مشكلة تحديد قد تظهر الحاجة قد كتب مقدما. وهناك طريقة جيدة لبدء قراءة رمز لشخص آخر هو البحث عن الوظيفة الرئيسية. معرفة حيث ان دخول النقطة هي لتشغيل البرنامج، ثم تتبع ذلك منطقيا من هناك. لذلك يبدو هذا البرنامج يطبع اسمك متبوعا بنقطتين. ثم نستخدم GetString من مكتبة CS50 للحصول على سلسلة أو كلمة أو عبارة من المستخدم على لوحة المفاتيح. ثم هناك هذا الشيء print اسم here--. الآن print اسم ليس وظيفة التي تأتي مع C. انها ليست في مستوى io.h. انها ليست في CS50.h. انها بالأحرى في نفس الملف. لاحظ إذا كنت انتقل لأسفل خطوط bit-- 25 إلى 27-- انها مجرد وسيلة جميلة من التعليق التعليمات البرمجية باستخدام النجوم ومائلة. هذا هو متعدد الخطوط التعليق، وهذا هو فقط وصفي في زرقة ما تفعله هذه الوظيفة. لأنه في خطوط 28 حتى 31، لقد كتبت وظيفة السوبر بسيطة اسم الذي هو print اسم. فإنه يأخذ كم ان الحجج ويقول لك؟ حتى argument-- واحدة لأن هناك واحد حجة المدرجة داخل الأقواس. نوع وهو سلسلة. وهو ما يعني print اسم مثل هذا الصندوق الأسود أو الدالة التي تحيط كمدخل سلسلة. واسم هذه السلسلة مريح سيكون الاسم. لا S، N لا، ولكن الاسم. فماذا print اسم تفعل؟ انها جميلة بسيطة. كما سطر واحد من التعليمات البرمجية ل وprintf، ولكن يبدو أنه يطبع من "مرحبا"، هكذا وهكذا. حيث كذا وكذا يأتي من حجة. الآن هذا ليس الابتكار ضخمة هنا. حقا، لقد اتخذت البرنامج الذي يمكن وقد كتب مع سطر واحد من التعليمات البرمجية عن طريق وضع هذا هنا، وتغييره إلى شيء أن ينطوي على بعض ست أو سبع أو نحو ذلك الأسطر من التعليمات البرمجية على طول الطريق هنا. بل انها ممارسة ل المبدأ المعروف باسم التجريد. نوع من التغليف داخل من جديد وظيفة لها اسم، وأفضل بعد هذا الاسم حرفيا يقول ما يفعل. أعني printf-- هذا ليس صفية بشكل خاص. إذا كنت ترغب في إنشاء قطعة اللغز، أو إذا كنت تريد إنشاء وظيفة أن يطبع اسم شخص ما، جمال للقيام بذلك هو أنني يمكن في الواقع إعطاء تلك الوظيفة اسم أن يصف ما تقوم به. الآن يستغرق في الإدخال الذي لقد دعا تعسفا اسم، ولكن هذا هو وصفي رائعة جدا بدلا من أن يكون قليلا أكثر عامة مثل S. و الفراغ، حتى الآن، يعني فقط أن هذه الوظيفة لا تسلم لي العودة أي شيء. انها ليست مثل التي GetString يسلم لي حرفيا العودة سلسلة كما فعلنا مع قطعة من الورق مع زملائك في الأسبوع الماضي، بل انها مجرد أثر جانبي. فإنه يطبع شيء على الشاشة. حتى في نهاية اليوم، إذا كنت لا تجعل الوظائف 0، ./function-0، سنرى أنه يسأل عن اسمي. أنا اكتب ديفيد، وأنواع من اسمي. إذا كنت تفعل ذلك مرة أخرى مع روب، انها ستقول "مرحبا، روب." حتى فكرة بسيطة، ولكن ربما استقراء من هذا عقليا كما أن الحصول على البرامج الخاصة بك قليلا أكثر تعقيدا، وتريد أن تكتب قطعة من رمز والدعوة التي code-- استدعاء و أن code-- من قبل بعض وصفي تسمية مثل print اسم، C لا تحمل لنا هذه القدرة. وهنا مثال بسيط آخر. على سبيل المثال، إذا كنت فتح ملف من اليوم دعا return.c، تلاحظ ما قمت به هنا. معظم هذه الوظيفة الرئيسية هي printf. أنا أولا تهيئة تعسفا و متغير يسمى X لعدد 2. وبعد ذلك طباعة "x هو الآن ط٪ "تمر في قيمة x. لذلك أنا فقط أقول ما هو عليه. الآن أنا مجرد بجرأة مدعيا مع printf. أنا التكعيب أن قيمة س، وأنا القيام بذلك عن طريق استدعاء دالة دعا عابرة مكعب في العاشر كوسيطة، ثم حفظ المخرجات في المتغير نفسه، س. لذلك أنا clobbering قيمة x. أنا تجاوز قيمة x مع أي نتيجة الاتصال هذه هي وظيفة مكعب. ثم أنا فقط طباعة بعض الاشياء رقيق هنا يقولون ما فعلته. فما ثم المكعب؟ لاحظ ما هو أساسي تختلف هنا. لقد أعطيت وظيفة اسم كما كان من قبل. لقد تحديد اسم للحجة. هذه المرة انه دعا ن بدلا من اسم، ولكن يمكن أن نسميها أي شيء أريد. ولكن هذا يختلف. هذا الشيء على اليسار. كان سابقا ما الكلمة؟ الأولاد. الآن حان كثافة العمليات اضح. ذلك ما ربما يسلب؟ في حين يدل على نوع من الفراغ العدم، وكان هذا هو الحال. عاد print اسم شيء. فعلت شيئا، ولكن أنها لم تسلم لي العودة شيء أن أتمكن من وضعه على الجانب الأيسر من علامة المساواة كما فعلت هنا في السطر 22. لذلك إذا قلت في على خط 30، ما هذا ربما يعني حول ما يفعل مكعب بالنسبة لي؟ نعم؟ تقوم بإرجاع عدد صحيح. لذلك يسلم لي مرة أخرى، ل المثال، قطعة من الورق الذي كتب عليه الجواب. 2 مكعبة، أو مكعبة 3 أو 4 cubed-- كل ما مررت في، وكيف يمكنني تنفيذ هذا؟ حسنا، مجرد ن ن ن مرات مرات هو كيف يمكن مكعبات قيمة. ذلك مرة أخرى، سوبر بسيطة فكرة، ولكن بيانية الآن كيف يمكن أن نكتب وظائف أن الواقع كان يعود بنا القيم التي قد تكون ذات فائدة. دعونا ننظر إلى مثال آخر واحدة هنا يسمى وظيفة واحدة. في هذا المثال، ويبدأ للحصول على أكثر إلحاحا. حتى في وظيفة واحدة، وهذا إشعار program-- في نهاية المطاف يدعو دالة يسمى GetPositiveInt. GetPositiveInt ليس وظيفة في مكتبة CS50، ولكن قررنا نحن أود أن الوجود. حتى إذا كنا انتقل لأسفل لاحقا في الملف، لاحظ كيف ذهبت عن تنفيذ الحصول على كثافة العمليات إيجابي، وأنا نقول انها أكثر إقناعا لأن هذا هو لائق عدد من الأسطر من التعليمات البرمجية. انها ليست مجرد سخيفة يذكر برنامج لعبة. انها حصلت فعلا بعض التدقيق خطأ والقيام بشيء أكثر فائدة. حتى إذا كنت لم أر تجول أشرطة الفيديو التي قمنا جزءا لا يتجزأ من pset1، أعلم أن هذا هو نوع من في حلقة C، مماثلة في الروح إلى أنواع الأشياء خدش يمكن القيام به. ويقول تفعل ذلك. طباعة هذا الخروج. ثم المضي قدما والحصول على n-- الحصول على كثافة العمليات وتخزينها في ن، وتستمر في فعل هذا مرارا وتكرارا و مرة أخرى طالما ن أقل من واحد. ن ذلك سيكون أقل من واحد إلا إذا كان إنسان لا تتعاون. إذا كان هو أو هي كتابة في 0 أو -1 أو -50، هذه الحلقة سوف تبقي تنفيذ مرارا وتكرارا. وتلاحظ في نهاية المطاف، وأنا ببساطة إرجاع القيمة. حتى الآن لدينا وظيفة أن شأنه لقد لطيفة إذا CS50 ستنفذ في CS50.h وCS50.c بالنسبة لك، ولكن هنا يمكننا الآن تنفيذ هذا أنفسنا. ولكن اثنين من تعليقات على بعض التفاصيل الرئيسية. احدا-- لماذا أعلن كثافة العمليات ن، هل تعتقد، على الخط 29 بدلا من مجرد القيام هذا هنا، وهو أكثر اتساقا مع ما قمنا به الأسبوع الماضي؟ نعم؟ ويعتقد جيد. حتى لو كنا لوضعها هنا، انها كما لو أننا إبقاء معلنا ذلك مرارا وتكرارا. أنه في حد ذاته هو لا مشكلة، في حد ذاته، لأننا في حاجة فقط القيمة مرة واحدة ثم ونحن في طريقنا للحصول على واحدة جديدة على أي حال. ولكن فكرة جيدة. نعم؟ إغلاق. ذلك لأنني أعلن على ن 29 خط خارج الحلقة، يمكن الوصول إليها في جميع أنحاء هذه المهمة بأكملها. لا وظائف أخرى ل ن لا يزال داخل هذه مجعد تستعد هنا. So-- بالتأكيد. بالضبط. لذلك هذا هو أكثر من ذلك إلى هذه النقطة. إذا كنا بدلا أعلن ن هنا على خط 32، انها مشكلة لتخمين مكان آخر ولست بحاجة إلى الوصول إليها؟ على خط 34، و قاعدة بسيطة من التجربة هو التي يمكنك استخدامها فقط متغير داخل الأقواس المعقوفة الأخيرة في الذي أعلن فيه. للأسف، خط 34 هو سطر واحد بعد فوات الأوان، لأنني أغلقت بالفعل متعرج على خط 33 الذي يتوافق مع متعرج على خط 30. وهكذا هذا هو وسيلة للقول أن هذا المتغير كثافة العمليات وراقب، إذا جاز التعبير، إلى داخل فقط تلك الأقواس المعقوفة. انها فقط لا وجود لها خارج منها. ذلك في الواقع، إذا كنت تفعل هذا خطأ، اسمحوا لي أن حفظ رمز كما is-- مكتوبة بشكل غير صحيح. اسمحوا لي المضي قدما وجعل لا الوظائف 1، والخطأ notice--. استخدام غير معلن معرف ن على خط 35، وهو هنا. وإذا كنا انتقل لأعلى أبعد من ذلك، واحد آخر. استخدام غير معلنة معرف ن على خط 34. حتى المترجم، رنة، ويلاحظ أنه فقط لا وجود لها على الرغم من واضح انه هناك بصريا. لذلك الإصلاح بسيط يعلن من هناك. الآن اسمحوا لي أن انتقل إلى الجزء العلوي من الملف. ما يقفز في لكم و يجري مختلفة قليلا من الاشياء ونحن ننظر في الأسبوع الماضي؟ ليس فقط لدي اسم، لا فقط لدي بعض حاد يشمل حتى اعلى، لدي شيء أنا استدعاء النموذج. الآن أن تبدو مشابهة بفظاعة ما نحن فقط رأيت قبل لحظة على خط 27. لذلك دعونا نستنتج من مختلف رسالة خطأ لماذا فعلت هذا. اسمحوا لي المضي قدما و حذف هذه السطور هناك. وحتى نعرف شيئا عن النموذج. إعادة صنع هذا الملف. جعل وظيفة واحدة. والآن، اللعنة، أربعة أخطاء. دعونا انتقل لأعلى لأول واحد. إعلان الضمني وظيفة الحصول على كثافة العمليات إيجابي غير صالح في C99. C99 يعني فقط عام 1999 نسخة من لغة C، وهو ما نقوم باستخدام الواقع. فماذا يعني هذا؟ حسنا C-- وبشكل أكثر تحديدا C compilers-- هي برامج غبية جدا. انهم يعرفون فقط ما كنت قد قال لهم، وهذا مواضيعي فعلا من الأسبوع الماضي. المشكلة هي أنه إذا ذهبت حول تنفيذ اسم هنا، وأدعو دالة يسمى GetPositiveInt هنا على خط 20، هذه الوظيفة لا من الناحية الفنية موجودة حتى يرى المترجم خط 27. وللأسف، فإن المترجم هو القيام بأشياء أعلى، أسفل، يسار، يمين، ذلك لأنه لم ير تنفيذ GetPositiveInt، ولكن ترى هل تحاول لاستخدامها هنا، انها مجرد الذهاب الى bail-- يصيح في كنت مع وجود خطأ ربما message-- خفي، وليس في الواقع ترجمة ملف. حتى ما يسمى النموذج حتى هنا لا لزوم لها المسلم. حرفيا، ذهبت إلى هنا وأنا نسخ ولصق هذا، وأنا طرحها هنا. ان الفراغ أن يكون أكثر السليم، لذلك سنقوم نسخ ولصق حرفيا هذه المرة. أنا حرفيا نسخ ولصق. حقا تماما كما مثل كسرة الخبز. أ فكرة صغيرة إلى مترجم. أنا لا أعرف ماذا يفعل هذا بعد، ولكن أنا واعدة لك أنه سيكون موجودا في نهاية المطاف. وهذا هو السبب في هذا line-- خط 16-- ينتهي بفاصلة منقوطة. فمن زائدة حسب التصميم. نعم؟ إذا لم تصل مكتبتك لthe-- أوه، سؤال جيد. يشمل شارب الادراج ملف الرأس. تحتاج إلى be-- ينبغي تقريبا تكون دائما في أعلى جدا ملف لsimilar-- ل بالضبط نفس السبب، نعم. لأنه في معيار io.h هو حرفيا خط مثل هذا، ولكن مع printf كلمة، و مع حججها ونوع عودتها. وذلك عن طريق القيام حادة تشمل ما يصل هنا، ما تفعلونه حرفيا ونسخ ولصق محتويات كتب شخص آخر حتى أعلى. دلالة بذلك التعليمات البرمجية في ل حقيقة أن هذه الوظائف موجودة. نعم؟ تماما. لذلك ذكي جدا وصحيحة لن يكون الحل، هل تعرف لماذا؟ أنا لا أعرف ما النموذج هو، لكنني أعرف إذا أنا أفهم أن C هو مجرد البكم وأعادت التفكير أعلى إلى أسفل. حسنا دعونا تعطيه ما يريد. دعونا خفض هذا الرمز، لصقه تصل أعلى، ودفع الرئيسي الآن في الأسفل. أيضا هذا من شأنه أن يحل المشكلة. ولكن هل يمكن أن يأتي بسهولة جدا مع سيناريو فيه حاجة لاستدعاء B، وربما B يدعو إلى A. هذا هو ما يسمى العودية، وسوف نعود إلى ذلك. وأنه قد أو قد لا تكون جيدة الشيء، ولكن يمكنك بالتأكيد كسر هذا الحل. وعلاوة على ذلك، وأود أن المطالبة أسلوبيا، وخصوصا عندما برامجك أصبح هذا طويل وهذا طويل، انها مجرد السوبر مريحة لوضع الرئيسية في أعلى لأنه هو الشيء الأكثر المبرمجين تسير أن نهتم. وحتى انها قليلا أكثر نظافة، يمكن القول، على أن تفعل ذلك بالطريقة أنا أصلا فعل ذلك مع النموذج حتى على الرغم من أنه يبدو قليلا زائدة للوهلة الأولى. نعم؟ عذرا، هل يمكن القول أنه بصوت أعلى؟ إذا كنت تبديل مواقع وتنفيذ النموذج الأولي؟ لذلك هذا سؤال جيد. إذا قمت بإعادة يعلن-أسفل هذا هنا، دعونا نرى ما سيحدث. حتى إذا وضعت أسفل هذا هنا، أنت تقول. أوه، آسف. بصوت أعلى؟ حتى أعلى صوتا. أوه، سؤال جيد. فإنه يبطل وظيفة؟ كما تعلمون، بعد كل هذه السنوات، وأنا لم يسبق لهم وضع النموذج بعد ذلك. لذلك دعونا نفعل جعل الوظائف 1 بعد القيام بذلك. [الغمز واللمز] J. DAVID مالان: أوه، الانتظار. لا يزال لدينا لوضع كل شيء حتى أعلى. لذلك دعونا نفعل ذلك هنا، إذا أنا فهم سؤالك بشكل صحيح. أنا أضع كل شيء، بما في ذلك النموذج أعلاه الرئيسي، ولكن أنا أضع النموذج تحت التنفيذ. حتى إذا قمت بعمل واحد، انني اتلقى الخلف error-- غير المستخدمة ن متغير. أوه، هناك. شكرا لك. دعونا نرى، نتخلص من هذا. هذا هو علة مختلف، لذلك دعونا نتجاهل ذلك. دعونا حقا إعادة صنع هذا بسرعة. موافق، لذلك لا حجة البيانات يستخدمها شكل سلسلة n-- أوه، ذلك لأن لقد غيرت هذه إلى هنا. كل الحق، ونحن نعرف ما الجواب يجري علي: كل الحق، هنا نذهب. آه، شكرا لإيجابية. كل الحق، أنا سأثبت هذا الرمز after-- تجاهل هذا الخطأ بعينه لأن هذا was-- يعمل هو الجواب. لذلك لا الكتابة ما قمت به فقط. وأظن المترجم هو مكتوب في مثل هذه الطريقة أنه تجاهل النموذج الخاص لأن الجسم، إذا جاز التعبير، وظيفة لديها بالفعل تم تنفيذها على مستوى اعلى. كنت أود أن يكون للتشاور في الواقع دليل للمترجم لفهم ما إذا كان هناك أي شيء آخر ضمنا، ولكن للوهلة الأولى فقط عن طريق المحاولة والتجريب، يبدو أن هناك أي تأثير. سؤال جيد. لذلك دعونا نمضي قدما الآن، والانتقال بعيدا عن الآثار الجانبية التي هي الوظائف التي تفعل شيئا مثل بصريا على الشاشة مع printf، ولكن لا ترجع قيمة. والوظائف التي لها عائد القيم وكأننا مجرد رأى عدد قليل من. رأينا بالفعل هذه الفكرة من نطاق، وسنرى هذا مرارا وتكرارا. لكنه الآن، مرة أخرى، استخدام بحكم التجربة أن متغير يمكن أن تستخدم إلا داخل افتتح مؤخرا والأقواس المعقوفة مغلقة ونحن ورأى في هذا المثال بالذات. وكما أشرتم، هناك ability-- هل يمكن حل بعض هذه المشاكل عن طريق وضع متغير عالميا في أعلى جدا من ملف. ولكن في جميع الحالات تقريبا نحن ستغضب ذلك، وبالفعل لم يذهب حتى إلى هذا الحل في الوقت الراهن. حتى الآن، والوجبات الجاهزة هي أن المتغيرات وهذه الفكرة النطاق. ولكن الآن دعونا ننظر في آخر الطريقة الجافة للنظر في الواقع في بعض مثيرة للاهتمام جدا تفاصيل التنفيذ. كيف يمكننا تمثيل المعلومات. ونظرنا بالفعل في هذا في الأسبوع الأول من الفصل. النظر في ثنائيات، و نذكر أنفسنا عشري. ولكن أذكر من الاسبوع الماضي ان لديه C أنواع البيانات المختلفة وباقات أكثر، ولكن أكثرها مفيدة الآن قد تكون هذه. وشار، أو حرف، والذي يحدث لتكون بايت واحد، أو ثمانية الكل بت. وهذا يعني أن حجم من شار هو بايت واحد فقط. البايت هو ثمانية بت، لذلك هذا يعني أن كيف يمكننا تمثيل العديد من الشخصيات. كم عدد الأحرف أو حرف على لوحة المفاتيح اذا كان لدينا بايت واحد أو ثمانية بت. فكر في العودة إلى الصفر الأسبوع. إذا كان لديك ثمانية بت، كم عدد إجمالي القيم يمكنك تمثيل مع أنماط من الأصفار ومنها؟ احدا-- أكثر من ذلك. حتى إذا كنت إجمالي 256 بدء العد من الصفر. حتى إذا كان لديك ثمانية bits-- حتى إذا كنا كان المصابيح الثنائية دينا هنا مرة أخرى، نحن يمكن أن تتحول تلك المصابيح الكهربائية على وإيقاف في أي من 256 أنماط فريدة من نوعها. الآن هذا هو إشكالية قليلا. وليس ذلك بكثير للغة الإنكليزية و اللغات الرومانسية، ولكن بالتأكيد عندما كنت أعرض، ل المثال، واللغات الآسيوية، والتي لديهم أكثر بكثير من الرموز مثل 26 الحروف الأبجدية. ونحن في الواقع قد تحتاج أكثر من بايت واحد. ولله الحمد في السنوات الأخيرة المجتمع اعتمدت المعايير الأخرى التي تستخدم أكثر من بايت واحد لكل تهمة. لكنه الآن في C، الافتراضي هو بايت واحد فقط أو ثمانية بت. صحيح، وفي الوقت نفسه، هو أربعة بايت، والمعروف باسم 32 بت. وهو ما يعني ما هو أكبر ممكن عدد فإننا يمكن أن تمثل مع كثافة العمليات على ما يبدو؟ مع مليار. لذلك فمن أربعة مليارات يعطي أو يأخذ. 2 إلى قوة 32th، إذا كنا لا نتحمل أية الأرقام السالبة ومجرد استخدام جميع إيجابية أرقام، انها أربعة مليارات يعطي أو يأخذ الاحتمالات. تعويم، وفي الوقت نفسه، هو نوع مختلف من نوع البيانات في C. انها لا تزال العدد، ولكن هذا العدد الحقيقي. شيء مع العلامة العشرية. وتبين أن C يستخدم أيضا أربعة بايت لتمثيل القيم النقطة العائمة. للأسف كم العائمة قيم النقطة هي هناك في العالم؟ عدد الأرقام الحقيقية هي هناك؟ هناك لانهائية العدد، وبالنسبة لهذه المسألة هناك عدد لانهائي من الأعداد الصحيحة. لذلك نحن بالفعل نوع من حفر حفرة أنفسنا هنا. حيث يبدو في computers-- في أقل البرامج المكتوبة في C على them-- يمكن الاعتماد فقط تصل إلى أربعة مليارات يعطي أو يأخذ، والقيم النقطة العائمة يمكن على ما يبدو فقط لدينا بعض كمية محدودة من الدقة. فقط الكثير من الأرقام بعد العشرية الخاصة بهم. لأنه، بطبيعة الحال، إذا لديك فقط 32 بت، أنا لا أعرف كيف ونحن في طريقنا للذهاب نحو تمثل numbers-- الحقيقي ربما مع أنواع مختلفة من الأنماط. ولكن هناك بالتأكيد محدود عدد من هذه الأنماط، حتى هنا، أيضا، وهذا هو إشكالية. الآن يمكننا تجنب هذه المشكلة قليلا. إذا كنت لا تستخدم تعويم، هل يمكن استخدام مزدوج في C، والتي تعطيك ثمانية بايت، والذي هي طريقة أكثر أنماط ممكنة من الأصفار ومنها. لكنه ما زال محدودا، والتي يجري أن تكون مشكلة إذا كنت أكتب البرمجيات للرسومات أو لنزوة الصيغ الرياضية. لذلك قد ترغب في الواقع إلى العد حتى أكبر من ذلك. وnamed-- طويلة long-- بغباء هو أيضا ثمانية بايت، أو 64 بت، وهذا هو مرتين طالما عدد صحيح، وانها لقيمة عدد صحيح طويل. fact-- متعة إذا كان عدد صحيح أربعة بايت، كيف هي مدة طويلة في C عادة؟ أيضا أربعة بايت، ولكن طويل دام ثمانية بايت، وهذا لأسباب تاريخية. لكن الوجبات الجاهزة الآن مجرد أن لديه بيانات أن تكون ممثلة في هذا computer-- جهاز البدني مع الكهرباء و انها القيادة عموما تلك الأصفار وones-- مع كميات محدودة من الدقة. فما هي المشكلة إذن؟ كذلك هناك مشكلة من تجاوز عدد صحيح. ليس فقط في C، ولكن في أجهزة الكمبيوتر بشكل عام. على سبيل المثال، إذا كان هذا هو بايت تستحق bit-- حتى إذا كان هذا هو كل ثمانية bit-- والتي هي رقم واحد. ما هو هذا العدد تمثل لو افترضنا انها كل القيم الإيجابية في ثنائي؟ 255، وليس 256، ل الصفر هو أدنى عدد. حتى 255 هو أعلى واحد، ولكن المشكلة لنفترض أنني أريد أن زيادة هذا المتغير الذي وباستخدام المجموع ثمانية بت إذا أردت زيادة عليه. كذلك في أقرب وقت ارفق واحد لجميع هذه منها، يمكنك ربما تخيل visually-- فقط مثل حمل واحد باستخدام decimals-- شيئا ما يحدث في التدفق إلى اليسار. وبالفعل، إذا أضيف عدد إلى هذا، فإن ما يحدث في ثنائي هو أنه يفيض الى نقطة الصفر. حتى إذا كنت فقط لا use-- عدد صحيح، لكن بايت واحد لحساب الأعداد الصحيحة في برنامج، من خلال default-- في أقرب وقت تحصل على 250، 251، 252، 253، 254، 255-- 0 255 يأتي بعد، الذي هو على الارجح وليس ما المستخدم هو الذهاب الى نتوقع. الآن وفي الوقت نفسه في نقطة عائمة العالم، لديك أيضا مشكلة مماثلة. وليس ذلك بكثير مع أكبر number-- على الرغم من هذا لا يزال يمثل مشكلة. ولكن مع مقدار من الدقة التي يمكنك تمثيل. لذلك دعونا نلقي نظرة على هذا المثال هنا أيضا من مصدر code-- اليوم تطفو-0.c. وتلاحظ انها السوبر برنامج بسيط يبدو أن تطبع ما القيمة؟ ماذا يراهن هذا سوف طباعة على الرغم من أن هناك قليلا من جملة جديد هنا؟ لذلك نأمل 0.1. ذلك ما يعادل عشر لأن أفعله 1 مقسوما على 10. أنا تخزين الجواب في متغير يسمى و. هذا المتغير من نوع تعويم، والتي هو الكلمة اقترحت فقط موجودة. نحن لم أر هذا من قبل، ولكن هذا هو نوع من طريقة أنيق في printf لتحديد عدد الأرقام لك نريد أن نرى بعد العلامة العشرية. حتى هذه الرموز يعني فقط هو هذا هنا عنصر نائب. انها لنقطة عائمة قيمة، وأوه، بالمناسبة، إظهار ذلك مع الفاصلة العشرية مع رقم واحد بعد العلامة العشرية. بحيث هو العدد الأرقام المعنوية، إذا جاز التعبير، التي قد ترغب. لذلك اسمحوا لي أن نمضي قدما ونفعل جعل تعويم 0، ./float-0، ويبدو 1 مقسوما على 10 هو 0.0. الآن لماذا هذا؟ حسنا مرة أخرى، وتتخذ الكمبيوتر لي حرفيا، وكنت قد كتبت 1 وأنا مكتوبة 10، واتخاذ تخمين ما هو نوع البيانات المفترضة لهذين القيم؟ عدد صحيح، انها من الناحية الفنية شيء مختلف قليلا. انها عادة ما تكون طويلة، ولكنها ل في نهاية المطاف قيمة لا تتجزأ. لا قيمة النقطة العائمة. وهو ما يعني أنه إذا كان هذا هو عدد صحيح وهذا هو عدد صحيح، المشكلة تكمن في أن الكمبيوتر ليس لديها القدرة حتى لتخزين تلك النقطة العشرية. حتى عندما تفعل 1 تقسيم بنسبة 10 باستخدام الأعداد الصحيحة لكل من البسط و القاسم، يجب أن تكون الإجابة 0.1. لكن computer-- ل تلك هي integers-- لا أعرف ماذا أفعل مع 0.1. فما هو القيام بشكل واضح؟ انها مجرد رميها بعيدا، وما اراه في نهاية المطاف هو 0.0 فقط لأنني أصر على أن printf تريني نقطة عشرية واحدة. ولكن المشكلة هي أنه إذا كنت تقسيم عدد صحيح من عدد صحيح، سوف get-- بالتعريف من C-- عدد صحيح. وانها لن تفعل شيء جميل ومريح مثل جولة ليصل إلى أقرب واحد صعودا أو هبوطا. انها تسير لاقتطاع كل شيء بعد العلامة العشرية. حتى مجرد حدسي، ما هو على الارجح الإصلاح؟ ما هو أبسط الإصلاح هنا؟ نعم؟ بالضبط. لماذا لا يمكننا فقط علاج هذه كما القيم النقطة العائمة بشكل فعال يحولونها يطفو أو الزوجي. والآن إذا كنت تفعل جعل يطفو-0، أو إذا كنت تجميع يطفو-1، وهو مطابق ل ما اقترح فقط. والآن أفعل يطفو-0، وأنا الآن أحصل على 0.1. الآن هذا هو مدهش. ولكن الآن انا ذاهب الى القيام به شيء مختلف قليلا. أنا الغريب لمعرفة ما هو حقا يجري تحت غطاء محرك السيارة، وانا ذاهب لطباعة هذا إلى 28 منازل عشرية. أريد أن أرى حقا 0.1000-- على infinite-- [غير مسموع] 27 أصفار بعد أن 0.1. حسنا دعونا نرى اذا كان هذا ما أنا في الواقع الحصول عليها. جعل يطفو-0 نفس الملف. ./floats-0. دعونا التكبير في الجواب دراماتيكية. كل هذا الوقت، كنت قد تم التفكير 1 مقسوما على 10 هو 10٪، أو 0.1. انها ليست. على الأقل بقدر ما الكمبيوتر المعنية. الآن why-- حسنا، هذا كامل كذبة 1 مقسوما على 10 هو 0.1. ولكن هذا ليس why-- الوجبات الجاهزة اليوم. فلماذا لا يفكر الكمبيوتر، على عكس كل واحد منا في غرفة، أن 1 مقسوما على 10 هو في الواقع أن قيمة مجنون؟ ما هو الكمبيوتر القيام على ما يبدو؟ ما هذا؟ انها ليست تجاوز، في حد ذاتها. تجاوز هو عادة عندما كنت التفاف حول قيمة. انها هذه المسألة من عدم الدقة في قيمة النقطة العائمة حيث لديك فقط 32 أو ربما حتى 64 بت. ولكن إذا كان هناك لانهائية عدد numbers-- حقيقية أرقام مع النقاط العشرية وأرقام thereafter-- بالتأكيد لا يمكن أن تمثل كل منها. لذلك أعطت الكمبيوتر لنا أقرب مباراة إلى القيمة التي يمكن أن تمثل باستخدام تلك العديد من بت إلى القيمة أريد فعلا، وهو 0.1. لسوء الحظ، إذا كنت بدء القيام الرياضيات، أو بدء تشمل هذه الأنواع العائمة القيم نقطة في programs-- أهمية البرمجيات المالية، أي شيء software-- العسكري حيث التصور هو ربما من المهم جدا. ويمكنك البدء في إضافة أرقام من هذا القبيل، وبداية تشغيل هذا البرنامج مع مدخلات كبيرة حقا أو من أجل الكثير من ساعات أو الكثير أيام أو الكثير من السنوات، هذه الأخطاء صغيرة قليلا بالتأكيد يمكن أن تضيف ما يصل مع مرور الوقت. الآن بوصفها جانبا، إذا كنت قد أي وقت مضى ينظر سوبرمان 3 أو مكتب الفضاء وربما تذكرون كيف سرق هؤلاء الرجال الكثير من المال من أجهزة الكمبيوتر الخاصة بهم باستخدام القيم النقطة العائمة وبجمع قليلا بقايا، ونأمل أن فيلم الآن أكثر منطقية. هذا هو ما كانت عليه منوها في هذا الفيلم. حقيقة أن معظم أن الشركات لا تبدو بعد عدد معين المنازل العشرية، ولكن تلك هي كسور سنتا. بحيث تبدأ من إضافة لهم، البدء في جعل الكثير من المال في حسابك المصرفي. ولهذا أوضح مكتب الفضاء. الآن للأسف خارج مكتب الفضاء، هناك بعض قلق مشروعة وتأثيرات كبيرة هذه الأنواع من قرارات التصميم الأساسية، والواقع أحد الأسباب نستخدم C في سياق وبحيث يكون لديك حقا هذه الأرض حتى فهم كيفية عمل أجهزة الكمبيوتر، كيف يعمل البرنامج، و لا تأخذ أي شيء كأمر مسلم به. والواقع للأسف، حتى مع هذا الفهم الأساسي، نحن البشر يخطئون. وما اعتقدت سهم هذه ثماني دقائق الفيديو التي اتخذت هنا من حلقة الأعاجيب الحديثة، والتي هي عرضا التعليمي على كيفية عمل الأشياء أن يرسم صورتين من عندما يكون الاستخدام غير السليم وفهم القيم النقطة العائمة أدى إلى بعض كبيرة النتائج المؤسفة. دعونا نلقي نظرة. [VIDEO قراءة] ونحن الآن العودة إلى "الهندسة الكوارث "على الأعاجيب الحديثة. أجهزة الكمبيوتر. قمنا جميعا إلى قبول المشاكل غالبا محبطة أن حصلت مع them-- البق، والفيروسات، و glitches-- البرمجيات لاسعارها صغيرة لدفع ثمن الراحة. ولكن في ذات التقنية العالية وسرعة عالية تطبيقات برنامج الفضاء العسكرية و، أصغر مشكلة يمكن أن يتعاظم إلى كارثة. في 4 يونيو عام 1996، أعد العلماء لإطلاق صاروخ اريان 5 من دون طيار. وكانت تحمل العلمي الأقمار الصناعية المصممة لإنشاء بالضبط كيف يتفاعل المجال المغناطيسي للأرض مع الرياح الشمسية. تم بناء صاروخ ل وكالة الفضاء الأوروبية، وانطلق من منشأتها على ساحل غيانا الفرنسية. -على حوالي 37 ثانية في الرحلة، لأول مرة لاحظت شيء كان يحدث خطأ. أن فتحات الدوران و في الطريقة التي حقا لا ينبغي. حوالي 40 ثانية في الرحلة، بوضوح وكانت السيارة في ورطة، وذلك عندما جعلوا قرار تدميره. ضابط السلامة المدى، مع الشجاعة الهائلة، الضغط على زر وفجرت الصواريخ قبل أن تصبح خطرا على السلامة العامة. ، هذا كان قبل الزواج الرحلة من آريان 5، واستغرق تدميرها وضع بسبب الخلل جزءا لا يتجزأ من برنامج الصاروخ. -THE المشكلة على كان آريان أن هناك كان الرقم الذي المطلوبة 64 بت للتعبير، وأرادوا تحويل لعدد 16 بت. افترضوا أن عدد كان لن تكون كبيرة جدا. أن معظم تلك الأرقام في كان عدد الأصفار 64 بت. كانوا على خطأ. -THE عدم قدرة احد برنامج حاسوبي لقبول هذا النوع من عدد تولدها وكان آخر في جذور الفشل. وتطوير البرمجيات تصبح جزء مكلفة جدا من التكنولوجيا الجديدة. وكان الصاروخ أريان 4 كانت ناجحة جدا. الكثير من البرامج التي تم إنشاؤها ل انه كان يستخدم أيضا في آريان 5. -THE المشكلة الأساسية هو أن آريان 5. تم faster-- تسارع أسرع، و إن البرنامج لا يمثل لذلك. -THE تدمير الصاروخ كانت كارثة مالية ضخمة. جميع بسبب خطأ في برنامج دقيقة. لكن هذا لم يكن أول الوقت مشاكل تحويل البيانات قد تعاني تكنولوجيا الصواريخ الحديثة. -في عام 1991 مع بداية حرب الخليج الأولى، صاروخ باتريوت شهدت نوع مماثل مشكلة تحويل العدد. ونتيجة لذلك 28 people-- 28 قتل soldiers-- الأمريكية، وجرح نحو مئة آخرين. عندما باتريوت، والتي كان من المفترض للحماية من صواريخ سكود واردة، فشل في اطلاق صاروخ. ، وعندما غزت العراق الكويت، وأمريكا أطلقت عاصفة الصحراء في أوائل عام 1991، تم نشر بطاريات صواريخ باتريوت لحماية المملكة العربية السعودية وإسرائيل من هجمات صواريخ سكود العراقية. باتريوت هو الولايات المتحدة متوسطة المدى السطح إلى الجو النظام المصنعة من قبل شركة رايثيون. -THE حجم باتريوت اعتراضية itself-- ولكن عن ما يقرب من 20 أقدام طويلة، ويزن حوالي 2،000 جنيه. ويحمل رأسا حربية من حول، اعتقد انها ما يقرب من 150 جنيه. والرأس الحربي نفسه والمتفجرات العالية، والتي لديه شظايا حوله. لذلك غلاف الرأس الحربي هو مصممة للعمل مثل رصاص. تتم -THE صواريخ أربعة في الحاويات، ويتم نقلها عن طريق شبه مقطورة. ، ونظام باتريوت المضاد للصواريخ يعود 20 سنوات على الأقل الآن. صمم أصلا كما صاروخ الدفاع الجوي لاسقاط طائرات العدو. في حرب الخليج الأولى عندما جاءت تلك الحرب، الجيش يريد استخدامه ل اسقاط صواريخ سكود، وليس الطائرات. وكانت القوات الجوية العراقية ليس كثيرا من مشكلة، ولكن الجيش كان قلقا حول صواريخ سكود. وهكذا حاولوا ترقية باتريوت. -Intercepting عدو صواريخ تسير بسرعة ماخ 5 كان على وشك أن يتحدى بما فيه الكفاية. ولكن عندما باتريوت ونقل في الخدمة، كان الجيش لا يعلم لتعديل العراقي أن جعل صواريخ سكود على ما يقرب من من المستحيل ذلك. ماذا حدث هو أن صواريخ سكود قادمون في كان غير مستقر. كانوا متهاد. وكان السبب في هذا Iraqis-- من أجل الحصول على 600 كيلومتر خارج ل-300 كيلومترا مجموعة missile-- أخذ الوزن من الرؤوس الحربية الأمامي، وجعل رأس حربي أخف وزنا. حتى الآن باتريوت في محاولة للتوصل في سكود، ومعظم time-- الغالبية الساحقة من time-- أنه سيتوجه فقط عن طريق سكود. وبمجرد مشغلي نظام باتريوت أدرك باتريوت اخطأ هدفه، فجروا رأس حربي باتريوت ل لتجنب سقوط ضحايا محتملة اذا وسمح ليسقط على الأرض. كان المفتى ما اعتبره معظم الناس كما نارية كبيرة في السماء، ويساء فهمه و اعتراض الرؤوس الحربية من طراز سكود. -Although في سماء الليل، وطنيات يبدو أن تدمير بنجاح صواريخ سكود، في الظهران يمكن أن يكون هناك أي خطأ حول أدائها. هناك نظام رادار باتريوت ل المسار فقدت من سكود واردة وشنت أبدا بسبب لعيب البرمجيات. كان الإسرائيليون الذين اكتشفت لأول مرة أن يعد النظام كان على، كلما أصبح التناقض الوقت. بسبب ساعة جزءا لا يتجزأ من في الكمبيوتر النظام. نبذة عن قبل أسبوعين المأساة في الظهران، ذكرت الإسرائيليين ل وزارة الدفاع أن النظام بدأ يفقد الوقت. بعد حوالي ثماني ساعات للتشغيل، لاحظوا أن النظام أصبح بشكل ملحوظ أقل دقة. وردت وزارة الدفاع من قبل يقول كل من بطاريات باتريوت لعدم ترك النظم على لفترة طويلة. هم أبدا قال ما كان منذ وقت طويل. 8 ساعات، 10 ساعة، ألف ساعة. لا أحد يعرف. -THE بطارية باتريوت المتمركزة في الثكنة في الظهران ومعيبة الداخلية لل قد كان على مدار الساعة لأكثر من 100 ساعة في ليلة 25 فبراير شباط. -أنها الوقت تتبع الى دقة من حوالي عشر من الثانية. الآن عشر من الثانية هو رقم مثير للاهتمام لأنه لا يمكن التعبير في ثنائي بالضبط، والتي يعني أنه لا يمكن التعبير عن تماما في أي جهاز كمبيوتر الرقمي الحديث. من الصعب الاعتقاد، ولكن استخدام هذا كمثال. دعونا نلقي الثالث رقم واحد. ثلث لا يمكن أن يكون وأعرب في العشرية بالضبط. ثلث هو 0.333 مستمرة منذ ما لا نهاية. ليس هناك طريقة للقيام بذلك مع الدقة المطلقة في كسر عشري. هذا هو بالضبط هذا النوع من المشكلة ما حدث في باتريوت. ركض أطول النظام، و أسوأ أصبح خطأ وقت. ، وبعد 100 ساعة من العملية، و كان الخطأ في الوقت الثلث فقط من الثانية. ولكن من حيث استهداف صواريخ تسير بسرعة ماخ 5، ذلك أدى إلى تتبع خطأ من أكثر من 600 متر. فإنه سيكون خطأ فادح للجنود في الظهران. وماذا حدث وكان إطلاق صواريخ سكود الكشف عن طريق الأقمار الصناعية للإنذار المبكر، وكانوا يعرفون سكود كانت قادمة في الاتجاه العام لها. انهم لا يعرفون أين كانت قادمة. ومن الآن حتى الرادار عنصر من عناصر نظام باتريوت الدفاع الظهران لتحديد والحفاظ على مسار الصاروخ العدو واردة. كان -THE رادار ذكية جدا. فإنه في الواقع تتبع موقف سكود ثم التنبؤ حيث وربما سيكون في المرة القادمة أرسل رادار نبضة بها. التي كانت تسمى بوابة النطاق. -Then مرة باتريوت يقرر ما يكفي من الوقت لديه تمريرها إلى العودة ومراجعة المقبل الموقع لهذا الكائن المكتشف انه يعود. لذلك عندما عاد إلى الخطأ المكان، ثم يرى أي كائن. وتقرر أنه لا يوجد أي كائن. أن هناك كشف كاذبة وتسقط المسار. اختفى -THE الواردة سكود من شاشة الرادار، وبعد ثوان، و وانتقد الى الثكنات. سكود مقتل 28. وكان آخر واحد أطلق عليه خلال حرب الخليج الأولى. مأساوي، وبرامج محدثة وصل فجر اليوم التالي. كان الخلل البرمجيات كانت ثابتة، وإغلاق فصل واحد في المضطربة التاريخ من صواريخ باتريوت. [END تشغيل الفيديو] J. DAVID مالان: هذا كل شيء لCS50. سوف نرى لك يوم الاربعاء. [عزف الموسيقى]