[Powered by Google Translate] [القسم 3] [أقل راحة]
>> [نيت Hardison] [جامعة هارفارد]
>> [هذا CS50.] [CS50.TV]
>> حسنا، دعونا نبدأ.
مرحبا بكم في الأسبوع 4 من CS50.
إذا يا رفاق فتح مستعرض ويب وفتح pset 3،
يتبارى مع CS50، ونحن في طريقنا للبدء في الذهاب إليه
من خلال قسم من الأسئلة هناك.
تماما مثل الاسبوع الماضي، سنكون في العمل CS50 المسافات،
إذا عليك سحب أيضا أن ما يصل أيضا،
وإذا كنت تمضي قدما وزيارة هذا الرابط الذي أنا عندي هنا في الأعلى.
حان الوقت للبدء.
لدينا برنامجنا مرحبا قليلا هنا. مجنون لا شيء.
واحد من أول الأشياء التي أريد القيام به مع رفاق اليوم هو الذهاب على بعض الحلول
إلى المجموعة المشكلة 1، نوع من الحلول سبيل المثال،
فقط حتى تتمكن من الحصول على ما نرى لأنواع من الموظفين ورمز الكتابة،
ما هي أنواع الطلاب التعليمات البرمجية الأخرى والكتابة،
ويكون لك نلقي نظرة على ذلك لأنني أعلم أنه غريب
عند إرسال حل لمشكلة مجموعة والحصول على تعليقات
على النسخة الخاصة بك، ولكن أحيانا يكون من المفيد أن نرى كيف يمكن للناس الآخرين فعل ذلك،
وخاصة تلك التي هي لطيفة تبحث.
بالنسبة للجزء الاكبر، وقد أعجب حقا مع الحلول التي أنتجت يا رفاق.
أنا لم تبدأ بعد النظر في مجموعة 2S الخاص مشكلة، ولكن إذا كنت مثل أي شيء كانوا أول،
وهذا يعني شيئا ولكن الأشياء الجيدة.
>> اذا نظرتم الى التنقيحات بلدي، لنبدأ على طول الطريق في مراجعة 1،
ونحن في طريقنا لإلقاء نظرة سريعة على حل ماريو.
إذا كنت سحب هذا الأمر، وهذه البرامج التي نحن في طريقنا إلى تقديم صحيحة.
لم تكن هناك قضايا صحة مع هذه المشاكل، ولكن بدلا من ذلك،
نريد أن نتحدث قليلا عن القضايا تصميم مختلف
كانت تستخدم ذلك هنا.
واحدة من الأشياء التي كانت مثيرة للاهتمام حول حل
هو أنه يستخدم هذا بناء جديد يسمى الجنيه تعريف،
في بعض الأحيان كما يشار إلى تجزئة تعريف.
اسمحوا لي أن التكبير في ذلك هنا.
A # تعريف يسمح لك لإعطاء أسماء لهذه الأرقام في البرنامج.
في هذه الحالة، من أقصى ارتفاع هرم في ماريو
و23 و بدلا من وضع 23 في بلدي رمز
نود أن نشير إلى أنه من الصعب الترميز 23 -
وبدلا من ذلك يعطي MAX_HEIGHT اسم لهذا العدد،
بحيث أسفل هنا في حلقة افعل حين بلدي
يمكنك الرجوع إلى الواقع MAX_HEIGHT
بدلا من وضع رقم 23 فيه.
[طالب] ما هو الاستفادة من ذلك؟
هذا هو السؤال الكبير.
واحد هو سهولة القراءة.
وميزة استخدام هذا تعريف # هو سهولة القراءة.
عندما أنا أقرأ هذا الرمز، أستطيع أن أرى ما يحدث.
>> أستطيع أن أرى في هذه الحالة هنا أننا اختبار
لارتفاع كونها <0، وهو ما كان يمكن أن يعرف أيضا
أن تكون على ارتفاع الحد الأدنى أو الحد الأدنى على ارتفاع.
ميزة أخرى هي أن أستطيع أن أقرأ ثم بقية خط لرؤية
أننا أيضا فحص للتأكد من أن ارتفاع ليس أكبر من ارتفاع ماكس،
لأننا في طريقنا للتواصل في حين أن ارتفاع أكبر من ارتفاع كحد أقصى.
ميزة أخرى هي، إذا كنت تصغير قليلا هنا،
إذا قمت بتشغيل هذا البرنامج وأنا تشغيله، ويقول، مع 23 في الوقت الراهن،
فإنه سيتم طباعة كافة الصفوف 23 فقط من هذا القبيل.
ولكن أردت أن أقول تغيير ارتفاع ماكس،
والآن أريد أن يحد من أقصى ارتفاع من الأهرامات
لتكون فقط أقول أنا، الذي كان غير تقليدي.
# تشمل ، تعريف # MAX_HEIGHT،
ودعونا نقول اننا نريد تعيين يساوي 10.
الآن في هذه المرحلة، وكان كل ما كان علي القيام به هو تغيير في هذا الموقع واحد.
لا أستطيع إعادة ترجمة التعليمات البرمجية، والآن إذا حاولت اكتب في و12،
وسوف يدفع لي مرة أخرى.
في هذه الحالة، نحن نستخدم فقط MAX_HEIGHT مرة واحدة.
انها ليست بهذا الحجم من المتاعب للذهاب في
وتغييره في حلقة بينما إذا كنت في حاجة إليها.
ولكن في البرامج التي كنت الرجوع إلى نفس الرقم السحري
مرارا وتكرارا، وهذا تعريف # آلية حقا هو مفيد
لأنك مجرد تغيير مرة واحدة في الجزء العلوي من الملف-IT-لهم هذا عادة حيث يمكنك وضع
ويتسرب التغيير من خلال ما تبقى من الملف.
>> بدا أمور أخرى أردت أن نلاحظ في هذه المهمة التي اعتقدت لطيف،
كان واحدا من تسمية المتغيرات.
ترى هنا أن لدينا متغيرات صحيحا دعا صف ويسمى الارتفاع.
مسافات، التجزئة، فإنه يساعد على جعل رمز قليلا أكثر قابلية للقراءة،
يجعل من قليلا أكثر قابلية للفهم ما يجري في الواقع على.
هذا هو على النقيض من استخدام، ويقول، رسائل عشوائية
أو مجرد الهراء تماما.
والشيء النهائي سوف نشير إلى أنه في لحلقات،
في كثير من الأحيان هذه المتغيرات مكرر، هذه العدادات التي تستخدمها في عملك لحلقات،
من المألوف والتقليدي لبدء لهم إما أنا وثم ي ثم ك
ويجري من هناك إذا كنت بحاجة إلى المزيد من المتغيرات،
وهذا هو مجرد اتفاقية.
هناك الكثير من الاتفاقيات.
ذلك يعتمد على لغة البرمجة التي تستخدمها.
ولكن في C، ونحن نبدأ عادة مع ط.
فإنه لا معنى لاستخدام، مثلا، أو ب
تبعا للحالة.
هذا كل شيء لهذا واحد.
إذا كنت سحب الان مراجعة 2، سترى ماريو آخر،
وهذا واحد يشبه الآخر الذي رأيناه للتو،
ولكنه نوع من شيء بارد.
إذا نظرنا إلى هذا القسم هنا داخل الداخلية للحلقة،
الذي يستخدمونه بعض بناء الجملة مجنون يبحث هنا في هذا الخط.
وهذا ما يسمى مشغل الثلاثي.
وهو بيان والا اذا مكثفة في سطر واحد.
الشرط هو هذا الجزء داخل أقواس.
انها يتساوى مع من يقول إن ارتفاع <ي - ط - 1.
ثم ما محتويات أنه إذا كتلة سيكون هي الفضاء
ثم محتويات ما هي آخر سيكون هذا #.
انها اساسا تعيين مساحة لهذا المتغير.
انها تضع مسافة في محتويات متغير كتلة،
إذا تم تحقيق هذا الشرط، وإذا لم يتحقق الشرط،
ثم متغير كتلة يحصل على هذا #.
وبعد ذلك، بالطبع، بدلا من بناء سلسلة كاملة
وطباعة كل شيء في نهاية هذا الحل يطبع بها حرف واحد في كل مرة.
رائع.
>> آخر زوجين من الأشياء للنظر في. سوف ننتقل إلى الجشع.
الآن إذا نظرنا إلى الجشع، وهذا الحل الأول
# يستخدم هذه يعرف قليلا جدا.
لدينا تعريف واحد ثابت لكل من أرقام مختلفة في هذا البرنامج.
لدينا واحدة لسنتا لكل دولار، واحدة للأرباع، الدايمات، النيكل، والبنسات،
والآن إذا كنا انتقل لأسفل وقراءة الرمز،
يمكننا أن نرى مستوى الطباعة حلقة افعل كل شيء في حين.
هو نوع من جوهر هذه المشكلة إدراك أن
كنت في حاجة لتحويل تعويم أن تقرأ في من المستخدم إلى عدد صحيح
للقيام بدقة الرياضيات، وذلك لأن
مع أرقام الفاصلة العائمة، مثل تحدثنا عنها في محاضرة لفترة وجيزة،
انها ليست ممكنة لتمثيل كل قيمة واحدة بدقة على خط الأعداد
لأن هناك العديد من القيم ما لا نهاية بين 3 و، يقول، 3.1 حتى.
هل يمكن أن يكون 3.01 و3،001 3،0001 و، ويمكنك الاستمرار.
كلما اتضح كنت تعمل مع المال، وتريد في كثير من الأحيان لتحويله
في شكل صحيح بحيث كنت لا تفقد أجر ضئيل وهذا النوع من الاشياء.
يفعل ذلك وكان التقريب الرئيسية.
استخدام هذا الحل واضحة تماما، خوارزمية كبيرة،
التي decremented عدد سنتا المتبقية، أولا من قبل جهات،
ثم الدايمات، ثم النيكل، ثم البنسات،
وإضافة إلى عدد من القطع النقدية في كل مرة.
>> حل آخر أن سنرى، وأنا التصغير والذهاب إلى التنقيح 4،
كان له بداية ولكن مشابهة جدا DIV تستخدم بدلا زارة الدفاع و
الحق أكثر من هنا لحساب عدد من سنتات.
هذا، وعدد من الجهات يساوي عدد سنتا مقسوما على 25،
والسبب هذا يعمل لأن نقوم به قسمة عدد صحيح،
لذلك فمن نافين ما تبقى.
[طالب] هل لدينا للتعليق على البحث؟
انها حقا يتوقف.
[طالب] أنت أكثر من رمز التعليق هنا.
نعم، وحتى أن هناك مجموعة من الفلسفات المختلفة في هذا الشأن.
فلسفتي الشخصية هي أن التعليمات البرمجية في الحقيقة الحقيقة،
مثل التعليمات البرمجية هو ما المنفذة فعليا على جهاز الكمبيوتر،
وهكذا ينبغي أن تكون قابلة للقراءة التعليمات البرمجية ممكن للا تتطلب الكثير من التعليقات و.
وقال أنه عندما تقومون به الأشياء التي هي نوع من صعبة رياضيا
أو حسابيا، أنه من الجيد أن تلك التعليق بحيث يمكنك
إضافة بعدا جديدا، طبقة إضافية لمن يقرأ التعليمات البرمجية.
في هذه الحلول، وغالبا ما يتم بشكل أكبر أنها علقت لمجرد
نريد أن نكون قادرين على توزيعها ويكون الناس اعتقالهما
وقراءتها بسهولة جدا.
ولكن بالتأكيد، أود أن نتفق على أن هذا هو الثقيلة.
[طالب] ولكن عندما تكون في شك، انتقل أثقل؟
عندما تكون في شك، انتقل أثقل.
سيقول بعض الناس في بعض الأحيان 0 العودة أو شيء من هذا القبيل.
أعتقد أن هذا تعليق مثير للسخرية.
بوضوح ما يحدث.
أنا لست بحاجة إلى الإنجليزية ليقول لي ذلك.
في بعض الأحيان سوف يكتبه الناس أشياء مثل "kthxbai!"
وهذا النوع من لطيف ولكن أيضا، وليس
هذا لا يجعل الفرق بين نقاط التعليق أم لا.
تلك الأنواع من التعليقات ليست سوى ها، ها.
بارد.
>> في هذه المرحلة، لنبدأ العمل على حل المشكلة تعيين 3 القسم من الأسئلة.
إذا يا رفاق سحب هذا الأمر مرة أخرى،
كما هو الحال مع الاسبوع الماضي، ونحن لن لمشاهدة الأفلام القصيرة في هذا القسم.
سنقوم تتيح لك القيام بذلك على اللاعبين الوقت الخاص بك والحديث عن الأسئلة.
ولكن الآن في هذا القسم ونحن في طريقنا لقضاء بعض الوقت أكثر من ذلك بقليل
نتحدث عن أقل من أساسيات الترميز
كما فعلنا في الأسبوع الماضي، وبدلا من ذلك، نحن ذاهبون الى التركيز أكثر على
أكثر قليلا من الناحية النظرية، لذلك نتحدث عن البحث الثنائية ومن ثم الفرز.
من أولئك منكم الذين يتابعون مع المحاضرة،
شخص ما يمكن أن تعطيني خلاصة ما هو الفرق
البحث الثنائية بين خطي والبحث؟
ما الذي يحدث؟ بالتأكيد.
البحث البحث من خلال خطي كل عنصر في قائمة مصنفة
واحدا تلو الآخر من جانب واحد من قبل واحدا تلو الآخر،
ويقسم البحث الثنائية القائمة إلى 2 الجماعات،
إذا كانت قيمة الشيكات المفاتيح التي كنت تبحث عن أكبر من أو أقل من قيمة نقطة الوسط
التي يمكنك العثور عليها فقط، وإذا كان أقل من، وغني مع انخفاض قائمة
ويقسم بعد ذلك مرة أخرى، هل نفس الوظيفة
على طول الطريق حتى يجدها نقطة الوسط ليكون مساويا لقيمة نفسه.
الحق.
>> لماذا نهتم؟
لماذا نتحدث عن البحث الثنائية مقابل البحث الخطي؟
نعم.
ثنائي هو أسرع كثيرا، حتى إذا كنت مضاعفة حجم المشكلة
فإنه يأخذ خطوة أخرى بدلا من يصل الى مرتين.
بالضبط.
هذا هو الجواب كبيرة.
البحث الخطي وكثيرا التحقق عنصر واحد في كل مرة،
وكما رأينا في اليوم الأول من المحاضرة
عندما ذهب ديفيد من خلال هاتفه سبيل المثال كتاب
وانفجرت من صفحة واحدة من دليل الهاتف في وقت
وأبقى فعل ذلك مرارا وتكرارا وتكرارا،
انها سوف تأخذ منه وقتا طويلا للعثور على أي شخص حقا في دليل الهاتف،
ما لم يكن، بطبيعة الحال، كان يبحث عن شخص ما في بداية الأبجدية.
البحث مع ثنائي، يمكنك الذهاب على نحو أسرع كثيرا،
وانها ليست بنفس السرعة مرتين أو 3 مرات في أسرع أو 4 مرات في أسرع.
ولكن المشكلة تحصل أصغر وأصغر وأصغر أسرع بكثير.
لتوضيح هذا، سوف نبدأ الحديث عن ما يحدث
عندما نكتب البحث الثنائية.
المشكلة في متناول اليد هو أنه إذا كان لدي مجموعة من الأرقام،
يقول، 1، 2، 3، 5، 7، 23، 45، 78، 12323،
و 9 ثم مع من نصف طن من 0S بعد ذلك،
نريد أن تكون قادرة على معرفة ما هو حقا بسرعة في
هذه مجموعة من الأرقام.
أعرف أن هذا يبدو قليلا سخيفة ومفتعلة قليلا،
لأن في الوقت الحالي هو عليه.
لدينا مجموعة ليس لديها عناصر كثيرة جدا في ذلك،
وإذا كان لي أن أطلب واحد منكم لمعرفة ما إذا كان أو لا
23 هو في الصفيف، يمكنك ان تفعل ذلك بسرعة كبيرة
فقط من خلال نظرة عابرة في هذا وتقول لي نعم أو لا.
وتخيل التناظرية للنظر لو كان هذا، كما يقول،
جدول بيانات Excel مع 10،000 الصفوف، 20،000 الصفوف.
بالطبع، يمكنك القيام بما F الأمر أو F السيطرة وتبدو شيء ما.
يمكنك أيضا استخدام الفلاتر والاشياء البحث،
ولكن إذا كان لديك لننظر من خلال هذا الخط من الملف سطرا سطرا،
سوف يستغرق لك وقتا طويلا للعثور عليه.
انه نوع من مثل في الهاتف سبيل المثال الكتاب، أيضا، حيث
لا أحد يبدو من خلال صفحة واحدة دليل الهاتف في كل مرة.
عادة، فإنها فتحه إلى المتوسطة،
أو في حالة وجود الكثير من الكتب والقواميس الهاتف حيث
كنت في الواقع أنها قد مرتبطا على الحرف الأول،
كنت الوجه لأنه الحرف الأول وفتح وبدء تمر هناك.
>> يذكرني اسمك مرة أخرى. >> سام.
سام.
وقال سام مثل، أن عملية البحث الخطي ستكون بطيئة حقا،
وبدلا من ذلك مع بحث ثنائية، ويعمل هذا الطريق هو أن
في كل مرة نذهب من خلال التكرار من أنظمتنا البحث،
نحن ذاهبون الى تقسيم قائمة إلى النصف، أساسا،
الى قسمين أصغر القوائم.
ثم في التكرار التالي من حلقة، سوف نقسم مرة أخرى
في قوائم أخرى أصغر.
كما ترون، فإن المشكلة تزداد أصغر وأصغر
لأننا حفاظ على التخلص من نصف قائمة واحدة كل مرة.
كيف يعمل هذا تجاهل؟
فقط للتذكير، ما نحن في طريقنا للقيام إذا كنا كمبيوتر
وكنا، مثلا، البحث عن رقم 5 في هذه القائمة
هو أننا ما سيعاود رقم في الوسط.
في منتصف هذه القائمة، لأن هناك 1، 2، 3، 4، 5، 6، 7، 8، 9، 10 أرقام،
كنا اختيار عدد إما في موقف 4th أو في موقف 5،
وكنا نسمي ذلك وسط قائمتنا.
اختيار العدد في الوسط.
ثم، تماما كما قال سام، سنقوم بإجراء اختبار لمعرفة ما إذا كان هذا العدد يساوي
إلى الرقم الذي نريد الحصول على أو الرقم المطلوب.
اذا كان على قدم المساواة، ثم وجدنا ذلك. فزنا.
إذا لم تكن متساوية، ثم هناك زوجين من الحالات.
الحالتين إما أن تكون عدد يجب أن يكون أكبر من عدد ونحن نبحث في،
أو أنه أقل من.
إذا كان أكبر، ونحن نتحرك إلى اليمين.
وإذا كان أقل من ذلك، ونحن نتحرك إلى اليسار.
ثم نكرر العملية برمتها مرة أخرى
على نصف إما الحق أو النصف الأيسر من القائمة.
>> المشكلة الأولى في القسم اليوم هو لمعرفة
كيف يمكننا أن نبدأ فعلا للتعبير عن هذا في التعليمات البرمجية C.
لدينا هنا في pseudocode.
ما سنقوم به هو البدء في سحب ما يصل أنا العلامة التجارية الجديدة الفضاء،
حفظ هذا التنقيح حتى يكون لدينا هذه الملاحظات في وقت لاحق،
سوف نقوم بحذف كل هذا، ومن ثم نسخ ولصق من مجموعة مشكلة
هذه المعلومات في مساحات لدينا، ونأمل أن هذا لا يفطر.
الكمال.
إذا يا رفاق تفعل كل ذلك، نسخ ولصق هذا الرمز إلى الفضاء الجديد الخاص بك،
في واحدة فارغة.
دعونا نحاول دانيال. إذا كنت ترجمة وتشغيل هذا البرنامج، وأنها لا تعمل؟
رقم >> ما هو عليه تقول؟
تقول لسيطرة يصل نهاية غير باطلة وظيفة.
نعم، لذلك اسمحوا لي أن أحاول تشغيله.
لقد شهدت يا رفاق هذا من قبل؟ هل تعرف ماذا يعني هذا؟
حسنا، دعونا تشريح هذه قليلا قليلا.
قائلا انه في file.c على خط 9، العمود 1 لدينا خطأ، مثلما قلت،
وتقول ان انها نابعة من الخطأ والتحذير التحذير نوع الإرجاع.
يبدو وكأنه شيء يجري مع نوع الإرجاع، الأمر الذي يجعل الشعور.
ونحن قد حصلت على وظيفة غير باطل، وهو ما يعني أننا قد حصلت على وظيفة
الذي لا يرجع باطلة.
وظيفة الفراغ واحد هو أن يبدو مثل هذا:
الفراغ فو ()، وانها باطلة لأن نوع الإرجاع هو باطل،
مما يعني أنه إذا كان لدينا شيء هنا في
مثل عودة 1، نحصل على الخطأ البرمجي لهذا الغرض.
ومع ذلك، لدينا وظيفة غير باطلة.
لدينا وظيفة غير الفراغ في هذه الحالة هو وظيفة بحثنا
لأنه يحتوي على نوع الإرجاع BOOL.
عندما يكون القول إن التحكم تصل إلى نهاية وظيفة غير باطلة،
انها لبحث لايوجد بيان العودة.
انها ليست شيئا من العودة BOOL نوع.
>> يمكننا تحديد ذلك، وماذا تعتقد يا رفاق
يجب البحث بشكل افتراضي العودة؟
ماذا يجب أن تكون قيمة الإرجاع الافتراضي البحث؟
لأن هذا هو ما يمكننا ان نضع في نهاية المطاف.
شارلوت، هل لديك أي-؟
صحيحة أو خاطئة؟ >> True أو False.
أي واحد؟
كاذبة. لا أعرف.
كاذبة؟ دعونا نحاول ذلك.
لماذا تقولون عودة كاذبة؟ هذا الحدس كبيرة.
[شارلوت] أنا لا أعرف.
ونحن في طريقنا للعودة كاذبة في هذه الحالة لأن هذا سوف يكون لدينا الافتراضي
إذا كان لسبب كانت القائمة فارغة أو إبرة
أننا تبحث عنها غير موجودة.
ثم في النهاية، إذا كنا لا العودة الحقيقية في وقت سابق من هذه الوظيفة،
نحن نعرف دائما أن هذه الوظيفة سيقول كلا، انها ليست في الصفيف.
انها ليست في كومة قش.
الآن إذا كنا ترجمة وتشغيل IT-اسمحوا لي حفظ هذا حتى نتمكن من سحب عنه.
الآن إذا كنا ترجمة وتشغيل برنامجنا، فإنه يبني.
نحصل على موجه لدينا القليل.
إذا كنت ضرب 4-أه أوه.
إلا أنها لم تطبع أي شيء. يبدو كل شيء انتهى بخير.
لدينا لملء هذا فيه
تحدثنا عن خوارزمية في شبة الكود قليلا قبل.
دعني أرى، ما عدا ذلك،
وأنا سحب خوارزمية أن يعود مرة أخرى.
دعونا ضرب هذا الرجل. كلا.
هناك هو عليه.
كيف نفعل ذلك؟
ماذا سيكون استراتيجية جيدة لبدء تشغيل هذا الرمز؟
لديك لاختيار رقم في الوسط.
كيف يمكننا اختيار العدد في منتصف مجموعة؟
أي اقتراحات؟
[طالب] التوابع strlen مقسوما على 2.
التوابع strlen مقسوما على 2. هذا واحدة كبيرة.
التوابع strlen يعمل مع أنواع خاصة من المصفوفات.
ما هي أنواع المصفوفات؟
صفائف السلسلة، صفائف حرف.
فهو أن نفس النوع من مفهوم أننا نريد أن تطبق،
ولكن لا يمكننا استخدام التوابع strlen لأننا لم يكن لديك مجموعة من الأحرف.
لدينا مجموعة من رجات.
ولكن ماذا بالنسبة لنا الحصول على التوابع strlen؟
هل تعرف ما الذي تحصل عليه لدينا؟
[طالب] التوابع strlen يحصل لنا على طول.
بالضبط، فإنه يحصل لنا على طول.
التوابع strlen يحصل على طول الصفيف بالنسبة لنا.
>> كيف يمكننا الحصول على هذا البرنامج من خلال موقعنا ثنائي البحث؟
كيف تحصل على طول صفيف؟
[طالب] التوابع strlen؟
يمكنك الحصول على مجموعة وطول سلسلة C منسق بشكل صحيح مع التوابع strlen.
المشكلة، مع ذلك، هو أننا لم يكن لديك صفيف سلسلة.
إذا نظرنا إلى الوراء في هذا الرمز، لدينا هذه المجموعة عدد صحيح.
كيف نعرف متى هو؟
[طالب] هل هناك واحد يعادل لنقطة النهاية، مثل L الباحث أو شيء؟
كما تبين وجود في الواقع لا، وذلك على نحو ما، هو هذا
واحدة من تلك الأشياء التي فقط جيدة لمعرفة C،
أنه لا يوجد طريقة للحصول على طول صفيف
إذا كل ما أقدمه لكم الصفيف.
السبب أنه يعمل مع السلاسل، والسبب التوابع strlen الأعمال،
لأن إذا تم تنسيق صحيح سلسلة،
فلا بد لها أن الخاصة \ 0 حرف في النهاية.
>> يمكنك أن تتخيل أيضا إذا كان لديك سلسلة منسقة بشكل غير صحيح
وليس هناك \ 0 حرف هناك، ثم كل شيء لا يعمل.
[طالب] يمكنك إضافة \ 0؟
نحن يمكن في هذه الحالة.
يمكن أن نضيف نوعا من \ 0
أو نوعا من حرف يدل ثم استخدام ذلك.
ولكن ذلك لن تماما للعمل
لأن 0 \ هو لنوع شار،
وهنا لدينا رجات.
والشيء الآخر هو ما إذا كان لنا أن استخدام القيمة الخاصة
مثل -1 إلى احتفال بانتهاء مجموعة
ثم يمكننا أبدا تخزين -1 في صفائف لدينا عدد صحيح.
تريد ان تكون عالقة نحن.
كما تبين أن الطريقة الوحيدة للحصول على طول
من صفيف في C هو أن نتذكر أنه في الواقع
عند إعداده ومن ثم تمرير حولها مع مجموعة
بحيث كلما لدي وظيفة التي يجري القيام ببعض الأعمال
على مجموعة من الأعداد الصحيحة أو العوامات أو الزوجي أو ما إلى ذلك،
ولست بحاجة أيضا إلى إعطاء وظيفة طول الصفيف،
وهذا بالضبط ما فعلناه هنا في وظيفة البحث.
اذا نظرتم، ما فعلناه عندما نعبر في مجموعتنا هنا،
نحن نمر أيضا في الطول، والحجم.
انه يحدث لمجرد أن لدينا يسمى هذا المتغير هنا،
هذه المعلمة أو وسيطة.
وهذا ما يسمى قائمة وظيفة في حجة أو قائمة المعلمة،
وتسمى أيضا هذه الحجج أو المعلمات.
الناس استخدام مصطلحات مختلفة في أوقات مختلفة.
I مبادلة في بعض الأحيان لهم نفسي.
انها مجرد أن ذلك يحدث يدعى هذا المتغير هنا بالمثل
لهذا تعريف # هنا.
لكنها ليست نفس الشيء.
رسملة لا يهم.
>> اذا نظرتم الى ما يحدث هنا، نعلن
لدينا مجموعة الباحث، والتي تسمى لدينا أرقام.
لقد أعطيت لنا من حجمنا، والتي تتطابق مع تعريف # لدينا حتى في الأعلى.
انها ستكون 8.
وبعد ذلك عندما ندعو ظيفة ثم بحثنا في الأسفل،
نحن نمر في عدد نريد للبحث عن، والتي قمنا المطالبة،
حصلت من قبل المستخدم.
نحن نمر في الصفيف، وهذا أرقام،
ثم لدينا أيضا لتمرير في حجم الصفيف،
ومن ثم يحصل على تخزين قيمة حجم 8
أو تمريرها إلى هذا الحجم متغير عدد صحيح يسمى.
لدينا حجم الصفيف.
الآن إذا عدنا إلى ما كنا نتحدث عنه في وقت سابق،
أعتقد ميسي ترعرعت درجة أن ما يتعين علينا القيام به هو الحصول على طول الصفيف
ونقسمه 2، والتي من شأنها أن تعطينا نقطة الوسط.
دعونا نرى.
الأول يمكن أن يكون شخص ما أكتب هذا وحفظه في حيزها؟
ماذا عن ليلى؟
الأول يمكن أن يكون هذا في الكتابة؟
كتابة السطر الأول حيث كنت تأخذ من طول الصفيف والحصول على نقطة الوسط
وتخزينها في متغير جديد.
سأعطيك بضع ثوان. هل أنت مستعد؟
[طالب غير مسموع]
تأكد يمكن، لقد كنت تحسب نقطة الوسط
من الصفيف كومة قش داخل وظيفة البحث
باستخدام طول الصفيف كومة قش، والذي هو متغير الحجم؟
صعبة شيء هنا.
[ليلى] حجم فقط / 2 و-فقط
وحفظه، واضغط على زر حفظ هنا حتى في القمة،
وسنقوم بسحب عنه.
الكمال.
هناك نذهب. رهيبة.
>> وكما هو، وهذا تجميع؟
[ليلى] لا، فإنه يجب أن يكون أعلى من ذلك.
[نيت] نعم، فما نحتاج أن تفعل؟
[ليلى] مثل نقطة الوسط الباحث أو شيء.
رهيبة. نعم، دعونا نفعل ذلك، وكثافة العمليات = حجم نقطة الوسط.
وهذا تجميع؟
دعونا حذف هذا التعليق وسهولة الحصول عليها للخروج من الطريق.
سوف يتم ترجمة ما عن هذا؟
نحن لا نفعل أي شيء مع عدد صحيح،
لذلك نحن بحاجة إلى طباعته أو شيء من هذا القبيل.
نعم، بالضبط.
سوف نحصل على متغير غير المستخدمة.
ماذا لا يتم الذهاب إلى العمل حيال ذلك؟
أعتقد أنك قلت شيئا، وسام. منقوطة.
نعم، أنا في عداد المفقودين تلك منقوطة.
انها سوف تكون شيئا دائم طوال فترة هذا المصطلح.
الشيء النهائي سأفعل هو أنني سوف أضع بعض المساحة البيضاء على جانبي
هذا المشغل هنا، منذ ذلك عادة كيف نفعل ذلك
وفقا لدليل أسلوبنا.
لدينا مجموعة من نقطة الوسط لدينا.
إذا علينا أن نتذكر الآن مرة أخرى إلى خوارزمية لدينا،
ما هي الخطوة الثانية التي كان علينا أن نفعل مرة واحدة لدينا نقطة الوسط؟
[طالب] إذا كان أكبر [غير مسموع].
نعم، لذلك يتعين علينا القيام به نوعا من المقارنة، والمقارنة بين ما نحن هنا؟
وقال إذا كان أكبر من. ما هو في تلك الجملة اشارة الى؟
الرقم الذي يأتي، إذا كان هذا هو أكبر من نقطة الوسط، انتقل بعد ذلك إلى مجموعة؟
بالضبط، وبالتالي فإن العدد الذي يأتي عندما نكون-
الإبرة، لذلك نحن مقارنة مع الإبرة،
وماذا نحن ضد إبرة مقارنة؟
لأن الإبرة هو ما تبحث عنه.
نحن مقارنتها للوصول إلى نقطة الوسط.
>> لكن هل من المنطقي أن تحقق لمعرفة
إذا إبرة = نقطة الوسط؟
هل هذا معقول؟
لا أحد يختلف؟
دعونا محاولة إعطائها، إذا (== إبرة نقطة الوسط).
[طالب] هل وجدت لكم انه printf.
[نيت] Printf ("وجدنا أنه \ N!")؛
خلاف ذلك-I صباحا سنبدأ القيام بشيء مختلف هنا.
أنا ذاهب لبدء وضع الأقواس حول إذا كانت تصريحات كل الوقت
لمجرد إذا أضفنا المزيد من الأشياء، ثم
لم نحصل على المجمعين.
نعم، سام. كنت قد حصلت على نقطة.
المشكلة هي أن نقطة الوسط تمثل موقف في الصفيف،
ولكن يمكنك الحصول عليه لتمثيل قيمة في هذا الموقف من الصفيف.
وهذا هو نقطة كبيرة.
لم الجميع يسمع ما قال سام؟
قال إن نقطة الوسط كما هو
يمثل مجرد موقف في الصفيف، ولكنها ليست العنصر الفعلي في الصفيف.
إذا كنت تفكر في كتابة الكود كما في الوقت الراهن،
إذا نظرنا إلى هذه المجموعة هنا إلى أسفل، والذي يحتوي على 8 عناصر فيه،
ما هي قيمة نقطة الوسط ستكون في هذه الوظيفة؟
[طالب] (4).
[نيت] (4).
إذا نظرنا لعدد 4 -
ويمكننا فقط تشغيل هذا الرمز ووضع وجه حزين قليلا هنا
لأننا لم نجد ذلك، إذا نحن تشغيل هذه التعليمات البرمجية
كما هو في الوقت الراهن، تحميلها، وبناء، اسمحوا لي أن انتقل لأسفل،
وإذا نظرنا لعدد 4،
وجدنا ذلك، ولكن لم نحصل على هذا printf نعم.
سبب واحد هو أننا لم يعودوا صحيح،
ولكن لم نجد حقا الرقم 4؟
وسام هو قول لا.
ماذا نجد؟
وجدنا حقا نقطة الوسط، والتي إذا ما نظرنا إلى مجموعة هنا إلى أسفل،
انها سوف تكون عنصر في المؤشر 4 أن ننظر،
التي تقع في 23.
>> كيف يمكننا في الواقع الحصول على هذا العنصر في منتصف
وليس فقط نقطة الوسط نفسه؟
[طالب] أن ندخل حرف أو شيء؟
ماذا تفعل ذلك، للفضول فقط؟
يمكنك وضع أكثر من ذلك بقليل؟
لديك لتحويل الموقف في العدد،
لذلك كنت قد حصلت على إجراء بعض بالاتصال اعتقد انه من شار، ولكن قد يكون لا.
نعم، وهذا هو نقطة جيدة.
لقد كنا نفعل الكثير من هذه المواقف تحويلها إلى أحرف، وهذه الأحرف،
في المجموعة الأولى المشكلة اثنين.
تبين أن هنا، وهذا هو مماثل تقريبا ل
الوصول إلى حرف إيث ضمن سلسلة، إذا كان هذا الأمر يبدو معقولا تماما.
هنا نريد للوصول إلى نقطة الوسط عنصر.
كيف نفعل ذلك؟
كيفن، هل لديك أي اقتراحات كيف يمكننا فعل ذلك؟
إغلاق قوس فتح، منتصف، هل يمكن أن تفعل كومة قش، قوس.
يمكنك كتابة هذا بالنسبة لنا؟
حفظه هنا، وسنقوم سحب ما يصل.
نحن نبحث في هذا الخط 9،
ونحن مدركين أن نحن لا نريد لمقارنة الإبرة إلى نقطة الوسط،
ولكن بدلا من ذلك، ونحن نريد لمقارنة إبرة
إلى العنصر في منتصف الموقف داخل مجموعة كومة قش لدينا.
بارد.
هناك نذهب.
نعم، هذا يبدو جيدا جدا، إذا كان (إبرة == كومة قش [نقطة الوسط]).
وجدنا أنه.
الآن إذا كنا تشغيل التعليمات البرمجية مرة أخرى we'll قليلا بت
يقوم بإعداد، تشغيله، والآن إذا نظرنا لمدة 4،
لم نجد ذلك لأننا الآن في الواقع الحصول على رقم 23.
نحن نحصل على القيمة 23، وهذا ما نقوم بمقارنة لدينا إبرة.
ولكن هذا امر جيد. هذا هو خطوة في الاتجاه الصحيح.
>> هذا ما نحاول القيام به.
نحن لا نسعى لمقارنة إبرة ضد مواقع في الصفيف
بل ضد العناصر الفعلية في الصفيف.
إذا نظرنا إلى الوراء مرة أخرى الآن في الخطوة التالية في أنظمتنا،
ما هي الخطوة التالية؟
ليلى المذكورة بالفعل لفترة وجيزة.
[طالب] تحقق لمعرفة ما اذا كان أكبر من أو أقل من ثم يقرر أي وسيلة للتحرك.
[نيت] نعم، كيف ذلك ونحن نفعل ذلك؟
يمكنك وضع في بعض I'll-حفظ هذا التنقيح،
ثم إذا كنت وضعت في بعض خطوط من شأنها أن تفعل ذلك.
نعم، شارلوت. >> لدي سؤال.
لا ينبغي أن يكون نقطة الوسط - 1 لأن أول شيء هو
انها 0 فهرسته، لذلك إذا وضعنا 4، هذا ليس في الواقع الطابع نحن نبحث عنه؟
نعم، والمشكلة الأخرى مع هذا هو،
وهذا هو الصيد الكبير، وذلك لأن ما يجري في نهاية المطاف ربما يحدث
إذا كان لنا أن نواصل المضي ونحن لا تعديل من أي وقت مضى في البداية؟
أعتقد أن ما نحن قد ينتهي به هو محاولة للوصول إلى
العنصر في الموضع 8 من الصفيف،
وهو في هذه الحالة لا وجود لها.
ونحن نريد أن نفعل نوعا من المحاسبة للحقيقة
أن لدينا بعض الفهرسة صفر.
[شارلوت] عذرا، قصدته منتصف - 1 في أقواس مربعة.
يمكننا أن نفعل ذلك.
سوف نعود إلى هذه المسألة في بت واحد فقط.
نبدأ مرة واحدة للوصول الى حلقات الفعلية،
وذلك عندما سنرى حقا هذا تدخل في الاعتبار.
في الوقت الحاضر، يمكننا أن نفعل ذلك، ولكن كنت على حق تماما.
التي من شأنها أن الفهرسة الصفر يكون لها تأثير أننا بحاجة إلى حساب ل.
دعونا نرى.
>> كيف هي أكبر من وأقل مما كان؟
[طالب] أحصل على كيفية القيام أكبر من وأقل من جزء.
كنت فقط غير متأكد ما يمكن طباعة إذا وجدت أن ذلك أقل من نقطة الوسط كومة قش أو أكبر من.
هنا يمكنني انقاذ ما I've-
[نيت] نعم، إذا قمت بحفظ ما كنت قد حصلت، وسنقوم بسحب عنه.
هناك نذهب.
[طالب] وأضع علامات استفهام على ما لم أكن أعرف.
[نيت] التي تبدو كبيرة.
هنا نحن لدينا علامات استفهام لأننا ما زلنا لا نعرف
ما نحن بصدد القيام به تماما حتى الآن.
ماذا نريد أن نفعل، عفوا، لقد حصلت على بعض الأقواس غير تقليدي علينا جميعا.
سنقوم تصحيح هذه الأقواس.
هناك نذهب.
وذلك ما نريد القيام به، وفقا لخوارزمية لدينا،
إذا لم نجد الإبرة؟
ويقول في حالة أن الإبرة هي اقل مما نحن نبحث في. كيفن.
ننظر فقط في النصف الأيسر.
الحق، لذلك سوف نضع هنا في تعليق يقول "ننظر في النصف الأيسر".
وإذا كان إبرة أكبر من كومة قش في منتصف، ماذا نريد أن نفعل؟
[طالب] ثم نظرتم الى النصف الأيمن.
إلقاء نظرة على النصف الأيمن، "ننظر في النصف الأيمن."
لا رث جدا.
حسنا، لذلك في هذه المرحلة، الامور تبدو جيدة.
مشكلة مع رمز كما هو مكتوب ما هو؟
[طالب] ليس لديك نقاط النهاية لنصفين.
الحق، ونحن لم يكن لديك نقاط النهاية لنصفين.
نحن أيضا لن يؤدي الا من خلال الذهاب الى هذا مرة واحدة.
ونحن في طريقنا للبحث فقط في واحدة نقطة الوسط.
إما العنصر هو هناك، أو أنه ليس كذلك.
من أجل إتمام هذا، سوف يتعين علينا القيام به نوعا من التكرار.
نحن بحاجة للحفاظ على تكرار حتى نجد أن
إما العنصر هو في هناك لأننا يضيق الخناق وأخيرا وجدت ذلك،
أو انها ليست في وجود لبحثنا من خلال جميع الأشياء
في نصفي المناسبة للصفيف وجدت أن لا شيء هناك.
>> كلما كنا قد حصلت على هذا التكرار يحدث، ما نحن ذاهبون للاستخدام؟
[طالب] حلقة.
نوعا من الحلقة. نعم.
[طالب] هل يمكن أن تفعل حلقة افعل حين، وأنها تفعل ذلك ثم حين
الإبرة لا يساوي-أنا لست متأكدا من أين كنت ذاهبا في ذلك.
ولكن نوع من مثل ذلك طالما أنه لا يساوي القيمة التي مدخلات المستخدم.
نعم، لذلك دعونا نرى كيف يمكن هذه الكتابة نفسها؟
قلت دعونا استخدام حلقة افعل الوقت.
أين القيام البداية؟
[طالب] مباشرة بعد حجم / 2.
[نيت] حسنا، وماذا نحن فاعلون؟
سنقوم في حين ملء وقت لاحق.
ما نحن فاعلون؟
[طالب] لا نريد أن نفعل كل الاشياء لدينا في الجزء إذا؟
[نيت] هل كل هذه الأشياء، عظيم.
نسخ ولصق.
أوه، رجل.
دعونا نرى إذا كان هذا يعمل، إذا وسعنا هذا التبويب على.
جميلة.
حسنا، ونحن حتى حفظ هذا يا رفاق الحصول عليها.
كل الحق، ونحن بصدد القيام بذلك في حين-
ما هو الشرط بينما كنت بعد؟
[طالب] على الرغم من أن الإبرة لا يساوي، لذلك مثل علامة تعجب.
ولكن لست متأكدا بالضبط ما هو حتى الان.
[نيت] نعم، هذا هو واحد طريقة للقيام بذلك.
سام، هل لديك تعليق؟
[سام] تذكرت عندما نظرت إلى أشرطة الفيديو،
أخذت لقطة واحدة من مثل وعندما فعلنا في pseudocode لذلك،
كان هناك بعض العلاقة بين ماكس ودقيقة.
وأعتقد أنه كان شيء من هذا القبيل إذا الحد الأقصى هو أقل من أي وقت مضى من دقيقة.
حصلت عليه.
[سام] أو ما شابه إذا ماكس ليست أقل من دقيقة أو شيء من هذا القبيل،
لأن ذلك يعني أن كنت قد بحثت كل شيء.
>> نعم، وماذا في ذلك أنها لا تبدو دقيقة كحد أقصى وكانت اشارة الى؟
[سام]-القيم التي الأعداد الصحيحة التي تجري لتغيير
نسبة إلى حيث وضعنا نقطة الوسط.
بالضبط.
[سام] وعند هذه النقطة، لانه سيكون [غير مسموع] حساب الحد الأقصى والحد الأدنى.
منتصف هذا الحد الأقصى والحد الأدنى فكرة.
هل هذا معقول إلى الناس؟
إذا كان لنا أن تبدأ في النظر في كيفية ونحن في طريقنا للقيام بذلك التكرار،
أنت على حق تماما أننا نريد أن استخدام نوع من حين تفعل حلقة.
ولكن أعتقد إذا كنا نتذكر ما يحدث في بقعة من هذه المجموعة
وما يحدث في الواقع-I صباحا أريد أن أكتب أكثر من هنا،
في التكرار الأول من البحث الثنائي، لدينا،
انا ذاهب الى استخدام باء وهاء للدلالة على بداية.
ومن ثم نهاية مجموعتنا.
ونحن نعلم أن بداية هو الحق في 4 أكثر من هنا،
ونحن نعلم أن النهاية هي في 108.
نقول تبحث عن رقم 15.
المرة الأولى التي تفعل ذلك، مثل رأينا في وقت سابق،
نقطة الوسط يجري إما لتكون 16 أو 23
اعتمادا على كيفية حساب الامور.
ومنذ تقسيم بالتساوي في منتصف تعطينا هذه المساحة
بين 16 و 23، لا يمكننا تقسيم بالتساوي ذلك
أو تقسيمها والحصول على نقطة الوسط صحيح.
سوف نبحث في 16.
سوف ندرك "يا، 16> 15 بأننا تبحث عنه."
للنظر بعد ذلك في النصف الأيسر من الصفيف
ما سنقوم به هو في نهاية المطاف التخلص
هذا الجزء العلوي بأكمله
وقال: "حسنا، الآن لدينا نقطة النهاية ستكون هنا."
التكرار التالي من حلقة دينا، ونحن الآن تبحث في هذه المجموعة،
بعد أن تجاهل بشكل فعال لأن هذا الجزء الآن
إذا نحن مع منتصف ليكون الفرق بين البداية والنهاية،
نجد نقطة الوسط أن يكون لدينا 8،
التي يمكننا اختبار ثم 8 لنرى أين هو بالنسبة لعدد نبحث عنه،
15، وجدت أن 15 أكبر،
لذلك لدينا للانتقال إلى الجزء الأيمن من القائمة،
الذي نعرفه لأننا بشر، ويمكننا أن نرى ذلك.
نحن نعلم أن الجزء الأيمن سيكون حيث نجدها،
لكن الكمبيوتر لا يعرف ذلك، ولذلك ما سنقوم به هو في الواقع سنقوم
وقد ترتفع هذه، والآن بداية ونهاية
هي نفس المكان، وبالتالي فإن نقطة الوسط يصبح عدد فقط في القائمة عند هذا الحد،
الذي هو 15، ولقد وجدت أنه.
لا تسلط الضوء على أن بعض هذه حيث الحد الأقصى كله وتدوين دقيقة يجري،
تتبع نقاط النهاية للمجموعة من أجل معرفة
كيفية تضييق الأمور؟
>> ماذا سيحدث لو كان هذا لا يساوي 15 الآن؟
ماذا لو كنا نبحث عن 15 و، بدلا من ذلك، كانت هذه أيضا عدد 16؟
نستطيع أن نقول: "أوه، انها أكبر.
نريد أن نعود إلى اليسار. "
وكنا نقل البريد لدينا للحق،
وعند هذه النقطة لدينا نقطة النهاية التي ستكون متضاربة.
فإنه لن يكون قادرا على البحث عن عناصر أي أكثر
لان لدينا الان لدينا نقطة النهاية وجهة نظرنا البداية،
ماكس لدينا ويوجد لدينا، وانقلبت الآن.
ونحن من خلال البحث مجموعة بأكملها. لا يمكننا العثور على أي شيء.
هذا هو النقطة التي كنا نريد أن نقول، "حسنا، نحن ذاهبون لوقف هذه الخوارزمية.
لم نعثر على أي شيء. ونحن نعلم انها ليست هنا. "
وكيف يتم هذا في الذهاب إليه؟
[طالب] كيف بالضبط الكمبيوتر التبديل النهاية؟
كيف ينتهي نهاية قبل البداية؟
نهاية ينتهي قبل بداية
بسبب الرياضيات أننا في طريقنا للقيام في كل مرة نفعل ذلك.
الطريقة التي المبادلة إذا نظرتم أول مرة نفعل ذلك المبادلة
حيث لدينا بداية في تمام الساعة 4 والنهاية
على طول الطريق في نقطة الوسط لدينا 108 و، ويقول، في 16 -
أنا ذاهب إلى إعادة تعيين هذه مرة أخرى إلى 15 إذا كنا نبحث عن ال 15،
كنا نعرف أن ما نقوم به عند فحص 16 و رأى أنه أكبر
وأراد أن يتخلص من جزء كامل الحق في القائمة،
رأينا أن ما كنا نريد القيام به هو نقل هذا البريد هنا.
على نحو فعال، وحصلت على نقل البريد إلى واحدة قبل منتصف.
وبالمثل، عندما فعلنا هذا التكرار من الخوارزمية
وكان في منتصف 8،
وجدنا أن 8 <15، لذلك أردنا أن نقل ب
الماضى منتصف.
الآن، والبداية والنهاية معا على حد سواء في هذه 15.
>> إذا كنا قد يحدث للبحث عن بعض قيمة أخرى، وليس 15،
أو إذا كان هذا بدلا من ذلك كان 15 16،
قد وجدنا أن ه نريد أن تتحرك واحدة قبل منتصف.
الآن فإن ه يكون هناك انعكاس أقل من ب.
دعونا المشي من خلال الطريقة التي فعلا في نهاية المطاف الترميز هذه الخوارزمية.
نعرف أننا نريد أن يكون هذا الحساب منتصف.
ونحن نعرف أيضا أننا نريد أن تتبع بداية ونهاية الصفيف
من مجموعتنا الحالية حتى نتمكن من معرفة
حيث هذا النصف الأيسر من القائمة وأين النصف الأيمن من القائمة.
ونحن نفعل ذلك مع أي تبدأ وتنتهي،
أو يمكننا أن نطلق عليهم Min و Max.
سوف تستخدم تبدأ وتنتهي هذه المرة.
عندما نبدأ، إذا نظرنا إلى الوراء في مثالنا هنا إلى أسفل،
كان من المقرر بداية لدينا بداية من الصفيف، وكأنها أمر طبيعي.
وكان مؤشر ما هذا؟ ماذا يجب أن تبدأ لدينا؟
دانيال.
[دانيال] كومة التبن [0].
[نيت] نعم، حتى نتمكن من تعيين يساوي كومة قش [0].
المشكلة، مع ذلك، هو أن هذا لا يعطينا موقف العنصر الأول.
هذا يعطينا مؤشر العنصر الأول أو القيمة الفعلية في ذلك المركز الأول.
[طالب] التي سيتم تحويل إلى 0.20؟
[نيت] هذا ما سوف تفعله هو جيدا، فإنه لن تفعل أي تحويل.
ما سوف تفعله هو أنها سوف تخزين 4 في البدء،
وبعد ذلك سوف يكون من الصعب إجراء مقارنات ضد تبدأ
لأن ستبدأ يكون عقد بلغت قيمتها 4،
الذي هو بداية مجموعة لدينا،
ولكننا نريد أن تتبع مؤشرات في الصفيف
بدلا من القيم.
سنستخدم في الواقع 0، من هذا القبيل.
لنهاية شارلوت مصفوفة جلب هذا قليلا في وقت سابق.
هذا هو المكان الذي سوف تأخذ في الاعتبار فهرسة صفر.
>> شارلوت، ما هو نهاية الصفيف؟
ما هو مؤشر لنهاية؟
[شارلوت] الحجم - 1.
نعم، والذي ينبغي لنا أن حجم استخدام؟
يجب أن نستخدم حجم رأس المال أو حجم صغيرة؟
العاصمة الحجم.
في هذه الحالة، يمكن أن نستخدم حجم رأس المال.
إذا أردنا أن تكون هذه الوظيفة المحمولة
واستخدام هذه الوظيفة في برامج أخرى،
في الواقع يمكننا استخدام حجم صغيرة.
أنه بخير أيضا.
ولكن شارلوت هو حق تماما أننا نريد أن يكون حجم - 1.
في هذه نقطة
[طالب] كيف يمكن أن يكون حجم يمكنك استخدام الأحرف الكبيرة؟
كيف يتم ذلك يمكننا استخدام الأحرف الكبيرة الحجم؟
اتضح أن هذه هي حقا يعرف #،
تحت غطاء محرك السيارة، مثل نص البحث والاستبدال، إذا كان هذا الأمر يبدو معقولا تماما.
عند ترجمة التعليمات البرمجية الخاصة بك، وتجهيزها المرحلة
من المترجم يمر عبر الملف،
ويبدو أن في كل مكان لكنت قد كتبت حجم رأس المال،
وهذا النص فإنه يستبدل حرفيا مع 8، تماما مثل ذلك.
وبهذا المعنى، وهذا يختلف كثيرا عن متغير.
لأنها لا تأخذ أية مساحة في الذاكرة.
انها استبدال نص بسيط خدعة.
في هذه الحالة، ونحن في طريقنا لاستخدام الحجم.
من هنا نحن لا نريد أن نفعل نوعا من التكرار،
ونحن على الطريق الصحيح مع حلقة افعل بينما لدينا.
نحن نريد أن نفعل شيئا حتى شرط لا تعقد بعد الآن،
وكما رأينا في وقت سابق، رأينا أن هذا الشرط
كان في الواقع أننا لا نريد نهاية
أن تكون أقل من البدء.
>> هذا هو وضعنا توقف.
إذا حدث هذا، نحن نريد لوقف وتعلن مثل، "يا، ونحن لم نجد أي شيء."
للتعبير عن هذا، ونحن لا ترغب في استخدام نوع من الحلقة.
في هذه الحالة، يكون حلقة افعل حين، لحلقة، حلقة حين؟
لدينا حلقة افعل بينما هنا.
هل الرجال مثل هذا النهج؟
هل تعتقد أننا يجب أن نحاول اتباع نهج مختلف؟
كيفن، أي أفكار؟
يمكن أن لدينا حلقة في حين أننا نعرف الحد الأقصى
سيكون أكبر من الحد الأدنى في أي حال البداية.
نعم، لذلك ليس هناك التهيئة الذي يجب أن يحدث.
تلك الحلقات بينما تفعل كبيرة عندما يكون لديك شيء لتهيئة
قبل اختبار ثم، في حين هنا
ونحن نعلم أننا لن نبقى على إعادة تهيئة كلا تبدأ وتنتهي
كل جولة من الحلقة.
ونحن نعلم أننا نريد أن تهيئة لهم، ثم تحقق شرطنا.
في هذه الحالة، سأذهب مع الواقع حلقة في حين بسيطة.
اتضح أن تستخدم تفعل حين حلقات نادرا إلى حد ما.
وهناك الكثير من الأماكن حتى لا تعلم ما في حين الحلقات.
انهم جيدة للتعامل مع مدخلات المستخدم، لذلك شهدنا الكثير منهم حتى الآن.
ولكن الطبيعي و. بينما الحلقات الكثير أكثر شيوعا
وتبين أن هذا الشرط كما هو مكتوب
لن تفعل حقا لنا خيرا كثيرا، والسبب في ذلك؟
أنا آسف، أنا لا أعرف اسمك.
أنا جيري. >> عذرا؟
انها B-O-R-U-I.
أوه، حسنا.
أنا لا أراك على قائمتي.
أوه، ذلك لأن أوه، أن من المنطقي.
هل لديك فكرة لماذا هذه الحلقة في حين قد لا تعمل بالشكل المطلوب،
كما هو مكتوب مع الشرط؟
[جيري] يعني كأنك تريد كل الاشياء بعد ان في،؟
نعم، حتى واحد.
قد يكون لدينا لوضع كل من هذه الاشياء في حلقة من الوقت، وهو صحيح تماما.
والشيء الآخر الذي قليلا أكثر صعوبة، رغم ذلك، هو أن هذا الشرط لا يعمل.
[طالب] تحتاج إلى الوجه عليه.
الحق، لذلك سوف لا يكون هذا الشرط صحيحا في البداية من أي وقت مضى الطريق تحدثنا عن ذلك.
نحن نريد أن نفعل شيئا حتى <نهاية تبدأ،
لكننا نريد أن نفعل شيئا بينما
تبدأ ≤ نهاية.
>> أن هناك عكس المنطق هناك.
أنا مذنب لجعل تلك الأخطاء في كل وقت.
[طالب] لماذا يجب أن تكون أقل من أو يساوي؟
لأن لا تتذكر الحالة التي وصلنا إلى
حيث لم يكن هناك سوى عنصر واحد، وكنا أسفل،
وكنا نبحث فقط في 15 في مجموعتنا؟
وكانت بدايتنا ونهايتنا نفس العنصر.
نحن نريد أن نتأكد من أننا تعامل مع هذه الحالة.
إذا فعلنا أقل مباشرة من،
سنكون فقط قادرة على الحصول على وصولا الى مجموعة 2-العنصر.
عندما وصلنا إلى أسفل إلى أن العنصر الأخير، إذا كان هذا العنصر كان لدينا، كنا أبدا العثور عليه.
هنا الآن، يمكننا أن نفعل بالضبط مثلك كانوا يقولون.
يمكننا أن نبدأ السقوط الاشياء الحق في منتصف حلقة في حين لدينا.
يمكننا صوت نزول المطر في منتصف لدينا.
يمكن أن نأخذ كل هذه إذا كانت تصريحات،
سحبهم من هذه الحلقة افعل حين،
صوت نزول المطر لهم في،
تنظيف الامور قليلا،
وسوف تمضي قدما وحفظ هذه النسخة.
وعند هذه النقطة، ونحن نقترب كثيرا جدا.
سام.
اعتقد ان لديك أيضا أن يكون نقطة الوسط = حجم كثافة العمليات - 1/2.
حصلت عليه، وحجم - 1/2.
هل هناك أي شيء آخر ونحن بحاجة إلى تغيير هذا الخط حوالي؟
كان ذلك صيدا جيدا.
>> ماذا تفعل حجم؟ نحن المتغيرة الحجم؟
من أجل الحفاظ على خط مثل هذا، لدينا لتغيير الحجم.
لدينا لتغيير حجم كل مرة نذهب لحلقة حول.
ولكن تذكر عندما كنا نمر مثالنا قليلا في وقت سابق،
وكان لدينا بداية في تمام الساعة 4
ونهاية كل وسيلة في أكثر من 108؟
كيف نحسب نقطة الوسط؟
كنا باستخدام حجم؟
أو كنا باستخدام تبدأ وتنتهي بدلا من ذلك؟
إنه الفرق بين النهاية والبداية.
بالضبط، وكيف ينبغي أن أكتب بالضبط، شارلوت؟
فقط في نهاية - تبدأ.
فإنك لن تحتاج إلى القيام بما - 1
لأن - وقد أدرجت 1 في نهاية وتبدأ بالفعل.
[نيت] رائع، أنت على حق تماما.
ليس لدينا للقيام - 1 لأن ذلك - وقد أدرجت 1
وشكلت عندما كنا تهيئة المتغير نهاية.
>> هل هناك أي شيء آخر يجب أن أفعل لبناء جملة هذا الخط معنى؟
[طالب] زائد تبدأ. >> زائد نبدأ؟
[طالب] في نهاية المطاف.
لأنه يحسب فقط نصف طول.
تحتاج لإضافة تبدأ.
[نيت] ماذا ستعمل هذه بالنسبة لنا حساب؟
إذا كنا نفكر في نهاية هذا التكرار على الأولى من الحلقة،
نهاية ستكون في موقف المؤشر 7.
تبدأ في الموضع 0.
تذكر، نحن نبحث عن أي
موقف 3 أو المركز 4.
إذا نظرنا إلى هذه الرياضيات، فقط لجعله أكثر قليلا ملموسة،
وضع بعض الأرقام هنا، لدينا 7، 0،
7 حتى - 0، ثم 2 /
هو 3 في قسمة عدد صحيح، وهذا هو.
ثم هل نحن بحاجة إلى إضافة ثم تبدأ ظهورنا؟
نحن لا في هذه الحالة.
على التكرار الأولى، وسوف يكون على ما يرام لأن بيغن هو 0.
ولكن ونحن نتقدم، نحن حقا بحاجة فقط جميع
نهاية - تبدأ / 2.
هناك واحد خدعة أخرى هنا، وهذا هو واحد من هما الأسبقية.
[طالب] هل نحن بحاجة قوسين؟
[نيت] بالضبط، وهذا لأنه إذا لم نضع هذه الأقواس،
وعندئذ يمكن تفسير هذا الخط بدلا
كما (النهاية) - (بداية / 2)، ونحن بالتأكيد لا نريد.
احترس من تلك القواعد الأسبقية.
[طالب] لماذا لا يكون في نهاية + نبدأ؟
لماذا لا يكون في نهاية + نبدأ؟
[طالب] لماذا هو ليس ذلك؟
لماذا يكون من +؟
أعتقد أنك على حق.
[طالب] لأنه من العادي؟
[نيت] + تاريخ البدء، أنت على حق تماما.
نجاح باهر، وأنا أخطأ تماما. أنت على حق.
إذا كنا نفعل ناقص، ونحن نريد لإضافة تبدأ مرة أخرى.
في هذه الحالة، أنت على حق تماما أننا نريد أن نأخذ من المتوسط ​​من اثنين،
لذلك نحن لا نريد لإضافتها، بدلا من طرح عليهم.
[طالب] وستعمل أيضا إذا فعلتم نهاية - تبدأ / 2 + تبدأ.
سوف نفعل إذا، أعتقد ذلك.
>> على سبيل المثال، إذا كنا نبحث في البدء،
ونحن تحولت على مدى هنا
إلى 15.
الآن هو في موقف تبدأ 2.
النهائية هي في الموقف 7.
إذا طرحنا منها، وحصلنا على 5.
بقسمة ذلك على 2 نحصل على 2.
ثم نضيف 2 عودة في،
وأن يحصل لنا على موقف 4th،
وهو هنا الحق، الذي هو نقطة الوسط.
[طالب] هل نحن بحاجة لرعاية التفاف؟
بأي معنى نحتاج لرعاية التفاف؟
إذا كان مجموع أو الفرق بين
اعتمادا على كيفية ونحن نفعل ذلك ليس عدد زوجي.
ثم يحصل الخلط ما إذا كان جهاز الكمبيوتر عندما يكون 2.5؛
هل الانتقال إلى اليسار أو إلى اليمين لتحديد أي هو نقطة الوسط؟
حصلت عليه.
تبين أن قسمة عدد صحيح مع،
لم نحصل على هذه الأرقام من أي وقت مضى النقطة العائمة.
ونحن لم تحصل على العلامة العشرية.
انها التخلص منها تماما.
إذا كان لديك جهاز كمبيوتر تقسيم اثنين من المتغيرات الباحث،
واحد هو 7، والآخر هو 2،
فلن تحصل على 3،5 نتيجة لذلك.
سوف تحصل على 3.
سيتم تجاهل الباقي، لذلك فمن فعال التقريب-
لا بل جولة أرضية، إذا كنت معتادا على اللاعبين أن في الرياضيات،
حيث يمكنك تجاهل تماما عشري،
وهكذا كنت مقطوعة أساسا من أسفل إلى أقرب
المجموع، إلى أقرب عدد صحيح.
[طالب] ولكن بعد ذلك هذه مشكلة لأنه إذا كان لديك مجموعة من 7 عناصر
ثم يأخذ تلقائيا العنصر 3 من نقطة الوسط بدلا من 4.
كيف نتعامل مع ذلك؟
انها مشكلة لأنه إذا كان لدينا مجموعة من 7،
فإنه اختيار 3 بدلا من 4.
هل يمكن أن توضح أكثر من ذلك بقليل؟
[طالب] لأنه إذا كان لديك 7 عناصر ثم العنصر 4
سيكون نقطة الوسط، أليس كذلك؟
تذكر تعليقك عن كونها صفر فهرستها، وإن كان.
[طالب] نعم، وذلك في موقف 3. من شأنها أن تكون نقطة الوسط.
نعم.
أوه، حسنا. أرى ما تعنيه.
انها نوع من غريب، ونحن تعتاد على هذه الفكرة كاملة من
التخلص من الكسور العشرية.
وهذا هو نقطة كبيرة.
دعونا إنهاء هذا الأمر.
لقد قمنا بحساب نقطة الوسط لدينا.
>> نحن اختبار لمعرفة ما اذا إبرة لدينا تساوي قيمة الأوسط.
نحن الطباعة التي وجدنا أنها، ولكن في الحقيقة، ماذا نريد أن نفعل في هذه الحالة؟
لقد وجدنا أنه، لذلك نحن نريد السماح للطالب تعلم أن وجدنا أنه.
ونحن قد حصلت على وظيفة وظيفة وهذا منطقي مكتوب.
الطريقة التي يشير إلى الطالب من وظيفتنا أن نكون على استعداد للذهاب
ونقول، "مهلا، هذا صحيح."
كيف نفعل ذلك، كيفن؟
كنت الايماء رأسك. >> [كيفن] أضف العودة الحقيقية.
[نيت] بالضبط، والعودة الحقيقية.
الآن، إذا لم تكن متساوية، كيف ننظر إلى النصف الأيسر؟
أي أفكار؟
ستيلا، أي أفكار؟
تحتاج إلى تعيين وظيفة جديدة للنهاية.
نعم.
لذلك علينا أن نفعل موقف منتصف - نهاية.
كبيرة.
نحن بحاجة لتعيين وظيفة جديدة في نهاية
للنظر في النصف الأيسر.
كان هذا ما تحدثنا عنه قبل حيث
وأظل العودة إلى هذا المثال.
لدي هنا تبدأ، ومن ثم لدي نهاية كل وسيلة أكثر من هنا.
>> مرة أخرى، إذا نحن نبحث عن 15، ونقطة الوسط لدينا في 16،
ونحن ندرك، "عفوا، 16 هو أكبر.
نريد للانتقال إلى النصف الأيسر ".
وننتقل بعد ذلك إلى نهاية 15،
ونحن نفعل ذلك من خلال اتخاذ واحد بعيدا عن نقطة الوسط
ووضع نهاية لدينا كما أن الجديد.
وبالمثل، إذا كنا نريد أن ننظر إلى النصف الأيمن، كيف نفعل ذلك؟
هل لديك فكرة؟
[طالب] ما عليك سوى تحديد البدء في منتصف + 1.
[نيت] الكبرى.
والآن في حالة أن لا نجد أي شيء،
لا التي تحصل من العناية بالنسبة لنا؟
لا ان دانيال، والحصول على العناية بالنسبة لنا؟
[دانيال] رقم
[نيت] وإذا كنا تجعل من خلال مجموعة كاملة ونحن لا نجد أي شيء،
حيث سيتم اتخاذ رعاية، أو ينبغي أن نهتم به؟
[دانيال] الشرط الوقت.
[نيت] نعم، شرط الوقت، بالضبط.
سوف يستغرق الرعاية من الذهاب من خلال مجموعة كاملة إذا لم نجد أي شيء.
وهذه الحلقة حين تنتهي.
ونحن لن لقد واجهت هذه الحالة،
ويمكن أن نعود كاذبة.
يمكننا أيضا ترك هذا إذا كان في مثل هذا هنا
لأنه إذا كان هذا البيان صحيحا إذا،
وسوف يعود وظيفتنا،
ولذا فإننا سوف أساسا إحباط هذه الوظيفة في هذه المرحلة
عندما نعود صحيح.
ولكن ما يحدث مع هذا الهيكل هنا؟
وهذا العمل تماما، أم أن هناك بعض الخلل المنطقي في هناك؟
>> هناك بعض الخلل المنطقي في هناك، مع الطريقة التي إعداده.
قد يكون ما؟
[طالب] لماذا كنت في حاجة إلى - و+ 1S؟
لدينا مجموعة التي تقوم بتعيين حتى يكون نصف احتياجاتنا اليسار الجديد ونصف الحق.
[طالب] ولكن لماذا لا يمكن أن تفعل ذلك دون - 1S 1S و+؟
[نيت] نحن يمكن تعيينها يساوي نقطة الوسط؟
قد يكون مشكلة ما عن ذلك؟
[طالب] أعتقد أن ذلك بسبب عدم كفاءة لأنك فحص قيمة بالفعل تم فحصها.
[نيت] بالضبط، لذلك هو حق سام تماما.
إذا قمت بتعيين نهاية وتبدأ يساوي نقطة الوسط
بدلا من - 1 و + 1 عاكس،
في مرحلة ما في المستقبل سنقوم في نهاية المطاف التحقق من نقطة الوسط مرة أخرى.
[طالب] لقد بدأت pset، ومن ثم كان لي شيء من هذا القبيل
حيث نسيت أن 1 +، وحصلت على تمسك في حلقة لا نهائية.
الحق، لأنه في مرحلة ما كنت أبدا لتحصل تبدأ وتنتهي
لتتداخل في الواقع.
بارد.
هناك عيب واحد أكثر منطقية، وهذا هو الذي ينبغي أن يكون هذا بالتأكيد
والا اذا.
لماذا قد يكون ذلك؟
>> والسبب هو ما اذا كان ليس الا اذا، هل تراه، كيفن؟
[كيفن] نعم، لأنك تغيير نقطة النهاية.
[نيت] بالضبط.
نحن بصدد تغيير نقطة النهاية،
وإذا كان الذي كتبت عليه مثل هذه we'll-جعل مسافات بين-
وسوف تحقق هذه الحالة.
هذه الحالة، إذا نجحت صح التعبير، من إحباط وظيفة.
بعد ذلك سوف تحقق هذه الحالة القادمة،
وإذا كان هذا ينجح، فإنه سيتم ضبط نقطة النهاية،
وبعد ذلك سوف يستمر على هذه الحالة وتحقق.
ولكن في هذه المرحلة، ونحن لا نريد أن يستمر فحص.
لحسن الحظ، لدينا لم يتم إعادة ضبط نقطة الوسط هنا،
ونحن نعلم أن هذه الحالة لن تنجح.
لكننا بالتأكيد نريد لوضع آخر إذا كان في هناك
رغم أن الأمر في هذه الحالة
منذ أننا لا تعديل نقطة الوسط، سوف نجعل من هذا الاختلاف؟
لا، لأن هذه الحالات كلها حصرية.
مرة أخرى، بلدي سيئة.
نحن لا، أعتقد، في حاجة الى ذلك الا اذا.
يمكننا محاولة إعطائها وتشغيله ونرى ما سيحدث.
بناء، حدث خطأ.
انها على الارجح لأنني تركت هذه لب ه في لوهنا.
لا بد لي أي أكثر من تلك التي تصل في أعلى؟
لا يبدو مثل ذلك.
نحن تصغير، بناء،
هناك يذهب، وحتى الآن إذا كنا بحث عن 15،
نعم.
اسمحوا لي تكبير.
15، نعم. يمكننا تشغيله مرة أخرى.
تحميل شفرة المصدر، وبناء، على التوالي.
يمكننا البحث عن شيء مثل 13،
ولم نحصل على أي شيء طبع، حتى انها ليست الحقائق التي بالنسبة لنا.
هذا أمر عظيم، لأنها ليست في قائمتنا.
>> نحن الآن خارج الوقت.
وهذا سوف يكون عليه لهذا الأسبوع.
شكرا للانضمام، ونراكم في وقت لاحق.
>> [CS50.TV]