>> [موسيقى]
>> ديفيد جيه مالان: حسنا.
هذا هو CS50 وهذا هي بداية الأسبوع 2.
وعليك أن تتذكر أن أكثر من في الأسبوعين الماضيين،
لقد تم إدخال الكمبيوتر العلم وبدوره، البرمجة.
>> وبدأنا القصة عن طريق الصفر، تلك اللغة الرسومية
من مختبر وسائل الإعلام معهد ماساتشوستس للتكنولوجيا.
ثم آخرها، في الأسبوع الماضي، لم نحن
إدخال higher-- ل لغة ذات مستوى أقل معروفة
كما C، شيء أن يكون نصية بحتة.
وبالفعل، آخر مرة نحن استكشاف ضمن هذا السياق
عدد من المفاهيم.
>> هذا، أذكر، كان جدا البرنامج الأول ونحن ننظر في.
وهذا البرنامج، بكل بساطة، بطباعة "مرحبا، العالم".
ولكن هناك الكثير يبدو السحر مستمرة.
هناك هذا # تشمل مع هذه الأقواس.
هناك كثافة العمليات.
هناك (الفراغ).
هناك أقواس، الأقواس المعقوفة، شبه كولون، وأكثر من ذلك بكثير.
>> وهكذا، أذكر أن قدمنا ​​خدش
حتى نتمكن، من الناحية المثالية، انظر الماضي ذلك التركيب، والاشياء التي في الحقيقة لا
كل ما فكريا مثيرة للاهتمام ولكن في وقت مبكر يوم
هو، على الاطلاق، صعبة بعض الشيء للالتفاف حول عقلك.
و، في الواقع، واحدة من الاكثر شيوعا أشياء في وقت مبكر من فئة البرمجة،
خصوصا بالنسبة لأولئك أقل مريحة، هو الحصول على بالاحباط بسبب
وتعثرت من قبل نحوي معين الأخطاء، ناهيك عن الأخطاء المنطقية.
وهكذا بين أهدافنا اليوم، في الواقع، سوف
يكون لتجهيز لكم مع بعض تقنيات حل المشاكل لكيفية
حل أفضل المشاكل أنفسهم في شكل التصحيح.
وسوف أذكر أيضا أن البيئة التي قدمنا
ودعا آخر مرة CS50 IDE.
هذا هو برنامج على شبكة الإنترنت أن يسمح لك البرنامج في السحابة،
إذا جاز التعبير، مع الاحتفاظ بكل بك ملفات معا، وهذا ما سنقوم مرة أخرى اليوم.
وأذكر أننا إعادة النظر في هذه المواضيع هنا،
من بينها وظائف، والحلقات، و المتغيرات، والتعبيرات المنطقية،
والشروط.
وفعلا عدد قليل من أكثر أننا ترجم من عالم خدش
في عالم C.
>> ولكن المبنى الأساسي كتل، إذا جاز التعبير،
كانت لا تزال في الحقيقة نفس الأسبوع الماضي.
في الواقع، ونحن في الحقيقة مجرد لديها آخر قطعة اللغز، اذا صح التعبير.
بدلا من أن الأرجواني حفظ الكتلة، ونحن بدلا من ذلك
قد printf، الذي هو هذه وظيفة في C التي
يسمح لك لطباعة شيء وتهيئته على الشاشة.
قدمنا ​​CS50 المكتبة، حيث كنت
لدينا الآن في get_char تصرفكم، وget_int، وget_string،
وعدد قليل من الوظائف الأخرى كذلك، عبر التي يمكن أن تحصل المدخلات
من لوحة المفاتيح المستخدم الخاصة.
واتخذنا أيضا نظرة على الأشياء مثل these- منطقي، وشار،
ومزدوجة، تطفو، كثافة العمليات، سلسلة long_long.
وهناك حتى أنواع البيانات الأخرى في C.
>> وبعبارة أخرى، عندما تقوم بتعريف متغير لتخزين بعض القيمة،
أو عند تنفيذ وظيفة وترجع بعض القيمة،
يمكنك تحديد ما نوع من قيمة.
أنها ليست سلسلة، مثل تسلسل الأحرف؟
هو رقم، مثل عدد صحيح؟
هل هي النقطة العائمة قيمة، أو ما شابه ذلك؟
وذلك في C، على عكس خدش، ونحن في الواقع بدأ لتحديد أي نوع من البيانات
كنا عائدين أو استخدام.
>> ولكن، بطبيعة الحال، ركضنا أيضا إلى بعض القيود الأساسية للحوسبة.
وعلى وجه الخصوص، هذه لغة C، استدعاء
أن أخذنا نظرة على تجاوز عدد صحيح، واقع
اذا كانت لديك فقط كمية محدودة من الذاكرة
أو، على وجه التحديد، وعدد محدود البتات، يمكنك الاعتماد فقط عالية جدا.
وحتى ونحن ننظر في هذا المثال هنا حيث عداد في طائرة،،
في الواقع، إذا تشغيلها لفترة طويلة بما فيه الكفاية أن تجاوز، ويؤدي إلى البرمجيات
خطأ محتمل المادي الفعلي.
>> بحثنا أيضا في عائم نقطة عدم الدقة، فإن الواقع
هذا مع وجود عدد محدود البتات، سواء كان 32 أو 64،
يمكنك فقط تحديد أعداد كثيرة جدا بعد العلامة العشرية، وبعد ذلك كنت
تبدأ في الحصول على غير دقيقة.
هكذا على سبيل المثال، وثلث في العالم هنا، في عالمنا الإنساني،
ما نعرفه هو مجرد عدد لا حصر له من 3S بعد العلامة العشرية.
ولكن جهاز الكمبيوتر لا يمكن بالضرورة تمثل عدد لانهائي من الأرقام
إذا كنت لا تسمح له بعض كمية محدودة من المعلومات.
>> وذلك ليس فقط أننا لم تجهيز لكم سلطة أكبر من حيث
عن الكيفية التي قد تعبر عن نفسك في لوحة مفاتيح من حيث البرمجة،
نحن أيضا محدودة ما يمكنك القيام به في الواقع.
وبالفعل، والبق والأخطاء يمكن تنشأ عن هذه الأنواع من القضايا.
والواقع، بين الموضوعات اليوم ستكون موضوعات مثل التصحيح
وفعلا تبحث تحت غطاء محرك السيارة في كيف تم إدخال أشياء في الأسبوع الماضي
تنفذ في الواقع حتى يتسنى لك أفضل
فهم كل من قدرات و القيود المفروضة على لغة مثل C.
>> في واقع الأمر، فإننا سوف قشر العودة طبقات من أبسط هياكل البيانات،
ما يسمى مجموعة، التي خدش يحدث للدعوة الى "القائمة."
انها قليلا مختلفة في هذا السياق.
وبعد ذلك سنقوم أيضا إدخال أحد أول من المشاكل مجال معين لدينا
في CS50، عالم الترميز، فن الهرولة
أو في التشفير المعلومات حتى يمكنك إرسال رسائل سرية
وترجم رسائل سرية بين شخصين، A و B.
>> حتى قبل أن الانتقال إلى ذلك العالم الجديد،
دعونا نحاول تجهيز لكم مع بعض التقنيات التي يمكنك قضاء
أو الحد من بعض على الأقل من الإحباطات
هذا وربما كنت قد واجه خلال الأسبوع الماضي وحده.
في الواقع، قبل كنت such-- بعض أولى المشاكل الخاصة بك في C. والاحتمالات،
إذا كنت مثلي، لأول مرة حاولت اكتب برنامجا،
حتى لو كنت تعتقد منطقيا البرنامج بسيط جدا،
قد ضرب بشكل جيد للغاية الجدار، و المترجم لن تتعاون.
إجراء أو رنة لن إلى القيام به في الواقع المناقصة.
>> وماذا يمكن أن يكون؟
حسنا، دعونا نلقي نظرة على، ربما، وهو برنامج بسيط.
انا ذاهب الى المضي قدما وحفظ هذا في ملف يسمى عمدا buggy0.c،
لأنني أعلم أنه ل تكون معيبة مقدما.
ولكني قد لا يدركون أنه إذا كان هذا هو البرنامج الأول أو الثاني أو الثالث
انني في الواقع جعل نفسي.
لذلك أنا ذاهب إلى المضي قدما و اكتب بها، كثافة العمليات الرئيسي (الفراغ).
ثم داخل بلدي الأقواس المعقوفة، مألوفة جدا ( "مرحبا، world--
مائل، ن ") - ومنقوطة.
>> أنا قد قمت بحفظ الملف.
الآن انا ذاهب الى النزول لنافذتي المحطة
ونوع جعل buggy0، لأنه، مرة أخرى، اسم الملف اليوم هو buggy0.c.
لذلك أنا اكتب جعل buggy0، أدخل.
>> و، أوه، يا الهي، أذكر من آخر مرة عدم وجود رسائل الخطأ هو شيء جيد.
لذلك لا الإخراج هو شيء جيد.
ولكن هنا لا بد لي بوضوح بعض عدد من الأخطاء.
>> حتى السطر الأول من الانتاج بعد كتابة جعل buggy0، أذكر،
يتم إخراج رنة ومطول إلى حد ما.
تحت غطاء محرك السيارة، تم تكوين IDE CS50
لاستخدام مجموعة كاملة من خيارات مع هذا المترجم
بحيث لم يكن لديك للتفكير فيها.
وهذا كل ما السطر الأول الوسائل التي تبدأ مع رنة.
>> ولكن بعد ذلك، والمشاكل البدء في جعل مظهرهم.
Buggy0.c على السطر 3، شخصية 5، هناك خطأ حمراء كبيرة.
ما هذا؟
يعلن ضمنا وظيفة المكتبة printf مع نوع int (CONST شار *،
...) [-Werror].
أعني، أنه بسرعة كبيرة يحصل غامضة جدا.
وبالتأكيد، في البداية لمحة، ونحن لن
أتوقع منك أن نفهم مجمل تلك الرسالة.
وحتى واحد من الدروس لهذا اليوم يسير
أن تكون في محاولة لاحظت أنماط، أو أشياء مماثلة،
إلى أخطاء قد تكون لديكم واجهت في الماضي.
لذلك دعونا ندف بعيدا فقط تلك الكلمات التي تبدو مألوفة.
و، خطأ أحمر كبير هو واضح رمزية من شيء يجري على خطأ.
>> يعلن ضمنا مكتبة وظيفة printf.
لذلك حتى لو كنت لا أفهم تماما ما يعلن ضمنا وظيفة المكتبة
الوسائل، والمشكلة بالتأكيد يتصل printf بطريقة أو بأخرى.
ومصدر هذه المسألة لديها ما تفعله مع إعلانها.
>> إعلان الوظيفة يذكر أنه للمرة الأولى.
واستخدمنا المصطلحات الأسبوع الماضي إعلان نموذج وظيفة، و
إما مع سطر واحد في أعلى صفحتك الملف الخاص أو في ما يسمى ملف الرأس.
وفي ما فعله ملف نقول الاسبوع الماضي ان printf هو الاقتباس،
قوسي، أعلن؟
في ملف ما هو النموذج الأولي؟
>> حتى إذا كنت تذكر، وأول شيء أنا المكتوب، وتقريبا كل برنامج آخر time--
وبالصدفة لحظة منذ بدأ كتابة myself-- كان هذا here-- واحد
hash-- # تشمل <stio-- ل الإدخال / output-- نقطة ح وبالفعل،
إذا أنا الآن حفظ هذا الملف، وانا ذاهب المضي قدما واضحة شاشتي،
الذي يمكنك القيام به عن طريق كتابة واضح، أو يمكنك اجراء مراقبة L،
فقط لمسح إطار المحطة الطرفية الخاصة بك فقط للقضاء على بعض الفوضى.
>> انا ذاهب الى المضي قدما و إعادة نوع جعل buggy0، أدخل.
وفويلا، ما زلت أرى أن قيادة طويلة من رنة،
ولكن ليس هناك رسالة الخطأ هذه المرة.
وبالفعل، إذا كنت تفعل ./buggy0، تماما مثل المرة السابقة،
حيث نقطة يعني هذا دليل، القطع يعني فقط،
هنا يأتي اسم البرنامج و أن اسم البرنامج هو buggy0،
أدخل "مرحبا، العالم".
>> الآن، كيف يمكن أن يكون لديك استقاها هذا الحل
دون بالضرورة الاعتراف العديد من الكلمات
كما فعلت، بالتأكيد، وجود فعلت ذلك لسنوات عديدة؟
حسنا، وتحقيق في المشكلة الأولى مجموعة، ونحن نقدم لك أمر
أن الموظفين CS50 نفسه كتب دعا help50.
وبالفعل، C يفعل مواصفات حددت المشكلة في كيفية استخدام هذا.
>> ولكن help50 أساسا برنامج الموظفين CS50 ل
كتب التي تسمح لك بتشغيل أمر أو تشغيل برنامج،
وإذا كنت لا أفهم ل الإخراج، لتمرير انتاجها الى help50،
وعند هذه النقطة البرنامج أن كتب موظفي بالطبع ل
سوف ننظر في انتاج برنامج الخاص بك سطرا سطرا، حرفا بحرف.
وإذا كنا، والموظفين، والتعرف على رسالة الخطأ التي تواجهها،
وسوف نحاول أن تثير لكم مع بعض أسئلة بلاغية، مع بعض النصائح،
مثل الكثير من TF أو CA أو نفسي أن تفعل شخصيا في ساعات العمل.
>> فانظر إلى help50 إذا كنت لا تعترف بالضرورة مشكلة.
ولكن لا تعتمد عليه كثيرا كما عكاز.
بالتأكيد محاولة لفهم لها الانتاج ومن ثم نتعلم منها
بحيث مرة واحدة فقط أو مرتين هل من أي وقت مضى تشغيل help50 لخطأ معين
الرسالة.
بعد ذلك، يجب أن تكون أفضل تجهيزا نفسك
لمعرفة ما هو عليه في الواقع.
>> دعونا نفعل الآخر هنا.
اسمحوا لي أن المضي قدما، وآخر ملف وسوف ندعو هذا buggy1.c.
وفي هذا الملف أنا الذهاب إلى deliberately--
ولكن التظاهر بأنني لا فهم ما الخطأ التي أخرجتها.
>> انا ذاهب الى المضي قدما والقيام this-- # تشمل، منذ لدي
تعلمت الدرس من قبل لحظة.
كثافة العمليات الرئيسي (الفراغ)، كما كان من قبل.
ثم هنا انا ذاهب للقيام سلسلة ق - get_string.
ونذكر من المرة الأخيرة التي يعني ذلك، مهلا، الكمبيوتر،
تعطيني متغير، الذي يطلق عليه ق، و جعل نوع هذا المتغير سلسلة
حتى أتمكن من تخزين واحدة أو أكثر من الكلمات في ذلك.
>> ثم على الجانب الأيمن جانب من علامة المساواة
وget_string، وهو وظيفة في مكتبة CS50
أن يفعل ذلك بالضبط.
فإنه يحصل على وظيفة ثم يد من اليمين إلى اليسار.
ولذلك فإن هذا علامة المساواة لا تعني "يساوي" كما قد نعتقد في الرياضيات.
وهذا يعني تكليف من اليمين إلى اليسار.
لذلك هذا يعني، واتخاذ سلسلة من المستخدم وتخزينها داخل الصورة.
>> الآن دعونا استخدامه.
اسمحوا لي أن المضي قدما الآن وكلغة ثانية الخط، واسمحوا لي أن تمضي قدما ويقول "مرحبا" -
ليس "العالم"، ولكن "مرحبا،٪ s-- وليس لدينا نائبا، فاصلة الصورة،
وهو متغير لدينا، ثم منقوطة.
حتى إذا لم أكن المسمار كثيرا هنا، هذا يبدو وكأنه رمز الصحيح.
>> وبلدي الغرائز الآن هي ترجمة عليه.
يتم استدعاء الملف buggy1.c.
لذلك أنا ذاهب الى القيام به جعل buggy1، أدخل.
والرتق، أنه، إذا لم يكن هناك حتى المزيد من الأخطاء من قبل.
أعني، هناك المزيد رسائل الخطأ أنه سيكون
يبدو من خطوط الفعلية في هذا البرنامج.
>> ولكن الوجبات الجاهزة هنا، حتى لو كنت غارقة
مع اثنين أو ثلاثة أو أربع رسائل الخطأ أكثر،
نركز دائما على جدا أول هذه الرسائل.
وعند النظر إلى أعلى أكثر واحد، التمرير احتياطية حسب الحاجة.
حتى هنا أنا كتبته جعل buggy1.
وهنا أن الناتج رنة كما هو متوقع.
>> وهنا أول خطأ أحمر.
استخدام المعرف غير معروفة سلسلة، لم أقصد مستوى في؟
حتى في هو معيار في الواقع شيء آخر.
وهو يشير إلى المستخدم لوحة المفاتيح، أساسا.
>> ولكن ليس هذا ما قصدته.
قصدته سلسلة، وقصدته get_string.
فما هو أنني نسيت أن تفعل هذه المرة؟
ما هو مفقود في هذه المرة؟
عندي # تشمل، لذلك ليس لدي الوصول إلى printf.
>> ولكن ما يمكنني يكن لديك الوصول إلى فقط حتى الآن؟
حسنا، تماما مثل المرة السابقة، ولست بحاجة لنقول للمترجم
رنة ما هي هذه الوظائف.
Get_string لا يأتي مع جيم وعلى وجه الخصوص، فإنه
لا يأتي في رأس ملف.
بدلا من ذلك يأتي في شيء كتب الموظفين،
وهو ملف مختلف اسم لكن اسم على مسمى.
>> ذلك ببساطة عن طريق مشيرا الى ان خط واحد من استدعاء code-- من آخر مرة
أنه عندما يعمل رنة، انها تسير للنظر في قانون بلدي أعلى إلى أسفل،
من اليسار إلى اليمين.
انها سوف تلاحظ، أوه، أنت تريد.
اسمحوا لي ان اذهب وتجد أن، أينما كان على الخادم،
نسخه ولصقه، أساسا، في الجزء العلوي من الملف الخاص بك
ذلك أنه عند هذه النقطة في القصة، خط 1، والباقي من البرنامج
يمكن، في الواقع، استخدام أي من وظائف فيها، من بينها get_string.
لذلك أنا ذاهب إلى تجاهل ما تبقى من تلك الأخطاء،
لأنني، في الواقع، أظن أن فقط يهم أول واحد في الواقع.
وانا ذاهب الى المضي قدما واعادة، بعد حفظ الملف الخاص بي جعل buggy1.
وفويلا، فعلت العمل.
وإذا كنت تفعل ./buggy1 واكتب في، ل سبيل المثال، Zamyla، وأنا الآن سوف تحصل مرحبا،
Zamyla، بدلا من مرحبا، العالم.
>> حسنا.
ولذلك فإن الوجبات السريعة هنا ثم ل، واحد، في محاولة لجمع ما يصل الى يمكنك
من رسائل الخطأ وحده، وتبحث في بعض الكلمات المعروفة.
باستثناء ذلك، استخدم help50 في مشكلة تعيين مواصفات.
ولكن باستثناء ذلك، أيضا، أن ننظر دائما في خطأ كبير فقط، على الأقل
في البداية، لمعرفة ما هي المعلومات قد تسفر في الواقع.
ولكن تبين هناك ل المزيد من الوظائف بنيت
في مكتبة CS50 للمساعدة كنت في وقت مبكر من الفصل الدراسي
وفي وقت مبكر في البرمجة معرفة ما يحدث خطأ.
لذلك دعونا نفعل مثال آخر هنا.
أنا ذاهب لاستدعاء هذا buggy2، التي، مرة أخرى، سوف تكون معيبة من
من البوابة، حسب التصميم.
>> وانا ذاهب الى المضي قدما والقيام # تشمل.
ثم انا ذاهب الى القيام به كثافة العمليات الرئيسي (الفراغ).
ثم انا ذاهب الى القيام به لحلقة.
ل(كثافة العمليات ط _ 0.
أنا أقل من أو يساوي 10.
ط ++، وبعد ذلك في الأقواس المجعدة، وانا ذاهب لطباعة مجرد رمز الهاشتاج هنا
وحرف سطر جديد.
>> حتى نية لي مع هذا البرنامج هو بكل بساطة
تكرار 10 مرات وعلى كل التكرار
من تلك الحلقة في كل مرة خلال الدورة،
طباعة علامة التصنيف، علامة التصنيف، وهي علامة التصنيف.
في سطر واحد لأنني لدينا خط جديد هناك.
وأذكر أن ل حلقة، في week-- آخر
وستحصل على أكثر على دراية بناء الجملة
عن طريق استخدامه مع الممارسة قبل long-- هذا يعطيني
متغير دعوت ويحدد إلى 0.
>> هذه الزيادات انا على كل التكرار بمقدار 1.
لذلك أنا يذهب إلى 1 2-3.
ثم هذا الشرط في وسط بين شبه كولون
يحصل فحص على كل التكرار لجعل تأكد من أننا ما زلنا ضمن النطاق.
لذلك أريد أن تكرار 10 مرات، لذلك أنا يكون حدسي نوع من جدا فقط
وضع 10 كما بلدي الحد الأعلى هناك.
>> ومع ذلك، عند تشغيل هذا، بعد تجميع مع جعل buggy2--
وأنه لا تجميع موافق.
لذلك أنا لم يكن لديك خطأ في بناء الجملة هذا الوقت.
اسمحوا لي أن المضي قدما الآن وتشغيل buggy2، أدخل.
وانتقل الآن ما يصل.
واسمحوا لي أن زيادة حجم النافذة.
>> ويبدو لي ان 1، 2، 3، 4، 5، 6، 7، 8، 9، 10، 11.
ولذلك لا يوجد 11 الهاش، على الرغم من أنا وضعت بوضوح 10 داخل هذه الحلقة.
الآن، البعض منكم قد نرى على الفور ما هو الخطأ لأنه، في الواقع، هذا
ليس خطأ من الصعب جدا القيام بها.
ولكن من الشائع جدا قدمت في وقت مبكر جدا.
>> ما أريد أن أشير، على الرغم من هو، كيف يمكن لي هذا الرقم؟
حسنا، اتضح أن يأتي مكتبة CS50
ليس فقط get_string وget_int وget_float وغيرها من المهام.
كما يأتي مع وظيفة خاصة دعا eprintf، أو خطأ printf.
وكان موجودا فقط لجعل انها أسهل قليلا بالنسبة لك
عند تصحيح التعليمات البرمجية للتو طباعة رسالة خطأ على الشاشة
ونعلم من أين جاء.
>> هكذا على سبيل المثال، هناك شيء واحد أنا قد تفعل هنا مع هذه الوظيفة this--
eprintf، ثم انا ذاهب الى المضي قدما ويقول أنا الآن٪ ط، مائل، ن.
وانا ذاهب الى سد العجز في قيمة ط.
ويصل أعلى، لأن هذا في مكتبة CS50،
انا ذاهب الى المضي قدما وتشمل
لذلك أنا الحصول على هذه الوظيفة.
ولكن دعونا نتأمل ما سطر ومن المفترض أن تقوم به 9.
انا ذاهب الى حذف هذا في نهاية المطاف.
هذا لا علاقة له مع هدفي الأسمى.
لكن eprintf، خطأ printf، ويعني فقط أن تعطيني بعض المعلومات التشخيصية.
عند تشغيل برنامج بلدي، وأنا أريد أن نرى هذا على الشاشة مؤقتا
كذلك فقط لفهم ماذا يحدث هنا.
>> و، في الواقع، على كل التكرار هنا من خط 9
أريد أن أرى، ما هي قيمة ط؟
ما هي قيمة ط؟
ونأمل، ينبغي لي فقط نرى أن الرسالة، أيضا، 10 مرات.
>> لذلك اسمحوا لي المضي قدما و إعادة ترجمة برنامجي،
كما يجب أن أقوم به في أي وقت أقوم بإجراء التغيير. ./buggy2.
والآن-- موافق.
هناك الكثير مما يحدث على.
لذلك اسمحوا لي انتقل لأعلى في نافذة أكبر.
>> وسترى أن كل من والهاش لا يزال الطباعة.
ولكن بين كل منهم هو الآن هذا الناتج التشخيص تنسيق على النحو التالي.
اسم برنامجي هنا هو buggy2.
اسم الملف هو buggy2.c.
رقم السطر الذي وقد طبع هذا هو خط 9.
وثم إلى اليمين من ذلك هو رسالة الخطأ التي أتوقع.
>> وما هو جميل في هذا هو أن الآن ليس لدي لحساب بالضرورة
في رأسي ما برنامجي يقوم به.
أستطيع أن أرى أن على أول التكرار ط 0،
ثم 1 ثم 2 ثم 3 ثم 4، ثم 5 ثم 6 ثم 7، ثم 8 ثم 9 ثم
10.
لذا انتظر لحظة.
ما الذي يحدث هنا؟
ما زلت يبدو أن العد كما تهدف تصل إلى 10.
>> ولكن من أين أبدأ؟
0، 1، 2، 3، 4، 5، 6، 7، 8، 9 10.
لذلك 0، 1، 2، 3، 4، 5، 6، 7، 8، 9، 10-- الاصبع ال11
يدل على المشكلة.
ويبدو لي أن تحسب بشكل غير صحيح في بلدي حلقة.
بدلا من الذهاب 10 تكرارات، أنا بدأت في 0،
أنا تنتهي عند وإلى 10.
ولكن لأنه، مثل الكمبيوتر، أنا بدأت العد في 0،
وأرجو أن العد حتى ، ولكن ليس من خلال، 10.
>> وهكذا الإصلاح، وأنا في نهاية المطاف أدركت هنا، هو واحد من أمرين.
ويمكنني أن أقول ببساطة شديدة العد حتى إلى أقل من 10.
لذلك 0، 1، 2، 3، 4، 5، 6، 7، 8، 9، الذي هو، في الواقع، صحيح،
على الرغم من أنه يبدو قليلا خاطئ.
أو يمكن أن أفعله أقل من أو يساوي إلى 9، طالما أن أبدأ في 0.
أو إذا كنت حقا لا أحب ذلك، ل يمكن أن العد حتى من خلال 10 ولكن تبدأ في 1.
ولكن مرة أخرى، هذه ليست مجرد أن المشترك.
في programming-- ولو وليس ذلك بكثير في Scratch--
ولكن في البرمجة في C وغيرها من اللغات،
مثل جافا سكريبت و الثعبان وغيرها، انها
مجرد شائعة جدا ل مناقشتنا للثنائي
لنبدأ العد في أقل عدد استطعت، الذي هو 0.
حسنا.
لذلك أن eprintf.
ومرة أخرى، والآن بعد أن كنت أحسب بلدي المشكلة، وانا ذاهب للذهاب إلى 0
خلال أقل من 10، وانا ذاهب للذهاب في وحذف eprintf.
>> لا ينبغي أن يكون هناك عندما كنت السفينة قانون بلدي أو تقديم قانون بلدي
أو تبين أنها لشخص آخر.
انها حقا يعني فقط لاستخدامها مؤقتا.
ولكن الآن لقد حددت هذه مشكلة معينة أيضا.
>> حسنا، دعونا نفعل مثالا آخر هنا أنني ذاهب لاثارة على النحو التالي.
انا ذاهب الى المضي قدما و #تتضمن . 50 $
وانا ذاهب الى المضي قدما وتتضمن #.
>> وانا ذاهب لإنقاذ هذا الملف كما buggy3.c.
وانا ذاهب الى المضي قدما وتعلن كثافة العمليات الرئيسي (الفراغ).
وبعد ذلك داخل هناك انا ذاهب الى القيام به كثافة العمليات ط _ -
أريد أن تنفيذ برنامج مع get_negative_int.
هذه ليست وظيفة موجودة حتى الان.
لذلك نحن ذاهبون لتنفيذ في لحظة فقط.
ولكن نحن في طريقنا لمعرفة السبب انها عربات التي تجرها الدواب عند مرور الأول.
ومرة واحدة لقد حصلت عدد صحيح من المستخدم،
أنا ذاهب لمجرد طباعة٪ i غير سلبي صحيح، مائل، ن، فاصلة، ط.
وبعبارة أخرى، كل ما تريد هذا البرنامج للقيام
والحصول على كثافة العمليات السلبية من المستخدم ثم بطباعة
أن كذا وكذا هو الباحث السلبي.
>> الان انا بحاجة لتنفيذ هذه المهمة.
لذلك في وقت لاحق في الملف الخاص بي، وانا ذاهب للذهاب قبل وإعلان وظيفة دعا
get_negative_int (الفراغ) - ونحن سوف أعود إلى ما يعنيه هذا الخط مرة أخرى
في اللحظات، الباحث ن. do-- افعل وfollowing-- printf ن هو :.
ثم انا ذاهب الى القيام ن - get_int، والقيام بذلك في حين أن n أكبر من 0.
ثم يعود ن ؛.
>> لذلك هناك الكثير مما يجري في هذا ولكن أيا منها لم نكن
ننظر في الأسبوع الماضي، على الأقل لفترة وجيزة.
لذلك على خط 10 هنا لقد أعلن وظيفة تسمى get_negative_int،
ولقد وضعت (الفراغ)، في بين قوسين، والسبب هو هذا
لا يأخذ الإدخال.
أنا لا يمر أي شيء لهذه المهمة.
أنا مجرد الحصول على شيء يعود منه.
>> وما أنا على أمل أن نعود هو عدد صحيح.
لا يوجد أي نوع البيانات في يسمى C negative_int.
انها كثافة العمليات فقط، لذلك يجري أن علينا أن نتأكد من
أن قيمة هذا في الواقع عاد ليس فقط عدد صحيح
وإنما هو أيضا سلبية.
>> على خط 12 أنا إعلان متغير دعا ن وجعله من نوع int.
ثم في خط 13 إلى 18 أنا تفعل شيئا في حين أن هناك شيئا صحيحا.
أنا ذاهب إلى الأمام والطباعة ن غير والقولون، وبعد ذلك الفضاء،
مثل موجه للمستخدم.
>> أنا ثم استدعاء get_int و تخزين ما يسمى قيمة عودتها
في هذا المتغير ن.
ولكن انا ذاهب للحفاظ على القيام هذا في حين أن n أكبر من 0.
وبعبارة أخرى، إذا كان المستخدم يعطيني كثافة العمليات، وهذا العدد أكبر من 0،
إرجو، سواء كان إيجابيا، وانا ذاهب ل تبقي فقط reprompting المستخدم،
الحفاظ reprompting، من خلال إجبارهم على التعاون وتعطيني الباحث السلبي.
>> ومرة واحدة ن هو في الواقع negative-- لنفترض أن المستخدم أخيرا أنواع -50،
ثم هذه الحلقة في حين لم تعد حقيقية لأن -50 ليس أكبر من 0.
ولذا فإننا الخروج من ذلك حلقة منطقيا والعودة ن.
>> ولكن هناك واحد آخر شيء يجب أن أقوم به.
وأستطيع أن مجرد القيام بذلك بواسطة النسخ واللصق
سطر واحد من التعليمات البرمجية في الجزء العلوي من الملف.
ولست بحاجة لتعليم رنة، أو نعد لرنة،
صراحة بأنني سوف، في الواقع، انتقل وتنفيذ
هذه وظيفة get_negative_int.
قد يكون مجرد انخفاض في الملف.
مرة أخرى، أذكر أن رنة يقرأ أشياء أعلى إلى أسفل،
من اليسار إلى اليمين، لذلك لا يمكن استدعاء دالة إذا رنة
لا يعرف انه سيكون في الوجود.
>> الآن، للأسف، هذا البرنامج، كما أن البعض منكم قد لاحظت،
هو عربات التي تجرها الدواب بالفعل.
اسمحوا لي أن المضي قدما وجعل buggy3.
وتجمع، حتى مشكلتي الآن ليس خطأ لغوي، وكأنه خطأ نصية،
انها تسير فعلا أن تكون منطقية خطأ لقد عمد
قدمت فرصة ل الخطوة من خلال ما يجري.
>> انا ذاهب الى المضي قدما الآن وتشغيل buggy3.
وانا ذاهب للذهاب إلى الأمام وعدم التعاون.
انا ذاهب الى اعطائها رقم 1.
فإنه لم ترغب في ذلك، لذلك انها دفع لي مرة أخرى.
>> ماذا عن 2؟
3؟
50؟
أيا من تلك يعملون.
ماذا عن -50؟
ويبدو أن هذا البرنامج للعمل.
>> اسمحوا لي أن تحاول ذلك مرة أخرى.
اسمحوا لي أن أحاول -1، ويبدو أن العمل.
اسمحوا لي أن أحاول -2، ويبدو أن العمل.
اسمحوا لي أن أحاول 0.
هاه، وهذا غير صحيح.
الآن، نحن يجري متحذلق قليلا هنا.
لكنه، في الواقع، في القضية التي 0 ليست إيجابية ولا سلبية.
وذلك أن برنامجي هو قائلا ان 0 هو عدد صحيح سالب،
هذا ليس صحيحا من الناحية التقنية.
>> الآن، لماذا هو يفعل هذا؟
حسنا، قد يكون واضحا.
وبالفعل، هذا البرنامج هو من المفترض أن تكون بسيطة إلى حد ما
لذلك لدينا شيء لاستكشاف.
>> ولكن دعونا إدخال التصحيح الثالث تقنية هنا دعا debug50.
لذلك هذا هو برنامج بعد أن قمنا بإنشائه
هذا العام دعا debug50 التي من شأنها أن تسمح لك
لاستخدام ما يسمى المدمج في المصحح رسومية في IDE CS50.
والمصحح هو مجرد برنامج يتيح عموما تشغيل البرنامج
ولكن خطوة خطوة خطوة، خط سطرا سطرا، وعدم التوقف، بدس
حولها، والنظر في المتغيرات بحيث البرنامج لا مجرد ضربة الماضي كنت
وبسرعة طباعة شيء أو لا تتم طباعة شيء.
فهو يوفر لك فرصة، في سرعة الإنسان، للتفاعل معها.
>> وللقيام بذلك، كنت ببساطة القيام بما يلي.
بعد ترجمة التعليمات البرمجية الخاصة بك، وهو ما قمت به بالفعل، buggy3،
ان تمضي قدما وتشغيل debug50 ./buggy.
الكثير من مثل help50 ديه تشغيل help50 ثم الأمر،
debug50 ديه تشغيل debug50 و ثم اسم الأمر.
>> الآن مشاهدة ما يحدث على الشاشة، على الجانب الأيمن على وجه الخصوص.
عندما ضرب تشغيل، كل من المفاجئة لوحة هذا الأيمن
يفتح على الشاشة.
وهناك الكثير مما يجري في أول وهلة.
ولكن ليس هناك أيضا كثيرا ما يدعو للقلق حتى الآن.
>> وهذا ما تبين لي كل شيء ما يجري داخل برنامجي
الآن وعبر هذه أزرار تصل أعلى ومن ثم
السماح لي إلى الخطوة من خلال قانون بلدي خطوة في نهاية المطاف خطوة بخطوة.
ولكن ليس فقط حتى الآن.
لاحظ ما يحدث.
في نافذتي المحطة انا المطالبة لن.
وانا ذاهب الى المضي قدما و التعاون هذه المرة، ونوع في -1.
ورغم قليلا غامض، -1 هو عدد صحيح سالب، كما هو متوقع.
>> ثم خرج الطفل مع 0 الحالة GDBserver الخروج.
GDB، جنو المصحح، هو اسم من البرامج الأساسية
التي تطبق هذا المصحح.
ولكن كل هذا يعني حقا، المصحح ذهبت بعيدا لبرنامجي الإقلاع عن التدخين
وكان كل شيء جيدا.
إذا كنت ترغب في تصحيح حقا برنامجي، يجب أن أقول استباقي debug50،
أين أريد أن أبدأ التنقل خلال قانون بلدي؟
>> ولعل أبسط طريقة لذلك هي على النحو التالي.
إذا كنت تحوم فوق مزراب من بلدي محرر هنا،
ذلك حقا فقط في الشريط الجانبي هنا، إلى اليسار من رقم السطر،
لاحظ أنه إذا أنا فقط انقر مرة واحدة، أنا وضعت نقطة حمراء صغيرة.
وأن القليل نقطة حمراء، مثل التوقيع على وقف، يعني، مهلا،
debug50، تنفيذ وقفة من قانون بلدي هناك حق عند تشغيل هذا البرنامج.
>> لذلك دعونا نفعل ذلك.
اسمحوا لي أن نمضي قدما وتشغيل برنامجي مرة أخرى مع debug50 ./buggy3، أدخل.
والآن، لاحظ، شيء حدث مختلفة.
أنا لا المطالبة بعد في نافذتي المحطة
عن أي شيء، لأنني لم حصلت هناك بعد في برنامجي.
لاحظ أنه في خط 8 وهي الآن تسليط الضوء،
وهناك السهم الصغير في يقول الأيسر، وتوقف هنا.
هذا سطر من التعليمات البرمجية، خط 8، لم تنفذ حتى الان.
>> وما هو الغريب، إذا نظرت هنا على الجانب الأيمن،
لاحظت أنني غير محلية متغير، محلي بمعنى
أنه من داخل الدالة الحالي.
وقيمتها، على ما يبدو افتراضيا، ونوع من ملائم، هو 0.
لكني لم اكتب 0.
ما يحدث لمجرد أن يكون لها القيمة الافتراضية في الوقت الراهن.
>> لذلك اسمحوا لي نمضي قدما ونفعل هذا الآن.
اسمحوا لي أن المضي قدما وعلى الجزء العلوي هنا، وأنا
الذهاب إلى المضي قدما و فوق هذا الرمز الأول الذي
يعني خطوة على التي تعني لا تخطي ولكن تخطي هذا الخط من التعليمات البرمجية،
تنفيذ ذلك على طول الطريق.
>> والآن، لاحظ يا موجه قد تغيرت تماما.
لماذا هذا؟
لقد قلت debug50، تشغيل هذا الخط من التعليمات البرمجية.
ماذا يعني هذا سطر من التعليمات البرمجية تفعل؟
يدفعني لعدد صحيح.
حسنا.
اسمحوا لي أن التعاون.
اسمحوا لي أن المضي قدما الآن واكتب -1، أدخل.
والآن لاحظ ما قد تغير.
على جهة اليد اليمنى، بلدي متغير محلي ط
وأشارت إلى أنها -1 الآن.
وانها لا تزال من نوع int.
>> ولاحظ، أيضا، يا ما يسمى الاستدعاءات، حيث لم أتوقف؟
سوف نتحدث أكثر عن هذا في المستقبل.
لكن مكدس الاستدعاءات يشير فقط إلى ما وظائف في الوقت الراهن في الحركة.
الآن انها مجرد الرئيسي.
والآن فقط المحلي المتغير هو أنني بقيمة 1.
>> وعندما كنت خطوة في النهاية على هذا الخط هنا، مع أن نفس الرمز في أعلى اليمين،
-1 هو عدد صحيح سالب.
الآن انها التوقف خلال تلك متعرج.
دعونا السماح لها بذل كل شيء.
أنا خطوة على هذا الخط، وفويلا.
>> لذلك ليس كل ما رهيب المنير بعد،
لكنها لم تدع لي وقفة وأعتقد من خلال منطقيا
ما هذا البرنامج يقوم به.
ولكن هذا لم يكن الحال الخاطئة.
دعونا نفعل ذلك مرة أخرى على النحو التالي.
>> انا ذاهب الى ترك هذه نقطة على خط 8 مع النقطة الحمراء.
أنا ذاهب إلى إعادة تشغيل debug50.
انها توقفت هنا تلقائيا.
ولكن هذه المرة، بدلا من يخطو على هذا الخط،
اسمحوا لي أن تذهب في الواقع داخل get_negative_int ومعرفة،
لماذا هو قبول 0 كما إجابة صحيحة؟
>> وذلك بدلا من النقر الخطوة أكثر.
انا ذاهب الى المضي قدما وانقر فوق دخول إلى.
ولاحظ أن الخط 8 هذا هو أبرز الآن الآن فجأة
يصبح خط 17.
>> الآن، انها ليست أن المصحح وقد تخطي خطوط 14 و 15 و 16.
انها مجرد لا يوجد شيء لتظهر لك هناك.
تلك هي مجرد تصريح المتغيرات، ثم هناك كلمة هل
وبعد ذلك متعرج مفتوحة.
خط وظيفي الوحيد الذي العصير هو حقا هذا واحد هنا، 17.
وذلك حيث قمنا توقف تلقائيا.
>> printf ذلك ( "n.is:")؛، لذلك هذا لم يحدث حتى الآن.
لذلك دعونا المضي قدما وانقر خطوة أكثر.
الآن بلدي موجه، في الواقع، تغيرت إلى ( "ن هو:").
الآن get_int، أنا لا أذهب لعناء التنقل إلى،
لأن هذه المهمة ل التي CS50 في المكتبة.
انها صحيحة فرضا.
>> لذلك أنا ذاهب إلى المضي قدما و نوع من التعاون من خلال إعطائها
عدد صحيح، ولكن ليس كثافة السلبي.
لذلك اسمحوا لي المضي قدما وضرب 0.
والآن ماذا يحدث هنا عندما أحصل على وصولا الى خط 21؟
أنا لم كرر مرة أخرى.
أنا لا يبدو أن يكون عالقا في تلك الحلقة.
وبعبارة أخرى، فإن هذا الأصفر لم شريط لا تبقي تدور،
وحولها، وما حولها.
>> الآن، لماذا؟
حسنا، ن، ما N الآن؟
أنا يمكن أن ننظر على المستوى المحلي متغيرات في المصحح.
n غير 0.
كل الحق، ما هو وضعي؟
>> 20-- خط 20 هو، أيضا، 0 هو أكبر من 0.
هذا ليس صحيحا.
0 ليست أكبر من 0.
وهكذا كسرت خروج من هذا.
>> وولهذا السبب على الخط 21، إذا كنت فعلا الاستمرار،
انا ذاهب الى العودة 0، حتى على الرغم من أنني يجب أن رفضت 0
كما لا يجري في الواقع سلبية.
وحتى الآن، وأنا حتى لا حقا يهتم المصحح.
حصلت عليه، ولست بحاجة ل تعرف أكثر ما يجري.
>> لذلك أنا ذاهب إلى المضي قدما و فقط انقر على زر التشغيل،
وترك هذه النهاية تصل.
الآن، لقد أدركت أن بلدي الخطأ هو على ما يبدو على خط 20.
هذا هو خطأي منطقي.
>> وذلك ما أريد القيام به لتغيير هذا؟
إذا كانت المشكلة هي أنني لست اصطياد 0، انها مجرد خطأ منطقي.
وأستطيع أن أقول في حين أن n أكبر من أو يساوي 0،
الحفاظ مطالبة المستخدم مرة أخرى ومرة ​​أخرى.
>> لذلك، مرة أخرى، خطأ بسيط، وربما حتى ضوحا عندما رأيتني
الكتابة عليه قبل بضع دقائق.
ولكن ذهابه هنا غير أنه مع التصحيح 50،
ومع التصحيح البرنامج بشكل عام،
لديك هذه القوة الجديدة التي وجدت ل المشي من خلال التعليمات البرمجية الخاصة بك، والبحث
عبر هذا الفريق اليد اليمنى ما متغيرات القيم الخاصة بك.
حتى لا بالضرورة لديك لاستخدام شيء
مثلك eprintf لطباعة تلك القيم.
يمكنك ان ترى لهم في الواقع بصريا على الشاشة.
>> الآن، أبعد من ذلك، ومن الجدير بالذكر أن هناك أسلوب آخر هذا
في الواقع مشتركة عظمى.
وكنت قد نتساءل لماذا هذا القليل الرجل هنا كان يجلس على المسرح.
لذلك هناك هذه التقنية، عموما المعروفة باسم المطاط بطة التصحيح،
الذي هو في الحقيقة مجرد شهادة على حقيقة
أن المبرمجين في كثير من الأحيان عندما كتابة التعليمات البرمجية،
انهم ليسوا بالضرورة التعاون مع الآخرين،
أو العمل في بيئة مشتركة.
>> إنهم نوع من في المنزل.
ربما حان وقت متأخر من الليل.
انهم يحاولون الرقم بعض الأخطاء في مدوناتها.
وانهم فقط لا نرى ذلك.
>> وليس هناك الحجرة.
لا يوجد TF.
لا يوجد CA حولها.
كل ما لديهم على جرفها هو هذا المطاط الحبيب قليلا.
>> وهكذا التصحيح المطاط بطة هو مجرد هذه الدعوة
التفكير في شيء كما سخيفة لأن هذا كمخلوق الحقيقي،
وفعلا المشي من خلال التعليمات البرمجية لفظيا لهذا الكائن جماد.
لذلك، على سبيل المثال، إذا هذا هو بلدي على سبيل المثال here--
وأذكر أنه في وقت سابق كانت المشكلة هذه،
إذا قمت بحذف هذا السطر الأول من رمز، وأنا المضي قدما وتقديم عربات التي تجرها الدواب 0 مرة أخرى،
أذكر أنه كان لي هذه رسائل الخطأ هنا.
لذا فإن الفكرة هنا، على الرغم من أنني سخيفة أشعر في هذه اللحظة انه فعل ذلك علانية،
غير أن الخطأ.
>> حسنا، مشكلتي هي أنني قمت أعلن ضمنيا وظيفة المكتبة.
وأن وظيفة المكتبة printf.
Declare-- موافق، أن يعلن يذكرني النماذج.
>> وهذا يعني أنني بحاجة إلى الواقع نقول للمترجم مقدما ما
وظيفة يبدو.
انتظر دقيقة.
لم يكن لدي io.h. القياسية
شكرا جزيلا.
>> حتى مجرد هذه العملية of-- لك لا تحتاج إلى أن يكون في الواقع بطة.
ولكن هذه الفكرة من المشي نفسك من خلال التعليمات البرمجية الخاصة بك
حتى يتسنى لك حتى تسمع نفسك، حتى يتسنى لك
أدرك السهو في بلدانكم تصريحات، وعموما هذه الفكرة.
>> وربما أكثر منطقيا، وليس ذلك كثيرا مع أن واحدا ولكن المزيد من المشاركة
مثال فعلنا فقط في 3.C عربات التي تجرها الدواب، قد المشي نفسك من خلال ذلك
على النحو التالي.
لذلك كل الحق، المطاط الحبيب، DDB، اذا صح التعبير.
لدينا هنا في بلدي وظيفة الرئيسية، ادعو الحصول على كثافة السلبي.
>> وأنا على الحصول على قيمة الإرجاع.
أنا تخزينها على الجانب الأيسر على خط 8 في متغير يسمى ط.
حسنا، ولكن الانتظار، كيف التي تحصل على تلك القيمة؟
اسمحوا لي أن ننظر في وظيفة في السطر 12.
>> في السطر 12، لدينا الحصول على كثافة السلبي.
لا يأخذ أي مدخلات، لا عودة عدد صحيح، موافق.
أعلن على خط 14 ون متغير.
انها تسير لتخزين عدد صحيح.
هذا ما اريد.
>> هكذا يفعل ما يلي أثناء ن أعرف، دعونا لي التراجع عن ما الإصلاح وأنا قدمت بالفعل.
وذلك في حين ن أكبر من 0، طباعة ن غير، موافق.
ومن ثم استدعاء الحصول على كثافة العمليات المخزنة في ن.
ومن ثم معرفة ما اذا كان ن 0، n غير يس-- هناك هو عليه.
لذلك، مرة أخرى، كنت لا تحتاج البطة الفعلية.
ولكن مجرد المشي نفسك من خلال التعليمات البرمجية باعتبارها ممارسة الفكرية
وغالبا ما مساعدتك أدرك ما يحدث،
بدلا من مجرد القيام بشيء مثل هذا، يحدق في الشاشة،
ولا أتحدث نفسك من خلال ذلك، وهو بصراحة لا
ما يقرب من تقنية فعالة.
لذلك فإنه يوجد لديك، ل عدد من التقنيات المختلفة
من أجل التصحيح فعلا التعليمات البرمجية والعثور على الخطأ، وكلها
يجب أن تكون أدوات في الأدوات الخاصة بك بحيث كنت لا وقت متأخر من الليل،
خاصة، كنت في تناول الطعام القاعات، أو في ساعات العمل،
ضجيجا رأسك ضد جدار، في محاولة لحل بعض المشاكل.
ندرك أن هناك أدوات البرمجيات.
هناك أدوات البط المطاطية.
وهناك فريق عمل كامل من دعم الانتظار لتقديم يد المساعدة.
>> وحتى الآن، كلمة عن مشكلة مجموعات، وعلى ما نأمل لكم
الخروج منها، وكيف نذهب حول تقييم.
في منهج الدورة ل، مجموعات مشكلة CS50 ل
يتم تقييم على أربعة محاور أساسية، لذلك لspeak-- نطاق وصحتها، والتصميم،
والاسلوب.
ونطاق يشير فقط إلى كم من قطعة هل قضمت؟
كم من مشكلة هل حاولت؟
ما مستوى الجهد هل تتجلى؟
>> صحة هو، يعمل برنامج كما أنه من المفترض أن فقا للمواصفات CS50
عند تقديم بعض المدخلات أو بعض المخرجات القادمة مرة أخرى؟
التصميم هو الأكثر ذاتية منهم.
وانها واحدة من شأنها أن تأخذ أطول لتعلم
وأطول للتدريس، في بقدر ما يتلخص،
مدى المكتوبة هي الشفرة؟
>> انه شيء واحد لطباعة فقط الصحيح مخرجات أو إرجاع القيم الصحيحة.
ولكن هل فعل ذلك كما قدر ممكن من الكفاءة؟
هل فعل ذلك الانقسام وقهر، أو ثنائي
البحث كما سنرى قريبا أن فعلنا قبل أسبوعين مع دفتر الهاتف؟
هل هناك طرق أفضل لحل المشكلة مما لديك حاليا هنا؟
هذا هو فرصة لتصميم أفضل.
>> ثم style-- كيف هي جميلة التعليمات البرمجية الخاصة بك؟
ستلاحظ أن أنا جميلة خاص حول الطعج قانون بلدي،
والتأكد من المتغيرات بلدي تتم تسمية معقول. ن،
في حين باختصار، هو اسم جيد ل عدد، أنا لعدد صحيح العد،
الصورة عن سلسلة.
ونحن يمكن أن يكون أطول أسلوب أسماء متغير.
الاسلوب هو فقط كيف جيدة لا تبدو التعليمات البرمجية الخاصة بك؟
وكيف يمكن قراءتها هو؟
>> وبمرور الوقت، ما المشرفون الدوليون الخاص بك وTFS ستفعل في الدورة
وتوفر لك مع أن نوع من ردود الفعل النوعي
حتى يتسنى لك الحصول على أفضل في تلك الجوانب المختلفة.
وفيما يتعلق بكيفية نحن تقييم كل من هذه المحاور،
انها عادة مع عدد قليل جدا دلاء حتى يتسنى لك، عموما،
الحصول على شعور جيدا كيف كنت تفعل.
و، في الواقع، إذا كنت تتلقى النتيجة على أي من تلك axes-- دقة وتصميم
وعلى غرار especially-- هذا العدد سوف يكون عادة ما بين 1 و 5.
و، حرفيا، إذا كنت الحصول على 3 لفي بداية الفصل الدراسي،
هذا أمر جيد جدا.
وهذا يعني لا يزال هناك مجال للتحسين،
التي كنت أمل لفي مع فئة لأول مرة.
هناك أمل بعض الشيء من السقف التي كنت تطمح للوصول.
وحتى الحصول على 3 يوم أقرب قطعة،
إن لم يكن بعض 2 و 4، و هو، في الواقع، وهو شيء جيد.
انها ضمن حدود، أيضا ضمن التوقعات.
>> وإذا عقلك مشغول، الانتظار دقيقة واحدة، ثلاثة من أصل خمسة.
وهذا في الحقيقة 6 من أصل 10.
هذا هو 60٪.
يا إلهي، هذا إلى F.
>> ليست كذلك.
انها ليست، في الواقع، أن.
بدلا من ذلك، انها فرصة لتحسين على مدار الفصل الدراسي.
وإذا كنت الحصول على بعض بورز، وهذه هي فرصة
للاستفادة من ساعات العمل، بالتأكيد الأقسام وغيرها من الموارد.
>> أفضل فرصة، حقا، ليفخر أي مدى كنت قد
تأتي على مدار الفصل الدراسي.
لذلك ندرك، كأن شيئا آخر ثلاث جيدة.
ويتيح مجالا للنمو على مر الزمن.
>> أما كيف هي تلك المحاور موزون، واقعيا كنت
الذهاب لقضاء معظم وقتك للوصول الى أشياء في العمل، ناهيك بشكل صحيح.
وهكذا تميل إلى صحتها أن المرجحة أكثر من غيرها، كما هو الحال مع
هذا العامل المضاعف من ثلاثة.
تصميم مهم أيضا، ولكن شيء ما تفعله ليس بالضرورة
تنفق كل تلك الساعات على في محاولة للحصول على الأشياء فقط للعمل.
>> وذلك هو المرجح أنه أكثر من ذلك بقليل على محمل الجد.
ثم أسلوب يتم ترجيح الأقل.
حتى على الرغم من انها لا تقل أهمية أساسية،
انها مجرد، ربما، أسهل شيء لاحقاق الحق،
محاكاة الأمثلة نحن القيام به في محاضرة والقسم،
مع الأمور بشكل جيد مطعوج، وعلق،
وهكذا من بين أسهل أشياء للقيام بها والحصول على حق.
لذلك على هذا النحو، وتحقيق أن تلك هي نقطة
أن من السهل نسبيا على الفهم.
>> والآن كلمة عن this-- الصدق الأكاديمي.
لذلك في سياق ل المنهج، وسترى
أن الدورة لا بأس به قليلا من لغة حول هذا.
ويأخذ مسار قضية الأمانة الأكاديمية على محمل الجد تماما.
>> لدينا تمييز، للأفضل أو للأسوأ،
من بعد أن أرسلت كل عام أكثر الطلاب لاتخاذ إجراءات تأديبية
أكثر من أي الآخر بالطبع، أنني على علم.
هذا ليس بالضرورة مما يدل على حقيقة
أن الطلاب CS، أو الطلاب CS50، هي أي أقل صدقا من زملائك.
ولكن الواقع أن في هذا العالم، إلكترونيا، نحن فقط
لدينا التكنولوجية يعني من الكشف عن هذا.
>> من المهم لنا ل الإنصاف عبر الطبقة
ما نقوم به الكشف عن هذا، ورفع القضية عندما نرى الأشياء.
وفقط لرسم صورة، وحقا للمساعدة في شيء مثل هذا الحوض في،
هذه هي الأرقام من الطلاب على مدى السنوات ال 10 الماضية
أنه لم يشارك في بعض مثل هذه القضايا من الأمانة الأكاديمية،
مع بعض 32 طالبا من الخريف 2015، الذي
هذا يعني أننا لا تأخذ الأمر على محمل الجد.
و، في نهاية المطاف، هذه الأرقام يؤلف، في الآونة الأخيرة، وحوالي 3٪، 4٪ أو نحو ذلك
الطبقة.
>> حتى بالنسبة للغالبية العظمى من الطلاب يبدو أن خطوط واضحة.
ولكن لا تضع ذلك في مانع، في وقت متأخر ولا سيما
في الليل عندما تصارع بعض الحلول لمجموعة المشكلة،
أن هناك آليات للحصول على نفسك بشكل أفضل
الدعم مما كنت قد أعتقد، حتى في تلك الساعة.
ندرك أن عندما نتلقى عروض الطلاب، ونحن نعبر
مقارنة كل تقديمها هذا العام ضد كل تقديمها العام الماضي،
ضد كل تقديمها من عام 2007، ومنذ ذلك الحين، النظر، أيضا،
كود مستودعات الانترنت، منتديات المناقشة، ومواقع العمل.
ونذكر هذا، حقا، كل ذلك من أجل
الكشف الكامل، أنه إذا شخص آخر يمكن العثور عليه على الانترنت،
بالتأكيد، لذلك يمكننا الدورة.
ولكن، في الحقيقة، روح الدورة يتلخص
لهذا الشرط في المنهج.
هو حقا فقط، تكون معقولة.
>> وإذا كان علينا أن وضع على ذلك مع مجرد لغة أكثر قليلا،
ندرك أن جوهر كل العمل الذي يقدم إلى هذه الدورة
يجب أن تكون لك.
ولكن في غضون ذلك، هناك بالتأكيد الفرص والتشجيع،
والقيمة التربوية في تحويل ل بالآخرين نفسي، وTFS، والمصدقة،
والمشرفون الدوليون، والبعض الآخر في الصف، للحصول على الدعم، السماح للأصدقاء وحده
وغرفهم الذين درسوا CS والبرمجة من قبل.
وحتى لا يكون هناك مخصص لذلك.
وكقاعدة عامة من الإبهام وthis-- عندما طلب المساعدة،
قد تظهر التعليمات البرمجية للآخرين، ولكن قد لا عرض لهم.
لذلك حتى لو كنت في ساعات العمل، أو في القاعة D، أو في مكان آخر
العمل على بعض قطعة مجموعة، العمل جنبا إلى جنب مع صديق، الذي
على ما يرام تماما، في نهاية يوم العمل الخاص بك
يجب أن تنتمي في النهاية إلى كل واحد منكم على التوالي، وليس
تكون بعض الجهد التعاوني، باستثناء المشروع النهائي حيث
هو مسموح به وتشجيعه.
>> ندرك أنه إذا كنت تكافح مع شيء
وصديقك يحدث فقط أن يكون أفضل في هذا ثم لكم،
أو أفضل في هذه المشكلة مما كنت، أو قليلا قبل أبعد مما كنت،
فمن المعقول تماما لتحويل لصديقك ويقول: مهلا،
هل تمانع النظر في قانون بلدي هنا، مساعدتي في بقعة ما هي قضية بلدي؟
ونأمل، في الفائدة من قيمة تربوية
هذا الصديق لا فقط نقول، أوه، قيام بذلك، ولكن بدلا من ذلك،
ما أنت في عداد المفقودين على خط 6، أو شيء من هذا القبيل؟
ولكن الحل ليس لصديق إلى جانبك
أن نقول، أوه، حسنا، هنا، اسمحوا لي أن سحب هذا الأمر، وتبين لي حل لكم.
حتى لا يكون على خط المرمى.
تظهر لك التعليمات البرمجية ل الآخرين، ولكن لا يجوز لك
عرض لهم، رهنا الآخر القيود في منهج الدورة ل.
>> حتى لا نضع في اعتبارنا هذا ما يسمى بند الأسف
في منهج الدورة وكذلك، أنه إذا ارتكاب بعض فعل
ليس من المعقول، ولكن إحضاره إلى انتباه رؤساء دورة ل
خلال 72 ساعة، وبطبيعة الحال قد تفرض عقوبات محلية
قد تشمل غير مرضية أو الفشل الصف عن العمل المقدم.
ولكن وبطبيعة الحال سوف لن يحيل يهم لمزيد من الإجراءات التأديبية،
إلا في حالات الأفعال المتكررة.
وبعبارة أخرى، إذا كنت لا تجعل بعض غبي، في وقت متأخر خاصة ليلا، قرار
أن في صباح اليوم التالي أو يومين في وقت لاحق، تستيقظ وتدرك،
ما كنت أفكر؟
تفعل في CS50 يكون متنفسا لتحديد هذه المشكلة
وامتلاك ما يصل إليه، حتى يتسنى لنا سوف التقي بكم في منتصف الطريق والتعامل
مع أنه في غضون آن معا التعليمية وقيمة بالنسبة لك،
ولكن لا يزال عقابية في بعض الطريق.
والآن، لاتخاذ حافة الخروج، هذا.
>> [تشغيل الفيديو]
>> [موسيقى]
>> [نهاية قراءة]
ديفيد جيه مالان: حسنا، نحن العودة.
والآن ننظر في واحدة من أولا لدينا المجالات العالم الحقيقي
في CS50، فن الترميز، فن المرسلة والمستقبلة
رسائل سرية، مشفرة الرسائل إذا صح التعبير،
التي لا يمكن إلا أن يكون فك شفرتها إذا كان لديك بعض العنصر الرئيسي الذي المرسل له
كذلك.
وذلك لتحفيز هذا سوف نتخذ نظرة على هذا الشيء هنا،
وهو مثال لل حلقة فك السرية التي
يمكن أن تستخدم من أجل معرفة ما الرسالة السرية هو في الواقع.
في الواقع، يعود في اليوم في المدارس الابتدائية،
إذا كنت من أي وقت مضى أرسل رسائل سرية إلى بعض الأصدقاء أو بعض سحق في الصف،
كنت قد فكرت كنت كونها ذكية
من على قطعة الخاص بك من تغيير ورقة، مثل، A إلى B، و B إلى C و C إلى D،
وهكذا دواليك.
ولكن هل كنت تشفير الواقع المعلومات الخاصة بك، حتى
إذا كان قليلا تافهة، لم يكن من الصعب على المعلم أن يدرك،
حسنا، إذا كنت مجرد تغيير B إلى A و C إلى B،
كنت فعلا معرفة ما هي الرسالة،
ولكن كنت في التشفير من المعلومات.
>> كنت مجرد القيام بذلك ببساطة، مثل الكثير من الخاص Ralphie هنا
في الفيلم الشهير الذي يلعب الى حد كبير nauseum الإعلانية في فصل الشتاء.
[تشغيل الفيديو]
أغلب بلدان من المعروف للجميع أن رالف باركر بهذا
عين عضوا في ليتل اليتيم آني الدائرة السرية
ويحق لجميع الألقاب والفوائد التي تحدث بها.
>> التوقيع، ليتل اليتيم آني، بيير أندريه، في الحبر وقعت العداد.
الأوسمة والفوائد، بالفعل في سن التاسعة.
>> [الصراخ]
-هيا.
دعونا الحصول على معها.
أنا لا تحتاج الى كل هذا الجاز حول المهربين والقراصنة.
>> مساء غد -Listen ل مغامرة الختامية
من سفينة القراصنة السوداء.
الآن، حان الوقت ل رسالة سرية آني
بالنسبة لك أعضاء الدائرة السرية.
تذكر، والأطفال، وأعضاء فقط من الدائرة السرية آني
يمكن فك شفرة رسالة سرية آني.
>> تذكر، آني وهذا يتوقف على لك.
تعيين دبابيس لB2.
هنا هو رسالة.
12، 11--
>> -أنا أنا في أول لقائي السري.
>> -14، 11، 18، 16.
>> -Pierre كان في هذه الليلة صوت كبيرة.
ويمكنني أن أقول أن هذه الليلة وكانت رسالة مهمة حقا.
>> -3، 25، وهذا هو رسالة من آني نفسها.
تذكر، لا تخبر أحدا.
>> -90 ثانية في وقت لاحق، وأنا في فقط غرفة في المنزل حيث ولد من تسعة
يمكن أن يجلس في الخصوصية وفك شفرة.
آها، B!
ذهبت إلى القادم، E.
>> الكلمة الأولى هي أن يكون.
S، كانت قادمة من الأسهل الآن، U، 25--
>> أوه، هيا، الخاص Ralphie، أنا فلدي تذهب!
>> -I'll يكون الحق إلى أسفل، ما!
جي أزيز!
>> -T، يا، تأكد ل-- تأكد من ماذا؟
ما كان اليتيم الصغير آني أحاول أن أقول؟
ومن المؤكد أن ما؟
>> -Ralphie، وقد حصلت أندي ل تذهب، هل يرجى الخروج؟
>> حق عموم، ما!
سأكون من الصحيح!
>> من أنا أقترب الآن.
وكان التوتر الفظيع.
ماذا كان؟
مصير كوكب الأرض قد يتعطل في الميزان.
>> -Ralphie!
فلدي اندي يذهب!
>> -I'll يكون الحق في الخروج، ليبكي بصوت عال!
>> -Almost هناك، حلقت أصابعي، ورأيي كان فخ الصلب، صدي كل مسام.
وكان واضحا تقريبا، نعم، نعم، نعم.
>> أغلب بلدان التأكد من شرب فالتين الخاص بك.
فالتين؟
ان اعلان تافه؟
ابن العاهرة.
[نهاية قراءة]
ديفيد جيه مالان: حسنا، الذي كان شوطا طويلا جدا
إدخال الترميز، وأيضا فالتين.
في الواقع، من هذا الاعلان القديم هنا، لماذا لا فالتين على ما يرام؟
هو استخراج مركزة من ناضجة الشعير، حليب البقر دسم نقية، و
وأعدت خصيصا الكاكاو، جنبا إلى جنب مع phosphatides الطبيعية والفيتامينات.
تخضع لحراسة مشددة كذلك مع الفيتامينات الإضافية B و D، يم.
ولا يزال بإمكانك الحصول عليه، على ما يبدو، على الأمازون، كما فعلنا هنا.
>> ولكن الدافع هنا هو إدخال الترميز، وعلى وجه التحديد
نوع الترميز المعروفة كما تشفير المفتاح السري.
وكما يوحي اسمها، وكلها أمن نظام التشفير المفتاح السري،
اذا صح التعبير، وهي منهجية لمجرد الهرولة
المعلومات بين شخصين، هو أن فقط المرسل والمتلقي فقط
تعرف key-- سر بعض القيمة، بعض العبارة السرية، وبعض الرقم السري، أن
يسمح لهم على حد سواء تشفير وفك تشفير المعلومات.
والترميز، حقا، هو فقط هذا من الأسبوع 0.
>> انها مشكلة حيث هناك مدخلات، مثل الرسالة الفعلية في اللغة الإنجليزية
أو ما اللغة التي تريد أن ترسل لشخص في الصف،
أو عبر شبكة الانترنت.
هناك بعض الانتاج الذي يجري أن تكون الرسالة سارعت أنك
تريد المتلقي في الحصول عليها.
وحتى إذا كان شخص ما في وسط يحصل عليه أيضا،
كنت لا تريد لهم تكون بالضرورة قادرة على فك تشفيرها،
لأن داخل هذا الصندوق الأسود، أو الخوارزمية،
هي بعض الآلية، بعض خطوة خطوة تعليمات لاتخاذ هذا الإدخال
وتحويله إلى الإخراج، في أمل بطريقة آمنة.
>> و، في الواقع، هناك بعض المفردات في هذا العالم على النحو التالي.
نص عادي هو كلمة ل عالم الكمبيوتر سوف
استخدام لوصف المدخلات رسالة، مثل الإنجليزية
أو ما اللغة التي في الواقع تريد أن ترسل إلى بعض البشر الآخرين.
ثم النص المشفر هو التدافع إلى مشفر، أو مشفرة،
نسخة منه.
>> ولكن هناك عنصر واحد آخر هنا.
هناك واحد مدخلات أخرى ل التشفير بالمفتاح السري.
وهذا هو المفتاح نفسه، وهو، عموما،
كما سنرى، عدد، أو بريد إلكتروني، أو كلمة، أيا كان
الخوارزمية هو في الواقع تتوقع.
>> وكيف يمكن فك تشفير المعلومات؟
كيف يمكن تفكيكها؟
حسنا، أنت فقط عكس المخرجات والمدخلات.
>> وبعبارة أخرى، مرة واحدة لشخص تتلقى الرسالة المشفرة،
ديه أو لديها ببساطة أن نعرف أن مفتاح نفسه.
وقد تلقوا النص المشفر.
وعن طريق توصيل هذين مدخلات النظام التشفير،
الخوارزمية، هذا الصندوق الأسود، خارج ينبغي أن يأتي النص الأصلي الأصلي.
وهكذا هذا هو مستوى عال جدا ضوء ما هو التشفير الواقع
كل شيء.
>> لذلك دعونا نصل الى هناك.
دعونا ننظر الآن تحت غطاء محرك السيارة من شيء
لقد تم اتخاذ أمرا مفروغا منه ل في الأسبوع الماضي، ولهذه الدورة
here-- السلسلة.
سلسلة في نهاية اليوم هو مجرد سلسلة من الأحرف.
>> قد يكون مرحبا العالم، أو مرحبا Zamyla، أو أيا كان.
ولكن ماذا يعني ذلك بالنسبة ان سلسلة من الأحرف؟
في الواقع، يعطي مكتبة CS50 لنا نوع بيانات تسمى السلسلة.
>> ولكن هناك في الواقع أي شيء من هذا القبيل كسلسلة في C.
هو حقا مجرد سلسلة من حرف، حرف، حرف،
الطابع، إلى الوراء، إلى الوراء، ل إلى الوراء، إلى الوراء، إلى الوراء داخل
من ذاكرة الكمبيوتر الخاص بك، أو من ذاكرة الوصول العشوائي.
وسنلقي نظرة أعمق إلى أنه في المستقبل عندما ننظر في الذاكرة نفسها،
والاستفادة منها، و التهديدات التي ينطوي عليها.
>> ولكن دعونا النظر في سلسلة Zamyla.
حتى مجرد اسم الإنسان هنا، Zamyla،
هذا هو تسلسل أحرف، Z-A-M-Y-L-A.
والآن دعونا نفترض أن اسم Zamyla ل يتم تخزينها داخل جهاز كمبيوتر
برنامج.
>> حسنا، فمن المنطقي أنه ينبغي لنا تكون قادرة على النظر في تلك الأحرف
بشكل فردي.
لذلك أنا ذاهب لمجرد رسم قليلا مربع حول اسم Zamyla هنا.
وهذا هو الحال في C أنه عند لدينا سلسلة، مثل Zamyla-- وربما
لقد حان أن سلسلة الظهر من وظيفة مثل سلسلة الحصول عليها،
يمكنك التعامل مع الواقع انها حرف بحرف.
>> الآن، وهذا هو ثيق ل محادثة في متناول اليد، ل
في التشفير إذا كنت ترغب في تغيير ألف إلى باء، وباء لC و C إلى D،
وهكذا دواليك، عليك أن تكون قادرا لإلقاء نظرة على الشخصيات الفردية
في سلسلة.
عليك أن تكون قادرا على تغيير زد إلى شيء آخر، وهناك
إلى شيء آخر، وM ل شيء آخر، وهلم جرا.
ولذا فإننا بحاجة إلى وسيلة، برمجيا، لذلك
في الكلام، في C لتكون قادرة على تغيير والنظر في رسائل فردية.
ويمكننا القيام بذلك على النحو التالي.
>> اسمحوا لي أن انتقل رئيس مرة أخرى في IDE CS50.
واسمحوا لي أن المضي قدما وإنشاء ملف جديد
أن سأتصل هذه المرة string0، كأول مثال لدينا، نقطة ج.
وانا ذاهب الى المضي قدما وسوط ذلك على النحو التالي.
>> حتى تشمل CS50.h، و ثم تشمل io.h القياسية،
الذي أنا ذاهب دائما تقريبا ل يكون استخدام في برامج بلدي، على الأقل
في البداية.
كثافة العمليات الفراغ الرئيسي، ومن ثم في هنا أنا تنوي القيام به سلاسل يحصل على السلسلة.
ثم انا ذاهب الى والمضي قدما في القيام بذلك.
أريد أن أذهب إلى الأمام وكما شيك التعقل،
أقول، مرحبا، في المئة الصورة، منقوطة، يجعل سلسلة 0.
اه يا، ماذا أفعل هنا؟
أوه، أنا لم اربطها.
هكذا تعلمت الدرس، أن لم يكن متعمدا.
>> خطأ ذلك، والمزيد في المئة التحويلات من الحجج البيانات.
وهذا هو المكان، في خط 7-- حسنا، لدي،
الإقتباس، وهذا سلسلة جهدي لprintf.
لقد حصلت على علامة النسبة المئوية.
ولكن أنا في عداد المفقودين الوسيطة الثانية.
>> أنا في عداد المفقودين الفاصلة، والتي وقد فعلت في الأمثلة السابقة.
لذلك فرصة جيدة للإصلاح واحد أكثر خطأ، عن طريق الخطأ.
والآن اسمحوا لي أن تشغيل string0، اكتب في Zamyla.
موافق، مرحبا Zamyla.
>> لذلك قمنا بتشغيل هذا النوع من البرامج بضع مرات مختلفة الآن.
ولكن دعونا نفعل شيئا ل مختلفة قليلا هذه المرة.
بدلا من مجرد طباعة وZamyla اسم كله كان خارجا مع printf،
دعونا نفعل ذلك حرف بحرف.
>> انا ذاهب الى استخدام لحلقة.
وانا ذاهب لإعطاء نفسي متغير العد، ودعا ط.
وانا ذاهب للحفاظ على بالتكرار، لذلك منذ فترة طويلة وأنا أقل من طول الصورة.
>> كما تبين، لم نكن تفعل هذه المرة الأخيرة،
أن ج يأتي مع وظيفة تسمى ستيرلينغ.
مرة في اليوم، وبشكل عام لا يزال عند تنفيذ المهام،
سوف البشر غالبا ما تختار جدا أسماء موجزة هذا النوع من الصوت
مثل ما تريد، على الرغم من انها في عداد المفقودين بضعة حروف العلة أو الحروف.
حتى ستيرلينغ هو اسم الوظيفة التي
يأخذ مشادة بين الأقواس التي يجب أن تكون سلسلة.
وأنها مجرد بإرجاع عدد صحيح، طول هذه السلسلة.
>> لذلك هذا للحلقة على السطر 7 يجري لبدء العد في الاول يساوي 0.
انه سيكون لزيادة أنا على كل التكرار
بواسطة 1، كما كنا نفعل عدة مرات.
لكنها تنوي القيام به فقط هذا حتى نقطة
عندما هو طول من السلسلة نفسها.
>> لذلك هذا هو وسيلة ل، في نهاية المطاف، بالتكرار عبر الأحرف
في سلسلة التالي كما هو.
أنا ذاهب لطباعة ليس سلسلة كاملة، ولكن في المئة ج،
حرف واحد يليه سطر جديد.
ثم انا ذاهب الى المضي قدما، وأحتاج
ليقول أريد لطباعة شخصية إيث من الصورة.
>> حتى لو كنت غير المتغير الذي يشير مؤشر السلسلة، حيث
كنت في ذلك، وأنا بحاجة إلى أن تكون قادرة على أقول، تعطيني الطابع إيث من الصورة.
وج لديه وسيلة للقيام هذا مع أقواس معقوفة.
كنت أقول ببساطة اسم سلسلة، وهو في هذه الحالة هو الصورة.
ثم يمكنك استخدام الأقواس المربعة، والتي هي عادة فوق العودة الخاص بك أو أدخل
مفتاح على لوحة المفاتيح.
ثم قمت بوضع مؤشر لل الحرف الذي تريد طباعته.
ذلك أن المؤشر سوف يكون number-- 0 أو 1 أو 2 أو 3، أو نقطة،
نقطة، نقطة، بعض رقم آخر.
>> وعلينا أن نضمن أنه سيكون ل يكون العدد الصحيح، لأنني
بدء العد عند 0.
وافتراضيا، الحرف الأول في سلسلة هو من خلال اتفاقية 0.
والطابع الثاني هو قوس 1.
والحرف الثالث هو قوس 2.
وكنت لا تريد أن يذهب أيضا حتى الآن، ولكننا لن لأننا
الذهاب الى زيادة ط فقط حتى يساوي طول السلسلة.
وعند هذه النقطة، هذه لحلقة سوف تتوقف.
>> لذلك اسمحوا لي المضي قدما وحفظ هذا برنامج، وتشغيل جعل سلسلة 0.
ولكن أنا ثمل.
يعلن ضمنا وظيفة المكتبة ستيرلينغ مع نوع من هذا القبيل وsuch-- الآن،
هذا يبدو مألوفا.
ولكنها ليست printf.
وانها لن تحصل على السلسلة.
>> لم أكن المسمار في بنفس الطريقة هذه المرة.
ولكن لاحظ هنا إلى أسفل قليلا أسفل علاوة على ذلك، تشمل string.h رأس،
تنص صراحة على إعلان عن ستيرلينغ.
لذلك هو في الواقع هناك فكرة في هناك.
>> وبالفعل اتضح هناك ملف رأس آخر
أننا لم تستخدم في الصف بعد، لكنه
بين تلك المتاحة لك، ودعا string.h.
وفي هذا الملف، string.h هو أعلن ستيرلينغ.
لذلك اسمحوا لي المضي قدما و حفظ هذا، وجعل سلسلة
0-- لطيفة، لا توجد رسائل خطأ هذه المرة.
>> ./string0 Zamyla، و أنا على وشك أن هاهنا،
وعند هذه النقطة getstring يسير للعودة السلسلة، ووضعها في الصورة.
ثم أن للحلقة هو الذهاب الى تكرار على الحروف S واحد في وقت واحد،
وطباعتها واحدة في كل سطر، ل كان لي أن ن مائل في نهاية المطاف.
حتى أتمكن من حذف هذا مائل ن، وبعد ذلك فقط طباعة Zamyla جميع
في نفس الخط، reimplementing فعال
printf، الذي هو ليس كل ما مفيد.
ولكن في هذه الحالة، أنا لم فعلت ذلك.
لقد طبعت في الواقع واحدة الحرف في وقت واحد، واحد في كل سطر،
بحيث نرى في الواقع تأثير.
>> ولكن أود أن أشير إلى شيء واحد هنا.
وسوف نعود إلى هذا في الأسبوع المقبل.
وتبين أن هذا كود يحتمل عربات التي تجرها الدواب.
>> اتضح أن سلسلة الحصول على وبعض الوظائف الأخرى في الحياة
لا بالضرورة دائما العودة ما كنت تتوقع.
ونحن نعلم من الطبقة الأخيرة الوقت في هذا أن يحصل
ومن المفترض سلسلة لإرجاع سلسلة.
ولكن ماذا لو كان المستخدم أنواع من هذا القبيل كلمة طويلة، أو فقرة أو مقال
أن هناك فقط لا يكفي الذاكرة في الكمبيوتر لتناسب ذلك.
>> مثل، ما إذا كان هناك شيء يذهب الخطأ تحت غطاء محرك السيارة؟
قد لا يحدث في كثير من الأحيان، ولكن يمكن أن يحدث مرة واحدة
في حين، من النادر جدا.
وهكذا اتضح أن سلسلة الحصول على وظائف مثل ذلك لا بالضرورة
دائما العودة السلاسل.
علهم يرجعون بعض قيمة الخطأ، بعض القيمة الحارس إذا جاز التعبير،
الذي يشير إلى أن فهناك شيء ما خطأ.
وكنت أعرف فقط هذا من بعد أن تعلم أنه في الطبقة الآن،
أو بعد قراءة بعض الوثائق أكثر.
اتضح أن سلسلة الحصول على يمكن إرجاع قيمة تسمى اغية.
باطل هو قيمة خاصة أننا سوف أعود لفي الأسبوع المقبل.
لكنه الآن، أعرف فقط أنه إذا أريد لتكون مناسبة حقا في المضي قدما
باستخدام سلسلة الحصول عليها، وأنا لا ينبغي فقط الذي يطلق عليه،
وعلى نحو أعمى استخدام قيمة عودتها، يثق أنه من سلسلة.
>> أود أن أقول أولا، مهلا، انتظر لحظة، فقط
المضي قدما إذا الصورة لا يساوي لاغية، حيث لاغية، مرة أخرى،
هو فقط بعض قيمة خاصة.
وانها قيمة خاصة الوحيدة التي داعي للقلق بشأن لسلسلة الحصول عليها.
الحصول على سلسلة إما الذهاب لإرجاع سلسلة أو فارغة.
>> وهذه علامة تعجب علامة يساوي هل يمكن أن نعرف من ربما درس الرياضيات
التي قد رسم علامة المساواة مع خط من خلال ذلك للإشارة إلى عدم المساواة.
هذا ليس عادة شخصية يمكنك كتابة على لوحة المفاتيح.
وهكذا في معظم لغات البرمجة، عندما كنت أريد أن أقول لا يساوي،
استخدام علامة تعجب، والمعروف باسم الانفجار.
لذلك أقول لكم الانفجار يساوي، التي يعني لا يساوي، من الناحية المنطقية.
انها مجرد مثل ليس هناك أعظم من، أو يساوي، أو أقل من
أو يساوي مفتاح على لوحة المفاتيح أن يفعل كل شيء في رمز واحد.
ولهذا السبب، في الأمثلة السابقة، فعلت قوس مفتوح، ومن ثم
علامة المساواة، من أجل القيام أكبر من أو، مثلا، أقل من.
>> فما هي الوجبات الجاهزة هنا؟
هذا هو مجرد وسيلة الآن لل إدخال هذا النحو، هذه الميزة،
بالتكرار عبر فرد الأحرف في سلسلة.
وتماما مثل تلك الساحة بين قوسين تسمح لك للحصول عليهم،
النظر في تلك الأقواس المربعة كما نوع من دلالة في هذا الكامنة
التصميم، حيث كل شخصية من داخل سلسلة
هو نوع من محاصر في مكان ما تحت غطاء محرك السيارة في ذاكرة الكمبيوتر الخاص بك.
>> ولكن دعونا جعل البديل من هذا.
وتبين أن هذا البرنامج هو الصحيح.
حتى في محاور CS50 للتقييم الرمز، وهذا هو الصحيح الآن.
وخصوصا ان انا التحقق من وجود لاغية، يجب أن هذا البرنامج لم تحطم.
وأنا أعلم تماما أن من الخبرة.
ولكن هناك شيء آخر أن نحن يمكن ان تتعرض له هنا حقا.
ولكنها ليست جدا مصممة جيدا، لأن دعونا نعود إلى الأساسيات.
>> أولا، principles-- ماذا لحلقة تفعل؟
ألف لحلقة يفعل ثلاثة أشياء.
ذلك تهيئة بعض القيمة، وإذا كنت تسأل ل.
فإنه يتحقق شرط.
ثم بعد كل التكرار، بعد كل دورة،
فإنه بزيادة بعض قيمة أو قيم، هنا.
>> فماذا يعني ذلك؟
نحن تهيئة ط 0.
نتحقق ونتأكد من هو أقل من طول الصورة، وهي Z-A-M-Y-L-A،
حتى وهو أقل من 6.
وبالفعل، 0 كما تقل عن 6.
>> نحن طباعة Z من اسم Zamyla ل.
ثم نحن زيادة ط 0-1.
نحن ثم تحقق، هو 1 أقل من طول الصورة؟
طول الصورة هو 6.
نعم إنه كذلك.
>> لذلك نحن طباعة في اسم Zamyla وZA.
نحن زيادة كنت من 0 إلى 1، و 2.
نحن ثم تحقق، هو 2 أقل من طول اسم Zamyla ل.
6- حتى 2 أقل من 6.
نعم، دعونا طباعة الآن M في اسم Zamyla، والحرف الثالث.
>> المفتاح هنا هو أن على كل تكرار للقصة، وأنا التحقق،
هو أنا أقل من طول Zamyla؟
ولكن تكمن المشكلة في أن ستيرلينغ ليس خاصية.
لأولئك منكم الذين قد برمجت قبل بلغة جافا أو لغات أخرى
يمكن أن نعرف طول السلسلة خاصية، مجرد قراءة بعض القيمة فقط.
>> في C في هذه الحالة، إذا كان هذا هو وظيفة هذا هو حرفيا
عد عدد من الأحرف في Zamyla في كل مرة
نحن ندعو إلى أن وظيفة.
في كل مرة كنت أسأل الكمبيوتر لاستخدام ستيرلينغ، انه أخذ نظرة على Zamyla،
وقوله Z-A-M-Y-L-A، 6.
وتقوم بإرجاع 6.
في المرة القادمة التي ندعو من الداخل أن للحلقة،
انها سوف ننظر في Zamyla مرة أخرى، ويقول Z-A-M-Y-L-A، 6.
وانها سوف تعود 6.
لذلك ما هو غبي حول هذا التصميم؟
>> لماذا هو قانون بلدي ليس 5 من 5 للتصميم في الوقت الراهن، إذا جاز التعبير؟
حسنا، أنا أسأل ل السؤال لا داعي له.
أنا القيام بالمزيد من العمل مما كنت في حاجة إليها.
>> وذلك على الرغم من الجواب الصحيح، وأنا
طرح جهاز الكمبيوتر، ما هو طول Zamyla مرة أخرى،
ومرة أخرى، ومرة ​​أخرى، ومرة ​​أخرى؟
وهذا الجواب أبدا لتغييره.
انها دائما ما يكون 6.
>> لذلك حلا أفضل من هذا سيكون هذا الإصدار المقبل.
اسمحوا لي أن المضي قدما ووضعها في ملف منفصل يسمى string1.c،
فقط للحفاظ على أنه فصل.
واتضح في ل حلقة، يمكنك فعلا
تعريف متغيرات متعددة في وقت واحد.
>> لذلك أنا ذاهب للحفاظ على ط و وضعه إلى 0.
ولكن انا ذاهب أيضا ل إضافة فاصلة، ويقول:
تعطيني متغير يسمى ن، الذي قيمة تساوي طول سلسلة من الصورة.
والآن، من فضلك تأكد حالتي طالما أنا أقل من ن.
>> حتى في هذه الطريقة، والمنطق متطابقة في نهاية اليوم.
ولكن أنا تذكر قيمة 6، في هذه الحالة.
ما هو طول اسم Zamyla على ذلك؟
وأنا أضع ذلك في ن.
>> وأنا لا تزال فحص الشرط في كل مرة.
غير 0 أقل من 6؟
هو 1 أقل من 6؟
هو 2 أقل من 6، وهكذا دواليك؟
>> ولكن أنا لا أطلب الكمبيوتر مرة أخرى، ومرة ​​أخرى، ما هو
طول اسم Zamyla على ذلك؟
ما هو طول اسم Zamyla على ذلك؟
ما هو طول اسم هذا Zamyla على ذلك؟
أنا تذكر حرفيا أن أول و الإجابة فقط في هذا ن المتغير الثاني.
لذلك هذا الآن سيكون ليس فقط صحيح، ولكن أيضا مصممة تصميما جيدا.
>> الآن، ماذا عن النمط؟
لقد اسمه المتغيرات بلدي جيد جدا، وأود أن أقول.
انهم السوبر مقتضبة الآن.
وهذا شيء طيب تماما.
>> إذا كان لديك واحدة فقط سلسلة في البرنامج،
يمكن أن نسميه كذلك ق لسلسلة.
إذا كان لديك فقط متغير واحد لحساب في أحد البرامج،
يمكن أن نسميه كذلك هو أنا.
إذا كان لديك طول، ن هو السوبر شائع أيضا.
لكنني لم يعلق أي من قانون بلدي.
>> أنا لم أبلغ reader-- سواء كان ذلك في بلدي TF، أو TA،
أو مجرد colleague-- ما يفترض إلى أن يحدث في هذا البرنامج.
وذلك للحصول على اسلوب جيد، ما كنت تريد أن تفعل
هو this-- شيء كما تسأل المستخدم لإدخال.
وأنا لا يمكن إعادة كتابة هذا أي عدد من الطرق.
>> تأكد s-- التأكد من الحصول على سلسلة عادت سلسلة.
ثم في here-- ولعل هذا هو وأعاد comment-- أهم
فوق الحروف في الصورة واحدة في وقت واحد.
وأنا لا يمكن استخدام أي اختيار اللغة الإنجليزية
هنا لوصف كل هذه أجزاء من التعليمات البرمجية.
>> لاحظ أنني لم تضع التعليق على كل سطر من التعليمات البرمجية،
حقا فقط على اهتمام منها، تلك التي
لدينا بعض المعنى الذي كنت قد نريد أن نوضح عظمى لشخص
قراءة قانون بلدي.
ولماذا يدعون لك الحصول على سلسلة يطلب المستخدم لإدخال؟
حتى أن واحدا ليس بالضرورة كل ما صفية.
ولكنه يساعد تحكي قصة، لأن السطر الثاني في القصة، تأكد
الحصول على سلسلة عادت سلسلة.
>> والخط الثالث في القصة، أعاد على الأحرف في الصورة واحدة
في وقت واحد.
والآن فقط لحسن التدبير، انا ذاهب الى المضي قدما وإضافة
واحد أكثر تعليق أن فقط يقول الطباعة ط ال حرف في الصورة.
الآن، ماذا فعلت في نهاية اليوم؟
>> لقد أضفت بعض الإنجليزية الكلمات في شكل تعليقات.
رمز مائل مائل يعني، مهلا، هذا الكمبيوتر هو للإنسان،
ليست لك، الكمبيوتر.
حتى انهم تجاهل منطقيا.
انهم فقط هناك.
>> وبالفعل، CS50 IDE يبين لهم كما الرمادي، كما أنه مفيد، ولكن ليس مفتاح
إلى البرنامج.
لاحظ ما يمكنك القيام به الآن.
ما إذا كنت تعرف C برمجة أو لم يكن، كنت
يمكن أن يقف لتوه في هذا برنامج، والخالي من التعليقات.
اسأل المستخدم لإدخال، تأكد الحصول على سلسلة عادت سلسلة،
أعاد على الأحرف في الصورة في وقت واحد، وطباعة الطابع
حرف ط عشر في s-- كنت لا حتى أن ننظر إلى رمز
لفهم ما يفعله هذا البرنامج.
والأفضل من ذلك، إذا كنت نفسك نظرة في هذا البرنامج في غضون أسبوع أو اثنين،
أو شهر، أو سنة، أنت أيضا لم يكن لديك
التحديق في التعليمات البرمجية، أحاول أن أتذكر،
ما أحاول القيام به مع هذا الرمز؟
>> لقد قال بنفسك.
كنت قد وصفته لنفسك، أو بعض الزملاء، أو TA، أو فريق العمل.
وحتى هذا من شأنه أن يكون الآن صحيح، وتصميم جيد،
وأسلوب جيد في نهاية المطاف أيضا.
حتى لا يبقي ذلك في الاعتبار.
>> ولذلك لا يوجد واحد آخر شيء انا ذاهب الى القيام به هنا
التي يمكن الآن تكشف بالضبط ما هو يجري تحت غطاء محرك السيارة.
لذلك هناك هذه الميزة في C، وغيرها من اللغات،
دعا تلبيس إما ضمنا
أو بشكل صريح يسمح لك لتحويل من نوع بيانات واحد إلى آخر.
لقد تم التعامل حتى اليوم بعيد مع السلاسل.
>> والسلاسل حرفا.
ولكن نذكر من أسبوع 0 ما هي الأحرف؟
الشخصيات هي مجرد فكرة مجردة على رأس من الأرقام العشرية numbers--،
والأرقام العشرية هي في الواقع مجرد التجريد على أعلى الأرقام الثنائية،
ونحن تعريفه.
>> من الشخصيات أرقام.
والأرقام هي أحرف، فقط اعتمادا على السياق.
وتبين أن داخل برنامج كمبيوتر،
يمكنك تحديد كيف تريد أن تبدو في البتات داخل هذا البرنامج؟
>> نذكر من الأسبوع 0 أن كان لدينا أسكي، الذي هو مجرد هذا الرمز
خطابات التعيين لأرقام.
وقلنا عاصمة (أ) هو 65.
العاصمة ب 66، وهكذا دواليك.
>> وإشعار، لدينا أساسا حرف على في الصف العلوي هنا، كما C سيدعو لهم،
الشخصيات، ومن ثم [إينتس] في الصف الثاني.
واتضح يمكنك تحويل بسلاسة بين البلدين، عادة.
وإذا كنا نريد أن نفعل هذا عمدا، ونحن
قد ترغب في معالجة شيء من هذا القبيل.
>> ونحن قد ترغب في تحويل حالة العلوي لخفض
الحالة، أو أقل حالة إلى حالة العليا.
واتضح هناك ل في الواقع نمط هنا
نحن يمكن أن تبني في مجرد لحظة.
ولكن دعونا ننظر أولا في ل مثال للقيام بذلك صراحة.
>> أنا ذاهب إلى العودة إلى IDE CS50.
انا ذاهب الى خلق ملف يسمى أسكي 0.c.
وانا ذاهب الى المضي قدما وأضم io.h القياسي في الجزء العلوي، الفراغ الرئيسي كثافة العمليات
في الجزء العلوي من وظيفتي.
ثم أنا ذاهب لمجرد القيام following-- لحلقة من ط يساوي،
دعنا نقول، 65.
>> وبعد ذلك ستكون أقل من 65، بالإضافة إلى 26 حرف في الأبجدية.
ولذا فإنني سأترك الكمبيوتر تفعل الرياضيات بالنسبة لي هناك.
ثم داخل هذه الحلقة، ما أنا ذاهب لطباعة؟
>> ٪ ج هي٪ ط مائل ن.
والآن أريد أن سد العجز في قيمتين.
لقد وضعت مسألة مؤقتا يصادف هناك دعوة السؤال.
>> أريد أن تكرار من 65 فصاعدا 26 الحروف الأبجدية،
طبع على كل تكرار ذلك أي ما يعادل حرف لا يتجزأ.
وبعبارة أخرى، أريد أن تكرار أكثر من 26 أرقام الطباعة
ما هو الطابع أسكي، والرسالة، وما أعرف، وعدد مماثل
في الحقيقة مجرد إعادة الرسم البياني من هذه الشريحة.
وذلك ما ينبغي أن تكون هذه علامات استفهام؟
>> حسنا، كما تبين أن الثاني ينبغي للمرء أن يكون مجرد ط متغير.
أريد أن أرى أن كرقم.
وحجة الوسطى هنا، أستطيع أن أقول الكمبيوتر
لعلاج هذا صحيح ط كحرف، وذلك
لتحل محل هنا لفي المئة C.
>> وبعبارة أخرى، إذا أنا، مبرمج البشري، ونعرف
هذه هي مجرد أرقام في نهاية اليوم.
وأنا أعلم أنه ينبغي 65 خريطة لبعض الحرف.
مع هذا يلقي صريح، مع قوس،
اسم نوع البيانات التي تريد تحويل ل، وقوس مغلقة،
يمكن أن أقول لكم كمبيوتر، مهلا، الكمبيوتر،
تحويل هذا صحيح إلى شار.
>> حتى عند تشغيل هذا البرنامج بعد تجميع،
دعونا نرى ما get-- جعل أسكي 0.
الرتق ذلك، ما لم أفعل الخطأ هنا؟
استخدام من المعرف غير معروفة، كل الحق، وليس مقصودا،
ولكن دعونا نرى ما اذا كنا لا يمكن السبب من خلال هذه.
>> حتى خط five-- ذلك لم أحصل بعيدا جدا قبل الشد.
هذا حسن.
لذلك السطر 5 لأنني يساوي 65-- أرى.
لذا تذكر أنه في C، خلافا لبعض اللغات إذا كان لديك البرمجة السابقة
تجربة، لديك لنقول للكمبيوتر،
على عكس خدش، ما نوع المتغير هو عليه.
>> ولقد نسيت عبارة رئيسية هنا.
في السطر الخامس، لقد بدأت باستخدام ط.
ولكن لم تكن قد قلت C ما نوع البيانات هو عليه.
لذلك أنا ذاهب للذهاب هنا و أقول، آه، وجعله عددا صحيحا.
>> الآن أنا ذاهب إلى المضي قدما وإعادة ترجمة.
أن الثابت أن.
./ascii0 أدخل، وهذا النوع من بارد.
ليس فقط ذلك بسرعة فائقة ل نسأل الكمبيوتر هذا السؤال،
بدلا من النظر إليه على شريحة، انها تطبع واحد في كل سطر، و65،
B 66، على طول الطريق down-- منذ أن فعلت ذلك 26 times-- إلى خطابات ض،
وهو 90.
و، في الواقع، قليلا أكثر ذكاء من شأنه
كانت بالنسبة لي عدم الاعتماد على الكمبيوتر لإضافة 26.
كان يمكن أن يتم فقط 90 كذلك، وقتا طويلا
وأنا لا نرتكب الخطأ نفسه مرتين.
أريد أن ترتفع خلال ض، ليس فقط من خلال ما يصل ذ.
>> لذلك أن يلقي صريح.
وتبين أن هذا ليس من الضروري.
اسمحوا لي أن المضي قدما في إعادة تشغيل هذا مترجم، واعادة أسكي 0.
وتبين أن C هي ذكية جدا.
>> وprintf، على وجه الخصوص، غير ذكية جدا.
إذا كنت مجرد تمرير ط مرتين لكل من النائبة، printf
سوف ندرك، يا، وأنا أعلم جيدا أنك أعطاني integer-- بعض العدد،
مثل 65، أو 90، أو أيا كان.
ولكن أرى أنك تريد مني أن تهيئة هذا العدد مثل حرف.
وهكذا printf يمكن أن يلقي ضمنا وكثافة العمليات إلى شار لكنت كذلك.
بحيث ليست مشكلة على الإطلاق.
>> ولكن لاحظ، وبسبب هذا التكافؤ يمكننا القيام به في الواقع هذا كذلك.
اسمحوا لي أن المضي قدما وجعل واحدة نسخة أخرى من this-- أسكي 1.ج
وبدلا من بالتكرار عبر الأعداد الصحيحة، يمكن أن تهب حقا عقلك
بواسطة بالتكرار عبر حرفا.
إذا كان حرف ج يحصل العاصمة A، I نريد أن نمضي قدما ونفعل هذا،
طالما C أقل من أو يساوي الألف إلى الياء العاصمة وعلى كل التكرار
أريد أن زيادة C، يمكنني الآن في خط printf بلدي هنا
مثلا، في المئة C هو في المئة ط مرة أخرى، فاصلة C.
>> والآن، يمكنني أن أذهب الاتجاه الآخر، الصب الطابع صراحة
إلى عدد صحيح.
لذلك، مرة أخرى، لماذا تفعل هذا؟
انها قليلا غريبة لنوع من عد من حيث حرفا.
>> ولكن إذا كنت أفهم ما هو يجري تحت غطاء محرك السيارة،
هناك حقا أي سحر.
كنت مجرد القول، مهلا، وإعطاء الكمبيوتر لي متغير يسمى C من نوع شار.
تهيئة إلى العاصمة A. و لاحظت علامات الاقتباس المفردة المسألة.
>> الأحرف في C، نذكر من في الأسبوع الماضي، يمكنك استخدام علامات الاقتباس المفردة.
سلاسل، للكلمات، العبارات، يمكنك استخدام علامات الاقتباس المزدوجة.
موافق، الكمبيوتر، وتستمر في فعل هذا، لذلك دام الطابع أقل من
أو يساوي إلى z.
وأنا أعرف من مائدتي أسكي أن كل من هذه الرموز أسكي على تماس.
>> ليس هناك ثغرات.
حتى انها مجرد من A إلى Z، مفصولة رقم واحد لكل منهما.
وبعد ذلك يمكنني أن زيادة شار، إذا كنت تريد حقا.
في نهاية اليوم، انها مجرد عدد.
انا اعرف هذا.
حتى أستطيع أن أفترض فقط أن أضيف 1 إلى ذلك.
>> وبعد ذلك هذه المرة، وأنا طباعة ج، ثم ما يعادل يتجزأ.
وأنا لا تحتاج حتى يلقي صريح.
أنا يمكن أن تسمح printf و أشياء شخصية الكمبيوتر من،
بحيث الآن في حالة تشغيل جعل Ascii1./ascii1،
أحصل على نفس الشيء بالضبط كذلك.
>> برنامج لا طائل منه، though-- لا أحد يجري في الواقع لكتابة البرامج
من أجل معرفة ما كان الرقم الذي يعين A أو B أو Z؟
كنت مجرد الذهاب الى جوجل، أو البحث عنه على شبكة الإنترنت، أو البحث عنه
على شريحة، أو ما شابه ذلك.
فأين هذا لا يحصل في الواقع مفيدة؟
>> حسنا، يتكلم عن ذلك الشريحة، لاحظ هناك
نمط الفعلي هنا بين الأحرف الكبيرة والصغيرة التي لم يكن من قبيل الصدفة.
لاحظ أن رأس المال (أ) هو 65.
صغيرة وهو 97.
وكيف بعيدا هو أقل الحالة؟
>> هكذا هي الطريقة العديد من الخطوات بعيدا من 97 65؟
حتى 97 ناقص 65 غير 32.
ولذلك فإن رأس المال هو 65.
إذا قمت بإضافة 32 إلى ذلك، تحصل أحرف صغيرة أ.
وعلى نحو مكافئ، إذا طرح 32، تحصل على العودة إلى العاصمة A-- نفسه مع B
لب قليلا، C كبيرة إلى صغيرة ج.
>> كل هذه الثغرات هي 32 إربا.
الآن، ويبدو أن هذا يسمح لنا تفعل شيئا مثل مايكروسوفت وورد،
أو مستندات جوجل ميزة، حيث كنت ويمكن تحديد كل شيء ثم يقول،
تغيير كافة إلى أحرف صغيرة أو تغيير جميع لحالة العلوي،
أو فقط تغيير الكلمة الأولى من جملة إلى الحالة العلوي.
يمكننا أن نفعل شيئا في الواقع مثل هذا أنفسنا.
>> اسمحوا لي أن نمضي قدما وحفظ ملف هنا دعا الاستفادة 0.c.
ودعونا نمضي قدما وجهز برنامج أن تفعل ذلك تماما كما يلي.
حتى تشمل مكتبة CS50.
وتشمل معيار I / O.
>> وأنا أعلم أن هذا قريبا.
لذلك أنا ذاهب لوضعها في هناك بالفعل، string.h،
لذلك ليس لدي الوصول إلى أشياء مثل ستيرلينغ،
ثم كثافة العمليات الفراغ الرئيسي، كالعادة.
ثم انا ذاهب الى المضي قدما والقيام سلاسل يحصل على سلسلة،
فقط للحصول على سلسلة من المستخدم.
ثم انا ذاهب الى تفعل الاختيار التعقل بلدي.
إذا سلسلة لا يساوي لاغية، ثم انها آمنة والمضي قدما.
وماذا أريد أن أفعل؟
انا ذاهب الى تكرار من ط يساوي 0، ون تصل إلى طول سلسلة من الصورة.
>> وانا ذاهب الى القيام بذلك طالما أنا أقل من ن، وأنا زائد زائد.
وحتى الآن، وأنا في الحقيقة مجرد الاقتراض الأفكار من قبل.
والآن أنا ذاهب إلى بافتتاح فرع.
>> حتى التفكير في العودة الى نقطة الصفر، حيث كان لدينا تلك الشوك في الطريق،
والاسبوع الماضي في C. وانا ذاهب ل أقول هذا، وإذا كان الحرف ط ال في الصورة
أكبر من أو يساوي خفض القضية،
and-- في خدش لو كنت حرفيا أقول، ولكن في C تقوله العطف،
ampersand-- وحرف ط ال في الصورة أقل من أو يساوي خفض حالة ض،
دعونا نفعل شيئا للاهتمام.
دعونا طباعة فعلا ل شخصية مع أي سطر جديد
هذا هو حرف في السلسلة، الطابع ط عشر في السلسلة.
>> ولكن دعونا نمضي قدما و طرح 32 منه.
آخر إذا كان الحرف في السلسلة التي نحن نبحث
ليس بين القليل ويذكر ض، والمضي قدما
وفقط طباعته من دون تغيير.
لذلك قمنا بعرض هذه الرموز بين قوسين
سلاسل لدينا للحصول على ط ال حرف في السلسلة.
>> لقد أضفت بعض المنطق المشروط، مثل الصفر في أسبوع واحد الأسبوع الماضي، حيث
أنا فقط باستخدام بلدي الأساسية فهم ما هو
يجري تحت غطاء محرك السيارة.
هو حرف ط عشر من ليالي أكبر من أو يساوي؟
مثل، هل هو 97 أو 98، أو 99، وهكذا دواليك؟
>> ولكن هل هو أيضا أقل من أو يساوي إلى قيمة ض صغيرة؟
وإذا كان الأمر كذلك، ماذا يعني هذا الخط؟
14، وهذا هو نوع من بذرة الفكرة كلها،
رسملة الرسالة ببساطة طرح 32 منه،
في هذه الحالة، لأنني أعرف، في أن الرسم البياني، كيف يتم تمثيل أرقام بلدي.
لذلك دعونا نمضي قدما وتشغيل هذا، بعد تجميع الاستفادة 0.c،
وتشغيل استفادة 0.
>> دعونا اكتب في شيء من هذا القبيل Zamyla في كل صغيرة تدخل.
والآن لدينا Zamyla في كافة الأحرف الكبيرة.
دعونا اكتب في روب في كل صغيرة.
دعونا نحاول جيسون في كل صغيرة.
ونستمر في الحصول على رسملة القسري.
هناك خلل بسيط أنني نوع من لم تتوقع.
لاحظ لي موجه الجديد أن ينتهي بهم المطاف على نفس خط أسمائهم،
الذي يشعر القليل من الفوضى.
>> لذلك أنا ذاهب للذهاب هنا، و في الواقع في نهاية هذا البرنامج
طباعة حرف السطر الجديد.
هذا كل شئ.
مع printf، لا تحتاج إلى تمر في المتغيرات أو رمز تنسيق.
يمكنك حرفيا فقط طباعة شيء من هذا القبيل سطر جديد.
>> لذلك دعونا نمضي قدما وجعل استفادة 0 مرة أخرى، أعد ذلك، Zamyla.
والآن حان قليلا أجمل.
الآن يا موجه على الخط الجديد الخاص بها.
ذلك أن كل شيء على ما يرام وجيدة.
ولهذا مثال جيد.
ولكن أنا لا حتى بالضرورة تحتاج إلى رمز الثابت 32.
أتعلم؟
أنا يمكن أن say-- أنا لا من أي وقت مضى تذكر ما هو الفرق.
>> لكنني أعرف أنني إذا لديهم بريد إلكتروني حالة انخفاض،
أريد أساسا لطرح قبالة مهما كانت المسافة بين القليل
ووكبيرة وهناك، لأنه إذا افترض أن كافة الأحرف الأخرى هي نفسها،
ينبغي أن يحصل على هذه المهمة.
ولكن بدلا من ذلك، كنت تعرف لماذا؟
هناك طريقة أخرى لا يزال.
>> إذا كان هذا هو الاستفادة 1.c-- كأني لوضع هذا في ملف منفصل.
دعونا لا تستفيد 2.C على النحو التالي.
انا ذاهب الى حقا تنظيف هذا هنا.
وبدلا من الاضطرار إلى تعرف أو يهتمون تلك مستوى منخفض
تفاصيل التنفيذ، وأنا بدلا من ذلك مجرد الذهاب لطباعة حرف،
الإقتباس، في المئة C، و ثم استدعاء دالة أخرى
موجود يأخذ حجة، وهو حرف، مثل هذا.
>> اتضح في C، هناك استدعاء دالة أخرى
إلى الأعلى، والذي كما يبدو من اسمها يشير يأخذ الطابع
ويجعل من لحالة العلوية ما يعادلها، ثم يعيدها
بحيث printf يمكن سد العجز في هناك.
وذلك للقيام بذلك، على الرغم من أنني تحتاج إلى إدخال ملف واحد آخر.
اتضح هناك ملف آخر ان كنت أعرف فقط من الطبقة،
أو كتاب، أو على الانترنت إشارة، يسمى C type.h.
>> حتى إذا كان لي أن أضيف أن يصل بين رأس بلدي ملفات، والآن إعادة تجميع هذا البرنامج،
capitalize2، ./capitalize2 أدخل.
دعونا اكتب في Zamyla في كل صغيرة، لا يزال يعمل نفس الشيء.
ولكن هل تعرف لماذا؟
وتبين أن لالعلوي لديها بعض الوظائف الأخرى.
>> واسمحوا لي أن أعرض هذا قيادة هنا، نوع من برعونة
اسمه، ولكن الرجل لدليل.
وتبين أن معظم أجهزة الكمبيوتر لينكس، كما أننا نستخدم here-- لينكس التشغيل
system-- ديك أمر دعا الرجل، الذي يقول:
مهلا، الكمبيوتر، أعطني دليل الكمبيوتر.
ماذا تريد ان بحث عن في هذا الدليل؟
>> أريد للبحث عن وظيفة ودعا إلى الأعلى، أدخل.
وانها خفي قليلا لقراءة بعض الأحيان.
ولكن لاحظ أننا في دليل لينكس مبرمج.
والأمر كله النص.
وتلاحظ أن هناك ل اسم وظيفة هنا.
اتضح لها ابن عم يدعى لخفض، والتي لا العكس.
والإشعار المنصوص عليه في ملخص، لاستخدام هذه تعمل صفحة الرجل، إذا جاز التعبير،
وتقول لي بأنني تحتاج إلى تضمين ج type.h.
وكنت أعرف أنه من الناحية العملية.
>> هنا، انها تظهر لي اثنين نماذج لوظيفة،
بحيث إذا أريد من أي وقت مضى لاستخدام هذه وأنا أعلم ما يأخذونه كمدخل،
وما يعودون كإخراج.
ثم إذا قرأت وصف، أرى
بمزيد من التفصيل ما لا وظيفة.
ولكن الأهم من ذلك، إذا أنا أنظر تحت قيمة الإرجاع،
تقول ان القيمة التي تم إرجاعها أن الرسالة المحولة،
أو C، وإدخال الأصلي، إذا كان كان تحويل غير ممكن.
>> وبعبارة أخرى، سيحاول العلوي تحويل بريد إلكتروني إلى الحالة العلوي.
وإذا كان الأمر كذلك، فإنه سيكون لإعادته.
ولكن إذا كان لا يمكن لبعض reason-- ربما انها حالة العلوي بالفعل،
ربما انها علامة تعجب أو بعض punctuation-- الآخر
انها مجرد الذهاب الى إعادة C الأصلي،
وهو ما يعني أنني يمكن أن تجعل قانون بلدي مصممة بشكل أفضل على النحو التالي.
>> أنا لا تحتاج الى كل من هذه الخطوط الرتق من التعليمات البرمجية.
جميع خطوط لدي سلط الضوء فقط يمكن
أن انهارت إلى مجرد واحدة بسيطة الخط، الذي هو this-- printf في المئة
ج إلى S قوس العلوي ط.
وهذا من شأنه أن يكون مثال على تصميم أفضل.
>> لماذا تنفيذها في 7 أو 8 خطوط من التعليمات البرمجية، مهما كان أنا فقط
حذف، عند يمكن أن تنهار بدلا من ذلك كل هذا صنع المنطق والقرار
في خط واحد، 13 الآن، أن تعتمد على مكتبة function--
وظيفة التي تأتي مع C، ولكن هذا يفعل بالضبط ما تريد أن تفعله.
وبصراحة، حتى لو أنه لم يأت مع C،
هل يمكن تنفيذ ذلك بنفسك، كما رأيناه، مع الحصول على كثافة سلبي
والحصول على كثافة العمليات إيجابي في الأسبوع الماضي أيضا.
>> هذا الرمز هو الآن أكثر قابلية للقراءة الكثير.
و، في الواقع، إذا كان لنا أن انتقل لأعلى، انظروا كيف أكثر إحكاما بكثير
هذا الإصدار من برنامج بلدي.
انها ثقيلة أعلى قليلا الآن، مع كل هذه تشمل.
ولا بأس بهذا، لأنه الآن أنا واقف على أكتاف من المبرمجين
قبلي.
وأيا كان الذي نفذت إلى الأعلى حقا
فعل لي معروفا، مثل الكثير من نفذت ستيرلينغ حقا
فعل لي معروفا منذ بعض الوقت.
وحتى الآن لدينا برنامج تصميم أفضل
التي تطبق المنطق نفسه بالضبط.
>> يتحدث من ستيرلينغ، اسمحوا لي نمضي قدما ونفعل هذا.
اسمحوا لي أن المضي قدما وحفظ هذا الملف كما stirling.c.
واتضح، يمكننا أن قشر العودة طبقة واحدة أخرى جميلة ببساطة الآن.
انا ذاهب الى المضي قدما وسوط حتى برنامج آخر في main
هنا أن مجرد إعادة الأدوات طول سلسلة النحو التالي.
حتى هنا سطر من التعليمات البرمجية التي يحصل لي سلسلة من المستخدم.
واصلنا استخدام هذا مرارا وتكرارا.
اسمحوا لي أن أقدم نفسي متغير يسمى ن من نوع int الذي يقوم بتخزين رقم.
>> واسمحوا لي أن المضي قدما في القيام منطق التالية.
في حين لا الطابع ن عشر في الصورة لا يساوي مائل 0، والمضي قدما
وزيادة ن.
ومن ثم طباعة printf في المئة ط ن.
أزعم أن هذا البرنامج هنا، دون استدعاء طول السلسلة،
الأرقام على طول السلسلة.
>> والسحر هو تماما مغلفة في خط 8
هنا مع ما يشبه تركيب جديد، هذا مائل 0 في علامات الاقتباس المفردة.
ولكن لماذا هذا؟
حسنا، والنظر في ما كان يحدث كل هذا الوقت.
>> وبوصفها جانبا قبل أن أنسى، وتحقيق أيضا، أنه بالإضافة إلى صفحات الرجل
التي تأتي مع نموذجي نظام لينكس مثل CS50 IDE،
ندرك أننا، في الموظفين بطبيعة الحال، ويكون أيضا
قدم الموقع نسخة هذه الفكرة ذاتها تسمى
reference.cs50.net، التي لديها كل تلك الصفحات الرجل نفسه،
كل ذلك نفسه الوثائق، وكذلك
قليلا مربع في الجزء العلوي الذي يسمح لك لتحويل جميع إلى حد ما
لغة غامضة إلى أقل راحة الوضع، حيث نحن، أعضاء هيئة التدريس،
مرت وحاولت تبسيط بعض من لغة لابقاء الامور
ركز على الأفكار، وليس بعض الجوانب التقنية.
لذلك نضع في اعتبارنا، reference.cs50.net كما مورد آخر كذلك.
>> ولكن لماذا يعمل طول السلسلة في الطريق اقترحت قبل لحظة؟
وهنا اسم Zamyla مرة أخرى.
وهنا اسم Zamyla ل محاصر في، وأظل به،
أن ترسم صورة لكونها، في الواقع، مجرد سلسلة من الأحرف.
لكن Zamyla غير موجود في العزلة في البرنامج.
>> عند كتابة وتشغيل البرنامج، كنت تستخدم جهاز ماكنتوش أو جهاز الكمبيوتر الخاص بك
كما الذاكرة، ذاكرة الوصول العشوائي أو إذا جاز التعبير.
ويمكن ان يخطر لك جهاز الكمبيوتر الخاص بك وجود
الكثير من غيغا بايت من الذاكرة في هذه الأيام.
وأزعج يعني المليارات، حتى مليارات بايت.
>> ولكن دعونا الترجيع في الوقت المناسب.
ونفترض أن نستخدمه كمبيوتر قديمة حقا أن
لديها 32 بايت من الذاكرة فقط.
أستطيع، على شاشة الكمبيوتر، ببساطة رسم هذا على النحو التالي.
>> ويمكنني أن أقول ببساطة أن بلدي كان جهاز الكمبيوتر كل من هذه الذاكرة.
وهذا هو مثل عصا الذاكرة، إذا تذكرون لدينا صورة من آخر مرة.
وإذا كنت مجرد تقسيم هذا في مرات كافية،
أزعم أن لدي 32 بايت من الذاكرة على الشاشة.
>> الآن، في الواقع، لا يسعني الا رسم حتى الآن على هذه الشاشة هنا.
لذلك أنا ذاهب إلى المضي قدما، وفقط من خلال الاتفاقية،
رسم ذاكرة جهاز الكمبيوتر الخاص بي باعتبارها الشبكة، وليس خط تماما كما مستقيم واحد.
على وجه التحديد، ويدعون الآن بأن هذه الشبكة، وهذا 8 من 4 الشبكة،
يمثل فقط كل بايت 32 من الذاكرة المتوفرة في جهاز Mac،
أو متوفرة في جهاز الكمبيوتر الخاص بي.
وانهم التفاف إلى خطين، فقط
لانه يناسب أكثر على الشاشة.
ولكن هذا هو البايت الأول.
هذا هو البايت الثاني.
هذا هو البايت الثالث.
>> وهذا هو البايت ال32.
أو، إذا كنا نعتقد مثل الكمبيوتر عالم، وهذا هو بايت 0، 1، 2، 3، 31.
ولذلك عليك 0-31، إذا بدء العد عند 0.
>> لذلك إذا أردنا استخدام برنامج أن المكالمات الحصول على سلسلة،
ونحصل على سلسلة من الإنسان وكأنني لم يطلق Zamyla، Z-A-M-Y-L-A،
كيف في العالم يفعل الحفاظ على جهاز الكمبيوتر المسار الذي بايت،
التي قطعة من الذاكرة، ينتمي إلى أي سلسلة؟
وبعبارة أخرى، إذا كان لنا أن نشرع في اكتب اسم آخر في الكمبيوتر،
مثل هذا اندى، داعيا الحصول على سلسلة مرة ثانية،
A-N-D-I لديها في نهاية المطاف في ذاكرة الكمبيوتر أيضا.
ولكن كيف؟
>> حسنا، كما تبين أن تحت غطاء محرك السيارة، ما C يفعل عند تخزين سلاسل
أن أنواع الإنسان في، أو أن تأتي من مصدر آخر، هو
يحدد نهاية لها خط مائل عكسي character-- خاص
0، والذي هو مجرد وسيلة خاصة من يقول 80 بت على التوالي.
>> حتى A-- هذا هو استدعاء عدد 97.
وحتى بعض نمط من 8 بت يمثل الرقم العشري 97.
هذا مائل 0 حرفيا عدد 0، NUL يعرف أيضا باسم، N-U-L، على عكس السابق،
N-U-L-L، الذي تحدثنا عنه.
ولكن الآن، ونعرف تماما أن هذا مائل 0 هو فقط 80 بت على التوالي.
>> وانها مجرد هذا الخط في الرمال التي يقول أي شيء إلى اليسار
ينتمي إلى سلسلة واحدة، أو نوع بيانات واحدة.
وأي شيء إلى اليمين ينتمي إلى شيء آخر.
اندى اسم، وفي الوقت نفسه، الذي فقط بصريا
يحدث التفاف إلى الخط الآخر، ولكن هذا مجرد تفصيل الجمالية،
وبالمثل تم NUL إنهاء.
>> بل هو سلسلة من الأحرف A-N-D-I، بالإضافة إلى الطابع السري الخامس،
كل 0 بت، أن ترسم فقط نهاية اسم اندى كذلك.
وإذا كنا ندعو الحصول على سلسلة للمرة الثالثة في الكمبيوتر للحصول على سلسلة مثل
ماريا، M-A-R-I-A، وبالمثل هي ماريا اسم NUL إنهاء مع مائل 0.
>> هذا يختلف اختلافا جذريا من كيف يمكن أن جهاز كمبيوتر عادة
تخزين عدد صحيح أو عدد عشري، أو غيرها أنواع البيانات لا يزال، لاستدعاء،
عدد صحيح هو عادة 32 بت، أو 4 بايت، أو ربما حتى 64 بت،
أو ثمانية بايت.
ولكن العديد من الأوليات في الكمبيوتر في لغة البرمجة
تحتوي على عدد ثابت من بايت تحت hood--
ربما 1، ربما 2، ربما 4، ربما 8.
>> ولكن السلاسل، حسب التصميم، لديها عدد حيوية من الأحرف.
كنت لا تعرف مقدما، حتى أنواع الإنسان في Z-A-M-Y-L-A،
أو M-A-R-I-A أو A-N-D-I. كنت لا تعرف كم مرة كان المستخدم هو الذهاب الى ضرب
لوحة المفاتيح.
لذلك، لا أعرف كيف شخصيات عديدة مقدما
وأنت تسير في حاجة.
>> وهكذا C مجرد نوع من يترك مثل التفصيلي السري تحت غطاء محرك السيارة
في نهاية السلسلة.
بعد تخزين Z-A-M-Y-L-A في الذاكرة، كما أنه يضع فقط أي ما يعادل
من فترة.
في نهاية الجملة، أنه يضع 80 بت، وذلك
لنتذكر فيها Zamyla يبدأ وينتهي.
>> فما هي الصدد، بعد ذلك، لهذا البرنامج؟
هذا البرنامج هنا، ستيرلينغ، هو مجرد آلية
للحصول على سلسلة من المستخدم، خط 6.
السطر 7، أعلن متغير دعا ن وضعه يساوي 0.
>> ثم في خط 8، وأنا ببساطة طلب من السؤال، في حين أن حرف ن ال يفعل
لا تساوي جميع 0 bits-- وبعبارة أخرى، لا
يساوي هذا خاص الطابع، مائل 0، والذي
كان مجرد أن character-- NUL خاص والمضي قدما في مجرد زيادة ن.
>> والحفاظ على القيام بذلك، والحفاظ على القيام بذلك، والحفاظ على القيام بذلك.
وذلك حتى وإن كان في في الماضي كنا قد استخدمت ط،
أنه بخير تماما لغويا لاستخدام ن،
إذا كنت مجرد محاولة ل عد هذه المرة عن قصد،
ونريد فقط أن نسميها ن.
ولذلك فإن هذا يبقى مجرد طرح السؤال، هو الحرف ن عشر من ليالي كل 0S؟
إن لم يكن، ونتطلع إلى نظرة المقبل، ننظر إلى أخرى، ونتطلع إلى اليوم التالي،
ننظر إلى أخرى.
>> ولكن بمجرد أن ترى مائل 0، هذا الخط loop-- من 9 إلى 11-- يتوقف.
يمكنك الخروج من حلقة في حين، ترك داخل أن ن متغير
العد الكلي للجميع الأحرف في سلسلة رأيت،
وبالتالي طباعته.
لذلك دعونا نحاول هذا.
>> اسمحوا لي أن المضي قدما، ودون باستخدام وظيفة ستيرلينغ،
ولكن فقط باستخدام بلدي نسخة محلية الخاصة هنا دعا ستيرلينغ، اسمحوا لي أن المضي قدما
وتشغيل ستيرلينغ، ونوع في شيء مثل Zamyla، والتي أعلم مقدما
هو ستة أحرف.
دعونا نرى ما اذا كان يعمل.
في الواقع، انها ستة.
دعونا نحاول مع روب، ثلاثة أحرف، ثلاثة أحرف كذلك، وهكذا دواليك.
ذلك أن كل ما يحدث تحت غطاء محرك السيارة.
وتلاحظ الاتصالات، ثم، مع الأسبوع الأول
الطبقة، حيث تحدثنا عن شيء من هذا القبيل التجريد،
الذي هو مجرد هذه الطبقات من الأفكار، أو التعقيد، وعلى رأس من المبادئ الأساسية.
هنا، نحن نوع من البحث تحت غطاء محرك السيارة من ستيرلينغ،
إذا جاز التعبير، لمعرفة، كيف سيتم تنفيذ ذلك؟
>> ويمكن أن يعاد تنفيذها أنفسنا.
لكننا أبدا مرة أخرى يذهب لإعادة تنفيذ ستيرلينغ.
نحن ذاهبون لمجرد استخدام ستيرلينغ من أجل
في الواقع للحصول على بعض طول السلاسل.
>> ولكن ليس هناك سحر تحت غطاء محرك السيارة.
إذا كنت تعرف أن تحت غطاء محرك السيارة، سلسلة
هو مجرد سلسلة من الأحرف.
وأن سلسلة من الأحرف جميع يمكن معالجتها رقميا
مع قوس 0، قوس 1، 2 قوس، وأنت
نعرف أن في نهاية سلسلة هو طابع خاص، يمكنك معرفة
كيفية القيام معظم أي شيء في برنامج، لأن كل ما يتلخص
والقراءة والكتابة ذاكرة.
وهذا هو، وتغيير والتطلع في الذاكرة، أو نقل الأشياء
حولها في الذاكرة، والأشياء الطباعة على الشاشة، وهكذا دواليك.
>> لذلك دعونا الآن استخدام هذا المكتشف حديثا فهم ما السلاسل الواقع
هي تحت غطاء محرك السيارة، و قشر العودة طبقة واحدة أخرى
ان ما يصل حتى الآن قمنا تم تجاهل تماما.
ولا سيما، في أي وقت لقد نفذت البرنامج،
لقد كان لدينا هذا سطر من التعليمات البرمجية بالقرب من أعلى معلنا الرئيسية.
ولقد محدد الفراغ الرئيسي كثافة العمليات.
>> وهذا الفراغ داخل الأقواس لديها كنا نقول كل هذا الوقت الذي الرئيسية
نفسه لا يأخذ أية وسائط.
أي مساهمة أن الرئيسي هو ذاهب للحصول على من المستخدم
يجب أن يأتي من بعض الدول الاخرى آلية، مثل الحصول على كثافة العمليات،
أو الحصول على تعويم، أو الحصول على سلسلة، أو بعض وظيفة أخرى.
ولكن تبين أن عند كتابة برنامج،
يمكنك تحديد الواقع أن تقوم هذا البرنامج
تأخذ المدخلات من الإنسان في سطر الأوامر نفسها.
>> وبعبارة أخرى، على الرغم من أننا حتى الآن تم تشغيل فقط ./hello مرحبا
أو برامج مماثلة، كل من البرامج الأخرى التي كنا استخدام،
أننا أنفسنا لم يكتب، وقد تم أخذ، على ما يبدو،
arguments-- سطر الأوامر أشياء مثل جعل.
تقول شيئا مثل جعل، وبعد ذلك الكلمة الثانية.
أو رنة، ويقول لك رنة، ثم والكلمة الثانية، واسم الملف.
>> أو حتى RM أو CP، كما قد شهدت أو استخدامها بالفعل
لإزالة الملفات أو نسخها.
كل تلك اتخاذ ما يسمى arguments-- سطر الأوامر
كلمات إضافية في موجه المحطة.
لكن حتى الآن، ونحن لم يكن لأنفسنا
هذا الترف اتخاذ مدخلات من المستخدم عند تشغيل هو أو هي في الواقع
البرنامج نفسه في سطر الأوامر.
>> ولكن يمكننا أن نفعل ذلك من خلال إعادة إعلان الانتقال الرئيسي إلى الأمام، لا وجود
باطلة بين قوسين، لكن هذه الحجج اثنين
instead-- أول عدد صحيح، وشيء ثاني
الجديد، وهو الأمر الذي نحن في طريقنا للاتصال صفيف، شيئا من هذا القبيل في روح
إلى ما رأيناه في خدش كقائمة، ولكن مجموعة من السلاسل، كما سنرى قريبا.
ولكن دعونا نرى ذلك من خلال على سبيل المثال، قبل أن
نميز تماما ما يعنيه ذلك.
>> حتى إذا ذهبت إلى CS50 IDE هنا، لقد ذهبت إلى الأمام
وأعلن في ملف يسمى argv0.c القالب التالي.
ولاحظ أن الشيء الوحيد وهذا مختلف حتى الآن
هو أنني قمت بتغيير باطل لكثافة العمليات ARGC سلسلة ARGV قوس مفتوح، على مقربة
قوس.
وتلاحظ في الوقت الراهن، هناك لا شيء داخل تلك الأقواس.
>> ليس هناك عدد.
وهناك لا أنا، أو ن، أو أي حرف آخر.
أنا فقط باستخدام بين قوسين معقوفين في الوقت الراهن،
لأسباب سنأتي العودة إليها في مجرد لحظة.
>> والآن ما انا ذاهب الى القيام به هو هذا.
إذا يساوي ARGC يساوي 2-- وأذكر أن يساوي متساوين
هي المشغل المساواة مقارنة اليسار واليمين من أجل المساواة.
انها ليست مهمة المشغل، الذي هو
يساوي واحد، مما يعني نسخة من اليمين إلى اليسار بعض القيمة.
>> إذا يساوي ARGC يساوي 2، أريد أن مثلا، printf، مرحبا، النسب المئوية، سطر جديد
ثم قم بتوصيل in-- وهنا الجديد trick-- ARGV قوس 1، لأسباب
أننا سوف نعود إليها في لحظة.
آخر إذا ARGC لا يساوي 2، وانت تعرف ماذا؟
دعونا المضي قدما، وكالعادة، طباعة من مرحبا العالم دون تبديل.
>> لذلك يبدو أنه إذا ARGC، التي لتقف على عدد حجة، يساوي 2،
انا ذاهب الى طباعة مرحبا شيء أو غيرها.
خلاف ذلك، افتراضيا، وأنا الذهاب لطباعة مرحبا العالم.
فماذا يعني هذا؟
>> حسنا، اسمحوا لي أن المضي قدما وحفظ هذا الملف، ومن ثم لا تجعل argv0،
ثم ./argv0، أدخل.
ويقول مرحبا العالم.
الآن، لماذا؟
>> حسنا، كما تبين في أي وقت كنت تشغيل برنامج في سطر الأوامر،
كنت ملء ما سنقوم دعوة عامة متجه حجة.
وبعبارة أخرى، تلقائيا الكمبيوتر، نظام التشغيل،
سوف يسلم إلى برنامجك نفسها قائمة بجميع الكلمات
أن الإنسان كتبته في موجه، في حال كنت
مبرمج تريد أن تفعل شيء مع تلك المعلومات.
وفي هذه الحالة، فإن الكلمة الوحيدة لقد كتبته في موجه هو ./argv0.
>> وبالتالي فإن عدد من الحجج التي هي يتم تمريرها إلى برنامجي هو واحد فقط.
وبعبارة أخرى، فإن الحجة العد، والمعروف باسم ARGC
هنا كعدد، هي واحدة فقط.
واحد، وبطبيعة الحال، لا يساوي اثنين.
ولذلك هذا هو ما يطبع، مرحبا العالم.
>> ولكن اسمحوا لي أن أغتنم هذه في مكان ما.
اسمحوا لي أن أقول، argv0.
ثم ماذا عن ماريا؟
ثم هاهنا.
>> ولاحظ ما يحدث بطريقة سحرية هنا.
الآن، بدلا من مرحبا العالم، لدي تغير سلوك هذا البرنامج
عن طريق اتخاذ مدخلات ليس من الحصول على سلسلة أو بعض وظيفة أخرى،
ولكن من، على ما يبدو، أمري نفسها، ما كتبته أصلا في.
وأستطيع أن تلعب هذه اللعبة مرة أخرى تغييرها إلى ستيليوس، على سبيل المثال.
>> والآن أرى اسم آخر لا يزال.
وهنا، أود أن أقول اندى.
وأود أن أقول Zamyla.
ويمكننا أن نلعب هذه اللعبة طوال اليوم، مجرد سد في قيم مختلفة،
طالما أنا توفير بالضبط كلمتين في موجه،
بحيث ARGC، حجتي عد، هو 2.
>> لا أرى أن اسم موصول printf، في هذه الحالة هنا؟
لذلك يبدو أننا نعاني الآن القدرة التعبيرية
أخذ المدخلات من آلية أخرى، من ما يسمى سطر الأوامر،
بدلا من الاضطرار إلى الانتظار حتى يقوم المستخدم البرنامج،
ثم يدفع له أو لها باستخدام شيء مثل سلسلة الحصول عليها.
>> فما هو هذا؟
ARGC، مرة أخرى، هو مجرد صحيحا، عدد words-- arguments--
أن المستخدم المقدمة في موجه، في إطار المحطة،
بما في ذلك اسم البرنامج.
لذلك لدينا ./argv0 هو، على نحو فعال، اسم البرنامج،
أو كيف تشغيل البرنامج.
>> أن تحصي ككلمة.
حتى ARGC سيكون 1.
ولكن عندما أكتب ستيليوس، أو اندى، أو Zamyla، أو ماريا،
وهذا يعني أن عدد الحجة هي سنتان.
وحتى الآن هناك كلمتين مرت في.
>> وإشعار، لا يمكننا الاستمرار بهذا المنطق.
إذا أنا في الواقع نقول شيء من هذا القبيل Zamyla تشان،
اسم كامل، وبالتالي تمرير ثلاث حجج في المجموع،
الآن تقول الافتراضي مرة أخرى، لأنه، بطبيعة الحال، 3 لا يساوي 2.
>> وحتى في هذه الطريقة، لا بد لي الوصول عبر ARGV هذه الحجة الجديدة
أننا يمكن من الناحية الفنية استدعاء أي شيء نريده.
ولكن من خلال اتفاقية، انها ARGV وARGC، على التوالي.
ARGV، ناقلات حجة، هو نوع من مرادفا للبرمجة
ميزة في C دعت مجموعة.
>> مجموعة هي قائمة من القيم مشابهة إلى الوراء، إلى الوراء، إلى الوراء، إلى الوراء.
وبعبارة أخرى، إذا واحد هو الصحيح هنا في ذاكرة الوصول العشوائي، واحد القادم هو الصحيح بجانبه،
والحق بجانبه.
انهم ليسوا في كل مكان.
وهذا السيناريو الأخير، حيث الأشياء هي في كل مكان في الذاكرة،
يمكن أن تكون في الواقع ميزة قوية.
ولكن سوف نعود إلى أننا عندما الحديث عن هياكل البيانات مربي الحيوانات.
في الوقت الراهن، ومجموعة ليست سوى قطعة من الذاكرة القريبة،
كل عناصره هي إلى الوراء، إلى الوراء، إلى الوراء، إلى الوراء،
وعموما نفس النوع.
>> لذلك إذا كنت تفكر في، من قبل لحظة، ما هو سلسلة؟
حسنا، سلسلة، مثل Zamyla، Z-A-M-Y-L-A، هو، من الناحية الفنية،
فقط صفيف.
انها مجموعة من الأحرف.
>> وحتى إذا كنا حقا رسم هذا، وأنا فعلت في وقت سابق، وقطعة من الذاكرة،
اتضح أن كل من هذه الأحرف يستغرق بايت.
ثم هناك أن الخاصة شخصية الحارس، مائل 0،
أو كل ثمانية 0 بت، أن ترسم نهاية هذه السلسلة.
لذلك سلسلة، فإنه يتحول خارج، أقتبس سلسلة نهاية الاقتباس،
هو مجرد مجموعة من chara-- شار كونه نوع البيانات الفعلية.
>> والآن ARGV، meanwhile-- دعونا نعود إلى البرنامج.
ARGV، على الرغم من أننا نرى كلمة سلسلة هنا، ليست سلسلة نفسه.
ARGV، ناقلات حجة، هو مجموعة من السلاسل.
>> فكما يمكن أن يكون مجموعة من الشخصيات، هل يمكن أن يكون مستوى أعلى،
مجموعة من strings-- ذلك، على سبيل المثال، عندما كنت كتبته قبل لحظة ./argv0
argv0، الفضاء Z-A-M-Y-L-A، وادعى أن كان ARGV سلسلتين في ./argv0 it--،
وZ-A-M-Y-L-A. في بعبارة أخرى، كان ARGC 2.
لماذا هذا؟
>> حسنا، على نحو فعال، ما الذي يحدث على أن كل من هذه السلاسل
هو، بطبيعة الحال، مجموعة من الأحرف كما كان من قبل، كل الذين الأحرف
يستغرق فترة تصل بايت واحد.
ولا تخلط بين 0 الفعلي في اسم البرنامج مع 0،
وهو ما يعني كل 80 بت.
وZamyla، وفي الوقت نفسه، لا يزال أيضا مجموعة من الأحرف.
>> حتى في نهاية المطاف، فإنه في الحقيقة يبدو مثل هذا تحت غطاء محرك السيارة.
لكن ARGV، حسب طبيعة كيف الرئيسية أعمال، يتيح لي الفرصة لالتفاف كل هذا
يصل الى، اذا صح التعبير، مجموعة أكبر أننا إذا قليلا تبسيط أكثر
ما يشبه الصورة ولا رسم جدا لتصعيد هناك،
هذه المجموعة هي فقط من حجم 2، أول العنصر الذي يحتوي على سلسلة،
العنصر الثاني من الذي يحتوي على سلسلة.
وبدوره، إذا كنت نوع من التكبير على كل
من تلك السلاسل، ما أرى تحت غطاء محرك السيارة
غير أن كل السلسلة فقط مجموعة من الأحرف.
>> الآن، فقط كما هو الحال مع السلاسل، كنا قادرين على الحصول
إلى حرف ط عشر في سلسلة استخدام هذا التدوين قوس مربع.
وبالمثل، مع صفائف بشكل عام، يمكن لنا
استخدام مربع رمز براكيت للحصول على في أي عدد من السلاسل في مجموعة؟
على سبيل المثال، اسمحوا لي والمضي قدما في القيام بذلك.
>> اسمحوا لي أن المضي قدما في إنشاء argv1.c، وهو قليل مختلف هذه المرة.
بدلا من التحقق من وجود argc2، انا ذاهب الى القيام بذلك بدلا من ذلك.
لكثافة أحصل 0، الأول هو أقل من ARGC، وأنا زائد زائد،
ومن ثم طباعتها داخل هذا، في المئة ق، خط جديد، ومن ثم
ARGV قوس ط.
>> لذلك وبعبارة أخرى، أنا لا تتعامل مع الأحرف الفردية في الوقت الراهن.
ARGV، كما يدل على هذه الساحة فارغة تستعد لحق ARGV اسم،
يعني ARGV هو مجموعة من السلاسل.
وARGC هو مجرد كثافة العمليات.
>> هذا الخط هنا، 6، هو قائلا مجموعة ط يساوي 0.
عد كل وسيلة تصل إلى، ولكنها لا تتضمن ARGC.
ثم على كل التكرار، طباعة سلسلة.
ما السلسلة؟
>> سلسلة ط عشر في ARGV.
لذلك حين قبل كنت باستخدام قوس مربع
تدوين للحصول على إيث حرف في سلسلة، الآن
أنا باستخدام التدوين قوس مربع للحصول على سلسلة إيث في صفيف.
حتى انها نوع من طبقة واحدة أعلاه، من الناحية النظرية.
>> وهكذا ما هو أنيق حول هذا البرنامج الآن، إذا كنت تجميع argv1،
ومن ثم القيام ./argv1، ثم اكتب في شيء من هذا القبيل فو بار الباز،
التي هي الكلمات الثلاث الافتراضية التي ل عالم الكمبيوتر يصل لأي وقت
انه أو انها تحتاج بعض الكلمات نائبا، وهاهنا، كل من هذه الكلمات،
بما في ذلك اسم البرنامج، الذي في ARGV في الموقع الأول،
ينتهي تتم طباعتها في وقت واحد.
وإذا قمت بتغيير هذا، وأنا أقول شيء من هذا القبيل argv1 Zamyla تشان،
نحصل على كل ثلاثة من هذه الكلمات، وهو argv0،
argv1، argv2، لأنه في هذه حالة ARGC، العد، هو 3.
>> ولكن ما هو أنيق وإذا فهمت أن ARGV هو مجرد مجموعة من السلاسل،
وعليك أن تدرك أن سلسلة هو مجموعة من الشخصيات،
يمكننا في الواقع نوع من استخدام هذه مربع قوس تدوين عدة مرات
لاختيار سلسلة، ثم اختر شخصية داخل السلسلة،
الغوص في أعمق على النحو التالي.
في هذا المثال، اسمحوا لي ان اذهب قبل ونسمي هذا argv2.c.
وفي هذا المثال، اسمحوا لي أن المضي قدما والقيام following-- لكثافة أحصل 0،
أنا أقل من ARGC، ط زائد بالاضافة الى ذلك، تماما مثل قبل.
حتى في words-- البعض، والآن هذا هو الحصول على معقد بما فيه الكفاية.
ثم انا ذاهب الى القول تكرار عبر السلاسل في ARGV،
كتعليق لنفسي.
ثم انا ذاهب لديها متداخلة للحلقة، والتي ربما
قد فعلت، أو اعتبار القيام، في خدش، حيث
انا ذاهب الى القول int-- أنا لا تنوي استخدام ط مرة أخرى،
لأنني لا أريد أن الظل، أو نوع من الكتابة ط القائمة.
>> أنا ذاهب ل، بدلا من ذلك، يقول ي، ل هذا هو بلدي الذهاب إلى متغير بعد ط،
عندما كنت أحاول فقط ل عد الأرقام البسيطة.
ليحصل ي 0-- وأيضا، ن، هو الذهاب الى الحصول على طول شديد اللهجة من ARGV قوس ط،
طالما ي أقل من متر، ي زائد زائد، قم بما يلي.
وهنا الجزء مثيرة للاهتمام.
>> طباعة حرف وسطر جديد توصيل قوس ARGV ط، ي قوس.
موافق، لذلك اسمحوا لي أن أضيف بعض التعليقات هنا.
أعاد على الحروف في سلسلة الحالية،
طباعة حرف ي ال في سلسلة ط عشر.
وحتى الآن، دعونا النظر ماذا تعني هذه التعليقات.
>> تكرار عبر سلاسل في argv-- كم
السلاسل في ARGV، الذي هو صفيف؟
كثير ARGC، لذلك أنا بالتكرار من أنا يساوي 0 حتى ARGC.
وفي الوقت نفسه، كم من الأحرف هي في سلسلة ط عشر في ARGV؟
>> حسنا، للحصول على هذا الجواب، أنا مجرد دعوة طول السلسلة
على الرعاية I سلسلة الحالية حول، وهو ARGV قوس ط.
وانا ذاهب لتخزين مؤقتا أن قيمة في ن، فقط لأغراض التخزين المؤقت،
لنتذكر أنه من الكفاءة.
ثم انا ذاهب تهيئة ي 0، تستمر طالما ي أقل من ن،
وعلى كل ي التكرار زيادة.
>> ثم هنا، في تعليقي على خط 12،
طباعة حرف، يليه خط جديد،
قوس ARGV على وجه التحديد ط يعطيني سلسلة ط ال
في argv-- حتى الكلمة الأولى، و الكلمة الثانية، والكلمة الثالثة، أيا كان.
ثم الغطس ي في أعمق، ويحصل لي حرف ي ال من تلك الكلمة.
وهكذا، في الواقع، يمكنك علاج ARGV باعتباره متعدد الأبعاد،
كما ثنائي الأبعاد، مجموعة، حيث كل كلمة نوع من النظرات
مثل هذا في عقلك ل العين، وكل حرف
هو نوع من تتكون في عمود، إذا كان ذلك يساعد.
>> في الواقع، عندما كنا ندف هذا عدا في الأسابيع المقبلة،
انها سوف يكون قليلا أكثر تطورا من ذلك.
ولكن هل يمكن حقا التفكير في ذلك، في الوقت الراهن،
كما مجرد هذا ثنائي الأبعاد مجموعة، حيث مستوى واحد منه
هو كل من السلاسل.
ثم إذا كنت الغوص في أعمق، ل يمكن الحصول على الأحرف الفردية
فيه باستخدام هذه الرموز هنا.
>> فما هو الأثر الصافي؟
اسمحوا لي أن المضي قدما في جعل الرتق argv2-- ذلك.
لقد ارتكبت خطأ هنا.
يعلن ضمنا مكتبة ظيفة ستيرلينغ.
لذلك كل هذا الوقت، انها ربما يكون مناسبا
أننا نوع من الانتهاء بالضبط حيث بدأنا.
>> أنا ثمل، معلنا ضمنا مكتبة ظيفة ستيرلينغ.
حسنا انتظر دقيقة.
أتذكر ذلك، خصوصا لأنه هنا.
ولست بحاجة لتشمل string.h في هذا الإصدار من البرنامج.
>> اسمحوا لي أن نمضي قدما وتشمل string.h، ان انقاذ، والمضي قدما
وإعادة ترجمة argv2.
والآن، وهنا نذهب، وجعل argv2، أدخل.
وعلى الرغم من انها قليلا خفي للوهلة الأولى،
لاحظت أن، في الواقع، ما طبعت هي نقطة argv2.
>> ولكن إذا كنت اكتب بعض الكلمات بعد موجه، مثل argv2 Zamyla تشان،
أدخل، أيضا قليلا خفي للوهلة الأولى.
ولكن إذا كان لنا أن انتقل احتياطية، ./argv2 Z-A-M-Y-L-A C-H-A-N.
لذلك قمنا كرر على كل كلمة.
وبدوره، لقد كرر أكثر كل حرف في كلمة واحدة.
>> الآن، وبعد كل هذا، ندرك أن هناك
واحد تفاصيل أخرى كنا نوع تجاهل هذا طوال الوقت.
نحن مازحت فقط بصرف النظر عما يمكن المدخلات الرئيسية ستكون؟
ماذا عن الانتاج الرئيسي؟
>> كل هذا الوقت، كنا مجرد نسخ ولصق
كثافة العمليات كلمة أمام الرئيسي، على الرغم من أنك قد ترى على الانترنت،
في بعض الأحيان بشكل غير صحيح في الإصدارات القديمة من C وجمعها، والتي يقولون انها باطلة،
أو لا شيء على الإطلاق.
ولكن، في الواقع، للحصول على الإصدار من C الذي نستخدمه،
C 11، أو 2011، وتحقيق أنه ينبغي أن يكون كثافة العمليات.
وينبغي أن يكون إما الفراغ أو ARGC وARGV هنا.
>> ولكن لماذا الباحث الرئيسي؟
ما هو العودة في الواقع؟
حسنا، اتضح كل هذا الوقت، أي وقت كنت قد كتبت رئيسي البرنامج
دائما عودته شيء.
لكنه كان يفعل ذلك سرا.
>> أن شيئا ما هو كثافة العمليات، كخط يقترح 5.
ولكن ما كثافة العمليات؟
حسنا، هناك هذا اتفاقية في مجال البرمجة،
حيث لم يكن أي شيء له ذهب خطأ، كل شيء على ما يرام،
برامج وظائف عامة return-- إلى حد ما counterintuitively--
0.
0 يعني عموما كل شيء على ما يرام.
وذلك على الرغم رأيك أنها كاذبة في العديد من السياقات،
في الواقع يعني شيئا جيدا بوجه عام
>> وفي الوقت نفسه، إذا بإرجاع البرنامج 1، أو سلبي 1 أو 5 أو سلبي 42،
أو أي-0 غير ذات قيمة، الذي يدل بشكل عام
وقد ذهب ذلك شيئا خاطئا.
في الواقع، على ماك الخاص بك أو جهاز الكمبيوتر، كنت قد شهدت في الواقع
رسالة خطأ، حيث أنه يقول شيئا أو غيرها، خطأ
كود سلبي 42، أو رمز الخطأ 23، أو شيء من هذا القبيل.
هذا العدد هو عموما مجرد تلميح للمبرمج، أو الشركة
التي جعلت من البرنامج، ما الخطأ الذي حدث ولماذا،
بحيث يمكن أن ننظر من خلال وثائقها أو رمز،
ومعرفة ما خطأ، يعني في الواقع.
انها عموما لا من المفيد لنا مستخدمين النهائيين.
>> ولكن عندما يعود الرئيسية 0، كل شيء على ما يرام.
وإذا لم تقم بتحديد ما الرئيسي يجب أن تعود،
وسوف فقط تلقائيا العودة 0 بالنسبة لك.
ولكن عودته شيء آخر مفيد فعلا.
>> في هذا البرنامج النهائي، واسمحوا لي المضي قدما، وندعو هذه exit.c،
وإدخال آخر من اليوم المواضيع، والمعروفة باسم رمز خطأ.
اسمحوا لي أن نمضي قدما وتشمل لدينا ملفات مألوفة حتى أعلى، تفعل الباحث الرئيسي.
وهذه المرة، دعونا نفعل الباحث ARGC، ARGV سلسلة، ومع أقواس بلدي
ان هذا يعني انه في المصفوفة.
ثم اسمحوا لي أن لا مجرد الاختيار التعقل.
هذه المرة، إذا ARGC لا يساوي 2، ثم أنت تعرف لماذا؟
انسى ذلك.
وانا ذاهب الى القول أنه، مهلا، المستعمل، كنت في عداد المفقودين سيطة سطر الأوامر
ن مائل.
>> ثم هذا كل شيء.
أريد أن خروج.
وانا ذاهب الى استباقي، وقبل الأوان حقا، وعودة
شيء آخر غير الرقم 1.
الذهاب إلى قيمة للمرة الأولى الخطأ الذي يمكن أن يحدث هو 1.
إذا كان لديك بعض الآخر خاطئة الحالة التي قد تحدث،
يمكنك القول عودة 2 أو 3 العودة، أو ربما سلبي 1 أو سلبي 2.
>> هذه ليست سوى رموز الإنهاء التي هي، عموما،
مفيدة فقط للمبرمج، أو الشركة التي هو الشحن البرنامج.
ولكن الحقيقة أنه من ليست 0 ما هو مهم.
حتى إذا كان في هذا البرنامج، وأريد أن تضمن هذا البرنامج فقط
يعمل إذا كان المستخدم يوفر لي مع العد حجة اثنين،
اسم البرنامج، وبعض الدول الاخرى كلمة، ويمكنني أن فرض بقدر ما يلي،
الصراخ المستخدم بقوله printf، في عداد المفقودين سيطة سطر الأوامر،
العودة 1.
التي من شأنها أن مجرد فورا إنهاء البرنامج.
>> إلا إذا يساوي ARGC 2 ونحن ننكب هنا، في هذه النقطة انا ذاهب الى القول،
مرحبا في المئة الصورة، مائل ن، argv1.
وبعبارة أخرى، وأنا لن بعد ARGV 0،
الذي هو مجرد اسم البرنامج.
أريد أن طباعة مرحبا، فاصلة، الكلمة الثانية أن الإنسان كتابتها.
وفي هذه الحالة على خط 13، كل شيء على ما يرام.
>> وأنا أعلم أن ARGC هو 2 منطقيا من هذا البرنامج.
انا ذاهب الى المضي قدما والعودة 0.
بوصفها جانبا، ونضع في اعتبارنا أن هذا صحيح في خدش كذلك.
>> منطقيا، وأنا يمكن أن تفعل هذا وتغلف هذه السطور
من التعليمات البرمجية في هذه آخر فقرة هنا.
ولكن هذا النوع من الطعج داع قانون بلدي.
وأريد أن السوبر من الواضح أنه مهما،
افتراضيا، مرحبا شيء سوف تحصل على المطبوعة،
طالما يتعاون المستخدم.
>> لذلك فإنه من الشائع جدا للاستخدام شرط، فقط إذا،
للقبض على بعض خاطئة الوضع ومن ثم الخروج.
وبعد ذلك، ما دام كل شيء حسنا، ليس لها آخر،
ولكن مجرد رمز خارج ذلك إذا، لأنه
ما يعادلها في هذا قضية معينة، منطقيا.
لذلك أعود 0، فقط ل يعني صراحة كل شيء على ما يرام.
>> إذا أنا حذفت عودة 0، أنه سيكون يفترض تلقائيا بالنسبة لي.
لكن الآن بعد أن أعود واحد في هذه الحالة على الأقل،
أنا ذاهب ل، لحسن التدبير و وضوح، والعودة 0 في هذه الحالة.
وحتى الآن اسمحوا لي أن المضي قدما وجعل الخروج، وهو سغ] الكمال لمجرد ترك.
>> ولكن جعل الخروج، واسمحوا لي ان اذهب قدما ونفعل ./exit، أدخل.
وصاح برنامج في وجهي، في عداد المفقودين سيطة سطر الأوامر.
حسنا، اسمحوا لي أن التعاون.
>> اسمحوا لي بدلا من ذلك القيام ./exit، ديفيد، أدخل.
والآن يقول: مرحبا ديفيد.
ولن تشاهد عادة هذا.
>> ولكن تبين أن هناك طريقة خاصة في لينكس لرؤية الواقع
مع ما للخروج كود خرجت برنامج.
في بعض الأحيان في رسومية العالم مثل نظام التشغيل ماك أو ويندوز،
يمكنك فقط مشاهدة هذه الأرقام عندما رسالة خطأ للملوثات العضوية الثابتة على الشاشة
ومبرمج يظهر لك هذا الرقم.
ولكن إذا كنا نريد أن نرى ما الخطأ الرسالة، يمكننا أن نفعل ذلك here--
./exit ذلك، أدخل والطباعة في عداد المفقودين سيطة سطر الأوامر.
>> إذا أنا الآن القيام $ صدى ؟، وهو خفي يبعث على السخرية المظهر.
لكن $؟
هو التعويذة السحرية أن يقول، مهلا، الكمبيوتر،
قل لي ماذا السابقة كان رمز إنهاء البرنامج.
وأنا هاهنا.
أرى 1، لأن هذا هو ما أنا وقال مهمتي الرئيسية للعودة.
>> وفي الوقت نفسه، إذا كنت تفعل ./exit ديفيد، وهاهنا، وأرى، مرحبا ديفيد.
وإذا كنت الآن القيام $ صدى ؟، أرى مرحبا 0.
وحتى هذا سوف فعلا تكون المعلومات القيمة
في سياق المصحح، وليس ذلك الكثير مما كنت، والإنسان، فإن الرعاية.
ولكن المصحح وغيرها برامج سنستخدم هذا الفصل الدراسي
وغالبا ما ننظر إلى هذا العدد، على الرغم من أنها غارقة نوع من بعيدا
إلا إذا كنت تبحث عن ذلك، ل تحديد ما إذا كان البرنامج أم لا
كان تنفيذ الصحيح أو غير صحيحة.
>> وحتى هذا يقودنا إلى هذا، في نهاية اليوم.
بدأنا اليوم من خلال النظر في تصحيح الأخطاء، وبدوره في الدورة
في حد ذاته، ومن ثم أكثر من المثير للاهتمام، من الناحية الفنية تحت غطاء محرك السيارة
في ما السلاسل، التي تستمر الأسبوع أخذنا فقط أمرا مفروغا منه،
وأخذ بالتأكيد لهم من المسلمات في خدش.
>> نحن ثم نظرت كيف يمكننا الوصول الأحرف الفردية في سلسلة،
ثم أخذت مرة أخرى إلى مستوى أعلى ننظر إلى الأمور، وتبحث في كيفية well--
إذا كنا نريد للحصول على الفرد العناصر في قائمة مثل هيكل،
لا يمكننا أن نفعل ذلك مع سلاسل متعددة؟
ويمكننا مع وسائط سطر الأوامر.
ولكن هذه الصورة هنا من صناديق فقط غير برهانية لهذه الفكرة العامة
من صفيف، أو قائمة، أو ناقل.
وتبعا ل السياق، كل هذه الكلمات
يعني أشياء مختلفة قليلا.
وذلك في C، نحن ذاهبون فقط للحديث عن صفيف.
ومجموعة عبارة عن قطعة من الذاكرة، كل واحد منهم ل
العناصر المتجاورة، والعودة، إلى الوراء، إلى الوراء، إلى الوراء.
>> وتلك العناصر هي، عموما، من نفس نوع البيانات، والحرف،
حرف، حرف، حرف، أو سلسلة، سلسلة، سلسلة، سلسلة، أو الباحث،
الباحث، الباحث، أيا كانت نحن نحاول أن المخزن.
ولكن في نهاية المطاف، وهذا هو ما يبدو من الناحية النظرية.
كنت تأخذ الخاص بك ذاكرة الكمبيوتر أو ذاكرة الوصول العشوائي.
وكنت نحت بها إلى صناديق الحجم مماثل، وكلها
عدنا إلى الوراء، ل العودة إلى الوراء في هذا الطريق.
>> وما هو لطيف حول هذه الفكرة، وحقيقة
أننا يمكن أن تعبر عن القيم في هذا الطريق مع أول من هياكل البيانات لدينا
في الصف، يعني أننا يمكن أن نبدأ حل المشاكل مع رمز
التي جاءت حتى حدسي في الأسبوع 0.
سوف تتذكر الهاتف المثال كتاب، حيث
استخدمنا فرق تسد، أو خوارزمية البحث الثنائية،
للتدقيق من خلال ككل مجموعة من الأسماء والأرقام.
لكن افترضنا، أذكر، أن هذا تم فرز دليل الهاتف بالفعل،
ان شخصا آخر له بالفعل أحسب نظرا out-- قائمة بأسماء
وnumbers-- كيفية ترتيبها حسب الأحرف الأبجدية.
والآن بعد أن في C نحن، أيضا، لديها القدرة
لوضع الامور، وليس فعليا في دليل الهاتف
ولكن عمليا في الكمبيوتر الذاكرة، سوف نكون قادرين الأسبوع المقبل
لإدخال مرة أخرى this-- الأول هياكل البيانات لدينا في array--
ولكن الأهم من ذلك، الكمبيوتر الفعلي خوارزميات العلوم تنفيذها
في التعليمات البرمجية، التي يمكننا تخزين البيانات في هياكل من هذا القبيل،
ومن ثم البدء في معالجته، و لحل فعلا مشاكل معها،
وبناء على أعلى من ذلك، في نهاية المطاف، وبرامج في C،
في بيثون، في جافا سكريبت، الاستعلام عن قواعد البيانات مع SQL؟
>> وسنرى أن كل هذه أفكار مختلفة التعشيق.
لكنه الآن، أذكر أن المجال الذي قدمنا ​​اليوم
كان هذا الشيء هنا، و عالم التشفير.
وبين المشاكل القادمة أنت نفسك سيحل هو فن الترميز،
الهرولة والهرولة دي المعلومات، والتشفير
وفك رموز النص، وعلى افتراض نهاية المطاف
عليك أن تعرف الآن ما هو تحت غطاء محرك السيارة
بحيث عندما ترى أو استقبال رسالة من هذا القبيل، ل
نفسك يمكن فك ذلك.
كل هذا، والمزيد من الوقت القادم.
>> [تشغيل الفيديو]
>> -Mover وصلت لتوها.
انا ذاهب للذهاب زيارة أستاذ كليته.
نعم.
مرحبا.
انه انت.
انتظر!
ديفيد.
أنا مجرد محاولة لمعرفة ما حدث لك.
من فضلك، يمكن أن يساعد أي شيء.
كنت كليته الحجرة، لم تكن أنت؟
كنت هناك معه عندما أنهى مشروع CS50؟
>> [موسيقى]
>> كان -من CS50.
>> أنا أحب هذا المكان.
>> -Eat تصل.
ونحن في طريقنا للخروج من الأعمال.
>> [نهاية قراءة]