[موسيقى] ديفيد جيه مالان: كل الحق، وهذا هو CS50. وهذا هو أسبوع واحد. لذلك أذكر أن آخر مرة في الأسبوع الصفر، ركزنا على التفكير الحسابي. ونحن انتقلت من أن ل الصفر، برمجة رسومية لغة من أصدقائنا في مختبر معهد ماساتشوستس للتكنولوجيا وسائل الإعلام. ومع خدش، لم نستكشف أفكار مثل وظائف، والظروف، والحلقات، والمتغيرات، وحتى أحداث، والمواضيع، وأكثر من ذلك. واليوم، ونحن في طريقنا ل الاستمرار في استخدام تلك الأفكار، وحقا نقلهم ل منح، ولكن ترجمتها إلى لغة أخرى تعرف باسم جيم الآن، C هي لغة أكثر تقليدية. انها مستوى أقل لغة، اذا صح التعبير. انها نصية بحتة. وذلك لأول وهلة، انها كل ذاهب للبحث خفي بدلا إذا كنت قد برمجت لم يحدث من قبل. ونحن في طريقنا ل شبه كولون، والأقواس، والأقواس المعقوفة، وأكثر من ذلك. ولكن ندرك أنه حتى على الرغم من أن بناء الجملة على وشك أن ننظر قليلا غير مألوف لمعظمكم، انظر الماضي أن. ونحاول أن نرى الأفكار التي هي، في الواقع، مألوفة، لأن هنا في أسبوع واحد ما سنبدأ القيام به هو للمقارنة، في البداية، خدش مقابل C. لذلك، على سبيل المثال، أذكر أننا عندما تنفيذ أول من برامجنا آخر مرة، كان لدينا كتلة التي بدت شيئا قليلا مثل this-- عندما النقر العلم الأخضر، ومن ثم كان لدينا واحد أو أكثر من قطعة اللغز تحتها، في هذه الحالة، ويقول، مرحبا العالم. لذلك، في الواقع، في خدش، عندما تنقر على هذا العلم الأخضر لتشغيل برنامج بلدي، لذلك في الكلام، وهذه هي الكتل التي الحصول على تنفيذها، أو التشغيل. وعلى وجه التحديد، خدش وقال، مرحبا، العالم. الآن، أنا يمكن أن يكون محدد كلمات مختلفة هنا. ولكن سنرى ذلك، في الواقع، العديد هذه blocks-- والواقع، في C يمكن أن يكون العديد functions-- parametrized أو حسب الطلب أن تفعل أشياء مختلفة. في الواقع، في C إذا كنا تريد تحويله، الآن، هذا البرنامج خدش لهذه اللغة الأخرى، ونحن في طريقنا لكتابة شيئا قليلا من هذا القبيل. منحت، وهناك بعض غير مألوف تركيب هناك على الأرجح، الباحث، والأقواس، وباطلة. لكن printf-- حتى ولو كنت من شأنه أعتقد أنه سيكون مجرد الطباعة. ولكن الطباعة وسائل الطباعة تنسيق، كما سنرى قريبا. هذا وسوف طباعة حرفيا إلى الشاشة مهما كان هو داخل تلك الأقواس، التي بالطبع في هذه الحالة، مرحبا العالم. ولكن ستلاحظ بعض الآخر لغوي، وبعض علامات الاقتباس المزدوجة، أن الأقواس في النهاية، ومنقوطة، وما شابه ذلك. لذلك هناك القليل من النفقات العامة، إذا جاز التعبير، على حد سواء معرفيا ونحويا، وأننا ذاهبون لدينا لنتذكر قبل فترة طويلة. ولكن ندرك أنه مع الممارسة، هذا سوف تبدأ في القفز في لكم. في الواقع، دعونا نركز على أن واحدا specifically-- وظيفة في هذه الحالة، ويقول مرحبا العالم. أقول ذلك هو وظيفة. مرحبا العالم به المعلمة، أو حجة، والتخصيص لها. والتكافؤ في C فقط سيكون هذا الخط واحد هنا، حيث printf ما يعادل، ويقول، سلسلة نقلت مزدوجة، مرحبا العالم ما يعادل، بطبيعة الحال، ما هو في المربع الأبيض هناك. ون مائل، على الرغم قليلا غريب وغائب من الصفر، ببساطة سوف يكون له تأثير سنقوم نرى في الكمبيوتر، مثل بلدي ماك أو جهاز كمبيوتر، من مجرد نقل المؤشر إلى السطر التالي. انها مثل ضرب أدخل على لوحة المفاتيح. ولذا فإننا سوف نرى ذلك مرة أخرى قبل مرور وقت طويل. ولكن أولا، دعونا نلقي نظرة على هذا مثال آخر في حالة التكرار. كان لدينا هذه الحلقة إلى الأبد آخر مرة، التي كانت سلسلة من قطع اللغز أن فعلت شيئا حرفيا forever-- في هذه الحالة، أقول، العالم مرحبا، مرحبا العالم، مرحبا العالم، مرحبا العالم. حتى انها حلقة لا نهائية حسب التصميم. في C، إذا كنا نريد لتنفيذ هذا نفس الفكرة، ونحن قد ببساطة القيام بذلك. بينما صحيح، printf مرحبا world-- الآن في حين، فقط لغويا، نوع من تستحضر فكرة القيام شيء مرة أخرى، ومرة ​​أخرى، ومرة ​​أخرى، وإلى متى؟ حسنا، أذكر true-- أن صحيح هو مجرد أو واحد. وصحيح هو، بطبيعة الحال، دائما صحيحا. لذلك فمن نوع من معنى بيان لمجرد أن يقول صحيح. ولكن في الواقع، وهذا هو متعمد، لأنه إذا كان صحيحا هو مجرد صحيحا دائما، من حين صحيح يعني فقط، إذا كان قليلا غير مباشرة، أن الأسطر التالية من التعليمات البرمجية بين تلك الأقواس المجعدة يجب تنفيذ فقط مرة أخرى، ومرة ​​أخرى، ومرة أخرى، ولم تتوقف أبدا عن الواقع. ولكن إذا كنت لا تريد الخاص بك حلقة لتتوقف، ونحن لم آخر مرة مع شيء من هذا القبيل هذا، كرر 50 مرات التالية، في C يمكننا أن نفعل الشيء نفسه مع ما هو ودعا لloop-- الكلمة لا يجري الوقت، ولكن ل. ومن ثم لدينا بعض الجملة جديد هنا، مع كثافة العمليات ط يساوي 0، أنا أقل من 50 عاما، ط ++. وسوف نعود إلى ذلك. ولكن هذا هو ببساطة كيف كنا ترجمة مجموعة من القطع خدش إلى مجموعة من خطوط C من التعليمات البرمجية. وفي الوقت نفسه، والنظر في المتغيرات. و، في الواقع، نحن فقط رأى واحد قبل لحظة. وفي حالة خدش، إذا نحن أراد أن يعلن متغير يسمى ط لأنني يكون صحيحا، مجرد رقم، ونحن نريد أن تعيينها إلى بعض القيمة، سوف نستخدم هذا البرتقال منع here-- وضع ط 0. وسنرى اليوم و بعدها، تماما مثل الاسبوع الماضي، المبرمجين تفعل دائما تقريبا بدء العد من الصفر، حقا بالإقناع. ولكن أيضا لأن استدعاء من مناقشتنا للثنائي، أصغر عدد يمكنك تمثل مع أي عدد من البتات هو مجرد الذهاب إلى تكون 0 في حد ذاته. وهكذا سنبدأ بشكل عام تهيئة حتى المتغيرات جهدنا ل0. وفي C على أن تحذو حذوها، ونحن في طريقنا إلى القول كثافة العمليات لعدد صحيح، أنا فقط من الاتفاقية. كان يمكن أن يسمى هذا المتغير أي شيء أريد، مثلما هو الحال في خدش. ثم يساوي 0 المتنازل فقط قيمة 0 من الحق ووضعه في متغير، أو تخزين الحاويات هناك، على اليسار. ومنقوطة كما سنقوم see-- و رأيناه عدد قليل من هذه already-- يعني فقط نهاية الفكر. انتقل إلى القيام بشيء آخر على الخطوط التي تتبع. الآن، ماذا عن التعبيرات المنطقية؟ أذكر أنه في خدش، كانت هذه العبارات التي إما أن تكون صحيحة أو أسئلة false--، حقا، التي إما أن تكون صحيحة أو خاطئة. حتى في حالة الصفر، ونحن قد طرح سؤال بسيط مثل هذا، هو أنا أقل من 50؟ لذلك أنا، مرة أخرى، هو عدد صحيح. ربما نحن استخدامه في برنامج سكراتش لمتابعة النتيجة أو شيء من هذا القبيل. لذلك هذا النحو هنا في سكراتش يعني فقط، هو أنني أقل من 50؟ حسنا، لحسن الحظ، هناك شيء بسيطة في C. وترجمة، هذا كنا نقول ببساطة أنا أقل من 50، وذلك باستخدام مفتاح مألوف على لوحة المفاتيح. وفي الوقت نفسه، إذا أردت أقول شيئا أكثر عمومية، مثل، حسنا، هو العاشر أقل من y حيث كل x و y هي نفسها المتغيرات؟ يمكننا أن نفعل نفس الشيء في C، طالما قمنا إنشاء هذه المتغيرات بالفعل. وسنرى كيف ل فعل ذلك قبل فترة طويلة. ونحن نقول ببساطة س أقل من ذ. لذلك كنت بدأت ترى بعض أوجه التشابه. وهؤلاء الناس الذين جعلوا كانت نقطة الصفر بالتأكيد مستوحاة من بعض هذه الأفكار الأساسية. وسترى هذا النوع من بناء الجملة في كثير languages-- ليس فقط للخدش، وليس فقط C، ولكن بيثون، وجافا سكريبت، و لغات أخرى لا يزال. دعونا النظر في بناء آخر من C، فكرة وجود الشرط، تفعل شيئا مشروط. إذا كان هناك شيء غير صحيح، القيام بذلك. إذا كان هناك شيء آخر هو الصحيح، أن تفعل ذلك. انها نوع من البرمجة يعادل مفترق الطريق. ربما انها اتجاهين شوكة، ثلاثي شوكة، أو أكثر. وفي خدش، قد يكون لدينا شهدت شيئا من هذا القبيل. لذلك هذا هو واحد كبير واحد. ولكن النظر في النسبية بساطة المنطق. إذا كان x أقل من ذ، ثم يقول x هو أقل من ذ، إلا إذا كان x أكبر من ذ، ثم يقول x هو أكبر من ذ. وبعد ذلك، منطقيا، إذا كنت تعتقد أن العودة إلى سكراتش أو مجرد الخاص بك الحدس البشري الخاص، حسنا، إذا كان x ليس أكبر من ذ، و x ليس أقل من ذ، ثم بالطبع س سوف يكون مساويا لذ. حتى في هذه الحالة، التي تعشش تلك الكتل خدش، يمكننا تحقيق ثلاثة طريقة شوكة في الطريق؟ وفي الوقت نفسه، إذا كنا نريد أن فعل ذلك في C، ولكنه يمكن القول يتطلع simpler-- قليلا على الأقل بمجرد الحصول على دراية بناء الجملة. إذا كان x أقل من ذ، printf x هو أقل من ذ. آخر إذا كان x أكبر من ذ، printf x هو أكبر من ذ. آخر printf س يساوي y-- و، مرة أخرى، مع تلك مائل ينتهي فقط بالنسبة لأولئك خطوط جديدة بحيث إذا كان ل ركض في الواقع هذا النوع من البرامج انها ستتحرك فقط المؤشر في نهاية المطاف إلى السطر التالي من الشاشة. الآن، وكان في الوقت نفسه خدش الآخر المزيد من الميزات المتطورة، فقط بعض منها ونحن في طريقنا ل نقل في البداية الى عالم C. واحد منهم كان يسمى القائمة في خدش. وكان هذا خاص نوع متغير يسمح لك لتخزين الأشياء متعددة في مرة أخرى، إلى الوراء، إلى الوراء، إلى الخلف. في C، ولكنه لم يكن لديك القوائم، في حد ذاته، ولكن شيئا التي هي أعم دعا المصفوفات، على الرغم من أننا سوف أعود لاحقا في هذا الفصل الدراسي إلى النظر في شيء يسمى القائمة، أو حقا قائمة مرتبطة. ولكن الآن، والأقرب ما يعادلها في C بالنسبة لنا سيكون شيئا دعا مجموعة. ومجموعة هي مجرد نوع خاص من متغير الذي يسمح لك لتخزين البيانات إلى الوراء، إلى الوراء، إلى الوراء، إلى الوراء. وبالفعل، في خدش، إذا أردنا الوصول إلى العنصر الأول من مجموعة أو وlist-- وانا ذاهب الى نسميها، من الاتفاقية، ARGV، حجة ناقلات، ولكن أكثر على ذلك قبل فترة طويلة. إذا كنت ترغب في الحصول على العنصر الأول من ARGV، في العالم من الصفر يمكنك القيام به في الواقع عادة بدء العد من 1. ولذا فإنني قد تحصل على البند 1 من ARGV. هذا فقط كيف ينفذ معهد ماساتشوستس للتكنولوجيا فكرة القوائم. ولكن في C، أنا ذاهب ل أكثر ببساطة أقول، ARGV، ومرة أخرى هو اسم بلدي list-- أو أن تكون واضحة، صفيف. وإذا أريد لأول مرة العناصر، وانا ذاهب لاستخدام الأقواس المربعة، والتي قد لا يستخدم كثيرا تحت لوحة المفاتيح. ولكن 0 مجرد وسيلة، والحصول على لي أولا. حتى في بعض الأحيان وكما الوقت يمر، ونحن في طريقنا لتبدأ في رؤية هذه الانقسامات بين الصفر و C، حيث يستخدم خدش واحد. نحن في C استخدام 0 هنا. ولكن سترى بسرعة بمجرد فهم أسس كل لغة، أن هذه الأمور تبدأ للحصول على كل أكثر مألوفة من خلال الممارسة والتطبيق. لذلك دعونا ننظر في الواقع الآن في البرنامج. هنا يجب أن يكون أول لدينا C الشفرة المصدرية للبرامج الكاملة. وبرنامج ونحن في طريقنا لتقديم للنظر فيها هو واحد وهذا ما يعادل لأنه في وقت سابق خدش قطعة. حتى هنا، لدينا ما هو يمكن القول إن أبسط برنامج C يمكنك أن تكتب في الواقع لا شيء. الآن، ونحن سوف ننظر في الماضي، في الوقت الراهن، وتشمل، io.h القياسية، وهذه زاوية بين قوسين، وكثافة، والفراغ، والأقواس المعقوفة، وما شابه ذلك. ودعونا نركز على ما، على الأقل بشكل حدسي، قد القفز في لكم بالفعل. في الواقع، الرئيسي، وأنا لا تعرف بالضرورة ما هو هذا، ولكن مثل الكثير من خدش كان ذلك عندما العلم الأخضر النقر قطعة اللغز، فهل C كلغة برمجة الحصول على قطعة الرئيسي من التعليمات البرمجية التي يعدم افتراضيا. و، في الواقع، انها سوف حرفيا ليتم استدعاؤها الرئيسية. الرئيسية لذلك هي وظيفة. وانها وظيفة خاصة موجود في C أنه عند تشغيل البرنامج، فمن الرئيسي الذي يحصل تديرها افتراضي. في العالم من الصفر، وكان من عادة عندما علم أخضر النقر التي حصلت على تشغيل افتراضيا. وفي الوقت نفسه، لقد رأيت هذا من قبل، printf أو طباعة تنسيق، وهذا ستكون وظيفة التي تأتي مع C، جنبا إلى جنب مع مجموعة كاملة من الآخرين، هذه الإرادة من الوقت والوقت مرة أخرى، من أجل القيام بالضبط وكما يوحي اسمها، طباعة شيء. ماذا نريد لطباعة؟ حسنا، سنرى أن قبل شخصيات أرفق مثل these-- مرحبا العالم، ن مائل في التنصيص، يمكننا ان نقول printf بالضبط ما للطباعة على الشاشة. ولكن من أجل القيام ذلك، ونحن للأسف تحتاج إلى أن تأخذ ما هو خفي بالفعل لنا البشر، ولكن على الأقل أنها إلى حد ما readable-- حادة تشمل io.h القياسية، الباحث، الرئيسي، باطل، printf، جميع السحرية التعزيم نحن فقط رأيت على الشاشة. ولكن لدينا فعلا ل يذهب أكثر غامضة حتى الآن. نحتاج أولا إلى ترجمة التعليمات البرمجية أن نكتب إلى رمز الجهاز. ونذكر من الأسبوع الماضي أن الآلات، على الأقل تلك التي نعرفها هنا، في نهاية اليوم فقط فهم أصفار ومنها. وإلهي، إذا كان لدينا لكتابة هذه الأصفار ومنها إلى البرنامج فعلا، انه سيكون بسرعة شديدة جدا تأخذ متعة من أي شيء. ولكن تبين، في الأسبوع الماضي، أن هذه الأنماط من الآحاد والأصفار و يكون مجرد معنى خاص. في سياقات معينة، لأنها قد تعني الأرقام. في بعض السياقات، لأنها قد تعني خطابات، أو الألوان، أو أي عدد من تجريدات أخرى هناك عليها. ولكن مثلما كان جهاز الكمبيوتر الخاص بك وحدة المعالجة المركزية، وحدة المعالجة المركزية، أو أدمغة داخل جهاز الكمبيوتر الخاص بك. انها عادة ما تكون إنتل في الداخل، لأن هذا واحدة من أكبر الشركات أن يجعل وحدات المعالجة المركزية لأجهزة الكمبيوتر. حسنا، وحدات المعالجة المركزية إنتل وغيرها ببساطة قرروا مقدما أن أنماط معينة من الأصفار و يجب منها تعني أشياء محددة. أنماط معينة من الآحاد والأصفار و يعني، طباعة هذا إلى الشاشة، أو إضافة هذين الرقمين، أو طرح هذين الرقمين، أو نقل هذه القطعة من البيانات من ذاكرة جهاز الكمبيوتر الخاص بي هنا، أو أي عدد من مستوى منخفض جدا الآخرين، ولكن من المفيد في نهاية المطاف، والعمليات. ولكن، لحسن الحظ، نحن البشر لا تسير في حاجة إلى أن نعرف هذا المستوى من التفصيل. في الواقع، تماما مثل المرة السابقة، حيث كنا تستخرج مرة أخرى، ومرة ​​أخرى، ومرة ​​أخرى، المبنى من مستوى منخفض جدا البدائيون مثل الآحاد والأصفار و لمفاهيم مستوى أعلى مثل الأرقام والحروف، والألوان، وأكثر من ذلك، لذلك يمكننا كما المبرمجين الوقوف على أكتاف الآخرين الذين جاءوا قبل لنا واستخدام البرمجيات التي الآخر وقد كتب الناس قبل us-- وهي برامج تسمى المجمعين. C هي لغة عادة ما يتم تصنيف، وهو ما يعني تحويلها من كود المصدر إلى رمز الجهاز. على وجه الخصوص، ما يعني هذا وأنه إذا كنت قد حصلت على المصدر التعليمات البرمجية التي أنت نفسك الكتابة، ونحن قريبا سوف في لحظة فقط على الشاشة، وتريد تحويله في نهاية المطاف إلى آلة code-- تلك الأصفار وتلك التي فقط الخاص بك ماك أو جهاز الكمبيوتر الخاص بك understands-- كنت قد حصلت على أول تغذية أن الشيفرة المصدرية في مثل مدخلات خاص دعا برنامج مترجم، خرج منها نحن سنرى هو رمز الجهاز. وبالفعل، آخر مرة تحدثنا حول، حقا، في نهاية المطاف، حل المشاكل. كنت قد حصلت على المدخلات. وكنت قد حصلت على المخرجات. وكنت قد حصلت على بعض نوع خوارزمية في الوسط. يمكن خوارزميات يكون بالتأكيد تنفذ في مجال البرمجيات، وكما رأينا في شبة الكود الأسبوع الماضي وكما سنرى مع الرمز الفعلي هذا الاسبوع. وهكذا مترجم حقا فقط لديه مجموعة من الخوارزميات داخل من أن تعرف كيف تحويل الكلمات الخاصة، مثل الرئيسي، وprintf، وغيرها من الجهات التي نحن فقط رأى في أنماط من الأصفار و تلك التي إنتل في الداخل وغيرها من وحدات المعالجة المركزية يفهم الواقع. فكيف نفعل هذا؟ أين نحصل على المترجم؟ معظمنا هنا لديك ماك أو جهاز كمبيوتر. وأنت تعمل بنظام التشغيل Mac OS، أو ويندوز، أو لينكس، أو سولاريس، أو أي عدد آخر أنظمة التشغيل. وبالفعل، استطعنا الخروج على شبكة الإنترنت وتحميل مترجم لنظام التشغيل Mac الخاص بك أو جهاز الكمبيوتر الخاص بك لنظام التشغيل الخاص بك معين. ولكن علينا أن نكون جميعا على صفحات مختلفة، إذا جاز التعبير. سيكون لدينا قليلا تكوينات مختلفة. وكانت الأمور لا تعمل كل نفس. و، في الواقع، في هذه الأيام الكثير منا لا تستخدم البرنامج الذي يعمل فقط على أجهزة الكمبيوتر المحمولة لدينا. بدلا من ذلك، ونحن نستخدم شيئا مثل مستعرض يسمح لنا الوصول إلى شبكة الإنترنت التطبيقات في السحابة. وبعد هذا الفصل الدراسي، وسوف نفعل ذلك بالضبط. سنكتب التطبيقات أو البرنامج باستخدام code-- لا C، ولكن لغات أخرى مثل بايثون و JavaScript-- التي يتم تشغيلها في السحابة. وللقيام بذلك، ونحن أنفسنا خلال الفصل الدراسي سوف تستخدم في الواقع مقرها سحابة البيئة المعروفة باسم CS50 IDE. هذا هو البرمجة على شبكة الإنترنت البيئة، أو التنمية المتكاملة بيئة، بيئة تطوير متكاملة، التي بنيت فوق بعض البرمجيات مفتوحة المصدر يسمى الغيمة 9. وحققنا بعض التربوية التبسيط إليها وذلك لإخفاء ملامح معينة في الأسابيع الأولى أننا لسنا في حاجة، وبعد ذلك يمكنك كشف أمرهم ويفعلون أكثر أي شيء تريده مع البيئة. ويسمح لنا أيضا، ل قبل تثبيت برامج معينة. أشياء مثل ما يسمى CS50 مكتبة، والذي سنرى قريبا يقدم لنا في C مع بعض وظائف إضافية. حتى إذا ذهبت إلى، في نهاية المطاف، CS50.io، سيطلب منك تسجيل الدخول، وبمجرد الانتهاء من ذلك، وخلق حساب مجانا، سوف تكون قادرة على الوصول إلى البيئة التي تبدو تماما مثل هذا. الآن، وهذا هو في الوضع الافتراضي. كل شيء هو لطيف و مشرق على الشاشة. الكثير منا لديهم عادة العمل على قطعة CS50 هذا في وقت متأخر جدا من الليل. وحتى بعض من قد تفضل تحويلها إلى الوضع الليلي، إذا جاز التعبير. لكن، في نهاية المطاف، ما كنت الذهاب لرؤية داخل CS50 IDE هو ثلاثة areas-- متميزة منطقة على اليسار حيث الملفات ستكون في سحابة، وهي منطقة في أعلى يمين حيث التعليمات البرمجية ستكون قابلة للتحرير. عليك أن تكون قادرا على فتح علامات الفردية لأي برنامج أن تكتب في هذا الفصل الدراسي داخل من أن أعلى الزاوية اليمنى. ثم الأكثر arcanely، وبعد بقوة، سيكون هذا الشيء في أسفل المعروفة باسم نافذة الصالة. هذا هو المدرسة القديمة واجهة سطر الأوامر، أو CLI، التي تسمح لل لك لتنفيذ الأوامر على computer-- في هذه الحالة، الكمبيوتر في cloud-- أن تفعل أشياء مثل ترجمة التعليمات البرمجية من التعليمات البرمجية المصدر إلى رمز الجهاز، لتشغيل البرامج الخاصة بك، أو لبدء الخاص بك خادم الويب، أو الوصول إلى قاعدة البيانات الخاصة بك، وأي عدد من التقنيات الأخرى أننا سوف تبدأ في استخدام قبل وقت طويل. ولكن للوصول إلى هناك، ونحن ستكون لدينا في الواقع الذهاب على الانترنت والبدء في اللعب. وأن نفعل ذلك، دعونا أولا بدء ترقيع الرئيسية، وكتابة الجزء الرئيسي من هذا البرنامج. ودعونا استخدام هذه الوظيفة printf، والتي كنا في وقت سابق، ببساطة أن أقول شيئا. حتى هنا أنا بالفعل داخل IDE CS50. لقد دخولك مسبقا. وأنا مليئة فحص النافذة. وهكذا، في نهاية المطاف، ل أيضا في مشاكل المقبلة سوف تتبع خطوات مماثلة ستقدم الوثائق الفورية. لذلك أنت لا تحتاج للقلق حول استيعاب كل خطوة فنية صغيرة أن أفعل هنا اليوم. ولكن ستحصل على الشاشة مثل هذا. أنا يحدث ليكون في الوضع الليلي. ويمكنك سطع كل شيء يصل عن طريق تعطيل الوضع الليلي. وفي نهاية اليوم، وأنت تسير لرؤية هذه أهم ثلاثة areas-- الملف المتصفح في اليسار، وعلامات التبويب كود يصل أعلى، وإطار المحطة الطرفية في القاع. اسمحوا لي أن المضي قدما في إرسال أول برنامج لي. انا ذاهب للذهاب استباقي إلى ملف، حفظها وحفظ ملف بصفتي hello.c. في الواقع، من خلال اتفاقية، أي أننا البرنامج الكتابة وهذا ما كتب في لغة C يجب أن تكون تسمية شيء نقطة ج، من خلال الاتفاقية. لذلك أنا ذاهب لتسميته hello.c، ل أريد فقط أن أقول مرحبا إلى العالم. الآن انا ذاهب للتكبير من ثم انقر فوق حفظ. وكل ما لدي هنا الآن هو علامة تبويب الذي يمكنني البدء في كتابة التعليمات البرمجية. هذا لن ترجمة. هذا لا يعني شيئا. وحتى لو اعتنقت هذا إلى أصفار ومنها، وحدة المعالجة المركزية وستكون لدينا لا فكرة عما يجري حولها. ولكن إذا أنا أكتب الخطوط التي لا تطابق مع جيم C كائن conventions--، مرة أخرى، هذا language-- مع جملة مثل هذا، printf مرحبا world-- ولدي حصلت مريحة مع تفعل هذا مع مرور الوقت. لذلك أنا لا أعتقد أنني قدمت أي أخطاء مطبعية. ولكن، دائما، أول جدا مرة كنت تفعل هذا، وسوف. وما أنا على وشك أن تفعل قد جدا كذلك لا عمل لك في المرة الأولى. وهذا موافق تماما، لأنه الآن حق لك قد نرى مجموعة كبيرة من حداثة، لكن مع مرور الوقت بمجرد الحصول على دراية مع هذه البيئة، و هذه اللغة، وغيرها، عليك أن تبدأ في رؤية الأشياء التي إما أن تكون صحيحة أو غير صحيحة. وهذا هو ما زملاء التدريس وبطبيعة الحال مساعدين الحصول على جيد جدا في أكثر من مرة، و اكتشاف الأخطاء أو الخلل في التعليمات البرمجية. ولكن أزعم أن هناك لم الخلل في هذا القانون. لذلك أريد الآن لتشغيل هذا البرنامج. الآن في بلدي ماكنتوش أو كمبيوتر شخصي، وأنا في هذه العادة من الرموز النقر المزدوج عندما كنت ترغب في تشغيل بعض البرامج. ولكن هذا ليس النموذج هنا. في هذه البيئة، وهو CS50 IDE. نحن تستخدم التشغيل نظام يسمى لينكس. لينكس يذكرنا آخر نظام التشغيل، والمعروفة عموما كما يونكس. ولينكس هو معروف بشكل خاص ل وجود سطر الأوامر البيئة، CLI. الآن، نحن باستخدام محددة نكهة لينكس تسمى أوبونتو. وأوبونتو هو مجرد نسخة معينة من لينكس. ولكن هذه لينكس في هذه الأيام تفعل في الواقع تأتي مع واجهات المستخدم الرسومية. واحد يحدث لأننا تستخدم هنا هو قائم على شبكة الإنترنت. ولذلك فإن هذا قد تبدو حتى تختلف قليلا من شيء أنت نفسك قد يكون ينظر أو تشغيل في الماضي. لذلك أنا ذاهب إلى المضي قدما الآن، والقيام بما يلي. لقد أنقذ هذا الملف كما hello.c. انا ذاهب الى المضي قدما و نوع clanghello.c حتى رنة للغة C هو مترجم. انها مثبتة مسبقا في CS50 IDE. ويمكنك تحميل على الاطلاق و تثبيت هذا على ماك الخاص بك أو جهاز الكمبيوتر. ولكن، مرة أخرى، لن يكون لديك كل من ما قبل التكوين القيام به بالنسبة لك. حتى الآن، أنا فقط الذهاب لتشغيل clanghello.c. والآن لاحظ هذا النحو هنا في نهاية المطاف أدرك يعني فقط أن أكون في مجلد أو دليل يسمى مساحة العمل. هذه علامة الدولار الاتفاقية فقط عن المعنى، اكتب الأوامر الخاص بك هنا. وهذا ما يسمى موجه، فقط من الاتفاقية هو علامة الدولار. وإذا ذهبت قدما الآن وانقر أدخل، لا يبدو أن شيئا قد حدث. ولكن هذا في الواقع أمر جيد. وأقل ما يحدث على الشاشة، وعلى الأرجح الشفرة هو أن يكون صحيحا، على الأقل من حيث التركيب. حتى لو كنت ترغب في تشغيل هذا برنامج، ماذا أفعل؟ حسنا، اتضح أن الاسم الافتراضي من الاتفاقية البرامج عند عدم تحديد اسم البرنامج الخاص بك هو مجرد a.out. وبناء الجملة هذا أيضا، عليك تعرف على قبل فترة طويلة. نقطة خفض يعني فقط، مهلا، CS50 IDE، قم بتشغيل برنامج يسمى a.out وهذا داخل دليل بلدي الحالي. تلك النقطة تعني الدليل الحالي. وسنرى ما هذه متواليات أخرى من الشخصيات يعني قبل فترة طويلة. حتى هنا نذهب، أدخل، مرحبا العالم. وستلاحظ أن ما حدث؟ ليس فقط أنها لم طباعة مرحبا العالم. كما تحركت ل المؤشر إلى السطر التالي. ولماذا كان ذلك؟ ما هو الرمز الذي كتبنا قبل يضمن التي من شأنها أن المؤشر الذهاب على السطر التالي؟ شيء مضحك عن الكمبيوتر هو انه سيكون فقط للقيام حرفيا ما كنت أقول أن تفعله. حتى إذا كنت أقول ذلك لprintf مرحبا، فاصلة، والفضاء، عالم، واقتبس وثيق، انها حرفيا لن يؤدي الا لطباعة تلك الأحرف. ولكن كان هذا طابع خاص في النهاية، تذكر، مائل ن. وهذا ما يضمن أن ذهب شخصية إلى السطر التالي من الشاشة. في الواقع، اسمحوا لي أن تذهب وتفعل هذا. اسمحوا لي أن نمضي قدما وحذف هذه. الآن، لاحظ أن أعلى الشاشة بلدي هناك القليل من الضوء الأحمر في علامة التبويب تشير، مهلا، كنت قد يتم حفظ الملف. لذلك أنا ذاهب إلى المضي قدما في السيطرة S أو الأمر S، حفظ الملف. الآن حان goes-- ذهب لالخضراء اللحظات،. والآن يعود إلى كونها مجرد رمز وثيق. إذا أنا الآن تشغيل clanghello.c مرة أخرى، أدخل، نقطة مائلة، a.out، أدخل، سترى أنه لا يزال يعمل. ولكن هذا القول عربة صغيرة. الآن، مساحة العمل الخاصة بي prompt--، وبعد ذلك علامة الدولار، ثم ضعي prompt-- الفعلية هو كل شيء على نفس الخط. ولذلك فإن هذا بالتأكيد علة الجمالية، حتى لو انها ليست حقا خلل منطقي. لذلك أنا ذاهب إلى التراجع عن ما فعلت. أنا ذاهب إلى إعادة تشغيل a.out. لاحظ أنني قمت بإضافة السطر الخلفي الطابع. أنا قد قمت بحفظ الملف. لذلك أنا ذاهب إلى إعادة تشغيل a.out، and-- اللعنة، خلل، خلل يعني خطأ. وبالتالي فإن الخطأ هو أنه على الرغم من أضفت مائل ن هناك، إعادة حفظها، وإعادة ركض-البرنامج، كان السلوك نفسه. لماذا يكون ذلك؟ أنا في عداد المفقودين خطوة، أليس كذلك؟ وكان ذلك خطوة رئيسية في وقت سابق أن لديك ل-- عند تغيير شفرة المصدر الخاصة بك، اتضح أيضا تشغيل من خلال مترجم مرة أخرى حتى تحصل على رمز الجهاز الجديد. وآلة القانون، الأصفار ومنها، سوف تكون متطابقة تقريبا، ولكن ليس تماما لذلك، لأننا في حاجة، بالطبع، هذا الخط الجديد. لذلك لإصلاح هذا، وأنا ذاهب الى الحاجة إعادة تشغيل clanghello.c، أدخل، نقطة خفض، a.out. والآن، مرحبا العالم هو العودة إلى حيث أتوقع أن يكون. لذلك هذا هو كل شيء على ما يرام وجيدة. لكن a.out هو اسم غبي جدا ل برنامج، على الرغم من أنه يحدث أن تكون، لأسباب تاريخية، و default-- يعني مخرجات الجمعية. ولكن اسمحوا لي أن المضي قدما هنا والقيام بذلك بشكل مختلف. أريد برنامجي مرحبا العالم لفي الواقع أن يسمى مرحبا. حتى لو كان رمز على بلدي سطح المكتب، فإنه لن a.out. سوف يطلق عليه مرحبا. حتى للقيام بذلك، اتضح أن رنة، مثل العديد من البرامج، تدعم وسائط سطر الأوامر، أو الأعلام، أو التبديل، التي تؤثر ببساطة سلوكها. على وجه التحديد، رنة يدعم شرطة س العلم، الذي ثم يأخذ الكلمة الثانية. في هذه الحالة، وسوف أكون تعسفا، ولكن بشكل معقول، الذي يطلق عليه مرحبا. ولكن يمكن أن يطلق عليه أي شيء أريد، إلا a.out، التي يفضل أن يكون إلى جانب هذه النقطة. وبعد ذلك فقط تحديد اسم الملف أريد أن ترجمة. وحتى الآن حتى وإن كان في بداية الأمر لا يزال لدي رنة، في نهاية الأمر لا يزال لدي اسم الملف، لدي الآن سطر الأوامر هذه الحجج، وهذه العلامات التي تقول، أوه، بالمناسبة، خرج س، ملف دعا مرحبا، وليس a.out الافتراضية. حتى لو كنت هاهنا الآن، لا شيء يبدو أنه قد حدث. و، ولكن، الآن أستطيع أن أفعل نقطة مائلة مرحبا. لذلك هو نفس البرنامج. الأصفار ومنها هي متطابقة في نهاية اليوم. ولكنهم في اثنين a.out files-- مختلفة، الذي هو الإصدار الأول ومجرد اسمه بحماقة، والآن مرحبا، وهو كثيرا أكثر اسم مقنعة لأحد البرامج. ولكن، بصراحة، أنا أبدا الذهاب إلى تذكر هذا مرة أخرى، ومرة أخرى، ومرة ​​أخرى. و، في الواقع، ونحن نكتب برامج أكثر تعقيدا، الأوامر كنت ستكون لدينا لكتابة سوف تحصل على حتى أكثر تعقيدا من ذلك. وذلك لا داعي للقلق. وتبين أن البشر قبل لنا أدركوا أنهم أيضا وكان نفس هذا المشكلة بالضبط. هم أيضا لا تتمتع الحاجة إلى اكتب طويلة نسبيا، أوامر غامضة، ناهيك عن تذكرها. وحتى البشر أمامنا جعلت البرامج الأخرى التي تجعل من السهل تجميع البرنامج. و، في الواقع، واحدة منها ويسمى برنامج صانع. لذلك أنا ذاهب إلى المضي قدما ونفعل ذلك. انا ذاهب الى التراجع عن كل ما فعلت بالطريقة التالية. اسمحوا لي أن اكتب ليرة سورية. وستلاحظ ثلاثة things-- a.out، ونجم، مرحبا ونجم، وhello.c. نأمل، هذا ينبغي تكون بديهية قليلا، بقدر ما كان هناك في وقت سابق لا شيء في هذه مساحة العمل. لم يكن هناك شيء ان كان لي تم إنشاؤها حتى بدأنا الطبقة. وأنا خلقت hello.c. وبعد ذلك جمعت منه، ويطلق عليه a.out. وبعد ذلك أنا جمعت مرة أخرى قليلا مختلفة ويطلق عليه مرحبا. لذلك ليس لدي ثلاثة ملفات في هذا الدليل، في هذا المجلد يسمى مساحة العمل. الآن، أستطيع أن أرى ذلك أيضا إذا كنت تصغير الواقع. لو كنت التصغير هنا و ننظر في ذلك أعلى اليد اليمنى الزاوية، كما وعدت اليسار الجانب من الشاشة دائما ما تظهر لك ما هو في حسابك، ما هو داخل IDE CS50. وهناك ثلاثة ملفات هناك. لذلك أريد أن تخلص من a.out ومرحبا. وكما كنت قد تخيل بشكل حدسي، يمكنك يمكن فرز من فوق عنصر تحكم أو انقر على الحق في هذا. وهذه القائمة الصغيرة للملوثات العضوية الثابتة. يمكنك تحميل الملف، تشغيل ذلك، معاينته، ​​تحديث، إعادة تسمية، أو ليس ما. وأنا فقط يمكن حذف، وسوف تذهب بعيدا. ولكن دعونا نفعل الأشياء مع أمر خط في الوقت الراهن، وذلك للحصول على راحة مع هذا، والقيام بما يلي. انا ذاهب الى المضي قدما وإزالة a.out بكتابة حرفيا rma.out. كما تبين، الأمر ل إزالة أو حذف شيء، ليس إزالة أو حذف. انها أكثر وضوحا RM، فقط لانقاذ لك بعض ضربات المفاتيح، ثم اضغط على Enter. الآن ونحن في طريقنا إلى حد ما بغموض إزالة a.out ملف منتظم. أنا لا أعرف حقا ما ل سيكون ملف انتظام يكون حتى الان. ولكن أنا لا أريد أن إزالته. لذلك أنا ذاهب لكتابة ذ لنعم. أو أستطيع أن اكتب بها، ثم اضغط على Enter. ومرة أخرى، يبدو أن لا شيء يحدث. ولكن هذا هو، بشكل عام، وهو شيء جيد. إذا كنت اكتب LS هذه المرة، ما ينبغي أن أرى؟ نأمل، فقط مرحبا وhello.c. الآن، بوصفها جانبا، عليك لاحظت هذا النجم، النجمة، هذا هو في نهاية برامجي. وانهم تظهر أيضا باللون الأخضر. وهذا هو مجرد وسيلة CS50 IDE ل من الدلالة لكم في الواقع أن هذا ليس شفرة المصدر. هذا قابل للتنفيذ، وrunnable البرنامج الذي يمكنك تشغيل فعلا عن طريق القيام نقطة مائلة، وبعد ذلك اسم. والآن، اسمحوا لي المضي قدما وإزالة هذا، جمهورية مقدونيا مرحبا، أدخل، وإزالة العادية ملف مرحبا، نعم. والآن إذا كنت اكتب ليرة سورية، نعود إلى hello.c. ليس محاولة لحذف الخاص بك كود المصدر الفعلي. على الرغم من أن هناك ميزات في صلب CS50 IDE حيث يمكنك الذهاب من خلال تاريخ المراجعة الخاصة بك والترجيع في الوقت المناسب إذا كنت غير قصد حذف شيء، لا أن تضع في اعتبارها وفقا لهذه المطالبات نعم أو لا، ما كنت فعلا تريد أن تفعل. وإذا صعدت إلى الأعلى الزاوية اليسرى هنا، كل ما تبقى هو hello.c. ولذلك لا يوجد باقات الأوامر الأخرى التي يمكن تنفيذ في عالم لينكس، واحدة منها هي، مرة أخرى، وجعل. ونحن في طريقنا لجعل برنامجي الآن على النحو التالي. بدلا من القيام رنة، بدلا من القيام رنة س، انا ذاهب الى ببساطة اكتب حرفيا، وجعل مرحبا. والآن لاحظت، وأنا لا تكتب جعل hello.c. أنا كتابة جعل مرحبا. وهذا البرنامج جعل ذلك يأتي مع IDE CS50، وأكثر من ذلك عموما مع لينكس، هو البرنامج الذي الذهاب الى جعل برنامج يسمى مرحبا. وانه ذاهب لنفترض، من خلال اتفاقية، أنه إذا أمكن جعل هذا البرنامج، انها سوف تكون مصنوعة من مصدر ملف التعليمات البرمجية التي تنتهي في نقطة ج، hello.c. حتى لو كنت هاهنا الآن، لاحظ أن الأمر الذي يعدم هو في الواقع لفترة أطول قبل أكثر من ذي قبل. وهذا لأننا IDE CS50 مسبقا أن يكون بعض الميزات الإضافية بنيت في ذلك نحن لسنا بحاجة فقط حتى الآن، ولكن قريبا. ولكن الشيء الرئيسي لتحقيق الآن لدي برنامج مرحبا. إذا كنت اكتب LS مرة أخرى، وأنا لديك برنامج مرحبا. ويمكنني تشغيله مع نقطة خفض a.out، لا، لأن بيت القصيد من هذا وكانت ممارسة دوت مائل مرحبا. والآن لدي برنامج مرحبا العالم. حتى تتحرك إلى الأمام، نحن دائما تقريبا فقط الذهاب إلى تجميع برامجنا باستخدام جعله الأوامر. وبعد ذلك نحن ذاهبون لتشغيلها من قبل نقطة خفض، واسم البرنامج. ولكن ندرك ما جعل تقوم به ل لك، وأنه هو نفسه ليس المترجم. انها مجرد برنامج الراحة أن يعرف كيف يؤدي الى مترجم لتشغيل حتى يتسنى لك نفسك يمكن استخدامها. ما توجد أوامر أخرى في لينكس، وبدوره IDE CS50؟ سنرى قريبا أن هناك الأمر CD، تغيير الدليل. هذا يسمح لك داخل واجهة سطر الأوامر للتحرك إلى الأمام، والخلف، وفتح مجلدات مختلفة دون استخدام الماوس الخاص بك. LS رأينا، والتي تقف على قائمة الملفات في الدليل الحالي. جعل دير، يمكنك ربما تبدأ في الاستدلال ما يعني هذه الآن-- جعل الدليل، إذا كنت ترغب في إنشاء مجلد. RM لإزالة، RM دير ل إزالة directory-- وهذه، مرة أخرى، هي سطر الأوامر حكمه ما كنت يمكن أن تفعل في CS50 IDE مع الماوس. ولكن سوف تجد قريبا أنه في بعض الأحيان انها مجرد على نحو أسرع كثيرا للقيام الامور مع لوحة المفاتيح، وفي نهاية المطاف الكثير أكثر قوة. ولكن من الصعب القول بأن أي شيء كنا نقوم به حتى الآن هو كل ما قوية، عندما تكون جميع كنا نقوله هو، مرحبا العالم. و، في الواقع، لقد ضمني لل الكلمات مرحبا العالم في برنامجي. ليس هناك ديناميكية حتى الان. كان الصفر أمر من حجم أكثر إثارة للاهتمام في الأسبوع الماضي. ولذلك دعونا نصل الى هناك. دعونا نلقي خطوة نحو ذلك عن طريق الطريق لبعض هذه الوظائف. وذلك ليس فقط لا C تأتي مع printf، وباقات من وظائف أخرى بعضها سنرى مع مرور الوقت، فإنه لا جعل كل شيء بهذه السهولة الحق في الخروج من البوابة في الحصول على مدخلات المستخدم. في الواقع، واحدة من نقاط الضعف لغات مثل C، وحتى جافا وبعد الآخرين، هو أنه لا تجعل من السهل لمجرد الحصول على أشياء مثل الأعداد الصحيحة من المستخدمين، أو الجمل، والكلمات، والعبارات، واسمحوا الأشياء وحدها مثل القيم النقطة العائمة، أو الأعداد الحقيقية مع النقاط العشرية، وحقا أرقام طويلة، كما سنرى قريبا. حتى هذه القائمة من وظائف هنا، هذه هي مثل قطع خدش لغز أخرى أننا مثبتة مسبقا في CS50 IDE التي سنستخدم لبضعة أسابيع كما عجلات التدريب من نوع ما، و أخذها في نهاية المطاف قبالة، والبحث تحت غطاء محرك السيارة، وربما، في كيف يتم تنفيذ هذه الأمور. ولكن للقيام بذلك، دعنا في الواقع كتابة برنامج. اسمحوا لي أن المضي قدما الآن. وانا ذاهب الى خلق جديد ملف عن طريق النقر على هذا بالإضافة إلى القليل، والنقر ملف جديد. أنا ذاهب لإنقاذ هذه المقبل واحد كما، دعنا نقول، string.c، لأنني أريد أن ألعب مع السلاسل. والسلسلة في C هي فقط سلسلة من الأحرف. حتى الآن دعونا نمضي قدما والقيام بما يلي. وتشمل المعايير IO.h-- و اتضح IO القياسية، IO يعني فقط المدخلات والمخرجات. هكذا اتضح أن هذا الخط هنا هو ما هو المجاورة لنا استخدام printf. Printf، وبطبيعة الحال، وتنتج الانتاج. وذلك من أجل استخدام printf، فإنه يتحول من أن يكون لديك هذا سطر من التعليمات البرمجية في الجزء العلوي من الملف. وسوف نعود إلى ما وهذا يعني في الواقع قبل وقت طويل. وتبين أن في أي برنامج C أنا أكتب، لقد حصلت على تشغيله مع التعليمات البرمجية التي تبدو مثل هذا. وستلاحظ CS50 IDE، و التنمية المتكاملة أخرى بيئات مثل ذلك، وسوف نحاول بأقصى أنها يمكن أن ينهي الفكر الخاص بك. في الواقع، منذ لحظة إذا يمكنني التراجع ما أنا فعلت، وأنا هاهنا. وبعد ذلك ضرب مجعد مفتوحة هدفين، هاهنا مرة أخرى. والانتهاء من تفكيري. أنه أعطاني خط جديد، بادئة لا يقل لأسباب الأسلوبية لطيفة سنرى. ثم أنه أعطاني تلقائيا أن متعرج لإنهاء تفكيري. الآن، فإنه ليس دائما تخمين ما تريد القيام به. ولكن في جزء كبير منه، فإنه لا يوفر لك بعض المفاتيح. حتى قبل لحظة، ركضنا هذا program-- مرحبا، العالم، ومن ثم جمعت ذلك، ثم تجلى ذلك. ولكن ليس هناك ديناميكية هنا. ماذا لو أردنا أن نفعل شيئا مختلفا؟ حسنا، ماذا لو أردت أن الواقع الحصول على سلسلة من المستخدم؟ انا ذاهب الى استخدام قطعة اللغز دعا بالضبط هكذا- يضرب الحصول على السلسلة. تبين في C أنه عندما كنت لا تريد لتوفير مدخلات لقطعة اللغز، أو أكثر بشكل صحيح على وظيفة، ل حرفيا مجرد القيام قوس فتح، قوس إغلاق. لذلك كما لو هناك لا مربع أبيض لكتابة فيه. كتلة مثلا قبل كان مربع أبيض صغير. نحن ليس لدينا هذا المربع الأبيض الآن. ولكن عندما أدعو سلسلة الحصول عليها، وأنا نريد أن نضع النتيجة في مكان ما. لذلك النموذج شائع جدا في C هو استدعاء دالة، مثل سلسلة الحصول على هنا، ومن ثم تخزين قيمة عودتها. انها نتيجة ل جهد في شيء. وما هو بناء في البرمجة، سواء في خدش أو الآن C، وأننا يمكن استخدامها لتخزين شيئا في الواقع؟ يطلق عليه متغير، أليس كذلك؟ وفي خدش، ونحن لا حقا يهمني ما كان يحدث في المتغيرات. ولكن في هذه الحالة، نحن فعلا. انا ذاهب الى القول السلسلة. وبعد ذلك يمكن أن نسميه هذا ما أريد. انا ذاهب الى نسميها اسم، ويحصل على السلسلة. والآن حتى لو كنت جديد يذكر لهذا، لاحظت أنني تفتقر إلى بعض التفاصيل. أنا النسيان منقوطة. ولست بحاجة لإنهاء هذا الفكر. لذلك أنا ذاهب لأحرك المؤشر، وضرب منقوطة هناك. وما أنا فقط القيام به؟ في هذا الخط من التعليمات البرمجية، عدد 5 في الوقت الراهن، ادعو سلسلة الحصول مع عدم وجود المدخلات. لذلك ليس هناك الأبيض الصغير مربع مثل حفظ كتلة لديها. أنا فقط أقول، مهلا، الكمبيوتر، ويحصل لي سلسلة. علامة المساواة ليست في الحقيقة علامة المساواة، في حد ذاته. انها مهمة المشغل، وهو ما يعني، مهلا، الكمبيوتر، نقل قيمة من حق أكثر إلى اليسار. وفي الجهة اليسرى، ولدي ما يلي. مهلا، الكمبيوتر، أعطني string-- سلسلة من الأحرف. وندعو إلى أن اسم السلسلة. وأنا لا تملك حتى أن نسميها الاسم. أنا يمكن أن نسميها، تقليديا، شيء من هذا القبيل S، يشبه إلى حد كبير كنا أنا ل استدعاء متغير ط. ولكن الان انا بحاجة لفعل شيء معها. وسيكون من الغباء جدا ل محاولة تجميع هذا الرمز، تشغيل هذا البرنامج، على الرغم من انني اتلقى سلسلة، لأنها لا تزال مجرد أريد أن أقول مرحبا العالم. ولكن ماذا لو كنت لا تريد لتغيير هذا الوضع. لماذا لا أفعل هذا؟ في المئة الصورة، فاصلة الصورة. وهذا هو خفي قليلا لا يزال. لذلك اسمحوا لي أن المتغيرات بلدي أكثر وضوحا. اسمحوا لي أن تسمية هذا اسم المتغير. ودعونا نرى ما اذا كنا لا يمكن أن ندف وبصرف النظر عما يحدث هنا. هكذا السطر الخامس، وأنا الحصول على السلسلة. وأنا تخزين هذه السلسلة، كل ما قد كتبته المستخدم في في له أو لها لوحة المفاتيح، في متغير يسمى الاسم. واتضح أن printf لا فقط تأخذ وسيطة واحدة في ضعف ونقلت ومدخل واحد في علامات اقتباس مزدوجة. يمكن أن يستغرق يومين، أو ثلاثة، أو أكثر، مثل أن الثانية، أو الثالثة، أو الرابعة، كلها أسماء المتغيرات، أو تقدر على وجه التحديد، التي ترغب في الاندماج، حيوي، هذه السلسلة في الاقتباس. وبعبارة أخرى، ما سيكون الخطأ في هذا؟ إذا قلت للتو مرحبا الاسم، مائل ن، حفظ الملف الخاص بي، وقد تم تجميعها قانون بلدي، ويدير هذا، ماذا سيحدث؟ انها مجرد الذهاب الى القول، مرحبا اسم، حرفيا N-A-M-E، الذي هو نوع من الغباء ل انها لا تختلف من العالم. لذا فان أي شيء في الاقتباس هو ما حرفيا يحصل المطبوعة. حتى لو كنت تريد أن يكون عنصر نائب هناك، أنا فعلا بحاجة إلى استخدام بعض تركيب خاص. واتضح إذا كنت تقرأ ثائق الدالة printf، وسوف اقول لكم ان إذا كنت تستخدم في المئة الصورة، يمكنك استبدال قيمة كما يلي. بعد فاصلة بعد أن اقتباس مزدوجة، يمكنك ببساطة كتابة اسم المتغير الذي تريد بهدف سد العجز في في هذا الشكل الرمز، أو شكل محدد، في المئة الصورة لسلاسل. والآن إذا كنت قد قمت بحفظ الملف الخاص بي، أعود وصولا الى محطة بلدي. وأنا اكتب جعل سلسلة، لأنه، مرة أخرى، واسم هذا الملف الذي اخترت قبل هو string.c. لذلك أنا أريد أن أقول جعل سلسلة، أدخل. يا إلهي، أن ننظر في كل من الأخطاء التي قمنا بها بالفعل. وهذا ما أعرف، هل هذا حقا مثل، برنامج خط الستة سبعة؟ لذلك هذا هو المكان الذي يمكن جدا بسرعة الحصول على الساحقة. هذه النافذة محطة له الآن متقيا فقط عدد كبير من رسائل الخطأ. بالتأكيد، ليس لدي المزيد من خطأ رسائل من عندي أسطر من التعليمات البرمجية. ماذا يحدث؟ كذلك، فإن أفضل استراتيجية للقيام أي وقت لا تواجه ساحقة قائمة الأخطاء من هذا القبيل، وانتقل إلى الوراء، ننظر للأمر قمت بتشغيل فقط، وهو في حالتي هو جعل السلسلة. ننظر إلى ما جعل فعل، وهذا هو الذي قيادة رنة طويلة، ليست صفقة كبيرة هناك. لكن الأحمر هو سيئ. الأخضر يحاول أن يكون لطيف ومفيدة. لكنه ما زال سيئا، في هذه الحالة. ولكن أين هي سيئة؟ String.c، السطر الخامس، والطابع خمسة. لذلك هذا هو اتفاقية مشتركة فقط. شيء القولون شيء يعني رقم السطر ورقم الحرف. الخطأ، واستخدام غير معلنة سلسلة معرف. هل تقصد القياسي في؟ لذلك، للأسف، رنة تحاول أن تكون مفيدة. لكن من الخطأ، في هذه الحالة. لا، رنة، وأنا لم أقصد IO القياسية. أنا يعني أن على سطر واحد، نعم. ولكن السطر الخامس هو هذا واحد هنا. ورنة لا فهم S-T-R-I-N-G. انها المعرف غير معروفة، ل كلمة هو فقط لم ير من قبل. وذلك لأن C، واللغة نحن كتابة التعليمات البرمجية في الوقت الراهن، لم يكن لديك المتغيرات تسمى السلاسل. لم يحدث ذلك، افتراضيا، الدعم شيء يسمى سلسلة. هذا هو قطعة CS50 من المصطلحات، ولكن تقليدية جدا. ولكن يمكنني أن إصلاح هذا على النحو التالي. إذا أضيف سطر واحد من التعليمات البرمجية إلى الأعلى من هذا البرنامج، تشمل CS50.h، وهو ملف آخر في مكان ما داخل CS50 IDE، في مكان ما على القرص الصلب، إذا جاز التعبير، من نظام التشغيل أوبونتو أن أنا على التوالي، أن هو الملف الذي هو الذهاب لتعليم التشغيل نظام ما هي سلسلة، فقط مثل io.h هو معيار ملف في نظام التشغيل هذا الذهاب إلى تدريسه ما printf هو. في الواقع، لكنا قد حصلت رسالة مشابهة جدا إذا IO اعترف القياسية IO.h وحاولت استخدام printf. لذلك أنا ذاهب إلى المضي قدما وفقط السيطرة L لمسح شاشة بلدي. أو يمكنك كتابة واضحة وسوف مجرد مسح إطار المحطة الطرفية. ولكن لا يزال بإمكانك انتقل إلى الوراء في الوقت المناسب. وأنا ذاهب إلى إعادة تشغيل جعل سلسلة. عبور أصابعي هذا الوقت، أدخل. يا إلهي، لأنها عملت. انه يظهر لي أمر خفي طويل هذا هو ما جعل إنشاء طريق رنة، ولكن لا توجد رسائل خطأ. حتى ندرك، على الرغم من قد تحصل تماما طغت مع عدد الرسائل الخطأ، فإنه قد يكون مجرد هذا المتتالية مزعج تأثير، حيث لا يفهم رنة شيء واحد، وهو ما يعني أنها ثم لا يفهم الكلمة التالية، أو السطر التالي. وذلك الإختناقات فقط على التعليمات البرمجية. لكن الإصلاح قد تكون بسيطة. وتركز ذلك دائما على السطر الأول جدا من الانتاج. وإذا كنت لا فهم ذلك، مجرد إلقاء نظرة عن الكلمات الرئيسية التي قد تكون القرائن، ورقم السطر، والطابع، حيث قد يكون هذا الخطأ. والآن اسمحوا لي المضي قدما واكتب نقطة خفض، سلسلة، أدخل. جلالة الملك، فإنه لا يقول مرحبا أي شيء. لماذا؟ حسنا، أذكر، حيث يتم تشغيله؟ وربما تبقى عالقة في الوقت الراهن في حلقة، اذا صح التعبير، على خط الستة، لأن الحصول على سلسلة من التصميم، كتبه الموظفين CS50، يقصد حرفيا لمجرد الجلوس هناك انتظار، والانتظار، وتنتظر السلسلة. كل نعنيه سلسلة من المدخلات البشرية. لذلك أنت تعرف لماذا؟ اسمحوا لي أن المضي قدما. وفقط لمجرد نزوة، واسمحوا لي اكتب اسمي، ديفيد، أدخل. الآن لدي برنامج أكثر ديناميكية. يقال، مرحبا ديفيد. إذا ذهبت إلى الأمام وتشغيل هذا مرة أخرى، اسمحوا لي أن أحاول أن أقول اسم Zamila، أدخل. والآن لدينا برنامج ديناميكي. أنا لم الثابت ترميز العالم. أنا لم الثابت ترميز تسمية، أو ديفيد، أو Zamila. الآن انها اكثر من ذلك بكثير مثل البرامج ونحن نعلم، حيث إذا يستغرق المدخلات، وتنتج إخراج مختلف قليلا. الآن، ليس هذا هو أفضل تجربة المستخدم، أو UX. أنا تشغيل البرنامج. أنا لا أعرف ما أنا من المفترض القيام به، إلا إذا كنت فعلا ننظر أو تذكر شفرة المصدر. لذلك دعونا جعل المستخدم تجربة أفضل قليلا مع أبسط الأشياء. واسمحوا لي أن أعود إلى هذا برنامج، وبكل بساطة تقول printf. واسمحوا لي أن المضي قدما ويقول اسمه، القولون، والفضاء، ثم منقوطة. وفقط لركلات، أي رد فعل عنيف ن. وهذا متعمد، لأنني لا أريد موجه للانتقال إلى السطر التالي. أريد أن، بدلا من ذلك، القيام بذلك، وجعل سلسلة إعادة ترجمة قانون بلدي إلى الجهاز الجديد كود دوت خفض السلسلة. آه، هذا هو أجمل من ذلك بكثير. الآن أنا فعلا تعرف ما الكمبيوتر تريد مني أن أفعل، وإعطائها اسما. لذلك أنا ذاهب إلى المضي قدما واكتب في روب، أدخل، ومرحبا، روب. لذلك، وتحقيق، وهذا لا يزال، في نهاية اليوم، فقط برنامج تسعة خط. لكننا اتخذنا الخطوات الطفل. كتبنا سطر واحد مع الذي نحن كانت مألوفة، printf، مرحبا العالم. ثم نحن أفقرت قليلا من ذلك. وكنا في الواقع سلسلة الحصول عليها. ونحن قذف تلك القيمة في متغير. وبعد ذلك ذهبت إلى الأمام وتحسين أكثر من ذلك مع الخط الثالث. وهذه العملية التكرارية ل كتابة البرامج غير الأساسية حقا. في CS50، وفي الحياة بشكل عام، يجب عليك عموما لا نجلس، لديك برنامج في الاعتبار، ومحاولة الكتابة لعنة كل شيء دفعة واحدة. وعليه، لا محالة، ويؤدي في الطريق المزيد من الأخطاء من نحن أنفسنا رأى هنا. حتى أنا، حتى يومنا هذا، باستمرار يخطئ غبية أخرى، هي الأخطاء أصعب في الواقع التي يصعب معرفة. ولكن سوف ارتكاب المزيد من الاخطاء أكثر أسطر من التعليمات البرمجية تكتب في كل مرة. وحتى هذه الممارسة، إرسال قليلا من التعليمات البرمجية أن كنت راضيا، ترجمة ذلك، تشغيلها، اختباره بشكل عام، ثم نقل on-- حتى مجرد مثل حافظنا طبقات وطبقات الأسبوع الماضي، بناء من شيء جدا بسيطة إلى شيء أكثر تعقيدا، تفعل الشيء نفسه هنا. لا تجلس، ومحاولة ل كتابة المشكلة برمتها. أخذ فعلا هذه خطوات طفل. الآن، سلاسل ليست كلها أن من المفيد في حد ذاتها. لكنا في الواقع، من الناحية المثالية، مثل ل لديك شيء آخر في أدوات لدينا. لذلك دعونا نفعل ذلك فعلا بالضبط. اسمحوا لي أن المضي قدما الآن وجهز برنامج مختلف قليلا. ونحن سوف نسمي هذا int.c، لعدد صحيح. أنا ذاهب ل، وبالمثل، تشمل CS550.h. أنا ذاهب لتشمل IO القياسية. والتي ستكون جميلة مشتركة في هذه الأيام القليلة الأولى من الصف. وانا ذاهب الى جاهزة نفسي مع المهمة الرئيسية. والآن بدلا من الحصول على سلسلة، دعونا نمضي قدما والحصول على كثافة العمليات. دعنا نسميها ط، والذي يطلق عليه الحصول على كثافة العمليات، أقواس وثيقة، منقوطة. والآن دعونا نفعل شيء معها، printf. دعونا نقول شيء من هذا القبيل مرحبا، مائل ن، ط فاصلة. لذلك أنا محاكاة حد كبير ما فعلته قبل لحظة فقط. لدي نائبا هنا. لقد بفواصل أنا هنا، لأنني أريد من أجل سد ط إلى أن العنصر النائب. لذلك دعونا نمضي قدما ومحاولة جمع هذا البرنامج. يتم استدعاء الملف int.c. لذلك أنا أريد أن أقول، وجعل كثافة العمليات، أدخل. يا إلهي، ولكن ليست صفقة كبيرة، أليس كذلك؟ هناك خطأ. هناك خطأ نحوي هنا مثل هذا البرنامج لا يمكن يتم تجميعها داخل int.c، خط سبعة، والحرف 27، شكل خطأ يحدد نوع شار نجم، أيا كان ذلك. ولكن نوع الوسيطة هو كثافة العمليات. حتى هنا، أيضا، أننا لن ل-- على الرغم من أن اليوم هو الكثير من المواد، ونحن في طريقنا إلى تطغى لك تماما كل سمة من سمات C، والبرمجة بشكل عام، فقط في هذه الأسابيع القليلة الأولى. ولذلك لا يوجد في كثير من الأحيان سيكون المصطلحات التي كنت لم تكن مألوفة. و، في الواقع، نجوم شار شيء ونحن في طريقنا للعودة إلى في غضون أسبوع أو اثنين من مرة و. لكنه الآن، دعونا نرى ما اذا كنا نستطيع تحليل الكلمات التي هي مألوفة. Formats-- حتى سمعنا شكل محدد، رمز تنسيق من قبل. هذا هو مألوف. Type-- لكن الحجة نوع int. انتظر لحظة، أنا هو عدد صحيح. ربما في المئة الصورة في الواقع لديه بعض معنى محدد. وفي الحقيقة، فإنه لا. عدد صحيح، إذا كنت تريد printf لاستبدالها، لديك فعلا لاستخدام شكل مختلف محدد. وأنت لا تعرف هذا إلا إذا قال شخص ما، أو كنت قد فعلت ذلك من قبل. ولكن في المئة ط هو ما يمكن أن تستخدم عادة في printf ليسد في عدد صحيح. يمكنك أيضا استخدام في المئة د لعدد صحيح عشري. ولكن أنا لطيفة وبسيطة هنا. ومن ثم سنذهب مع ذلك. والآن اسمحوا لي المضي قدما و أعد تشغيل جعل كثافة العمليات، أدخل. هذا امر جيد، عدم وجود أخطاء. نقطة خفض موافق int--، تجربة المستخدم سيئة، لأنني لم قلت لنفسي ماذا أفعل. ولكن هذا شيء طيب. أنا على التقاط بسرعة. والآن اسمحوا لي أن المضي قدما في اكتب في ديفيد، موافق، Zamila، روب. حسنا، هذا أمر جيد. هذه المرة، أنا باستخدام وظيفة، قطعة اللغز، ودعا الحصول على كثافة العمليات. ويتحول out-- وسنقوم نرى هذا في وقت لاحق term-- نفذت الموظفين CS50 الحصول على سلسلة في مثل هذه الطريقة أنه لن يؤدي إلا جسديا الحصول على سلسلة من أجلك. وقد نفذت ذلك الحصول على كثافة العمليات في مثل هذه الطريقة أنه لن يؤدي إلا الحصول على عدد صحيح بالنسبة لك. وإذا كنت، والإنسان، لا تتعاون، انها حرفيا مجرد الذهاب الى أقول إعادة المحاولة، إعادة المحاولة، إعادة المحاولة، يجلس حرفيا هناك حلقات، حتى كنت إلزام مع بعض رقم سحري، مثل 50، ومرحبا 50. أو إذا كان لنا أن تشغيل هذا مرة أخرى ونوع في 42، مرحبا 42. وبالتالي فإن وظيفة الحصول على كثافة العمليات داخل تلك القطعة اللغز يكفي المنطق، ما يكفي من الفكر، لمعرفة ما هي كلمة؟ وما هو العدد؟ قبول فقط، في نهاية المطاف، وأرقام. لذلك تبين أن هذا ليس كل ما معبرة. إلى هذا الحد. لذلك، ياي، آخر مرة نحن ذهبت بسرعة كبيرة في مباريات تنفيذ، والرسوم المتحركة، والأعمال الفنية في خدش. وهنا، ونحن حاليا المحتوى مع العالم مرحبا، ومرحبا 50. انها ليست كل ما الملهم. وبالفعل، فإن هذه القليلة الأولى والأمثلة يستغرق بعض الوقت لزيادة في الإثارة. ولكن لدينا أكثر من ذلك بكثير السيطرة الآن، في واقع الأمر. ونحن في طريقنا للغاية تبدأ بسرعة طبقات على رأس هذه الأوليات الأساسية. ولكن أولا، دعونا نفهم ما هي القيود. في الواقع، واحدة من الأشياء الصفر لا بسهولة دعونا نفعل حقا نتطلع تحت غطاء محرك السيارة، وفهم ما الكمبيوتر، ما يمكن القيام به، وما هي حدوده. و، في الواقع، أن عدم وجود فهم، يحتمل أن تكون، على المدى الطويل يمكن أن يؤدي إلى موقعنا على الكتابة mistakes-- الخاصة البق، وكتابة البرامج غير آمن يحصل اختراق في بعض الطريق. لذلك دعونا نلقي بعض الخطوات نحو فهم هذا أفضل قليلا من قبل طريقة، ويقول، والمثال التالي. انا ذاهب الى المضي قدما في تنفيذ حقيقية سريعة برنامج يسمى الأفعى. مثل، دعونا نضيف بعض الأرقام معا. وانا ذاهب الى رمز بعض الزوايا هنا، ومجرد نسخ ولصق أين كنت من قبل، فقط حتى نتمكن من الحصول على الذهاب عاجلا. حتى الآن أنا عندي بدايات الأساسية برنامج يسمى الأفعى. ودعونا نمضي قدما ونفعل هذا. انا ذاهب الى المضي قدما و مثلا، intx يحصل على كثافة العمليات. وتعلم ماذا؟ دعونا نجعل تجربة أفضل للمستخدم. لذلك دعونا نقول فقط x هو، وعلى نحو فعال مطالبة المستخدم لتعطينا س. ثم اسمحوا لي المضي قدما ويقول: printf ماذا عن ذ، وهذه المرة يتوقع قيمتين من المستخدم. ثم دعونا نمضي قدما و مثلا، printf، مجموع x و y هو. والآن أنا لا تريد أن تفعل في المئة الصورة. أريد أن أفعل في المئة ط، مائل n ومن ثم سد العجز في قيمة المبلغ. فكيف يمكنني أن أذهب عن القيام بذلك؟ أتعلم؟ أنا أعرف كيفية استخدام المتغيرات. واسمحوا لي أن أعلن واحدة جديدة، كثافة العمليات ض. وانا ذاهب الى اتخاذ تخمين هنا. إذا كانت هناك علامات على قدم المساواة في هذا اللغة، ربما أستطيع أن مجرد القيام X زائد ذ، طالما أنا في نهاية بلدي فكرت مع منقوطة؟ الآن أستطيع أن أعود إلى هنا، والمكونات في ض، الانتهاء من هذا الفكر مع منقوطة. ودعونا نرى الآن، إذا كانت هذه تسلسل س lines-- هو الحصول على كثافة العمليات. Y هو الحصول على كثافة العمليات. إضافة x و y، تخزين قيمة في z-- لذلك، مرة أخرى، تذكر علامة المساواة ليس على قدم المساواة. انها مهمة من اليمين إلى اليسار. ودعونا طباعة إلى أن المبلغ x و y ليس حرفيا ض، ولكن ما هو داخل ض. لذلك دعونا جعل الأفعى - لطيفة، أي أخطاء هذه المرة. نقطة خفض الأفعى، أدخل، س ستكون 1. Y سيكون 2. ومجموع x و y هو 3. ذلك أن كل شيء على ما يرام وجيدة. هكذا كنت أتصور أن الرياضيات يجب أن تعمل في مثل هذا البرنامج. ولكن هل تعرف لماذا؟ هل هذا المتغير، خط 12، بل وضروريا؟ أنت لست بحاجة للحصول على هذه العادة من مجرد تخزين الأشياء في المتغيرات فقط لأنك تستطيع. و، في الواقع، انها عموما تصميم سيئة يعتبر إذا كنت تقوم بإنشاء متغير، ودعا ض في هذه الحالة، تخزين شيء في ذلك، وبعد ذلك على الفور استخدامه، ولكن مرة أخرى أبدا. لماذا تعطي شيئا اسما مثل ض إذا كنت حرفيا الذهاب لاستخدام هذا شيء مرة واحدة فقط، وذلك الأقرب إلى حيث قمت بإنشائه في المقام الأول، قريبة جدا من حيث خطوط للقانون؟ لذلك أنت تعرف لماذا؟ وتبين أن C هو مرن جدا. إذا كنت فعلا تريد المكونات في القيم هنا، ولست بحاجة إلى تعريف متغير جديد. أنا يمكن أن مجرد سد العجز في X زائد ذ، لأن C يفهم الحساب، والعمليات الحسابية. لذلك أستطيع أن أقول ببساطة، تفعل هذا والرياضيات، X زائد ذ، مهما كانت تلك القيم، سد العجز الناتج صحيح في هذه السلسلة. ولذلك فإن هذا قد يكون، على الرغم من فقط سطر واحد أقصر، أفضل تصميم، برنامج أفضل، لأنه لا يوجد أقل رمز، وبالتالي أقل بالنسبة لي لفهم. وكما انها أنظف فقط، بقدر ما نحن لسنا إدخال كلمات جديدة، رموز جديدة، مثل ض، على الرغم من أنها لا حقا خدمة الكثير من الغرض. للأسف، ليست الرياضيات جميع أنه في بعض الأحيان يمكن الاعتماد عليها. دعونا نمضي قدما ونفعل هذا. انا ذاهب الى المضي قدما الآن، والقيام بما يلي. دعونا نفعل printf، في المئة ط، بالإضافة المئة ط، يجب أن تكون في المئة ط، مائل ن. وانا ذاهب الى القيام this-- xyx بالإضافة إلى ذ. لذلك أنا ذاهب لمجرد كتابة هذا بشكل مختلف قليلا هنا. اسمحوا لي أن لا مجرد الاختيار التعقل سريع. مرة أخرى، دعونا لا نسبق الاحداث. جعل الأفعى، نقطة مائلة الأفعى. س هو 1، ص هو 2، 1 زائد 2 هو 3. لذلك هذا امر جيد. ولكن دعونا تعقيد هذا الآن قليلا، وإنشاء ملف جديد. أنا ذاهب لهذه الكلمة واحدة، أقول، [إينتس]، الجمع للأعداد صحيحة. اسمحوا لي أن نبدأ من حيث كنت قبل لحظة. ولكن الآن دعونا نفعل بضعة أسطر أخرى. اسمحوا لي أن نمضي قدما ونفعل ما يلي، printf، في المئة ط، ناقص في المئة ط، هو في المئة ط، س فاصلة، فاصلة YX ناقص ذ. لذلك أنا أفعل قليلا الرياضيات المختلفة هناك. دعونا نفعل واحد آخر. حتى في المئة ط مرات في المئة i غير المئة ط، مائل ن. دعونا المكونات في العاشر، و y، ومرات خ ذ. سنستخدم النجمة على جهاز الكمبيوتر الخاص بك لمرات. كنت لا تستخدم س. x هو اسم متغير هنا. استخدام النجوم للتكاثر. دعونا نفعل أكثر واحد. في المئة أنا Printf، مقسمة بواسطة المئة ط، هو في المئة ط، ن مائل. س ص مقسوما y-- لذلك يمكنك استخدام مائل في C للقيام الانقسام. ودعونا نفعل الآخر. ما تبقى من المئة ط، مقسمة بواسطة المئة ط، هو في المئة ط. xy-- والآن تبقى هو ما خلفها. عند محاولة تقسيم القاسم إلى البسط، كم هو خلفها أن أنت لا تستطيع أن تفرق بها؟ لذلك ليس هناك حقا، بالضرورة، رمزا استخدمنا في المدارس الابتدائية لهذا الغرض. ولكن هناك في C. يمكنك يقول س مودولو ذ، حيث هذه النسبة المئوية في هذا context-- مربك عندما كنت داخل من علامات اقتباس مزدوجة، داخل printf، في المئة يتم استخدام شكل محدد. عند استخدام في المئة خارج أن في تعبير رياضي، انها المشغل مودولو لوحدات arithmetic-- لأغراضنا هنا، مجرد وسيلة، ما هو ما تبقى من العاشر مقسوما ذ؟ لذلك س مقسوما ذ خ ذ مائلة. ما تبقى من العاشر مقسوما ذ؟ انها س ص وزارة الدفاع، كمبرمج أن أقول. حتى لو كنت لم ترتكب أخطاء هنا، اسمحوا لي المضي قدما وجعل [إينتس]، الجمع، لطيف، و[إينتس] مائلة نقطة. ودعونا نمضي قدما و القيام به، دعنا نقول، 1، 10. كل الحق، 1 + 10: 11، الاختيار. 1 ناقص 10 هو سلبي 9، والتحقق. 1 مرات 10 هو 10، الاختيار. 1 مقسوما على 10 أعرف، حسنا، نحن سوف تخطي هذا واحد. ما تبقى من 1 مقسوما على 10 هو 1. هذا صحيح. ولكن هناك خلل في هنا. حتى واحد أضع بلدي تسليم، غير صحيح. أعني، انها قريبة إلى 0. 1 مقسوما على 10، كما تعلمون، إذا نحن قطع بعض زوايا، بالتأكيد، انها الصفر. لكن يجب أن يكون حقا 1/10، 0.1 أو 0.10، 0.1000، أو هكذا دواليك. لا ينبغي أن يكون حقا الصفر. حسنا، اتضح أن الكمبيوتر به حرفيا ما قلنا أن تفعله. ونحن نفعل مثل الرياضيات س مقسوما ذ. وكلا x و y، في السطور من التعليمات البرمجية في وقت سابق، أعداد صحيحة. وعلاوة على ذلك، على الخط 15، ونحن يقول printf، مهلا، printf في المكونات عدد صحيح، والمكونات في عدد صحيح، المكونات في integer-- على وجه التحديد س، ثم y، ومن ثم س مقسوما ذ. x و y هم [إينتس]. نحن في حالة جيدة هناك. ولكن ما هو العاشر مقسوما العاشر؟ س مقسوما ذ ينبغي أن يكون، رياضيا، 1/10، أو 0.1، وهو العدد الحقيقي، العدد الحقيقي وجود، وربما، وهذه نقطة عشرية. انها ليست عددا صحيحا. ولكن ما هو الأقرب عدد صحيح إلى 10/01، أو 0.1؟ نعم، انها نوع من صفر. 0.1 مثل هذا بكثير. و1 غير هذا بكثير. حتى 10/1 هو أقرب إلى 0 مما هو عليه إلى واحد. وماذا في ذلك C تقوم به لus-- نوع من لقلنا أنه ل-- واقتطاع هذا صحيح. انه أخذ قيمة، وهو مرة أخرى من المفترض أن يكون شيء من هذا القبيل 0.1000، 0 وهكذا دواليك. وانها اقتطاع كل شيء بعد العلامة العشرية ذلك أن كل هذا الاشياء، لأنه لا تناسب في فكرة وجود عدد صحيح، والذي هو مجرد رقم مثل سلبي 1، 0، 1، صعودا وهبوطا، فإنه يلقي بعيدا كل شيء بعد العلامة العشرية لأنك لا يمكن أن يصلح العشرية في عدد صحيح من حيث التعريف. هكذا كان الجواب هنا هو صفر. لذلك كيف يمكننا حل هذه المشكلة؟ نحتاج حل آخر كل ذلك معا. ويمكننا القيام بذلك على النحو التالي. اسمحوا لي أن نمضي قدما وخلق جديد ملف، هذا واحد يسمى floats.c. واحفظه هنا في نفس الدليل، float.c. واسمحوا لي أن المضي قدما ونسخ بعض من هذا الرمز من قبل. ولكن بدلا من الحصول على عدد صحيح، دعونا نفعل ذلك. أعطني قيمة النقطة العائمة دعا س. حيث نقطة عائمة القيمة هي مجرد حرفيا شيء مع النقطة العائمة. ويمكن ان تتحرك إلى اليسار، إلى اليمين. انها العدد الحقيقي. واسمحوا لي أن الكلمة لا الحصول على كثافة العمليات، ولكن الحصول على تعويم، الذي كان أيضا من بين القائمة من الخيارات في المكتبة C250. دعونا تغيير ذ لتعويم. ولذلك فإن هذا يصبح الحصول على تعويم. والآن، نحن لا نريد أن سد العجز في [إينتس]. اتضح لدينا لاستخدام في المئة و لتعويم، في المئة و لتعويم، والآن حفظه. والآن، تمنيت، وجعل العوامات، لطيفة، نقطة مائلة عوامات. س ستكون واحدة 1. ذ ستكون 10 ثانية. و، لطيفة، موافق بلدي بالإضافة صحيحة. كنت أتمنى أكثر من ذلك، لكني نسيت أن أكتبها. لذلك دعونا نذهب وإصلاح هذا الخطأ المنطقي. دعونا نمضي قدما والاستيلاء على ما يلي. سنقوم فقط تفعل القليل من النسخ واللصق. وانا ذاهب الى القول ناقص. وانا ذاهب الى القول مرة. وانا ذاهب الى القول المقسمة. وأنا لن تفعل مودولو، الذي هو أمر لا كما هنا، مقسوما و، ومرات plus-- حسنا، دعونا نفعل ذلك مرة أخرى. جعل العوامات، يطفو نقطة مائلة، و1، 10، and-- لطيفة، لا، موافق. لذلك أنا أحمق. لذلك هذا هو شائع جدا في علم الحاسوب لارتكاب الأخطاء الغبية مثل هذا. لأغراض تربوية، ما أردت حقا أن تفعل تم تغيير العلم هنا إلى زائد، إلى ناقص، لمرة، وعلى الانقسام، كما كنت أمل لاحظت خلال هذه العملية. حتى الآن دعونا إعادة تجميع هذه برنامج، تفعل نقطة مائلة عوامات. وللمرة الثالثة، دعونا معرفة ما اذا كان يجتمع توقعاتي. 1، 10، أدخل، نعم، حسنا، 1.000، مقسوما 10.000، هو 0.100000. واتضح يمكننا التحكم في عدد الأرقام بعد تلك النقاط العشرية. ونحن في الواقع. سوف نعود إلى ذلك. ولكن الآن، في الواقع، والرياضيات هي الصحيحة. لذلك، مرة أخرى، ما هي الوجبات الجاهزة هنا؟ وتبين أن في C، هناك ليس فقط مجرد strings-- و، في الواقع، لا توجد في الواقع، لأننا إضافة أولئك الذين لديهم مكتبة CS50. ولكن ليست هناك [إينتس] فقط. هناك يطفو أيضا. واتضح مجموعة من البيانات الأخرى أنواع أيضا، أننا سوف تستخدم قبل فترة طويلة. تبين إذا كنت تريد واحدة الطابع، وليس سلسلة من الأحرف، يمكنك استخدام مجرد شار. تبين أنه إذا كنت تريد منطقي، قيمة منطقية، صحيحة أو خاطئة فقط، بفضل مكتبة CS50، لدينا إضافة إلى C نوع البيانات منطقي كذلك. لكنه يقدم أيضا في العديد من اللغات الأخرى كذلك. واتضح أنه في بعض الأحيان كنت تحتاج أعداد أكبر ثم تأتي افتراضيا مع [إينتس] وعوامات. و، في الواقع، مزدوج هو رقم أن لا يستخدم 32 بت، ولكن 64 بت. ومنذ فترة طويلة طويلة هو الرقم الذي لا يستخدم 32 بت ولكن 64 بت، على التوالي، لنقطة عائمة القيم وصحيحة، على التوالي. لذلك دعونا فعلا الآن نرى في هذا العمل. انا ذاهب الى المضي قدما هنا وجهز البرنامج الآخر. هنا، انا ذاهب الى المضي قدما ولا تشمل CS50.h. واسمحوا لي أن أذهب، وتشمل IO.h. القياسية وستلاحظ شيئا غير تقليدي يحدث هنا. انها ليست لون الترميز الأمور في بنفس الطريقة كما فعلت من قبل. واتضح، وهذا لأنني لم تعط الشيء اسم الملف. أنا ذاهب لهذه الكلمة واحدة sizeof.c، وضرب حفظ. ولاحظ ما يحدث لبلدي جدا كود الأبيض ضد هذه الخلفية السوداء. الآن، على الأقل هناك بعض الأرجواني في هناك. ومن أبرز بناء الجملة. هذا لأنه، بكل بساطة، لقد قال IDE أي نوع من الملفات فمن خلال إعطائها اسما، و على وجه التحديد ملحق ملف. الآن، دعونا نمضي قدما ونفعل هذا. انا ذاهب الى المضي قدما وجدا ببساطة بطباعة منطقي following-- غير LU في المئة. سوف نعود إلى أن في مجرد لحظة. ثم انا ذاهب الى حجم طباعة منطقي. والآن، فقط لانقاذ نفسي بعض الوقت، وأنا تنوي القيام به بشكل عام مجموعة من هذه في وقت واحد. وعلى وجه التحديد، وانا ذاهب ل تغيير هذا إلى شار وشار. هذا واحد، انا ذاهب الى تغيير إلى ضعف والضعف. هذا واحد، انا ذاهب الى تغيير لتعويم وتعويم. هذا واحد، وانا ذاهب ل تغيير إلى int وعدد صحيح. وهذا واحد، وانا ذاهب التغيير إلى فترة طويلة طويلة. وانها لا تزال آخذة منذ وقت طويل، طويل. ومن ثم، أخيرا، أعطى نفسي واحد الكثير من، سلسلة. وتبين أن في C، هناك مشغل خاص يسمى حجم هذا هو حرفيا الذهاب الى عند تشغيله، يقول لنا حجم كل من هذه المتغيرات. وهذا هو الطريق، والآن، يمكننا ربط العودة للنقاش الاسبوع الماضي البيانات والتمثيل. اسمحوا لي أن المضي قدما وتجميع حجم حجم الخط المائل نقطة من. ودعونا نرى. وتبين أن في C، على وجه التحديد على CS50 IDE، على وجه التحديد على نظام التشغيل أوبونتو، وهو تشغيل 64 بت النظام في هذه الحالة، منطقي سوف استخدام بايت واحد من الفضاء. هذه هي الطريقة التي يتم قياس حجم، ليس في بت، ولكن في بايت. وأذكر أن بايت واحد هو ثمانية بت. لذلك منطقي، حتى ولو كنت من الناحية الفنية تحتاج فقط 0 أو 1، انها الإسراف قليلا كيف قمنا بتنفيذه. انها في طريقها فعلا إلى استخدام ككل byte-- ذلك كل الأصفار، وربما كل منها، أو شيء من هذا القبيل، أو واحد فقط 1 من بين ثمانية بت. وشار، في الوقت نفسه، وتستخدم لحرف مثل حرف ASCII في الأسبوع الماضي، سيكون حرف واحد. وأن synchs مع مفهومنا لل كونها لا يزيد عن 256 bits-- بدلا من ذلك، synchs حتى مع كونها لا أطول من 8 بت، والتي يعطينا ما لا يقل عن 256 القيم. مزدوج هو الذهاب الى يكون 8 بايت أو 64 بت. وتعويم هو 4. عدد صحيح هو 4. ومنذ فترة طويلة، هي مدة 8. والسلسلة 8. ولكن لا تقلق بشأن ذلك. ونحن في طريقنا إلى قشر العودة تلك الطبقة. كما تبين، يمكن سلاسل أن تكون أطول من 8 بايت. وبالفعل، كتبنا سلاسل بالفعل، مرحبا العالم، أطول من 8 بايت. ولكن سوف نعود ل أن في مجرد لحظة. ولكن اتولى هنا هو التالي. أي جهاز كمبيوتر ليس لديها سوى محدود مقدار الذاكرة والمكان. يمكنك تخزين فقط الكثير ملفات على جهاز ماكنتوش أو كمبيوتر شخصي. يمكنك تخزين فقط الكثير من البرامج في ذاكرة الوصول العشوائي تشغيل في وقت واحد، بالضرورة، حتى مع الذاكرة الظاهرية، ل لديك كمية محدودة من ذاكرة الوصول العشوائي. وفقط لpicture-- إذا لم يسبق لك أن فتحت جهاز كمبيوتر محمول أو أمر ذاكرة إضافية للكمبيوتر، ل قد لا يعرف أن داخل جهاز الكمبيوتر الخاص بك هو الشيء الذي يبدو قليلا من هذا القبيل. لذلك هذا هو مجرد شركة مشتركة اسمه حاسمة أن يجعل من ذاكرة الوصول العشوائي لأجهزة الكمبيوتر. وذاكرة الوصول العشوائي هو المكان البرامج العيش في حين أنها تقوم بتشغيل. لذلك على كل ماكنتوش أو كمبيوتر شخصي، عند مضاعفة انقر فوق البرنامج، ويفتح، ويفتح بعض مستند Word أو شيء من هذا القبيل، لأنه يخزن مؤقتا في ذاكرة الوصول العشوائي، لأن ذاكرة الوصول العشوائي هو أسرع من القرص الثابت، أو قرص الحالة الصلبة الخاصة بك. حتى انها مجرد أين تذهب البرامج للعيش عندما تقوم بتشغيل، أو عندما يتم استخدام الملفات. بحيث يكون لديك أشياء تبدو مثل هذا داخل الكمبيوتر المحمول، أو أشياء أكبر قليلا داخل سطح المكتب الخاص بك. ولكن المفتاح هو أن يكون لديك فقط عدد محدود من هذه الأشياء. وهناك فقط كمية محدودة من الأجهزة يجلس على هذا المكتب حق هنا. لذلك، بالتأكيد، لا يمكننا تخزين أرقام طويلة لا نهاية. و، ولكن، إذا كنت تعتقد أن يعود إلى المدرسة الابتدائية، كم من الأرقام يمكن لديك إلى اليمين نقطة عشرية؟ لهذه المسألة، وكيف العديد من الأرقام يمكن لديك إلى يسار الفاصلة العشرية؟ حقا، كثير ما لا نهاية. الآن، ربما نحن البشر فقط تعلم كيف تنطق مليون، ومليار تريليون دولار، و كوادريليون، وكوينتيليون. وأنا دفع حدود بلادي understanding-- أو my-- أفهم أرقام، ولكن بلدي نطق الأرقام. ولكن يمكنهم الحصول كبير بلا حدود مع عدد لانهائي من الأرقام إلى اليسار أو إلى اليمين من العلامة العشرية. ولكن أجهزة الكمبيوتر لديها فقط كمية محدودة من الذاكرة، عدد محدود من الترانزستورات، ل عدد محدود من المصابيح داخل. ذلك ما يحدث عندما كنت قد نفد من الفضاء؟ وبعبارة أخرى، إذا كنت بذاكرتي إلى الأسبوع الماضي عندما تحدثنا عن أرقام أنفسهم أن تكون ممثلة في ثنائي، لنفترض أن لدينا هذا 8 بت قيمة هنا. ولدينا سبعة 1 واحد 0. ونفترض أننا نريد إضافة 1 إلى هذه القيمة. هذا هو رقم كبير حقا الآن. هذا هو 254، إذا كنت أتذكر الرياضيات من الأسبوع الماضي حق. ولكن ماذا لو قمت بتغيير أن أقصى اليمين 0 إلى 1؟ عدد كله، من بطبيعة الحال، يصبح ثمانية 1 ل. لذلك نحن لا تزال جيدة. وهذا ربما يمثل 255، اعتمادا على الرغم من على السياق أنها يمكن أن تمثل في الواقع رقم سالب. ولكن أكثر على أن وقت آخر. هذا يبدو وكأنه على وشك مرتفعا كما يمكنني الاعتماد. الآن، انها فقط 8 بت. وبلدي ماك، بالتأكيد، لديها طريقة أكثر من 8 بت من الذاكرة. ولكن لا توجد لديها محدود. لذلك تنطبق نفس الحجة، حتى لو كنا لدينا أكثر من هؤلاء الصغار على الشاشة. ولكن ماذا يحدث إذا كنت تخزين هذا الرقم، 255، وتريد الاعتماد أعلى 1 بت؟ تريد أن تذهب 255-256. المشكلة، بالطبع، هو أنه إذا كنت بدء العد من الصفر مثل الأسبوع الماضي، لا يمكنك الاعتماد يصل كما 256، ناهيك عن 257، ناهيك عن 258 متر بسبب ما يحدث عند إضافة 1؟ إذا كنت تفعل المدرسة الابتدائية القديمة النهج، كنت وضعت 1 هنا، ثم 1 زائد 1 هو 2، ولكن هذا حقا صفر، كنت تحمل 1، حمل 1، حمل 1. كل هذه الأمور، هذه 1، يذهب إلى الصفر. وانتهى بك الأمر، نعم، كمن أشار، 1 على الجانب الأيسر. ولكن كل ما تستطيع في الواقع نرى وتناسب في الذاكرة هو فقط ثمانية 0، والذي هو القول في مرحلة ما إذا كنت، كمبيوتر، حاول عد عالية بما فيه الكفاية حتى، كنت الذهاب إلى التفاف حولها، على ما يبدو، إلى الصفر، أو ربما حتى السلبي الأرقام، التي هي أقل حتى من الصفر. ويمكننا أن نرى نوع من هذا. اسمحوا لي أن المضي قدما والكتابة برنامج سريع الحقيقي هنا. اسمحوا لي أن المضي قدما والكتابة برنامج يسمى تجاوز. تشمل CS50.h، وتشمل معيار IO.h-- أوه، فاتني حقا بلدي تسليط الضوء على تركيب. لذلك دعونا حفظ هذا كما overflow.c. والآن الباحث الرئيسي void-- وقبل وقت طويل، وسوف نقوم أعود لشرح لماذا نحن الاستمرار في الكتابة الفراغ الرئيسي كثافة العمليات. لكنه الآن، دعونا نفعل فقط انها، مع ذلك أمرا مفروغا منه. دعونا نعطي نفسي كثافة العمليات، وتهيئة إلى 0. دعونا ثم القيام لكثافة أحصل zero-- في الواقع، دعونا نفعل حلقة لا نهائية ونرى ما سيحدث. بينما صحيح، ثم دعونا طباعة ن هو في المئة ط، مائل ن، والمكونات في ن. ولكن، الآن، دعونا نفعل ن ن يحصل زائد 1. لذلك وبعبارة أخرى، على كل تكرار هذه حلقة لا نهائية، دعونا نلقي قيمة ن، و وإضافة 1 إلى ذلك، وبعد ذلك تخزين النتيجة مرة أخرى في ن على اليسار. و، في الواقع، شاهدنا بناء الجملة قليلا من هذا القبيل، لفترة وجيزة. خدعة هو بارد بدلا من ذلك الكتابة عن هذا الخروج، هل يمكن القول فعلا زائد ن يساوي 1. أو إذا كنت تريد حقا أن تكون نزوة، هل يمكن القول ن زائد زائد منقوطة. ولكن هذه الأخيران هما فقط ما كنا ندعو نحوي السكر لأول شيء. وأول شيء هو أكثر وضوحا، غرامة تماما، صحيح تماما. ولكن هذا هو أكثر شيوعا، وأنا أقول. ولذا فإننا سوف تفعل هذا لمجرد لحظة. دعونا نجعل الآن تجاوز، الذي يبدو المشؤومة بدلا من ذلك، دوت مائل تجاوز. دعونا نرى، ن يزداد كبيرة جدا. ولكن دعونا نفكر، كيف كبيرة يمكن ن الحصول على؟ ن هو عدد صحيح. رأينا منذ لحظة مع حجم المثال أن عدد صحيح أربعة بايت. ونحن نعلم من الأسبوع الماضي، أربعة بايت هو 32 بت، ل8 مرات 4، وهذا هو 32. التي ستكون 4000000000. ونحن ما يصل إلى 800،000. هذا هو ذاهب الى اتخاذ إلى الأبد العد عالية كما كنت ربما يمكن. لذلك أنا ذاهب إلى المضي قدما، كما كنت قد قبل فترة طويلة، وضرب تحكم C-- بصراحة، تحكم C، والكثير، حيث تحكم C عموما وسائل إلغاء. للأسف، لأن هذا يعمل في السحابة، في بعض الأحيان سحابة من بصق الكثير من الاشياء، الكثير من الانتاج، وانها سوف يستغرق بعض الوقت القليل لإدخال بلدي للوصول الى سحابة. حتى على الرغم من أنني ضرب السيطرة C بضع ثوان قبل، هذا هو بالتأكيد الجانب تأثير حلقة لا نهائية. وحتى في مثل هذه الحالات، ونحن الذهاب إلى ترك أن يكون. ونحن في طريقنا لإضافة آخر نافذة الصالة أكثر من هنا مع زائد، والتي بالطبع لا من هذا القبيل، نظرا لأنه لا يزال يفكر. ودعونا نمضي قدما ويكون أكثر من ذلك بقليل معقولة. انا ذاهب الى المضي قدما والقيام هذا فقط كثير محدود مرات. دعونا استخدام للحلقة، التي أشرت إليها سابقا. دعونا نفعل ذلك. أعطني كثافة متغير آخر ط يحصل 0. أنا أقل من، دعنا نقول، 64 ط ++. والآن اسمحوا لي أن المضي قدما والطباعة من ن هو في المئة ط، ن فاصلة. ثم n-- هذا لا يزال ذاهب الى اتخاذ إلى الأبد. دعونا نفعل ذلك. ن يحصل ن مرات (2). أو أننا يمكن أن تكون نزوة والقيام الأوقات يساوي 2. ولكن دعنا نقول فقط ن يساوي نفسه، مرة 2. وبعبارة أخرى، في هذا النسخة الجديدة من البرنامج، أنا لا أريد أن ننتظر إلى الأبد من مثل 800،000 إلى 4 مليارات دولار. دعونا فقط الحصول على هذا أكثر مع. دعونا مضاعفة فعلا ن في كل مرة. التي، أذكر، تضاعف هي عكس وجود، بطبيعة الحال. وبينما الأسبوع الماضي لدينا شيء مرة أخرى، ومرة ​​أخرى، ومرة أخرى، بسرعة فائقة، سوف تضاعف بالتأكيد يأتينا من 1 إلى أكبر ممكن القيمة التي نستطيع أن نعول عليها مع عدد صحيح. لذلك دعونا نفعل هذا بالضبط. وسوف نعود إلى هذا قبل فترة طويلة. ولكن هذا، مرة أخرى، هو تماما مثل كتلة تكرار في خدش. وسوف تستخدم هذه قبل وقت طويل. هذا يعني فقط العد من الصفر حتى، ولكن ليس على قدم المساواة، إلى 64. وعلى كل التكرار من هذا حلقة، وتبقي فقط تزايد ط. لذلك أنا ++ - وهذا البناء العام على خط 7 هو مجرد وسيلة عظمى المشتركة تكرار بعض خطوط الرمز، بعض عدة مرات. التي خطوط للقانون؟ هذه الأقواس المجعدة، كما كنت قد استقاها من الآن، يعني، القيام بما يلي. انها في مثل خدش، عندما أنه يحتوي على كتل صفراء وغيرها من الألوان هذا النوع من احتضان أو عناق الكتل الأخرى. هذا ما تلك مجعد الأقواس يفعلون هنا. حتى إذا حصلت على جملة بلدي right-- لك يمكن رؤية رمز الجزرة في وسائل C هذا هو عدد المرات التي كنت محاولة حل هذه المشكلة. لذلك دعونا نتخلص من أن واحدا تماما، وإغلاق هذه النافذة. وسنستخدم واحدة جديدة. جعل الفائض، مائل نقطة تجاوز، أدخل، كل الحق، يبدو سيئا في البداية. ولكن دعونا انتقل إلى الوراء في الوقت المناسب، لأنني فعلت ذلك 64 مرات. وتلاحظ أول مرة، ن هو 1. المرة الثانية، ن هو 2، ثم 4 ثم 8 ثم 16. ويبدو أن أقرب وقت أحصل على ما يقرب من 1 مليار دولار، إذا كنت يتضاعف مرة أخرى، أن يجب أن تعطيني 2 مليار دولار. ولكن تبين، انها الحق على أعتاب. وهكذا تجاوزات في الواقع عدد صحيح من 1000000000 إلى سلبية تقريبا 2 مليار، لأن عددا صحيحا، خلافا لأننا أرقام وعلى افتراض الأسبوع الماضي، يمكن أن تكون إيجابية وسلبية في الواقع وفي جهاز الكمبيوتر. واحدة على الأقل حتى تلك سرقة فعال بت. لذلك لدينا حقا 31 بت فقط، أو 2000000000 القيم الممكنة. ولكن الآن، والوجبات الجاهزة هي تماما ببساطة، كل ما هذه الأرقام ومهما كانت الرياضيات، شيئا سيئا يحدث في نهاية المطاف، لأنه في نهاية المطاف تحاول نستبدل بت واحد عدة مرات أيضا. وتذهب نحو فعال من جميع 1 لربما كل ل0، أو ربما فقط بعض نمط آخر أنه بشكل واضح، وهذا يتوقف على السياق، يمكن أن تفسر على أنها رقما سالبا. وهكذا يبدو الاعلى أنا ويمكن الاعتماد في هذا البرنامج بالذات هو فقط ما يقرب من 1 مليار دولار. ولكن هناك حل جزئي هنا. أتعلم؟ اسمحوا لي أن تغيير من كثافة العمليات لفترة طويلة طويلة. واسمحوا لي أن المضي قدما هنا وsay-- أنا ذاهب ل لتغيير هذا لفترة طويلة غير موقعة. أو، دعونا نرى، لم أكن أتذكر نفسي. دعونا نمضي قدما وجعل الفائض. لا، هذا ليس هو، بكالوريوس في القانون، وشكرا لكم. حتى في بعض الأحيان رنة يمكن أن تكون مفيدة. لم أكن أتذكر ما شكل كان محدد لفترة طويلة طويلة. ولكن، في الواقع، وقال لي رنة. الأخضر هو نوع من أنواع جيدة، لا يزال يعني أنك ارتكبت خطأ. انها التخمين أن قصدته بكالوريوس في القانون. لذلك اسمحوا لي أن أغتنم انها المشورة، منذ فترة طويلة عدد عشري طويلة، ما عدا ذلك. واسمحوا لي أن أعد به، نقطة خفض الفائض، وأدخل. والآن ما هو بارد هو هذا. إذا كنت انتقل إلى الوراء في الوقت المناسب، ونحن لا تزال بدء عد في نفس place-- 1، 2، 4، 8 و 16. إشعار، وحصلنا على كل الطريقة تصل إلى 1 مليار دولار. ولكن بعد ذلك نحن بأمان الحصول على 2 مليار دولار. ثم نصل إلى 4 مليار دولار، ثم 8 مليارات و 17 مليار دولار. ونذهب العالي، و أعلى وأعلى. في نهاية المطاف، وهذا، أيضا، فواصل. في نهاية المطاف، مع فترة طويلة طويلة، وهو قيمة 64 بت، وليس قيمة 32 بت، إذا كنت تعول مرتفعة جدا، وكنت التفاف حول 0. وفي هذه الحالة، فإننا يحدث ل في نهاية المطاف مع رقم سالب. لذلك هذا هو المشكلة. واتضح أن هذا المشكلة ليست كل ما غامضة. على الرغم من أنني قمت عمدا بفعل ذلك مع هذه الأخطاء، اتضح نراه نوع من جميع من حولنا، أو على الأقل بعض منا القيام به. حتى في ليغو حرب النجوم، إذا كنت قد لعبت أي وقت مضى لعبة، اتضح يمكنك يرحل كسر الامور في ليغو العالم، وجمع القطع النقدية، وأساسا. وإذا كنت قد لعبت أي وقت مضى هذه اللعبة الطريقة الكثير من الوقت، كما ان هذا الشخص لم يكشف عن اسمه هنا فعل، فإن العدد الإجمالي من القطع النقدية التي يمكنك جمع هو، على ما يبدو، 4000000000. الآن، مع انها اعتقلت في الواقع. حتى ليغو كان يحاول ابقاء الامور سهلة الاستعمال. أنها لم تفعل ذلك بالضبط 2 ل قوة 32، في الأسبوع الماضي. لكن 4000000000 هو السبب. على ما يبدو، استنادا إلى هذه المعلومات، أن ليغو، والشركة التي جعلت هذا البرنامج الفعلي، قررت أن عدد ممكن من القطع النقدية يمكن للمستخدم أن تتراكم هو، في الواقع، 4000000000، لأنهم اختاروا في مدوناتها لاستخدام ليست فترة طويلة طويلة، على ما يبدو، ولكن فقط عدد صحيح، وهو غير موقعة صحيح، فقط عدد صحيح موجب، الذي ماكس القيمة تقريبا ذلك. حسنا، هنا واحد آخر مضحك. حتى في لعبة الحضارة، التي البعض منكم قد تكون مألوفة، مع اتضح أن هناك منذ سنوات كان خطأ في هذه اللعبة حيث إذا كنت لعبت دور غاندي في اللعبة، بدلا من كونه السلمي للغاية، بدلا من ذلك كان لا يصدق، لا يصدق عدوانية، في بعض الظروف. على وجه الخصوص، الطريقة التي الحضارة يعمل هو أنه إذا كنت، لاعب، تبني الديمقراطية، الخاص يحصل نتيجة العدوانية decremented قبل اثنين، لذلك ناقص ناقص، ثم ناقص ناقص. لذا تقوم بطرح 2 من بالتكرار الخاص الفعلي. للأسف، إذا بالتكرار الخاص بك هو في البداية 1، وتقوم بطرح 2 منه بعد اعتماد الديمقراطية كما غاندي هنا قد قد فعلت، لأنه كان passive-- جدا 1 درجة على مقياس العدوانية. ولكن إذا كان يتبنى الديمقراطية، ثم يذهب من 1 إلى 1 السلبي. للأسف، كانت التي تستخدم فيها أرقام غير موقعة، وهو ما يعني أنها تعامل حتى السلبي أرقام كما لو أنها كانت ايجابية. واتضح أن تعادل إيجابي سلبية 1، في برامج الكمبيوتر النموذجية، 255. حتى إذا تتبنى غاندي ، وبالتالي الديمقراطية لديها انخفضت درجة العدوانية له، أنها تتحرك في الواقع حول الى 255 ويجعله أكثر شخصية عدوانية في اللعبة. حتى تتمكن من جوجل حتى على هذا. وكان، في الواقع، ل علة البرمجة عرضي، ولكن هذا دخلت جدا العلم منذ ذلك الحين. هذا كل شيء متعة ولطيف. أكثر إثارة للخوف هو عندما الفعلية أجهزة العالم الحقيقي، وليس الألعاب، لديهم نفس هذه الأخطاء. في الواقع، منذ عام واحد فقط وجاءت مقالة خارج عن دريملاينر بوينغ 787. والمقال في البداية وهلة يقرأ قليلا غامضة. ولكنه قال هذا، وهو برنامج الضعف في بوينغ الجديدة 787 دريملاينر طائرة لديها يمكن أن تتسبب الطيارين يفقد السيطرة على الطائرة، ربما في منتصف الرحلة، المسؤولين FAA شركات الطيران حذر مؤخرا. وكان تقرير أن نموذج 787 الطائرة التي تم مدعوم بشكل مستمر ل248 يوما يمكن أن تخسر كل التيار المتردد، AC، الطاقة الكهربائية بسبب المولد وحدات التحكم، GCUs، في وقت واحد الذهاب إلى فشل الوضع الآمن. انها نوع من فقدان لي. لكن المذكرة أشارت، حسنا، الآن أنا حصلت على هذا، وقد تسبب في حالة من البرمجيات مواجهة داخلية ل السيطرة مولد الوحدات التي سيتم تجاوز بعد 248 يوما من الطاقة المستمرة. نحن إصدار هذا لاحظت لمنع فقدان جميع AC الكهربائية السلطة، الأمر الذي قد يؤدي في فقدان السيطرة على الطائرة. لذلك، حرفيا، هناك بعض صحيحا، أو نوع البيانات يعادل، تستخدم في مجال البرمجيات في طائرة الفعلي أنه إذا واصلتم طائرتك لفترة طويلة بما فيه الكفاية، والتي على ما يبدو يمكن أن يكون عليه الحال لو كنت مجرد تشغيل لهم باستمرار وأبدا بفصل طائرتك، على ما يبدو، أو السماح البطاريات تموت، سيعتمد في نهاية المطاف، وحتى، وحتى، وحتى، وحتى، وحتى. و، بحكم طبيعتها، ل كمية محدودة من الذاكرة سيتم تجاوز في تراجع ل الصفر أو بعض قيمة سالبة، من الآثار الجانبية لوالذي هو واقع حقيقي مخيف ان الطائرة قد تحتاج إلى إعادة تمهيد، على نحو فعال، أو قد تقع ما هو أسوأ، لأنها يطير. لذلك هذا النوع من القضايا لا تزال معنا، even-- كانت هذه المادة عام 2015، جميع أكثر إثارة للخوف عندما كنت لا بالضرورة فهم وتقدير، أو استباق تلك الأنواع من الأخطاء. لذلك تبين هناك واحد آخر شيئا سيئا عن تمثيل البيانات. اتضح أنه حتى العوامات نوع من معيبة، لأن يطفو، أيضا، اقترحت و32 بت، أو ربما 64 إذا كنت تستخدم مزدوج. لكن هذا لا يزال محدودا. وتكمن المشكلة في أنه إذا كنت تستطيع وضع عدد لانهائي من الأرقام بعد العلامة العشرية، لا توجد وسيلة لك يمكن أن تمثل جميع ممكن الأرقام التي كنا تدرس في الصف يمكن أن توجد مدرسة في العالم. كمبيوتر، أساسا، أن اختيار مجموعة فرعية من هذه الأرقام لتمثيل بدقة. الآن، يمكن للكمبيوتر جولة ربما قليلا، ويمكن أن تسمح لك لتخزين ما يقرب من أي الرقم الذي ربما قد ترغب. ولكن فقط بشكل حدسي، إذا كنت لدينا عدد محدود من البتات، يمكنك نستبدل لهم فقط في العديد من الطرق محدودة. لذلك لا يمكن ربما استخدام عدد محدود من التقليب من البتات، أنماط من الآحاد والأصفار و، لتمثيل لانهائي عدد من الأرقام، مما يوحي بأن قد أجهزة الكمبيوتر يكون جيدا الكذب لنا في بعض الأحيان. في الواقع، دعونا نفعل هذا. واسمحوا لي أن أعود إلى IDE CS50. اسمحوا لي أن المضي قدما في إنشاء برنامج صغير ودعا الدقة، لإظهار أن أجهزة الكمبيوتر هي، في الواقع، غير دقيقة. واسمحوا لي أن المضي قدما والبدء مع بعض من هذا الرمز من قبل، والآن فقط القيام بما يلي. اسمحوا لي أن نمضي قدما ونفعل printf، في المئة و، مائل ن، 1 مقسوما على 10. وبعبارة أخرى، دعونا الغوص في أعمق ل1/10، مثل 1 و مقسوما على 10. بالتأكيد، يمكن للكمبيوتر تمثل 1/10. لذلك دعونا نمضي قدما وجعل عدم الدقة. دعنا نرى. يحدد شكل اكتب مزدوجة. ولكن الحجة نوع int. ماذا يحدث هنا؟ أوه، مثيرة للاهتمام، لذلك هو الدرس المستفاد من قبل. أنا أقول، مهلا، عرض الكمبيوتر لي تعويم مع في المئة و. ولكن أنا يعطيها 2 [إينتس]. لذلك تبين، ويمكن إصلاح هذا في عدة طرق. أنا يمكن أن تتحول واحدة فقط إلى 1.0، و 10 إلى 10.0، والذي من شأنه، في الواقع، يكون لها أثر تحويل لهم في floats-- لا يزال أمل نفس العدد. أو اتضح هناك شيء سنرى مرة أخرى قبل مرور وقت طويل. هل يمكن أن يلقي الأرقام. يمكنك باستخدام هذا خاص بجملة معترضة التعبير، يمكنك أن تقول، مهلا، الكمبيوتر، وتأخذ هذه 10، والذي أعرفه هو عدد صحيح. ولكن التعامل معها، من فضلك، كما لو انها تطفو. ولكن هذا يشعر المعقدة دون داع. لأغراضنا اليوم، دعونا فقط حرفيا جعلها القيم النقطة العائمة مع نقطة عشرية، مثل هذا. اسمحوا لي أن المضي قدما واعادة، وجعل عدم الدقة، وحسن، مائل نقطة عدم الدقة، أدخل. حسنا، نحن نبحث جيدا. 1 مقسوما على 10، وفقا لبلدي ماك هنا، هو، في الواقع، 0.100000. الآن، وأنا كان يدرس في المدارس الابتدائية هناك يجب أن يكون عدد لانهائي من 0 و. لذلك دعونا نحاول على الأقل لرؤية بعض من هؤلاء. وتبين أن printf قليلا لا يزال مربي الحيوانات من نحن أستعمل. اتضح لم يكن لديك لتحديد فقط في المئة و، أو فقط لأنني في المئة. يمكنك تحديد الواقع بعض خيارات التحكم هنا. على وجه التحديد، وانا ذاهب القول، مهلا، printf، تظهر في الواقع لي 10 نقطة عشرية. لذلك تبدو غريبة بعض الشيء. ولكن أقول لكم في المئة، نقطة وأرقام عن عدد كنت تريد أن ترى بعد العشرية، ثم و للشقة، فقط لأن هذا هو ما تقوله الوثائق. اسمحوا لي أن المضي قدما وحفظ ذلك. وتلاحظ أيضا، وأنا اتلقى تعبت من إعادة كتابة الأشياء. لذلك أنا فقط وضع صعودا و السهم لأسفل على مفاتيح بلدي هنا. وإذا أظل ضرب، وكنت يمكن أن نرى جميع الأوامر الذي أدليت به، أو جعلها غير صحيح. وانا ذاهب الى المضي قدما الآن و في الواقع لا تستخدم هذا، على ما يبدو. جعل عدم الدقة، نقطة خفض imprecision-- ذلك ما كنت تدرس في يتحقق المدارس الابتدائية بها. حتى لو كنت طباعته إلى 10 عشري يضع ذلك، في الواقع، هو 0.10000. ولكن هل تعرف لماذا؟ دعونا الحصول على الجشع قليلا. دعنا نقول، مثل، وتبين لي 55 يشير بعد العلامة العشرية. دعونا حقا أن تتخذ هذه البرنامج من أجل زيادة ونقصان. اسمحوا لي أن تغييره مع make عدم الدقة، نقطة مائلة، عدم الدقة. وها قد بدأنا. وكانت طفولتك كذبة. على ما يبدو، 1 مقسوما على 10 هو في الواقع 0.100000000000000005551115123-- ما الذي يجري؟ حسنا، كما تبين، إذا كنت من النوع ننظر بعيدا بما فيه الكفاية في أصل الأساسي تمثيل هذا عدد، فإنه في الواقع ليس بالضبط 1/10، أو 0.1 و عدد لا حصر له من الأصفار. الآن، لماذا؟ حسنا، على الرغم من أن هذا هو بسيط عدد لنا البشر، 1 مقسوما على 10، انها لا تزال واحدة من عدد لانهائي أرقام أننا يمكن أن يفكر حتى. ولكن جهاز كمبيوتر يمكن أن تمثل فقط بشكل محدود العديد من الأرقام لذلك. وهكذا، على نحو فعال، ما الكمبيوتر يظهر لنا هو الأقرب لها تقريب للعدد نحن نريد أن نصدق هو 1/10، أو حقا 0.10000 انهاية. بدلا من ذلك، على الرغم من، وهذا هو أقرب ما يمكن أن تحصل. وبالفعل، إذا نظرتم تحت غطاء محرك السيارة، ونحن هنا من خلال النظر 55 ارقام بعد العلامة العشرية، نحن نرى في الواقع هذا الواقع. الآن بوصفها جانبا، إذا كنت قد من أي وقت مضى رأيت movie-- معظمكم ربما haven't-- ولكن قبل سوبرمان 3 بضع سنوات، ريتشارد بريور الاستدانة أساسا هذا واقع في شركته لسرقة الكثير الكسور والكسور من البنسات، لأن company-- على ما أذكر، انها كانت while-- كان في الأساس رمي أي شيء لم تناسب في مفهوم سنتا. ولكن إذا كنت تضيف ما يصل كل هذه صغيرة، صغيرة، وأرقام صغيرة مرة أخرى، ومرة أخرى، ومرة ​​أخرى، يمكنك، كما هو الحال في قضيته، وجعل كمية لا بأس بها من المال. كان وقع هذه الفكرة نفسها من قبل أكثر حداثة، ولكن الآن لا يزال كبار السن فيلم، ودعا مكتب الفضاء، حيث الرجال في هذا الفيلم، فعلوا الشيء نفسه، ثمل عنه تماما، انتهى الطريق كثيرا المال في حساباتهم المصرفية. كان كل شيء مريب جدا. ولكن في نهاية اليوم، الدقة هي في كل مكان حولنا. وذلك، أيضا، يمكن أن يكون مخيف القضية. وتبين أن سوبرمان 3 ومكتب الفضاء جانبا، هناك يمكن أن يكون بعضها حقيقي جدا تداعيات العالم من واقع غير دقيقة تمثيل البيانات أنه حتى نحن البشر ل هذا اليوم لا بالضرورة فهم كذلك ينبغي لنا، أو تذكر في كثير من الأحيان كما ينبغي. وبالفعل، مقطع التالية من نظرة على بعض العالم الحقيقي جدا تداعيات ما يحدث إذا لا نقدر أن عدم الدقة يمكن أن يحدث في تمثيل الأرقام. [تشغيل الفيديو] -Computers، ونحن قد وصلنا كل قبول المشاكل في كثير من الأحيان محبطة الذهاب مع them-- البق، والفيروسات، ومواطن الخلل البرمجيات، لاسعارها صغيرة لدفع لراحة. ولكن في ذات التقنية العالية وسرعة عالية التطبيقات العسكرية وبرنامج الفضاء، أصغر مشكلة يمكن يتعظم إلى كارثة. في 4 يونيو 1996، أعد العلماء شن من دون طيار صاروخ أريان 5. وكانت تحمل العلمي الأقمار الصناعية المصممة لإنشاء بالضبط كيف يتفاعل الحقل المغناطيسي للأرض مع الرياح الشمسية. تم بناء صاروخ ل وكالة الفضاء الأوروبية، وانطلق من منشأتها على ساحل غيانا الفرنسية. -على نحو 37 ثانية في الرحلة، لأول مرة شيء لاحظت تسير على خطأ. الفتحات والدوران في على الطريقة التي حقا لا ينبغي. حوالي 40 ثانية فقط من بداية الرحلة، بشكل واضح، وكانت السيارة في ورطة. وذلك عندما جعلوا قرار لتدميره. ضابط سلامة المدى، مع الشجاعة الهائلة، الضغط على زر، فجر الصاروخ، قبل أن تصبح خطرا على السلامة العامة. كان، هذا قبل الزواج الرحلة من آريان 5. واستغرق تدميرها ضع بسبب عيب جزءا لا يتجزأ من برنامج الصاروخ. وكانت -The المشكلة على آريان أن كان هناك رقم مطلوب 64 بت للتعبير. وأرادوا تحويل إلى رقم 16 بت. ويبدو أنهم افترضوا أن لم يكن عدد مستمرة أن تكون كبيرة جدا، أن معظم تلك وكانت الأرقام في عدد 64 بت أصفار. كانوا مخطئين. -The عدم قدرة واحدة برنامج حاسوبي لقبول هذا النوع من رقم تم إنشاؤه من قبل وكان آخر في جذور الفشل. وتطوير البرمجيات تصبح جزء مكلفة جدا من التكنولوجيا الجديدة. وكان الصاروخ اريان جدا نجحت الكثير من البرامج خلقت لكنه كان أيضا المستخدمة في آريان 5. وكانت -The المشكلة الأساسية التي آريان وكان 5 أسرع، وتسارع أسرع. وكان البرنامج لا وشكلت لذلك. -The تدمير الصواريخ كانت كارثة مالية ضخمة، جميع بسبب خطأ في برنامج دقيقة. ولكن هذا لم يكن الأول مشاكل تحويل البيانات في الوقت قد تعاني تكنولوجيا الصواريخ الحديثة. -في عام 1991، مع بداية حرب الخليج الأولى، باتريوت الصاروخي شهدت نوع مماثل من مشكلة تحويل عدد. ونتيجة لذلك، 28 شخصا، 28 جنود أمريكيين، قتل، وحوالي جرح 100 آخرين، عندما باتريوت، التي كان من المفترض للحماية من صواريخ سكود واردة، فشل إطلاق صاروخ. غزا، وعندما العراق الكويت، وأمريكا أطلقت عاصفة الصحراء في أوائل عام 1991، تم نشر بطاريات صواريخ باتريوت لحماية السعودية واسرائيل من هجمات صواريخ سكود العراقية. باتريوت هو متوسط ​​المدى الولايات المتحدة السطح لنظام الهواء، المصنعة من قبل الشركة رايثيون. -The حجم اعتراضية باتريوت نفسه هو حول ما يقرب من 20 أقدام طويلة. ويزن حوالي 2000 جنيه. ويحمل رأسا حربية من حول، اعتقد انها ما يقرب من 150 جنيه. والرؤوس الحربية نفسه شديدة الانفجار، التي لديها شظايا من حوله. غلاف الرأس الحربي هو مصممة للعمل مثل رصاص. تتم -The صواريخ أربعة في وعاء، ويتم نقلها من قبل مقطورة نصف. -The نظام باتريوت المضادة للصواريخ يعود لا يقل عن 20 سنوات حتى الآن. صمم أصلا كما صاروخ الدفاع الجوي لاسقاط طائرات العدو. في حرب الخليج الأولى، عندما جاءت تلك الحرب جنبا إلى جنب، يريد الجيش لاستخدامها ل اسقاط صواريخ سكود، وليس الطائرات. كانت القوة الجوية العراقية وليس ذلك بكثير على وجود مشكلة. ولكن الجيش كان قلقا حول صواريخ سكود. وهكذا حاولوا ترقية باتريوت. -Intercepting عدو صاروخ السفر في ماخ 5 كان على وشك أن يتحدى بما فيه الكفاية. ولكن عندما باتريوت تم نقله إلى الخدمة، وكان الجيش لا علم ل تعديل العراقي التي جعلت صواريخ سكود من المستحيل تقريبا للضرب. وماذا حدث هو أن صواريخ سكود كانوا قادمين كانت غير مستقرة. كانوا متذبذب. وكان السبب في ذلك العراقيين، من أجل للحصول على 600 كيلو متر من أصل 300 كيلو متر صاروخ، أخذ الوزن من الرؤوس الحربية الأمامي. جعلوا الرؤوس أخف وزنا. وحتى الآن صواريخ باتريوت هي في محاولة للتوصل إلى سكود. والأكثر من ذلك الوقت، الغالبية العظمى من الوقت، انها تطير فقط عن طريق سكود. وبمجرد أن مشغلي نظام باتريوت أدرك باتريوت أخطأ هدفه، فجروا رأس حربي لصواريخ باتريوت لتجنب سقوط ضحايا محتملة اذا وسمح ليسقط على الأرض. كان -من ما اعتبره معظم الناس، تلك نارية كبيرة في السماء، ويساء فهمه على اعتراض الرؤوس الحربية من طراز سكود. -Although في الليل السماء، بدا وطنيات أن يكون بنجاح تدمير صواريخ سكود، في الظهران، يمكن أن يكون هناك أي خطأ حول أدائها. هناك، ونظام رادار باتريوت فقدت المسار من صواريخ سكود واردة، وأبدا أطلقت بسبب لعيب البرمجيات. وكان الإسرائيليون الذين اكتشفت لأول مرة أن يعد النظام كان على، وكلما زاد التباين الوقت أصبح، بسبب ساعة جزءا لا يتجزأ من في جهاز الكمبيوتر الخاص بالنظام. نبذة عن أسبوعين قبل المأساة في الظهران، ذكرت صحيفة الإسرائيليين وزارة الدفاع أن النظام بدأ يفقد الوقت. بعد حوالي ثماني ساعات أو الجري، لاحظوا أن النظام أصبح بشكل ملحوظ أقل دقة. وردت وزارة الدفاع من قبل يقول كل من بطاريات باتريوت ذلك لعدم ترك النظم لفترة طويلة. هم لم يقل ما فترة طويلة was-- ثماني ساعات، 10 ساعة، 1000 ساعة. لا أحد يعرف. -The بطارية صواريخ باتريوت المتمركزة في الثكنة في الظهران ومعيبة الداخلية لها وعلى مدار الساعة كان على أكثر من 100 ساعة في ليلة 25 فبراير. -من تعقب الوقت الى دقة من حوالي عشر من الثانية. الآن، عشر من الثانية هو عدد مثيرة للاهتمام، لأنه لا يمكن التعبير عنها في ثنائي بالضبط، والتي يعني أنه لا يمكن التعبير عنها بالضبط في أي جهاز كمبيوتر الرقمية الحديثة. من الصعب أن نصدق. ولكن استخدام هذا كمثال. دعونا نلقي الثالث رقم واحد. لا يمكن أن يكون ثلث وأعرب في العشرية بالضبط. ثلث هو 0.333 يجري لما لا نهاية. لا توجد وسيلة لفعل ذلك مع الدقة المطلقة في العشرية. هذا هو بالضبط هذا النوع من المشكلة ما حدث في وطني. ركض النظام أطول، و أسوأ أصبح خطأ وقت. ، وبعد 100 ساعة من العملية، كان الخطأ في الوقت حوالي الثلث فقط من الثانية. ولكن من حيث استهداف صاروخ السفر في ماخ 5، اسفر ذلك عن تتبع خطأ لأكثر من 600 متر. سيكون خطأ فادح للجنود على ما حدث وكان إطلاق سكود الكشف عن طريق الأقمار الصناعية للإنذار المبكر وكانوا يعرفون أن سكود كان القادمة في الاتجاه العام لها. انهم لا يعرفون أين كانت قادمة. -من يعود الان الى الرادار مكونات نظام باتريوت الدفاع الظهران لتحديد والحفاظ على مسار صواريخ العدو واردة. كان -The رادار ذكية جدا. فإنه تتبع الواقع موقف سكود، ثم التنبؤ بمكان ربما سيكون في المرة القادمة الرادار أرسلت نبض بها. التي كانت تسمى بوابة النطاق. -Then، وبمجرد أن باتريوت يقرر ما يكفي من الوقت لديها تمريرها إلى العودة ومراجعة المقبل الموقع لهذا الكائن المكتشف، انه يعود. لذلك عندما عاد إلى الخطأ المكان، ثم لا يرى وجوه. وتقرر أنه لا يوجد كائن، كان الكشف كاذبة، ويسقط المسار. اختفى -The سكود واردة من شاشة الرادار. وبعد ثوان، فإنه انتقد إلى الثكنات. سكود مقتل 28، وكان آخر واحدة أطلقت خلال حرب الخليج الأولى. ومن المؤسف أن البرنامج المحدث وصل في الظهران في اليوم التالي. وكان عيب البرمجيات كانت ثابتة، وإغلاق فصل واحد في المضطربة تاريخ صواريخ باتريوت. [تشغيل الفيديو] ديفيد جيه مالان: هذا هو كل شيء ل أقول إن هذه القضايا من فيض وعدم الدقة كلها حقيقية جدا. حتى كيف وصلنا إلى هنا؟ بدأنا مع نتحدث فقط عن printf. مرة أخرى، هذه الوظيفة التي يطبع شيء على الشاشة، وقدمنا ​​بعد ذلك عدد قليل من الوظائف الأخرى من ما يسمى مكتبة CS50 ل. وسوف نستمر في نرى هذه في الوقت المناسب. ونحن، وخاصة، وتستخدم سلسلة الحصول عليها، والحصول على كثافة العمليات، والآن أيضا الحصول على تعويم، وبعضها الآخر لا يزال سوف نواجهها واستخدام أنفسنا قبل فترة طويلة. ولكن في بعض الأحيان، يكون نحن رأينا بالفعل حاجة لتخزين ما يد تلك المهام مرة أخرى؟ أنها يسلمنا إلى الوراء سلسلة، أو عدد صحيح أو عدد عشري. وأحيانا نحتاج لوضع هذا سلسلة، أو الباحث، أو تعويم، في مكان ما. ولتخزين تلك الأشياء، أذكر فقط في مثل خدش، لدينا المتغيرات. ولكن خلافا في خدش، في C لدينا أنواع الفعلية البيانات variables-- أنواع، أكثر generally-- من بينها، سلسلة، عدد صحيح، ل تطفو، وهؤلاء الآخرين لا يزال. وذلك عندما نعلن المتغيرات في C، علينا أن يعلن أنواع البيانات لدينا. هذا ليس شيئا سنقوم عليك القيام به في وقت لاحق في الفصل الدراسي ونحن ننتقل إلى لغات أخرى. لكنه الآن، نحن بحاجة لبداهة مقدما، يشرح للكمبيوتر نوع من متغير نريد لها أن تعطينا. الآن، وفي الوقت نفسه، لطباعة هذا النوع من أنواع البيانات، علينا أن نقول printf ما يمكن توقعه. ورأينا في المئة الصورة للجمل، وفي المئة ط عن الأعداد الصحيحة، وعدد قليل من الآخرين بالفعل. وتلك هي ببساطة متطلبات لعرض مرئي من تلك المعلومات. ولكل من هذه يمكن أن تكون في الواقع parametrized أو أنب في بعض الطريق، إذا كنت ترغب في مزيد من السيطرة نوع من الإخراج الذي تحصل عليه. و، في الواقع، اتضح أن الأمر لا يقتصر هناك مائل ن لسطر جديد. هناك شيء آخر يسمى مائل ص لإرجاع، التي هي أقرب إلى آلة كاتبة المدرسة القديمة، وأيضا تستخدم ويندوز لسنوات عديدة. هناك طن مائل لعلامات التبويب. تبين، أنه إذا كنت تريد اقتباس مزدوجة داخل سلسلة، أذكر أننا قد استخدمت مزدوج اقتباس مزدوجة اقتبس على اليسار واليمين نهايات سلاسل لدينا حتى الآن. ويبدو أن هذا الخلط بين الأشياء. إذا كنت ترغب في وضع اقتباس مزدوجة في وسط string-- و، في الواقع، انها مربكة لنرى. وحتى يكون لديك للهروب، وذلك ل الكلام، واقتباس مزدوجة مع شيء مثل، حرفيا، مائل اقتباس مزدوجة. وهناك عدد قليل الآخر لا يزال. وسنرى المزيد من هذه في الاستخدام الفعلي قبل فترة طويلة. لذلك دعونا الانتقال الآن من البيانات، والتمثيل، ومشغلي الحسابية، كل من الذي قدم لنا بعض أعمال البناء الكتل التي للعب. ولكن الآن دعونا نعطي في الواقع لنا بقية المفردات أن لدينا بالفعل الأسبوع الماضي مع خدش من خلال إلقاء نظرة على بعض الآخر يبني في C-- ليس كلهم. لكن الأفكار نحن على وشك أن نرى حقا فقط التأكيد على الترجمة من لغة واحدة، خدش، لآخر، C. وعلى مر الزمن، ونحن سوف تلتقط المزيد من الأدوات لأدوات لدينا، إذا جاز التعبير، من حيث التركيب. وبالفعل، سترى أن الأفكار هي الآن مألوفة بدلا من الأسبوع الماضي. لذلك دعونا نفعل هذا. دعونا نمضي قدما وجهز برنامج في الواقع أن يستخدم بعض التعبيرات، تعبير منطقي. اسمحوا لي أن المضي قدما هنا وإنشاء ملف جديد. سأتصل هذا condition.c. اسمحوا لي أن المضي قدما في وتشمل المكتبة CS50. واسمحوا لي أن المضي قدما وتشمل معيار IO.h عن وظائفنا، وprintf، وأكثر من ذلك على التوالي. اسمحوا لي أن أقدم نفسي أن النمطي لل الفراغ الرئيسي كثافة العمليات التي سنقوم شرح أعود إليها في المستقبل. والآن اسمحوا لي المضي قدما وإعطاء نفسي كثافة العمليات عبر الباحث الحصول عليها. ثم اسمحوا لي أن نمضي قدما ونفعل هذا. أريد أن أقول إن كنت غير less-- دعونا التمييز بين إيجابية أو سلبية، أو قيم الصفر. حتى لو كنت أقل من الصفر، واسمحوا لي لديهم فقط هذا البرنامج ببساطة تقول، سلبي، مائل ن، وإلا لو كنت أكبر من الصفر. الآن أنا، بالطبع، أريد أن أقول printf إيجابي، مائل ن. ثم آخر if-- أتمكن من القيام بذلك. يمكنني أن أفعل لو كنت يساوي 0. ولكن يهمني أن تكون القرارات في أقل خطأ واحد بالفعل. يذكر أن علامة المساواة هو لا يساوي، كما يعرف نحن البشر ذلك. لكنه عامل التعيين. ونحن لا نريد أن نأخذ 0 على الحق ووضعها في الاول على اليسار. وذلك لتجنب هذا الارتباك، أو ربما سوء استخدام يساوي توقيع، قرر البشر منذ عدة سنوات أنه في كثير من لغات البرمجة عندما تريد أن تحقق من وجود المساواة بين اليسار واليمين، كنت في الواقع استخدام يساوي متساوين. لذلك كنت ضرب علامة يساوي مرتين. عندما تريد تعيين من اليمين إلى اليسار، يمكنك استخدام علامة المساواة واحد. حتى نتمكن من القيام this-- آخر اذا كنت يساوي يساوي الصفر. أنا يمكن أن ثم انتقل و فتح بلدي الأقواس المعقوفة، ويقول: printf 0، مائل ن، فعل. ولكن تذكر كيف أن هذه الشوك في الطريق يمكن أن تعمل. و، حقا، مجرد التفكير في المنطق. أنا هو رقم. انها صحيحا، على وجه التحديد. وهذا يعني أنه سيكون أقل من 0، أو أكبر من 0، أو 0. حتى لا يكون هناك نوع من هذا الحالة الافتراضية الضمنية. وحتى نتمكن من، تماما مثل الصفر، الاستغناء عن آخر إذا، وأقول آخر. منطقيا، إذا لك مبرمج يعرف هناك فقط ثلاثة دلاء إلى فيه السيناريو يمكن fall-- الأولى، والثاني، أو الثالث في هذا case-- لا انشغال بإضافة دقة إضافية ومنطق إضافية هناك. فقط المضي قدما في الحالة الافتراضية هنا لآخر. الآن، دعونا نمضي قدما بعد حفظ هذا، وجعل شروط دوت خفض conditions-- لا واجهة المستخدم كبيرة، لأنني لست دفع المستخدم، كما ذكرت سابقا. ولكن هذا شيء طيب. ونحن سوف يبقيه بسيط. دعونا نحاول عدد 42. وهذا أمر إيجابي. دعونا نحاول عدد سلبية 42، سلبية. دعونا نحاول القيمة 0. وبالفعل، وأنها تعمل. الآن، سترى مع المشاكل قبل طويلة، اختبار الأشياء ثلاث مرات، ربما ليست كافية. ربما كنت ترغب في اختبار بعض أعداد أكبر، وبعض أصغر أرقام، وبعض الحالات الزاوية، كما سوف نأتي لوصفها. ولكن الآن، وهذا هو برنامج بسيط جدا. وأنا متأكد، منطقيا، أنه يقع في ثلاث حالات. و، في الواقع، على الرغم من أننا فقط ركزت على الجوانب السلبية المحتملة من عدم الدقة وتجاوز، في الواقع حيث العديد من المشاكل CS50، و نحن لن تقلق حول، في كل وقت، هذه القضايا من تجاوز و عدم الدقة، لأنه، في الواقع، في C، انها في الواقع ليس كل ما من السهل تجنب تلك الأشياء. إذا كنت تريد أن العد حتى أكبر، وأكبر، وأكبر، اتضح أن هناك تقنيات لك يمكن استخدامها، وغالبا ما تنطوي على أشياء تسمى المكتبات، ومجموعات من التعليمات البرمجية، التي كتب الآخرين التي يمكنك استخدامها، وغيرها من اللغات مثل جافا وغيرها، في الواقع جعل من الأسهل كثيرا لحساب أعلى من ذلك. لذلك هو حقا بعض من هذه المخاطر وظيفة اللغة التي تستخدمها. وخلال الأسابيع القادمة، وسوف نقوم نرى كيف خطير C حقا يمكن أن يكون إذا كنت لا تستخدم بشكل صحيح. ولكن من هناك، ومع بيثون، وجافا سكريبت، سوف نحن طبقة على بعض الحماية الإضافية، وتشغيل أقل من تلك المخاطر. لذلك دعونا جعل أكثر من ذلك بقليل منطق مثيرة للاهتمام في برنامجنا. لذلك اسمحوا لي أن أذهب إلى الأمام وخلق برنامج يسمى المنطقي فقط حتى أتمكن من اللعب مع بعض المنطق الفعلي، logical.c. أنا مجرد نسخ ولصق بعض كود في وقت سابق من ذلك أعود لهذا نقطة انطلاق لطيفة. اسمحوا لي هذه المرة القيام C. شار أنا الذهاب إلى إعطائها اسم C لمجرد انها التقليدية، الحصول على حرف من المستخدم. ودعونا نتظاهر مثل أنا تنفيذ جزء هذا البرنامج رو، وإزالة البرنامج قبل أن مطالبة المستخدم لإزالة ملف. كيف يمكن أن نفعل ذلك؟ أريد أن أقول، إذا كان يساوي C يساوي، الإقتباس، ذ، ثم أنا ذاهب لنفترض أن المستخدم قد اختار نعم. أنا ذاهب لمجرد طباعة نعم. لو كانت الكتابة فعلا برنامج إزالة، نحن يمكن إزالة الملف مع مزيد من الخطوط من التعليمات البرمجية. ولكننا سوف يبقيه بسيط. آخر إذا تساوي ج يساوي n-- والآن هنا، وأنا أريد أن أقول، يجب على المستخدم أن يعني لا. ثم آخر، وأنت تعرف لماذا؟ أنا لا أعرف ماذا المستخدم هو الذهاب الى الكتابة. لذلك أنا فقط أريد أن أقول أن هذا خطأ، مهما كان انه أو انها كتبته فعلا. لذلك ما الذي يحدث هنا؟ هناك فرق جوهري مقابل ما فعلته في الماضي. التنصيص، علامات الاقتباس المزدوجة، انقر نقرا ونقلت وو، ولكن، ونقلت واحدة، ونقلت واحدة. اتضح في C، أنه عندما كنت أريد أن أكتب سلسلة، كنت لا تستخدم علامات التنصيص، تماما كما كنا تم استخدام كل هذا الوقت مع printf. ولكن إذا كنت ترغب في التعامل مع مجرد حرف واحد، وهو ما يسمى شار، ثم كنت في الواقع استخدام علامات الاقتباس المفردة. لأولئك منكم الذين برمجت من قبل، قد لا يكون لديك كان ما يدعو للقلق حول هذا التمييز في بعض اللغات. في C، ولكنه لا يهم. وحتى عندما أحصل على شار وأريد لنقارن ذلك شار باستخدام يساوي يساوي بعض إلكتروني مثل نعم أو لا، أنا لا، في الواقع، تحتاج إلى أن يكون الاقتباس واحدة. الآن، دعونا نمضي قدما ونفعل هذا. دعونا نمضي قدما ولا تجعل نقطة منطقية مائل منطقية. والآن أنا المطالبة. لذلك، من المفترض، وتجربة أفضل للمستخدم سيقول لي فعلا ما يجب القيام به هنا. ولكن انا ذاهب الى مجرد عمياء يقول ذ لنعم، حسنا، لطيف. دعونا تشغيله مرة أخرى، ن للا، لطيفة. لنفترض مثل بعض الناس وأنا أعلم، بلدي مفتاح Caps Lock على كثير من الأحيان. لذلك أقوم العاصمة Y، أدخل، خطأ. حسنا، انها ليست بالضبط ما كنت أتوقع. في الواقع، الكمبيوتر تقوم به حرفيا ما قلت لdo-- تحقق ل صغيرة ذ والصغيرة ن. هذا لا يشعر وكأنه جيدة تجربة المستخدم، وبالرغم من ذلك. واسمحوا لي أن أسأل ل، واستعرض إما أقل القضية أو الحالة العليا. لذلك تبين، قد ترغب أن أقول شيئا في مثل خدش، مثل حرفيا أو C يساوي يساوي العاصمة واحد ذ نقلت. تبين، C لايوجد هذه الكلمة الحرفي أو. ولكن لديها اثنين من أشرطة عمودية. لديك لعقد التحول عادة، إذا كنت تستخدم لوحة المفاتيح الولايات المتحدة، وضرب شريط عمودي مفتاح فوق مفتاح عودتك. ولكن هذا الشريط العمودي شريط عمودي يعني أو. إذا، على النقيض من ذلك، أردنا أقول و، كما هو الحال في خدش، يمكننا القيام به العطف العطف. أن لا معنى منطقي هنا، لأن الإنسان لا يمكن أن وقد كتبته على حد سواء ذ والصغيرة ذ ورأس المال Y كما نفس الحرف. لذلك أو ما ننوي هنا. لذلك إذا كنت تفعل هذا في كلا المكانين، أو ج يساوي يساوي العاصمة N، أعد الآن، جعل منطقية، إعادة تشغيل منطقي. الآن، ويمكنني أن اكتب ذ. وأستطيع أن أفعل ذلك مرة أخرى مع العاصمة Y، أو N. العاصمة وبوسعي أن أضيف في إضافي تركيبات لا يزال. لذلك هذا هو منطقي البرنامج بقدر الآن أنا فحص منطقيا ل هذه القيمة أو هذه القيمة. وأنا لم يكن لديك ل، بالضرورة، يأتي مع اثنين من أكثر المحاذير وإلا استثناءات. أنا يمكن الجمع بين الواقع بعض منطق ذات الصلة معا في هذا الطريق. ولذلك فإن هذا سيكون أفضل صمم من مجرد وقال: إذا C يساوي أقل حالة ذ، طباعة نعم، وإلا إذا ج يساوي العاصمة Y، طباعة نعم، وإلا إذا تساوي ج lower-- وبعبارة أخرى، لم يكن لديك لديك المزيد والمزيد من الفروع. يمكنك الجمع بين بعض ما يعادل فروع منطقيا، كما هو الحال في هذا الطريق. لذلك دعونا نلقي نظرة على واحدة فقط العنصر النهائي، واحدة بناء النهائية، أن C يسمح. وسوف نعود في المستقبل للآخرين لا يزال. وبعد ذلك سوف نستنتج من خلال النظر لعدم صحة code-- الحصول على الرمز إلى work-- لكن التصميم من التعليمات البرمجية، وزرع هذه البذور في وقت مبكر. لذلك اسمحوا لي المضي قدما و فتح ملف جديد هنا. أتعلم؟ انا ذاهب الى إعادة تنفيذ- هذا البرنامج نفسه، ولكن باستخدام بناء مختلفة. لذلك اسمحوا لي بسرعة أعطي نفسي وصول لتشمل CS50.h للمكتبة CS50، Io.h معيار لprintf. أعطني بلدي الفراغ الرئيسي كثافة العمليات. ثم هنا، اسمحوا لي نمضي قدما ونفعل هذا. شار ج يحصل على شار، تماما مثل قبل. وانا ذاهب الى استخدام بناء جديد الآن-- تبديل، على ما الشخصية؟ ذلك التحول هو نوع من مثل التحول من خطوط السكك الحديدية. أو، في الحقيقة، هو نوع من وعدا ذلك، إذا آخر إذا، ولكن مكتوبة بشكل مختلف نوعا ما. فالتحول يشبه هذا. لديك التبديل، ثم ما حرف أو الرقم الذي تريد أن ننظر، ثم بعض الأقواس المجعدة كما هو الحال في الصفر، ويقول عادل تفعل هذه الاشياء. ثم لديك قضايا مختلفة. كنت لا تستخدم إذا وآخر. لكم حرفيا استخدام القضية كلمة. وسوف أقول لكم شيئا من هذا القبيل. حتى في حالة وجود ذ صغيرة، أو في حالة وجود عاصمة Y، المضي قدما وطباعة نعم. ومن ثم الخروج من التبديل. هذا هو. لقد انتهينا. آخر إذا، إذا جاز التعبير، انخفاض حالة ن، أو رأس المال N، ثم المضي قدما والطباعة من لا، ومن ثم كسر. Else-- وهذا النوع من هو الحالة الافتراضية indeed-- printf error-- وفقط لحسن التدبير، على الرغم من منطقيا كسر هذا ليس ضروريا لأننا في نهاية للتبديل على أي حال، أنا كسر الآن من التبديل. لذلك هذا تبدو مختلفة قليلا. ولكن، منطقيا، انها أي ما يعادل في الواقع. وماذا كنت تستخدم واحد على الآخر؟ في بعض الأحيان، مجرد تفضيل شخصي، أحيانا جماليات، إذا كنت إلقاء نظرة على هذا الآن، هناك شيء يمكن أن يقال ل قراءة من هذا القانون. أعني، ناهيك عن حقيقة أن هذا متاحة الجديد للكثيرين منا في الغرفة. ولكن مجرد نوع من هي جميلة. ترى صغيرة ذ عاصمة Y، انخفاض حالة ن عاصمة N الافتراضي، انها مجرد نوع من يقفز في لكم بطريقة هذا، يمكن القول، ربما المثال السابق مع المؤسسة الدولية للعلوم، وأشرطة عمودية، والمحاذير آخر، قد لا يكون. لذلك هذا هو حقا مسألة شخصية الاختيار، حقا، أو القراءة، من التعليمات البرمجية. ولكن من حيث الأداء الوظيفي، واسمحوا لي المضي قدما وجعل التبديل، مائل نقطة التبديل، واكتب الآن في ذ صغيرة، العاصمة Y، ن صغيرة عاصمة N، ديفيد، إعادة المحاولة لأن هذا لا حرف واحد. دعونا نفعل س، خطأ، كما هو متوقع. و، logically-- وهذا شيء وأود أن أشجع في general-- حتى على الرغم من أننا فقط خدش سطح بعض من هذه الميزات. وأنه قد لا يكون واضحا عند نفسك الجلوس على لوحة المفاتيح، كيف يعمل هذا؟ ما هذا من شأنه أن تفعل؟ الشيء الجميل عن وجود جهاز كمبيوتر محمول، أو سطح المكتب، أو الوصول إلى كمبيوتر مع مترجم، ومع محرر مدونة من هذا القبيل، ويمكنك دائما تقريبا الإجابة على هذه الأسئلة لنفسك فقط عن طريق المحاولة. على سبيل المثال، إذا كان الخطابي كانت مسألة في متناول اليد، ماذا يحدث إذا كنت قد نسيت البيانات كسر الخاص بك؟ الذي هو في الواقع شائعة جدا ما ينبغي القيام به، لأنه لا يبدو مثل كنت حقا في حاجة إليها. أنها لا تكمل في الواقع الخاص بك يعتقد مثل قوس أو مجعد هدفين لا. دعونا نمضي قدما و إعادة ترجمة التعليمات البرمجية ونرى. وهكذا جعل التبديل، نقطة التحول مائلة. دعونا اكتب في الحالة الأدنى ذ، في حالة أعلى، أدخل. لذلك أنا كتبته ذ. وقال برنامج نعم، لا، خطأ، كما لو انها تغير رأيها. ولكنه نوع من كان، لأن ما يحدث مع التحول هو الحال الأولى التي مباراة تعني في الأساس، مهلا الكمبيوتر، تنفيذ كافة التعليمات البرمجية تحتها. وإذا كنت لا أقول كسر، أو لا أقول كسر، أو لا أقول انقطاع، الكمبيوتر هو الذهاب الى تفجير خلال كل تلك الخطوط وتنفيذ كل منهم حتى فإنه يحصل على هذا متعرج. حتى الفرامل هي، في الواقع، اللازمة. ولكن الوجبات الجاهزة هنا، عندما في شك، حاول شيئا. ربما حفظ التعليمات البرمجية الخاصة بك أولا، أو حفظه في ملف إضافي إذا كنت قلقا حقا حول لخبطة والحاجة إلى استعادة العمل الذي تعرفه يعمل. ولكن في محاولة الأشياء. ولا تخافوا كما، ربما، ما قد يفعله الكمبيوتر، أو أنك قد كسر شيء. يمكنك دائما العودة الى الوراء لبعض إصدار سابق. لذلك دعونا ينتهي من خلال النظر في التصميم من التعليمات البرمجية. لدينا هذه القدرة الآن على كتابة الشروط والحلقات الكتابة، والمتغيرات، وظائف الاتصال. لذلك، وبصراحة، نحن نوع من الخلف في حيث كنا قبل أسبوع مع خدش، وإن كان ذلك مع النصوص أقل مقنعة البيئة من خدش تسمح. ولكن لاحظ كيف بسرعة اكتسبناه أن المفردات، حتى لو كان سيستغرق بعض الوقت لتغرق في، حتى نتمكن من الآن استخدام هذه المفردات لكتابة برامج أكثر إثارة للاهتمام. ودعونا نلقي خطوة الطفل نحو ذلك، على النحو التالي. اسمحوا لي أن المضي قدما في إنشاء ملف جديد هنا. أنا ذاهب لاستدعاء هذا prototype.c، وإدخال لأول مرة، والقدرة لجعل المهام الخاصة بك. البعض منكم قد يكون فعلت ذلك مع خدش، حيث يمكنك إنشاء الخاصة بك كتل المخصصة الخاصة في خدش، ومن ثم جرها إلى مكان أينما كنت ترغب في C. وفي معظم البرمجة لغات، يمكنك أن تفعل بالضبط هكذا- يضرب جعل المهام الخاصة بك، إذا لم تكن موجودة بالفعل. لذلك، على سبيل المثال، اسمحوا لي أن المضي قدما وتشمل CS50.h، وتشمل معيار IO.h، الفراغ الرئيسي كثافة العمليات. والآن لدينا العنصر النائب على استعداد للذهاب. أنا ابقاء الامور الطباعة مثل أسماء الناس اليوم. وأن يشعر like-- لن يكون لطيفا إذا كان هناك كانت وظيفة تسمى اسم المطبوعة؟ أنا لم يكن لديك لاستخدام printf. أنا لم يكن لديك لنتذكر جميع رموز تنسيق. لماذا لا أنا، أو لماذا لم شخص قبلي، إنشاء دالة يسمى الطباعة اسم، أنه نظرا بعض الاسم، ببساطة يطبع بها؟ وبعبارة أخرى، إذا قلت، مهلا، الكمبيوتر، أعطني سلسلة بسؤال المستخدم لمثل هذا، من خلال وظيفة سلسلة الحصول CS50 ل. مهلا، الكمبيوتر، وضعت هذه السلسلة في المتغير في الجانب الأيسر، والذي يطلق عليه ق. ومن ثم، مهلا الكمبيوتر، والمضي قدما وطباعة إسم هذا الشخص، القيام به. الآن، سيكون من الجميل، ل هذا البرنامج، اسم على مسمى، يقول لي ما يفترض القيام به عن طريق أسماء تلك الدالة. اسمحوا لي ان اذهب وجعل النموذج، أدخل. و، للأسف، هذا لن يطير. Prototype.c، السطر 7، شخصية 5، خطأ، إعلانا ضمنيا من اسم المطبوعة وظيفة غير صالح في C99، C99 وهذا يعني نسخة من C التي خرجت في عام 1999. هذا كل شئ. لذلك أنا لا أعرف ما كل هذا يعني حتى الان. لكنني الاعتراف خطأ باللون الأحمر. وهذا واضح جدا. ويبدو أنه مع الطابع الأخضر هنا، كانت المشكلة مع اسم المطبوعة، وفتح القوسين الصورة، إغلاق القوسين، منقوطة. لكن إعلان ضمني وظيفة فعلنا نرى لفترة وجيزة في وقت سابق. وهذا يعني، ببساطة، أن رنة لا تعرف ما أعنيه. لقد استعملت كلمة المفردات أنه لم أر أو تم تدريسها من قبل. ولذلك أنا بحاجة لتدريسه ماذا تعني هذه الوظيفة. لذلك أنا ذاهب إلى المضي قدما ونفعل ذلك. انا ذاهب الى المضي قدما في تنفيذ مهمتي الخاصة يسمى اسم طباعة. وأنا أريد أن أقول، على النحو التالي، أن وهي تفعل ذلك، printf، مرحبا، في المئة الصورة، مائل ن والاسم ومنقوطة. وذلك ما لم أنا فقط أفعل؟ هكذا اتضح، ل تنفيذ وظيفة الخاصة بك، نحن نوع من اقتراض بعض نفس هيكل الرئيسي أن كنا فقط مفروغا منه، وأنا أعرف فقط نسخ و لصق حد كبير ما لقد تم كتابة في الماضي. ولكن لاحظ نمط هنا. كثافة العمليات، الرئيسي، الفراغ، فإننا سوف ندف بعيدا قبل فترة طويلة ماذا يعني ذلك في الواقع. ولكن لهذا اليوم، فقط تلاحظ التوازي. باطلا، اسم المطبوعة، اسم السلسلة، ولذلك لا يوجد والكلمة الأرجواني، الذي ونحن في طريقنا لبدء استدعاء نوع الإرجاع، واسم وظيفة، ثم دخل. لذلك، في الواقع، يمكننا استخلاص هذا النوع من مثل الأسبوع الماضي كما، وهذا هو الاسم أو الخوارزمية من قانون نحن الذهاب إلى write-- لل الخوارزمية رمز ونحن في طريقنا إلى الكتابة. هذا هو مدخلاته. هذا هو انتاجها. هذه الوظيفة، اسم المطبوعة، هو مصممة على اتخاذ سلسلة تسمى اسم، أو أيا كان، كمدخل، ثم الفراغ. فإنه لا يرجع أي شيء، مثل الحصول على سلسلة أو الحصول على كثافة لا. لذلك سيكون لتسليم لي شيئا في المقابل. انها مجرد ستكون لدينا الآثار الجانبية، إذا جاز التعبير، طباعة اسم الشخص. لذلك تلاحظ، السطر 7، وأنا يمكن أن نطلق اسم المطبوعة. خط 10، وأنا يمكن أن تحدد أو تنفيذ اسم المطبوعة. ولكن، للأسف، هذا لا يكفي. اسمحوا لي أن المضي قدما في إعادة ترجمة هذا بعد حفظه. قف، الآن، لقد جعلت من الأسوأ من ذلك، فإنه يبدو. إعلان ضمني لذلك من اسم وظيفة الطباعة غير صالح. ومرة أخرى، هناك المزيد من الأخطاء. ولكن كما قلت حذر في وقت سابق، حتى إذا كنت الحصول على طغت مع، أو حزين قليلا لرؤية هذا العدد الكبير الأخطاء، والتركيز فقط على أول في البداية، لأنه ربما فقط كان لها تأثير المتتالية. لذا C، أو رنة وبشكل أكثر تحديدا، لا يزال لا يعرف اسمه الطباعة. وذلك لأن رنة، حسب التصميم، هو نوع من البكم. وهو يفعل إلا ما كنت أقول أن تفعله. وهو يفعل ذلك فقط في الترتيب الذي كنت أقول أن تفعله. لذلك أنا قد حددت الرئيسي على خط الأربعة، كما كنا نفعل في كثير من الأحيان إلى حد ما. لقد تعرف اسم المطبوعة على خط 10. ولكن أنا أحاول أن استخدام اسم المطبوعة على خط سبعة. انها في وقت قريب جدا، لم تكن موجودة حتى الآن. لذلك يمكن أن تكون ذكية، ويكون مثل، حسنا، دعونا لعب جنبا إلى جنب، ونقل اسم طباعة تصل هنا، وإعادة تجميع. يا إلهي. انها عملت. انها بسيطة على هذا النحو. ولكن المنطق هو ذلك بالضبط. لديك لتعليم رنة ما هو من خلال تحديد وظيفة أولا. ثم يمكنك استخدامه. ولكن، بصراحة، وهذا يشعر مثل منحدر زلق. هكذا في كل مرة أقوم بتشغيل في مشكلة، أنا فقط الذهاب لتسليط الضوء على ونسخ رمز كتبت، وقطع ولصقه هنا. وبالتأكيد، فإننا يمكن أن دبر بعض السيناريوهات حيث قد وظيفة واحدة تحتاج إلى استدعاء آخر. وانك لا يمكن وضع كل وظيفة فوق كل الآخرين. هكذا اتضح هناك ل أفضل حل. يمكننا أن نترك هذا يكون. وبصراحة، أنه من الجيد عموما، ومريحة، والتصميم الجيد لوضع الرئيسية أولا، لأنه، مرة أخرى، الرئيسية تماما مثل عند النقر العلم الأخضر، هذا هو وظيفة أن يعدم افتراضيا. لذلك قد مثل وضع جيد في الجزء العلوي من الملف حتى عندما كنت أنت أو أي يبدو انسان آخر في الملف أنت تعرف ما يحدث فقط من خلال قراءة الرئيسي أولا. لذلك تبين، يمكننا ان نقول رنة استباقي، مهلا، رنة، على خط الأربعة، أعدك أن تنفيذ وظيفة تسمى طباعة الاسم الذي يأخذ اسم سلسلة تسمى كمدخل، والعوائد شيء أو باطل. وسوف تحصل في جميع أنحاء ل تنفيذ في وقت لاحق. هنا يأتي الرئيسية. الرئيسية الآن على خط 9 يمكن استخدام اسم المطبوعة بسبب رنة والثقة التي، في نهاية المطاف، وسوف تواجه التعريف لتنفيذ اسم طباعة. حتى بعد حفظ الملف الخاص بي، واسمحوا لي المضي قدما وتقديم النموذج، تبدو جيدة هذه المرة. نقطة خفض، والنموذج، واسمحوا لي المضي قدما واكتب في اسم. ديفيد، مرحبا ديفيد، Zamila، مرحبا Zamila، و، في الواقع، والآن يعمل. لذلك العنصر هنا هو أن لدينا جعل وظيفة مخصصة، مثل مخصص كتلة الصفر نحن نطلق عليه. ولكن على عكس الصفر حيث يمكنك فقط إنشائه والبدء في استخدامه، الآن علينا أن نكون على أكثر قليلا متحذلق، وفعلا تدريب رنة للاستخدام، أو أن نتوقع ذلك. الآن، بوصفها جانبا، لماذا كل هذا الوقت لديها نحن للتو على نحو أعمى على الإيمان بما في ذلك CS50.h، وبما في ذلك معيار IO.h؟ حسنا، كما تبين، بين عدد قليل من الأشياء الأخرى، كل هذا في تلك النقطة ح الملفات، ويحدث أن تكون ملفات. انهم الملفات رأس، إذا جاز التعبير. انهم ما زالوا مكتوب في C. ولكن انهم نوع مختلف من الملف. في الوقت الراهن، يمكن أن نفترض حد كبير أن كل ما هو داخل CS50.h هو بعض المتشددين واحد من هذا القبيل، لا لوظائف دعا اسم طباعة، ولكن لاحصل على سلسلة، واحصل على تعويم، وعدد قليل من الآخرين. وهناك نماذج مماثلة، واحد المتشددين، داخل IO.h القياسية لprintf، الذي هو الآن في بلدي وظيفة اسم طباعة. لذلك وبعبارة أخرى، وهذه المرة كله قمنا فقط تم نسخ ولصق عمياء وتشمل هذه، وتشمل ذلك، ما الذي يحدث؟ تلك ليست سوى نوع من القرائن إلى رنة لما ظائف هي، في الواقع، نفذت فقط في أماكن أخرى في ملفات مختلفة في مكان آخر على النظام. ولذا فإننا قد نفذت اسم المطبوعة. فإنه لا يكون هذا التأثير الجانبي لل طباعة شيء على الشاشة. ولكنه لم يكن في الواقع تسلم لي شيئا في المقابل. كيف نذهب حول تنفيذ برنامج لا يسلم لي شيئا مرة أخرى؟ حسنا، دعونا نحاول هذا. اسمحوا لي أن المضي قدما في تنفيذ ملف يسمى return.c حتى نتمكن من شرح كيفية شيئا مثل الحصول على سلسلة، أو الحصول على كثافة العمليات، هو العودة في الواقع شيء إلى المستخدم. دعونا نمضي قدما وتحديد الفراغ الرئيسي كثافة العمليات. ومرة أخرى، في المستقبل، وسوف نقوم شرح ما أن كثافة وهذا الفراغ هو القيام بالفعل. ولكن لهذا اليوم، وسوف نقوم أعتبر أمرا مفروغا منه. انا ذاهب الى المضي قدما وprintf، للحصول على تجربة جيدة للمستخدم، x هو. ثم انا ذاهب الى الانتظار ل المستخدم أن تعطيني X مع كثافة الحصول عليها. ثم انا ذاهب الى المضي قدما وطباعة x إلى الساحة. حتى عندما يكون لديك فقط لوحة المفاتيح، والناس عادة استخدام الجزرة قليلا رمز على لوحة المفاتيح لتمثيل لسلطة من، أو الأس. لذا X مربع موجود ط. والآن أنا ذاهب للقيام بذلك. أنا فقط يمكن أن do-- ما هو العاشر المربعة؟ س التربيعية س س الأوقات. وفعلنا هذا بعض منذ فترة بالفعل اليوم. هذا لا يشعر وكأنه كل ما تقدم كبير. أتعلم؟ دعونا الاستفادة من بعض هذه الفكرة من آخر مرة من التجريد. لن يكون ذلك جميلا إذا هناك وظيفة تسمى المربع الذي يفعل ذلك بالضبط؟ لا يزال، في نهاية اليوم، لا نفس الرياضيات. ولكن دعونا مجردة بعيدا عن فكرة جني رقم واحد مضروبا آخر، ويكتفي بأن يقدم لها اسم، مثل تربيع هذه القيمة. وبعبارة أخرى، في C، دعونا خلق وظيفة دعا المربع الذي يفعل ذلك بالضبط. انها على وشك أن يسمى مربع. انها سوف تأخذ عدد صحيح. وسنقوم سوف فقط نسميها ن، بشكل افتراضي. لكننا يمكن أن يطلق عليه أي شيء نريده. وكل ما يحدث ل القيام به، حرفيا، هو عودة نتيجة المرات ن ن. ولكن لأنها العودة شيء، والذي هي الكلمة باللون الأرجواني قمنا لم يسبق له مثيل، وأنا، على الخط 11، لا يمكن أن أقول الفراغ هذه المرة. الفراغ، في المثال رأينا فقط بدلا من اسم المطبوعة، يعني فقط، نفعل شيئا. ولكن لا يد لي شيئا في المقابل. في هذه الحالة، وأنا لا أريد للعودة ن ن مرات، أو أيا كان ذلك، هذا العدد. لذلك لا أستطيع أن أقول، مهلا، الكمبيوتر، أعود شيء، الفراغ. انها سوف تعود، بحكم طبيعتها، وعدد صحيح. وذلك أن كل ما يحدث هنا. مدخل إلى مربعة سيكون عدد صحيح. وحتى نتمكن من استخدامها، فقد ل يكون له اسم، N. انه ذاهب لإخراج عدد صحيح لا تحتاج إلى اسم. يمكننا أن نترك لالرئيسي، أو أيا كان باستخدام لي أن نتذكر هذه القيمة إذا كنا تريد مع المتغير الخاص بها. ومرة أخرى، الجديد الوحيد الكلمة هنا هو العائد. وأنا مجرد القيام ببعض الرياضيات. إذا أردت حقا أن يكون لا لزوم لها، أستطيع أن أقول المنتج كثافة يحصل ن ن مرات. وبعد ذلك يمكن أن نقول، عودة المنتج. ولكن، مرة أخرى، إلى وجهة نظري في وقت سابق من هذه مجرد عدم design-- جيدة مثل، لماذا إدخال اسم، رمز، مثل المنتج، فقط للعودة على الفور؟ انها قليلا أكثر نظافة، تشديد قليلا، لذلك في الكلام، فقط أن أقول مرة عودة ن ن، والتخلص من هذا الخط تماما. وانها مجرد أقل كود للقراءة، فرصة أقل للخطأ. ودعونا نرى ما اذا كان هذا في الواقع يعمل الآن. الآن، وانا ذاهب للذهاب قدما وجعل العودة. اه أوه، إعلان ضمني من وظيفة. أنا جعلت هذا الخطأ من قبل، ليست صفقة كبيرة. واسمحوا لي أن اكتب، أو تسليط الضوء على نسخ، بالضبط نفس وظيفة النموذج، أو التوقيع، وظيفة هنا. أو أنا يمكن أن تتحرك وظيفة كاملة. ولكن هذا كسول قليلا. لذلك نحن لن نفعل ذلك. والآن، اسمحوا لي أن عودة مرة أخرى، دوت عودة مائلة. س و2. س التربيعية 4. س و3. س التربيعية 9. ويبدو أن وظيفة الآن أن العمل. إذن ما هو الفرق هنا؟ لدي وظيفة وهذا يسمى مربع، في هذه الحالة، التي وضعت في المدخلات. وأعود يبلغ حجم انتاجها. وحتى الآن، في وقت سابق، إن أنا فتح مثال آخر في وقت سابق من، التي ودعا prototype.c، كان لي اسم المطبوعة، التي عاد الفراغ، إذا جاز التعبير، أو أنه عاد شيء، و كان مجرد أثر جانبي. لذلك ما الذي يحدث هنا؟ حسنا، والنظر في وظيفة الحصول على سلسلة لمجرد لحظة. لقد تم استخدام وظيفة الحصول على سلسلة بالطريقة التالية. لقد كان لدينا وظيفة الحصول على سلسلة، مثل تشمل CS50.h، تشمل معيار IO.h، الباحث، الرئيسي، الفراغ. ثم في كل مرة لقد دعا سلسلة الحصول حتى الآن، قلت شيء من هذا القبيل، سلسلة الصورة يحصل على سلسلة، لأن الحصول على string-- دعونا ندعو هذه السلسلة الحصول get.c-- نفسه بإرجاع سلسلة أستطيع أن ثم استخدام، ويقول: مرحبا، فاصلة، في المئة الصورة، مائل ن، ق. لذلك هذا هو نفس المثال، حقا، أن كان لدينا وقت سابق. حتى الحصول على سلسلة بإرجاع قيمة. ولكن قبل لحظة، سلسلة الطباعة لا ترجع قيمة. انها ببساطة على الآثار الجانبية. لذلك هذا هو الفرق الأساسي. لقد رأينا مختلفة أنواع من الوظائف الآن، وقد عاد بعض منها القيم، وبعضها لا. لذلك ربما انها سلسلة، أو الباحث، أو تعويم. أو ربما انها مجرد باطلا. والفرق هو أن هذه الوظائف التي الحصول على البيانات وإرجاع قيمة هي في الواقع جلب شيء يعود الى طاولة المفاوضات، إذا جاز التعبير. لذلك دعونا نمضي قدما و ننظر في مجموعة واحدة أخيرة من الأمثلة التي تعطي الشعور، الآن، من كيف يمكننا، في الواقع، مجردة أفضل، وأفضل، وأفضل، أو أكثر، وأكثر من ذلك، وأكثر من ذلك، من أجل في الكتابة، في نهاية المطاف، رمز أفضل. دعونا نمضي قدما، وبروح من الصفر، القيام بما يلي. اسمحوا لي أن نمضي قدما وتشمل CS50.h وIO.h. القياسية اسمحوا لي أن المضي قدما وإعطاء نفسي كثافة العمليات، الرئيسي، باطل. واسمحوا لي أن المضي قدما، ونسمي هذا cough.c. واسمحوا لي أن المضي قدما وفقط مثل خدش، طباعة السعال / ن. وأريد أن أفعل ذلك ثلاث مرات. لذلك أنا، بالطبع، مجرد الذهاب لنسخ ولصق ثلاث مرات. أنا الآن ذاهب إلى جعل السعال السعال مائلة نقطة. دعونا نعطي نفسي مساحة أكبر قليلا هنا، أدخل، والسعال، والسعال، والسعال. هناك، بالطبع، بالفعل فرصة للتحسين. لقد نسخ ولصق عدة مرات اليوم. لكن ذلك كان فقط لذلك لم أكن لديك لكتابة العديد من الشخصيات. ما زلت تغير ما تلك الأسطر من التعليمات البرمجية هي. هذه الخطوط الثلاثة متطابقة، الذي يشعر كسول، بل هو، وربما لا يكون النهج الصحيح. حتى مع ما المكون يمكن أن نحسن هذا الرمز؟ ليس لدينا لنسخ ولصق رمز. و، في الواقع، في أي وقت تشعر نفسك نسخ ولصق، وحتى لا تغيير الرمز، الاحتمالات هي أن هناك طريقة أفضل. وبالفعل، هناك. اسمحوا لي أن نمضي قدما ونفعل لحلقة، على الرغم من بناء الجملة قد لا تأتي بشكل طبيعي حتى الان. هل هذا ثلاث مرات، وذلك ببساطة عن طريق القيام بما following-- وأنا أعلم هذا من الناحية العملية. ولكن لدينا عدد من الأمثلة الآن. وسترى على الانترنت المزيد من الإشارات لا يزال. هذا هو بناء الجملة في سطر 6، أن مثل الكثير من خدش أن يكرر كتلة، كرر ثلاث مرات التالية. انها قليلا السحرية في الوقت الراهن. ولكن هذا سوف تحصل على المزيد، وأكثر دراية. وانها سوف أكرر خط الثمانية ثلاث مرات، بحيث إذا أنا أعيد تجميع جعل السعال، نقطة خفض السعال والسعال والسعال والسعال. أنه لا يزال يعمل بنفس الطريقة. ذلك أن كل شيء على ما يرام وجيدة. ولكن هذا ليس المستخرجة جدا. انها صحيحة تماما. ولكن بدا الامر وكأننا هناك قد تكون هذه فرصة، كما هو الحال في عالم الصفر، إلى نوع من البداية لإضافة بعض دلالات هنا بحيث أنا لا فقط بعض لحلقة، وظيفة أن يقول السعال، أو لا السعال. أتعلم؟ اسمحوا لي أن أحاول أن أكون برودة قليلا من ذلك، وفعلا كتابة دالة التي لديه بعض الآثار الجانبية، الذي يطلق عليه السعال. ويستغرق أي إدخال، و إرجاع أية قيمة كإخراج. لكنك تعلم ماذا يفعل؟ وهو يفعل this-- printf، الإقتباس، السعال. والآن هنا، وانا ذاهب المضي قدما وكثافة العمليات، ط يحصل على الصفر، وأنا أقل من 3، وأنا زائد زائد. انا ذاهب الى عدم القيام printf، الذي هو يمكن القول إن تطبيق مستوى منخفض التفاصيل. لا يهمني كيفية السعال. أريد فقط أن استخدام وظيفة السعال. وأنا ذاهب لمجرد استدعاء السعال. الآن، لاحظ الانقسام. عند استدعاء وظيفة، إذا كنت لا تريد أن تعطيه المدخلات، ودفع غرامة تماما. لا مجرد فتح قوسين، على مقربة القوسين، والانتهاء من ذلك. عند تعريف وظيفة، أو إعلان نموذج وظيفة، و إذا كنت تعرف مسبقا انها ليست ذاهب الى اتخاذ أي حجج، يقول الفراغ في تلك قوسين هناك. وهذا يجعل من المؤكد أن لك لن تسيء استخدام بطريق الخطأ. اسمحوا لي أن المضي قدما وجعل السعال. وبطبيعة الحال، لقد ارتكبت خطأ. اللعنة، هناك أن إعلان ضمني. ولكن هذا شيء طيب. انها حل سهل. أنا فقط بحاجة النموذج على مستوى اعلى في الملف الخاص بي من أنا فعلا استخدامه. وحتى الآن اسمحوا لي أن السعال مرة أخرى، لطيفة. الآن يعمل. جعل السعال والسعال والسعال والسعال. ولذلك قد تعتقدون أننا حقا ما يزيد قليلا على هندسة هذه المشكلة. و، في الواقع، نحن. هذه ليست جيدة مرشح برنامج في هذه اللحظة ل إعادة بيع ديون، والقيام بما هو دعا التحلل الهرمي، حيث كنت تأخذ بعض التعليمات البرمجية، ومن ثم أنت نوع من الأشياء عامل خارج، وذلك لصقه المزيد من دلالات لهم، وإعادة استخدامها على المدى الطويل في نهاية المطاف. ولكن هذا لبنة نحو برامج أكثر تطورا التي سنبدأ الكتابة قبل وقت طويل من أن يسمح لنا أن يكون المفردات التي لكتابة رمز أفضل. و، في الواقع، دعونا نرى ما اذا كنا لا يمكن تعميم هذا أبعد من ذلك. يبدو قليلا عرجاء أنني، الرئيسية، داعي للقلق بشأن هذا الرتق للحلقة، ويدعو السعال مرارا وتكرارا. لماذا لا أستطيع أنا أقول السعال، يرجى السعال ثلاث مرات؟ وبعبارة أخرى، لماذا لا يمكنني فقط إعطاء المدخلات إلى السعال والقيام بذلك؟ لماذا لا يمكنني أن أقول، في السعال الرئيسي ثلاث مرات. والآن، وهذا هو نوع من السحرية. انها متكررة جدا هنا. وانها، في الواقع، خطوة صغيرة. ولكن مجرد القدرة على يقول على خط ثمانية السعال ثلاث مرات، انها مجرد أكثر من ذلك بكثير للقراءة. وبالاضافة الى ذلك، أنا لم يكن لديك لمعرفة أو يهمني كيف يتم تنفيذ السعال. و، في الواقع، في وقت لاحق المدى والمشاريع النهائية، إذا كنت معالجة مشروع مع زميل أو اثنين من زملاء الدراسة، عليك أن تدرك أنك ذاهب ل لديك، أو تريد، تقسيم العمل. وأنت تريد الذهاب الى اتخاذ قرار مقدما، الذي سيفعل ما، والذي قطع؟ ولن يكون ذلك جميلا إذا كنت، على سبيل المثال، تولي الكتابة الرئيسي، القيام به. والحجرة الخاصة بك، أو لديك شريك أكثر عموما، يرعى تنفيذ السعال. وهذا التقسيم، وهذه جدران من التجريد، أو طبقات من التجريد إذا صح التعبير، هي عظمى قوية، لاسيما لأكبر، المزيد من البرامج والأنظمة المعقدة، انها تسمح للشخص متعددة لبناء الأشياء معا، وفي نهاية المطاف غرزة عملهم معا في هذا الطريق. ولكن، بطبيعة الحال، نحن تحتاج إلى الآن إصلاح السعال. علينا أن نقول السعال هذا، مهلا، هل تعرف لماذا؟ كنت بحاجة الى الذهاب الى اتخاذ input-- حتى لا باطل، ولكن كثافة والآن. دعونا نمضي قدما ووضعها في السعال كثافة العمليات. ط يحصل على صفر. أنا أقل من عدد المرات. قلت الثلاثة قبل. ولكن هذا ليس ما أريد. أريد السعال لتعميمها على دعم أي عدد من التكرارات. لذلك، في الواقع، انها ن الذي أريد، أيا كان المستخدم يقول لي. الآن، أستطيع أن أمضي قدما ويقول السعال الطباعة. وبغض النظر عن عدد يمر المستخدم في، وسوف تكرار ذلك مرات عديدة. ذلك في نهاية اليوم، البرنامج هو متطابقة. ولكن لاحظ كل هذه الاشياء يمكن أن يكون حتى في ملف آخر. في الواقع، أنا لا أعرف في ذلك لحظة كيف printf ينفذ. أنا لا أعرف في هذه اللحظة كيفية الوصول سلسلة، أو الحصول على كثافة العمليات، أو الحصول على تعويم تنفذ. وأنا لا أريد أن نراهم على الشاشة. كما هو، وأنا بدأت في التركيز على برنامجي، وليس تلك الوظائف. وهكذا، في الواقع، في أقرب وقت كما كنت بدء العوملة كود مثل هذا الخروج، بل ويمكن أن ننتقل السعال إلى ملف منفصل؟ شخص آخر يمكن تنفيذه. وكنت وبرنامجك تصبح جميلة جدا، وجدا للقراءة، يمكن القول، حقا أربعة برنامج سطر هناك حق. لذلك دعونا نمضي قدما الآن وجعل تغيير واحد أكثر من ذلك. لاحظ أن بلدي النموذج يجب أن يتغير حتى أعلى. لذلك اسمحوا لي أن إصلاح أن ذلك أنا لا تحصل على صاح في. جعل السعال، واسمحوا لي أن تشغيل السعال مرة واحدة أكثر من ذلك، لا تزال تفعل الشيء نفسه. ولكن الآن، لاحظ لدينا المكون لصيغة نهائية واحدة. أتعلم؟ أنا لا أريد أن السعال فقط، بالضرورة. أريد أن يكون شيء أكثر عمومية. لذلك أنت تعرف لماذا؟ أريد أن أفعل هذا. أريد أن يكون، مثل الكثير من الصفر لا، كتلة مثلا، ولكن ليس أقول شيئا بعض عدة مرات. أريد أن أقول سلسلة محددة جدا. وبالتالي، وأنا لا نريد أن نقول فقط السعال. أريد أن أقول أيا كان يتم تمرير سلسلة في. لذلك تلاحظ، لقد المعمم هذا بحيث الآن مثلا يشعر وكأنه اسم جيد لهذا، مثل خدش، يأخذ حجتين، على عكس خدش. هو واحد من سلسلة. واحد هو عدد صحيح. وأنا لا يمكن التبديل بينها. أنا مجرد نوع من مثل فكرة يقول السلسلة أولا، وبعد ذلك كم مرة في وقت لاحق. الفراغ يعني أنه لا يزال لا يعود أي شيء. هذه ليست سوى الجانب البصري الآثار، مثل مع [؟ الأردن؟] تأثير الجانب اللفظي من الصراخ. فإنه لا يزال الأوقات شيء ن، 0 حتى، ولكن لا يساوي ن. وهذا يعني ن مجموع مرات. وبعد ذلك فقط طباعة أيا كان ذلك السلسلة. حتى لقد المعمم حقا هذا سطر من التعليمات البرمجية. وحتى الآن، كيف يمكنني تنفيذ وظيفة السعال؟ يمكنني القيام به السعال باطلا. وأنا لا تزال تأخذ في كيفية مرات كثيرة كنت تريد أن السعال. ولكن هل تعرف لماذا؟ أستطيع الآن أن أقول البونت. يمكن أن أدعو القول مع كلمة السعال، ويمر في ن. وإذا أريد لتنفيذ أيضا، للمتعة فقط، وهي وظيفة العطس، أستطيع أن يعطس بعض عدة مرات. وأنا يمكن أن تبقي إعادة استخدام ن، ل تلاحظ أن م في هذا السياق أو نطاق موجود فقط في هذه الوظيفة. ون في هذا السياق فقط موجود داخل هذه الوظيفة هنا. ولذا فإننا سوف أعود ل هذه القضايا النطاق. وهنا، أنا فقط أريد أن أقول، achoo، ثم ن مرات، منقوطة. والآن، أنا فقط بحاجة إلى اقتراض هذه وظيفة التوقيعات هنا. حتى السعال هو الصحيح. العطس باطل هو الصحيح الآن. وأنا لا تزال بحاجة نقول فقط. لذلك أنا ذاهب الى القول، مثلا سلسلة ق، الباحث ن، منقوطة. حتى لقد الإفراط في هندستها هيك من هذا البرنامج. وهذا لا يعني بالضرورة وهذا هو ما يجب عليك فعله عند الكتابة حتى أبسط البرامج. يأخذ شيئا تعلقت به من الواضح بسيطة حقا، حقا قصيرة، وإعادة تنفيذه باستخدام الطريقة الكثير من التعليمات البرمجية. ولكن عليك أن ترى في الواقع، وفي الوقت ننظر إلى الوراء في هذه الأمثلة، ويدرك، أوه، تلك هي الخطوات أخذنا إلى التعميم في الواقع، إلى عامل شيء، حتى في نهاية اليوم قانون بلدي هو في الواقع معقول جدا. لأنه إذا أريد أن السعال ثلاثة مرات ثم يعطس ثلاث مرات، أنا ببساطة الذهاب الى إعادة تشغيل هذه، برنامج يجعل السعال، وتشغيل السعال. ولدي ثلاثة السعال وثلاثة العطس. وهكذا وهذا هو الأساسي نموذج، إذا صح التعبير، لكيف يمكن أن تذهب نحو تنفيذ في الواقع برنامج. ولكن دعونا نرى الآن ما هو عليه كنا نفعل كل هذا الوقت، وما تناقلته بعض والقطع النهائي وراء هذا الأمر بسيط. في نهاية اليوم، لدينا تم استخدام رنة كما مترجم لدينا. لقد تم كتابة المصدر الرمز، وتحويلها عبر رنة إلى رمز الجهاز. ولقد تم استخدام جعل فقط لتسهيل ضربات المفاتيح لدينا لذلك أننا لا يجب أن تذكر تلك الطلاسم من رنة نفسها. ولكن ما هو جعل الواقع تفعل؟ وبدوره، ما هو رنة تفعل في الواقع؟ كما تبين، على الرغم من أننا قد مبسطة مناقشة اليوم قائلا: كنت تأخذ شفرة المصدر، وتمر عليه كما مدخل إلى مترجم، والتي تعطيك الناتج من الجهاز الرمز، يتحول الى هناك ل بضع خطوات مختلفة داخل هناك. وتجميع يحدث أن تكون مظلة مصطلح لمجموعة كاملة من الخطوات. ولكن دعونا ندف فقط هذا بسرعة حقا. وتبين أن كنا نقوم به المزيد من الأشياء في كل مرة أقوم بتشغيل البرنامج، أو في كل مرة كنت ترجمة برنامج اليوم. لذلك يشير تجهيزها ل this-- أي شيء في برنامج C، كما سنرى مرة أخرى ومرة ​​أخرى، الذي يبدأ مع هذا الرمز التجزئة، أو رمز الهاشتاج هنا، يعني انها التوجيه المعالج. وهذا يعني، في هذه الحالة، مهلا كمبيوتر، تفعل شيئا مع هذا الملف قبل كنت في الواقع ترجمة التعليمات البرمجية الخاصة بي. في هذه الحالة، التجزئة وتشمل غير، في الأساس، وسيلة C في القول، يا الكمبيوتر، ويذهب للحصول على محتويات من CS50.h ولصقها هنا. يا الكمبيوتر، الذهاب الحصول على محتويات مستوى IO.h، أينما الموجود على القرص الصلب، لصقه هنا. حتى تلك الأمور لأول مرة خلال تجهيزها. ورنة يفعل كل هذا بالنسبة لنا. وحدث ذلك فانه حتى الرتق بسرعة، حتى أنك لا رؤية أربعة أشياء متميزة يحدث. ولكن هذا أول هذه الخطوة. ما يحدث فعلا في المرة القادمة؟ حسنا، المسؤول المقبل خطوة بتجميع. واتضح أن تجميع برنامج يعني من الناحية الفنية الانتقال من شفرة المصدر، والاشياء التي قمت تم كتابة اليوم، إلى شيء دعا رمز التجميع، شيء التي تبدو مختلفة قليلا. و، في الواقع، يمكننا أن نرى هذا حقيقي بسرعة. اسمحوا لي أن تذهب في الواقع إلى IDE بلدي. اسمحوا لي أن نمضي قدما وhello.c المفتوحة، التي هو البرنامج الأول جدا التي تربطنا بدأت اليوم. واسمحوا لي أن المضي قدما وتشغيل رنة ل مختلف قليلا، رنة والصورة، وhello.c، الذي يجري في الواقع ل تعطيني hello.s ملف آخر. ونحن سوف ربما أبدا مرة أخرى نرى هذا النوع من التعليمات البرمجية. إذا كنت تأخذ مستوى أقل الطبقة نظم مثل CS61، سترون الكثير هذا النوع من التعليمات البرمجية. ولكن هذا هو لغة التجميع. هذا هو X86 لغة التجميع أن وحدة المعالجة المركزية التي الكامنة CS50 IDE يفهم الواقع. وخفي كما هو الحال نظرة، بل هو شيء الكمبيوتر يفهم بشكل جيد. جنوب ف، هذا هو طرح. هناك حركات. هناك المتصل من وظائف هنا، س أورينج، حركة، الوظيفة، البوب، عودة. لذلك هناك بعض جدا تعليمات مستوى منخفض أن وحدات المعالجة المركزية تدرك أن أشرت إليها سابقا. هذا هو ما إنتل في الداخل. وهناك أنماط من الأصفار وتلك التي خريطة لهذه اللهجة arcanely، ولكن إلى حد ما اسمه جيدا، تعليمات، إذا جاز التعبير. هذا هو ما يحدث عندما يمكنك ترجمة التعليمات البرمجية. تحصل التجمع لغة للخروج منه، والذي يعني الخطوة الثالثة هي لتجميع أن رمز التجميع في نهاية المطاف، آلة الأصفار code-- ومنها، وليس النص الذي رأيناه للتو قبل لحظة. حتى ما قبل المعالجة لا أن يجد واستبدال، وبعض الأشياء الأخرى. يأخذ تجميع المصدر رمز من C، وشفرة المصدر أن كتبنا، في التجمع التعليمات البرمجية التي نحن يحملق فقط في. تجميع أن يأخذ التجمع الرمز إلى أصفار ومنها أن وحدة المعالجة المركزية سوف حقا فهم في نهاية المطاف. وربط هو الخطوة الأخيرة ما يحدث لus-- مرة أخرى، بسرعة لذلك نحن لا حتى notice-- الذي يقول: يا الكمبيوتر، واتخاذ كل الأصفار وتلك التي نتج عن ترجمة التعليمات البرمجية داود، وتتمثل المهمة الرئيسية له في هذه الحالة. ومهلا الكمبيوتر، ويذهب للحصول على كل من الآحاد والأصفار و أن كتب موظفي CS50 داخل المكتبة CS50. مزيج من هم في مع ديفيد. ومهلا الكمبيوتر، ويذهب للحصول على كل الأصفار ومنها أن شخصا آخر كتب سنوات منذ لprintf. وإضافة إلى تلك كل شيء، حتى نتمكن قمت حصلت على الآحاد والأصفار و، و الأصفار الموظفين CS50 ومنها، الأصفار printf ومنها، وأي شيء آخر نستخدمه. انهم جميعا الحصول على جنبا إلى جنب معا في واحد برنامج يسمى، في هذه الحالة، مرحبا. لذلك من الآن فصاعدا، ونحن سوف فقط استخدام كلمة تجميع. ونحن سوف تتخذ لمنح أنه عندما نقول، ترجمة البرنامج الخاص بك، فهذا يعني، يا تفعل أجهزة معالجة مسبقة، تجميع وربط. ولكن هناك فعلا بعض الاشياء المثيرة يحدث هناك تحت غطاء محرك السيارة. وخاصة إذا كنت الحصول على الغريب بعض الوقت، يمكنك البدء بدس حول على هذا المستوى أقل. ولكن في الوقت الراهن، ندرك أن بين الوجبات لهذا اليوم هي ببساطة ل ابتداء من هذه العملية، من الحصول على راحة مع شيء من هذا القبيل مرحبا العالم. في الواقع، فإن معظم ما فعلناه اليوم بالتأكيد لن تغرق في بسرعة فائقة. وسوف يستغرق بعض الوقت، وبعض الممارسات. والاحتمالات، سوف فرز من تريد ضرب لوحة المفاتيح أو يصيح في الشاشة. وكل هذا موافق. رغم ذلك، ربما ليس محاولة ل تفعل ذلك في المكتبة كثيرا. وفي نهاية المطاف، عليك تكون قادرة على الرغم من أن تبدأ رؤية الأنماط، سواء في قانون جيد أن كنت قد كتبت وفي الأخطاء التي قمت بها. ويشبه إلى حد كبير عملية تصبح TF أو CA هو مثل، عليك أن تبدأ في الحصول على أفضل و أفضل لرؤية هذه الأنماط، ومجرد حل بك المشاكل الخاصة في نهاية المطاف. في غضون ذلك، سيكون هناك الكثير من منا لتقدم لك الدعم، وتحصل على من خلال هذا. وفي الكتابة المنبثقة لجميع المشاكل وسوف يكون من خلال الاسترشاد جميع الأوامر أن أعرف بالتأكيد من الكثير من الممارسة قبل الآن، ولكن قد يكون جوا أكثر من رأسه حتى الآن. وهذا شيء طيب تماما. لكن، في نهاية المطاف، وأنت تسير لتبدأ في رؤية أنماط تظهر. وحالما تحصل في الماضي كل من تفاصيل غبية، مثل الأقواس، والأقواس المعقوفة، ومنقوطة، والاشياء، وبصراحة، هذا ليس على الإطلاق اهتمام فكريا. وليس الهدف من اتخاذ أي الطبقة التمهيدية. إنها الأفكار التي تجري ليهم. انها الحلقات، و الظروف، وظائف، وأكثر من ذلك بقوة التجريد، والعوملة من التعليمات البرمجية، والتصميم الجيد، والخير أسلوب، وفي نهاية المطاف صحة من التعليمات البرمجية الخاصة بك، وهذا في نهاية المطاف الذهاب إلى المسألة أكثر. حتى الأسبوع المقبل، وسوف نأخذ هذه الأفكار التي رأيناها لأول مرة في سكراتش وترجمت الآن لجيم وسنبدأ لإدخال أول المجالات العالم الحقيقي بالطبع ل. سنركز على عالم الأمن، والتشفير بشكل أكثر تحديدا، فن الهرولة المعلومات. وبين أول مشاكل أنت نفسك سوف تحصل على كتابة بعد اللعب مع بعض من بناء الجملة وحل بعض منطقية مشاكل، في نهاية المطاف قبل فترة طويلة، ويتبارى في الواقع، أو تشفير، وفك تشفير في نهاية المطاف من المعلومات. وكل ما قمنا به اليوم، سوف منخفضة نسبيا مستوى، هو مجرد الذهاب للسماح لل لنا أن تأخذ واحدة، واحدة، وخطوة أخرى نحو أعلى كتابة رمز الأكثر إثارة للاهتمام حتى الان. أكثر من ذلك على ان الاسبوع المقبل. [تشغيل الفيديو] وماذا يمكن أن تخبرني عن آخر مرة رأيته؟ وماذا يمكنني أن أقول، حقا؟ أعني، كان مثل أي دولة أخرى بروفة ما قبل الإنتاج، إلا أن هناك شيء قاله في النهاية أن تمسك معي. كان، هذا CS50. -من هو قطع الجميع، وظيفة كبيرة في بروفة. الغداء -من و؟ -Yeah، أنت وأنا يمكن الاستيلاء على شطيرة في شيء. واسمحوا لي أن استخلاص المعلومات مع ديفيد بسرعة حقا. ديفيد؟ ديفيد؟ [نهاية قراءة]