[عزف الموسيقى] DAVID مالان: مرحبا، الجميع. هذا هو supersection CS50 ل. لن تقوم أقسام المسندة بدء لمدة أسبوع آخر. وحتى اليوم، وأنا هنا with-- MARIA: ماريا. DAVID مالان: --to الواقع نلقي نظرة على مشكلة مجموعة واحدة، وبالطبع ل الأسابيع الأولى من المواد، تحصل على المنحى مع IDE CS50، قليلا لينكس، نظام التشغيل هذا يعمل على IDE، وكذلك نلقي نظرة على بعض من الانتقال من الصفر إلى C الرائدة حتى مشكلة مجموعة واحدة. ذلك دون مزيد من اللغط، في مشكلة مجموعة واحدة، وأنت تسير أن يكون عرض لCS50 IDE، التي هي هذه البرمجة على شبكة الإنترنت البيئة التي نستخدمها من أجل لكتابة البرامج. لقد تم تصميمه للنظر جدا تذكرنا كمبيوتر نموذجي نظام تشغيل التشغيل ودعا لينكس نظام. لكنه في ما يسمى السحابة، وهو ما يعني الجميع في فئة يمكن أن يكون فعلا له أو لها الحساب الخاص واستخدامها، كذلك. لذلك معظم وربما كنت قد استخدمت أبدا بيئة لينكس من قبل أو ربما حتى بيئة سطر الأوامر. وسطر الأوامر بيئة مختلفة. كل شيء النصية. كل شيء أوامر لوحة المفاتيح. وانها لا إصطياد الفئران، أية رموز، ولا نوافذ الحوار، لا القوائم. انها محض النص. لذلك في البداية، انها نوع من يشعر وكأنه خطوة إلى الوراء من حيث التطور. ولكنه ينتهي به الأمر إلى الكثير أكثر قوة، بالتأكيد، للعالم الكومبيوتر، في نهاية المطاف. لذلك دعونا نلقي نظرة. أنا هنا في CS50.io، يمكن من خلاله يمكنك تسجيل الدخول إلى IDE CS50. ومثل الكثير في خدش، هناك ثلاثة مجالات رئيسية لهذه الشاشة. حتى على الجانب الأيسر، لدينا ماذا سيكون ملف المتصفح. وهناك في هذا المجلد أعلى، وهو الحق الآن فارغة منذ أن تخلصت من كل ما عندي الملفات قبل supersection. وذلك حيث سنقوم حفظ الملفات C أن نكتب. في أعلى يمين، لدينا مكان كل من نظامنا ذاهب الى الحصول على مكتوب. وبالفعل، وإذا كنت فوق هذا بالإضافة إلى أن هذا سوف اسمحوا لي أن اختيار ملف جديد. وهنا أستطيع أن تبدأ كتابة التعليمات البرمجية C أو، حقا، أي عدد من اللغات الأخرى. ثم في الجزء السفلي حيث يقول jharvard @ ide50-- ولك سوف أقول شيئا قليلا different-- ما كان يسمى هذا؟ نافذة الصالة. نعم. وبالتالي فإن نافذة المحطة الطرفية ما يسمى سطر الأوامر واجهة عبر التي يمكن أن تتفاعل مع نظام التشغيل الأساسي. والآن، نحن في طريقنا لل جعل استخدام القليل جدا من this-- فقط لتجميع، للنظر في رسائل الخطأ التي نراها، وتشغيل برامجنا. ولكن في نهاية المطاف، ونحن في طريقنا لتفعل أكثر من ذلك بكثير، كذلك. ويمكنك حتى تثبيت البرامج وإدارة مساحة العمل الخاصة بك ضمن CS50 IDE، كذلك. ولكن أكثر على أن بعض وقت آخر. لذلك دعونا نمضي قدما والكتابة برنامج بسيط جدا فقط للذهاب من خلال الاحماء لل hello.c، وهو ربما أبسط برنامج نستطيع كتابة. لقد فتحت بالفعل علامة تبويب جديدة. انا ذاهب الى المضي قدما و يقول تشمل io.h. القياسية ثم كثافة العمليات الرئيسي (الفراغ). ثم printf ("مرحبا، العالم" مائل ن، واقتبس وثيق، أقواس وثيقة، والفاصلة المنقوطة. حسنا. تلاحظ حتى الآن نافذتي هو بدون عنوان. لذلك أنا ذاهب بسرعة جدا لترتفع إلى ملف، حفظ. وأنه من المهم أن أنا أسمي هذا ليس "مرحبا". ذلك خطأ شائع جدا، خصوصا في مشكلة مجموعة واحدة، هو الدعوة صدفة بك برنامج "المياه" أو "الجشع" أو "ماريو" أو "الائتمان" أو ما شابه ذلك. ولكن كنت فعلا تريد أن تجعل تأكد لديك ملف التمديد لأن هذا هو السبيل الوحيد الذي المترجم وأيضا محرر التعليمات البرمجية يعلم أنك الكتابة فعلا كود C. لذلك اسمحوا لي المضي قدما وانقر حفظ. والآن، أيضا، ما CS50 IDE وقد فعلت بالنسبة لنا هو انها أيضا أبرز تركيب كل شيء. حتى انها قدمت كل شيء ملونة جدا. والغرض كله من غير وظيفية. انها مجرد رسم عيني على قطع مختلفة من الناحية المفاهيمية هذا البرنامج. لذلك دعونا نمضي قدما وتجميع هذه. وأستطيع أن تجميع هذه في عدة طرق. وخلال أسبوع واحد، و طريقة المدرسة القديمة فعلنا كان حرفيا في القيادة line-- "hello.c رنة". وبعد ذلك هاهنا. ويبدو ان كل شيء يحدث في إطار المحطة الطرفية. ولكن ما لم تغير في IDE؟ حيث، مرة أخرى، IDE يعني فقط بيئة تطوير متكاملة. إنها طريقة أخرى للقول هذا التطور المتكاملة البيئة لتطوير البرمجيات. وذلك ما لم يتغير في واجهة المستخدم؟ ما الذي لاحظته وهذا مختلف، ماريا؟ MARIA: لقد لاحظت شيئا تحت IDE50 مجلد هنا. DAVID مالان: نعم. حتى هنا، ليس فقط هل لدينا "hello.c". لدينا أيضا "a.out"، وهو نوع من اسم البكم لأحد البرامج. ولكن في الواقع، انها الاسم الافتراضي ل البرنامج عند مجرد ترجمة التعليمات البرمجية ولا نقول للمترجم ملف ما لإخراج. حتى لو كنت تريد تشغيل هذا، وأنا بحاجة إلى قول compiler-- أو بالأحرى، أنا بحاجة ل أقول مساحة العمل التي I تريد تشغيل برنامج يسمى "a.out". أدخل. وهناك "مرحبا، العالم. "الآن" ./ ". من المهم فعلا. على الرغم من عادة لدينا فقط كتابة أسماء من الأوامر، عندما حان برنامج قمت مكتوبة، كنت لا تريد أن تقول "./" لأن ذلك يقول صراحة لينكس الذي تريد تشغيل برنامج يسمى "a.out" هذا في هذا، حيث نقطة يعني هذا الدليل الذي أنا حاليا في، الذي صادف أن يكون دعا مساحة العمل "a.out. لأنه إذا قلت للتو "a.out،" أدخل، انا ذاهب الى الحصول على "a.out الأمر لا العثور على "لأن computer-- لأنني اخترعت "a.out." أنه لم يأت مع computer-- لا أعرف من أين للبحث عن ذلك، حتى على الرغم من أنه صحيح تحت أنفي، إذا جاز التعبير. حسنا. حتى نتمكن من تغيير هذا ل تكون "رنة -o مرحبا hello.c". وإذا كنت هاهنا، ما البرنامج يتم هذا الانتقال لإخراج بالنسبة لي؟ ما هو اسم الملف؟ نعم، في الظهر. هذا صحيح. "أهلا." حتى "مرحبا" سيكون اسم البرنامج لأننا قد استخدمت ما يسمى وسيطة سطر الأوامر، الذي هو مجرد وسيلة لتغيير سلوك مترجم لإخراج الواقع اسم ملف معين. وبالفعل، إذا كنت تكبير من وتبدو هنا، الآن ليس لدي سوى "a.out" و "hello.c" ولكن أيضا "مرحبا" أيضا. حتى الآن أستطيع أن أفعل "./hello،" أدخل. وهناك "مرحبا، العالم". ولكن lastly-- وهذا سيكون الآن على الاتفاقية نستخدم في جميع أنحاء الفصل الدراسي، typically-- هو يمكنك أيضا أقول "جعل مرحبا." وبالفعل، فإنه ما يقول والامر متروك حتى الآن لأنه موجود بالفعل. اسمحوا لي أن المضي قدما وإزالة، مع الأمر جمهورية مقدونيا، على حد سواء "a.out" - ويقول "إزالة a.out ملف منتظم؟" هذا يعني فقط، هل أنت متأكد من أنك تريد حذف ذلك؟ أنا سأقول نعم. ثم انا ذاهب الى إزالة "مرحبا" وليس "hello.c". انا ذاهب الى القول "نعم" صراحة، ولكن "ص" هو كاف، كذلك. والآن إذا كنت تلاحظ اكتب ls-- التي، أذكر، يعني list-- وهو يسرد جميع الملفات في مجلد بلدي. وبالفعل، إذا كنت تكبير من وننظر في أعلى اليسار، فإنه يؤكد أن ما هو في هذا المجلد، حتى على الرغم من أنها وصفت كما IDE50 هنا وليس مساحة العمل، انها مجرد "hello.c". وحتى الآن إلى هنا، وإذا كنت لا "جعل مرحبا"، أدخل، الآن أرى أمر أطول بكثير ولكن الأمر أكثر تعقيدا أن يحدث أن تكون مفيدة في الأسابيع القادمة. والآن أستطيع أن أقول "./hello". لذلك دعونا نلقي جولة سريعة أوامر لينكس بعض الآخر. ثم لماذا لا نأخذ خطوة مرة أخرى وفعلا ننظر C أكثر عموما، الانتقال من الصفر لC، ومن ثم نستنتج مع نظرة في المشكلة الأولى المنصوص عليها في C. كل الحق. لذلك أنا ذاهب إلى المضي قدما ونظيفة فقط تصل مساحة العمل الخاصة بي مع التحكم-L فقط للحفاظ على الشاشة نظيفة. ولكن هذا لا يوجد لديه وظيفية تؤثر على خلاف ذلك. يذكر أن رأيناه عدد قليل من الأوامر الآن. لذلك رأيناه رنة، والتي عادة لك لن تضطر إلى تنفيذ يدويا بعد الآن. سنقوم بدلا من استخدام جعل. ولكننا رأينا أيضا ليرة سورية، مما يدل على قائمة الملفات في دليل بلدي. والآن لماذا هو there-- هناك اثنين الملفات الآن، "مرحبا" و "hello.c". لماذا هناك نجم أو النجمة بعد "مرحبا"؟ ماذا يعني أن بناء على ما رأيناه في أسبوع واحد؟ ماذا تعتقد؟ ماذا النجم دلالة؟ MARIA: For-- برنامج "مرحبا"؟ DAVID مالان: "مرحبا *". نعم. نعم؟ أوه، قابل للتنفيذ. هذا صحيح. وهذا يعني أن "مرحبا" غير قابل للتنفيذ. لذلك الواقع، لهذا السبب يمكنني القيام به "./hello". حسنا. لذلك ماذا يمكنني أن أفعل هنا؟ حسنا، اتضح يمكنني أيضا إنشاء الدلائل. لذلك اسمحوا لي المضي قدما وخلق، على سبيل المثال، وهو "pset1" الدليل. والمشكلة تعيين مواصفات سيكون عليك أن تفعل هذا بالضبط، لذلك لم يكن لديك لنتذكر اليوم. ولكن "pset1 MKDIR" يبدو ليس له تأثير. ولكن مرة أخرى، لا رسالة خطأ عموما هو شيء جيد. حتى لو كنت اكتب "ليرة سورية" now-- آه، الآن لدي ملف تنفيذي يسمى "مرحبا" ملف C يسمى "hello.c". ثم مائل زائدة، وذلك ل الكلام، يعني أن هذا هو الدليل. لذلك الواقع، والآن أريد أن فتحه. وأنا لا النقر المزدوج على ذلك مثل في واجهة المستخدم الرسومية، بيئة رسومية. I بدلا من ذلك قل "قرص pset1". أدخل. شيء مثير للاهتمام ويبدو أن حدث باستثناء بلدي قليلا موجه here-- هذا هو وسيلة لينكس للتذكير لي مكاني، فما مجلد مفتوح. انها مجرد قول لي صراحة في مقابل بيانيا. وإذا كنت اكتب "ليرة سورية،" لماذا لا أرى أخرى المطالبة فورا، هل تعتقد، عندما سرد محتويات pset1؟ MARIA: ربما لا لديك أي شيء هناك. DAVID مالان: نعم. حتى ذلك الحين ليس لدينا الواضح خلق أي شيء في هناك لأنني مجرد إنشاء الدليل. الآن، إذا أردت أن إنشاء الملف-- ل سبيل المثال، يمكن أن إنشاء ملف جديد. وبعد ذلك يمكن أن تذهب إلى حفظ واحفظه، مثل، "mario.c" إذا كنت تريد أن تفعل الطبعة القياسية PSET واحد. وبعد ذلك، مثل أي ماك أو PC، فقط اختيار "pset1 مجلد، حفظ. والآن ملف فارغ. ولكن دعونا تكبير مرة أخرى لفترة ثانية. دعونا نفعل ليرة سورية هنا. الآن نرى "mario.c". لذلك هناك عدد قليل من الأوامر الأخرى التي تستحق الأخذ في الاعتبار مدى time-- واضح، أو مراقبة-L هو ما كنت كان ضرب. MKDIR رأيناه. جمهورية مقدونيا رأيناه، وكذلك، وهو لإزالة أو حذف الملف. حذار يمكنك also-- وإذا نظرتم في البرامج التعليمية عبر الإنترنت، سوف RM -rf هو وسيلة شائعة جدا للقول حذف مجلد يحتوي الاشياء في ذلك. فقط تكون فائقة، سوبر الحذر. -rf يعني متكرر حذف كل ما هو كنت تحاول حذف وحذفه قسرا. حتى وسائل العودية اذا كان مجلد مجلد مع مجلد مع مجلد، حذف كل منهم. ويعني بالقوة حتى لا تسألني نعم أو لا، أنا متأكد؟ حتى انها وسيلة عظمى خطرة حذف الكثير من الاشياء بسرعة. ولكن في كثير من الأحيان beware-- جدا لا أحد مقدام طالب حذف بطريق الخطأ، مثلا، PSET واحد، على سبيل المثال. MARIA: وإذا هم فقط القيام -R، انهم ذاهبون لتسألهم عن كل ملف واحد. DAVID مالان: أيهما مزعج بدرجة متوسطة. MARIA: نعم. DAVID مالان: ولهذا السبب الكثير منا، وشملت النفس، أنا في العادة من استخدام -rf. ولكن هذا أمر خطير. لذلك حذار المشتري. وبعد ذلك ام هو نوع من اسمه المثير للاهتمام. لذلك هذا هو الأمر خطوة، الذي يشعر غريب قليلا لأنه يمكنك بالفعل استخدامه ل نقل الملفات من مكان إلى آخر. على سبيل المثال، لنفترض أنني افسدت. لنفترض بأنني خلقت ملف جديد لPSET. وأنا حفظه باسم "greedy.c". ولكن لنفترض أنا من غير قصد حفظه في IDE50-- ذلك في مساحة العمل الخاصة بي نفسها وليس في pset1. يمكنك أن ترى كثيرا كما في أعلى اليسار. هناك "greedy.c". وهناك عدد قليل من الحلول. حتى واحد، ويمكنني أن استخدام السوبر طريقة الاستعمال من مجرد سحب وإسقاط ذلك. والتي من شأنها أن الواقع إصلاح هذه المشكلة. ولكن اليوم، ونحن نحاول أن ننظر إلى أكثر الطرق غامضة ولكنها قوية القيام بذلك من. لذلك اسمحوا لي أن أغتنم "ليرة سورية" في pset1. وأرى فقط "mario.c". اسمحوا لي أن نمضي قدما ونفعل "سي دي ..". لذلك مؤتمر نزع السلاح هو تغيير الدليل مرة أخرى. ".." يعني ما، على الرغم من؟ وقال آخر مرة أنا "مؤتمر نزع السلاح pset1 "للذهاب إلى pset1. لذلك عندما أقول "سي دي .."، ماذا أفعل؟ إلى الوراء. نعم. لذلك سيكون لما يسمى الأم. انتقل مستوى واحد لأعلى، مثل تخرج من مجلد. حتى أدخل. وبالفعل، انظروا الى ما كان عليه. انتقلت لي فقط إلى مساحة العمل بدلا من ذلك من إلى pset1، والتي هي في مساحة العمل. والآن إذا كنت اكتب "ليرة سورية"، هناك مجموعة كاملة من الاشياء. في هناك "greedy.c". وحتى الآن اسمحوا لي أن استخدم ام حرفيا نقل "greedy.c" إلى pset1. وحتى الكثير من لينكس الأوامر العمل تماما مثل هذا. ألا يقوموا بأي حجج أو أنها تأخذ واحدة حجة أو أنها تأخذ سطر الأوامر اثنين الحجج وهكذا دواليك. وفي هذه الحالة، فإنه من به حرفيا ما تقول، وإن كان succinctly-- نقل greedy.c إلى pset1. أدخل. يبدو ان كل شيء يحدث. ولكن إذا كنت تفعل ليرة سورية مرة أخرى، وذهب الجشع. وإذا كنت تفعل "قرص pset1"، أدخل، وبعد ذلك ليرة سورية مرة أخرى، والآن حان في المكان المناسب. بوصفها جانبا، وإذا كان ل بعض reason-- خاصة إذا كان لديك متقطعة الاتصال بالشبكة أو كنت يتجول الحرم الجامعي مع غطاء جهاز الكمبيوتر المحمول إغلاق ومن ثم فتحه مرة أخرى، ومساحة العمل الخاصة بك يبدو إلى حد ما متزامنة، ليست صفقة كبيرة. مجرد تحميل متصفحك النافذة، وأنه ينبغي المزامنة بحيث اليد اليسرى، متصفح الملفات تبدو تماما مثل إطار المحطة الطرفية. لا تقلق. عندما تكون في شك، إعادة تحميل الصفحة، لذلك دمت قد قمت بحفظ ملفات بالفعل. حسنا. حتى MV يمكن أن تستخدم أيضا لإعادة تسمية الملفات. ودعونا نلقي نظرة على هذا الأمر النهائي هنا. suppose-- جدا وهذا هو مشتركة عظمى، أيضا، في وقت مبكر. بعض الطلاب في بعض الأحيان تخلق ملف ودعا، دعونا say-- ما هو آخر واحد؟ مثل "WATER.C". ولذا فإنني سوف الصراخ فقط، ل دون سبب، في كل مباراة دولية. ولكن هذا ليس هو الاسم الصحيح للملف إلا إذا كان بسبب مشكلة لدينا مجموعة لم مواصفات لن اقول لكم لحفظ الملف كما كل مباراة دولية "WATER.C". بدلا من ذلك، فإننا نتوقع "water.c" في صغيرة. و، في الواقع، وهذا هو إشكالية لأن check50، برنامج أنت تسير لقاء في مشكلة مجموعة واحدة ان الاختبارات تلقائيا صحة التعليمات البرمجية هو الذهاب الى الصراخ لكم ما اذا كان لا يمكن العثور على "water.c" في كل صغيرة. لذلك أنا بحاجة إلى إصلاح هذا. العديد من الطرق المختلفة ل القيام بذلك، أولها سيكون التحكم مزدوجا فوق أو انقر بزر الماوس الأيمن اسم الملف ومجرد تغيير إعادة تسمية. تماما غرامة للقيام بذلك. ولكن مرة أخرى، اليوم، دعونا تفعل ذلك مربي الحيوانات قليلا. دعونا نستخدم ام لتغيير "WATER.C" إلى "water.c". بحيث يمكنك أيضا استخدام الوسيطة الأولى لتسميته إلى الحجة الثانية إذا كانت الحجة الثانية ليست، في الواقع، مجلد أو اسم الدليل. حسنا. وأخيرا، قليلا trick-- حتى وأنا في بلدي الدليل مساحة العمل في الوقت الراهن. إذا كنت ترغب في الحصول على PSET واحد، أنا بالتأكيد يمكنك كتابة "CD pset1". إلا أنها مملة جدا أن اكتب "pset1" أو تعد أسماء الملفات أو أسماء الدليل ما يزال. لذلك في كثير من الأحيان في لينكس، ما يمكنك القيام به هو البدء في كتابة "سوق فلسطين" ومجرد الحصول على بالملل، وأصيب تبويب، والسماح الرقم الكمبيوتر من ذلك بالنسبة لك. سوبر مفيدة للوصول الى هذه العادة. الصيد الوحيد هو إذا كان لديك ملفات متعددة أو المجلدات التي تبدأ بالحرف "ص" أو "ملاحظة" قد تكون لديكم لكتابة عدد قليل من أكثر قبل كمبيوتر يعرف ما يجب القيام به. MARIA: نود الاختصارات. DAVID مالان: هذه الإرادة يوفر لك الكثير من الوقت. وأيضا، وكما قلنا في المحاضرة، كنت يمكن انتقل لأعلى في التاريخ، صعودا وهبوطا، للعثور على تنفيذها مؤخرا الأوامر، كذلك. حسنا. وحتى الآن، دعونا نوجه اهتمامنا إلى الخلف إلى برنامج بسيط، مرحبا العالم. لذلك قمنا بتجميع هذه بالضبط. والآن لماذا لا نأخذ نظرة على أنواع البيانات ومن ثم الانتقال من بعض كتل خدش الموافق C. MARIA: ممتاز. حتى الآن بعد أن كنت قد بدأت كتابة البرامج في C، ونحن في طريقنا لبدء الحديث حول أنواع البيانات والمتغيرات. وحتى بعض أنواع البيانات التي تريد أن تعرف بدءا من الآن هي تلك التي هي أبرزت باللون الأزرق. لذلك لدينا الباحث أولا، والتي تقف على عدد صحيح. والذي يحمل الأعداد الصحيحة، كما كنت قد يكون ذلك guessed-- 1، 2، 3، وأي الأعداد الصحيحة أخرى التي يمكن ان يخطر لك. DAVID مالان: والسلبية أيضا. MARIA: وأيضا السلبية، موافق. و0. ثم لدينا العوامات، التي وأرقام النقطة العائمة. ذلك أن جميع الأعداد الحقيقية التي لديها نقاط عشرية. حتى 5.0، 5.2، وأكثر أرقام بعد الفاصلة العشرية، كذلك، وأيضا السلبية. ثم لدينا شار الذي هو شخصية. لذلك أعتقد أن تحدثنا عن هذا في محاضرة اليوم. ولكن لدينا خطابات، لexample-- A، B، C-- التي يمكن تخزينها كما شار. ولكن بعد ذلك لدينا الكثير من الرموز التي يمكن تخزينها كما شار. وتلك المخزنة كما ASCII. ومن ثم لدينا منطقي، وهي القيم المنطقية. وتلك تقييم إلى True أو كاذبة أو 1 و 0، على التوالي. DAVID مالان: وأذكر أن منطقي يأتي من مكتبة CS50. لذلك ليس بناؤه إلى C، ولكن من المفيد السوبر لدينا مفهوم الصواب والخطأ. وحتى لو كنت قد think-- حقيقة متعة. A منطقي يحتاج تقنيا كم بت، حقا، لتمثيل صحيح مقابل خطأ؟ كم عدد البتات هل تعتقد كنت في حاجة، إلى الحد الأقصى؟ نعم، واحد فقط. لذلك تبين أن C لا استطيع ان اعطيكم بعض الشيء واحدة فقط. أصغر وحدة القياس يمكنك الحصول على ثمانية. لذلك فمن قليلا الإسراف التي كنت باستخدام بايت بأكمله، أو ثمانية بت، لتمثيل صحيح أو خطأ. ولكن هذا هو مجرد وسيلة انها نفذت في C من قبل مكتبة CS50. MARIA: ثم تلك التي نحن لن نتحدث عن نطاق واسع كما الحق now-- مزدوجة، وهذا أمر يطفو أكبر. منذ فترة طويلة طويلة وقصيرة هي أيضا صحيحة. DAVID مالان: في الواقع. في طبعة القراصنة من PSET واحد، نحن فعلا استخدام طويل طويل. ولكن بالنسبة للطبعة القياسية، يجب أن لا يكون ضروريا. MARIA: بارد. حسنا. لذلك يجب أن تكون operators-- ربما دراية معظم هذه. بالإضافة إلى ذلك، +. طرح، -. لإكثار، لدينا *. حتى لا X التي نستخدمها عادة. تقسيم، لدينا مائل. ومودولو هو عامل آخر في أن نحن بصدد الحديث عن الوقت الحالي. انها المشغل الذي يسمح لنا ل تأخذ ما تبقى من الانقسام. حتى إذا كان لدينا 4٪ 2، 4 تقسيم بنسبة 2 هو 2 مع ما تبقى من 0. حتى 4٪ 2 0. 4٪ 3 هو 1. 4٪ 5 هو 4، كما كنت قد خمنت. وتذكر عند استخدام كل هذه المشغلين لاستخدام قواعد PEMDAS. DAVID مالان: لكي نكون واضحين، إذا كنت قيام 4٪ 2، لماذا 0، بالضبط؟ MARIA: لأن 4 مقسوما 2 هو 2 مع ما تبقى من 0. حتى مودولو يعطينا أن تبقى كما خلافا لنتيجة الانقسام. DAVID مالان: وبالفعل، ما سوف نجد هذا مفيدة لهو أنه في بعض المشاكل هذا ليس بالضرورة واحدة، إذا كنت ترغب في الحصول على أثر تقييد نفسك لمجموعة من الأرقام مثل من 0 إلى شيء، يمكنك استخدام مودولو للالتفاف حول في وقت سابق من مثل 2000000000 أو قيمة 4 مليارات ذلك تحدثنا عنها في المحاضرة. MARIA: نعم. وحتى في "الجشع" أننا ربما. DAVID مالان: نعم، في المشكلة مجموعة واحدة، كذلك. MARIA: نعم، لطيفة. DAVID مالان: تلميح جيد. MARIA: عذرا. منطقية expressions-- ذلك لمشغلي منطقية، نحن بصدد الحديث عن كل من هذه التي تراها هنا. حتى الآن، لدينا اثنين علامات المساواة المذكورة لمتساوين. حتى تلك هي لأغراض المقارنة. حتى الآن، رأينا فقط واحد يساوي علامة. وذلك عندما نعلق قيمة إلى متغير. حتى إذا رأيناه الباحث ن = 5، ثم لقد كلف 5 إلى ن متغير. ولكن إذا أردنا أن استخدام == لل بالمقارنة، يمكننا معرفة ما اذا كان ن == 5. وإذا كان n == 5، ثم أن هذا صحيح. العوامل المنطقية لذلك تسمح لنا، في الأساس، لتقييم منطقية تعبيرات إلى True أو False. حتى لا equals-- لدينا علامة تعجب ومتساوين. ولذا فإننا يمكن أن تحقق أيضا إذا كان n لا يساوي 5-- ذلك ن! = 5. أقل من أقل من أو يساوي، أكبر من، أكبر من أو يساوي، ثم لدينا منطقية AND و OR المنطقية. وهذه تسمح لنا لتقييم التعبيرات المنطقية متعددة معا لتأتي أساسا معا واحد تعبير منطقي كله. لذلك إذا أردنا أن نجد عددا، ويقول، أكبر من 5 ولكن اقل من 15 في الوقت نفسه، سوف نستخدم منطقية ومشغل لمعرفة ما إذا كان n هو أكثر من 5 && ن أقل من 15. DAVID مالان: وهنا، أيضا، فإنه من السهل حقا في وقت مبكر لعن طريق الخطأ مجرد استخدام العطف واحد أو شريط عمودي واحد. ونأمل أن المترجم يصيح في لكم لأنها في الواقع لها معنى مختلف للغاية. بالنسبة لأولئك الفضوليين، وانهم تستخدم لعمليات أحادي المعامل، تعمل على بت الفردية. ولكنك لا تريد الزوج منها هنا. والسوبر أهمية هو أن أول واحد، علامة المساواة، التي هي المشغل المساواة كما بدلا من عامل التعيين. MARIA: وشريط عمودي تقع بين حذف والعودة. DAVID مالان: نعم. على لوحة مفاتيح الولايات المتحدة نموذجي. MARIA: نعم. لذلك دعونا القفز الحق في عبارات شرطية. في خدش، قمت رأينا بالفعل، على الأرجح، إذا كانت تصريحات التي تسمح لك ل تحقق إذا كان هناك شيء غير صحيح، ثم القيام بشيء آخر. لذلك قد يكون أراد للتحقق مما إذا العفريت الخاص بك هو لمس بعض العفريت أخرى أو حدود الشاشة. ثم كنت قد أردت أن انهاء المباراة أو تفعل شيئا آخر. حتى بناء الجملة من أجل أن هو "اذا (شرط)." حتى إذا كان لديك شبح لمس شيئا، بعد ذلك هو داخل الأقواس المعقوفة. ثم لدينا إذا غيرك البيانات. يسمح إلا منا أن نفعل شيئا إذا كان الشرط أننا تحقق من وجود في بداية هذا غير صحيح. لذلك إذا كان شبح لمس الحدود القيام بذلك، وإلا تفعل شيئا آخر. هكذا يفعل خلاف ذلك شيء آخر. ثم لدينا مثال القصير لهذا الغرض. إذا كان الأمر كذلك (military_time <12)، ونحن تريد printf "صباح الخير!" إلا فإننا ذاهبون الى printf "مساء الخير!" مثال بسيط. DAVID مالان: جيد. MARIA: بارد. حتى الآن لدينا بيانات التبديل. تبديل البيانات في العلبة العام تسمح لنا أن تفعل الكثير من الشيء نفسه التي تحدثنا فقط حول مع إذا كانت تصريحات. على سبيل المثال، الآن لدينا الشكل العام للبيان التبديل أن يسمح لنا باتخاذ متغير يسمى ن وذلك لمقارنة الكثير من قيم مختلفة، والذي نحن هنا ودعا constant1، constant2. قد تكون لدينا الكثير. وتلك تسمى الحالات. حتى إذا كان لدينا التبديل بيانا توضح فيه ويعمل هذا فقط لintegers-- لدينا المتغير في هذه الحالة وهذا ن. إذا ن متغير يساوي constant1، ونحن سيتم تنفيذ بعض مقتطف من التعليمات البرمجية أو ما نريد القيام به. ثم أننا سوف كسر. حتى نهاية الشوط الاول يعني أن بيان التبديل سيتم إيقاف تنفيذ إذا ن يساوي constant1، وبعد ذلك سوف يستمر البرنامج. فإنه سيتم إنهاء للخروج من التبديل البيان وانها سوف الاستمرار في القيام بشيء آخر. ولكن، إذا ن لا يساوي constant1، ثم قضية constant2 وسيتم فحص. حتى إذا كان n يساوي constant2، أن البعض وسيتم تنفيذ مقتطف من التعليمات البرمجية. وبعد ذلك سوف كسر إذا كان هذا هو مساويا له. وبعد ذلك يمكن أن يكون also-- لا بالضرورة، though-- قضية الافتراضية، الذي سيحدث إذا كان n لا يساوي أي من الحالات التي ذكرتموها. وفي الحالة الافتراضية، ونحن أيضا لا حاجة الى كسر بالضرورة لأن البيان التبديل يعرف التي يحتاجها لإنهاء بعد الافتراضي الحالة إذا كان هذا هو الحال. DAVID مالان: ولكن أسلوبيا، نضع دائما في هناك. MARIA: نعم. DAVID مالان: نعم. لذلك خصوصا عند البدء، خاصة إذا كان من بين أولئك الذين هم أقل مريحة، وأنا شخصيا فقط نوصي العصا مع المؤسسة الدولية للعلوم والمؤسسة الدولية للعلوم-إلسس وإذا-آخر-إذا-إلسس وهكذا إذا فقط لأنهم قليلا أكثر وضوحا. هذا هو الأمثل لطيفة، أو في بعض الأحيان حتى من الناحية الجمالية عليه يجعل رمز أكثر قابلية للقراءة. في واقع الأمر، وربما منتصف الفصل الدراسي سنرى مشكلة مجموعة حيث يبدو تماما على نحو أفضل وأسهل للقراءة للبشر باستخدام عبارة التبديل. ولكن لا تقلق التشبث هذا في وقت مبكر جدا. MARIA: نعم. إذا كان لديك الكثير من إذا كانت تصريحات، قد لا يكون مجرد قراءة للغاية. قد لا يكون سريع جدا لك أن تذهب من خلال ذلك. حتى تبديل البيانات يمكن أن تكون مفيدة جدا، كذلك. وأيضا، لا تفعل remember-- لا تنسى أن تضع فواصل هناك. DAVID مالان: لا تذكر هذا. MARIA: لأن فإنك قد تقع من خلال من حالة لأخرى. لذلك دعونا نقول هذه الحالة constant1 لم يقم كسر في ذلك. ثم أننا قد تقع من خلال constant2 الحالة في الداخل. ونحن لا نريد أن نفعل ذلك إذا لقد وصلت بالفعل حالة constant1 وانها تساوي ن. لذلك، على سبيل المثال، إذا كان لدينا متغير ن الذي يحتوي على عدد من الدرجة، ونحن نريد أن نرى ما فئة is-- إذا كان n يساوي 50، ونحن في طريقنا للطباعة "CS50 هو مقدمة في علوم الحاسب الآلي I. " ثم نحن في طريقنا للكسر. وهذا كل شيء. ولكن، إذا ن يساوي إلى 51، ونحن في طريقنا لطباعة "CS51 هو مقدمة لعلوم الحاسب II ". ثم مرة أخرى، ونحن في طريقنا للخروج. ومع ذلك، ثم إذا وضعنا 124، 61، أي عدد الأخرى التي قد تفكر به، أو البرنامج لن أن ندرك أن. لذلك سيكون ليقول "عذرا، أنا لم تكن مألوفة مع تلك الفئة ". وانها سوف كسر. DAVID مالان: حتى تستطيع أن ترى حقا وإذا، إلا إذا، فكرة شيء آخر هنا. انها جملة مختلفة فقط ل معربا عن نفس الفكرة بالضبط. MARIA: بالضبط. الآن لدينا شركات ثلاثية لدينا. مشغلي الثلاثية بحيث يكون ثلاثة parts-- شرط، أن تفعل شيئا إذا هذا الشرط صحيحا، ثم أن تفعل شيئا إذا كان هذا الشرط هو كاذبة. هكذا ترون، أساسا، بناء الجملة من ذلك هنا. لدينا علامة استفهام، و ثم the-- ماذا نسمي هذا؟ DAVID مالان: القولون. MARIA: القولون. شكرا لك. آسف. لذلك دعونا ننظر إلى مثال جهدنا ل معرفة ما إذا كان يمكننا أن نجعل الشعور this-- class_num == 50. حتى هنا نرى مشغل منطقية لدينا == أن يقارن class_num متغير 50. مخازن class_num ذلك صحيح. وإذا كان ذلك صحيحا يساوي 50، ثم نحن الذهاب لتخزين "ديفيد مالان" داخل أستاذ السلسلة. إذا كان رقم فئة لا يساوي 50، "أليس داود مالان" سيكون الأستاذ. DAVID مالان: شكرا لك. وهكذا يبدو هذا يعادل ماذا، هل تقول للوهلة الأولى،؟ MARIA: ويبدو لي مثل إذا كان بين آخر التصريحات. DAVID مالان: نعم. في واقع الأمر، وهذا هو النوع من جميلة بطانة واحدة، إذا جاز التعبير، لتنفيذ بالضبط منطق إذا غيرك لكنه لا يفعل كل شيء في خطوة واحدة. MARIA: بالضبط. نعم. البيانات حتى إذا-آخر قد يستغرق الكثير من المساحة. لأنها قد تكون طويلة جدا ل شيء بسيط مثل هذا. لذلك يمكن أن يكون جدا مقتضبة وجميلة جدا. وحتى الآن ونحن في طريقنا إلى النظر في تنفيذ شيء مرارا وتكرارا، التحقق من ذلك ل شرط عدة مرات ومن ثم الاستمرار في القيام بشيء ما في حين أن الشرط صحيحا. لذلك هذا يقودنا لطيف في الحلقات الوقت. إلى اليسار، لدينا لدينا أول حلقة من الوقت. وذلك في حين هناك شيئا صحيحا، نفعل شيئا مرارا وتكرارا. لذلك تأكد من أن نلاحظ أن لدينا حالة هنا يتم التحقق من صحة في الأعلى. بينما مع loop-- الثانية لدينا نسميه ان افعل حين loop-- نفعل شيئا، ثم نتحقق لشرط. وإذا كان هذا الشرط وتواصل ليكون صحيحا، نعود وتفعل الشيء مرة أخرى. وبالتالي فإن الفرق الرئيسي هو المكان يتم فحص شرط. ورمز قد يكون أبدا أعدم إذا كان الشرط غير صحيح مع حلقة الوقت. بينما مع افعل حين حلقة، لدينا رمز التي يتم تنفيذها دائما مرة واحدة على الأقل. ثم حين أن الشرط وتواصل ليكون صحيحا، يمكن أن نعود مرة أخرى وتكرار الداخل. لذلك لماذا تعتقد سوف نستخدم والقيام في حين حلقة أكثر من حلقة في حين؟ الصحيح. لذلك إذا أردنا أن مطالبة المستخدم نوعا من المدخلات، إذا كنا نريد أن نطلب منهم بإدخال اسمه، نريد على الأقل نطلب منهم مرة واحدة. وإذا لم تدخل هذا الاسم، نحن لسنا الذهاب ليطلب منهم مرة أخرى لأننا نعلم بالفعل. ولكن إذا كانوا لا تدخل اسمهم، أو إذا كانت إدخال شيء هذا من الواضح أن لا اسم، نحن لا تزال ترغب في مواصلة طالبا منهم على لباسمهم. DAVID مالان: وفي المحاضرة كان لدينا واحدة مثل هذا مع الحصول على كثافة إيجابي سبيل المثال، حيث لا يوجد شيء لل تحقق في البداية لأن لديك ولا حتى حصلت عدد صحيح. لذلك نحن نريد أن نفعل this-- الحصول على عدد صحيح من user-- ثم التحقق من ذلك، ربما، مرة أخرى، ومرة ​​أخرى ومرة ​​أخرى. MARIA: بالضبط. لOK loops--. لالحلقات يمكن أن تسمح لنا أن نفعل ما يقرب من نفس الشيء بالضبط، كذلك. انها في الواقع نفس الشيء بالضبط. ولذلك لا يوجد شيء يمكنك القيام به مع لحلقات أنك لن تكون قادرة للقيام مع الحلقات الوقت. ولكن بالنسبة لحلقات قد يبدو قليلا قليلا أكثر تعقيدا من حيث التركيب لأن لديهم ثلاثة أجزاء داخل ما وقبل فقط حالة مع الحلقات الوقت. حتى الجزء الأول الذي قمت البحر، اليسار أكثر، لدينا "الباحث الأقزام = 0." لذلك هذا هو وضعنا تهيئة المتغير لدينا. ثم لدينا فاصلة منقوطة و "الأقزام <7." لذلك هذا هو المكان خارج الشرط هو في الواقع. لذلك هذا هو ما سيكون لدينا وضعت للتو في حين loop-- "في حين الأقزام <7." هنا، أن يذهب في منتصف لدينا حلقة. حتى "dwaves <7." ثم الجزء الأخير لدينا هو "الأقزام ++" وهو حيث نقوم بتحديث متغير لدينا. وبالتالي فإن الشيء المهم أن ندرك أن هذا سوف تذهب من خلال هذه الحلقة ل سبع مرات وتنفيذ سبع مرات. لذلك لدينا سبعة الأقزام، وانهم جميعا أريد أن أقول: "أنا هنا لمساعدتك، سنو وايت " لأنهم على استعداد للمساعدة سنو وايت. مع الوقت الحلقات، ونحن قد فعلت تهيئة وتحديث ليس داخل الشرط، مرة أخرى، ولكن إما قبل أو داخل حلقة في حين للتأكد من أن we-- ل نحتاج دائما تلك الأجزاء. لذلك للتأكد من أن لدينا منهم، فإن لدينا حتى الآن وأضاف لهم على، ليس فقط داخل الأقواس. DAVID مالان: وهكذا يبدو like-- في المحاضرة، على سبيل المثال، أنا تقريبا دائما استخدام، مثل، أنا و ن والمتغيرات مملة جدا. يبدو أنك يمكن استخدام أكثر اسمه بذكاء المتغيرات أيضا. MARIA: نعم، انها فعلا لطيف جدا لاستخدام المتغيرات أكثر قليلا وصفية لأن لا سيما إذا كان شخص آخر هو قراءة code-- بك ربما كنت في الصف أو إذا كنت التعاون مع شخص ما-- كنت ترغب في التأكد من أنهم فهم ما تفعلونه. حسنا. لذلك هذا هو شيء funky-- جدا لحلقة داخل حلقة for. أنا لا أعرف ما إذا كنا قد رأيت هذا من قبل. على الاغلب لا. لكننا يمكن أن يكون في الواقع this-- حلقات وذلك بدلا من الحلقات. لذلك لا أحد يريد أن يمشي ربما لي من خلال ما يحدث هنا؟ DAVID مالان: سآخذ طعنة. MARIA: بارد. DAVID مالان: OK. لذلك، spoiler-- نريد لطباعة الاشياء هذا في أسفل الزاوية اليمنى هناك. MARIA: الحق. نعم نعم. DAVID مالان: لذلك قمنا فقط وضع هذا إخراج نموذج هناك. حتى أستطيع أن نستنتج من العلوي حلقة أنك بالتكرار عبر الصفوف ل الحلقة الأبعد، إذا جاز التعبير. وكنت بالتكرار عبر الأعمدة مع حلقة الأعمق. وبشكل حدسي، وهذا يجب أن نأمل المنطقي وذلك لأن من طبيعة كل برنامج رأيناه من قبل، printf، الذي هو وظيفة نستخدمه، في نهاية المطاف، لديه القدرة على طباعة الاشياء خط خارج أساسا سطرا. مثل، مرة واحدة كنت قد أنتج خط جديد، هناك لا مضاعفة الظهر والطباعة شيء أعلى في الشاشة، على الأقل لا تستخدم printf من هذا القبيل. وحتى في هذا الصدد، فإنه يجعل بمعنى أن الحلقة الأبعد يجب أن يشير إلى الصفوف لأن لإعطاء كل صف، كنت تريد الذهاب الى طباعة XXXXX، ثم الانتقال إلى الصف التالي، XXXXX. حتى الصفوف تأتي أولا. ثم داخل كل صف واحد، يمكنك طباعة الأعمدة. إذا حاولت أن تفعل ذلك عكس ذلك، فإنه ربما لا يخرج كما كنت أنوي. MARIA: نعم. إلا أننا لا يمكن أن نعود إلى الصف السابق مع printf. DAVID مالان: وما هو مثير للاهتمام في دردشة اليوم عن نطاقها، في الواقع، هو أن الخلاف هو عدد صحيح هذا ما أعلن في حلقة العلوي. ولكن لاحظ أنه لا يزال داخل، إذا جاز التعبير، الأقواس المعقوفة التي اتبع على الفور، على الرغم من انها ليست من الناحية الفنية داخل هذه الأقواس المعقوفة. حتى الصف في نطاق ل مجمل مقتطف من التعليمات البرمجية، سواء داخل الخارجي للحلقة وداخل الداخلية للحلقة. ولكن على النقيض من ذلك، حيث هو العمود في نطاق؟ العمود متغير؟ نعم، فقط في الحلقة الداخلية. وهذا موافق لأننا لا الوصول انها خارج الأقواس لها مجعد. كل ما نفعله هو طباعة جديدة الخط في النهاية هناك. حتى أنه في واقع الأمر على ما يرام. ولذلك فإن هذا له تأثير، فإنه يبدو، فعل ثلاثة صفوف وأربعة أعمدة. MARIA: الحق. أولا حتى نذهب من خلال الصف الأول لدينا. وفقط في الصف الأول لدينا، ونحن نفعل أربعة أعمدة داخل الصف الأول. لذلك نحن طباعة أربعة X ل. وبعد ذلك يمكننا الخروج من حلقة ل، منذ لقد طبعت بالفعل أربعة X ل. ونحن طباعة سطر جديد. ثم نذهب من خلال نفس العملية لمدة أكثر من الصفوف لجعل ما مجموعه ثلاثة. DAVID مالان: وومن الجدير بالذكر أنه من مجرد قطعة أثرية من الخط، حقيقة إن إخراج نموذج يبدو أطول كثيرا، وكأن هناك المزيد صفوف من الأعمدة. ولكن هذا لمجرد أن X هو اطول مما هو عليه اسعة. هذا كل ما يحدث هناك، بالإضافة إلى المساحة البيضاء بين السطور. MARIA: الحق. رائع. DAVID مالان: حسنا. حتى نظرة سريعة على مشكلة مجموعة واحدة، اتخاذ أي أسئلة، ومن ثم تأجيل؟ حسنا. وذلك في مشكلة مجموعة واحدة، هناك ثلاثة التحديات الرئيسية، في نهاية المطاف. ولكن أولا، ستجد أن المشكلة مجموعة مواصفات، كما هو الحال مع العديد من psets في خريف هذا العام، سوف المشي لكم خلال بضعة تمارين الاحماء، النقطة التي بها عدد قليل من الموارد التي قد تكون أو لا لقد شهدنا بالفعل. على سبيل المثال، CS50 لديه مجموعة من السراويل، والتي هي أشرطة الفيديو القصيرة، لا يختلف هذا، ولكن هذا هي specific-- الموضوع جدا ربما خمس دقائق، في طول 10 دقيقة على الحلقات أو على الظروف أو على خوارزميات أو في وقت لاحق أكثر موضوعات متقدمة، كذلك. ونحن تضمين عموما وتلك في مشكلة مجموعات حتى يتمكن الطلاب لديها الموارد التي لمراجعة المواد التي قد يكون لها يأتي بالفعل في محاضرة أو المقطع. ولكن هذه الطريقة انها أكثر تركيزا وأكثر من ذلك في متناول أيديهم. ونحن نميل أيضا إلى تضمين في مشكلة يضع الأشياء تسمى تجول. لذلك كل ما يقرب من الأمثلة أفعل في محاضرة، على خشبة المسرح هنا، ونحن أيضا واطلاق النار على الكاميرا في تقدم أكثر أبطأ، تجول أكثر حميمية من قبلي على جهاز الكمبيوتر المحمول من هذا الرمز، سطرا سطرا بحيث في الصف، وسوف نقوم في كثير من الأحيان المقشود من خلال شيء أو شخص ما سوف تقحم مع الإجابة على سؤال. ولكن لا تغرق بالضرورة في الجميع في الحضور. لذلك عليك العثور على رمز تجول بالنسبة لمعظم الأمثلة ما نقوم به هنا في محاضرة حتى يتسنى لك يستطيع المشي من خلال ذلك على وتيرة الخاصة بك والترجيع أو سريع إلى الأمام أو تخطي تماما، إذا كنت ترغب. هناك في كثير من الأحيان لا الحصر أسئلة الاحماء التي أطلب منك أن فرز من تعزيز هذه المادة وتأكد من أنك مريح قبل المتابعة مع بقية PSET. وبعد ذلك، بالطبع، هناك من PSET نفسها. واحدة من الأشياء نحن عمدا جدا القيام في CS50 هو تقريبا كل رتيبا أو رتيبا فكريا خطوة الميكانيكية التي قد يكون لديك لتفعل تم توثيقه تقريبا دائما بشكل جيد للغاية. على مدار المدى، وسوف نقوم البدء في طرح الأسئلة أكثر البلاغية كما تذكر كيف نفعل هذا أو ذاك؟ ولكن عموما، ستجد أن مجموعات مشكلة تحصل من خلال اليات شيء بحيث و، التحديات الفكرية مثيرة للاهتمام وترك في نهاية المطاف لك الطالب. وقال مع ذلك، Zamyla، الذي نحن أبقى اشارة اليوم في محاضرة، هو واحد من الموظفين لدينا منذ فترة طويلة العضو الذي يحمل أيضا تجول على المشاكل PSET محددة مثل ماريو والجشع، ولكن ليس للمياه هذا العام. وكان في تلك المواضيع الإرشادية أنها في كثير من الأحيان يقدم بعض النصائح والحيل ل كيفية المضي قدما، لا أقول لك بالضبط ما يجب القيام به، ولكن rather-- مثل شرط، إذا كنت will-- مما يتيح لك على الأقل زوجين من الأفكار بحيث الامر متروك لكم، في نهاية المطاف، لاتخاذ قرار كيفية التعامل معها. MARIA: نوع من مثل رفيعة المستوى فهم منطق ما نحن نطلب منك أن تفعل. DAVID مالان: بالضبط. و، في الواقع، في Zamyla وتهدف تجول للإجابة على كثير من الأحيان سؤال من حيث أقوم بدأت، وخصوصا عندما هذه المواصفات الشراء هي قليلا شاقة بالنظر إلى كل النص والصور التي لديهم فيها. water.c ذلك، ستجد بعد أن كنت قد أنجزت ذلك، هو في الواقع بسيط نسبيا. على الاطلاق حفنة من أنت ذاهب إلى فرقعة رؤوسكم ضد الجدار في محاولة لمعرفة لماذا انها ليست تجميع أو لماذا انها لا تعمل بشكل صحيح. ولكن بمجرد الانتهاء من ذلك مع ذلك، ومرة ​​واحدة كنت قد أمضى بعض الوقت مع المصارعة أي من الأخطاء التي قد تكون لديكم، ستجد أنه من برنامج قصير جدا. ويمكن القيام به في عدد قليل خطوط للقانون، ومعظمها رأيناه هنا في محاضرة بالفعل، إذا يمكنك تجميع اللبنات الصحيحة. وكما نقترح هنا، أريد لها أن تسأل لك بتحديد عدد الدقائق شخص ما أخذ دش في الحرم الجامعي. نحدده نحن في مشكلة ضبط معدل تدفق المياه في، مثل، دش منخفضة التدفق الرأس، مثل الكثير من مقطع سينفيلد شاهدنا أمس أو على العكس من ذلك. ثم لديك فقط أن تفعل شيئا من الرياضيات، really-- الحساب باستخدام C لنقول لنا كم، تقريبا، من زجاجات المياه غير أن ما يعادل إذا نحن أخذ دش ن دقيقة. الآن، في mario.c، وهذا يحدث ليكون برنامجا أطول قليلا. انها لا تزال لن يكون هذا الوقت الطويل. فقط بضعة أسطر أطول من water.c. ولكنها ستكون فرصة لإعادة المدرسة القديمة ماريو الهرم من سوبر ماريو الإخوة أو بعض المتابعة. انها لن تبدو كما أجمل أو الملونة كما أن واحدا هناك. نحن ذاهبون لمجرد استخدام الهاش قليلا كما لدينا هنا على الشاشة باستخدام نص ASCII. ولكنه سوف تقريب الفكرة نفسها. وانها سوف تكون ممارسة هذا للوهلة الأولى يبدو جميلة simple-- فقط طباعة الهرم بسيط. ولكن هناك خصائص الزوجين هنا التي هي مثيرة للاهتمام. لاحظ أن الحافة أقصى اليمين من الهرم لديه بالفعل عرض اثنين. ولذلك لا يوجد اثنان على قدم المساواة أعمدة الطول، الذي يجعل ذلك يتطلب قليلا قليلا من الفكر لجعل تأكد من الحصول على هذا الحق تماما، كما بدلا من مجرد الزاوية تماما خط. بحيث قليلا من حالة الزاوية ولكن مباريات اللعبة الفعلية. وانها أيضا غير واضح في البداية وهلة كيفية طباعة المساحة البيضاء. لذلك عندما ألقي نظرة على عينة إخراج here-- وانها أيضا في spec-- ذلك نوع من يشبه المستطيل، ولكن قطري لل وقد المفروم المستطيل الخروج، وانها مجرد المساحات البيضاء، إذا جاز التعبير. ولذا فإن المتداولة السؤال هنا هو دائما، حسنا، كيف يمكنني نقل الهاش إلى اليمين؟ أو كيف يمكنني طباعة مسافات فارغة؟ وانه من الاسهل الواقع من معظم الطلاب على التفكير. الصحيح؟ يمكنك تقريب بصريا فقط عن طريق ضرب شريط الفضاء مرة أو مرتين أو ثلاث مرات. وذلك على الرغم مع printf نحن تقريبا طباعة دائما سلسلة أو عدد صحيح أو كلمة مثل "مرحبا، العالم "أو سلسلة من الكلمات، يمكنك أيضا طباعة فقط الاقتباس، والفضاء، نهاية الاقتباس. وهذا سيتيح الواقع لك مساحة بيضاء هناك. حتى أن تبقي في الاعتبار، و لا overthink هذا. هل حقا أن تقرر صف من صف، لا يختلف المثال الخاص بك لحظة مضت، كم من هؤلاء يجب أن تكون الأعمدة المساحات البيضاء و كم منهم يجب أن يكون الهاش. سوف يستغرق قليلا من الوقت، ولكنها ل في نهاية المطاف لغز منطق من نوع ما. MARIA: نعم. لكن منطق الذهاب من صف سيكون من المفيد جدا هنا. DAVID مالان: نعم. أعتقد أن نموذج التعليمات البرمجية لك حتى gave-- على الرغم من أنه لم يكن برنامجا كاملا. كنت لا تزال بحاجة كثافة العمليات والرئيسي وstdio.h باطل وتتضمن #، الكثير من الاشياء من المحاضرة. ولكن اللبنات يبدو أن هناك. ثم أخيرا شيء أكثر من ذلك بقليل حسابي. لذلك تبين أنه في أي وقت كنت الذهاب إلى CVS أو أي متجر وشخص يد لك في فواتير الصراف أو القطع النقدية كما تغير، اتضح أنهم، والبشر، أم لا يعلمون ذلك أم لا، ربما تستخدم ما دعا خوارزمية الجشع، حيث إذا كنت المستحقة، ويقول، 21 $ في التغيير لأن لسبب ما اشترى لك شيئا غير مكلفة للغاية مع مشروع قانون كبير جدا في CVS، سيكون مزعج حقا إذا كان وقدم أمين الصندوق لك 21 الفردي، أو أسوأ بعد، مجموعة كبيرة من القطع النقدية. بدلا من ذلك، ما هو شخص عاقل ربما تنوي القيام به هو انهم ذاهبون إلى الاستيلاء على 20- $ وبعد ذلك $ 1-مشروع القانون، و اليد التي اثنين فقط من الفواتير في هذه الحالة. MARIA: حتى أنهم يسعون إلى تقليل التغيير الذي يقدمون إليك. DAVID مالان: بالضبط. ونفس الصفقة مع القطع النقدية، وكذلك. إذا كنت المستحقة، ويقول، 0،50 $، نأمل كنت لا تريد 50 بنسات. هل تريد بدلا من اثنين أرباع، على سبيل المثال. الآن، هذا لا نفترض أن أمين الصندوق لديه بما فيه الكفاية من كل طائفة أن أو أنها قد تريد أن تعطي لك. ولكننا لا تسمح لك أن نفترض قدر في هذه المشكلة. والهدف في نهاية المطاف، هو تنفيذ في التعليمات البرمجية C خوارزمية الجشع. بحيث يتم السماح للمستخدم اكتب في كم تغيير هو أو هي المستحق دولار وسنت، نوعا من النقطة العائمة قيمة الأرجح. ثم عليك أن تفعل الرياضيات و معرفة حسابيا، حسنا، عدد القطع النقدية يمكن أن أعطي لك الحد الأدنى لإعطائك بالضبط هذا المبلغ من التغيير. ولكن هناك سيكون ل بضعة أجزاء صعبة هنا، أليس كذلك؟ كما هناك العموم مسألة عدم الدقة. MARIA: بالضبط. النقطة العائمة ذلك القيم يجب عدم الدقة. لم نتحدث عن هذا في محاضرة اليوم؟ DAVID مالان: فعلنا آخر مرة في المحاضرة. تحدثنا عن عدم الدقة. وكنت لا تريد لخداع المستخدم كم التغيير هو أو هي المستحقة. وهكذا تجول في مشكلة تحديد مواصفات، تعطي بعض التفكير، في نهاية المطاف، ل كيف يمكن التخفيف من تلك الدقة أخطاء محتملة. فمن الممكن تجنبه، بالتأكيد، ل المدخلات نحن نتحدث عنه. و، في الواقع، pennies-- ربما نحن سوف تؤجل إلى Zamyla، أعتقد، لالحيل هناك. حتى في نهاية المطاف، سوف تجد تطور مشاكل هذا الأسبوع، أولها هي صغيرة جدا، ثم المتوسطة، ثم أكبر قليلا. ولكن كل منهم استخدام المبنى كتل من الأسبوع الماضي، من هذا supersection، وضع مواصفات مشكلة يضعك في الموارد التي لا حصر لها. ولكن لا تزال تكافح، على كل حال، لا سيما بين أولئك الذين هم أقل مريحة مع أي خلفية مسبقة، تأتي لساعات العمل يوم الاثنين والثلاثاء و الأربعاء والخميس. الذهاب إلى CS50 ناقش عبر موقع بالطبع، و عبر التي يمكنك الدردشه مع الموظفين والزملاء. ولكن في نهاية المطاف، وأعتقد أن أفضل نصيحة هي مجرد بداية في وقت مبكر. انها ليست نوع من الفئة التي يجب أن تبدأ psets يوم الاربعاء ليلة، أو ما هو أسوأ ليلة الخميس. MARIA: أفضل نصيحتي هي قد بدأت يوم الاثنين. DAVID مالان: الاثنين. حتى إذا لم تكن قد بدأت already-- لا. ولكن حتى لو لم يكن الاثنين، ثم يوم الثلاثاء. وفي اسرع وقت ممكن. وهذا هو السبب بالطبع لديه الكثير من أيام أواخر غير لتعطيك قليلا من ضغط نفسى لبدء وقت سابق ولكن لا يزال السماح أشياء تنزلق عندما تأخذ الأمور أطول مما تتوقع. MARIA: وأنت تريد أن تجعل استخدام ساعات العمل بقدر ما تستطيع، أيضا. DAVID مالان: أي أسئلة؟ حسنا. حسنا، لماذا لا نرفع هنا؟