[عزف الموسيقى] J. DAVID مالان: حسنا. هذا هو CS50، وهذا هي نهاية أسبوع 2. حتى اليوم، نحن ذاهبون مواصلة نظرتنا كيف نمثلها الأشياء تحت hood-- الابتعاد من أرقام مثل الأعداد الصحيحة والقيم النقطة العائمة والتركيز على الاوتار و برامج في نهاية المطاف أكثر إثارة للاهتمام. ولكن سنقوم أيضا أن تأخذ نظرة على زوجين من problems-- نطاق محدد أولها سوف أن تنطوي على التشفير، فن الهرولة المعلومات، الذي كنت انظر أعلاه هنا هي صورة لراديو اليتيم آني حلقة فك سرية من الأمس. هذا هو في الواقع شكل بدائي جدا وشكل الصديقة للطفل من cryptopgraphy حيث هذا الخاتم اثنين من disks-- داخل واحد واحد خارج. وعن طريق تناوب احدة من تلك، يمكنك خط الأساس يصل خطابات مثل من خلال Z مع رسائل أخرى مثل B من خلال A. وبعبارة أخرى، يمكنك تدوير حرفيا الأبجدية، وبالتالي الخروج مع تعيين من رسائل إلى خطابات بحيث، إذا كنت أراد أن يرسل رسالة سرية لشخص مثل آني، يمكن أن تكتب أسفل الرسالة ثم تناوب الحروف، حيث، إذا كنت تعني يقول "A،" كنت بدلا من ذلك قل "B" كنت أقصد أن أقول "B" يمكنك بدلا من ذلك قل "C" - أو شيء أكثر قليلا ذكي من that-- ثم، في نهاية المطاف، طالما آني لديه هذا فك حلقة، وقالت انها يمكن فك شفرة الرسالة. الآن، تذكرون، في الواقع، أن هذا واستخدمت في الفيلم الشهير جدا أن يلعب nauseum الإعلانية خلال موسم عيد الميلاد. دعونا نلقي نظرة هنا. الخاص Ralphie باركر: "سواء كان ذلك معروفة للجميع في ملخص أن رالف باركر يعين بموجبه عضوا في ليتل اليتيم آني السرية يحق دائرة ولجميع الأوسمة والمزايا التي تحدث بها ". PARKER الخاص Ralphie (رواية): وقع ليتل اليتيم آني. بالعطف وبيار اندريه! في الحبر. الأوسمة والفوائد، بالفعل في سن التاسعة. [عزف الموسيقى] [RADIO الثرثرة] PARKER الخاص Ralphie: هيا. دعونا الحصول على معها. أنا لا تحتاج الى كل ذلك الجاز حول المهربين والقراصنة. RADIO المذيع: الاستماع غدا ليلة مغامرة الختامية من سفينة القراصنة الأسود. الآن، حان الوقت للآني رسالة سرية بالنسبة لك أعضاء من الدائرة السرية. تذكر أطفال، فقط أعضاء من الدائرة السرية آني يمكن فك شفرة رسالة سرية آني. تذكر، آني وهذا يتوقف على لك. وضع العلامات الخاصة بك لB-2. هنا هو message-- 12، 11، 2-- PARKER الخاص Ralphie (رواية): I أنا في أول لقائي السري. RADIO المذيع: --25، 14، 11، 18، 16-- PARKER الخاص Ralphie (رواية): أوه، كان بيير كبيرة في هذه الليلة صوت. ويمكنني أن أقول أن الليلة وكانت رسالة مهمة حقا. RADIO المذيع: --3، 25. هذا هو رسالة من آني نفسها. تذكر، لا تخبر أحدا. [يلهث] PARKER الخاص Ralphie (رواية): تسعين ثانية في وقت لاحق، وأنا في الغرفة الوحيدة في المنزل الذي ولد من تسعة يمكن الجلوس في الخصوصية وفك. آه. "ب" [ضحك خافت] PARKER الخاص Ralphie (رواية): ذهبت إلى أخرى. "هاء" الكلمة الأولى هي "يكون". نعم! كانت قادمة من الأسهل الآن. "U." [ضحك خافت] RANDY PARKER: فصيل عبد الواحد، هيا، الخاص Ralphie. أنا فلدي تذهب! PARKER الخاص Ralphie: سأكون صولا، ما. جي الازيز. "T." "O." "مما لا شك فيه ل"." احرص على "ماذا؟ ما كان ليتل اليتيم آني أحاول أن أقول؟ "مما لا شك فيه أن" ما؟ الأم: الخاص Ralphie، وقد حصلت راندي للذهاب. هل يرجى يخرج؟ PARKER الخاص Ralphie: حسنا يا أمي! سأكون من الصحيح! PARKER الخاص Ralphie (رواية): كنت تقترب الآن. كان التوتر الفظيع. ما كان عليه؟ مصير كوكب الأرض قد يتعطل في الميزان. الأم: الخاص Ralphie، وراندي حصلت على الذهاب! PARKER الخاص Ralphie: سوف يكون على حق خارج، ليبكي بصوت عال! PARKER الخاص Ralphie (رواية): تقريبا هناك! حلقت أصابعي! كان ذهني فخ الصلب. صدي كل مسام. وكان واضحا تقريبا! نعم! نعم! نعم! نعم! الخاص Ralphie باركر: "مما لا شك فيه شرب فالتين الخاص ". فالتين؟ تجاري تافه؟ [عزف الموسيقى] PARKER الخاص Ralphie: ابن العاهرة. [يضحك] J. DAVID مالان: حتى أن يتم بعد ذلك لمحة على ما التشفير يمكن أن يكون لthis-- ل شرب من الأمس. ولذلك فإن إعلان سريع. إذا أنت حر هذا الجمعة عند 13:15 وسوف ترغب في الانضمام إلينا CS50 الغداء، التوجه إلى هذا الرابط هنا. يأتي أولا، يخدم أولا كالمعتاد. ولكن مع مرور الوقت، ونحن سوف نتأكد من أن معظم أي شخص ترغب في المشاركة قد جدولة الحكيم. حتى السلاسل. لدينا Zamyla-- منهم كنت قد اجتمعت الآن على الأرجح في مشكلة تعيين 1-- التي هو مكتوبة اسم الآن. وافترض أنك كتبته اسمها في برنامج الكمبيوتر هذا استخدام شيء من هذا القبيل getString. من أجل استرداد تلك المفاتيح، كيف نذهب نحو يمثل سلسلة، كلمة، فقرة، أو رسائل متعددة مثل هذه هنا؟ تحدثنا في المرة السابقة عن الأعداد الصحيحة والمشاكل التي تنشأ مع تجاوز عدد صحيح والقيم النقطة العائمة والمشاكل التي تنشأ ضمن الدقة. مع سلاسل، فإننا على الأقل لدينا أكثر قليلا من المرونة لأن strings-- فقط في world-- حقيقية يمكن أن يكون طول التعسفي جدا. باختصار جدا، طويلة جدا. ولكن حتى ذلك الحين، ونحن في طريقنا إلى يمكن أن تجد أجهزة الكمبيوتر أحيانا نفاد الذاكرة وحتى لا تخزين سلسلة كبيرة بما يكفي. لكنه الآن، دعونا نبدأ لتصور سلسلة ك شيء في هذه المربعات هنا. حتى هذه ستة صناديق كل منها يمثل حرف أو "شار". لذلك أذكر أن "شار" - ج-H-A-r-- هو أحد أنواع البيانات المضمنة في C. وما هو لطيف هو أنه يمكنك استخدام هذا النوع من بوصفها لبنة، قطعة اللغز، اذا صح التعبير، لتشكيل نوع أكبر من البيانات التي سنواصل الدعوة إلى "سلسلة". الآن، ما هو مفيد حول التفكير حول أشياء مثل سلاسل بهذه الطريقة؟ حسنا، اتضح ما في وسعنا الاستفادة فعلا هذا الهيكل في الواقع للوصول إلى الأحرف الفردية بطريقة واضحة جدا. انا ذاهب الى المضي قدما وخلق ملف يسمى "stringzero.c" ولكن يمكنك أن نسميها ما تريد. وعلى موقع بالطبع هو بالفعل هذا المثال مقدما، لذلك أنت لا تحتاج إلى اكتب كل شيء. وانا ذاهب الى المضي قدما وبه أولا الفراغ الرئيسي كثافة العمليات. وخلال بضعة أيام، سنبدأ لندف بصرف النظر ما هو الفراغ هنا، لماذا من الباحث المقبل الى الأصل، وهكذا دواليك. لكنه الآن، دعونا نواصل لنسخ لصق ذلك. انا ذاهب الى إعلان سلسلة تسمى ق. وانا ذاهب الى العودة من GetString مهما كانت أنواع المستخدم في. هذه ستكون بسيطة برنامج، أي تعليمات، أنا ذاهب لمجرد عمياء نتوقع أن المستخدم يعرف ما يجب القيام به ليبقيه بسيط. والآن أنا ذاهب ليكون حلقة for. وداخل بلدي لحلقة أنا ستكون لدينا كثافة العمليات ط يحصل الصفر. وأنا هو، مرة أخرى، مجرد اتفاقية، متغير مؤشر لالعد، ولكن يمكن أن نسمي هذا كل ما أريد. انا ذاهب الى القيام ط أقل than-- جيدا اسم Zamyla هو ست رسائل طويلة. لذلك أنا ذاهب الى بجد التعليمات البرمجية التي توجد في الوقت الراهن. وبعد ذلك + +. والآن داخل هذه مجعد الأقواس انا ذاهب الى القيام printf، وأريد أن طباعة واحد الحرف في وقت واحد. لذلك أنا ذاهب لاستخدام٪ ج ل ربما للمرة الأولى. ثم أريد أن طباعة كل الحرف على السطر الخاص به. لذلك أنا ذاهب لوضع يذكر مائل ن هناك. وثيق الاقتباس. والآن أريد أن أفعل شيئا هنا. أريد لطباعة حرف معين في السلسلة، ق، وأنا بالتكرار من صفر على ما يصل إلى ستة. وبعبارة أخرى، أريد أن طباعة الطابع i'th من ق. الآن كيف يمكن أن أفعل هذا؟ كذلك مثل الكثير من الصناديق في هذا التمثيل هنا، نوعا ما، تستحضر فكرة الملاكمة حروف، يمكنك أن تفعل بالمثل أن في بناء جملة C ببساطة عن طريق تحديد، أريد أن تطبع ثانية في i'th الحرف. باستخدام الأقواس المربعة على لوحة مفاتيح الكمبيوتر التي على لوحة مفاتيح الولايات المتحدة هي عموما فوق مفتاح عودتك. وهذا ليس صحيحا تماما بعد، كما كنت قد لاحظت. ولكن انا ذاهب الى نوع من صياغة عمياء قدما هنا. وانا ذاهب الى القيام به جعل سلسلة 0. ولكن قبل أن أفعل هذا، دعونا نرى ما اذا كنا لا يمكن توقع بعض الأخطاء الشائعة. يتم هذا الانتقال لتجميع؟ لا، أنا في عداد المفقودين في مجمله مجموعة من الأشياء. المكتبات سمعت. ذلك الذي رأس ملفات ربما أريد أن أضيف هنا؟ نعم. الجمهور: تحتاج معيار I / O [غير مسموع] J. DAVID مالان: ممتاز. لذلك أنا بحاجة القياسية I / O. لماذا الغرض أريد القياسية I / O؟ لprintf. بحيث تشمل stdio.h. وأقترح عليك أيضا أنني تشمل المكتبة CS50 لسبب ما؟ لديك السلاسل. ولذا فإننا سوف نرى ما تقوم مكتبة CS50 ل لخلق هذه الفكرة من سلسلة. لكنه الآن، يمكنك مجرد التفكير لأنها نوع البيانات الفعلية. بحيث يبدو أن قليلا تنظيفها. والآن انا ذاهب الى المضي قدما وبالفعل لا تجعل سلسلة 0. المترجمة. لذلك هذا امر جيد. لذلك اسمحوا لي أن ./string0 تكبير حتى نتمكن نرى عن كثب ما يحدث. دخول. Z-A-M-Y-L-A دخول. ولقد طباعتها إلى اسم Zamyla ل. لذلك هذا امر جيد جدا. حتى الآن دعونا نمضي قدما و تشغيل هذا البرنامج مرة أخرى، واكتب اسم من Daven الكامل. مفاجأة، مفاجأة. دخول. هم. نحن لم المطبوعة في Daven الاسم الكامل بشكل صحيح. الآن هذا ينبغي أن يكون واضحا في استذكار بسبب ما، نوعا ما، قرار تصميم غبي؟ نعم، أنا الثابت ترميز لل ستة داخل بلدي لحلقة. الآن فعلت ذلك فقط ل كنت أعرف اسم Zamyla ل كان على وشك أن ستة حروف. ولكن بالتأكيد هذا ليس حل عام. حتى اتضح نستطيع حيوي معرفة طول سلسلة بواسطة استدعاء دالة يسمى strlen. مرة أخرى، عمدا اسمه بإيجاز فقط لجعله أكثر ملاءمة للكتابة. ولكن هذا مرادفا لل الحصول على طول السلسلة. انا ذاهب للذهاب مرة أخرى إلى محطة بلدي نافذة وإعادة تشغيل المجمع. لكنه يصرخ في وجهي. ضمنا إعلان وظيفة المكتبة strlen مع نوع غير موقعة كثافة العمليات const-- أنا تائه. تماما. لذلك، خاصة ك عيون تبدأ في الصقيل على مع رسائل خطأ مثل هذا، والتركيز بصدق على الكلمات القليلة الأولى. ونحن نعلم أن المشكلة هي في خط 8، كما هو مبين هنا. وانها في سلسلة 0.c. معلنا ضمنا وظيفة المكتبة strlen. بحيث يتم عادة الذهاب الى تكون نمطا من رسائل الخطأ. معلنا ضمنا شيئا. ذلك باختصار ماذا لي بدا فعلت بالنسبة لخط 8، هنا. ما قد يكون الحل حتى يكون إذا كنت قد استخدمت أبدا strlen نفسك؟ الجمهور: جزء من مكتبة المختلفة؟ J. DAVID مالان: الجزء مكتبة مختلفة. حتى يعلن ذلك، إذا جاز التعبير. هو مذكور في بعض الملفات بخلاف stdio.h وCS50.h. الآن أين هو تعريفها؟ أن نكون صادقين، أنت إما أن فقط أعرف هذا من على قمة رأسك، أو كنت جوجل هذه ومعرفة. أو تعرف هذا، لقد فتحت في CS50 الأجهزة البرنامج المحطة، التي هو مجرد، النسخة الكاملة من الشاشة الكبيرة ما هو في الجزء السفلي من نافذة gedit ل. واتضح أن هناك قيادة مقتضبة بالمثل، ودعا الرجل للدليل، حيث إذا كتبت في اسم وظيفة وهاهنا، ستحصل على العودة إلى حد ما وثائق غامضة. انها مجرد نص أن عموما يبدو شيئا قليلا من هذا القبيل. انها قليلا الساحق للوهلة الأولى. ولكن بصراحة أنا ذاهب ل السماح عيني الصقيل على والتركيز فقط على جزء ما يهمني في الوقت الراهن. وهو بذلك. والتي تبدو مثل هيكليا شيء أنا على دراية. والواقع أن الصفحة رجل، لذلك في الكلام، وسوف اقول لكم ما في رأس الملف وظيفة مثل strlen يعرف. لذلك أنا ذاهب لنعود الآن إلى gedit. وانا ذاهب الى المضي قدما و إضافة هنا # تشمل وحفظ الملف. انا ذاهب لمسح الشاشة مع السيطرة L إذا كنت تتساءل. وانا ذاهب الى إعادة تشغيل الماكياج string.0، يجمع هذا الوقت. ./string.0 Zamyla. على ما يبدو للعمل دعني أذهب ثم أعد قبل ذلك مع دافنبورت. دخول. وذلك، أيضا، بدا للعمل. لذا فإننا يمكن أن نفعل ما هو أفضل قليلا من هذا، رغم ذلك، يمكننا أن نبدأ لأشياء مرتبة ما يصل قليلا. وانا ذاهب الى الواقع إدخال شيء آخر الآن. انا ذاهب الى المضي قدما و حفظ هذا في ملف مختلف. وانا ذاهب لاستدعاء هذا الملف string1.c فقط أن تكون متسقة مع رمز عليك أن تكون قادرا على العثور على الانترنت. ودعونا نركز في يوم بالضبط نفس الرمز. اتضح أن لدي كان نوع من جني من المسلمات أن جهاز الكمبيوتر المحمول، وفي المقابل، فإن الأجهزة CS50 لديه الكثير من الذاكرة، والكثير من ذاكرة الوصول العشوائي، والكثير من بايت مساحة الذي يمكنني تخزين السلاسل. لكن الواقع لو كنت كتبته طويلا بما فيه الكفاية، ويكفي ضربات المفاتيح، و أستطيع في نوع نظرية في المزيد من الشخصيات من جهاز الكمبيوتر الخاص بي لديه جسديا الذاكرة. وهذا هو إشكالية. مثل الكثير من كثافة العمليات يمكن فقط عد عالية جدا، من الناحية النظرية، يمكنك الالزام فقط الكثير من الشخصيات في ذاكرة الوصول العشوائي الكمبيوتر الخاص بك أو عشوائية ذاكرة الوصول. لذلك كنت قد توقع أفضل هذه المشكلة، حتى على الرغم من أنه قد تكون نادرة حالة الزاوية، إذا جاز التعبير. لا يحدث ذلك في كثير من الأحيان، يمكن أن يحدث. واذا حدث ذلك وأنا لا توقع وبرنامج لذلك، برنامجي يمكن أن تفعله الذي يعرف ما. تجميد، شنق، تمهيد، أيا كان. شيء قد يحدث كان متوقعا. ذلك ما أنا ذاهب الى القيام به الآن، من الآن فصاعدا حقا، هو قبل أي وقت مضى عمياء استخدام متغير مثل ق أن تم تعيين قيمة الإرجاع بعض من وظيفة أخرى مثل getstring، انا ذاهب للتأكد من أن قيمتها صالحة. إذا كنت لا تعرف إلا من بعد قراءة وثائق CS50 لgetstring، والتي في النهاية سوف نشير لكم في، أن getstring بإرجاع رمز خاص دعا NULL، N-U-L-L في جميع القبعات، وإذا كان هناك شيء يذهب على نحو خاطئ. لذلك عادة، فإنه بإرجاع سلسلة. لكن على خلاف ذلك اذا عاد N-U-L-L-- سنرى في النهاية ما الذي حقا means-- هذا يعني فقط حدث شيء سيئ. الآن هذا يعني، يشبه إلى حد كبير في خدش، أستطيع أن تحقق شرط هنا في C، إذا ق لا يساوي NULL. حتى إذا كنت لم أر هذا من قبل، هذا يعني فقط لا يساوي. لذلك فمن عكس متساوين متساوية، والتي، أذكر، يختلف من واحدة يساوي، وهو الواجب. حتى إذا ق لا يساوي NULL، ثم القيام فقط أريد أن تنفيذ هذه الأسطر من التعليمات البرمجية. لذلك وبعبارة أخرى، قبل أن تغوص في عمياء وتبدأ بالتكرار أكثر من ثانية، والتعامل معها كما لو أنها تسلسل حرفا، انا ذاهب للتحقق أولا، انتظر لحظة، هو بالتأكيد ليست تساوي هذه القيمة خاصة، NULL؟ لأنه إذا كان كذلك، يمكن أن تحدث أمور سيئة. والآن، تفترض أن الأمور سيئة يحدث يعني تعطل البرنامج الخاص بك، وأنت لا يمكن استرداد بالضرورة. لذلك بصراحة، يبدو أقبح. انها نوع من الخلط الآن إلى إلقاء نظرة. ولكن هذا سوف تصبح أكثر قبل فترة طويلة مألوفة. ولكن انا ذاهب الى اقتراح الآن تحسن الآخر. هذا التحسن إلى صحتها. برنامجي هو الآن الأصح، ل في حالة نادرة أن الذاكرة لا تكفي موجود، وأنا على التعامل معها، وسأفعل فقط لا شيء. أنا على الأقل لا تحطم الطائرة. ولكن دعونا نفعل النسخة النهائية هنا. ودعا ملف string2.c. انا ذاهب الى أن لصق نفس رمز لمجرد لحظة، وانا ذاهب الى تسليط الضوء على هذا خط، 11، هنا، لمجرد لحظة. الآن فإن الواقع هو أن المجمعين الذكية مثل رنة يمكن إصلاح هذا بالنسبة لنا وراء الكواليس دون معرفة لدينا من أي وقت مضى. ولكن دعونا نفكر في هذا في الأساس باعتبارها مشكلة تصميم. هذا سطر من التعليمات البرمجية هو، بطبيعة الحال، قائلا تهيئة بعض متغير ط إلى 0. هذا هو بسيط جدا. وما هو هذا مرة أخرى البيان هنا، أنا + +، تفعل؟ لقد رأينا ذلك من قبل، ولكننا لم يتحدث حقا عن ذلك. الجمهور: تزايد ط. J. DAVID مالان: تزايد ط. لذلك على كل التكرار من خلال هذه الحلقة، في كل دورة، كنت تزايد ط تلو الآخر. لذلك يحصل على أكبر، وأكبر، و أكبر حتى إنهاء الحلقة. كيف تنهي؟ كذلك هناك وسط هذا الشرط الذي نحن قد استخدمت من قبل. كنت قد رأيت في و كثروو في مجموعة P. ولكن ما هو هذا القول؟ هل الحلقة التالية حتى دمت أقل من ماذا؟ الجمهور: طول السلسلة. J. DAVID مالان: و طول السلسلة. لذلك يترجم نظيفة جدا إلى الإنجليزية في هذا الاتجاه. الآن المشكلة هي أنه في كل مرة كنت تكرار خلال هذه الحلقة من الناحية النظرية، أنا أسأل هذا السؤال. هل أنا أقل من طول سلسلة من ليالي؟ هل أنا أقل من طول سلسلة من ليالي؟ الآن هو أنني المتغيرة على كل التكرار؟ هو عليه. بسبب ++. لذلك كل التكرار الأول هو الحصول على أكبر. ولكن هو الحصول على أكبر ق، أو أصغر، أو تغيير على الإطلاق؟ رقم وذلك من حيث التصميم، واحدة من محاور جنبا إلى جنب التي نحاول تقييم كود في الصف، وهذا يشعر نوع من الغباء. وكأنك حرفيا، على كل التكرار من هذه الحلقة يسأل نفس السؤال اللعين مرة أخرى، ومرة أخرى، ومرة ​​أخرى، وحرفيا انها لن تغيير. على الأقل إذا لم أكن لمس ق و يحاول تغيير محتويات ق. لذلك يمكنني أن أفعل أفضل قليلا من هذا. وما أنا ذاهب الى القيام به هو لا إعلان واحد فقط ط متغير، ولكن المتغير الثاني وسوف أكون تعسفا، لكن تقليديا، يطلق عليه ن. تعيين ن يساوي طول سلسلة من ق. ثم هنا، أنا ذاهب ل تفعل القليل من التحسين ذكي، لذلك في الكلام، وأنه في نهاية اليوم ليس أكثر ولا أقل صحيح صحيح من ذي قبل. ولكن هذا التصميم أفضل. في حقيقة أن أنا باستخدام وقت أقل، ودورات وحدة المعالجة المركزية أقل، لذلك جاز التعبير، للرد على نفسه السؤال، ولكن مرة واحدة فقط. أي أسئلة حول هذا العام مبدأ التحسن، يقول والكفاءة في البرنامج؟ نعم؟ الجمهور: لماذا استخدام [غير مسموع]؟ J. DAVID مالان: سؤال جيد. فلماذا لا نضع ++ على نهاية ط بدلا من بداية أنا؟ في هذه الحالة، فقد أي تأثير وظيفي. وبشكل عام، أنا أميل إلى استخدام المشغل بوستفيكس بحيث انها أكثر من ذلك بقليل واضحة و إلى متى العملية يحدث. بالنسبة لأولئك غير مألوف، هناك آخر البيانات حيث يمكن أن تفعله ++ ط. هذه هي وظيفيا ما يعادلها في هذه الحالة لأنه لا يوجد أي شيء آخر حول ذلك incrementation. ولكن يمكنك الخروج مع حالات وخطوط من التعليمات البرمجية حيث أن يحدث فرقا. لذلك عموما، ونحن لا حتى الحديث عن هذا واحد. لأن بصراحة، فإنه يجعل لديك كود أكثر جنسية، ونوع من المعطف، وأحرف أقل. ولكن الواقع هو انها أصعب بكثير، أعتقد، حتى بالنسبة لي للالتفاف ذهني حوله أحيانا، ترتيب العمليات. ذلك جانبا، إذا كنت حقا لا أحب هذا، حتى وإن كان هذا هو نوع من مثير تبحث، يمكنك أيضا القيام ط + = 1، وهو نسخة أقبح من نفس الفكرة لبوستفيكس incrementation. أقول قولي هذا ولكم يجب أن يسخر منه، ولكن سوف يأتون لرؤية الكود كما شيء جميل قبل فترة طويلة. [ضحك] J. DAVID مالان: الحق؟ نعم. السؤال في الوسط. الجمهور: هل انت بحاجة الى القول ن الباحث؟ J. DAVID مالان: أنت تفعل لا حاجة للقول ن الباحث. ذلك لأنه سبق أن قلنا كثافة العمليات، أنت لست بحاجة إلى أن أقول مرة أخرى. الصيد هو أن ن أن يكون نفس نوع البيانات كما قلت. ذلك أن مجرد الراحة هنا. نعم. الجمهور: هل يمكن أن يذهب أكثر من قوس الطابع الطباعة ق ط مرة أخرى؟ J. DAVID مالان: بالتأكيد. حتى٪ ج، أذكر من آخر الوقت، هو مجرد نائب. وهو ما يعني وضع شار هنا. ن مائل، وبطبيعة الحال، تماما وضع وسائل فاصل أسطر هنا. بحيث يترك فقط، والآن، هذه القطعة من تركيب جديد. وهذا القول حرفيا، والاستيلاء سلسلة تسمى ق وتذهب الحصول على الطابع i'th، إذا جاز التعبير. وأقول دائما الطابع i'th لأنه في كل التكرار من هذه الحلقة انها كما لو أننا تطبع من أول ق قوس 0، كما قد يقول مبرمج. ثم ق قوس 1، ثم ق قوس 2، ثم 3، ثم 4. ولكن بالطبع انها متغير، لذلك أنا مجرد تعبير عن ذلك مع ط. مفتاح، رغم ذلك، هو أن ندرك، خاصة إذا كنت لم تم التأقلم إلى هذا العالم البرمجة، حيث أننا جميعا يبدو أن العد من الصفر، فلدي بدء العد من الصفر الآن. لأن السلاسل، الحرف الأول، و ض في Zamyla هو للأفضل أو للأسوأ الذهاب للعيش في مكان الرقم صفر. كل الحق، لذلك اسمحوا لي أن يجمع يعود بنا إلى هنا Zamyla ونرى ما يحدث في الواقع تحت غطاء محرك السيارة. لذلك هناك هذه الفكرة من نوع الصب. قد يكون لديك بالفعل لعبت مع هذا بالفعل، ربما لهاكر P طبعة من مجموعة واحدة. ولكن نوع الصب يشير فقط إلى القدرة في C وبعض اللغات الأخرى لتحويل نوع بيانات واحد إلى آخر. الآن كيف يمكن أن نرى هذا بشكل مباشر جدا؟ لذلك هذا، أذكر، هو بداية من الأبجدية الإنجليزية. والسياق، يتذكر، من مثل قبل اسبوع هو ASCII. قانون القياسية الأمريكية لتبادل المعلومات. الذي هو مجرد وسيلة طويلة حقا لقول تعيين من الرسائل إلى أرقام، والأرقام لمن الحروف. لذلك من A إلى M هنا، نقطة نقطة نقطة، يصطف مع، أذكر، الرقم العشري 65 على ما يصل. ونحن لم نتحدث عن هذا صراحة، ولكن بالتأكيد هناك مماثلة أرقام لأحرف صغيرة. وفي الواقع، هناك. قرر العالم بضع سنوات قبل أن قليلا، وأحرف صغيرة، ستكون 97. وقليل ب تسير لتكون 98، وهكذا دواليك. وأي مفتاح آخر على لوحة المفاتيح، وهناك سيكون نمطا مماثلا من البتات. أو مكافئ، رقم عشري. لذا فإن السؤال المطروح، إذن، هو كيف يمكننا نرى في الواقع هذا تحت غطاء محرك السيارة؟ لذلك أنا ذاهب للذهاب الى gedit مرة أخرى. وبدلا من نوع هذا واحد من الصفر، انا ذاهب الى المضي قدما و فتح للتو شيئا من كود اليوم يسمى ASCII الصفر. وASCII الصفر يبدو مثل هذا. لذلك دعونا التفاف عقولنا حول هذا. ذلك أولا، لقد علق رمز، التي هي لطيفة. لأنه حرفيا تقول لي ما يمكن توقعه، عرض الخرائط عن الأحرف الكبيرة. الآن أنا لا أعرف تماما ما أنا يعني ذلك، لذلك دعونا الاستدلال. في اللغة الإنجليزية، وربما الإنجليزية فني إلى حد ما، ماذا تظهر خط 18 أن تفعل بالنسبة لنا؟ مجرد خط 18. ما هو حمل؟ ما تسير الأمور ليبدأ هنا؟ الجمهور: حلقة. J. DAVID مالان: حلقة. وعدد المرات هو أن الذهاب إلى تكرار؟ الجمهور: [فاصلة VOICES] ست مرات. J. DAVID مالان: غير ست مرات. الجمهور: 26 مرة. J. DAVID مالان: 26 مرة. نعم، آسف. 26 مرات. لماذا؟ حسنا، انها غريبة بعض الشيء، ولكن لقد بدأ العد من 65. وهو أمر غريب، ولكن ليس من الخطأ. انها ليست سيئة في القول. وأنا أفعل ذلك فقط لأنه، في هذا المثال، أنا نوع من استباق كانت تلك العاصمة و65. الآن هذا ليس الأكثر أناقة طريقة للقيام بذلك، إلى نوع من رمز القرص الثابت القيم الباطنية التي لا أحد ومن المتوقع أن أتذكر أي وقت مضى. لكنه الآن، لاحظ أنني القيام بذلك من خلال 65 زائد 26. لأنه على ما يبدو لا أريد حتى للقيام بهذا الحساب في رأسي. ولذا فإنني سوف تتيح المترجم تفعل ذلك. ولكن بعد ذلك في كل حلقة، كل التكرار من حلقة، وأنا تزايد ط. حتى الآن هذا يبدو خفي قليلا. ولكن يجب علينا المبنى الأساسي كتل من خلالها فهم هذا. ٪ ج هو مجرد عنصر نائب لشار. ط٪ هو عنصر نائب لكثافة العمليات. واتضح أنه باستخدام هذه جملة جديدة، وهذا جملة محاطة بأقواس، لذلك للتحدث، لذلك نوع بيانات داخل قوسين، يمكنني اجبار مترجم لعلاج أنا لا هو صحيح، ولكن كما شار. تبين لي بذلك الطابع يعادل هذا العدد. الآن إلى هنا، هذا الرمز هي جميلة متطابقة كثيرا. أردت فقط أن تجعل السوبر صريح حقيقة انني ابتداء من الساعة 97، وهي أحرف صغيرة أ. على ما يصل إلى 26 رسائل أكثر. وأنا doing-- مرة أخرى، صب ط، إذا جاز التعبير. أو نوع الصب ط، إذا جاز التعبير. من كثافة العمليات إلى شار. ولذلك فإن النتيجة النهائية ستكون، بصراحة، المعلومات نعرفه. انا ذاهب الى جعل أسكي-0 dot-- لا دوت ج. إشعار، وربما كنت جعلت ذلك خطأ وأنا فقط لم قصد. جعل أسكي-0. الآن انا ذاهب الى القيام ./ascii-0. أنا في التكبير، وأسف انها تسير للتمرير خارج الشاشة. لكننا نرى مخطط بأكمله حيث على الخرائط إلى 97 والخرائط باء إلى 98، وإذا كنا انتقل لأعلى مزيد وهناك، بطبيعة الحال، يعين 65. لذلك هذا هو فقط أن أقول ما كنا الوعظ، هناك هذا التكافؤ، و في حقيقة الحال في الواقع. لذلك تعديل سريع لهذا. اسمحوا لي أن فتح أسكي 1.C. وتلاحظ هذا ذكي، نوع من، توضيح هذا. هذا هو أسكي 1.C، و تلاحظ هذا شيء مجنون. وهذا يحصل حقا في القلب ما تقوم به أجهزة الكمبيوتر. على الرغم من شأنه نحن البشر لا عد من حيث letters-- أنا لا نبدأ في التفكير، كل الحق في ذلك الحين ب، وتستخدم هذه لحساب الأشياء المادية. هل يمكن القول بالتأكيد أنني أريد أن تهيئة بعض متغير يسمى c-- ولكن كان يمكن أن يسمى هذا anything-- بحيث يتم تهيئة ج على رأس المال A. لأنه في نهاية اليوم، الكمبيوتر لا يهمني ما كنت تخزين، أنه يهتم فقط كيف تريد لتقديم تلك المعلومات. كيف تريد من الكمبيوتر إلى تفسير هذا النمط من بت؟ وهذا ليس شيئا عموما أنصح به. انها حقا مجرد مثال ل نقل ما تستطيع على الاطلاق تهيئة عدد صحيح إلى شار. لأن تحت غطاء محرك السيارة من شار، بالطبع، هو مجرد رقم من 0 إلى 255. حتى يمكن لكم بالتأكيد وضعها داخل لكثافة العمليات. وهذا أيضا ما يظهر هو أننا يمكن تحويل من واحد اكتب إلى آخر، هنا، الطباعة في نهاية المطاف نفس الشيء. في واقع الأمر، وهذا سيثبت أنا online-- كان من المفترض أن أقول هذا، مرة أخرى، هنا. اسمحوا لي تنظيف هذا الموقع، وسنقوم نرى في تجول عبر الإنترنت حسب الحاجة، ما المقصود هناك. موافق. المثال الأخير بحيث تشمل الآن لول ب ثم سنقوم تأخذ الامور قليلا. حتى مع ول ب و ج في القيمة ويعادلها، دعونا نلقي نظرة على هذا المثال، هنا. آخر مثال التعليمة البرمجية. سنقوم بفتح احد وهذا بالفعل، لذلك نحن لا يجب أن اكتبه كل خارجا من نقطة الصفر. وتلاحظ تحسبا نستخدمه رأس متعددة ملفات، من بينها صديقنا الجديد، string.h. الآن هذا يبدو، في البداية محة، خفي قليلا. ولكن دعونا نرى ما اذا كنا لا يمكن التفكير من خلال ما يحدث هنا. أولا أحصل على سلسلة من المستخدم، وأنا وضعت هذه السلسلة في متغير دعا ق. نسخ لصق من قبل. في السطر 22، وأنا على ما يبدو يفعلون بالضبط ما فعلت قبل لحظة، أنا بالتكرار على الأحرف في ق. والحيل الجديدة هنا تستخدم طول السلسلة، وتحسين طفيف تخزين طول السلسلة في ن، بدلا من الدعوة strlen مرة أخرى، ومرة أخرى، ومرة ​​أخرى. ومجرد التدقيق أنني أقل من ن. الآن هنا، الامور اهتمام قليلا. ولكن هذا مجرد تطبيق هذه نفس فكرة جديدة. ما يفعل باللغة الإنجليزية ق قوس أمثلها؟ الجمهور: عد كل شخصية [غير مسموع]. J. DAVID مالان: عد كل حرف. وحتى أكثر وضوحا، ق قوس أمثلها ماذا؟ هل تقول. عدم وضع لك على الفور هنا. الجمهور: Well-- J. DAVID مالان: حتى إذا كانت الكلمة إذا is-- السلسلة Zamyla التي starts-- الجمهور: --you التعامل مع الأحرف separately-- J. DAVID مالان: جيد. بالضبط. التدوين قوس مربع يسمح لك للوصول إلى كل حرف على حدة، حتى ق قوس 0 سوف يكون الحرف الأول في السلسلة. ق قوس 1 ستكون الثانية، وهكذا دواليك. لذا فإن السؤال أنا أسأل، هنا، في هذه الحالة ما هو؟ هو الحرف i'th أكبر من ق من أو يساوي إلى أحرف صغيرة و؟ وماذا يعني هذا، هنا، مع اقحام مزدوجة؟ الحضور (معا): و. J. DAVID مالان: و. انها فقط ليعادل بذلك. وليس الكلمة في C، لديك ل الاستخدام، بشكل مزعج، العطف العطف. وهذا، على العكس، يسأل هو ق في i'th الطابع أقل من أو يساوي إلى صغيرة ض؟ ومرة أخرى، وهنا حيث فهم الكامنة تنفيذ الكمبيوتر المنطقي. لاحظ أنه على الرغم من ولدي النقطة نقطة نقطة هناك، يشبه إلى z في صغيرة و كل القيم متجاورة ارتفاعا من 97 على ما يصل. ونفس الأحرف الكبيرة ابتداء من الساعة 65. لذلك الوجبات الجاهزة، ثم، غير أنه في اللغة الإنجليزية، كيف تصفون ما سطر 24 تفعل؟ نعم؟ الجمهور: في 24 انها فحص لمعرفة سواء كل حرف هو حرف صغير. J. DAVID مالان: انها التحقق ما إذا كل حرف هو حرف صغير. وذلك حتى أكثر وضوحا، هو الطابع i'th من ليالي صغيرة؟ هذا كل ما كنت معربا عن منطقيا هنا، بشكل غامض قليلا، ولكن في نهاية المطاف بشكل مباشر جدا. هو ق i'th صغيرة في الشخصية؟ إذا كان الأمر كذلك، وهنا حيث الأشياء الحصول على القليل من العقل الانحناء لمجرد لحظة، إذا كان الأمر كذلك، انتقل قبل وطباعة حرف. لذلك هذا هو مجرد نائب، ولكن ما الشخصية؟ ماذا أفعل قوس ق ط ناقص هذا التعبير هنا؟ كذلك لاحظ نمط هنا. الأرقام الفعلية لا يهم كثيرا. لكن لاحظ أن 97 هو كيف بعيدا من 65؟ الجمهور: 32. J. DAVID مالان: 32. كيف بعيدا هو 98 من 66؟ الجمهور: 32. J. DAVID مالان: ج يتل كبير من C؟ 32. لذلك هناك 32 من القفزات حرف واحد إلى آخر. بصراحة حتى أنا، يمكن هذا تبسيط لذلك. ولكن بعد ذلك أنا الترميز نوع من الصعب هذا الفهم مستوى منخفض أن أي قارئ من أي وقت مضى سوف تفهم. لذلك أنا ذاهب الى التعميم بأنه، و تعرف بأحرف صغيرة هي أكبر. وأنا أعلم أن حروف هي قيم أصغر، ومن المفارقات. ولكن هذا هو ما يعادل نحو فعال ل قائلا طرح 32 من ق قوس ط. وذلك في سياق هذه الرسائل، إذا كان حرف يحدث أن تكون، صغيرة لذلك، وأنا طرح 32، ما أثر ذلك، رياضيا، على أحرف صغيرة و؟ الجمهور: Capitalizes-- J. DAVID مالان: تستفيد منه. وبالفعل، هذا هو السبب لدينا ويسمى البرنامج الاستفادة الصفر. هذا البرنامج إما تستفيد بريد إلكتروني، بعد التحقق إذا كان بل حرف صغير. خلاف ذلك، وذلك تمشيا 30، ماذا أفعل إذا انها ليست حرف صغير أنني تبحث في على وجه الخصوص في حلقة التكرار. فقط طباعته. حتى لا تتغير الاشياء هذا ليس حتى صغيرة. تقييد نفسك ل قليلا إلى z قليلا. الآن هذه هي غامضة إلى حد ما. ولكن في نهاية اليوم، وهذا هكذا نحن، مرة واحدة عند كل مرة، كان لتنفيذ الأشياء. لو كنت بدلا تفتح الاستفادة واحد، يا الحمد لله. هناك وظيفة ودعا العلوي إلى أن يمكن نفعل كل ما فعلت فقط عند مستوى منخفض نسبيا. الآن إلى الجزء العلوي من المثير للاهتمام لأنه أعلن في ملف، وأنت تعرف هذا فقط عن طريق التحقق من الوثائق، أو يقال، مثلا، في الصف، حيث كان موجودا، في ملف يسمى ctype.h. لذلك هذا هو صديق آخر جديد لنا. ويفعل بالضبط العلوي ما يوحي اسمها. يمكنك تمرير في، كحجة، بين هذه الأقواس، وبعض الحرف. انا ذاهب لتمرير في شخصية i'th من ليالي باستخدام منهج جديد يتوهم دينا تشمل أقواس معقوفة. واتخاذ تخمين، ما هو عودة قيمة على ما يبدو تسير العلوي أن تكون؟ كتاب رأس المال. كتاب رأس المال. حتى لو كنت تمر في صغيرة لذلك، نأمل، من خلال تعريف لالعلوي، انها تسير لإرجاع A. وإلا الأحرف الكبيرة، إذا لم تكن حرف صغير في في المقام الأول، أنا فقط طباعته. وبالفعل، لاحظ صديق الثاني هنا. ليس فقط لالعلوي موجودا، ولكن أقل، والتي الواقع يجيب عن هذا السؤال بالنسبة لي. الآن من كتب هذه الأشياء، 10S من قبل سنوات، كنت تعرف لماذا؟ تنفيذها لالعلوي وغير خفض باستخدام رمز مثل هذا. ولكن مرة أخرى، بما يتفق مع هذه فكرة التلخيص بعيدا، نوعا ما، انخفاض مستوى تفاصيل التنفيذ. والوقوف على أكتاف الناس الذين سبقونا، وذلك باستخدام وظائف مثل لالعلوي وأقل، والتي رائعة بما يكفي لطيف اسمه القول ما يفعلونه، هو نموذج رائع لاعتماده. الآن، اتضح أنه إذا قرأت الصفحة رجل ل، تقول، إلى العلوي، أتعلم شيئا آخر. ذلك الرجل toUpper. انها قليلا الساحق. لكن إشعار، وهنا أن ذكر ملف الرأس أنني يجب أن تستخدم. بوصفها جانبا، لأن هذا غير مضللة، وظيفة يستخدم بدلا من حرف [إينتس] لأسباب من التحقق من الخطأ. ولكننا سوف تأتي ربما العودة إلى ذلك في المستقبل. إلا أن نلاحظ، هنا، إلى المتحولين العليا الحرف ج إلى أحرف كبيرة إن أمكن. ذلك أن جميلة واضحة. والآن دعونا نكون أكثر قليلا محددة. دعونا ننظر إلى جزء من الصفحة رجل تحت قيمة الإرجاع. القيمة التي تم إرجاعها هي أن الرسالة المحولة. أو ج، إذا كان التحويل لم يكن ذلك ممكنا، حيث c هي المدخل الأصلي. الذي أعرفه من هنا، من الوسيطة إلى أن العلوي. فما هي الوجبات الجاهزة من هذا؟ القيمة التي تم إرجاعها هي أن الرسالة المحولة، أو ج، والرسالة الأصلي، إذا كان كان التحويل غير ممكن. ما يمكنني بالتالي تحسين جعل لتصميم كود بلدي؟ نعم؟ الجمهور: يمكنك إزالة آخر. J. DAVID مالان: يمكنني إزالة بيان آخر، وليس مجرد بيان آخر. الجمهور: يمكنك إزالة [غير مسموع]. J. DAVID مالان: يمكنني إزالة شوكة كله في الطريق، وإذا آخر تماما. ذلك الواقع، اسمحوا لي أن فتح النسخة النهائية من هذا، الاستفادة-2، ولاحظ كيف، إذا سوف، ومثير، رمز يزداد الآن، في ذلك لقد خفضت من بعض سبعة أو حتى خطوط إلى أربعة فقط، الوظيفة التي كنت أنوي ببساطة عن طريق الدعوة إلى العلوي، يمر في ليالي قوس ط، والطباعة خارج، مع النائب٪ ج، أن حرف معين. الآن يمكن القول، هناك خلل، أو على الأقل من خطر الخلل، في هذا البرنامج. حتى مجرد أن أعود إلى الوجبات الجاهزة السابقة، ماذا يجب أن تفعل ربما أيضا في هذا البرنامج لجعله أكثر قوة، بحيث ليس هناك طريقة ما في وسعها تحطم الطائرة، حتى في الحالات النادرة؟ الجمهور: تأكد من انها ليست فارغة. J. DAVID مالان: تأكد من انها ليست فارغة. ذلك حقا، لجعل هذا السوبر السليم، يجب أن أفعل شيء من هذا القبيل، إذا ق ليست فارغة، ثم والمضي قدما في تنفيذ هذه الأسطر من التعليمات البرمجية التي يمكنني ثم المسافة البادئة من هذا القبيل، ثم وضعت في بلدي هدفين وثيق. جيد جدا ربط معا من فكرتين. نعم؟ الجمهور: هل يمكنك استخدام وحين تفعل حلقة، بدلا من ذلك؟ J. DAVID مالان: هل يمكن أنا لا افعل حين حلقة؟ الجمهور: --you نريد أن نتأكد من ان كنت فعلا [غير مسموع]. J. DAVID مالان: هل يمكن استخدام افعل حين؟ الجواب القصير، لا. لأنك على وشك إدخال حالة زاوية أخرى. إذا كانت السلسلة من طول صفري. إذا على سبيل المثال، أنا مجرد ضرب دخول، دون أن كتابة Zamyla. انا ذاهب لتسليم بعودتكم فعلي سلسلة، كما سنرى في نهاية المطاف، التي تحتوي على أحرف الصفر. انها لا تزال سلسلة، انها مجرد السوبر القصير. لكن إذا كنت تستخدم افعل حين، وأنت تسير على نحو أعمى تحاول أن تفعل شيئا مع احترام لهذه السلسلة، ولا شيء سيكون هناك. الجمهور: حسنا، إذا كنت فعلت القيام [غير مسموع] في حين s-- J. DAVID مالان: أوه أرى، والحفاظ على الحصول على سلسلة من المستخدم. الجواب القصير لذلك، كنت يمكن، والحفاظ على المضايقه منهم ان يقدموا لكم سلسلة من باختصار بما يكفي لتناسب في الذاكرة. تماما. أنا فقط اختيار عدم. إذا كانت لا تعطيني سلسلة أنا أريد، أنا الإقلاع عن التدخين، أنا التخلي. ولكن قطعا، لهذا الغرض، هل يمكن أن تفعل على الاطلاق ذلك. حتى رأس الملفات المكتبة التي نحن الآن على دراية هم هؤلاء، هنا. معيار I / O، CS50.h، string.h، ctype.h، وهناك، في الواقع، والبعض الآخر. وقد اكتشف بعض منكم المكتبة الرياضيات في math.h. ولكن اسمحوا لي أن أعرض لكم، الآن، ل هذا المورد أن الموظفين CS50، دافين، وروب، وغابي خاصة وضعنا معا. والتي تصل قريبا على موقع بالطبع ل. انه دعا المرجع CS50. التي فقط لإعطائك سريعة طعم لها، ويعمل على النحو التالي. اسمحوا لي أن أذهب إلى reference.cs50.net. سترى على اليد اليسرى جانب قائمة الساحقة من الوظائف التي تأتي مع ج. ولكن إذا كنت الرعاية، لحظة، عن شيء مثل strlen، أستطيع أن اكتبه هناك. فإنه بتصفية أسفل القائمة لمجرد ما يهمني. انا ذاهب الى فوقه. والآن على اليسار، سترى ما نأمل هو أكثر وضوحا والبشرية شرح لكيفية ودية تعمل هذه الوظيفة. إرجاع طول السلسلة. وفيما يلي موجز، وهنا كيف استخدامها من حيث رأس الملف، ومن حيث ما وظيفة يشبه من حيث حججها. ثم هنا، والعودة طول السلسلة. لكن بالنسبة لأولئك منكم أكثر راحة، يمكنك النقر الواقع أكثر مريح، ومحتويات هذا الصفحة، الآن، سيتغير أن تكون القيم الافتراضية ما تحصل باستخدام الصفحة رجل. وبعبارة أخرى، CS50 المرجعية هي تبسيط من صفحات رجل من قبل الموظفين، للطلاب. ولا سيما، تلك أقل راحة وبين، بحيث يمكنك لم يكن لديك في محاولة للالتفاف عقلك حولها، بصراحة، بعض تركيب خفي إلى حد ما وثائق في وقت ما. حتى أن تبقي في الاعتبار في الأيام القادمة. حتى هنا، مرة أخرى، هو Zamyla. دعونا الآن طرح سؤال هذا أكثر من ذلك بقليل في متناول الإنسان. بفضل تشانغ، الذين تم طباعة المزيد من الفيلة دون توقف على مدى الأيام القليلة الماضية. لدينا فرصة لإعطاء واحد منهم على الأقل بعيدا. لو استطعنا الحصول متطوع واحد فقط لتأتي على ما يصل إلى رسم على الشاشة. ماذا عن هنا؟ تأتي على ما يصل. ما هو اسمك؟ ALEX: أليكس. J. DAVID مالان: أليكس. كل الحق. أليكس، وتأتي على ما يصل. نحن على وشك أن نرى الخاص الكتابة اليدوية على الشاشة هنا. حسنا، لطيف لمقابلتك. ALEX: نيس لك مقابلتك. J. DAVID مالان: حسنا. لذلك، وممارسة فائقة بسيطة. شريط ليست عالية ل الحصول على الفيل اليوم. كنت تلعب دور getstring. وانا ذاهب لاقول لكم فقط السلسلة التي كنت قد حصلت. وافترض أنك، getstring، تم استدعاؤها. والإنسان، مثلي، لديه كتبته في Zamyla، Z-A-M-Y-L-A. اذهبوا الى الامام وكتابة Zamyla على الشاشة كما لو كنت قد حصلت عليه وتخزينه في مكان ما في الذاكرة. مما يترك مجالا لما سيكون عدة words-- البعض هذا موافق، والحفاظ على الذهاب. [ضحك] حتى Zamyla، ممتاز. حتى الآن لنفترض أنك، getstring، ودعا مرة أخرى. وبالتالي، وأنا نقدم لك، في لوحة المفاتيح، مع اسم آخر، بليندا. كل الحق. والآن getstring المرة القادمة ودعا، أنا اكتب في شيء مثل غابي، G-A-B-E. كنت تأخذ حقا إلى قلب ذاكرة الوصول العشوائي. الذي رسم كل شيء عشوائيا تماما. موافق. [ضحك] ALEX: عذرا بلادي الكتابة اليدوية سيئة. J. DAVID مالان: لا، وهذا موافق. وماذا عن روب، R-O-B. موافق. جيدة. لذلك لم أكن أتوقع كنت نوع من وضع الامور بهذه الطريقة. ولكن يمكننا جعل هذا العمل. لذلك كيف يمكنك أن تذهب نحو وضع من هذه الأحرف في الذاكرة؟ وبعبارة أخرى، إذا كنا نعتقد من هذه الشاشة سوداء مستطيلة كما يمثل ذاكرة الوصول العشوائي، أو ذاكرة الكمبيوتر. ويذكرون أن ذاكرة الوصول العشوائي هو مجرد في مجمله مجموعة من بايت، وبايت هي مجموعة كاملة من البتات. والبتات بطريقة أو بأخرى تنفيذها، عموما مع بعض شكل من أشكال الكهرباء في الأجهزة. ولهذا النوع من طبقات تحدثنا عن ويمكن الآن أمرا مفروغا منه. كيف يمكنك أن تذهب نحو البت فيها لإرسال روب مقابل غابي مقابل بليندا مقابل Zamyla؟ ALEX: لقد فعلت ذلك في الأمر الذي كنت قد قال لي. J. DAVID مالان: وهذا صحيح. ولكن ما يحكم حيث كنت وضعت بليندا اسم واسم غابي؟ ALEX: لا شيء؟ J. DAVID مالان: [يضحك] بحيث تعمل، فلا بأس. حتى أجهزة الكمبيوتر الصغيرة أكثر تنظيما من ذلك. وحتى عندما كنا implement-- البقاء هناك لمجرد اللحظات، عندما كنا فعلا تنفيذ شيء من هذا القبيل getstring في الكمبيوتر، Zamyla قد وضعت حد كبير كما فعلت على الشاشة، هناك. وما هو المفتاح لاحظت هنا، ما فعله أليكس، وهناك نوع من ترسيم الحدود بين كل هذه الكلمات، أليس كذلك؟ أنت لم يكتب Z-A-M-Y-L-A-B-E-L-I-N-D-A-G-A-B-- وبعبارة أخرى، هناك نوع من ترسيم الحدود والذي يبدو أن يكون، نوع من التباعد عشوائي بين هذه الكلمات المختلفة. ولكن هذا امر جيد، لأن يمكن نحن البشر الآن تصور أن هذه هي أربعة سلاسل مختلفة. انها ليست سلسلة واحدة فقط من الكثير من الشخصيات. حتى جهاز كمبيوتر، ثم، وفي الوقت نفسه، قد يستغرق سلسلة مثل Zamyla، وضع كل من تلك الرسائل داخل بايت من الذاكرة. لكن هذا العدد هو أكبر من ذلك بكثير، بالطبع، من ستة أحرف. هناك مجموعة كاملة من ذاكرة الوصول العشوائي. وهكذا من الآن فصاعدا، وهذا شبكة من صناديق يسير لتمثيل ما اليكس فقط فعلت هنا على الشاشة. والآن، أليكس، يمكننا أن نقدم لكم الأزرق أو فيل البرتقال من تشانغ. ALEX: سآخذ الفيل الأزرق. J. DAVID مالان: فيل الأزرق. حتى جولة كبيرة من التصفيق، إذا استطعنا، لأليكس هنا. [تصفيق] ALEX: شكرا لك. J. DAVID مالان: شكرا لك. لذلك الوجبات الجاهزة هي أنه، على الرغم من أن تغير نمط نوع من مرور الوقت، وهنا على متن الطائرة، كان هناك هذا ترسيم الحدود بين مختلف السلاسل التي حصلت اليكس بالنسبة لنا. الآن أجهزة الكمبيوتر، بصراحة، يمكن أن تفعل الشيء نفسه. يمكنهم نوع من صوت نزول المطر سلاسل في أي مكان في ذاكرة الوصول العشوائي. هنا، هنا، إلى هنا، إلى هنا. قد يفعلون ذلك بالضبط. ولكن، بطبيعة الحال، وهذا ربما لا يكون أفضل التخطيط. أليس كذلك؟ إذا ظللت يسأل اليكس ل الحصول على أسماء، وربما عنيدا وضع بعض أكثر إلى هنا، ربما تصل هنا، هنا، هنا، في نهاية المطاف أكثر من هنا. ولكن مع التخطيط أكثر قليلا، وبالتأكيد، نحن يمكن ان تضع الامور أكثر نظافة. وبالفعل، هذا ما يفعله الكمبيوتر. ولكن الفكرة هنا أن إذا كانت السلسلة القادمة أحصل بعد Zamyla شيء مثل بليندا، أقترح حيث أننا قد كتابة الرسالة فيما يتعلق ب هذه الشبكة؟ أين تذهب؟ إلى اليمين من ذلك، تحت ض، تحت ل؟ ما يمكن أن يكون أول غرائزك؟ الجمهور: بالأسفل ض. J. DAVID مالان: حتى تحت ض. وهذا جدا واضحة، أليس كذلك؟ انها نوع من أنيق، وهذا ما نقوم به على لوحة مفاتيح عندما كنا هاهنا، أو عبر البريد الإلكتروني عندما تبذل قائمة نقطية من الأشياء. ولكن الواقع هو أن أجهزة الكمبيوتر حاول أن تكون أكثر كفاءة، والالزام بالتأكيد بقدر البيانات إلى ذاكرة الوصول العشوائي ممكن، حتى يتسنى لك لا نضيع بايت. حتى يتسنى لك لا تضيعوا أي عقار الشاشة. والمشكلة، على الرغم من أن إذا وضعنا حرفيا إلكتروني ب بعد، كيف نحن ذاهبون ل نعرف أين ينتهي اسم Zamyla ل واسم بليندا ليبدأ؟ حتى البشر لك المقترحة فقط، حسنا، اضغط على مفتاح Enter، أساسا. وضعها في الأسفل. أو كما فعلت حتى اليكس، مجرد بداية الكتابة اسم المقبل تحت سابقتها، وأدناه أن واحد، و ثم أدناه أن واحدا. هذا هو جديلة البصرية. أجهزة الكمبيوتر لديها جديلة البصرية آخر، ولكن هذا قليلا أكثر إيجازا. انها هذه الشخصية غير تقليدي. 0 مائل، ربما كان تذكرنا مائل ن، وهكذا دواليك، الآن. تسلسل الهروب الخاصة. 0 مائل هو السبيل لل تمثل ثمانية الصفر بت على التوالي. 0000 0000. طريقة التعبير عن ذلك ليست ل ضرب الرقم صفر على لوحة المفاتيح، لأنه في حقيقة أن هو حرف ASCII. يبدو وكأنه العدد، ولكن هو في الواقع رقم عشري الذي يمثل التعميم الصورة الرمزية ومحرف دائري. وفي الوقت نفسه، مائل الصفر يعني، حرفيا وضع ثمانية الصفر بايت هنا بالنسبة لي. لذلك هذا هو تعسفي إلى حد ما. نحن يمكن قد استخدمت أي نمط البتات، ولكن العالم قررت عدة سنوات قبل أن تمثيل نهاية سلسلة في الذاكرة، وضعت للتو في مجمله مجموعة من الأصفار. لأننا يمكن الكشف عن ذلك. الآن هذا يعني أن أي حرف الأبجدية يمكن أن تكون ممثلة مع الأصفار. ولكن هذا ما يرام، لقد رأينا بالفعل الذي نستخدمه على ما يصل 65 في 97 على ما يصل. لم نحصل على أي مكان إغلاق لكافة الأصفار. حتى بليندا في ذاكرة جهاز الكمبيوتر يجري فعلا للذهاب هنا. لقد رسمها باللون الأصفر فقط رسم انتباهنا إلى ذلك. والإشعار، جدا، وهذا غير تعسفية تماما. لقد رسمها في شكل شبكة. مثل، ذاكرة الوصول العشوائي هو مجرد بعض الشيء المادي. انها لا تملك بالضرورة الصفوف والأعمدة، في حد ذاتها. انها فقط حصلت على مجموعة كاملة من وحدات البايت نفذت في الأجهزة بطريقة أو بأخرى. ولكن إذا كنت بعد بليندا كتبته في اسم غابي، انه لن ينتهي هنا في الذاكرة، وإذا كنت كتبته في اسم Daven، و على سبيل المثال، انه لن ينتهي هنا. وأنا يمكن أن تستمر في إرسال المزيد من الأسماء. للأسف، إذا حاولت إرسال بريد اسم السوبر الطويل، وأود أن تشغيل في نهاية المطاف من الذاكرة. في هذه الحالة، هو getstring سوف تعود فارغة، كما قلنا. ولكن لحسن الحظ، على الأقل في هذا البصرية هنا، ونحن لم تحصل الى هذا الحد. الآن ما هو لطيف هو أن هذا فكرة عامة عن معالجة الأمور كما يجري في صناديق غير ممثل سمة من سمات C والكثير من اللغات، المعروفة باسم صفيف. مجموعة هي نوع آخر من البيانات. انها بنية البيانات، اذا صح التعبير. هيكل بمعنى حقا، نوع من، تبدو وكأنها مربع، على الأقل في عين عقلك. مجموعة هي متجاورة تسلسل أنواع البيانات متطابقة، العودة إلى الوراء إلى العودة إلى الوراء. حتى سلسلة، في الآخر الكلمات، هو مجموعة من الأحرف. مجموعة من الأحرف. ولكن تبين يمكن أن يكون صفائف من عناقيد من الأشياء. في الواقع، يمكن أن نضع حتى أرقام في صفيف. ذلك الشكل الذي ونحن في طريقنا لبدء إعلان هذه البيانات بنية المعروفة باسم مجموعة يجري أيضا استخدام أقواس معقوفة. ولكن هذه الأقواس المربعة تسير ل يكون لها معنى مختلف في هذا السياق. ودعونا نرى ذلك على النحو التالي. لنفترض أن فتحت حتى ملف جديد هنا. وأنا حفظ هذا كما ages.c. وسوف توفر هذه في مجلد وجودي هنا. والآن انا ذاهب الى المضي قدما والبدء في كتابة شيء كما تشمل CS50.h، وتشمل stdio.h، الباحث الرئيسي الفراغ. ثم داخل هنا، أريد أن يكون أول عدد صحيح يسمى العمر. وانا ذاهب الى استخدام ذلك للحصول على الباحث من المستخدم له أو لها العمر. ولكن هذا البرنامج هو المقصود لاستخدامها من قبل عدة أشخاص، مهما كان السياق. أنا عندي خط من الناس. كل منهم إلى كتابة في هم لسن ربما بعض، وأنا لا أعرف، المنافسة، أو الحدث أنها قد وصلت ل. ذلك الشخص التالي، وأنا تحتاج متغير آخر. لأنه إذا أنا فقط تفعل العمر يحصل getInt، وهذا الذهاب الى ضرب بقسوة، أو الكتابة عمر الشخص السابق. حتى هذا ليس جيدا. حتى أول غريزة بلدي قد تكون، يا، كل الحق، إذا كنت ترغب في الحصول على العديد من الناس ages-- دعونا نسمي هذا age1، كثافة العمليات age2 يحصل كثافة العمليات، وكثافة العمليات age3 يحصل getInt. والآن انا ذاهب الى استخدام بعض رمز شبة الكود هنا. نفعل شيئا مع تلك الأرقام. سنترك ليوم آخر ما نقوم به هناك، لأننا فقط يهمني في الوقت الحالي حول age1، age2، age3. للأسف، مرة واحدة تجميع هذا البرنامج ووضعها أمام المستخدمين الفعليين، ما هو سوء التصميم الأساس القرار يبدو لي أن جعلت؟ نعم؟ الجمهور: [غير مسموع] J. DAVID مالان: نعم، حتى أنا لم يحاكم لمعرفة كيفية العديد من الأعمار يمكنني في الواقع يهتمون؟ إذا كان لدي أقل من ثلاثة أشخاص هنا، وبالتالي أقل من ثلاثة الأعمار، أنا لا تزال تتوقع عمياء الثلاثة. لا سمح الله تظهر أربعة أشخاص يصل. برنامجي فقط لن حتى يدعمها. وحتى هذا، قصة طويلة باختصار، ليست عادة جيدة. أليس كذلك؟ كنت أساسا نسخ و لصق رمز ومجرد اللف أسماء المتغيرات. و، يا إلهي، إذا كان لديك، وليس ثلاثة الأعمار، ولكن 10 أو 100 أو حتى 6500 الطلاب الجامعيين، على سبيل المثال. هذا لن يكون خاصة كود أنيقة، أو استدامة. وأنت تسير لدينا ل إعادة كتابة البرنامج في كل مرة رقمك من الناس التغييرات. لذلك ولله الحمد، في منطقتنا الفعلية ملف ages.c لهذا اليوم، لدينا حل أكثر ذكاء. أولا، انا ذاهب لاستعارة بناء استخدمنا عدة مرات، هذا في حين تفعل حلقة، من أجل الحصول على عدد الأشخاص في الغرفة. أنا مجرد الذهاب الى الالحاح المستخدم، مرة أخرى ومرة أخرى، حتى انه أو انها يعطيني قيمة ن هذا هو عدد صحيح موجب. كان يمكن أن تستخدم، آخر الوقت في الحصول على كثافة العمليات إيجابي. ولكن ليس لدينا أن حقيقية، لذلك ذهبت إلى الأمام وإعادة تنفيذ هذه الفكرة. الآن إلى هنا، وهذا هو خدعة جديدة. في خط 27، والتعليقات في خط 26 ويشير، أعلن مجموعة التي لتخزين سن الجميع. حتى إذا كنت ترغب في الحصول على، وليس كثافة واحدة، وليس اثنان [إينتس]، ولكن في مجمله مجموعة من [إينتس]. على وجه التحديد ن الأعداد الصحيحة، كانت قد ن يكون الثلاثة، قد يكون 100، قد يكون 1،000. بناء الجملة، بكل بساطة، هو مثلا، ما نوع البيانات التي تريدها؟ ماذا تريد الاتصال أن جزءا من الذاكرة؟ ماذا تريد الاتصال بالشبكة يشبه هذا بالصور؟ وهنا بين قوسين، ويقول لك كيف كبيرة تريد مجموعة أن يكون. وهكذا، عندما قال في وقت سابق لي الجملة هو مختلفة قليلا هنا، نحن لا تزال تستخدم الأقواس المربعة، ولكن عندما أكون معلنا صفيف، عدد داخل بين قوسين معقوفين الوسائل كيف كبير هل تريد أن تكون المصفوفة. على النقيض من ذلك، عندما كنا باستخدام ق قوس ط قبل لحظة، ق، سلسلة، هو في الواقع مجموعة من حرف، ولكن عندما كنت لا يعلن متغير، كما هو الحال مع هذه الكلمة الرئيسية هنا، كنت مجرد الحصول على مؤشر معين، محددة عنصر من تلك المصفوفة. مرة واحدة ونحن نعلم أن، والباقي هذا واضح ومباشر. إذا جديدة أنا أولا الذهاب الى طباعة ما هو سن الشخص رقم ط. حيث كنت أقول الشخص رقم واحد، الشخص رقم اثنين، الشخص رقم ثلاثة. وأنا فقط تفعل الحساب، حتى أن الناس العاديين مثل، نحن عد من واحد لهذا البرنامج، وليس من الصفر. ثم أدعو getint، لكنني تخزين الجواب في العصور قوس ط. وهو سن i'th في الصفيف. حتى حين آخر مرة كنا علاج هذه الصناديق وحرف لاسم Zamyla، و وغيرها. الآن، هذه الصناديق تمثل 32 بت، أو أربعة بايت نستطيع من خلالها تخزين عدد صحيح، عدد صحيح، عدد صحيح. وكلها، مرة أخرى، هي نفس نوع البيانات. الآن أفعل شيئا سخيفة، مثل الوقت يمر، فقط لتبرير كتابة هذا البرنامج. ثم إلى هنا، وأنا مرة أخرى تكرار خلال مجموعة قائلا بعد عام من الآن، الشخص رقم إرادة واحدة يكون شيئا سنة. ومعرفة أن math-- أعني، هذا ليست معقدة جدا arithmetic-- أنا فقط إضافة واحد لسنهم. فقط لإثبات، ومرة ​​أخرى، هذا. فقط ما أستطيع مؤشر إلى سلسلة، ق، لذلك يمكنني مؤشر إلى مجموعة من العصور، كما أن هناك. فأين هو هذا على وشك أن تأخذنا؟ ولذا فإننا سوف نرى، في نهاية المطاف، و قليل من الأشياء في الأيام القادمة. واحدة، كل هذا الوقت، عندما كتابة البرامج الخاصة بك، مثل ماريو، والجشع، والائتمان. كنت قد تم كتابة اسم برنامج وضرب أدخل. ثم الحصول على مدخلات المستخدم. مع getString، getInt، getLongLong، أو ما شابه ذلك. ولكن تبين أن يدعم C ما يسمى سطر الأوامر الحجج، وهو ذاهب الى ترك لنا في الواقع الحصول على الكلمات التي تكتبها، في موجه امض، بعد اسم البرنامج الخاص بك. وذلك في الأيام القادمة، ل قد اكتب شيئا مثل قيصر، أو ./caesar رقم 13، بعد ذلك. سنرى كيف يعمل. لأنه في الواقع، في مشكلة تعيين اثنين، نحن سوف أعرض لكم إلى شيئا قليلا تذكر في الخاص Ralphie تحدي في وقت سابق من رسم الخرائط. فن الهرولة المعلومات. هذا، في الواقع، هو جدا تذكرنا ما فعله الخاص Ralphie. هذا هو مثال على التشفير دعا خوارزمية ROT13، R-O-T 13. وهو ما يعني ببساطة تدوير الحروف في الأبجدية 13 الأماكن. وإذا كنت تفعل ذلك، سترى الآن ما هو، ربما، عبارة مألوفة. ولكن الطريقة ونحن في طريقنا إلى استخدام هذا، في نهاية المطاف، هو أكثر عموما. في P تعيين اثنين، في الطبعة القياسية، عليك تنفيذ اثنين من الأصفار، واحد يسمى قيصر، واحدة تسمى Vigenere. كلاهما التناوب الأصفار، في أن بطريقة ما كنت تحويل حرف واحد إلى بريد إلكتروني مختلف. وقيصر هو السوبر بسيط. يمكنك إضافة واحدة، يمكنك إضافة 13، أو بعض العدد ليصل إلى 26. Vigenere يفعل ذلك على أساس لكل رسالة. حتى Vigenere، كما سترى في المواصفات، هو أكثر أمنا. ولكن في نهاية اليوم ما عليك أن تكون تنفيذ ووضع P اثنين، هو ذلك المفتاح الذي تستخدمه كلا لتشفير وفك التشفير. في اشارة الى عملية تحويل نص عادي، بعض الرسالة الأصلية، إلى نص سايفر، التي شيء مشفرة. ومن ثم فك تشفير مرة أخرى. في الطبعة القراصنة، وفي الوقت نفسه، عليك أن تكون كلفت شيئا من هذا القبيل في الروح، حيث سنعطيك ملف، من لينكس نموذجية، أو ماك، أو يونيكس كمبيوتر يسمى etsy كلمة السر، والذي يحتوي على العموم مجموعة من أسماء المستخدمين وكلمات السر. وتلك كلمات السر لها جميع تم تشفيرها، أو تجزئته، إذا جاز التعبير، أكثر بشكل صحيح كما سترى في المواصفات. وسوف طبعة القراصنة تحدي كنت مع أخذ المدخلات من هذا القبيل، والانشقاق وكلمة السر. هذا هو، ومعرفة ما وكلمة الإنسان في الواقع. لأنه، في الواقع، هي كلمات السر عموما ليست المخزنة في واضحة، وكلمات السر بشكل عام يجب أن يكون من الصعب تخمين. هذا ليس الحال غالبا. وما اعتقد اننا كنا نفعله هو أختم بضع دقائق نظرة في خاصة سوء اختيار كلمات السر من فيلم تذكرون باعتزاز. وإذا لم يكن، يجب أن الإيجار. [VIDEO قراءة] -Helmet، أنت شيطان، ما الذي يحدث؟ ماذا تفعل لابنتي؟ -Permit لي أن أعرض باهر جراح التجميل الشباب، الطبيب فيليب Schlotkin. أكبر أنف رجل عمل في الكون كله وبيفرلي هيلز. -Your السمو. العمل -Nose؟ أنا لا أفهم. لقد كان لديها بالفعل على وظيفة الأنف. كان لها الحلو 16 الحاضر. لا، انها ليست ما هو رأيك. انها كثيرا، أسوأ بكثير. إذا كنت لا تعطيني تركيبة لدرع الهواء، طبيبك سوف Schlotkin إعطاء الخاص ابنة ظهرها القديم الأنف. - [صيحات] Nooooooooooooo. من أين لك ذلك؟ الحق -جميع. انا اقول، انا اقول. لا، أبي، لا. يجب عليك لا. -You're الحق يا عزيزي. سأفتقد الأنف الجديد. ولكن لن أقول لهم مزيج مهما كانت. -جدا جيدا. طبيب Schlotkin، لا أسوأ الخاص بك. المتعة بين بلدي. تكن له! انتظر، انتظر. انا اقول. انا اقول. أعرف من أنا انها ستعمل. كل الحق، وتعطيه لي. -THE مزيج واحد. واحد و. واحد و. اثنين و. اثنين و. اثنين و. ثلاثة و. ثلاثة و. ثلاثة و. أربعة و. أربعة و. أربعة و. ، خمسة. ، خمسة. ، خمسة. -حتى الجمع واحد، اثنان، ثلاثة، أربعة، خمسة. هذا هو أغبى مزيج أنا أسمع من أي وقت مضى في حياتي. هذا هو النوع من الشيء و سوف يكون احمق في أمتعته. شكرا لكم، صاحب السمو. [النقرات عن بعد] وماذا فعلتم؟ تحولت -I خارج الجدار. لا، كنت لا، كنت إيقاف الفيلم كله. انا يجب -I الضغط على الزر الخطأ. حسنا، ووضعها مرة أخرى! وضع الفيلم مرة أخرى! نعم، يا سيدي! نعم، يا سيدي. دعنا نذهب، أرنولد. تعال، جريتشين. بالطبع كنت أعرف أنني سوف أكون يجب أن فاتورة لكم لهذا. حسنا؟ لم يعمل؟ أين هو الملك؟ -أنها عملت، يا سيدي، نحن لديك تركيبة. -العظمى. الآن يمكن أن نتخذها كل النفس الأخير من الهواء النقي من كوكب Druidia. ما هو الجمع؟ واحد و، اثنان، ثلاثة، أربعة، خمسة. واحد و، اثنان، ثلاثة، أربعة، خمسة؟ ، نعم. المفتى هو مدهش. أنا عندي نفس تركيبة على أمتعتي. إعداد Spaceball 1 ل رحيل فوري. نعم، يا سيدي. -وعلى تغيير تركيبة على أمتعتي. [باب الختامية SOUND] [صلصلة الأبواب ضرب خوذة] -Ahh. [END تشغيل الفيديو] J. DAVID مالان: هذا كل شيء ل CS50، وسنرى في الأسبوع القادم. المعلق: والآن، ديب الأفكار، من خلال Daven فارنهام. DAVEN فارنهام: الترميز في C هو أصعب بكثير من خدش. printf، كان خدش كذب. [ضحك الصوت المتزامن مع اللقطات]