[عزف الموسيقى] DAVID مالان: حسنا. هذا هو CS50، وهذا هي نهاية الاسبوع 2. أنا آسف لذلك لا يمكن أن يكون هناك معكم جميعا اليوم، ولكن كنت في أيد أمينة جدا. اسمحوا لي أن أعرض الخاصة روب بودين CS50 ل. ROB BOWDEN: وبطبيعة الحال، ثم علينا أن يسخر من الواقع أنه أرسل لنا العمودي فيديو وتظهر هذه. [تشغيل الفيديو] [عزف الموسيقى] [خطى] لم لا، هذا الفيديو يجب أن ننظر بهذه الطريقة. وكان من الممكن منعها. نقول لا لأشرطة الفيديو العمودية. أشرطة الفيديو -Vertical يحدث عند تعقد الكاميرا بطريقة خاطئة. ستنتهي الفيديو حتى تبدو وكأنها هراء. - [الناخر] -هناك هي المزيد والمزيد من الناس المدمنين لجعل أشرطة الفيديو العمودية كل يوم. انها ليست الكراك أو لا شيء، لكنه ما زال سيئا حقا. هناك نوعان من أنواع مختلفة من الناس الذين أصابتهم VVS. يعامل المجموعة الأولى مقاطع الفيديو التي تبادل لاطلاق النار مثل الصور. انهم لا يعني أي ضرر. انهم فقط لا يفهمون أن في حين يمكنك تحويل الصورة، لا يمكن أن تتحول حقا الفيديو. [CRASH] - [SOUNDS القرد] -THE مجموعة أخرى هي الناس الذين لا تعطي [بليب]. متلازمة فيديو -Vertical غير خطرة. الصور المتحركة لديها دائما الأفقي. التلفزيون أفقية. شاشات الكمبيوتر أفقية. عيون الناس أفقية. نحن لا تبنى ل مشاهدة أشرطة الفيديو العمودية. -أنا أحب أشرطة الفيديو العمودية. -Nobody يهتم لأمرك. إذا، هذه المشكلة ل تركت لحالها، أنت أيضا ستبدأ تظهر أربعة أشرطة الفيديو في مرة واحدة فقط لحفظ عرض النطاق الترددي. أشرطة الفيديو العمودية -Letterboxed شأنه أن يكون حجم طابع بريد. -and وسوف تنتشر في كل مكان. شاشات السينما لها دائما الأفقي. إذا أصبحت أشرطة الفيديو العمودية ودور السينما المقبولة ويجب أن تكون طويل القامة ونحيف. -و كل من دور السينما سوف يجب أن تحصل على هدمه وإعادة بنائها. وبحلول الوقت الذي تم بناؤه عليها، سوف ميلا كونيس تكون قديمة وقبيحة. -Birds سوف تصطدم لهم ويموت. -We'll عن الحصول قاسية رقاب من يبحث حتى. -و لا أحد سيجلس في الصف الأمامي من أي وقت مضى مرة أخرى. سوف -George لوكاس إعادة إطلاق ستار الحروب again-- الطبعة نحيف. كان من أنا أبدا قادرة حقا أن أقول القصة التي أردت أن أقول. وكانت هذه فرصة عظيمة بالنسبة لي ل تجربة مع التكنولوجيا الجديدة. -You're النطر. -Every مرة يتم استخدام جهاز محمول ل تسجيل الفيديو، والإغراء هناك. فقط قل لا. نقول لا لجورج لوكاس. نقول لا للميلا كونيس القديم. نقول لا لأشرطة الفيديو العمودية. -و إذا رأيت شخص ما يفعلون ذلك، ويقول، "كنت لا إطلاق النار التي دمية على حق!" [عزف الموسيقى] [END قراءة] [تصفيق] [الصوت خارج] ROB BOWDEN: --simple شكل الترميز، الذي هو في الأساس التشفير وفك تشفير رسائل سرية. حتى هنا لدينا لعبة بسيطة للغاية. والفكرة هي الطوق الخارجي تدور حول الحلقة الداخلية. ويمكنك أن ترى، ربما لو كنت تكبير في، هكذا- يضرب فإنه من الصعب أن نرى. ولكن، مثل، عدد 1-- جيدا، أن يتحرك. عدد 1 خرائط الرسالة X، عدد 2 خرائط الرسالة J. صعبة بشكل لا يصدق عدم تخطي إلى الأمام. رسالة 2 خرائط لJ. عدد 3 خرائط لD. ذلك مع هذا الخاتم التي يمكن أن تعطي شخص ما رسالة 1، 2، 3. لسبب ما أريد أن أقول لهم XJD. ولكن يمكنك ان تعطي لهم بعض الرسائل من الأرقام، وطالما لديهم هذه الحلقة، فإنها يمكن فك تشفير ما كنت أحاول أن أقول. لذلك كنت قد رأيت هذا مثال معين من التشفير قبل إذا حول موسم عيد الميلاد كنت قد شاهدت قصة عيد الميلاد. إذا كنت لم أر من قبل، ثم عادل بدوره على TBS في حرفيا أي وقت عشية عيد الميلاد، لأنها تظهر فقط لأنها العودة إلى الوراء إلى العودة إلى العودة إلى الوراء يوم كامل. والفيديو ذات الصلة هو هذا. [تشغيل الفيديو] أغلب بلدان أنه معروف للجميع من دون استثناء أن رالف باركر هو أنشر عين عضوا في ليتل اليتيم آني الدائرة السرية ويحق لجميع يكرم والمزايا التي تحدث بها. وقع ليتل اليتيم آني. بالعطف بيار اندريه في الحبر! الأوسمة والفوائد بالفعل في سن التاسعة! [الصراخ من RADIO] -هيا. دعونا الحصول على معها. أنا لست بحاجة إلى كل ذلك موسيقى الجاز حول المهربين والقراصنة. ليلة الغد مع -Listen مغامرة الختامية من القراصنة السفينة الأسود. الآن، حان الوقت ل رسالة سرية آني لك أعضاء الدائرة السرية. تذكر الاطفال، فقط أعضاء من الدائرة السرية آني يمكن فك شفرة رسالة سرية آني. تذكر، آني وهذا يتوقف على لك. وضع دبابيس لB2. هنا هو رسالة. 12. 11. 2. -أنا أنا في أول اجتماع بلدي السري. -25. 14. 11. 18. 16. أوه، بيير في هذه الليلة العظيمة صوت. ويمكنني أن أقول أن هذه الليلة وكانت رسالة مهمة حقا. -3. 25. هذه رسالة من آني نفسها. تذكر، لا تخبر أحدا. ثانية، خمسة في وقت لاحق، وأنا في فقط غرفة في المنزل حيث ولد من تسعة يمكن أن تجلس في الخصوصية وفك شفرة. آها! B! ذهبت في اليوم التالي. E. الكلمة الأولى هي "أن يكون". S. وكانت قادمة من الأسهل الآن. U. 25. هذا R. تعال على، الخاص Ralphie! لقد انتقل فلدي! -I'll يكون وصولا، ما! جي الازيز. T. O. "مما لا شك فيه أن" - تأكد من ماذا؟ ما كان اليتيم الصغير آني أحاول أن أقول؟ ومن المؤكد أن ما؟ وقد حصلت -Randy للذهاب! هل يرجى يخرج؟ حق عموم، أمي! سأكون من الصحيح! أنا أقترب الآن. وكان التوتر الفظيع. ما كان هذا؟ مصير كوكب الأرض قد يتعطل في الميزان! -Ralphie، راندي حصلت على الذهاب! -I'll يكون الحق في الخروج، ليبكي بصوت عال! اكاد اصل! حلقت أصابعي. كان ذهني فخ الصلب. صدي كل مسام. وكان واضحا تقريبا! نعم. نعم. نعم. نعم. تأكد من شرب فالتين الخاص بك. فالتين؟ A التجارية تافه؟ ابن العاهرة. [END قراءة] ROB BOWDEN: هذه هي الطريقة التي فالتين يتعلق التشفير. في الأساس CS50 الإعلان فقط فالتين، لذلك يمكن لنا يكون التجارية تافه لفالتين. حسنا. وحتى الآن علوم الكمبيوتر الفعلي. تذكر يوم الاثنين توقفنا الغوص أعمق في السلاسل. لذلك كنا نتعامل مع السلسلة "Zamyla". وكنا الاعتراف حقيقة أن نتمكن من علاج "Zamyla" باعتباره سلسلة من الأحرف. وتذكر أن تعلمنا التدوين قوس. حتى إذا تم تخزين هذا في سلسلة "ليالي"، ثم إذا قلنا الصورة قوس 0، التي من شأنها أن تشير إلى Z. العاصمة إلكتروني وإذا قلنا الصورة قوس 1، التي سيشير أول صغيرة لذلك، وهكذا حتى تصل إلى s قوس 5، التي من شأنها أن تشير إلى الماضي. أتذكر الآن أن طول هذه السلسلة هو 6، لكن مؤشرات في سلسلة قابلة لل من 0 إلى 5، Z من خلال ذلك تستمر. ولذلك فإن هذا يناسب الآن إلى الصورة الأكبر من ذاكرة جهاز الكمبيوتر الخاص بك، ذاكرة الوصول العشوائي الخاصة بك. حتى في مكان ما البرنامج الذي كنت تقوم بتشغيل جهاز الكمبيوتر الخاص بك يجب أن نتذكر Zamyla في مكان ما في الذاكرة. لذلك يمكن أن لدي المتطوعين؟ نعم، من فضلك. و ما هو أسمك؟ العميد: عميد. ROB BOWDEN: عميد؟ لطيف لمقابلتك، عميد. حتى يأتي أكثر من هنا، و نحن ذاهبون الى ترسمه على موقعنا على تخطيط أنيق لطيف من الذاكرة. الآن أود أن أفكر في الذاكرة باعتبارها واحدة شريط طويل من بايت، ولكن فقط لأغراض العرض وسوف نقوم فقط لا من اليسار إلى اليمين، من أعلى إلى أسفل. موافق؟ لذلك أنا ذاهب لاظهار program-- Getstrings.c. وذلك عن هذا البرنامج القيام يطلب أربع سلاسل من المستخدم مع GetString ثم الطباعة كل ما دخلت هذه السلسلة الأولى كان. نحن تجاهل اثنين خلال الأربعة. حسنا. حتى هنا now-- عندما أنا أول طلب S1. لذلك كنت الكمبيوتر. وكنت تنفيذ GetString. لذلك أنت تطلب سلسلة من لي، وأنا أقول، OK، عميد. إعطاء السلسلة "عميد". حتى في مكان ما في الذاكرة التي بحاجة إلى أن نتذكر "عميد". حتى اكتبها في الذاكرة في مكان ما. الكمال. حسنا. حتى الآن لدينا S2. وS2 ستكون طلب إلى GetString. لذلك أنا ذاهب لإدخال سلسلة. انا ذاهب الى دخول "هانا". حتى أدخل "هانا" في مكان ما في الذاكرة. نعم. A-H. حسنا، حتى الآن S3. وسيكون آخر يطلب إلى GetString. وحتى الآن دخول "ماريا". حسنا. ثم هناك آخر واحد طلب GetString، S4. لذلك، وأنا لا أعرف. كيف نذهب مع antidisestablishmentarianism. حتى أدخل ذلك في الذاكرة. نعم. حتى مجرد القيام به "روب". حسنا. حتى explain-- الآن لماذا تركت هذه المساحات؟ لماذا لديك هذا فارغا الفضاء هنا، هنا، وهنا؟ نعم. لذلك تلاحظ عندما أذهب لطباعة s1-- حتى إذا كنا كان "هانا" تشغيل يقف إلى جوارها "عميد" كيف لنا أن نعرف متى السلسلة "عميد" ينتهي؟ حتى طباعة S1 سلسلة قد يكون المطبوعة فقط "DeanHannahMariaRob" إذا لم يكن لديك أي فكرة متى "عميد" ينتهي فعلا. حسنا. حتى في الذاكرة الطريق ونحن في الواقع تمثل هذه نهاية سلسلة هو مع مائل الصفر. لذلك هذا الفضاء هو بالضبط ما كنا نريد. وينبغي أن يكون مائل الصفر. وستكون هذه مائل الصفر، وهذا سوف يكون مائل الصفر. ويمكنك الحصول على جائزة رائعة لكونه أحد المتطوعين الكمال. نلقي الكرة الإجهاد! حسنا. لذلك هذا مائل حرف الصفر كيف يمكننا الإشارة إلى نهاية السلسلة. انها الطريقة عند أي برنامج معين تريد طباعة سلسلة، انها how-- أتذكر علمنا وظيفة strlen الأسبوع الماضي؟ طول السلسلة؟ انها الطريقة طول السلسلة قادر على تحديد المدة سلسلة هي. أنها تحتفظ فقط بالتكرار أكثر من الأحرف حتى يجدها مائل حرف الصفر. وبالتالي فإن الشيء المهم أن يدرك حول الطابع مائل الصفر وتمثيله جميع الأصفار في بت. لذلك نلاحظ أن هذا هو متميز من الطابع الصفر. وبالتالي فإن الطابع الصفر، إذا كنت تتذكر في المثال انه اعطى في نهاية المحاضرة حيث خريطة الأحرف to-- مثل العاصمة والخرائط إلى 65. أحرف صغيرة على الخرائط إلى 97. سوف صغيرة ب أن يكون 98. وبالتالي فإن عدد 0 خرائط to-- أنا لا تعرف من على قمة رأسي. 44 أو 45. في مكان ما في تلك المنطقة. وبالتالي فإن الطابع 0 هو العدد الفعلي. ولكن الصفر مائل خرائط لجميع البتات صفر. لذلك هناك تمييز بين مائل الصفر، ونحن سوف ندعو فاصل فارغة. هناك تمييز بين مائل الصفر والطابع الصفر. حسنا. لذلك نتحدث قليلا المزيد عن السلاسل. لذلك فإننا نرى هنا هذه هي الطريقة أن تكون وضعت بها في الذاكرة. حتى هذه الفكرة من سلاسل كتسلسل من characters-- ذلك الكمبيوتر الرسمي المدى sciency لتسلسل صفيف. لذلك نود ان ندعو سلسلة مجموعة من الأحرف. وهناك في الواقع بيانات أخرى أنواع نتمكن من جعل صفائف من. لذلك لتحفيز هذا، ننظر على سبيل المثال. ونحن سوف يطلق عليه ages0.c وسوف أكون نسخ ولصق لدينا قالب. حسنا. حتى في هذا البرنامج ما تريد القيام به هو انتزاع سن ثلاثة طلاب في الدورة. حتى نعرف الباحث age-- والآن انا ذاهب الى القول 0. لذلك قد أريد أن أقول age1، ولكن لأغراض سنرى قريبا جدا، أنا أقول الباحث age0 يساوي GetInt. حتى نفس المكالمة إلى GetInt أننا أستعمل أنا لا يحدث أن دفع قائلا: "أعطني العمر." ولكن تطلب فقط. وage1 يساوي GetInt. والباحث age2 يساوي GetInt. لذلك، مرة أخرى، ثلاثة طلاب، ولكن في نهاية المطاف مؤشرات متغيرة هي age0 من خلال age2. حسنا. لذلك هذا البرنامج سوف تفعل ما نريد مع age0، age1، وage2، ولكن هذا البرنامج في نهاية المطاف يعمل لثلاثة طلاب. حسنا. وحتى الآن ما إذا أريد أربعة طلاب؟ حسنا، انا ذاهب لدينا للذهاب إلى الوراء في قانون بلدي، تغيير التعليق، والآن لدينا عدد صحيح age3 يساوي GetInt. حسنا. ذلك الذي يرى أن المشكلة هنا؟ ما هي المشكلة مع هذا النوع من الإعداد؟ نعم. نعم. لذلك نحن بصدد إنشاء متغير لكل طالب. الآن أن يعمل، ولكن في نهاية المطاف ما إذا كنت الآن يقول: "أريد أن الاستيلاء على عمر ثمانية طلاب أو 16 طالبا أو ولكن العديد من الطلاب من مئات الطلاب في CS50 أو الآلاف من الطلاب في الحرم الجامعي أو المليارات من الناس في العالم؟ حتى النهاية هذه ليست مستدامة. أي وقت ترى نفسك نسخ ولصق التعليمات البرمجية مثل هذا، يجب أن تشعر عموما أن هناك طريقة أفضل. لذلك هذا هو المكان الذي نحن نقدم إعلان مجموعة. لذلك عندما تقوم بتعريف صفيف، هذا هو ما الشكل العام سوف تبدو وكأنها. ونحن في طريقنا إلى القول نوع. ثم نحن في طريقنا لل إعطاء اسم ذلك مجموعة، تماما كما نحدد أي متغير معين. ثم أخيرا ونحن نستخدم هذه الرموز قوس مرة أخرى ولكن في سياق مختلف من كيف كنا استخدامه في وقت سابق. حتى هنا هذا يبدو وكأنه طبيعي إعلان المتغير الذي رأيناه. لذلك رأيناه الباحث س منقوطة قبل. حسنا الآن يمكننا أن نرى شيئا مثل الباحث س قوسين 5. ووضع هذه الفكرة في برنامج GetInt أننا have-- حتى نتمكن من تنفيذ هذا في نفس الطريق. دعنا نقول في CS فإننا نميل إلى استخدام ن حيث وصل عدد شيء. حتى هنا ونحن في طريقنا ل تخزين أربعة طلاب. والآن يمكننا القول عمر الباحث قوس n-- لم يحصل ذلك تماما yet-- بإعلان مجموعة من أربعة طلاب. فكيف هذا سوف ننظر في والذاكرة تكون مشابهة لهذا. مسح هذا. ونحن ذاهبون الى مكان ما في memory-- سوف أضع هذا الأمر هناك. حتى في مكان ما في الذاكرة. واحد إثنان ثلاثة أربعة. لدينا أربعة أعداد صحيحة في صف واحد لهذه المجموعة من أربعة أعداد صحيحة. لذلك، في الوقت الحالي، ما هو حجم واحد من هذه الصناديق؟ نعم. انها أربعة بايت. انها 32 بت. وحتى الآن وهذا يختلف من مجموعة أننا شهدت في وقت سابق، ومجموعة من الأحرف. في سلسلة كان كل مربع بايت واحد فقط، لأن الحرف هو بايت واحد فقط. ولكن مع مجموعة من الأعداد الصحيحة، كل مربع يجب أن يكون أربعة بايت من أجل لتتناسب مع عدد صحيح بأكمله. لذلك هذا هو ما مجموعة من أن أربعة [إينتس] تبدو. ومن ثم العودة إلى التعليمات البرمجية. الآن نريد أن مخزن الواقع الأعداد الصحيحة في ذلك مجموعة. وحتى الآن هذا هو جدا، جدا، جدا نمط مشترك من شأنه أن في بعض نقطة تصبح الذاكرة العضلية. حتى كثافة العمليات ط يساوي 0. أنا أقل من ن. ط زائد زائد. الفئة العمرية ط يساوي GetInt. لذلك هذا للحلقة، وهذا الشكل، يجب أن تحصل جدا تستخدم ل. لذلك هذا هو عموما كيف ونحن تكرار عبر أي مجموعة تقريبا. لاحظ الآن هذا النوع من يفسر لماذا من البداية لم يكن لدينا لحلقات مستمرة لكثافة العمليات ط يساوي 1، ط أقل من أو يساوي 10. والسبب هو أن تبدأ من صفر يجعل هذا العمل بشكل جيد مع المصفوفات. حتى صفائف صفر فهرستها. إذا كانت هذه هي مجموعة من طول 4، المؤشرات هي من 0 إلى 3. ذلك من خلال أول تكرار هذا للحلقة ونحن في طريقنا إلى أن تحديد سن قوس 0 يساوي دعوة إلى GetInt. لذلك كل ما حدث لي للدخول على لوحة المفاتيح. في الممر الثاني، ونحن وضع يساوي age1 إلى GetInt. ممر ثالث، age2. التمريرة الحاسمة age3. إذا كان الأمر كذلك في الممر الأول للحلقة أنا أدخل رقم 4 على لوحة المفاتيح، ثم سنقوم بإدراج 4 هنا. إذا على مسار الثاني يمكنني الدخول 50، ونحن سوف تضع 50 هنا. على مرور الثالث I قد أدخل سلبية 1، سلبية 1، ثم أخيرا إذا دخلت 0-- و أتذكر الآن أن هذا كان مؤشر الثلاثة. بعد أن حلقة الوراء، وأنا غير الذهاب إلى يمكن زيادة إلى 4. أنا لم يعد هو أقل من ن، الذي هو 4. ونحن خروج من الحلقة. ذلك ما يمكن أن يكون الخطأ في هذا؟ [غير مسموع]؟ الحضور: (غير مسموع) نعم. وبالتالي فإن مجموعة ليس لديها سوى أربعة أماكن، وهو ما يعني كما المؤشرات من 0 إلى 3. حتى إذا كانت هذه هي الحالة، وأود أن تأخذ على القيمة 4 عند نقطة معينة. الفئة العمرية 4 سوف يتم وضع كل ما يحدث أن تكون أكثر من هنا لماذا يجب أن أقول، أدخل 6. والتي سوف يتم تحديد هذا إلى 6. ولكننا لا نعرف ما هو أكثر من هنا. هذه ليست الذاكرة أن كان لدينا الوصول إليها. حتى إذا كنت تذكر من المحاضرة السابقة، كان طبع قيم Zamyla و في مرحلة ما ضرب هذا تجزئة خطأ. لذلك سوف ربما تكون رؤية العديد من تجزئة أخطاء كما كنت تنفيذ بعض مجموعات المشكلة. ولكن هذا هو واحد من الطرق التي يمكنك لقاء تجزئة خطأ عند بدء الدخول الذاكرة بطرق لا ينبغي أن يكون. لذلك لم يكن لدينا إمكانية الوصول إلى هذا الموقع وهذا خطأ. لذلك هذا هو أفضل. الآن لا يزال هناك صغيرة مشكلة مع هذا الرمز. وهذا في الأساس هو أننا لا تزال عالقة في أربعة طلاب. الآن إذا أريد استخدام ثمانية طلاب، OK. انها ليست صفقة كبيرة. يمكنني أن أذهب في، تغيير التعليق، وتغيير ن. الآن هذا العمل مع ثمانية طلاب. إذا كنت تجميع هذا وتشغيل هذا، وسوف تظهر me-- وسوف يطلب من الأعداد الصحيحة لمدة ثمانية طلاب وأنها ستعمل فقط. لكنه أقل من مثالية في حاجة ل إعادة ترجمة البرنامج في كل مرة واحد أريد تغيير عدد من الطلاب أريد أن أدخل الأعمار ل. وبالتالي فإن تحسين النهائي على هذا، كما سنرى here-- نحن الذهاب لطلب عدد من الناس. هنا لدينا عدد من الناس في غرف أو أي الأعمار من الناس في الغرفة. ولكن نحن في طريقنا لطلب رقم من الناس في الغرفة من المستخدم. لذلك هذا هو بالضبط نفس افعل حين الحلقة التي شهدناها من قبل. انها بالضبط نفس افعل حين حلقة أنك يمكن تنفيذ على مجموعة المشكلة. وطالما انهم ندخل ن أقل من 1، لذلك لا بد من أن تكون على شخص واحد على الأقل في الغرفة. طالما انهم ندخل ن أقل من 1، ثم نحن في طريقنا للحفاظ يسأل مرة أخرى. الرجاء إدخال الرقم من الناس في الغرفة. الآن، مرة واحدة لدينا عدد الناس في room-- لذلك أنا قد تدخل أن هناك هم 200 شخص في هذه الغرفة. ثم إلى هنا ونحن في طريقنا للحضور وأعلن مجموعة من حجم 200. نحن تعلن مجموعة هذا تتسع ل200 الأعمار. نازلة، انها لحلقة أنك لن تحصل جدا تستخدم ل. هكذا بالتكرار عبر هذه المجموعة، تكليف كل مكان في ذلك مجموعة عدد صحيح، و ثم في نهاية المطاف هنا نحن مجرد الحصول على مثال بالتكرار على أن مجموعة، وليس لتعيين قيم، ولكن للوصول إلى القيم. حتى هنا نرى أننا يقولون، بعد عام من الآن، الشخص٪ وسوف تكون٪ ط عاما، حيث أول٪ ط ط هو زائد 1. لذلك أنا هو هذا المتغير المؤشر. و٪ ط الثانية ستكون في القيمة المخزنة في العصور مجموعة زائد 1. لذلك هذا زائد 1 هو لمجرد أننا saying-- هذا زائد 1، الذين تتراوح أعمارهم ط زائد 1. هذا بالإضافة إلى 1 هي لمجرد أننا قائلا: بعد عام من الآن الشخص سيكون هذا العمر. فلماذا هذا الذي زائد 1؟ لماذا لدينا زائد 1 هناك؟ نعم. نعم. لذا تذكر صفائف المفهرسة الصفر. لذلك إذا أردنا طباعة هذا الخروج ل شخص ما لمجرد قراءة الإخراج، ثم ربما أنها تريد أن ترى شيئا مثل شخص واحد، شخص ورقم واحد، سيكون 20 سنة. والشخص الثاني يكون عمره 15 عاما. أنها تفضل عدم رؤية شخص الرقم صفر هو 15 سنة. حتى إعداد هذا ومجرد رؤية ما يبدو like-- خلق بعض المساحة. جعل الأعمار برمجيا. تشغيل الأعمار. ونحن نرى عدد الأشخاص في الغرفة. لذلك أنا أقول هناك ثلاثة أشخاص في الغرفة. عمر الشخص رقم واحد، دعنا نقول 15، 20، 25. والآن أنا أقول سنويا من الآن أنها ستكون 16، 21، 26. دعونا نرى أن هذا يعمل مع ون أن لا يساوي 3. لذلك إذا قلت عدد من الناس هو 5، واحد، اثنان، ثلاثة، اثنان، واحد، بعد عام من الآن أنها سوف تكون اثنان، ثلاثة، أربعة، ثلاثة، تبلغ من العمر عامين. حتى أتمكن تماما كما بسهولة ون يكون 10000. الآن سوف أكون جالسا هنا لفترة طويلة حين دخول الأعمار، ولكن هذا يعمل. وحتى الآن في الذاكرة مكان ما لدينا مجموعة من حجم 10000، حتى في نهاية المطاف 40000 بايت، لأن هناك أربعة بايت لكل تلك الأعداد الصحيحة. لذلك هناك مجموعة من حجم 10،000 حيث يمكننا تخزين تتراوح أعمارهم من هؤلاء الناس 10،000. حسنا. أسئلة حول أي من هذه؟ نعم. ماذا لو أعطيته رقم سالب؟ دعونا نرى ما سيحدث. حتى في هذا العدد case-- معين من الناس في الغرفة، والآخر سلبي. ورفضت ذلك، لأن هنا نحن نحدث أن التعامل مع حقيقة أنه إذا كان n هو أقل من واحد ونحن ذاهبون لنسأل مرة أخرى. إذا حاولت تعلن مجموعة من حجم السلبي، عموما لا يعمل. لذلك دعونا نحاول. دعونا نتجاهل أيا كان القيمة التي يدخلونها لن وأقول الأعمار كثافة العمليات الآخر سلبي. دعونا نرى ما اذا كان حتى يجمع. أنا غير متاكد. لا. لذلك أعلن الأعمار باعتبارها مجموعة مع حجم سلبي. مقدما لذلك يقر مجموعة لا يمكن يكون حجم سلبي وترفض ذلك. الآن، إذا كنا لم يعالجوا هذا افعل حين حلقة بشكل صحيح، إذا لم نكن فحص إذا كان n أقل من 1-- دعونا نقول أننا فقط لم يكن لديك هذا على الإطلاق وبدلا من ذلك نحن مجرد الاستيلاء على عدد صحيح. بغض النظر عن ما هو صحيح، نعلن مجموعة من هذا الحجم. لذلك لا يمكن للمترجم ربما يشكو الآن. إذا كنت تجميع this-- لذلك لا يمكن أن يشكو، لأنه لا يمكن أعلم أنني الذهاب إلى إدخال رقم سالب، التي قد تكون غير صالحة. لكل ما يعرف، وأنا قد أدخل رقم موجب، وهي صالحة تماما. حتى أستطيع أن أتخيل إذا دخلت سلبي 1 الناس في الغرفة، وتجزئة الخطأ. لذلك، OK. لذلك دعونا إضافة هذا يعود فقط يبقيه ما كان عليه في الأصل. وهكذا جعل الأعمار. الآن إذا كنت أريد أن أحاول ل سلبية age-- لذلك دعونا أقول أن هناك خمسة أشخاص في الغرفة. عمر الشخص رقم واحد هو سلبي 4، ثلاثة أشخاص هو صفر، شخص three-- موافق. حتى هنا، بعد عام من الآن، عدد شخص واحد سيكون سلبيا 3 سنوات من العمر. لذلك ربما لا يكون له معنى. لولكن هذا مجرد النظر في مدونة كل ما تفعلونه يطلب GetInt. الآن، إذا كان لدينا ل وظيفة GetPositiveInt أو كان علينا القيام به ببساطة هذه نوع من نفسها حين حلقة هناك، ثم هذا من شأنه أن تعمل بشكل جيد تماما. ولكن في هذا الخصوص حالة، ونحن لا فقط يحدث أن يكون التعامل مع القيم السلبية. أي أسئلة أخرى حول المصفوفات؟ حسنا. لذلك رأيناه الآن المصفوفات. ونحن بحاجة الى الذهاب الى استخدام هذا عن وسائط سطر الأوامر. وذلك في مشكلة تعيين two-- أنا أعرف الكثير منكم ربما لا تزال تعمل على مجموعة المشكلة واحد، ولكن المشكلة تعيين اثنين هو الخروج. في مجموعة مشكلة اثنين، وأنت تسير ل تحتاج إلى التعامل مع الجمل، والمصفوفات، وسائط سطر الأوامر. فما هي الحجج سطر الأوامر؟ الآن، يمكنك ان ترى أسفل هنا دعابة قليلا عن بالضبط ما هو على وشك أن يحدث. ونحن نرى كثافة العمليات الرئيسي، ARGC المؤتمر الوطني العراقي، بين قوسين سلسلة ARGV. لذلك دعونا أولا محاولة تفسير ما أن يحاول أن يقول. الآن لابأس. حتى في سطر الأوامر يجب أن تكون التعود على بعض من هذه الأوامر الآن، وربما كنت قد تشغيل مؤتمر نزع السلاح في المحطة قبل. حتى لو قلنا مؤتمر نزع السلاح pset1، كنت أعرف أن ذلك ينبغي يكون تغيير إلى الدليل pset1. لاحظ الآن أن قمت أبدا كتب برنامج مثل هذا من قبل. كل البرنامج الذي كنت قد كتبت، كنت تشغيل، مثلا، دوت خفض ماريو، نقطة خفض الجشع، وبعد ذلك قد يطالبك الإدخال. الآن، هذا ليس ما لا تغيير الدليل. عند تشغيل القرص المضغوط، فإنه لا يقول بعد ذلك، الدليل الذي تريد لمؤتمر نزع السلاح في؟ بدلا من ذلك، كنت أقول، مؤتمر نزع السلاح pset1، و وغني فقط إلى الدليل pset1. لذلك بالمثل لدينا أمثلة أخرى. جعل مرحبا. عند تشغيل جعل، فإنه لا يقول بعد ذلك، البرنامج الذي تريد أن تجعل؟ كنت أقول، في سطر الأوامر تجعل مرحبا. الخطوة مثالا آخر. هذا واحد أننا نسير على mario.c ملف حتى دليل واحد. حتى الآن نحن نعرف مع هذا المثال نحن يمر حقا حجتين. هناك mario.c كما الوسيطة الأولى، ونقطة نقطة هي الحجة الثانية. ثم عند تشغيل جعل، ل نرى هذا الأمر طويلا حقا line-- هذا الأمر طويلا حقا طبع في سطر الأوامر. بحيث command-- طويلة هذا هو مجرد جزء قصير منه، ولكن الآن لدينا ثلاثة وسائط سطر الأوامر. نقطة شرطة الصفر، مرحبا، وhello.c. لذلك فان هذه هي سطر الأوامر الحجج، والحجج ان كنت تمر في سطر الأوامر بحيث ليس من الضروري أن تتم مطالبتك عند تشغيل البرنامج. وسيكون محبطا إذا عندما وقال أنه تشغيلك رنة، "حسنا، التي program-- التي ملف أنك بجمع؟ Hello.c. ما الذي الأعلام ترغب في الدخول؟ اندفاعة س. ماذا تريد ملف ليتم استدعاؤها؟ مرحبا. لا، أنت فقط تشغيل رنة اندفاعة س مرحبا hello.c. لذلك إذا نظرنا إلى الوراء في هذا. الآن ARGC argc-- هو التهم حجة. انها عددا من سطر الأوامر دخلت الحجج في سطر الأوامر. حسنا، من الناحية الفنية argv-- الخامس لتقف على ناقلات، وهو ما يعني أساسا مجموعة. ولكن يمكنك تجاهل ذلك. Argv-- لدينا سلسلة ARGV، لذلك بين قوسين سلسلة ARGV. لذلك هذا هو شكل آخر من أشكال أقواس كنت لم أر من قبل. قوس حتى رأيناه تدوين عندما قلنا، مثل، سلسلة الصورة يساوي Zamyla. الصورة قوس 0 بالوصول إلى Z. شخصية لقد رأينا أيضا بين قوسين عندما قلنا الباحث الأعمار قوس 5. الذي أعلن مجموعة من حجم 5. حتى هنا هو نسخة من بين قوسين نحن لم نر من قبل. لذلك هذا النوع من سلسلة ARGV أن أن يكون على دراية تماما أنه سيكون مجرد سلسلة. الآن تشير الأقواس أن هذه صفيف. لذلك بين قوسين سلسلة ARGV الوسائل أن ARGV هو مجموعة من السلاسل. الآن تقنيا سلسلة هو مجموعة من الأحرف. لذلك هذا هو الآن مجموعة من مجموعة من الأحرف. ولكن انه من الاسهل بكثير للتفكير هذا صفيف فقط من السلاسل. فلماذا قد تكون الأقواس فارغة؟ مثل، لماذا لا يمكننا أن نقول، قوس 5، قوس ن؟ نعم. نعم. نحن لا نعرف كم عدد المدخلات هناك سيكون. لذلك إذا نظرنا إلى المثال رنة، نحن نقول رنة شرطة س مرحبا hello.c. في هذه الحالة بالذات، يحدث هناك أن تكون ثلاث وسائط سطر الأوامر. وهكذا brackets-- سنرى في الثانية أنه لن يكون من الثلاثة. فنيا سيكون الأربعة. ولكن بين قوسين، كنا مثلا، هناك ثلاثة. ولكن الآن إذا نظرنا إلى الخطوة mario.c نقطة نقطة، الأقواس كنا نريد أن نضع اثنين في نفوسهم. وهناك الكثير من الأوامر التي لدينا عدد متغير من سطر الأوامر الحجج. فما هذا الإصدار من يشير تدوين قوس غير أن ARGV هو مجموعة من السلاسل. لكننا لا نعرف كم عدد السلاسل في ذلك مجموعة. وكيف لنا بعد ذلك أعرف كيف العديد من السلاسل في المصفوفة؟ هذا هو ARGC القصيد. ARGC يخبرنا متى ARGV هو. وبالتالي فإن آخر شيء أن نأخذ في العقل هو أنه، من الناحية الفنية، الأمر نفسه التهم واحدة من وسائط سطر الأوامر. لذلك مؤتمر نزع السلاح pset1، وهناك نوعان وسائط سطر الأوامر. البرنامج في حد ذاته، مؤتمر نزع السلاح، ومن ثم الجزء حجة الفعلي منه، pset1. أي برنامج كنت قد كتبت حتى الآن وقد كان خط أمر واحد argument-- نقطة خفض ماريو. هذا هو فقط وسيطة سطر الأوامر. تبحث حتى الآن في رنة اندفاعة س مرحبا hello.c. فما هو ARGC؟ 4. حتى ARGC هو 4. رنة، قوس ARGV ذلك 0 ورنة. ARGV قوس 1 هو اندفاع 0. ARGV قوس 2 هو مرحبا، و ARGV قوس 3 هو hello.c. OK، من الأسئلة حول هذا الموضوع، وبعد ذلك سوف نقوم نلقي نظرة على بعض الأمثلة البرمجية. حسنا. ولذا فإننا سوف نلقي نظرة على hello3.c. هذا ما ينبغي أن يكون على دراية من أحد الأمثلة ج الأولى كان لدينا حيث كنا نقول فقط، مرحبا العالم، ولكن الآن هذا هو أعم. حتى هنا نحن نقول مرحبا ٪ الصورة مائل ن ARGV قوس 1. Notice-- ذلك حتى هذه النقطة، وهذا هو ما بدا لي ملف قالب مثل. كان لي كثافة العمليات الرئيسي (الفراغ)، ثم أود تفعل شيئا في الوظيفة الرئيسية. الآن بدلا من ذلك، عندما نبدأ التعامل مع وسائط سطر الأوامر، نحن بحاجة لدولة ل شكل مختلف من الرئيسية. حتى النظر في hello3 مرة أخرى، وأهم يجري لاخذ اثنين من الحجج now-- الباحث ARGC، عدد وسائط سطر الأوامر، وسلسلة ARGV بين قوسين، والفعلية دخلت السلاسل في سطر الأوامر. لذلك أنا ذاهب لتغيير ذلك قالب لتعكس هذا الواقع. الآن كلما تكتب برنامج، إذا كنت لا تحتاج إلى اتخاذ أي سطر الأوامر الحجج، ثم مجرد استخدام كثافة العمليات الرئيسي (الفراغ). ولكن الآن عندما كنت تكتب برامج وسيطة سطر الأوامر، التي كنت تنوي أن تفعل لمشكلة تعيين two-- حتى الآن بعد أن كنت تقوم بتشغيل البرامج التي تحتاج إلى اتخاذ وسائط سطر الأوامر، تحتاج إلى أن يكون أهم من هذا النموذج. حتى here-- هذا هو الاستخدام الكبير من وسيطة سطر الأوامر. حتى طباعة ARGV 1. OK لذلك دعونا تجميع وتشغيل هذا البرنامج. جعل hello3. يجمع. نقطة خفض hello3. ودعنا نقول، "روب". مرحبا روب. إذا قلت، "مرحبا ماريا،" مرحبا ماريا. مرحبا ماريا. هانا لا يزال يقول: "مرحبا ماريا "، لأنني لست فعل أي شيء لدينا ARGV 2. ARGV 2 الآن سيكون "هانا". سوف يكون ARGC 3. ماذا لو فعلت هذا؟ لذلك مرحبا اغية. وتطرق لفترة وجيزة على حقيقة ذلك، من الناحية الفنية، GetString قد يعود لاغية، لكننا سوف تحصل على الكثير الى ما لاغية هو في الواقع. ولكن أعتبر كمسألة الحقيقة أنه لا يوجد أمر سيء بشكل عام. فعلنا شيئا خاطئا إذا انها الطباعة "مرحبا لاغية". والسبب فعلنا شيئا خاطئا جيدا is--، عندما ركضت دوت مائل hello3، كان ARGC 1. وهذا يعني أن طول ARGV 1. إذا كان الصفيف من طول 1، المؤشر الصحيح الوحيد هو صفر. وحتى هنا ARGV 1 خارج مجموعة من هذه المجموعة. كان مماثلا لمن قبل عندما حاولت لتخزين 6 خارج نهاية المصفوفة. لذلك أنا أحاول الوصول إلى شيء خارج التهم ARGV، ونحن نحصل على باطل. لذلك أفضل نسخة من هذا، تحسن، تم فحص ARGC صراحة. حتى إذا ARGC يساوي 2، وهذا يعني هربنا شيء من هذا القبيل نقطة مائل hello3 روب. وسوف طباعة "مرحبا روب". إذا ARGC لا يساوي 2، ثم انها مجرد الذهاب تجاهل مهما كنت وضعت في وسيطة سطر الأوامر كوسائط سطر الأوامر. أو إذا كنت لم تضع أي في كل شيء، مجرد الذهاب إلى تجاهل ذلك، ونقول فقط، "مرحبا انت." حتى إعداد هذا. جعل hello4. وتعمل hello4. تشغيله بهذه الطريقة، ما يجب أن تكون مطبوعة؟ "مرحبا انت." مرحبا انت. ماذا عن hello4 روب؟ "مرحبا روب". وأخيرا، مرحبا روب ماريا هو مجرد "مرحبا أنت" مرة أخرى، لأنك لم تدخل حقا وهو الأمر الذي من المتوقع. لقد أدخلت عددا من الأسماء مما كان يمكن التعامل معها، لذلك تخلفت فقط ل ومرحبا لكم السلوك. من الأسئلة حول هذا؟ أو وسائط سطر الأوامر؟ OK، حتى أخذ نظرة على مزيد من الأمثلة زوجين من استخدام سطر الأوامر arguments-- أولا لقد ARGV اندفاعة 1 نقطة مئوية. لذا التعليقات التخلي عن ما هذا البرنامج يجب أن تفعل. ولكن لاحظ now-- هذا للحلقة، هذا يطابق النمط المحدد كنت أقول من قبل. نحن يحدث لمجرد أن يكون باستخدام ARGC بدلا من ن. الآن ARGC هو حقا ن. انها طول المصفوفة ARGV. بحيث يتم بالتكرار عبر ARGV مجموعة قيمة كل ARGV جي printf. لذلك إذا قمت بعمل ذلك. جعل ARGV 1. وتجمع. نقطة خفض ARGV 1. تشغيل فقط هذا، يطبع دوت مائل ARGV 1 منذ أن كان الوحيد سطر الأوامر argument-- اسم البرنامج. سيكون هناك دائما في least-- ARGC لا يمكن أن يكون أقل من واحد، وبما أن هناك دائما على الأقل يكون اسم البرنامج لتشغيل. حتى ARGV 1 سوف روب طباعة ARGV 1 ومن ثم على الخط الجديد "روب". وذلك في التكرار الأول هذه الحلقة، أنا هو 0. ARGV 0 هو اسم البرنامج. نقطة خفض ARGV 1. ثم ARGV 1 هي المرة الأولى وسيطة سطر الأوامر، وهو روب. عند هذه النقطة، نحن متساوون في ARGC. نحن خروج من حلقة وننتهي. لذلك هذا سنعمل لتحقيق تعسفيا عدد من وسائط سطر الأوامر. لاحظ أنه يطبع ARGV 0، ARGV 1، 2 ARGV، ARGV 3، 4 ARGV. وليس هناك ARGV 5. ARGC يساوي 5. حتى في argc-- في الاول يساوي 5، نحن الخروج من الحلقة. حسنا. من الأسئلة على ذلك قبل أن ننظر إلى مثال أكثر تعقيدا؟ حتى ARGV 2. حسنا. لذلك نحن ما زلنا طباعة وسائط سطر الأوامر. ولكن الآن تلاحظ لدينا متداخلة للحلقة. فما هو هذا تفعل؟ حتى الحلقة الأولى يقوم به بالضبط ما فعلت من قبل. نحن لا نزال حلقات أكثر كل وسيطة سطر الأوامر، ولكن الآن هذا loop-- الثانية قمنا كما شهدت شيئا مثل هذا من قبل. عندما كان بالتكرار عبر Zamyla طبع Z-A-M-Y-L-A. حتى هذه الحلقة الثانية لكثافة العمليات ي يساوي 0، ن يساوي strlen من ARGV قوس ط. لذلك دعونا نفكر أولا ل the-- دعونا من خلال المشي. دعونا نفكر ما من شأنه الكمبيوتر تفعل إذا ركضت هذا البرنامج كما دوت فقط خفض ARGV اندفاعة 2. حتى إذا ركضت هذا الرمز، ثم ARGC سيكون يساوي 1. وسلسلة argv-- هناك فقط سيكون مؤشر واحد في ARGV، وهذا سوف يكون مساويا لنقطة خفض ARGV 2-- اسم البرنامج. حسنا، الآن أنا يساوي 0، ط أقل من 1، ط زائد زائد عن الباحث ي يساوي 0، ن يساوي strlen من ARGV قوس 0، وذلك في التكرار الأول من هذه الحلقة. ARGV قوس 0 غير مائل دوت ARGV 2. فما هو طول هذه السلسلة؟ حسنا، دوت خفض A-R-G-V اندفاعة 2. لذلك strlen من شأنها أن تكون 8. لذلك ي يساوي 0، ن يساوي 8. طالما ي أقل من 8، ي ++. ومع أننا في طريقنا لتكون طباعة حرف واحد، والتي غير ARGV قوس قوس ط ي. لذلك أنا الوحيد هو صفر. لا يزال لدينا واحدة فقط وسيطة سطر الأوامر. في هذا التكرار الأول من أجل حلقة، ونحن سيكون الطباعة ARGV قوس قوس 0 0. ثم ي هو الذهاب الى زيادة. ونحن في طريقنا للطباعة ARGV قوس قوس 0 1. ثم ARGV قوس قوس 0 2. لذلك هذا هو أول لقاء لدينا من المصفوفات متعددة الأبعاد. تذكر في وقت سابق ان قلت أن ARGV من الناحية التقنية مجموعة من صفائف حرفا. حتى هنا إذا قلت شيء من هذا القبيل سلسلة ق يساوي ARGV قوس ط، ثم قلت، ق قوس ي، هذا سيكون قيام بالشيء نفسه. الآن، كنت قد رأيت الصورة قوس ي من قبل. أن مجرد الوصول إلى J-عشر حرف من هذه السلسلة. حتى مع هذا، ونحن الحصول على -ي ال طابع ARGV ط عشر. وذلك ما ينبغي هذا الناتج في نهاية المطاف؟ جعل ARGV 2. وتجمع. نقطة خفض ARGV 2. "روب ماريا هانا" وتعطينا بعض الغرف. لذلك نحن نرى أن هذا هو إخراج نقطة على السطر الخاص به ومائل على خط خاص به وعلى السطر الخاص به. انها طبع كل الطابع الفردي كل وسيطة سطر الأوامر. وبعد ذلك بينهما، بسبب هذا الخط الجديد نحن الطباعة إلى هنا، في بين لهم أنه سوف طباعة سطر جديد. لذلك هذا هو مماثل ل وARGV اندفاعة السابقة 1، الذي طبع كل وسيطة سطر الأوامر، ولكن الآن نحن الطباعة وسائط سطر الأوامر ثم بالتكرار عبر كل شخصية كل وسيطة سطر الأوامر للحصول على هذا الانتاج. موافق؟ من الأسئلة حول هذا؟ شيء واحد هو أن نلاحظ أن سطر الأوامر arguments-- حتى يفصل بينهما مسافات كما تتوقعون من الطبيعي لها أن تكون. لذلك يمكن أن يكون سلسلة مسافات فيه. انها ليست فائقة الأهمية، ولكن إذا أنا أراد ثالثة وسيطة سطر الأوامر أن يكون لها مساحة في ذلك، ثم أنا يمكن القول بشيء من هذا القبيل. موافق؟ لذلك هذا الآن لا يزال لديه ثلاثة فقط سطر الأوامر arguments-- جيدا 4. نقطة خفض ARGV اندفاعة 2، روب، ماريا، وهانا بلومبرغ. حسنا. أسئلة حول هذا؟ لا يوجد شيء خاص عن مسافة. انه يحدث لمجرد أن أن سطر الأوامر يعامل حرف مسافة كما كيف فصل كل حجة. حسنا. حتى ذلك الحين مجموعة مشكلة two-- وأنت تسير أن يكون أبحث في التشفير سر مفتاح. لذلك، على غرار هذا المثال رأينا من قصة عيد الميلاد، كنت على وشك أن تنفيذ بعض خوارزميات أنه بالنظر رسالة، وأنت تسير لتكون قادرة لتشفير هذه الرسالة أن شخصا فقط مع هذا السر مفتاح، مع أن حلقة فك، يجب أن تكون قادرة على فك تشفير. لذلك هذا هو الإصدار القياسي. كنت على وشك أن تنفيذ نسختين مختلفتين. إذا كنت يحدث لنلقي نظرة في الهاكر الإصدار المميز الآن، ونحن في طريقنا لإعطاء لكم سلسلة من هذا القبيل، وهو ما يمثل كلمة السر المشفرة. لذلك هدفك هو لمعرفة ما هي كلمة السر فك شفرة. الآن هذا هو في الواقع كيف كلمات السر يتم تخزينها في الكثير من أجهزة الكمبيوتر، ويقوم بتخزين هذا فقط سلسلة من الأحرف العشوائية. لديك لمعرفة كيفية الحصول على من هذه السلسلة من الأحرف العشوائية لما كانت كلمة السر الأصلية. وأخيرا، وبعد هذا مجموعة المشكلة، يجب عليك تكون قادرة على فهم ما يعنيه هذا. لذلك سوف نتعلم كيفية فك تشفير هذا النوع من سلسلة عشوائية. وبالمثل، إذا كنت تتذكر من أسبوع 0، كنت قد رأيت هذا URL. ويجب أن تكون قادرة على فك تشفير هذه في نهاية المطاف. قد لا تكون سعيدة عندما كنت فك تشفير وانقر على الرابط. حسنا. هذا كل شيء لهذا اليوم. حتى أراك الأسبوع المقبل! [عزف الموسيقى الإلكترونية]