[عزف الموسيقى] DAVID J مالان: كل الحق، نرحب مرة أخرى إلى CS50. هذه هي بداية من أسبوعين. كلمة من أحد دينا اصدقاء على الحرم الجامعي - إذا كنت مهتما، ربما، إما الآن أو في المستقبل بعض المدى حتى مرة واحدة أكثر راحة، والتدريس طلاب المدارس المتوسطة قليلا شيئا عن علوم الكمبيوتر، تفعل الرأس إلى هذا العنوان. هم في حاجة خاصة في الوقت الراهن من المعلمين، وخاصة إذا كان لديك كان بعض التعرض لعلوم الكمبيوتر. لذلك أذكر أن آخر مرة، قدمنا أنواع البيانات في عدد قليل من C، و كنت قد بدأت للحصول على الخاص الأيدي القذرة حتى مع هذه بالتالي في المشكلة مجموعة واحدة. وكان لدينا شار. حتى من الناحية التقنية إلى حد ما، ما هو حرف كما تعلمون عليه اليوم؟ لذلك فمن حرف، ولكن دعونا نكون أكثر دقة الآن. ما الذي نعنيه حرف أو شار الفردية؟ إن شخصية غير العددية - لذلك ليس بالضرورة. اتضح أنه حتى الأرقام، حتى علامات الترقيم والحروف هي ممثلة مع هذه البيانات اكتب يعرف شار. حتى انها ليست بالضرورة الأبجدي. نعم؟ لذلك فمن حرف ASCII. لذلك إذا كنت تعتقد أن العودة إلى الصفر الأسبوع، عندما كان لدينا لدينا بايت من المتطوعين الخروج وإما عقد أيديهم حتى أو ليس كل شيء، فهي ممثلة بت. ولكن مجتمعة باسم مجموعة من ثمانية، أنها تمثل بايت. وقدمنا ​​فكرة ASCII في تلك المحاضرة، التي هي مجرد تعيين بين الأرقام والحروف. ويستخدم ASCII، مثل تلك البشر ضمنية، ثمانية بت لتمثيل حرف. لذلك وفقا لذلك، إذا ثمانية بت يمكن كل يأخذ على واحد من اثنين القيم - صفر أو واحد - وهذا يعني أن هناك احتمالين لهذا الشخص - صفر أو واحد - اثنين لهذا الشخص، وهما لهذا الشخص، وهما لهذا واحد. ما مجموعه مرتين مرتين مرتين مرتين اثنين - حتى اثنين الثامن في المجموع. لذلك هناك عدد من الشخصيات 256 الممكن أن تستطيع تمثل مع ثمانية بت. الآن، أولئك منكم الذين يتكلمون الآسيوية اللغات يمكن أن نعرف أن هناك المزيد الشخصيات في العالم من مجرد كما والإفطار وخدمات العملاء والتاءات. وبالفعل، ASCII لا يكفي ل الكثير من لغات العالم. ولكن أكثر على ذلك في وقت آخر. في الوقت الراهن، ونعرف أن في C إذا كنت تريد لتمثيل بريد إلكتروني، وقطعة من علامات الترقيم، أو مجرد شيء شخصية في الطبيعة، ونحن نستخدم شار. وانها بايت واحد أو ثمانية بت. كيف حول كثافة العمليات؟ كذلك، وكثافة العمليات هو عدد صحيح. وكم بت، إذا كنت تذكر، وكان عدد صحيح عادة؟ أذكر أي شخص؟ لذلك فمن عادة 32. فإنه يعتمد في الواقع على الكمبيوتر الذي تستخدمه. ولكن في الأجهزة، وفي الكثير من أجهزة الكمبيوتر، انها 32 بت أو أربعة بايت - ثماني مرات أربعة. ورجات تستخدم فقط لتخزين الأرقام، إما سلبية، إيجابية، أو صفر. وإذا كنت قد حصلت على 32 بت وأنت فقط يهتمون الأرقام الموجبة، ويمكن أي شخص الملعب كم عدد ممكن الأعداد الصحيحة كمبيوتر يمكن أن تمثل من صفر على ما يصل؟ لذلك سيكون من اثنين إلى 32، التي هو ما يقرب من أربعة مليارات. وبالتالي فإن هذه القوى من اثنين ستكون الموضوعات المتكررة في علوم الكمبيوتر. كما سنرى، وانهم مريحة جدا العمل مع حتى لو انها ليست تماما من السهل أن تفعل الرياضيات في رأس واحد. ولذا فإننا سوف أقول ما يقرب من أربعة مليارات. الآن، منذ فترة طويلة طويلة - يمكنك نوع من التخمين. انها أطول من عدد صحيح. وكم بت؟ حتى 64 بت أو ثمانية بايت. هذا يعني فقط لأنك يمكن أن تمثل حتى أعداد أكبر، وأكبر إيجابية أو الأرقام السالبة أكبر. وماذا عن تعويم؟ وهذا هو النقطة العائمة قيمة 32 بت. هذا هو مجرد العدد الحقيقي، شيء مع العلامة العشرية. ولكن بدلا من ذلك إذا كنت بحاجة الى مزيد من الأماكن بعد العلامة العشرية أو تريد تمثل عددا أكبر مع بعض جزء بعد ذلك، يمكنك استخدام مزدوج، والذي هو 64 بت. ولكن هناك اهتمام الوجبات الجاهزة هنا. حتى إذا رجات محدودة بنسبة 32 بت و حتى يتوق طويلة تقتصر بنسبة 64 بت، وهذا النوع من يطرح السؤال، ماذا لو كنت فعلا تريد أن نعول أعلى من 4 مليارات لكثافة العمليات؟ حسنا، أنت مجرد استخدام طويل. ولكن ما إذا كنت ترغب في الاعتماد العالي من اثنين إلى 64، يعطي أو يأخذ؟ الآن، وهذا عدد كبير. ولكن في نهاية المطاف، وكنت قد فعلا يهتمون هذه الأنواع من القيم، خاصة إذا كنت تستخدم قاعدة بيانات والبدء في جمع الكثير والكثير والكثير من البيانات وتعيين فريدة من نوعها أرقام على كل قطعة من تلك البيانات. لذلك لدينا مشكلة من نوع. وبالمثل، مع النقطة العائمة القيم - العوامات أو الزوجي - إذا كنت قد حصلت فقط على عدد محدود من بت، كم من الأعداد الإجمالية يمكن لك ربما تمثل؟ حسنا، انها أقل وضوحا عند تنطوي على العلامة العشرية. لكنه بالتأكيد محدود. إذا كان لديك عدد محدد من البتات، عدد محدود من البشر، وهو محدود عدد من المصابيح الكهربائية، وبالتأكيد يمكنك لا تمثل سوى عدد محدود من قيم النقطة العائمة. ولكن كم من الأعداد الحقيقية هي في العالم؟ هناك لانهائية. ولهذا النوع من مشكلة لأننا لم يكن لديك مبلغ لا حصر له من الذاكرة أو ذاكرة الوصول العشوائي داخل أجهزة الكمبيوتر لدينا. وحتى بعض الأشياء الصعبة يمكن أن يحدث. لذلك دعونا المضي قدما ومحاولة للتعبير عن هذا هنا. اسمحوا لي المضي قدما وفتح gedit. انا ذاهب الى المضي قدما وحفظ ملف ودعا "floats0.c" لمجرد أن يكون بما يتفق مع مثال الذي هو على شبكة الإنترنت، إذا كنت ترغب. وانا ذاهب الى المضي قدما و تحديد ذلك على النحو التالي - انا ذاهب الى المضي قدما ويقول الباحث باطلة الرئيسي، ونحن في كثير من الأحيان القيام به. ثم في هذا البرنامج، وانا ذاهب ل تعلن نفسي تعويم، وذلك على 32 بت و متغير يسمى تعسفا. ثم أنا ذاهب لتخزين في ذلك أنا لا أعرف، عشر، حتى 0.1. لذلك أنا ذاهب للتعبير عن أن واحدة مقسوما على 10، والذي هو تماما المشروعة في C. ثم في السطر الثاني، وأنا ببساطة تريد طباعة تلك القيمة. لذلك نذكر أن نتمكن من استخدام وprintf مألوفة. نحن لا نريد لاستخدام ط٪ لكثافة العمليات. نحن نريد لاستخدام٪ و لتعويم. ثم انا ذاهب الى القيام مائل ن، اقتباس المقربين، فاصلة، و، منقوطة. حتى هنا برنامجي. هناك بالفعل علة واحدة. لا أحد منهم لهذا النقر نريد بالفعل أن نشير على الأقل علة واحدة أخرجتها؟ نعم؟ نعم. لقد نسيت "# تشمل" في أعلى، فإنها أعراض منها إذا حاولت ترجمة هذا سيكون أن المترجم هو الذهاب الى الصراخ في وجهي، قائلا رمز غير معروف أو شيء بهذا المعنى. فإنه لا يفهم شيئا مثل printf. لذلك أنا ذاهب الى القيام به "تشمل # "حفظ الملف. والآن حان في شكل أفضل. ولكن انا ذاهب أيضا أن أشير من التفصيل احدة جديدة اليوم. بالإضافة إلى تحديد مكان أصحاب مثل٪ و٪٪ ط ق، يمكنك تؤثر أحيانا سلوك ذلك العنصر النائب. على سبيل المثال، في حالة وجود العائمة قيمة النقطة، إذا كنت مهتم فقط لعرض مكان واحد عشري بعد الفترة، يمكنني القيام به في الواقع 0.1F. لذلك وبعبارة أخرى، أنا فصل و و النسبة المئوية مع 0.1، فقط يقول printf، قد يكون لديك كامل مجموعة من أرقام بعد العلامة العشرية ويشير بالنسبة لي. ولكن أريد فقط أن أرى واحدا منهم. لذلك انا ذاهب الى المضي قدما الآن ووفر هذا البرنامج، والذهاب إلى محطة بلدي النافذة، وانا ذاهب الى المضي قدما ونوع ماركة تعويم 0، أدخل. وأرى أن خط خفي إلى حد ما سوف نبدأ في جعل أكثر منطقية ونحن ندف إربا هذا الأسبوع والأسبوع القادم. الآن انا ذاهب الى المضي قدما وتشغيل تعويم الصفر. و، اللعنة. لذلك هناك علة أخرى هنا لسبب ما. أنا متأكد من أن العشر، أو واحد مقسوما على 10، ليس 0.0. ربما أنا فقط لا تبحث في ما يكفي من أرقام. فلماذا لا أقول اثنين .2 لرؤية اثنين المنازل العشرية بدلا من واحد فقط. اسمحوا لي أن أعود إلى بلدي نافذة طرفية وهنا ضرب حتى بضع مرات ل انظر تاريخ بلادي. لا تجعل تعويم الصفر مرة أخرى، ثم مرة أخرى. والآن تدخل. والآن أنا متأكد من هذا هو الخطأ. ويمكنني أن أفعل ثلاثة وأربعة، وأنا ربما ذاهب للحفاظ على رؤية الأصفار. فأين الخلل؟ ينبغي للمرء أن يكون مقسوما 10 0.1. شخص تريد أن تأخذ طعنة في ما القضية الأساسية هي؟ نعم؟ انهم على حد سواء صحيحة. ماذا في ذلك؟ حتى مع واحد مقسوما على 10، وهذا ما أقوم به في الحساب. وأحصل 0.1. نعم. وهكذا هو في الواقع هذه المسألة. عندما كنت تأخذ عدد صحيح في جهاز الكمبيوتر وأنت نقسمه عدد صحيح آخر، الكمبيوتر افتراضيا هو الذهاب الى افترض أنك تريد عددا صحيحا. المشكلة رغم ذلك، بالطبع، هو أن 0.1 ليس صحيحا. انها العدد الحقيقي. وماذا يفعل جهاز الكمبيوتر عن طريق الافتراضي هو رميات فقط بعيدا كل شيء بعد الفاصلة العشرية. فإنه لا المستدير لأسفل أو لأعلى في حد ذاتها. فإنه يطرح فقط بعيدا كل شيء بعد العلامة العشرية. والآن بعد أن من المنطقي. لأنه الآن نحن بوضوح غادر مع الصفر. ولكن الانتظار لمدة دقيقة. أنا لا نشهد كثافة الصفر. اراه في الواقع 0.00. فكيف يمكنني التوفيق بين هذا الآن؟ إذا كان واحد مقسوما على 10 صفرا، ولكن أنا رؤية 0.00، حيث يتم الحصول عليه تحويلها مرة أخرى إلى العدد الحقيقي؟ نعم. بالضبط. حتى هنا في السطر الخامس، عندما كنت في الواقع تخزين أن 0.1، الذي هو ثم اقتطاع إلى الصفر، داخل عوامة، وهذا يعادل نحو فعال ل تخزينه لا باعتباره الباحث لكن، في الواقع، وتعويم. وعلاوة على ذلك، وأنا ثم استخدام printf ل طباعة هذا العدد بشكل واضح إلى اثنين المنازل العشرية حتى وإن كانت هناك قد لا يكون في الواقع وجدت. لذلك هذا النوع من يمص، أليس كذلك؟ يبدو أنك لا تستطيع أن تفعل الرياضيات، على الأقل على هذا المستوى من الدقة، في جهاز الكمبيوتر. ولكن بالتأكيد هناك حل. ما هو أبسط الإصلاح استطعنا ربما القيام به، حتى مجرد حدسي هنا ل حل هذا؟ نعم؟ تحويل الأعداد الصحيحة في - نعم. حتى إذا لم أكن متأكدا تماما ما هو يحدث في الواقع هنا، إذا كان لديه في الأساس للقيام بهذه كلا يجري رجات، حسنا، لماذا لا استطيع جعل ذلك 10.0، مما يجعل هذا 1.0 إعادة حفظ الملف. اسمحوا لي أن أعود إلى أسفل أسفل وترجمة. اسمحوا لي أن أعد الآن. وهناك - الآن، لقد حصلت على عشر ممثلة على النحو 0.10. حسنا. بحيث ليست سيئة. واسمحوا لي أن أشير إلى طريقة واحدة أخرى أننا يمكن أن تحل هذه. اسمحوا لي لفة في الواقع مرة أخرى في الوقت المناسب لهذا عندما كان لدينا واحدة العاشرة قبل لحظة. واسمحوا لي أن تمضي قدما وإعادة حفظ هذا الملف كاسم ملف مختلف، فقط ل لديك نقطة تفتيش قليلا. لذلك كان هذا الإصدار واحد. والآن اسمحوا لي أن تمضي قدما و القيام إصدار واحد أكثر من ذلك. وسوف ندعو هذا الإصدار اثنين صفر فهرستها. وانا ذاهب الى القيام بدلا من ذلك هذا - أنت تعرف لماذا؟ مضيفا نقطة الصفر يعمل في هذه الحالة. ولكن لنفترض واحد كان متغير. 10 كانت من المفترض متغير. وبعبارة أخرى، لنفترض أنني لم أستطع فقط من الصعب رمز .0 في نهاية من هذا التعبير الحسابي. حسنا، أستطيع أن أفعل شيئا في الواقع بين قوسين تسمى الصب. يمكنني أن يلقي عدد صحيح 10 إلى تعويم، ويمكنني أن يلقي عدد صحيح واحد ل تطفو، كذلك. ثم الرياضيات التي يجري يتعين القيام به وعلى نحو فعال 1.0 مقسوما على 10.0، النتيجة التي يذهب في و كما كان من قبل. حتى لو كنت إعادة ترجمة هذا كما جعل يطفو 2، والآن يتحرك 2، وأحصل على نفس الإجابة، كذلك. لذلك هذا هو مثال مفتعلة إلى حد ما، لحل هذه المشكلة عن طريق إدخال الصب. ولكن بصفة عامة، والصب سيكون شيء قوي، ولا سيما بالنسبة لل مشكلة تعيين اثنين في غضون اسبوع، عندما تريد تحويل نوع بيانات واحد ل آخر أنه في نهاية اليوم يتم تمثيل في نفس الطريقة. في نهاية المطاف، كل واحدة شيء تحدثنا حتى الآن عن و رجات فقط تحت غطاء محرك السيارة. أو إذا كان هذا هو مستوى منخفض جدا ل لكم، انهم مجرد أرقام تحت غطاء محرك السيارة. حتى الشخصيات، مرة أخرى، أذكر من الاسبوع الصفر، هي أرقام تحت غطاء محرك السيارة. وهو ما يعني، يمكننا تحويل بين أنواع مختلفة من أرقام إذا انهم مجرد بت. يمكننا تحويل بين أرقام وخطابات لو انهم فقط بت، والعكس بالعكس. والصب بهذه الطريقة هو آلية في البرمجة التي تسمح لك قسرا تغيير نوع بيانات واحد إلى آخر. للأسف، هذه ليست كما واضحة وأنا قد أحببت. انا ذاهب للذهاب مرة أخرى إلى العوامات 1، والتي كانت أبسط وأكثر واحد مباشرة مع .0 وأضاف إلى كل منهما. ومثلما تنشيطية سريعة، اسمحوا لي أن تمضي قدما وإعادة ترجمة هذا، وجعل يطفو 2 - آسف، وهذا هو جعل يطفو 1. والآن دعونا تشغيل العوامات 1. وفي القاع، وإشعار أنني في الواقع الحصول على 0.1. لذلك، حل المشكلة. ولكن ليس بعد. أنا الآن ذاهب للحصول غريبة قليلا، وانا ذاهب الى العودة الى بلدي بيان printf و مثلا، أنت تعرف لماذا؟ أود أن أؤكد أن هذا هو حقا عشر. وأنا ذاهب إلى نريد أن نرى هذا ، ويقول، خمسة منازل عشرية. انها ليست مشكلة. يمكنني تغيير اثنين إلى خمسة، أنا مع إعادة ترجمة ماركة. أنا أعد بأنه يطفو 1. تبحث جيدة. الشيكات التعقل بلدي قد ينتهي هناك، ولكن انني اتلقى أكثر من ذلك بقليل المغامرة. انا ذاهب الى تغيير 0،5-،10. أريد أن أرى 10 أرقام بعد منزلة عشرية. وانا ذاهب الى المضي قدما وإعادة ترجمة هذا واعادة يطفو 1. النوع الأول من الأسف بعد أن اختبار هذا مزيد من الرياضيات لأن بلدي ليس كذلك تصحيح بعد الآن، على ما يبدو. ولكن الانتظار لمدة دقيقة، وربما هذا مجرد صدفة. ربما الكمبيوتر يعمل قليلا غريبة. اسمحوا لي أن نمضي قدما ونفعل 20 نقطة العشرية وأطمئن نفسي وأنا أعلم كيفية القيام الرياضيات. أنا أعرف كيفية البرنامج. جعل يطفو 1، إعادة ترجمة، واللعنة. هذا هو حقا، حقا الحصول على بعيدا عن العلامة. فما الذي يحدث هنا؟ حدسي، بناء على افتراضاتنا في وقت سابق عن حجم أنواع البيانات، ما يجب أن يحدث هنا تحت غطاء محرك السيارة؟ نعم؟ بالضبط. إذا كنت تريد هذا بكثير من الدقة، و هذا من هيك الكثير من الدقة - 20 أرقام بعد العلامة العشرية. أنت لا يمكن أن تمثل عدد التعسفية إلا إذا كان لديك عدد التعسفي من البتات. ولكن نحن لا. لتعويم، لدينا 32 بت فقط. إذا كان الأمر كذلك يمكن إلا أن يكون مبدل 32 بت في الطريق - تماما مثل البشر لدينا على، مرحلة يد أعلى أو لأسفل - في عدد محدود من الطرق، لا يوجد سوى عدد محدود من الأرقام الحقيقية التي يمكن أن تمثل مع هذه البتات. وبالتالي فإن الكمبيوتر في نهاية المطاف وستكون لدينا ل بدء قطع زوايا. الكمبيوتر يمكن إخفاء هذه التفاصيل من منا لقليلا من الوقت. ولكن إذا بدأنا بدس على الأرقام ويبحث أبعد وأبعد في أرقام زائدة في عدد صحيح، ثم نبدأ في رؤية أنه من تقارب الواقع فكرة عشر. وهكذا اتضح، على نحو مأساوي، وهناك عدد لا حصر له من الأرقام نحن لا يمكن أن تمثل على وجه التحديد في الكمبيوتر، على الأقل مع محدود عدد البتات، وهو محدود كمية من ذاكرة الوصول العشوائي. الآن للأسف، وهذا في بعض الأحيان له عواقب في العالم الحقيقي. إذا كان الناس لا نقدر تماما هذا أو نوع من أمرا مفروغا منه حقيقة أن أجهزة الكمبيوتر الخاصة بهم وسوف تفعل فقط ما يقولون أن تفعل وتفعل لا فهم هذه الكامنة التفاصيل التمثيل - التي، بصراحة، في بعض لغات هي مخفية عن المستخدم، خلافا لما حدث في C - بعض الأشياء السيئة يمكن أن يحدث. وعلى ما اعتقد كنا نفعل هو اتخاذ خطوة إلى الوراء. وهذا هو نحو ثماني دقائق الفيديو. أنها بثت قبل بضع سنوات، وأنه يعطي نظرة ثاقبة في الواقع ما يمكن أن تذهب خطأ عند تحت نقدر هذه أنواع من التفاصيل في غاية كل غاية العالم الحقيقي. لو استطعنا تحت أضواء خافتة لبضع دقائق. سرور 1: نحن الآن العودة إلى الهندسة الكوارث على الأعاجيب الحديثة. أجهزة الكمبيوتر - قمنا جميعا لقبول مشاكل في كثير من الأحيان محبطة التي تذهب معهم. البق، والفيروسات، والبرمجيات مواطن الخلل هي أسعار صغير لدفع ثمن الراحة. ولكن في ذات التقنية العالية وعالية السرعة برنامج عسكري والفضاء التطبيقات، فإن المشكلة أصغر يمكن تضخيم إلى كارثة. على 4 يونيو 1996، أعد العلماء ل إطلاق صاروخ اريان 5 من دون طيار. أنها تحمل السواتل العلمية تهدف إلى إنشاء بالضبط كيف يتفاعل الحقل المغناطيسي للأرض مع الرياح الشمسية. تم بناء صاروخ لأوروبا وكالة الفضاء وانطلق من ل منشأة على الساحل من جويانا الفرنسية. جاك GANSSLE: في حوالي 37 ثانية في الرحلة، لاحظوا الأولى شيئا ما كان يحدث خطأ. فتحات الدوران في و وسيلة هم حقا لا ينبغي. حوالي 40 ثانية في الرحلة، بوضوح كان السيارة في ورطة. وذلك عندما جعلوا قرار لتدميره. ضابط السلامة المدى، مع الشجاعة الهائلة، والضغط على زر، فجر الصاروخ قبل ما في وسعها تصبح خطرا على السلامة العامة. سرور 1: وكان هذا رحلة الاولى من آريان 5، وتدميرها وقعت بسبب خلل جزءا لا يتجزأ من في برنامج الصاروخ. جاك GANSSLE: المشكلة على آريان هو أن هناك عددا التي تتطلب 64 بت للتعبير. وأرادوا تحويل لعدد 16 بت. افترضوا أن العدد كان أبدا ستكون كبيرة جدا، أن معظم تلك الأرقام في 64 بت كان عدد الأصفار. كانوا على خطأ. سرور 1: عدم قدرة برنامج واحد برنامج لقبول هذا النوع من وكان عدد تولدها أخرى في جذور الفشل. وكان تطوير البرمجيات يصبح جدا جزء مكلفة من التكنولوجيا الجديدة. وكان الصاروخ آريان 4 كانت جدا ناجحة، والكثير من البرامج خلقت لكنه كان أيضا المستخدمة في آريان 5. فيليب كويل: إن المشكلة الأساسية كانت أن آريان 5 كان أسرع، تسارعت بشكل أسرع. وكان البرنامج لا وشكلت لذلك. سرور 1: تدمير الصاروخ كانت كارثة مالية ضخمة، جميع بسبب خطأ في برنامج دقيقة. ولكن هذا لم يكن أول مرة بيانات قد تعاني مشاكل التحويل الحديثة تكنولوجيا الصواريخ. جاك GANSSLE: في عام 1991، مع بداية من حرب الخليج الأولى، وباتريوت شهدت صاروخ نوع مماثل مشكلة تحويل الرقم. ونتيجة لذلك، كان 28 جنديا أمريكا قتلوا وأصيب نحو 100 آخرين عندما باتريوت، والتي كان من المفترض للحماية من صواريخ سكود واردة، فشل إطلاق صاروخ. سرور 1: عندما غزا العراق الكويت و أطلقت أمريكا عاصفة الصحراء في أوائل عام 1991، وبطاريات صواريخ باتريوت ونشرت لحماية المملكة العربية السعودية واسرائيل من صواريخ سكود العراقية هجمات صاروخية. باتريوت هو المتوسطة المدى الولايات المتحدة نظام السطح إلى الجو المصنعة من قبل شركة رايثيون. THEODORE POSTOL: حجم باتريوت اعتراضية نفسها تقريبا 20 أقدام طويلة. ويزن حوالي 2000 جنيه. ويحمل رأسا حربية من - اعتقد انها ما يقرب من 150 جنيه. والرؤوس الحربية نفسها هو التي لديها شديدة الانفجار شظايا من حوله. تم تصميم غلاف الرأس الحربي لعمل مثل رصاص. سرور 1: يتم تنفيذ أربعة صواريخ للحاوية الواحدة ويتم نقلها قبل نصف مقطورة. فيليب كويل: باتريوت المضادة للصواريخ النظام يعود في لا يقل عن 20 سنوات حتى الآن. تم تصميمه أصلا صاروخ الدفاع الجوي ل اسقاط طائرات العدو. في حرب الخليج الأولى، عندما تلك الحرب وجاء على طول، وأراد الجيش لاستخدامه لاسقاط صواريخ سكود، وليس الطائرات. كانت القوة الجوية العراقية لا كثيرا من مشكلة. ولكن الجيش كان قلقا بشأن صواريخ سكود. وهكذا حاولوا ترقية باتريوت. سرور 1: اعتراض صاروخ العدو السفر في خمسة ماخ و ستكون تحديا بما فيه الكفاية. ولكن عندما تم نقله إلى باتريوت الخدمة، وكان الجيش لا علم ل التعديل العراقية التي جعلت لهم صواريخ سكود من المستحيل تقريبا للضرب. THEODORE POSTOL: ماذا حدث هي صواريخ سكود التي كانت القادمة في كان غير مستقر. كانوا متذبذب. وكان السبب في ذلك العراقيين، في أجل الحصول على 600 كيلومترا من أصل 300 كيلومتر المدى الصاروخي، استغرق الوزن من الرؤوس الحربية الأمامية. جعلوا الرؤوس الحربية أخف وزنا. حتى الآن في محاولة باتريوت لتأتي على صواريخ سكود. وأكثر من مرة، والساحقة معظم الوقت، فإنه سيكون فقط يطير بها سكود. سرور 1: مرة واحدة في نظام باتريوت أدركت مشغلي غاب باتريوت هدفها، وأنها انفجرت صواريخ باتريوت رأس حربي لتجنب احتمال الضحايا إذا سمح لها ليسقط على الأرض. THEODORE POSTOL: وكان ذلك أكثر ما رأيت الناس نارية كبيرة كما في السماء ويساء فهمه على أنه اعتراض الرؤوس الحربية من طراز سكود. سرور 1: على الرغم من أن في سماء الليل ظهرت الوطنيين ليكون بنجاح تدمير صواريخ سكود، في الظهران هناك يمكن أن يكون هناك خطأ حول لها الأداء. هناك، نظام رادار باتريوت فقدت مسار أحد سكود الواردة وأبدا أطلقت بسبب خلل البرمجيات. كان الإسرائيليون الذين اكتشفت لأول مرة أن يعد النظام كان على، وزيادة التفاوت الوقت أصبح بسبب ساعة جزءا لا يتجزأ من جهاز الكمبيوتر للنظام. جاك GANSSLE: معلومات عن أسبوعين قبل المأساة في الظهران، والإسرائيليين وذكرت وزارة الدفاع أن النظام بدأ يفقد الوقت. بعد حوالي ثماني ساعات من التشغيل، لاحظوا أن هذا النظام هو أصبحت بشكل ملحوظ أقل دقة. وردت وزارة الدفاع من قبل تقول كل من بطاريات باتريوت للم يترك النظم على لفترة طويلة. هم أبدا قال ما كان وقتا طويلا. ثماني ساعات؟ 10 ساعة؟ 1،000 ساعة؟ يعلم أحد. سرور 1: البطارية باتريوت تتمركز في ثكنة في الظهران وعلى مدار الساعة في الداخلية كانت معيبة على أكثر من 100 ساعة في ليلة 25 فبراير. جاك GANSSLE: حان الوقت لتعقب دقة حوالي العاشرة من الثانية. الآن، عشر من الثانية هو عدد مثيرة للاهتمام لأنه لا يمكن أن يكون وأعرب في ثنائي بالضبط، مما يعني فإنه لا يمكن التعبير عنها تماما في أي جهاز كمبيوتر الرقمية الحديثة. انه من الصعب الاعتقاد، ولكن استخدام هذا كمثال. دعونا نلقي ثالث رقم واحد. لا يمكن التعبير عن ثلث في العشرية بالضبط. والثالث هو 0.333 الجارية على لاللانهاية. ليس هناك طريقة للقيام بذلك مع الدقة المطلقة في العشرية. هذا هو بالضبط نفس النوع من المشاكل ما حدث في باتريوت. ركض يعد النظام، و أصبح أسوأ خطأ وقت. سرور 1: بعد 100 ساعة من العمل، كان الخطأ في المرة الوحيدة نحو ثلث من الثانية. ولكن من حيث استهدفت الصواريخ السفر في خمسة ماخ، فإنه أدى في خطأ تتبع أكثر من 600 متر. سيكون من خطأ فادح ل الجنود في الظهران. THEODORE POSTOL: ما حدث هو تم الكشف عن إطلاق صواريخ سكود في أوائل الأقمار الصناعية للإنذار. وكانوا يعرفون أن صواريخ سكود كانت قادمة في الاتجاه العام لها. انهم لا يعرفون أين كانت قادمة. سرور 1: كان الآن ما يصل إلى الرادار عنصر من عناصر نظام باتريوت الدفاع الظهران لتحديد والحفاظ على مسار الصاروخ العدو واردة. جاك GANSSLE: الرادار كان ذكيا جدا. فإنه في الواقع تتبع موقف سكود ثم التنبؤ حيث ربما سيكون في المرة القادمة أرسلت الرادار نبض بها. التي كانت تسمى بوابة النطاق. THEODORE POSTOL: ثم مرة واحدة باتريوت يقرر ما يكفي من الوقت قد انقضى للذهاب مرة أخرى والتحقق من الموقع التالي لل هذا الكائن المكتشف، فإنه يذهب إلى الخلف. لذلك عندما عاد إلى الخطأ المكان، ثم لا ترى أي كائن. وتقرر أنه لا يوجد أي كائن، كان الكشف كاذبة، و قطرات المسار. سرور 1: اختفى سكود واردة من شاشة الرادار، و ثانية في وقت لاحق أنه انتقد في الثكنات. سكود قتل 28 وكان آخر واحد أطلقت خلال حرب الخليج الأولى. مأساوي، وصل البرنامج المحدث في الظهران في اليوم التالي. وقد تم إصلاح الخلل البرمجيات، إغلاق فصل واحد في المضطربة تاريخ صواريخ باتريوت. وطني هو في الواقع اختصار لالمرحلي تتبع صفيف اعتراض من الهدف. DAVID J مالان: كل الحق، لذلك تنبه سبيل المثال، للتأكد. ولحسن الحظ، هذه أقل مستوى البق ليست شيئا وسوف نقوم وعادة ما يكون لنقدر، وبالتأكيد وليس مع بعض لدينا أقرب من البرامج. بدلا من ذلك، معظم البق عليك وسوف يكون لقاء المنطقية في الطبيعة، النحوية في الطبيعة حيث ل رمز فقط لا يعمل الحق. وأنت تعرف ذلك سريع جدا. ولكن لا سيما عندما نصل إلى نهاية الفصل الدراسي، انه سيكون ل تصبح أكثر وأكثر من إمكانية ل حقا نفكر بجدية حول التصميم البرامج الخاصة بك والكامنة التمثيل هناك، أيضا، من البيانات. على سبيل المثال، فإننا سوف أعرض الخلية، وهو محرك قاعدة بيانات شعبية التي يمكنك استخدامها مع مواقع ل تخزين البيانات على النهاية الخلفية. وعليك أن تبدأ في اتخاذ قرار في نهاية فصل الدراسي وليس فقط ما أنواع البيانات على طول هذه الخطوط لاستخدام ولكن بالضبط كم عدد البتات للاستخدام، ما إذا كنت ترغب في تخزين التمور كما التواريخ والأوقات من المرات، وأيضا أشياء مثل كيفية كبيرة تريد لل معرفات فريدة من نوعها لتكون ل، مثلا، المستخدمين في قاعدة البيانات الخاصة بك. في الواقع، إذا كان بعض من كان لديك الفيسبوك حسابات لبعض الوقت، وأنت تعرف كيفية الوصول لاسم المستخدم الخاص بك - والذي يظهر أحيانا في الخاص URL نبذة عن إلا إذا كنت قد اخترت ل الإسم المستعار ل URL، أو إذا كنت قد تستخدم الفيسبوك في الرسم البياني API، و API متاحة للجمهور الذي كنت أن تطلب الفيسبوك للبيانات الخام - يمكنك ان ترى ما هو معرف رقمي الخاص بك. وقبل بضع سنوات، أساسا الفيسبوك اضطر إلى تغيير من استخدام أي ما يعادل رجات لاستخدام طويل لأن طويلة بمرور الوقت مع المستخدمين تأتي وتذهب وخلق الكثير من الحسابات و حسابات وهمية، حتى أنها بسهولة جدا كانت قادرة على استنفاد ما يشبه 4 مليار قيمة ممكنة مثل كثافة العمليات. أكثر من ذلك على تلك الأنواع من القضايا على الطريق، كذلك. كل الحق، بحيث تم الصب. وكان أن عدم الدقة. وقبل بضعة إعلانات سريعة. حتى تبدأ رسميا أقسام هذا المقبلة الأحد، الاثنين، الثلاثاء. سوف تسمع عبر البريد الإلكتروني في وقت لاحق هذا الأسبوع كما أن القسم اجبك. وعليك أيضا هنا في هذه النقطة كيف لتغيير المقطع الخاص بك إذا كان لديك لقد تغير الجدول الزمني الخاص بك الآن أو قد تغير الآن مستوى الراحة. وفي الوقت نفسه ف مجموعة واحدة واحدة هي القراصنة بسبب هذا يوم الخميس مع خيار ل تمديد هذا الموعد النهائي فقا ل المواصفات إلى الجمعة بطريقة نموذجية. ندرك أن المتضمنة في المشكلة المواصفات هي مجموعة إرشادات حول كيفية استخدام الأجهزة CS50، وجعل، وكذلك بعض أدوات محددة CS50 مثل نمط 50، والتي يمكن أن توفر لك مع ردود الفعل بشكل حيوي على جودة أسلوب التعليمات البرمجية الخاصة بك وأيضا تحقق 50، والتي يمكن أن توفر لك مع ردود الفعل الديناميكي لديك صحة المدونة. يغفر أننا ما زلنا طاولة من عدد قليل من مكامن الخلل مع الاختيار 50. هناك عدد قليل من زملائك الذين قاموا بداية حول 4:00 مساء يوم الجمعة عندما ذهب المواصفات حتى لاحظت منذ ذلك الحين عدد قليل من البق أننا نعمل من خلال، والاعتذار لمن شهدت الإحباط لا مبرر له. خطأ من الألغام. ولكن سنقوم متابعة CS50 مناقشة عندما يتم حلها. حتى كلمة واحدة على عشرات أنفسهم. لذلك سوف يكون أسبوع أو أسبوعين قبل أن تبدأ في الحصول على ردود الفعل على مجموعات مشكلة لأنك لا تملك حتى الآن زميل التدريس. وحتى ذلك الحين، وسوف نبدأ في تقييم يحدد المشكلة قبل أن C أعود وتقييم الصفر حتى أن تحصل على أكثر ذات الصلة مزيد من ردود الفعل بسرعة. ولكن بصفة عامة في المنهج، CS50 يتم تقييم مجموعات مشكلة على طول بعد أربعة محاور - نطاق وصحتها، والتصميم، والأناقة. نطاق ستكون عددا عادة بين الصفر والخمس التي يلتقط كم من قطعة أنك بت إيقاف. عادة، وتريد أن تكون هذه الخمسة. كنت على الأقل حاولت كل شيء. وتلاحظ انها عامل المضاعف بحيث تفعل سوى جزء من مجموعة المشكلة ليست في أفضل استراتيجية. وفي الوقت نفسه، أكثر وضوحا هو أهمية صحة - فقط هو البرنامج الصحيح مع يتعلق مواصفات؟ هذا ومن المرجح عمدا أكثر بشدة من الآخر محورين من قبل ثلاثة أضعاف لأننا ندرك التي عادة ما كنت تريد الذهاب لقضاء مزيد من الوقت الكثير مطاردة بعض الخلل، الحصول على التعليمات البرمجية للعمل، فإنك الطعج عليه واختيار أسماء المتغيرات المناسبة و مثل، الذي هو على الطرف الآخر من الطيف من النمط. وهذا لا يعني الاسلوب هو لا المهم، وسنقوم الوعظ أكثر من ذلك الوقت سواء في المحاضرات وأقسام. يشير النمط إلى جماليات من التعليمات البرمجية الخاصة بك. لقد اخترت المتغيرات اسمه جيدا التي هي قصيرة ولكن إلى حد ما وصفي؟ والتعليمات البرمجية بادئة كما كنت قد رأيت في محاضرة وبطريقة متسقة مع نمط 50؟ هو أخيرا تصميم الحق هناك في الوسط. التصميم هو أحد أصعب لوضع الاصبع على لأنه هو أكثر من ذلك بكثير ذاتية. ولكن هذا ربما أهم المحاور الثلاثة من حيث التربوية القيمة على مر الزمن وأن هذا سيكون فرصة زميل التدريس ل توفر لك مع ردود الفعل النوعي. في الواقع، في CS50 على الرغم من أننا لديك هذه الصيغ والعشرات، في نهاية من اليوم وهذه هي عمدا جدا دلاء صغيرة جدا - القيم نقطة بين صفر وثلاثة والصفر وخمس سنوات. نحن لا نحاول رسم خطوط الخشنة جدا بين مجموعات مشكلة أو بين الطلاب بل تركز بقدر يمكننا على النوعية، الكتابة العادية ردود الفعل، سواء المكتوبة أو الشفهية من الخاصة بك زميل التدريس، ستحصل على معرفة جيدا. ولكن بصفة عامة، وتلك هي الأوزان أن محاور مختلفة سيكون لديك. وفي الوقت نفسه، أيضا، فإنه يستحق الأخذ في مانع أنه يجب أن لا تفترض أن ثلاثة من أصل خمسة هي 60٪ و وبالتالي فشلها تقريبا. ثلاثة مقصود، لتكون نوع من منتصف الطريق جيدة. إذا كنت الحصول على الثلاثات ابتداء من الفصل الدراسي، وهذا بل من المفترض أن تكون جيدة وضع لتبدأ. إذا كنت الحصول على ثنائي، والمعارض، وهناك بالتأكيد بعض العمل لدفع قليلا المزيد من الاهتمام، للاستفادة من أقسام وساعات العمل. إذا كنت الحصول على أربع والأطفال دون سن الخامسة، عظيم. ولكن في الحقيقة، ونحن نأمل أن نرى مسارات بين الطلاب - جدا فردية لكل طالب، ولكن بدءا الفصل الدراسي هنا في نوع من اثنين إلى ثلاثة ولكن مجموعة المنتهية هنا في 04:56 النطاق. هذا ما نحن حقا تبحث عنه. ونحن لا نأخذ في الاعتبار أن دلتا كنت يحمل بين الاسبوع والاسبوع الصفر 12 عندما أقوم به الدرجات. لا يهم على الاطلاق كيف لنا كنت عادلة في بداية إذا كان لديك هو في الواقع مسار التصاعدي وقوية. الصدق الأكاديمية - لذلك اسمحوا لي أن أطرح على بلدي صوت أكثر جدية لمجرد لحظة. لذلك هذا بالطبع قد تميزت إرسال المزيد من الطلاب من أي شيء آخر في التاريخ إلى لوحة الإعلان، على ما أعتقد. فقدنا نوعا من الفرز في هذه نقطة كيف غالبا ما يحدث هذا. وهذا ليس لأن الطلاب في 50 أي أكثر من غير شريفة بهم زملاء في أي مكان آخر. ولكن ندرك أيضا أننا جيدة جدا في الكشف عن هذا النوع من الشيء. وهذا هو ميزة أن فئة العلوم الكمبيوتر لديه في أننا ونحن لا يمكن مقارنة جميع الطلاب يحدد المشكلة الزوج الحكيم ضد كل الأخرى، وليس فقط هذا العام ولكن كل السنوات السابقة. لدينا القدرة، مثل الطلاب في الطبقة، وإلى Google للعثور على كود على مواقع مثل جيثب و منتديات المناقشة. هناك حلول على الاطلاق لفي CS50 ف مجموعات تطوف هناك. ولكن إذا يمكنك العثور عليها، يمكننا العثور عليها. وهذا كله هو الآلية كثيرا وسهلة وحزينة بالنسبة لنا العثور عليها. ولكن أريد أن أؤكد أيضا أن سياسة الصدق الأكاديمية بالطبع هو يعني الكثير جدا أن الكثير جدا على العكس من هذه الروح. في الواقع، وهذا العام قمنا إعادة صياغة الأشياء في المنهج أن يكون هذا، نقطة نقطة نقطة، مع مزيد من التفاصيل في المنهج. ولكن الموضوع الرئيسي في دورة حقا هو أن تكون معقولة. ونحن ندرك أن هناك كبير كمية التربوية القيمة في التعاون، إلى حد ما، مع زملاء الدراسة، حيث كنت اثنين أو ثلاثة أو كنت أنت أكثر و يقف عند لوحة بيضاء ألواح الكتابة التفاعلية، وذلك ل الكلام، وأفكارك - كتابة خارج شبة الكود في الصور، المخططات ما ينبغي أن يكون إذا ماريو كنت لأكتب لأول مرة في شبة الكود. ما ينبغي خوارزمية الجشع - كيف يجب أن تتصرف في المشكلة يحدد واحد؟ وهكذا ندرك أن السلوك أن نشجع جدا الكثير على هذا المنوال. وفي المنهج، وسترى مجموعة كاملة من الرصاص تحت الفئة معقول وغير معقول الفئة التي تساعدنا على مساعدة كنت التفاف حول عقلك حيث نفعل رسم ذلك الخط. وبشكل عام، كقاعدة لائق من الإبهام هو أنه إذا كنت تناضل من أجل حل بعض الشوائب وصديقك أو زميل يجلس إلى جانبك، فمن معقول بالنسبة لك أن تبين له أو لها التعليمات البرمجية الخاصة بك ويقول: مهلا، يمكنك أن تساعد لي معرفة ما يحدث الخطأ هنا؟ نحن لا تبني عادة على الجانب المقابل. أنها ليست الرد الصحيح لجهودكم صديق أو زميل هنا لنقول، أوه، مجرد إلقاء نظرة على الألغام والشكل من ذلك من ذلك. وهذا هو النوع من المعقول. ولكن وجود شخص آخر والمخ آخر، زوج آخر من العيون تبدو في الشاشة أو نظرة على التعليمات البرمجية ويقول، هل أنت متأكد من أنك تريد أن يكون حلقة هنا؟ أو هل أنت متأكد أنك تريد أن منقوطة هنا؟ أو أوه، تلك الرسالة الخطأ يعني ذلك. تلك هي معقولة جدا و وشجعت السلوكيات. الحالات التي كنت في اشارة الى في وقت سابق عندما تختزل إلى الطلاب وقت متأخر من الليل مما يجعل سوء الحكم قرارات والبريد الإلكتروني مدوناتها ل شخص آخر أو مجرد القول، هنا، انها في قطاف أو غوغلينغ وقت متأخر من الليل. وهكذا وأود أن أشجع والتسول من أنت، إذا كنت لا تملك تلك لا مفر منه لحظات من التوتر، كنت الاهتزاز تصل ضد الموعد النهائي، لم يكن لديك وقت متأخر اليوم لأنه بالفعل يوم الجمعة في أن نقطة، البريد الالكتروني رؤساء الدورة أو نفسي مباشرة. ويقول، والاستماع، وأنا في بلدي نقطة الانهيار هنا. دعونا نجري حوارا وأنها من أصل الرقم. اللجوء إلى شبكة الإنترنت أو بعض الدول الأخرى لا السلوك غير معقول أبدا الحل، وعدد كبير جدا من الخاص لم يعد زملاء الدراسة هنا على حرم بسبب ذلك حكم الفقراء. ولكن من السهل جدا للالتفاف على هذا الخط. وهنا هو القليل من الصورة ليهتف لك من رديت بحيث الآن كل شيء سيكون على ما يرام. لذلك خلاصة سريعة، ثم، من حيث توقفنا. حتى الأسبوع الماضي، أذكر أن نقدم الظروف، وليس في خدش ولكن في هذه المرة C. وكان هناك بعض الجملة الجديد ولكن حقا أي أفكار جديدة في حد ذاتها. كان لدينا التعبيرات المنطقية التي استطعنا أو جنبا إلى جنب مع اثنين العمودي قضبان أو وجنبا إلى جنب مع اثنين اقحام قائلا أن كلا من اليسار والحق يجب أن يكون صحيحا لهذا لتنفيذه. ثم كان لدينا مفاتيح، وهو ما بدا في فترة وجيزة، ولكن أقترح حقا مجرد تركيب مختلفة لتحقيق نفس النوع من هدف إذا كنت تعرف في تقدم ما الحالات الخاصة بك ستكون. ونحن ننظر في الحلقات. A للحلقة هو ربما الأكثر شيوعا، أو على الأقل واحد أن الناس تصل عادة لغريزي. على الرغم من أنها تبدو غامضة قليلا، سترى الكثير، والأمثلة كثيرة من هذا قبل فترة طويلة، كما لديك بالفعل أواخر الأسبوع الماضي. في حين يمكن الحلقات بالمثل تحقيق نفس الشيء. ولكن إذا كنت تريد أن تفعل أي incrementation أو تحديث قيم متغير، لديك ل تفعل ذلك يدويا أكثر من لحلقة يسمح من قبل. وبعد ذلك هناك حلقة افعل حين، الذي يتيح لنا أن نفعل شيئا في الأقل مرة واحدة في حين شيئا صحيح آخر. وهذا أمر جيد خاصة بالنسبة لل البرامج أو الألعاب التي تريد لمطالبة المستخدم عن شيء مرة واحدة على الأقل. ثم إذا كان هو أو هي لم تتعاون، قد ترغب في القيام بذلك مرارا وتكرارا. مع المتغيرات، وفي الوقت نفسه، كان لدينا خطوط من التعليمات البرمجية من هذا القبيل، والتي يمكن أن يكون سطرين. هل يمكن أن تعلن ودعا الباحث العداد، منقوطة. أو يمكنك فقط تعلن و تحديد ذلك، إذا جاز التعبير. إعطائها قيمة في نفس الوقت. ثم أخيرا، تحدثنا حول الوظائف. وكان هذا مثالا طيبة في بمعنى أنه يوضح نوعين من الوظائف. واحد هو GetString ()، والتي، مرة أخرى، يحصل على سلسلة من المستخدم. ولكن GetString () هو نوع من اهتمام، بقدر ما استخدمنا ذلك، لأننا قد استخدمت دائما مع شيء ما على الجانب الأيسر من و علامة المساواة. وهذا يعني أن GetString () بإرجاع قيمة. فإنه يعود، بطبيعة الحال، سلسلة. ثم على الجانب الأيسر، ونحن ببساطة توفير هذه السلسلة من داخل متغير يسمى الاسم. هذا يختلف، بمعنى من المعاني، من printf لأن printf، على الأقل في منطقتنا استخدام هنا، لا يعود أي شيء. بوصفها جانبا، فإنه لا يعود شيء. نحن فقط لا يهمني ما هو عليه. ولكن لا توجد لديها ما دعا أحد الآثار الجانبية. وما هو أن الآثار الجانبية في كل حالة رأيناه حتى الآن؟ ماذا تفعل printf؟ فإنه يطبع شيء إلى الشاشة، يعرض النص أو الأرقام أو أي شيء على الشاشة. وهذا ما يعتبر مجرد أثر جانبي لأنه لا يسلم حقا مرة أخرى لي. انها ليست جوابا داخل مربع أسود أستطيع أن ثم الوصول إلى والاستيلاء. انها مجرد فعل ذلك من تلقاء نفسه، والكثير مثل تم توصيله كولتون في هذا الصندوق الأسود الأسبوع الماضي، وانه بطريقة ما سحرية والرسم على اللوح بدوني تشارك فعليا. من شأنها أن تكون الآثار الجانبية. ولكن إذا كان لي فعلا إلى العودة إلى الماضي وهنا نقول، أوه، هنا هو سلسلة من المستخدم، التي من شأنها أن تكون قيمة الإرجاع. وحتى الآن استخدمنا ظائف فقط أن الآخرين قد كتبت. ولكن يمكننا القيام به في الواقع هذه أنواع الأشياء أنفسنا. لذلك انا ذاهب للذهاب الى الأجهزة CS50 مرة أخرى. اسمحوا لي أن إغلاق علامة التبويب أننا كان مفتوحا قبل لحظة. واسمحوا لي أن تمضي قدما و إنشاء ملف جديد. وانا ذاهب الى المضي قدما و نسمي هذا positive.c واحدة. لذلك أريد أن تفعل شيئا مع أرقام إيجابية هنا. لذلك انا ذاهب الى المضي قدما والقيام الباحث - آسف - وتشمل #. دعونا لا تجعل نفس خطأ كما كان من قبل. الباحث الرئيسي (الفراغ)، مجعد مفتوحة قوس، أغلقت متعرج. والآن أريد أن أفعل ما يلي. أريد أن أكتب برنامج يصر على أن يعطي المستخدم لي عدد صحيح موجب. لذلك ليس هناك وظيفة GetPositiveInt في المكتبة CS50. هناك فقط GetInt (). ولكن هذا موافق لأن لدي بنيات التي أستطيع أن فرض أكثر قليلا قيدا على تلك القيمة. أستطيع أن أفعل شيئا من هذا القبيل. لذلك الباحث ن - وإذا كنت تكتب على طول، مجرد تحقيق انا ذاهب الى العودة و تغيير بعض الأشياء في لحظة - لذلك الباحث ن يساوي GetInt (). والذي يحدث لوضع وكثافة العمليات داخل ن. واسمحوا لي أن أكون أكثر وصفية. اسمحوا لي أن أقول شيئا مثل أطالب أن ان تعطيني عدد صحيح موجب. حسنا. حتى قليلا من التعليمات. والآن ماذا يمكنني أن أفعل؟ حسنا، أنا أعرف بالفعل من وجهة نظري بسيطة شروط أو الفروع، تماما مثل أنا كان في خدش، ويمكنني أن أقول شيئا مثل إذا كان n أقل من أو يساوي الصفر، ثم أريد أن أفعل شيئا مثل، ليست إيجابية. وبعد ذلك يمكن القيام به - حسنا، ولكن أريد حقا للحصول على هذا الباحث. حتى أتمكن من الذهاب هنا واستطعت النوع من نسخ هذا وبمحاذاة أطراف هذا. ومن ثم، OK. حتى إذا كان n أقل من أو تساوي الصفر قيام بذلك. الآن، ما إذا كان المستخدم لا يتعاون؟ جيدا، ثم انا ذاهب الى اقتراض هذا هنا. ثم أذهب هنا وهنا وهنا. لذلك هذا هو واضح ليس الحل، أليس كذلك؟ لأنه ليس هناك نهاية في الأفق. إذا أريد للمطالبة بأن يعطي المستخدم لي عدد صحيح موجب، يمكنني في الواقع الحصول على كثافة العمليات. يمكنني ثم تحقق من أن كثافة العمليات. ولكن بعد ذلك أريد أن تحقق ذلك مرة أخرى و تحقق ذلك مرة أخرى والتحقق من ذلك مرة أخرى. لذلك من الواضح، ما هو أفضل بناء لتستخدم هنا؟ كل الحق، لذلك نوعا من حلقة. لذلك أنا ذاهب للتخلص تقريبا جميع هذه. وأريد أن يحصل هذا الباحث مرة واحدة على الأقل. لذلك أنا ذاهب الى القول به - وسأعود إلى بينما في مجرد لحظة - الآن، ماذا؟ انا ذاهب الى القيام ن الباحث يحصل GetInt (). موافق. لذلك هذا امر جيد جدا. والآن كيف في كثير من الأحيان أريد أن أفعل هذا؟ اسمحوا لي أن وضع printf داخل حلقة حتى أستطيع أن نطالب مرارا وتكرارا، إذا تكون الحاجة. وماذا أريد هذا بينما حالة أن تفعل؟ أريد أن تستمر في فعل هذا في حين أن ما هو الحال؟ نعم. N هو أقل من أو تساوي الصفر. لذلك بالفعل، لدينا بشكل كبير تنظيف هذه الشفرة حتى. لقد اقترضت بناء بسيط جدا - حلقة افعل حين. لقد سرقت مجرد خطوط هامة من التعليمات البرمجية التي بدأت النسخ و اللصق، الذي لم يكن حكيما. وحتى الآن أنا ذاهب للصق الواقع في هنا ومجرد القيام بذلك مرة واحدة. والآن ماذا أريد أن أفعل في نهاية جدا من هذا البرنامج؟ وأنا أقول شيء بسيط مثل، وذلك بفضل ل- و سأفعل٪ لكثافة العمليات ط - مائل ن، فاصلة، ثم سد العجز في ن، الفاصلة المنقوطة. حسنا. لذلك دعونا نرى ما سيحدث الآن عند تشغيل هذا البرنامج. انا ذاهب الى المضي قدما و لا تجعل إيجابية. لعنة. وهناك عدد قليل من الأخطاء. لذلك اسمحوا لي انتقل مرة أخرى إلى الأولى. لا تعمل من خلالها إلى الوراء. العمل من خلالهم من أعلى إلى أسفل خشية أن تتالي وفقط شيء واحد أن تكون خاطئة. الإعلان الضمني تعمل GetInt (). نعم. لذلك لم يكن كافيا. النوع الأول من جعل نفس الخطأ ولكن مختلفة قليلا هذه المرة. ولست بحاجة لتشمل ليس فقط ولكن stdio.h cs50.h أيضا، والذي يتضمن ما يسمى الإعلانات من الحصول على كثافة العمليات التي تعليم الأجهزة، أو يعلم C ما GetInt () هو. لذلك اسمحوا لي الحفظ. انا ذاهب الى تجاهل أخطاء أخرى لأنني ذاهب إلى الأمل انهم بطريقة أو بأخرى تتعلق الخطأ أنا بالفعل ثابتة. لذلك اسمحوا لي المضي قدما وإعادة ترجمة مع جعل الإيجابية، أدخل. لعنة. ثلاثة أخطاء، لا يزال. اسمحوا لي أن انتقل لأعلى إلى الأول. غير المستخدمة متغير ن. لم نشهد هذا من قبل. وهذا، أيضا، هو خفي قليلا. هذا هو الناتج من المحول البرمجي. وما هذا الخط أبرزت هناك - positive.c :9:13 - يقول، قائلا انها على خط التسعة positive.c، عند الحرف 13TH، العمود 13TH، قمت بهذا الخطأ. وعلى وجه الخصوص، هو قول لي غير المستخدمة متغير ن. لذلك دعونا نرى - خط التسعة. أنا باستخدام ن بمعنى أن أنا يعطيها قيمة. ولكن ما لا يحب المترجم هو أنني لست على ما يبدو استخدامه. ولكن الانتظار لمدة دقيقة، وأنا استخدامه. في السطر 11، وأنا استخدامه هنا. ولكن إذا كنت انتقل لأسفل المزيد في positive.c :11 - ذلك في السطر 11، 12 شخصية، و تقول لي، واستخدام المترجم غير معلنة معرف ن. وسائل غير معلنة وذلك لدي لم تحدد على أنها متغير مع نوع البيانات. ولكن الانتظار لمدة دقيقة. فعلت ذلك بالضبط في خط التسعة. لذلك هناك من هو حقا الخلط هنا. انها إما لي أو مترجم ل في خط التسعة، ومرة ​​أخرى، وأنا على إعلان ن الباحث، وأنا أسند لها قيمة الإرجاع GetInt (). ثم أنا باستخدام هذا المتغير ن في الخط 11 والتحقق إذا قيمته أقل من أو تساوي الصفر. ولكن هذا على ما يبدو سيئة وكسر لماذا؟ أقول مرة أخرى؟ آه، لا بد لي من أن تعلن ن قبل دخول حلقة. ولكن لماذا؟ أعني، نحن فقط المقترحة قبل بت أنه بخير لتعريف المتغيرات كل على سطر واحد ثم التنازل عنها بعض القيمة. متغير العالمية - دعونا نعود لهذه الفكرة في مجرد لحظة. ماذا تريدون مني أن أضع أنه خارج من الحلقة؟ هو عليه. بالضبط. لذلك، وإن كان، متوقع إلى حد ما، اسمحوا لي أن ألخص. عندما تقوم بتعريف ن داخل كتلة القيام به هناك - وتحديدا داخل تلك الأقواس المتعرجة - أن ن متغير لديه ما يسمى نطاق - لا علاقة لنظام التسجيل لدينا في بالطبع - ولكن لديه نطاق هذا تقتصر على تلك الأقواس المتعرجة. وبعبارة أخرى، وعادة إذا قمت بتعريف متغير داخل مجموعة من أقواس مجعد، هذا المتغير موجود فقط داخل هذه الأقواس المتعرجة. حتى قبل أن المنطق وحده، على الرغم من لقد أعلنت ن في خط التسعة، و يختفي أساسا من نطاق، يختفي من الذاكرة، إذا جاز التعبير، بحلول الوقت الذي يصل خط 11. لأن الخط 11، للأسف، خارج هذه الأقواس المتعرجة. لذلك أنا للأسف لا يمكن إصلاح ذلك عن طريق بالعودة إلى ما أنا فعلت هذا من قبل. كنت قد تفعل هذا في البداية. ولكن ما هي لكم الآن لا القيام دوريا؟ كنت الواضح عدم الحصول على والباحث دوريا. حتى نتمكن من مغادرة GetInt ()، ونحن يجب ترك GetInt () داخل حلقة لأن هذا هو ما نريد أن الالحاح المستخدم مرارا وتكرارا. لكنها لا تكفي للذهاب تصل إلى خط، ويقول، وستة. ن الباحث، منقوطة. لا تعطيه قيمة بعد، لأن أنت لا تحتاج إلى فقط حتى الآن. ولكن الآن إلى هنا، لاحظ - وهذا سيكون من الخطأ سهلة للغاية. أنا لا أريد أن الظل تقريري السابق إعلان ن. أريد استخدام ن أن موجود في الواقع. وحتى الآن في السطر 10، أنا تعيين ن قيمة. ولكن في خط الستة، أعلن ن. وهكذا يمكنني أو يمكن لا استخدامه في السطر 12 الآن؟ استطيع لأن الذي بين مجعد وأعلن الأقواس ن الآن؟ واحد هنا في السطر الخامس. إلى هنا واحد على خط 14. حتى لو كنت الآن التصغير، وحفظ هذا الملف، انتقل العودة إلى وتشغيل جعل الإيجابية، فإنه جمعت هذه المرة. بحيث بالفعل التقدم. خفض. . / إيجابية، أدخل. أطالب أن تعطيني عدد صحيح موجب. السلبية 1. السلبية 2. السلبية 3. صفر. واحد. وشكرا لواحد هو ما طبع الآن. اسمحوا لي أن أحاول شيئا آخر، بدافع الفضول. أنا يقال لإدخال عدد صحيح. ولكن ماذا لو كنت بدلا من ذلك اكتب في الحمل؟ لذلك ترى الآن موجه مختلفة - إعادة المحاولة. ولكن في أي مكان في قانون بلدي لم أكتب إعادة المحاولة. لذلك، من المفترض، حيث هذه المحاولة يدفع قادمة من، هل أقول؟ نعم، من GetInt () نفسها. حتى احد موظفي CS50 الأشياء في لا بالنسبة لك، على الأقل في هذه القليلة الأولى أسابيع، ونحن قد كتبت بعض المبلغ من الخطأ التحقق لضمان أنه إذا استدعاء GetInt ()، وسوف لا يقل عن نعود إلى كثافة من المستخدم. أنك لن تحصل على سلسلة. أنك لن تحصل على شار. أنك لن تحصل على شيء آخر تماما. ستحصل على كثافة العمليات. الآن، قد لا تكون إيجابية. قد لا تكون سلبية. نحن إجراء أي ضمانات حول ذلك. ولكننا سوف الالحاح للمستخدم لإعادة المحاولة، إعادة المحاولة، إعادة المحاولة حتى انه أو انها في الواقع وتتعاون. وبالمثل، إذا كنت تفعل 1.23، التي ليست كثافة العمليات. ولكن إذا كنت لا اكتب في، مثلا، 50، أن يعطيني القيمة التي أردت. حسنا. لذلك ليس سيئا. أي أسئلة حول ما فعلناه للتو؟ الوجبات الجاهزة الكائن الرئيسية، أن تكون واضحة، وليس الكثير من الحلقة، التي شهدناها قبل رغم ان لدينا ليس حقا استخدامه، ولكن القضية من نطاقها، حيث يمكن أن تكون متغيرات فقط يمكن أن تستخدم إلا داخل بعض نطاق محدد. كل الحق، واسمحوا لي أن أتناول اقتراح قمت بها في وقت سابق، أن من متغير عمومي. بوصفها جانبا، اتضح أن آخر الحل لهذه المشكلة، ولكن عادة حلا غير صحيحة أو حل سوء تصميم، هو تعريف متغير ك ما دعا متغير عمومي. الآن أنا نوع من انتهاك تعريفي النطاق لأن هناك لا الأقواس المتعرجة في أعلى جدا والجزء السفلي جدا من ملف. ولكن الآثار المترتبة على ذلك غير أنه الآن في أربعة أسطر، n هو متغير عمومي. وكما يوحي الاسم، هو فقط يمكن الوصول إليها في كل مكان. الصفر في الواقع هذه. إذا كنت تستخدم متغير، قد يتذكر كان عليك أن تختار ما اذا كان ل هذا العفريت أو لجميع العفاريت. حسنا، كل العفاريت هو مجرد أوضح طريقة للقول العالمي. نعم؟ آه، سؤال جيد حقا. حتى أذكر أنه في النسخة الأولى للغاية من قانون بلدي، عندما كنت بشكل غير صحيح أعلنت وتعريف ن في خط التسعة - أنا أعلن ذلك كمتغير وأعطى ذلك قيمة مع عامل التعيين - هذا أعطاني اثنين من الأخطاء. واحد، وحقيقة أن ن لم تستخدم، والثاني، أنه في السطر 11 أنه فقط لم يكن المعلنة. وبالتالي فإن أول واحد لم أكن معالجة في ذلك الوقت. أنها ليست بدقة خطأ بإعلان متغير ولكن عدم استخدامها. ولكن واحدة من الأشياء التي قمنا بها في الجهاز CS50، عمدا، تربويا، ونحن قد صعد ل توقعات المترجم لجعل تأكد أنك تفعل أشياء وليس فقط صحيح ولكن في الحقيقة بشكل صحيح. لأنه إذا كنت معلنا متغير مثل ن وأبدا استخدامه، أو استخدامه بشكل صحيح، ثم ما هو يفعل هناك؟ حقا أنه يخدم أي غرض. وأنه من السهل جدا على مر الزمن، وإذا كنت لم يتم تكوين جهاز الكمبيوتر الخاص بك في بهذه الطريقة، أن يكون مجرد رمز لديها قليلا بقايا هنا، بقايا هناك. ثم بعد أشهر كنت ننظر إلى الوراء و كنت مثل، لماذا هذا الخط من رمز هناك؟ واذا لم يكن هناك سبب وجيه، فإنه لا ينفعك أو زملائك على الطريق لديك ل تتعثر أكثر من ذلك الحين. بوصفها جانبا، حيث هو التي تأتي من؟ حسنا، أذكر أنه في كل مرة ونحن تجميع البرنامج، كل هذه الاشياء هو تتم طباعتها. ولذا فإننا سوف نعود إلى هذا. ولكن مرة أخرى، وجعل هو الأداة التي بأتمتة عملية تجميع من قبل تشغيل المترجم الفعلي دعا رنة. هذا الشيء، وسنرى في نهاية المطاف، لديها علاقة مع التصحيح مع خاص دعا برنامج المصحح. هذا له علاقة مع تحسين كود - أكثر على ذلك في المستقبل. الأمراض المنقولة جنسيا = C99 - هذا يعني فقط استخدام إصدار 1999 لقد C. C حول لفترة أطول من ذلك، ولكن جعلوا بعض لطيفة يتغير منذ السنوات ال 10 زائد. وهنا تلك ذات الصلة. نحن نقول أن تجعل أي شيء في السابق كان يمكن أن يكون تحذيرا خطأ منع الطالب من تجميع. وسائل جدار تفعل ذلك ل مجمله مجموعة من الأشياء، وليس ذات الصلة لمجرد المتغيرات. ثم اسمحوا لي أن انتقل إلى في نهاية هذا الخط. وهذا، أيضا، سنقوم في نهاية المطاف أعود ل. هذا ومن الواضح أن اسم ملف أنا تجميع. هذا يشير إلى اسم الملف انا إخراج كاسم من برنامجي runnable. هذا يعني-lcs50 مجرد استخدام CS50 مكتبة وأي الأصفار وتلك التي كتب من موظفين وجمعت في وقت سابق هذا العام، ودمج لهم في برنامجي. وأحد يعرف ماذا ل م هو؟ انها مكتبة الرياضيات، والذي هو هناك فقط حتى لو كنت لا تفعل أي الرياضيات. لقد قدمت للتو تلقائيا لجعل لنا من قبل. حسنا، اسمحوا لي أن تفعل المثال الآخر هنا من خلال فتح ملف جديد. واسمحوا لي أن حفظ هذا واحد كما string.c. اتضح أن ما نتحدث عن البيانات أنواع اليوم، هناك أكثر يجري تحت غطاء محرك السيارة من رأيناه حتى الآن. لذلك اسمحوا لي أن تفعل بسرعة برنامج سريع. وتشمل stdio.h. وسوف يوفر ذلك. وكما تعلمون، اسمحوا لي أن لا تجعل نفس الخطأ مرارا وتكرارا. وتشمل cs50.h. واسمحوا لي أن تمضي قدما الآن والقيام كثافة العمليات الرئيسية (الفراغ). والآن أنا ببساطة تريد أن تفعل برنامج أن يفعل هذا - تعلن سلسلة ودعا ليالي والحصول على سلسلة من المستخدم. واسمحوا لي أن تفعل قليلا تعليمات هنا - من فضلك أعطني سلسلة - حتى المستخدم يعرف ما يجب القيام به. ثم إلى هنا دون هذا، أريد أن أفعل ما يلي - لكثافة العمليات ط يحصل الصفر. مرة أخرى، علماء الكمبيوتر عادة بدء العد من الصفر، ولكن استطعنا جعل هذا واحد إذا أردنا حقا. الآن انا ذاهب الى القيام به هو أقل ط من طول سلسلة من ليالي. لذلك strlen - S-T-R-L-E-N - مرة أخرى، انها موجزة لأنه من الأسهل لكتابة، على الرغم من انها خفي قليلا. التي هي وظيفة لدينا لا تستخدم ولكن قبل أن يفعل ذلك حرفيا - إرجاع رقم يمثل بالنسبة لي طول السلسلة أن المستخدم بكتابتها. إذا كانت كتبته في مرحبا، فإنه العودة لأن هناك خمسة خمسة رسائل في مرحبا. ثم، في كل تكرار لل هذه الحلقة، وأنا زائد زائد. ذلك مرة أخرى، وهو معيار بناء حتى لو كنت غير مريحة جدا جدا أو على دراية به بعد. ولكن الآن على كل التكرار من هذه الحلقة، لاحظ ما أنا ذاهب الى القيام به. أريد أن أذهب إلى الأمام والطباعة من حرف واحد - حتى٪ ج ن مائل على سطر جديد. وبعد ذلك، كنت أعرف ما أريد القيام به؟ مهما كانت كلمة هو أن يكتب المستخدم في مثل مرحبا، أريد أن طباعة H-E-L-L-O، حرف واحد في كل سطر. وبعبارة أخرى، أريد الحصول على الأحرف الفردية في سلسلة، حيث حتى الآن سلسلة للتو كانت سلسلة من الأحرف. واتضح يمكنني القيام به ليالي، وقوس، ط، وقوس وثيقة، وثيقة قوسين، منقوطة. وأنا لا يجب أن نفعل شيئا آخر. انها في ملف يسمى string.h وأعلن أن strlen. حتى لو كنت ترغب في استخدام هذه الوظيفة، ولست بحاجة للقول المترجم، نتوقع لاستخدامها. الآن اسمحوا لي المضي قدما وجعل برنامج يسمى السلسلة. نقطة، مائل، السلسلة. من فضلك أعطني السلسلة. سأذهب إلى الأمام واكتبه. مرحبا، في كل مباراة دولية، أدخل. والآن لاحظ لقد طبع هذا حرف واحد تلو الآخر. وبالتالي فإن التفاصيل الجديدة هنا هو أن سلسلة، في نهاية اليوم، يمكن أن يكون الوصول عن طريق الفردية و الشخصيات من خلال إدخال مربع قوس التدوين. وذلك لأن سلسلة تحت غطاء محرك السيارة هو في الواقع سلسلة من حرفا. ولكن ما هو أنيق عنها هو في ذاكرة الوصول العشوائي في الكمبيوتر - لجنة الهدنة العسكرية، وأجهزة الكمبيوتر، كل ما هو - انهم نسخ حرفيا إلى العودة إلى الوراء - H-E-L-L-O - على المستوى الفردي، المتاخمة بايت في الذاكرة. حتى إذا كنت ترغب في الحصول على مثل هذه الثامن بايت، وهو في هذه الحلقة سيكون صفر قوس، قوس واحدة، وقوس اثنين، قوس ثلاثة، أربعة قوس - هذا الصفر فهرستها حتى خمسة - التي من شأنها أن تطبع H-E-L-L-O على السطر الخاص به. الآن، ودعابة، واسمحوا لي أن تظهر لك أنواع الأشياء عليك أن تكون في نهاية المطاف قادرا على فهم، على الأقل مع بعض المقربين تبحث. لأحد، ما كنا المدرجة في اليوم أمثلة، إذا كنت ترغب، هو في الواقع واحدة من الفرار الأولى لفون. نصائح والخدع يعني تكسير الهاتف بحيث يمكنك فعلا استخدامها على الناقل مختلفة أو تثبيت البرمجيات الخاصة بك. وستلاحظ هذا يبدو تماما خفي، على الأرجح. ولكن ننظر في هذا الأمر. كان فون متصدع على ما يبدو مع لحلقة، وإذا كان الشرط، وهو آخر حالة، وحفنة من الوظائف لم نشهد. ومرة أخرى، وسوف لا في وهلة الأولى ربما فهم كيف يعمل هذا. ولكن كل شيء أننا نوع من اتخاذ من الأمور المسلم بها في حياتنا الحديثة يميل فعلا للحد حتى لبعض من هذه الأسس كنا تبحث في. اسمحوا لي المضي قدما وفتح واحد برنامج آخر، holloway.c. وحتى هذا، أيضا، هو شيء لك يجب أن لا أعرف حقا. حتى أي من الموظفين أو أستطع ربما هذا الرقم من خلال النظر في ذلك لأن هذا هو رمز لشخص ما الذي قدم إلى ما هو المعروف تاريخيا باعتبارها غموض C مسابقة، حيث يمكنك كتابة برنامج أن يجمع ويدير ولكن ذلك هو لعنة يمكن خفي لا الإنسان فهم ما انها تنوي القيام به حتى أنها فعلا تشغيله. ذلك في الواقع، إذا نظرت في هذه رمز، أرى التبديل. أرى الرئيسي. أرى هذه الأقواس المربعة مما يعني نوع من صفيف. لا تريد أي شخص أن يخمن ما هذا البرنامج فعلا لا إذا قمت بتشغيل هولواي؟ نعم. موافق. أحسنت. وذلك فقط من الموظفين وأنا لا أستطيع الرقم ما تفعل هذه الأشياء. والآن أخيرا، اسمحوا لي أن المضي قدما وفتح البرنامج الآخر. هذا واحد - مرة أخرى، ونحن سوف تجعل شفرة المصدر على شبكة الإنترنت - وهذا واحد فقط نوع من جميلة للنظر في. هو ضرب كل ما فعلت شريط الفضاء قليلا جدا. ولكن هذا هو رمز حقيقي. لذلك إذا كنت تعتقد أن جميلة، وإذا كنا فعلا تشغيل هذا في موجه، في نهاية المطاف سوف نرى كيف قد تفعل أشياء من هذا القبيل. ولذا فإننا سوف أترك لكم على تلك المذكرة ونراكم يوم الاربعاء. [عزف الموسيقى] المتحدث 2: في CS50 المقبل، وTFS مرحلة تمرد. SPEAKER 3: وأضاف هناك. الحصول عليه! [عزف الموسيقى]