[Powered by Google Translate] تعيين مشكلة الباب 2: الطبعة هاكر
روب بودين، جامعة هارفارد
هذا هو CS50. CS50.TV
لذلك، أنا روب. أنا كبير في كيركلاند. هذه هي السنة الثالثة لي TFing CS50.
وهذه هي المرة الأولى التي نعمل على تغيير من قسم التقليدية على غرار محاضرة،
حيث أننا مجرد نوع من استعراض ما حدث في محاضرة ثم يا رفاق طرح الأسئلة،
الآن إلى كونها أكثر بكثير القائم على حل المشاكل، حيث نستخدم المسافات، و-
أوه، وبالتالي فإن الفكرة هي أن يذهب إلى التي تصل ارسلتها لك ثم عليك أن تكون في بلادي الفضائية.
لا أحد لم يكن لديك جهاز كمبيوتر محمول؟ حسنا.
لذلك نحن سنتعرض لاستخدام هذا، ونحن في طريقنا إلى أن تفعل المشاكل يعيشون في القسم
ومناقشتها ومعرفة ما هو الخطأ
وأنا قد سحب ما يصل بعض من التعليمات البرمجية الخاصة بك، وأنا قد مناقشة أفكارك.
لذلك أي شخص زارها صعوبة؟
يمكنك الدردشة على الجانب، وأنا لا أعرف إذا كان سيكون لدينا سبب لذلك.
الآن، مثل supersection السابقة، لو كنت في تلك الفئة، وانت تعرف ما هذا عن.
على كل من مجموعات P هناك ستكون هذه الأقسام.
لذلك P-مجموعة 2، مواصفات، وأنا أعتقد أنك زرت على P-1 مجموعة بالفعل.
ولكن يمكننا أن ننظر في مجموعة P-2 لماذا نحن ذاهبون الى أن يحدث على مدى اليوم.
وسترى قسم من الأسئلة.
لذلك سوف يكون هذا في كل من P-مجموعات، وهناك سوف يكون قسم من الأسئلة.
حتى الآن قلنا، "النظر في هذا فرصة لممارسة".
لن يطلب منك أن تقدم هذا البرنامج.
والفكرة هي التي من المفترض أن هذه النوع من مساعدتك على البدء مع مجموعة المشكلة.
أعتقد على الطبعة هاكر، يفترض الكثير منهم ليكون مجرد جديد، وأشياء مثيرة للاهتمام للتعلم.
فإنها قد لا تكون قابلة للتطبيق مباشرة إلى مجموعة المشكلة.
والآن نحن لا وجود لك تقديمها، ولكن من الناحية النظرية،
المشكلة لمجموعات في وقت لاحق، قد تقديمها، وبالتالي يمكنك أن تأتي إما القسم
أو مشاهدة المقطع للحصول على الإجابات، أو يمكنك الحصول منهم فقط لوحدك
إذا كنت لا تشعر مثل تتمتع وجودي.
لذلك - وأعتقد أن هذا هو أول واحد.
اه. أيضا، في ظل هذه المقاطع من الأسئلة لدينا أيضا أن تسأل أسئلة حول السراويل.
لذا أعتقد، من الناحية النظرية، كنت من المفترض أن مشاهدة هذه قبل ان يأتي الى الباب،
ولكن لا بأس إذا كنت لا، ونحن سوف يذهب أكثر منهم على أي حال.
لذلك يمكننا أن نبدأ مع هذه: "كيف يمكن للحلقة في حين تختلف عن حلقة افعل حين؟
متى يكون هذا الأخير مفيدا بشكل خاص؟ "
بحيث يتمكن أي شخص لديه أي -؟
[طالب] وافعل حين سيتم تنفيذ حلقة دائما على الأقل مرة واحدة.
نعم. لذلك هذا هو الفرق. حلقة حين - I'll مجرد القيام بذلك هنا - في حين حلقة، لدينا حالة
هنا، في حين أن افعل الوقت، لم يكن لديك شرط حتى نحصل الى هنا.
وهكذا، عندما البرنامج الخاص بك المنفذة، ويحصل على حلقة من الوقت،
فإنه يتحقق على الفور ما إذا كان هذا الشرط صحيحا.
إذا كان هذا الشرط غير صحيح، فإنه سيتم تخطي ما يزيد قليلا على الحلقة تماما.
افعل حين حلقة، وبرنامج ينفذ، فإنه يحصل على "القيام به."
لا يحدث أي شيء في هذه المرحلة، لا يزال مجرد المنفذة.
ثم عندما يضرب "في حين" إذا كان الشرط صحيحا، وأنها سوف حلقة نسخ ونفعل ذلك مرة أخرى
ومرة أخرى ومرة ​​أخرى حتى كان الشرط غير صحيح ويندرج فقط ثم من خلال.
لذا، فإن الفرق يكون أن هذا يمكن تخطي الحق من البداية.
هذا ينفذ بالضرورة مرة واحدة ثم قد تنفذ أكثر من مرة إذا كان الشرط لا يزال صحيحا.
وبالتالي فإن حلقة في حين تفعل ذلك مرة واحدة فقط، أو - حلقة حين - أننا قد لا تحتاج إلى القيام بذلك على الإطلاق،
منذ حالما نصل إلى ذلك، إذا كان الشرط غير صحيح، سنقوم تخطي مجرد حق أكثر من ذلك.
في حين تفعل حين حلقة، وسوف نقوم بتنفيذ ذلك مرة واحدة، بالضرورة.
ثم، عندما نصل إلى حالة، ونحن تحقق مما إذا كان هذا صحيحا أم خطأ.
إذا كان هذا صحيحا، فإننا سوف نفعل ذلك مرة أخرى، وإذا كان هذا كاذبة، سنواصل مجرد الذهاب.
حتى عندما هو الأخير مفيدة بشكل خاص؟
لذلك أستطيع أن أقول إن في مجملها من 4 سنوات، 3 سنوات، أيا كان،
التي كنت البرمجة، ولقد استخدمت هذا، مثل، أقل من 10 مرات.
وربما 5 منهم في CS50 عندما إننا نقدم تفعل حين الحلقات.
حتى متى تستخدم تفعل حين الحلقات؟
عندما هو - نعم؟
[طالب] عندما كنت في محاولة للحصول على إدخال المستخدم، أو شيء كنت تريد أن تحقق -
نعم. حتى حين تفعل الحلقات، دليل الإدخال واحدة كبيرة.
هذا هو السبب على مجموعات زوجين المشكلة الأولى، عندما تريد أن تطلب من المستخدم، مثل،
"أعطني السلسلة،" لا يمكن متابعة حتى تحصل على هذه السلسلة.
وهكذا أنت، بالضرورة، بحاجة إلى أن نسأل عن السلسلة على الأقل مرة واحدة.
ولكن بعد ذلك إذا كانت الإجابة شيئا سيئا، فأنت بحاجة إلى العودة حلقة ونسأل مرة أخرى.
ولكن من غير إدخال المستخدم، فإنه من النادر جدا أن أواجه قضية
حيث أريد أن حلقة "على الأقل مرة واحدة" ولكن ربما أكثر.
أسئلة أو -؟ وقد أي شخص يستخدم افعل حين حلقة في أي مكان آخر؟
حسنا. وبالتالي فإن المرحلة التالية هي "لا غير معلنة ما معرف
تشير عادة إذا أنتج من قبل رنة؟ "
لذلك يمكن أي نوع من التعليمات البرمجية أنا أكتب للحصول على 'معرف غير معروفة؟
[طالب] أن x = 2؟
حتى نتمكن من مجرد محاولة ذلك هنا، س = 2.
سنقوم بتشغيل هذا - أوه، لم أكن فوقه. حتى هنا نصل - كل الحق.
"استخدام X معرف غير معروفة".
لذلك هذا هو معرف غير معروفة، متغير.
فإنه سيتم استدعاء متكرر متغير معرف.
لذا قد لا تعرف انها في الواقع متغير، بل لا يعرف ما هو عليه.
لذلك فمن معرف.
فلماذا لم يعلن عنها وذلك؟ نعم.
بحيث تكون واضحة بشأن المصطلحات، وإعلان متغير
هو عندما تقول "س كثافة العمليات"، أو "ذ السلسلة،" أيا كان.
تهيئة المتغير، أو تعيين متغير،
كلما كنت أقول هو "س = 2."
حتى نتمكن من القيام بهذه الخطوات في منفصلة، ​​وكثافة العمليات خ، س = 2، وحتى - أننا يمكن أن يكون حفنة من الاشياء هنا -
ولكن حتى يحدث هذا الخط، لا يزال غير مهيأ والعاشر، ولكن تم تعريفه.
وهكذا يمكننا أن نفعل الواضح في خط 1، والآن نحن نعلن وتهيئة.
الأسئلة؟
وأخيرا، "لماذا هو التشفير قيصر يست آمنة جدا؟"
ذلك أولا، لا أريد أن أقول أي شخص ما هو التشفير قيصر؟
[طالب] قيصر الصفر هي فقط التي يمكنك تعيين، يمكنك تحويل كل حرف،
عدد معين من الرسائل تتجاوز، والعودة أكثر، وانها ليست آمنة جدا، لأن
هناك فقط 26 خيارات ممكنة وعليك أن تحاول كل 1 من هذه حتى تحصل عليه.
اه. لذلك، يجب أن أكرر؟
والشفرات قيصر، it's - أعني، فسوف يكون التعامل معها على المشاكل التي -
أو اعتقد الإصدار القياسي من مجموعة المشكلة التي ليست على الطبعة القراصنة.
إلى ذلك الإصدار القياسي لمجموعة مشكلة، يمكنك الحصول على رسالة مثل "العالم، مرحبا،"
وكان لديك أيضا عددا مثل 6، وتأخذ تلك الرسالة، ولكل الطابع الفردي،
يمكنك تدوير من قبل 6 وظائف في الأبجدية.
وبالتالي فإن 'ح' سوف تصبح في مرحبا ح-I-J-K-L-M-N.
لذلك فإن الحرف الأول يكون ن. ونحن نفعل نفس الشيء مع ه.
إذا كان لدينا، مثل، ض أو شيء، فإننا التفاف حول العودة الى "A".
ولكن كل حرف يحصل تدوير 6 أحرف الأبجدية في وقت لاحق، وانها ليست آمنة جدا
لأن هناك سوى 26 كم الاحتمالات عن الطرق التي يمكن أن التفاف حرف واحد.
بحيث يمكنك مجرد محاولة كل منها 26 و، ويفترض، لرسالة طويلة بما فيه الكفاية،
1 فقط من تلك الأشياء الممكنة 26 سيكون مقروءا،
ومقروءا واحد ستكون الرسالة الأصلية.
حتى انها ليست وسيلة جيدة جدا لتشفير أي شيء على الإطلاق.
لا علاقة لتلك السراويل، "ما هي وظيفة؟"
فما هي وظيفة؟ نعم.
[طالب] انها مثل قطعة منفصلة من التعليمات البرمجية التي يمكنك الاتصال من خلال الذهاب الى ومن ثم الحصول على القيمة المرجعة من أيا كان.
نعم. ولذا فإنني سوف الإجابة عليه من خلال الإجابة أيضا المقبل - أو تكرار الرد من قبل أيضا مجرد واحد القادم.
يمكنك استخدام وظائف بدلا من مجرد نسخ ولصق رمز مرارا وتكرارا.
تأخذ فقط هذا الرمز، ووضعها في فوكتيون، ثم هل يمكن أن مجرد دعوة وظيفة
أينما كنت قد نسخ ولصق.
حتى وظائف مفيدة.
حتى الآن سنفعل المشاكل الفعلية.
أول واحد. وبالتالي فإن فكرة أول واحد هو، يمكنك تمرير أنه سلسلة، وبغض النظر عن -
أو أنها لا أقول كل صغيرة؟ لا أقول كل صغيرة.
لذلك يمكن أن يكون أي شيء الرسالة، و- أوه لا يفعل.
"للحصول على البساطة، قد تفترض أن المستخدم سوف فقط إدخال الأحرف الصغيرة والمساحات."
لذلك نحن تمريرها رسالة مع أحرف صغيرة فقط وبالتناوب ثم نحن
بين رأس المال والصغيرة - ونحن تغيير سلسلة لتكون عاصمة والصغيرة، بالتناوب.
حتى قبل أن أعطيك ثانية للغوص حتى في المشكلة،
ما هو الشيء الأول الذي يتعين علينا القيام به؟
أوه، ما لم أكن فقط اضغط على؟ أوه، أنا مجرد النقر على بريد الكتروني هنا.
لذا فإن أول شيء يتعين علينا القيام به - أنا كنت أبحث في خطأ واحد؟
هذا هو جزء من هذا واحد؟
لا، تلك التي لا تزال هناك، وإن كان.
حسنا، لا يزال هنا.
الآن يمكن لنا أن نفترض -؟ نعم. هنا يمكن لنا أن نفترض أنه من صغيرة فقط ومسافات.
حتى الآن لدينا للتعامل مع حقيقة أن الحروف يمكن أن يكون كل ما نريد لها أن تكون.
ولذا فإن أول شيء نريد القيام به هو مجرد الحصول على الرسالة.
نحن بحاجة فقط للحصول على سلسلة، سلسلة S = GetString، حسنا.
الآن هذه المشكلة، وهناك زوجين من الطرق للقيام بذلك.
ولكننا تريد الذهاب الى استخدام أحادي المعامل مشغلي هنا.
هناك الناس الذين كانوا إما ليس على supersection،
أو شيء من هذا، ولا أعرف ما هي المختصة بالبت المشغلين؟
أو كيفية ارتباطها ASCII بأي شكل من الأشكال؟
[طالب] لم أكن في supersection، لكنني أعرف ما هي المختصة بالبت المشغلين.
حسنا. لذلك فإنني لا يجب أن يذهب أكثر من أساسيات لهم، ولكن سوف أشرح
ما نقوم تريد الذهاب الى استخدام هنا.
حتى 'A': تمثيل ثنائي العاصمة A، كان الرقم 65.
انا فقط أن ننظر إلى - 41 ستكون 01000001.
لذلك ينبغي أن يكون 65 في العشرية، لذا هذا هو تمثيل ثنائي للحرف A. العاصمة
الآن، تمثيل ثنائي من أحرف صغيرة "أ"
سيكون نفس الشيء تقريبا. هو أن - 6، نعم. هذا هو الصحيح.
العاصمة ثنائي لذلك صغيرة، ثنائي "على".
تلاحظ ذلك أن الفرق بين ألف و. "أ" هو هذا بت واحد
وهذا يحدث ليكون 32 بت، بت يمثل عدد 32.
ومنذ أن من المنطقي A هو 65؛ "أ" هو 97.
والفرق بينهما هو 32.
حتى الآن نحن نعلم أننا يمكن تحويل من A إلى 'A' من خلال اتخاذ
وORing المختصة بالبت فيه، مع - وهذا يبدو وكأنه 1.
هذا هو أحادي المعامل OR، مع 00100000، والتي سوف تعطينا "أ".
ويمكن أن نحصل عليها من "أ" إلى A من ANDing المختصة بالبت
مع 0، 11 في ذلك المكان، 11111.
ولذلك فإن هذا ثم يقدم لنا بالضبط ما "أ" كان، ولكن هذا الشيء يلغي الفردية،
لذا علينا 01000001، وأنا لا أعرف ما إذا كنت تحسب الحق.
ولكن هذه التقنية من ORing أحادي المعامل للحصول على رأس المال إلى أحرف صغيرة من،
وANDing أحادي المعامل للحصول على رأس المال من الصغيرة إلى ليست حكرا على A.
جميع الرسائل، مقابل K ك، مقابل Z Z،
كل منهم مجرد الذهاب الى تختلف من نفس واحدة بت.
وهكذا يمكنك استخدام هذا لتغيير أي حرف من أحرف صغيرة إلى أي حرف والعكس بالعكس.
حسنا. حتى طريقة سهلة للحصول على هذا من - وذلك بدلا من الاضطرار إلى
الكتابة خارج كل ما هو 1011111 - طريقة سهلة لتمثيل هذا العدد، وهذا ليس واحدا
أن ذهبت أكثر في supersection، ولكن تيلدا (~) هو مشغل آخر أحادي المعامل.
ما يفعله هو ~ فإنه يبحث في تمثيل بت.
دعونا نلقي أي رقم.
هذه مجرد بعض رقم ثنائي، وما يفعله هو أنه ~ تقلب فقط كل من البتات.
لذلك كان هذا (أ) 1، وهو الآن 0، هذا هو 0، الآن 1، 010100.
بحيث كل ~ لا. حتى 32 وسيكون عدد - التخلص من ذلك -
حتى 32 وسيكون عدد 00100000، وذلك من ~ هذا سيكون
هذا الرقم هنا أنني ANDed "أ" مع.
لا أرى أن الجميع؟ هذا أمر شائع جدا، مثل عندما تريد معرفة
لأشياء في وقت لاحق إلى أننا قد تكون رؤية، عندما نريد أن نرى إذا -
أو أننا نريد كل شيء، كل مجموعة بت واحد باستثناء 1
كنت تميل إلى لا ~ للبت ألا نريد تعيين.
لذلك نحن لا نريد مجموعة 32 بت، لذلك نحن من 32 ~.
حسنا. حتى نتمكن من استخدام كل هذه هنا.
كل الحق، لذلك لا بأس إذا كنت لم تفعل لكم، ونحن يجب السير ببطء على مدى معا،
أو المشي أكثر من هذا، لذلك - من خلال هذا. المشي من خلال ذلك.
لذلك لدينا سلسلة لدينا، ونحن نريد أن حلقة على كل حرف في هذه السلسلة ونفعل شيئا لذلك.
كيف لنا إذن أن حلقة بسبب سلسلة؟ ما ينبغي أن نستخدم؟
أنا لن نفعل ذلك هنا. نعم.
حتى لقد مكرر بلدي، وقال ذلك، ولكن كيف يمكنني معرفة عدد الأحرف في سلسلة؟
التوابع strlen (ق)، وبعد ذلك + +.
ذلك ما فعلته هنا ليس أفضل وسيلة للقيام بهذه الأمور.
لا أحد يعرف لماذا؟
لأنك التحقق من لغة سلسلة واحدة في كل مرة.
لذلك نحن ذاهبون إلى التوابع strlen تريد نقل، ويمكنني أن أقول هنا، وكثافة العمليات طول = التوابع strlen (ق)،
ومن ثم يمكنني <طول، وفي حال كنت لم أر ذلك من قبل،
يمكن أن أفعل أيضا كثافة العمليات ط = 0، = طول التوابع strlen (ق).
وذلك هذا هو الأفضل إلى حد ما، منذ الآن لقد تقييد نطاق
من طول متغير لهذا فقط 'ل' حلقة، بدلا من إعلان ذلك من قبل
وأنه موجود دائما، وفي حال كنت لا يمسك لماذا فهذا أمر سيئ،
أو لماذا كان الأصل سيئة، it's - تبدأ في حلقة ل.
راجعت هذه الحالة. وأنا طول <ق؟
وبالتالي فإن طول هذا، دعونا نعمل مع "مرحبا" طوال الوقت.
طول حتى من ليالي، H-E-L-L-O. طول هو 5.
لذلك أنا = 0، طول هو 5، لذلك أنا لا <5، وبالتالي فإن حلقة مستمرة.
ثم نذهب مرة أخرى. علينا التحقق من حالة. هو أنني <طول تضع تعليقا؟
لذلك دعونا تحقق من طول مرحبا. H-E-L-L-O. هذا 5؛ أنا لا <5، لذلك نواصل مرة أخرى.
لذلك نحن حساب، ونحن نعول مرحبا، لكل التكرار من الحلقة،
بل يعتقد انها لن تغيير، بل دائما ما يكون 5.
لذلك علينا أن نتذكر فقط 5 في خط الهجوم، والآن كل شيء أفضل.
بالتكرار على مدى السلسلة بأكملها.
ماذا نريد أن نفعل لكل حرف من السلسلة؟
[تحدث الطالب، غير مفهومة]
نعم. لذلك، إذا كان الحرف هو غير أبجدية، ثم نحن نريد فقط لتخطي أكثر من ذلك.
لأننا نهتم فقط عن الحروف الأبجدية؛ لا يمكننا الاستفادة عددا.
فكيف نفعل ذلك؟ لذلك وضعنا، لذلك إذا كنا نريد شيئا - التحقق ما اذا كان الأبجدي.
كيف لنا إذن أن تحقق ذلك؟
[طالب] يمكنك فقط استخدام الدالة ألفا.
هو أن تدرج في أي من هذه، أو أي تشمل مثل char.h أو شيء؟
دعونا لا هو استخدام وظيفة ألفا، واستخدام صريحة - لذلك لدينا ليالي [أنا]،
هذا هو الطابع الثامن ق، تذكر أن السلسلة مجموعة من الشخصيات،
وبالتالي فإن الطابع الثامن ق.
الآن، إذا كان حرف، ونحن نعلم أنه يجب أن تكون في نطاق معين.
وما هو هذا النطاق؟
نعم. إذا كان الأمر كذلك ليالي [أنا] هو ≥ 65، و S [أنا] هو ≤ 90، ماذا ينبغي أن أفعل بدلا من ذلك؟
نعم. لذا يجب عليك تماما لا تحتاج حتى إلى معرفة القيم ASCII من أي شيء من أي وقت مضى.
لم أفكر في الأرقام 65، 90، 97 و 102، أو أيا كانت.
لا تحتاج - 112 -؟ لا تحتاج إلى معرفة تلك على الإطلاق. وهذا خطأ أيضا.
فقط استخدام الأحرف أحادية اقتباس، والثوابت اقتباس واحد. حتى 'A' و 90 أقل مما هو 'Z.'
وهذا هو أفضل بكثير - أنا لا أعرف من على قمة رأسي أن Z هو 90.
أنا أعرف من على قمة رأسي أن 'Z' هي عاصمة Z.
كما يمكن ما دام هذا هو في حدود رأس المال الألف إلى الياء رأس المال، أو لنتحقق صغيرة،
أو إذا كان في نطاق ≥ "أ" و≤ Z.
بحيث لاوضاعنا.
أسلوب لمكان وضع هذه الأمور يختلف.
سوف أفعل ذلك من هذا القبيل.
الآن، ماذا نريد أن نفعل؟
نحن نعرف هذه الرسالة هو حرف، حرف أبجدي.
لذلك نحن بحاجة إلى ما إذا كان هذا بالتناوب بين ينبغي أن يكون الآن حرف أو رسالة صغيرة.
كيف يمكننا تتبع أي واحد نريد لها أن تكون؟
[أصوات الطلاب، غير مفهومة]
لذلك نعم، ولكن اسمحوا لي أن تحقق.
وقيل كان وحدة 0-2، اقتراح طرد، وأنا أتفق مع ذلك.
إلا أن الإشعار، مثل - هل هذا هو الحال؟ نعم.
انها كل واحد الآخر، ولكننا لا يمكن أن الوحدة 2 من ط، ط وزارة الدفاع أو 2، منذ
تلاحظ أن E هي عاصمة و"أ" صغيرة؟ ولكن هناك مساحة تفصل بينها؟
حتى انهم ذاهبون لتكون وزارة الدفاع نفسها 2، ولكنها في حالات مختلفة.
[سؤال الطالب، غير مفهومة]
نعم. لذلك نحن ذاهبون فقط للحفاظ على العد.
يمكن أن نقوم به هنا أيضا أنه في حال أردنا، وهذا قد تحصل على القليل غير عملي
في حلقة عن الإعلانات، أنا طرحها هنا.
حتى العد = INT يبدأ في 0.
وحتى الآن، وانا ذاهب لحساب عدد الحروف الأبجدية لدينا.
لذلك نحن ذاهبون لا محالة لحساب + + منذ وجدنا آخر حرف أبجدي.
ولكن، وحتى الآن إذا كنت تقول وزارة الدفاع العد 2.
ولكن ماذا لو العد وزارة الدفاع 2؟ اه. سأفعل == 0 في الوقت الراهن.
سوف نذهب أيضا أكثر من ذلك. إذا كان الأمر كذلك العد وزارة الدفاع 2 == 0، ثم ماذا؟
[الطلاب الإجابة، غير مفهومة]
لذلك نحن نريد أن ينتهي كبيرة.
هناك 2 الحالات؛ الكبيرة والصغيرة هي الحالات 2.
حتى لو كنا في صغيرة نحن بحاجة لجعله أحرف كبيرة.
اذا كان الكبيرة نحن لسنا بحاجة إلى أن تفعل أي شيء.
ولكن، هل هناك وسيلة - shouldn't لقد انقلبت -
أننا لسنا في حاجة حتى للتحقق ما اذا كان كبيرة أو صغيرة؟
ماذا يمكننا أن نفعل لدائما التأكد من أننا دائما في نهاية المطاف في الكبيرة؟
لاحظت ذلك ما فعلناه ل"أ" صغيرة، ما إذا فعلنا هذا الشيء نفسه بالضبط إلى أحرف كبيرة A؟
لا تغيير أحرف كبيرة، أو لا قيمة التغيير؟
نعم. لذلك أي عاصمة أحادي المعامل رسالة ANDed مع ~ 32 ستكون تلك الشخصية الكبيرة نفسها
لأن أي حرف الكبيرة لم يتم تعيين بت 32.
إذا كان الأمر كذلك فإننا نريد أن نأتي الحرف ق [أنا]، ونحن نريد أن تصبح صغيرة أو كبيرة.
إذا كان الأمر كذلك كان من الصغيرة، الكبيرة هي عليه الآن، إذا كان الكبيرة، انها لا تزال كبيرة، وهذا كل شيء.
قلت هذا في supersection: يمكنك استخدام 32 إذا كنت تريد، ولكن أنا أميل إلى تفضيل العمل "أ" - A،
بدلا من 32 فقط عادي، لأنه لا يمكن أن يكون أي بت الأخرى.
بعد 32 بت، يمكن أن يكون أي من هذه، أو أننا لن ديها ما يكفي
الأرقام لتمثيل كافة الأحرف.
حتى إذا كنت تحصل على 32 بت، فإنه يمكن أن يكون 64 بت، ويمكن أن يكون 128 بت.
يمكن لأي من هذه البتات تكون بت الذي يميز بين الأحرف الكبيرة والصغيرة.
يجب أن لا تحتاج إلى معرفة أنه هو 32 بت.
يمكنني استخدام هذا "أ" - A للحصول على بت تختلف بين الاثنين
دون الحاجة إلى الاعتماد على الرقم السحري الذي هو 32.
وحتى الآن، عد آخر كان غريبا، وهكذا ما أريد القيام به؟
[أجوبة الطلاب، غير مفهومة]
[طالب] ما هذا؟
سوف أفعل ذلك في 1 ثانية.
حتى الآن إذا أريد أن - أريد للتأكد من الطابع الآن صغيرة،
ويمكن لذلك أنا أو 32، و 32 معنى "أ" - أ.
ولكن إشعار، عن طريق المنطق نفسه الذي السابقة، أنه إذا
كان بالفعل هذه الرسالة الصغيرة، ثم بنسبة 32 ORing تبقي مجرد أنها أحرف صغيرة.
فإنه لم يتغير الطابع الأصلي.
ولكن الآن ليس لدي لتجنب قائلا: "إذا كان من الصغيرة، وننسى تماما عن ذلك،
اذا كان الكبيرة، ثم تغيير ذلك. "
انها أكثر ملاءمة للقيام بذلك.
[طالب] هل هذه الاستراتيجية من طرح الكبيرة من عمل صغيرة إذا لم يكن 32؟
إذا كان، مثل، 34 أو شيء؟
لذلك، عليك أن تعرف أن الفرق بين 2 هو -؟ 1 بت >>.
يمكن أن يكون أكثر من 1 بت، ما دام كل من البتات أدناه هذا الموقف هي نفسها.
لذلك نحن بحاجة على الأقل 26 حرفا - أو، وهناك 26 حرفا.
لذلك نحن بحاجة لا يقل عن 26 أرقام لتمثيل الفرق -
الفرق بين و، 'A' يجب أن يكون لا يقل عن 26
وإلا لما كنا تمثيل جميع الأرقام العاصمة.
وهذا يعني أن A، إذا بدأنا في 1، انها تنوي استخدام كل هذه المعاهدات،
كل هذه القطع أول 5، لتمثيل كل شيء من خلال Z.
هذا هو السبب في بت المقبل، أو بت هذا، بت المقبل هو الذي المختار للتمييز بين A و '.'
وهذا أيضا السبب وASCII في الجدول، وهناك 5 حروف الرموز فصل من أحرف صغيرة.
منذ تلك هي الرموز، 5 الإضافية التي إحضار ال 32 وهي الفرق بينهما.
[طالب] حتى نتمكن من القيام بذلك، لأنها مصممة ASCII بهذه الطريقة.
نعم. ولكن ASCII - يمكن أيضا أن تكون الفرق على حد سواء من هذه البتات.
مثل، إذا كانت A 10000001، و 'A' كان 11100001 - انسى، أيا كان.
ولكن لو كان هذا، فإننا يمكن أن الاستمرار في استخدام "أ" - أ.
انها الآن فقط الفرق بين و"أ" لا تزال هذه القطع 2.
اعتقد انه مكتوب 48. هل هو 32 + 64؟ وأعتقد أنه من؟
فإنه لا يزال 2 بت، كل حرف واحد، مثل، Z و Z، K و k،
فإنها لا تزال لديها بت بالضبط نفس ما عدا تلك المنصوص بت 2.
ذلك ما دام هذا صحيحا دائما، بغض النظر عن إذا ما كنت تستخدم ASCII أو نظام آخر،
طالما لا يوجد سوى عدد محدد من البتات التي تختلف عن كل حرف،
ثم أن يعمل بشكل جيد.
انها مجرد أن تم تعيين 32 حتى لأنه أول واحد يمكن أن نستخدمها ربما. كول >>.
أنا أميل إلى تفضيل، في حال كنت لم أر، إذا كانت كتلة ليست سوى خط واحد،
يمكنك التخلص من الأقواس المتعرجة، لذا أنا أميل إلى تفضيل القيام بذلك.
أيضا، تعرف كيف يمكننا أن نفعل أشياء مثل ليالي [أنا] + 1 =؟
يمكنك أيضا القيام ق [I] أحادي المعامل AND = 32.
وأحادي المعامل OR = 32.
أيضا، عد وزارة الدفاع 2 == 0.
تذكر بحيث - وأنا لن أكتبه - أي قيمة غير الصفر صحيح، و 0 غير صحيح.
حتى "إذا العد وزارة الدفاع 2 == 0" هو نفسه قوله "إن لم يكن الاعتماد وزارة الدفاع 2."
أنا ربما قد عكس مجرد خطوط وقال: "إذا العد وزارة الدفاع 2،
هل OR 1، عدا ذلك لا و1 "، بحيث لم أكن في حاجة إلى" لا ".
ولكن هذا يعمل فقط كذلك.
وماذا يمكن أن أفعل هنا؟
هل يمكن الجمع بينها وبين الثلاثي إذا أردت، ولكن بعد أن كنت مجرد جعل الأشياء ميسييه
وربما أكثر صعوبة في القراءة، لذلك فإننا لن نفعل ذلك.
أي شخص لديه أي اقتراحات أخرى؟
هو أن كل مشكلة طلب؟ أوه نعم.
حتى الحصول على التخلص من هذه الأسطر الفارغة، ونحن الآن سوف طباعة و،٪ S كونها واحدة للجمل،
سنقوم طباعة و، ق.
الآن دعونا تشغيله. لم أفعل أي شيء خاطئ؟
هذا هو \ "؛ أريد ن.
حسنا. الآن سنقوم بتشغيل عليه. انها سوف يصيح في وجهي ربما.
التوابع strlen في string.h.
لذلك هذا هو الشيء الجميل في ضجيج هو ما يقول لك انه في،
بدلا من دول مجلس التعاون الخليجي التي تقول فقط، "يا، كنت قد نسيت شيئا، وأنا لا أعرف ما كان عليه".
ولكن هذا سوف يقول لي، "يعني أنت لتشمل string.h".
لذلك لم أكن المطالبة بأي شيء، لذلك لا يقول أي شيء.
ولكن سنفعل سبيل المثال، "وبفضل 4 الوظيفة".
التي تبدو الحق. الصيحة.
العودة الى الأصل حتى الخاص بك، وأنا تقريبا لم تفعل ذلك.
انها اختيارية. والرئيسي هو وظيفة فقط للفيه اختيارية.
إذا كنت لا يعود أي شيء من الرئيسي، انه يفترض أن كنت تعني العودة إلى 0.
الأسئلة؟
حسنا. حتى الآن والمشكلة الثانية.
"يذكر من المحاضرة 2 الأسبوع الثاني الذي تبادل القيم 2 المتغيرات" وذلك بتمرير
هذه المتغيرات 2 إلى وظيفة (حتى لو دعا المبادلة) لا يعمل بالضبط، على الأقل ليس من دون "مؤشرات".
وتجاهل المؤشرات حتى نحصل عليها.
نحن نريد لمبادلة المتغيرات 2، ونحن لم تكن تستخدم وظيفة للقيام بذلك.
ونحن في طريقنا لتحقيق ذلك لا تزال في الرئيسية مثل تقول.
ولكن استخدام هذه المتغيرات 2، نحن لا نريد استخدام متغير مؤقتة.
هناك 2 طرق للقيام بذلك.
يمكنك أن تفعل ذلك باستخدام مشغلي الخاص الثنائية التقليدية.
لذلك لا أحد يعرف طريقة سريعة وقذرة للقيام بذلك؟
قد يستغرق فعليا لمدة دقيقة للتفكير. إذا كان لدي -
سوف أحدد المشكلة حتى لو كانوا تسأل. إذا كان الأمر كذلك لقد 2 المتغيرات، A، الذي هو مجرد عدد صحيح
أنها تعطي لي، ومبلغ B متغير، الذي هو آخر عدد صحيح أنا أعطيت.
إذا كان الأمر كذلك لدي هذه المتغيرات 2، الآن أريد أن مقايضتهم.
التقليدية، وذلك باستخدام مشغلي الخاص الثنائية العادية، يعني، مثل +، -، ÷.
لا مشغلي أحادي المعامل التي تعمل على ثنائي.
وذلك باستخدام -، +، ÷، وجميع تلك.
يمكننا عن طريق القيام مبادلة ما يشبه = أ + ب، و B = أ - ب، أ = أ - ب.
لذلك، التحقق من سلامة العقل، وبعدها سنرى ماذا يعمل.
دعونا نقول ل= 7، ب = 3، ثم ب + ستكون 10.
لذلك نحن الآن تحديد 10 =، ثم نقوم به ب = أ - ب.
لذلك نحن نقوم ب = أ - ب، والتي ستكون 7، وب = أ - ب مرة أخرى،
أو = أ - ب. التي ستكون 10 حتي 7 الذي هو 3.
حتى الآن، بشكل صحيح، كان "أ" 7، ب كان 3، والآن هو ب 7 و 'A' هو 3.
لذلك هذا النوع من المنطقي؛ "أ" هو مزيج من الأرقام 2.
في هذه المرحلة، "أ" هو مزيج، ومن ثم نقوم بطرح خارج ب الأصلي،
ثم نحن ليحذف ما كان الأصلي 'ل".
ولكن هذا لا يعمل لجميع الأرقام.
لمعرفة ذلك، دعونا النظر في النظام، لذا نعتقد عادة من الأعداد الصحيحة و32 بت.
دعونا نعمل على شيء مثل هذا فقط 4 بت.
أتمنى الخروج مع مثال جيد في الوقت الحالي.
لذلك، وأنا أعلم، وسيكون هذا سهلا.
دعونا نقول لدينا 2 الأرقام 1111، و 1111، لذلك نحن في ثنائي في الوقت الحالي.
في عشرية الفعلية، إذا كنت ترغب في التفكير في الأمر على هذا النحو، أ. = 15 = 15 وب
ولذا فإننا نتوقع، بعد أن مقايضتهم - لا بل يجب أن تكون الأرقام نفسها،
ولكن أنا فعلت هذا بهذه الطريقة.
دعونا جعلها لا الأرقام نفسها. دعونا نفعل و1111 0001.
لذلك = 15 و B = 1.
بعد أن مقايضتهم، نتوقع "أ" لتكون 1 و ب أن تكون 15.
لذلك أول خطوة نخطوها هي = أ + ب.
أعدادنا ليست سوى 4 بت واسعة، لذلك 'أ،' الذي هو 1111، ب +، والذي هو 0001،
سوف ينتهي الأمر به 10000، ولكن ليس لدينا سوى 4 بت.
حتى الآن A = 0.
والآن نريد أن تعيين b = أ - ب - في الواقع، وهذا لا يزال يعمل بها تماما.
أ = أ - دعونا نرى ما إذا كان هذا يعمل بها تماما - ب.
حتى ذلك الحين ب = 0 - 1، والذي سيظل 15، وبعد ذلك = أ - ب، والتي ستكون 1.
ربما هذا لا عمل.
أشعر هناك سبب أنها لا تعمل باستخدام العادية.
حسنا، لذلك تعمل على افتراض أنه لا يعمل مع عمليات الثنائية العادية،
وسوف ننظر ل- I سوف جوجل لمعرفة ما إذا كان ذلك صحيحا.
لذلك نحن نريد أن نفعل ذلك باستخدام عوامل التشغيل أحادي المعامل، وهنا هو فكرة XOR.
لذلك، إدخال XOR (^) إذا كنت لم أر حتى الآن.
انها، مرة أخرى، عامل أحادي المعامل لذلك يعمل شيئا فشيئا، وit's -
إذا كان لديك بت 0 و 1، فإن هذا يكون 1.
إذا كان لديك بت 1 و 0، فإنه سوف يكون 1، لديك بت 0 و 0 أنه سوف يكون 0،
وإذا كان لديك 1 و 1 بت سوف يكون 0.
لذلك فمن مثل OR. إذا كان أي من البتات صحيحا، فإنه من 1، ولكن على عكس OR، لا يمكن أن يكون كل من البتات التي تحققت.
أو قد يكون هذا 1، سوف يكون لديك هذا XOR 0.
لذلك نحن ذاهبون الى تريد استخدام XOR هنا.
تفكر في ذلك لمدة دقيقة، وأنا ذاهب إلى Google.
حسنا، لا يمكنك قراءة ذلك؛ أنا حاليا على خوارزمية XOR الصفحة المبادلة.
نأمل أن هذا يفسر لماذا أنا can't -
هذا هو بالضبط الخوارزمية أن فعلنا للتو.
ما زلت لا أرى لماذا - I يجب أن يكون فقط اختار مثالا سيئا،
ولكن هذه الحالة حيث "أ" لتصبح حدث 0، بعد الحصول على بت إلى 5، وحتى الآن "أ" 0،
هذا هو ما يسمى ب "تجاوز عدد صحيح."
ووفقا ليكيبيديا، "وخلافا للمقايضة XOR، هذا الاختلاف يتطلب أن يستخدم بعض الأساليب
لضمان أن x + Y لا يتسبب تجاوز عدد صحيح. "
لذلك هذا لا يعانون من مشاكل، وهذا كان تجاوز عدد صحيح، ولكن فعلت شيئا خاطئا.
لست متأكدا. سأحاول من أجل التوصل إلى واحد آخر.
[طالب] حسنا، ليست تجاوز عدد صحيح عندما كنت في محاولة لوضع رقم في هناك
أكبر من كمية البتات كنت قد خصصت؟
نعم. لدينا 4 بت. That's - كان لدينا 4 بت، ونحن نحاول ثم إضافة 1 إلى ذلك، لذلك نحن في نهاية المطاف مع 5 بت.
ولكن قليلا فقط يحصل 5 قطع، نعم.
فقد تنجح في الواقع -
[طالب] هل هذا يلقي عليك خطأ، أو يفعل ذلك - من شأنه أن يلقي ذلك خطأ؟
رقم لذا ليس هناك خطأ. عندما تحصل على مستوى الجمعية، قليلا خاصة
في مكان ما من تعيين وقال كان هناك تجاوز، ولكن في C لك نوع من مجرد لا نتعامل مع ذلك.
يمكنك في الواقع لا تتعامل معها إلا إذا كنت تستخدم تعليمات التجميع الخاص في C.
دعونا نفكر في مبادلة XOR.
وأعتقد أن مقالة ويكيبيديا قد تم أيضا قائلا إن -
لذلك جلبت أيضا وحدات حسابية، لذا أعتقد أنني كنت، من الناحية النظرية، والقيام الحسابية وحدات
عندما قلت أن 0 - 1 هو 15 ثانية.
لذلك قد فعلا ذلك - على معالج العادية التي لا 0-1 = 15.
لأننا في نهاية المطاف في 0، طرحنا 1، ثم لذلك يلتف حول لتوه إلى 1111.
لذلك قد تعمل هذه الخوارزمية في الواقع، وأ + ب، وأ - ب، ب -، وهذا قد يكون على ما يرام.
ولكن هناك بعض المعالجات التي لا تفعل ذلك، ولذا فإنه لن يكون على ما يرام في تلك منها محددة.
سوف مبادلة XOR تعمل على أي معالج. حسنا.
والفكرة هي أن أنه من المفترض أن تكون هي نفسها، وإن كان.
حيث أننا نستخدم XOR للحصول على المعلومات بطريقة أو بأخرى على حد سواء في 1 من المتغيرات،
وبعد ذلك سحب المعلومات من المتغيرات الفردية مرة أخرى.
لذلك لا أحد لديهم أفكار / الجواب؟
[الجواب طالبة، غير مفهومة]
لذلك ينبغي لهذا العمل، وأيضا، XOR هو تبادلي.
بغض النظر عن أي أمر رقم 2 هذه يحدث أن تكون في غاية هنا
هذه النتيجة سوف تكون هي نفسها.
لذلك ^ ^ ب ب هو أ.
قد ترى أيضا هذا المكتوب و^ = أ ب، ب ^ = أ، أ = ب ^ مرة أخرى.
لذلك هذا هو الحق، وأن نرى لماذا هذا يعمل، والتفكير في البتات.
باستخدام عدد يشرفوا، دعنا نقول 11001، 01100 و.
لذلك هذا هو "أ"، وهذا هو ب.
لذلك ^ = ب.
ونحن في طريقنا إلى أن وضع = 'A' إلى XOR من هذه الأمور 2.
حتى 1 ^ 0 هو 1؛ 1 ^ 1 هي 0؛ 0 ^ 1 هو 1، و0 ^ 0 هو 0، 1 ^ 0 هو 1.
حتى 'أ،' إذا نظرتم الى رقم عشري، فإنه سيكون -
كنت لن نرى الكثير من العلاقة بين الأصلي "أ" والجديد "A، '
ولكن بالنظر إلى بت، 'A' الآن مثل شبكة المعلومات
كل من الأصلي "أ" وب الأصلي.
إذا كان الأمر كذلك نأخذ ب ^ أ، نرى أننا سوف ينتهي في الأصل "على".
وإذا ما أخذنا الأصلي "أ" ^ الجديد 'A' نرى نحن في نهاية المطاف في ب الأصلي.
حتى (أ ^ ب) = ب ^ الأصلي "على".
و(أ ^ ب) ^ أ = ب الأصلي.
هناك - طريقة أخرى لرؤية هذا هو XOR أي شيء في حد ذاته هو دائما 0.
حتى 1101 ^ 1101، جميع البتات سوف تكون هي نفسها.
ولذلك لا يوجد أبدا ستكون الحالة حيث 1 هو 0 و الآخر هو 1.
لذلك هذا هو 0000.
الشيء نفسه مع هذا. (أ ^ ب) ^ ب ^ مثل (ب ^ ب).
(ب ^ ب) سيكون 0؛ ل^ 0 يجري لمجرد أن يكون "أ"، حيث أن جميع البتات هي 0.
كان منها - وبالتالي فإن الوحيدة التي ستكون فيها "أ" كان في الأصل 1.
ونفس الفكرة هنا، وأنا متأكد من أنها أيضا تبادلي.
نعم. لم أقول قبل ذلك كان تبادلي.
و^ 'أ،' وانها النقابي، وحتى الآن (ب ^ أ) ^ أ.
ويمكننا أن نفعل ب ^ (أ ^ أ).
ومرة أخرى حتى نحصل على ب الأصلي.
حتى "أ" والآن هو مزيج من 'ا' ب ومعا.
استخدام جديد لدينا التحرير والسرد "أ" نقول ب = التحرير والسرد "أ" ب ^ الأصلية، وحصلنا على النسخة الأصلية "أ".
والآن السرد = 'A' ^ ب الجديدة، والتي كان الأصل - أو التي هي الآن ما كان "أ" أو ب.
هذا هذه الحالة إلى هنا. هذا هو = ب، ب القديمة.
حتى الآن كل شيء هو العودة في الترتيب تبادلت.
إذا نظرنا في الواقع في البتات، ب = أ ب ^، هو الذهاب الى هذه XOR 2،
والجواب سيكون هذا، وبعد ذلك = أ ^ ب XORing وهذه (2) وهذا الجواب هو
الأسئلة؟ حسنا. حتى آخر واحد هو كبير نوعا ما أكثر صعوبة.
[طالب] اعتقد انه لديه شك في ذلك. >> أوه، آسف.
[طالب] ما في الواقع أسرع؟ إذا كنت تستخدم هذا XOR، أو هو إذا قمت بتعريف متغير جديد؟
فما هو في الواقع أسرع، معلنا متغير جديد أو استخدام XOR لمبادلة؟
الجواب هو، في أغلب الظن، متغير مؤقتة.
وذلك لأن بمجرد تجميع عليه - حتى على مستوى الجمعية،
ليس هناك شيء مثل المتغيرات المحلية أو أية متغيرات مؤقتة أو أي من هذه الأشياء.
انهم تماما مثل - هناك الذاكرة، وهناك سجلات.
سجلات هي الأشياء التي تحدث فيها بنشاط.
لم تقم بإضافة 2 الأشياء في الذاكرة؛ يمكنك إضافة 2 الأشياء في السجلات.
ويمكنك إحضار أشياء من الذاكرة إلى السجلات لإضافة بعد ذلك،
ثم كنت قد وضعت لهم مرة أخرى في الذاكرة، ولكن كل عمل يحدث في السجلات.
حتى عندما كنت تستخدم نهج مؤقت متغير، وعادة ما يحدث هو
هذه الأرقام 2 هي بالفعل في سجلات.
ثم من تلك النقطة، بعد أن كنت قد تبادلت لهم،
انها سوف نبدأ باستخدام السجل الأخرى.
في أي مكان كنت قد تم استخدام ب، وأنها سوف مجرد استخدام السجل الذي تم تخزين بالفعل 'و".
لذلك لا حاجة لفعل أي شيء للقيام فعلا المبادلة. نعم؟
[طالب] ولكن الأمر يتطلب أيضا المزيد من الذاكرة، أليس كذلك؟
وسوف يستغرق سوى مزيد من الذاكرة إذا كان يحتاج لتخزين هذا المتغير المؤقت.
إذا كنت تحب استخدامها لاحقا أن متغير مؤقت مرة أخرى في مكان ما،
ثم - أو تعيين هذا المتغير إلى شيء مؤقت.
حتى إذا كان في أي نقطة في الوقت المناسب 'ل،' ب في درجة الحرارة على قيم مميزة أو شيء ما،
ثم انها ستكون لدينا مواقع متميزة في الذاكرة، ولكن كان صحيحا أن
هناك العديد من المتغيرات المحلية والتي سوف توجد إلا في السجلات.
وفي هذه الحالة، أبدا وضعه في الذاكرة، وهكذا كنت أبدا إضاعة الذاكرة.
حسنا. السؤال الأخير هو أكثر قليلا.
حتى هنا، في هذا الجهاز CS50، هناك القاموس.
والسبب في ذلك هو لأن [؟ B66] هو المدقق الإملائي حيث عليك أن تكون الكتابة
باستخدام الجداول التجزئة أو يحاول أو بعض هياكل البيانات.
كنت على وشك أن كتابة المدقق الإملائي، وكنت على وشك أن استخدام هذا القاموس للقيام بذلك.
ولكن لهذه المشكلة، ونحن مجرد الذهاب للبحث عن لمعرفة ما إذا كلمة واحدة في القاموس.
وذلك بدلا من تخزين قاموس كامل في بعض هياكل البيانات
ويبحث ثم عبر المستند بأكمله لمعرفة ما إذا كان بها أخطاء إملائية أي شيء،
نحن نريد فقط أن العثور على 1 كلمة. حتى نتمكن من مسح ما يزيد قليلا على قاموس كامل
وإذا كنا لا تجد كلمة في قاموس كامل، ثم كان لا هناك.
وجدنا أننا إذا مسح على القاموس بأكمله ولا ترى كلمة، ثم نحن في حالة جيدة، و.
تقول هنا أننا نريد أن تبدأ في النظر في وظيفة معالجة ملف C في،
لأننا نريد لقراءة القاموس،
ولكن سوف أعطي التلميح هنا على النحو الذي يجب أن ظائف التفكير.
أنا أكتب لهم على مساحات.
وبالتالي فإن أهمها فأنت تريد أن ننظر إلى وو مفتوحة ثم، لا محالة، و مغلقة،
والتي سوف تذهب في نهاية البرنامج، وو و الفحص.
هل يمكن أيضا استخدام و قراءة، ولكن ربما كنت لا تريد أن
لأن ذلك - لا ينتهي بك المطاف تحتاج إلى ذلك.
F الفحص و هو ما سنتعرض لاستخدام لمسح أكثر من القاموس.
وهكذا لا تحتاج إلى رمز يصل الحل، مجرد محاولة وما شابه الزائفة رمز طريقك
إلى الحل، ومن ثم سنناقش ذلك.
وفعلا، منذ أن قدم لكم هذه بالفعل، وإذا ذهبت إلى أي محطة أو قذيفة الأجهزة الخاصة بك،
وI - I عادة - إذا كنت لم أر حتى الآن، وأنا لا أعرف ما إذا فعلتم في الصف،
لكن الرجل، وبالتالي فإن صفحات الرجل، هي مفيدة جدا للنظر في أي وظيفة الى حد كبير.
لذلك يمكنني أن أفعل، مثل، و الرجل، و الفحص.
هذا هو الآن معلومات عن العائلة و فحص وظائف.
يمكن أن أفعل أيضا و الرجل، فتح، والتي سوف تعطيني تفاصيل ذلك.
لذلك إذا كنت تعرف ما كنت تستخدم وظيفة، أو كنت تقرأ التعليمات البرمجية
وترى بعض وظيفة وكنت مثل، "ماذا يعني هذا نفعل؟"
اسم الرجل فقط وظيفة ذلك.
هناك بضعة أمثلة غريبة حيث قد يكون لديك أن أقول
تحب. رجل 2 أن اسم الدالة، أو رجل 3 والتي اسم الدالة،
ولكن لديك فقط للقيام بذلك إذا كان اسم الرجل لا وظيفة للعمل يحدث للمرة الأولى.
[طالب] لذا أنا أقرأ في الصفحة رجل لفتح، ولكن أنا ما زال غامضا حول كيفية استخدامه والبرنامج.
حسنا. وهناك الكثير من صفحات رجل أقل من مفيدة.
انهم أكثر فائدة إذا كنت تعرف ما يفعلونه
ثم أنت فقط بحاجة إلى أن نتذكر ترتيب الحجج أو شيء.
أو أنها يمكن أن تعطيك لمحة عامة، ولكن بعض منهم الساحقة جدا.
مثل المسح الضوئي و F، أيضا. فهو يوفر لك المعلومات عن جميع هذه الوظائف،
و1 خط أسفل يحدث هنا أن أقول، "F و مسح يقرأ من وجهة أو تيار سلسلة".
لكن و فتح. لذلك، كيف نستخدمها و مفتوحة؟
فكرة البرنامج الذي يتعين عليها القيام به ملف I / O هو أن
تحتاج أولا لفتح الملف الذي تريد أن تفعل أشياء معه، وحتما،
قراءة الأشياء من هذا الملف وتفعل الاشياء معهم.
F مفتوحة هو ما نستخدمه لفتح الملف.
الشيء نعود، لذلك ما نريد ملف لفتح، وأنه يعطي لنا -
هنا تقول "/ المستخدم / مشاركة / ديكت / الكلمات."
هذا هو الملف الذي نريد لفتح، ونحن نريد لفتحه -
لدينا لتحديد ما إذا كنا نريد صراحة لفتحه للقراءة أو إذا كنا نريد لفتحه الكتابة إلى.
هناك اثنين من الاشياء معا و، لكننا نريد لفتح هذا للقراءة.
نريد أن القراءة من الملف.
فماذا يعني هذا العودة؟ تقوم بإرجاع الملف نجمة (*)،
وسوف تظهر فقط كل شيء في و متغير، * حتى،
مرة أخرى، انها مؤشر، ولكن نحن لا نريد للتعامل مع المؤشرات.
يمكنك التفكير في وو، و الآن متغير كنت تنوي استخدام لتمثيل الملف.
حتى إذا كنت ترغب في قراءة من الملف، تقرأ من و.
إذا كنت ترغب في إغلاق الملف، و إغلاق.
حتى في نهاية البرنامج عندما نريد حتما إلى إغلاق الملف، ماذا علينا ان نفعل؟
نحن نريد لإغلاق F.
حتى الآن وظيفة الملف الأخير أننا تريد الذهاب الى استخدام المسح الضوئي هو F، و مسح و.
وما أن يفعله هو فإنه بفحص أكثر من ملف تبحث عن نمط لمطابقة.
أبحث في الصفحة الرجل هنا، ونحن نرى كثافة العمليات و الفحص و تجاهل قيمة الإرجاع في الوقت الراهن.
الوسيطة الأولى هي تيار * الملف، وبالتالي فإن الحجة الأولى التي كنت تريد الذهاب الى تمرير هو و.
نحن على المسح الضوئي F.
الوسيطة الثانية هي سلسلة تنسيق.
سوف أعطيك سلسلة تنسيق في الوقت الحالي.
أعتقد أننا يحدث أن أقول، 127s \ ن، والكثير من هذا لا لزوم لها.
فكرة أن ما هو شكل سلسلة، هو ما تفكر به و مسح كحالة معاكسة للو الطباعة.
و حتى الطباعة، الطباعة و نحن أيضا استخدام هذا النوع من المعلمة تنسيق،
ولكن في الطباعة و ما نقوم به هو - دعونا ننظر إلى ما يعادلها.
طباعة و ذلك، وهناك في الواقع أيضا و الطباعة و حيث الوسيطة الأولى ستكون F.
عند طباعة و، يمكن أن تقول شيئا مثل، "الطباعة 127s \ n" و ثم إذا كنا نقله بعض السلسلة،
انه سيكون لطباعة هذه السلسلة ثم سطر جديد.
ما يعني 127، وأنا متأكد جدا، ولكن أنا لم يقتصر نفسي إليها،
فإنك لن تحتاج حتى إلى القول '127 'في و الطباعة،
ولكن ما يعنيه هو أول طباعة 127 حرفا.
لذلك أنا متأكد من أن هذا هو الحال. يمكنك جوجل لذلك.
ولكن في واحد القادم أنا متأكد تقريبا فهذا يعني أن.
لذلك هذا هو أول طباعة 127 حرفا، يليه سطر جديد.
F و تفحص الآن، بدلا من النظر إلى متغير وطباعته،
انها سوف ننظر في بعض السلسلة، وتخزين النمط إلى المتغير.
دعونا فعلا استخدام المسح الضوئي و في مثال آخر.
لذلك دعونا نقول كان لدينا بعض الباحث، س = 4،
وأردنا أن إنشاء سلسلة مصنوعة من - يريد لإنشاء سلسلة
هو أن مثل هذا يأتي في وقت لاحق من ذلك بكثير،
هذا مجرد شيء مثل 4.JPG.
لذلك قد يكون هذا البرنامج حيث سيكون لديك لمكافحة خلاصة القول،
خلاصة القول مواجهة الأول، وكنت ترغب في حفظ مجموعة من الصور.
لذلك كنت تريد حفظ i.jpg، حيث I هي بعض من التكرار حلقة الخاص بك.
لذلك كيف يمكننا أن نجعل هذه السلسلة لذلك JPEG؟
إذا كنت تريد طباعة 4.JPG، يمكن أن نقول فقط و الطباعة، d.jpg٪،
ومن ثم فإنه لذلك طباعة JPEG.
ولكن إذا كنا نريد لانقاذ 4.JPG سلسلة، ونحن نستخدم و الفحص.
لذلك سلسلة S - في الواقع نحن can't - شخصية، شار ثانية، دعونا نذهب 100.
لذلك أنا أعلن سوى بعض مجموعة من 100 حرف،
وهذا ما نحن ذاهبون لا محالة إلى أن تخزين JPEG التي فيها
لذلك نحن ذاهبون الى استخدام المسح الضوئي و، والشكل، وكيف يمكننا أن أقول d.jpg٪
من أجل طباعة 4.JPG، شكل هذا سيكون d.jpg٪.
وبالتالي فإن الشكل هو d.jpg٪، ما نريد أن يحل محل٪ مع د هو العاشر،
والآن نحن بحاجة لتخزين هذه السلسلة في مكان ما.
وإلى أين نحن ذاهبون لتخزين هذه السلسلة في ليالي الصفيف.
حتى بعد هذا السطر من التعليمات البرمجية، s، إذا كنا طباعة و ق٪، من ليالي متغير،
انه سيكون لطباعة 4.JPG.
حتى و مسح و هو نفس و الفحص، إلا انه الآن يبحث حول هذا الملف
لماذا لتخزين في ليالي.
هذا ما آخر حجة ستكون.
نحن نريد لتخزين - في كل وفقا لشكل وحاول أدناه "الأسرة و فحص بالاشعة الوظائف.
إذا تم تخزين أي نقطة في الموقع قد يعود - "
لا، ونحن قد تكون جيدة. اسمحوا لي أن التفكير للحظة.
لذلك الفحص و لا - ما هيك هي وظيفة الذي يفعل ذلك؟
لذلك الفحص و لن تأخذ عددا صحيحا والقيام دوت JPG.
انه سيكون ل[مامبلز].
حفظ متغير في سلسلة الباحث الباحث C.
ما هو هذا المتغير، أو ما هذا؟ دالة يسمى
نعم. That's - نعم. ذلك ما كنت لك تحديد هذا كان قبل الطباعة و،
التي - أن من المنطقي أكثر من ذلك بكثير، لماذا قلت أنه كان أكثر من ذلك بكثير مثل و الطباعة.
مسح و لا يزال نوع من مثل الطباعة و لكن ليالي و الطباعة هو الذهاب الى فحص ما يزيد على
واستبدال المتغيرات وتخزين الآن في سلسلة.
بدلا من طباعة ذلك، فإنه يخزنها في سلسلة.
تجاهل بحيث تماما. يمكنك ما زالوا يعتقدون من محدد التنسيق ومثلها في ذلك مثل و الطباعة.
حتى الآن، إذا كنا نريد أن تفعل الشيء 4.JPG، فإننا نفعل هذا و الطباعة، العاشر من هذا.
فما تقوم به و المسح - ما كان سؤالك سيكون؟
[طالب] أنا فقط كنت في حيرة ما نحاول القيام به هنا
مع أن JPEG. هل يمكن ان توضح ذلك الوقت 1 أكثر؟
هذا وكان ذلك - انها أقل relevent لو مسح و الآن؛ نأمل، فإنه سيتم ربط مرة أخرى في نوع من الطريق.
ولكن ما كان ينوي في البداية لإظهار كان - وهذا هو في الواقع صلة مباشرة لهذه [؟ F5]
وأنت تسير إلى استخدام ق و الطباعة، حيث يقول لدينا 100 صورة،
وأنت تريد أن تقرأ صورة 1.JPG، 2.JPG، 3.JPG.
وذلك من أجل القيام بذلك، تحتاج إلى فتح و ثم لديك لتمرير في السلسلة التي ترغب في فتح.
لذلك فإننا نريد لفتح 1.JPG؛ من أجل خلق السلسلة التي يتم 1.JPG،
و نحن نفعل هذا من الطباعة٪ d.jpg-أننا لم نفعل الباحث 0 = ط.
ط <40، ط + +.
حتى٪ S و الطباعة d.jpg الأول.
حتى بعد هذا الخط، والآن متغير أو مجموعة ليالي سوف 1.JPG.
أو، 0.JPG، 1.JPG، 2.JPG. وحتى نتمكن من فتح، في المقابل، كل صورة للقراءة.
لذلك هذا هو ما ق طباعة و لا. هل ترى ما ليالي طباعة و تفعل الآن؟
[طالب] حسنا، لذلك فمن أخذ - يقوم بإنشاء سلسلة، something.jpg، ومن ثم يخزنها.
نعم. فإنه ينشئ - هذا هو آخر سلسلة التنسيق، تماما مثل المسح الضوئي وو الطباعة و،
حيث إدراج جميع المتغيرات الوسيطة الثانية في قد يكون هذا في مقابل ط.
ربما - أعني، هذا هو الحال. ولكن أيا كان الأمر هو من الحجج.
انه سيكون لإدراج كافة المتغيرات في سلسلة التنسيق
وتخزينها في المخزن المؤقت ثم لدينا، ونحن ندعو أن العازلة، حيث انها اننا تخزين السلسلة.
لذلك نحن تخزين داخل ق السلسلة بشكل صحيح بتنسيق، بعد أن تم استبدال٪ مع 4 د.
[طالب] حتى إذا فعلنا هذا، و هو متغير مجرد الذهاب على أن يعاد تخصيصها؟
نعم. لذلك يجب علينا إغلاق و الأصلي قبل القيام بذلك.
ولكن - وبعد ذلك أيضا، إذا لم تكن هناك وو فتح هنا، ثم نحن بحاجة إلى أن أقول -
نعم. ولكن سيكون من فتح ملفات 100 مختلفة.
[طالب] ولكننا لا تكون قادرة على الوصول، أو - حسنا.
حسنا. ذلك المسح و، و مسح و، هو نوع من نفس الفكرة،
ولكن بدلا من، بدلا من تخزينها في سلسلة، انها أشبه أنت الآن
تخطى عمولة، ونمط مطابقة ضد هذه السلسلة وتخزين النتائج في متغيرات.
يمكنك استخدام المسح الضوئي لتحليل و على شيء من هذا القبيل 4.JPG، وتخزين ال 4 X عدد صحيح في كثافة العمليات المبلغ.
هذا ما يمكننا استخدامها و المسح الضوئي لل.
F الفحص و هو الذهاب الى القيام بذلك في سطر الأوامر.
أنا فعلا متأكد من هذا هو ما يفعله مكتبة CS50.
لذلك عندما تقول، "الحصول على كثافة العمليات،" انه مسح جي و أكثر من - مسح و هي الطريقة التي تحصل إدخال المستخدم.
F و مسح سيفعل نفس الشيء ولكن باستخدام ملف لمسح أكثر.
حتى هنا، ونحن على مسح هذا الملف.
نمط نحاول المباراة بعض السلسلة التي هو 127 حرفا
تليها سطر جديد
لذلك أنا متأكد من أننا يمكن أن حتى مجرد القول "مباراة ثانية،" لأنه في القاموس
نحن يحدث لديها، كنت يضمن أننا لا كلمة هو أن الطويل،
وأيضا و مسح و سوف، أعتقد، ووقف في الخط الجديد مهما كانت.
ولكن سوف ندرج الخط الجديد في المباراة، و-
[طالب] وإذا كنا لم تشمل الخط الجديد، لن تجد أجزاء من كلمة واحدة؟
ذلك - كل - النظر في القاموس -
حتى في القاموس، وهذه كلها من كلماتنا.
كل واحد في سطر جديد.
وو المسح هو الذهاب الى التقاط هذه الكلمة.
إذا كنا لا تشمل خط جديد، فإنه من الممكن أن تفحص و القادمة للتو من قراءة سطر جديد.
ولكن بما سطر جديد ثم سوف فقط تجاهل سطر جديد.
ولكن سنقوم أبدا جزءا من كلمة واحدة، لأننا دائما قراءة إلى سطر جديد، مهما كانت.
[طالب] ولكن ماذا إذا كنت تبحث عن كلمة "السيسا" مثل السيسا.
سوف تجد ذلك، ويقول انها المباراة؟
وها نحن - سوف تقرأ في - هذا هو في الواقع نقطة جيدة.
نحن أبدا باستخدام الحالي - كلمة نحن تبحث عن سطر الأوامر الأولى حجة.
حتى سلسلة، كلمة = argv 1.
وبالتالي فإن سلسلة نبحث عنه هو argv 1.
نحن لا نبحث عن كلمة على الإطلاق في المسح و لدينا.
ما كنا نفعل مع الفحص و هو الحصول على كل كلمة في القاموس،
ثم مرة واحدة لدينا هذه الكلمة ونحن في طريقنا لاستخدام strcmp لمقارنتها.
ونحن في طريقنا لمقارنة كلمتنا وما نقرأ فيها فقط
حتما ذلك، ونحن في طريقنا لينتهي به حفنة من مسح FS
حتى مجرد أن ذلك يحدث و المسح سيعود -
فإنه سيعود واحد، طالما أنها مطابقة لكلمة جديدة،
وأنها سوف تعود شيء آخر بمجرد أن فشلت في مطابقة الكلمة.
نحن على قراءة القاموس كله، تخزين سطرا سطرا كل كلمة في ليالي متغير.
ثم نحن مقارنة مع كلمة ثانية، وإذا المقارنة == 0،
strcmp يحدث لجلب 0 إذا تم إجراء المباراة.
حتى إذا كان 0، ثم يمكننا طباعة و، المتطابقة،
أو كلمة في القاموس، أو ما كنت ترغب في طباعة و.
وبعد ذلك - ونحن لا نريد أن يغلق و مرارا وتكرارا.
هذا هو النوع من الشيء نريد القيام به، ونحن لا نبحث فقط عن الكلمة في القاموس.
لذا فإننا يمكن أن نفعل ذلك، إذا أردنا أن نبحث عن نمطها، السيسا، مثلك ذكرت من قبل،
إذا أردنا أن نبحث عن هذا النمط، ثم فإنه في حالة فشل
لأن هذا ليس في الواقع كلمة واحدة، ولكن واحدة من الكلمات في القاموس يحدث أن يكون هذا في ذلك.
لذلك فإنه تطابق هذه الكلمة، ولكن هذه المجموعة الفرعية للكلمة ليست الكلمة نفسها.
ولكن هذا ليس على مستوى قيامنا استخدامه؛ إننا نقرأ كل كلمة في
وبمقارنة ثم كلمة لدينا مع تلك الكلمة.
لذلك نحن دائما مقارنة الكلمات كاملة.
ويمكنني أن ترسل الحلول النهائية في وقت لاحق.
هذا هو نوع من الرد على ما يقرب من الحق، على ما أعتقد.
[تعليق طالبة، غير مفهومة]
أوه، لم أتخلص من ذلك من قبل؟ شار ثانية، وأنا أعتقد أننا وقال 127 - انسى ما هو أكبر.
سنفعل فقط 128؛ حتى الآن ما يكفي من ليالي طويلة.
نحن لسنا بحاجة لطباعة أي شيء.
ونحن في طريقنا أيضا إلى تريد أن يكون لإغلاق ملف لدينا، والتي يجب أن تكون حول الجواب الصحيح.
CS50.TV