[Powered by Google Translate] [تجول - مجموعة مشكلة 2]
[Zamyla تشان - جامعة هارفارد]
[هذا CS50. CS50.TV]
حسنا. مرحبا، الجميع، ومرحبا بكم في الإرشادات التفصيلية 2.
أولا، أريد أن أهنئكم على الانتهاء pset 1.
وأنا أعلم أنه كان يمكن أن يكون قليلا صعبة بالنسبة لبعض منكم،
كان يمكن أن يكون جهاز الكمبيوتر الخاص بك برنامج الأول الذي كتبته،
ولكن تذكر فقط أنه في نهاية هذا، عندما تنظر إلى الوراء في نهاية الفصل الدراسي،
سوف ننظر في pset 1 و سوف يقول، "مهلا، أنا قد فعلت ذلك في 5 دقائق".
أعرف ذلك وعلى ثقة من أن في نهاية هذا ستجد بالتأكيد pset 1 بسيط جدا.
لكن في الوقت الراهن انها انجاز ضخم، ومبروك للالحصول على القيام به.
الآن، أيضا ملاحظة سريعة قبل أن نصل إلى لحوم الإرشادات التفصيلية.
أريد فقط أن تجعل ملاحظة سريعة أنني في بعض الأحيان لن يكون لها ما يكفي من الوقت
خلال كثروو للذهاب من خلال كل طريقة واحدة للقيام مجموعة مشكلة
وبدلا من مجرد التركيز ربما على 1 أو 2 نوع من تطبيقات،
الطرق التي يمكن أن تفعل هذا.
ولكن هذا لا يعني أن يحظر لك من فعل ذلك بطريقة أخرى.
هناك كثير من الأحيان، كما هو الحال مع علوم الحاسب الآلي، العديد من الطرق للقيام بهذه الأمور،
وهكذا يشعر بالتأكيد حر في استخدام نوع مختلف من الحل مما كنت قد قدمت.
[pset 2: تشفير - Zamyla تشان - zamyla@cs50.net]
[pset2 - 0. مقطع من أسئلة - 1. قيصر - 2. Vigenere]
حسنا. حتى تعيين المشكلة 2: تشفير هو متعة واحدة.
مرة أخرى، مع كل pset عليك أن تبدأ مع قسم من الأسئلة
وهذا سوف تجرى في أقسام الخاص بك مع زميله التدريس المحال.
نحن لن تمر هذه على معاينة،
لكنها لن تساعد بالتأكيد إكمال pset.
وبالتالي فإن الجزء الأول من مجموعة قيصر المشكلة.
وذلك في شخص قيصر سوف تمر بك مفتاح مع عدد صحيح،
وسوف تشفير سلسلة من النص أنها توفر لك
وتعيد لهم شيئا مشفرة.
إذا كان أي شخص يشاهد قصة عيد الميلاد، وهناك مثال على ذلك هناك.
ثم الجزء الثاني من المشكلة هي مجموعة Vigenere،
الذي هو تقنية تشفير أكثر تقدما.
وهكذا نحن في طريقنا للشفر يحول الى شفرة جزء من النص،
بدلا من ذلك مع عدد صحيح باستثناء واحدة فقط، ونحن في طريقنا إلى صياغته في الواقع
مع الكلمة أن المستخدم سوف توفر لنا.
حسنا، لذلك الأداة الأولى في اليوم الأدوات هي في طريقها فعلا إلى تحديث الأجهزة.
على لوحة المناقشة لرأينا أشياء مثل، "لماذا لا هذا العمل؟"
"لماذا لم يقدم 50 العمل؟"
وغالبا ما يكون الحل هو في الواقع مجرد لتحديث الأجهزة الخاصة بك.
وهكذا إذا قمت بتشغيل فقط في إطار المحطة الطرفية في سودو الأجهزة الخاصة بك يم ص -
هذا هو العلم قال نعم، تحديث كل شيء - التحديث،
ثم الأجهزة الخاصة بك إذا لزم الأمر تحديث.
وأنها لا تضر إذا كنت بالفعل في أحدث إصدار من الجهاز.
بعد ذلك سوف أقول أية تحديثات جديدة متوفرة ويمكنك متابعة العمل على طول.
ولكن هذا أمر جيد لتنفيذ حتى كل مرة تقوم فيها بفتح الجهاز
لأننا ما زلنا إلى حد كبير -
في بعض الأحيان إذا نأتي إلى خلل - تحديد ذلك في الجهاز.
وذلك للتأكد من أن لديك أحدث إصدار من الجهاز
وتشغيل هذا التحديث هناك.
حسنا. منذ ذلك نحن نتعامل مع الحروف والمتغيرة، تشفر الأمور،
نحن ذاهبون الى تريد حقا أن تصبح أفضل الأصدقاء مع مخططنا ASCII.
هناك العديد من هي تلك على الإنترنت، إذا وجدت. ربما حتى على مسؤوليتك الخاصة.
في الأساس، مع كل حرف ورقم كل حرف وكل
هناك عدد المرتبطة بها،
ولذا فمن الجيد أن نرى قيمها ASCII إلى جانب الرسالة الفعلية.
وسوف تساعد بالتأكيد كنت في المجموعة المشكلة.
وكان الشيء الوحيد الذي ساعدني في هذه المجموعة المشكلة لطباعة الواقع بها،
وكما قلت كان يمر بها، وأود أن ألفت فعلا على ذلك،
الكتابة، "إذا كانت هذه أن يذهب إلى هناك، ثم ..."
نوع من الاعتماد على ذلك وبمناسبة عنه، أصبحت أفضل الأصدقاء مع الجدول الخاص بك ASCII.
ثم لدينا عدد قليل من الأدوات الأخرى المتوفرة لدينا.
هذه المرة بدلا من دفع فعلا للمستخدم لجميع مدخلاتها
ونحن في طريقنا للقيام الجمع.
ونحن في طريقنا إلى تدفعهم لبعض المدخلات،
ولكن ونحن في طريقنا أيضا لمجرد استخدام وسيطات سطر الأوامر.
لذلك عند تشغيلها برنامجهم، وعادة ما تقوله. / مرحبا، على سبيل المثال،
إذا كان لديك برنامج hello.c.
ولكن هذه المرة بدلا من أن تقول ذلك تماما، فإنها يمكن أن تضع الكلمات، والحجج بعد ذلك.
وهكذا ونحن في طريقنا إلى استخدام كل ما في تمرير لنا ومدخلاتها أيضا،
الانتقال إلى ما بعد ذلك فقط لدفع عدد صحيح ولكن أيضا باستخدام وسائط سطر الأوامر.
وبعد ذلك سوف نذهب الى المصفوفات والسلاسل، ونحن سوف تستخدم الكثير أيضا.
هنا مجرد مثال من الرسم البياني 1 ASCII البسيطة.
كما قلت، كل حرف يقابل عددا،
وحتى تعرف نفسك مع ذلك. سوف تأتي في متناول اليدين.
وعندما نبدأ في وقت لاحق القيام ببعض ASCIIMath التعامل مع الأرقام -
عمليات الجمع والطرح منها - ثم بالتأكيد جيدة للإشارة إلى هذا المخطط.
حتى هنا مثال على الشفرات قيصر - وهو ما كنت قد لعبت مع.
انها مجرد عجلات. أساسا، هناك أبجدية الخارجي ثم هناك أبجدية الداخلية.
حتى الحق هنا هو مثال على الشفرات قيصر ولكن مع مفتاح 0.
أساسا، والانحياز مع A، B يتواءم مع B، كل وسيلة تصل إلى Z.
ولكن بعد ذلك يقولون اننا نريد مفتاح من 3، على سبيل المثال.
ثم فإننا تدوير عجلة الداخلية بحيث A تؤيد الآن مع D، الخ.
وهكذا هذا هو أساسا ما نحن بصدد القيام به.
ليس لدينا عجلة، ولكن ما نحن بصدد القيام به هو جعل برنامجنا
نوع من التحول على طول الأبجدية لدينا كمية معينة من الأرقام.
وذلك قلت من قبل، ونحن في طريقنا إلى أن التعامل مع وسائط سطر الأوامر
وكذلك الحصول على عدد صحيح.
وبالتالي فإن الطريقة التي يمكن للمستخدم الخاص بك سيتم تشغيل البرنامج قيصر قائلا / قيصر
ثم إدخال رقم بعد ذلك.
وهذا العدد يمثل المفتاح، والتحول،
كم مرة كنت على وشك أن الدورية عجلة الداخلية للقيصر الشفرات الخاصة بك.
وهكذا ترى هنا على سبيل المثال.
إذا دخلنا رسائل من A L لقيصر لدينا في الشفرات،
عندئذ أنه من خلال إدخال D O لأن هذا هو كل حرف تحول أكثر من 3 مرات،
تماما مثل مثال على عجلة التي عرضتها عليكم.
ثم حتى إذا كنت دخلت، على سبيل المثال، وهذا هو CS50!
ثم فإنه أيضا نقل كافة الرسائل.
وهذا هو الشيء المهم في كل قيصر وVigenere
هو أننا في طريقنا لتخطي أي رسائل غير.
لذلك أي مسافات، الحروف، الخ، والأرقام، ونحن في طريقنا للحفاظ على نفسها.
ونحن في طريقنا الوحيد لتحويل الرسائل في هذه الحالة.
وذلك تراها في عجلة القيادة، ونحن لا نملك إلا الحروف المتاحة لنا،
لذلك نحن نريد فقط لتحويل الحروف وتشفير الرسائل.
لذا فإن أول شيء يجب القيام به، رأيت أن استخدام لقيصر في مشكلة مجموعة 2
لتشغيل قيصر ثم إدخال الرقم عند تشغيله في الجهاز.
وذلك ما يتعين علينا القيام به هو الحصول على نحو ما هذا المفتاح والوصول إليه.
ولذا نريد أن نرى بطريقة ما انها ستكون السطر الأمر الثاني الحجة.
أول واحد سيكون / قيصر، والمرحلة التالية ستكون عدد الرئيسية.
قبل ذلك كان لدينا الباحث الرئيسي (الفراغ) لبدء تشغيل البرامج C لدينا.
ونحن في طريقنا إلى طبقة قشر العودة قليلا
ونرى في الواقع أنه بدلا من تمرير في الفراغ لدينا وظيفة الرئيسي
نتعامل في الواقع مع معلمات 2.
لدينا كثافة العمليات argc اسمه ثم صفيف سلاسل دعا argv.
حتى argc هو عدد صحيح،
ويمثل عدد من الحجج تمريره في البرنامج.
ثم argv هو في الواقع قائمة الحجج التي تم تمريرها.
كل الحجج هي سلاسل، وهكذا argv يمثل مجموعة، قائمة، من السلاسل.
دعونا نتحدث عن صفائف قليلا.
صفائف هي أساسا بنية بيانات جديدة.
لدينا رجات، لدينا الزوجي، لدينا خيوط، والآن لدينا صفائف.
صفائف هي هياكل البيانات التي يمكن أن تعقد قيم متعددة من نفس النوع،
أساسا كان الأمر كذلك، قائمة من أي نوع تريده.
أساسا، إذا أردت قائمة من الأعداد الصحيحة فقط في 1 متغير،
ثم سوف تقوم بإنشاء متغير جديد من مجموعة التي كانت نوع int.
حتى صفائف صفر المفهرسة، وهذا يعني أن العنصر الأول من الصفيف هو مؤشر على 0.
إذا كان الصفيف من طول 4، كما في هذا المثال، ثم العنصر الأخير تكون على مؤشر 3،
الذي هو 4 - 1.
ذلك لخلق مجموعة، وكنت تفعل شيئا مثل هذا.
يقول كنت تريد مجموعة مزدوجة.
هذا ينطبق على أي نوع من نوع البيانات، وإن كان.
لذلك نقول لكم تريد مجموعة مزدوجة. نقول لكم نريد أن نسميها علبة البريد.
مثلما كنت تهيئة أي ضعف أخرى،
هل تقول مزدوجة ثم الاسم، ولكن هذه المرة وضعنا بين قوسين معقوفين،
وبعد ذلك سيكون هناك عدد من طول الصفيف.
لاحظ أنه في صفائف أننا لا نستطيع تغيير من أي وقت مضى طول،
بحيث يكون لديك دائما لتحديد واختيار عدد صناديق،
عدد القيم الصفيف الخاص بك هو الذهاب الى عقد.
ذلك لتعيين قيم مختلفة في الصفيف الخاص بك، وأنت تسير لاستخدام هذه الجملة التالي،
كما ترون على الشريحة.
سيتم تعيين 0 هل لديك علبة بريد مؤشر إلى 1.2،
علبة مؤشر مجموعة 1 الى 2.4، الخ.
حتى الآن بعد أن ننتهي من مراجعة المصفوفات قليلا، دعونا نعود إلى argc argv و.
ونحن نعلم أن argv الآن مجموعة من السلاسل.
حتى عندما يقوم المستخدم بتمرير في - يقولون انهم تقوم بتشغيل البرنامج -
يقولون. / مرحبا ديفيد مالان،
ما سيقوم البرنامج نفعل لك بالفعل قد جاء فعلا مع ما argc argv هي و.
حتى لا داعي للقلق بشأن ذلك.
وArgc في هذه الحالة تكون 3 لأنه يرى 3 كلمات مميزة مفصولة بمسافات.
وحتى ذلك الحين الصفيف في هذه الحالة، سوف يكون أول مؤشر / مرحبا،
1 ديفيد التالي، التالي 1 مالان.
لا أحد يرى على الفور ما العلاقة بين argv،
الصفيف، وargc هو؟
نعم. سوف نصل إلى أنه في المثال في args.c.
دعونا نرى ما اذا كنا نستطيع الاستفادة من العلاقة بين 2.
هنا قد تجد أن في الأجهزة الافتراضية التطبيق
لفتح ملفات في بعض الأحيان ج ايماكس.
لكننا نريد للتعامل مع gedit، وذلك ما يمكنك القيام به هو يمكنك النقر بزر الماوس الأيمن على الملف C الخاص بك،
انتقل إلى خصائص، فتح باستخدام، ثم اختر gedit، على النحو الافتراضية،
والآن يجب فتح البرنامج في gedit بدلا من ايماكس.
الكمال.
حتى هنا لدي برنامج أريد لطباعة كل وسيطة سطر الأوامر.
وبغض النظر عن مدخلات المستخدم، أريد أن أعود مرة أخرى إلى الأساس لهم في سطر جديد.
حتى ما هو الهيكل الذي يمكننا استخدامها لتكرار عبر شيء -
ما كنت تستخدم على الارجح في 1 pset الخاص؟
إذا كنت تريد أن تذهب من خلال عدد محدد من الأشياء؟ >> [طالب] للحلقة.
لحلقة. بالضبط. لذلك دعونا نبدأ مع لحلقة.
لدينا كثافة العمليات ط = 0. دعونا نبدأ مع متغير التهيئة القياسية.
انا ذاهب الى ترك شرطا لمجموعة ثم يقول أنا + +، سوف تفعل أشياء هناك.
حسنا.
لذا فإن العودة إلى التفكير argv، إذا argv لائحة من الحجج تمريره في البرنامج
وargc هو عدد من الحجج في البرنامج،
ثم هذا يعني أن argc هو أساسا طول argv، الحق،
لأن هناك ستكون كوسائط يصل إلى قيمة argc.
إذا كان الأمر كذلك نريد أن تكرار عبر كل عنصر في argv،
ونحن في طريقنا إلى الرغبة في كل مرة وصول إلى المتغير في argv في مؤشر معين.
يمكن أن تكون ممثلة مع أن هذا، أليس كذلك؟
هذا المتغير هنا يمثل سلسلة خاصة في هذا المثال
لأنه صفيف سلسلة - سلسلة خاصة في ذلك مؤشر معين.
ما نريد أن نفعله في هذه الحالة نريد أن طباعته، لذلك دعونا نقول printf.
والآن هو سلسلة argv، لذلك نحن نريد أن نضع التي نائبا هناك.
نريد سطر جديد فقط لجعلها تبدو جيدة.
حتى هنا لدينا حلقة لل. ليس لدينا حالة حتى الان.
لذلك أنا يبدأ في 0، ومن ثم في كل مرة انه سيكون لطباعة سلسلة معينة
في ذلك مؤشر خاص في الصفيف.
لذلك عندما نريد لوقف طبع العناصر في الصفيف؟
عندما كنا الانتهاء، أليس كذلك؟ عندما وصلنا نحن في نهاية الصفيف.
لذلك نحن لا نريد أن يتجاوز الماضي طول الصفيف،
ونحن نعرف بالفعل نحن لسنا بحاجة إلى الواقع تجد بنشاط ما هو طول argv
لأنه يعطى لنا، وما هذا؟ Argc. بالضبط.
لذلك نحن نريد أن نفعل هذا العدد argc عملية من المرات.
أنا لست في الدليل الصحيح.
حسنا.
الآن دعونا جعل وسائط. عدم وجود أخطاء، وهو أمر عظيم.
لذلك دعونا فقط تشغيل وسائط.
ما هو هذا سيعودون إلينا؟ انها مجرد الذهاب الى طباعته مرة أخرى.
"أنت سائط إدخالها في البرنامج، وأنا ذاهب ليعيدها لك."
لذلك دعونا نقول ما نريد قوله سائط ثم فو بار.
حتى ذلك الحين فإنه يطبع بها back to نا. كل الحق؟
حتى لا يكون هناك مثال على كيفية استخدام argc argv و
مع العلم أن يمثل argc argv طول.
تأكد من أن كنت لا من أي وقت مضى مع وصول صفائف احدة لما وراء طول الصفيف
لأن الصراخ C بالتأكيد عليك.
ستحصل على ما يسمى خطأ تجزئة،
وهو متعة أبدا، قائلا أساسا كنت تحاول الوصول إلى شيء
غير موجود، لا ينتمي لك.
وذلك للتأكد، وخاصة مع الفهرسة من الصفر، ونحن لا نريد أن -
مثل على سبيل المثال، إذا كان لدينا مجموعة من طول 4،
أن مؤشر مجموعة 4 لا وجود لها لأن نبدأ في 0، في مؤشر الصفر.
سوف يصبح طبيعة ثانية فقط لمثل الحلقات عندما نبدأ في 0.
حتى نستمر ذلك في الاعتبار.
كنت لا تريد من أي وقت مضى للوصول إلى الرقم القياسي لمجموعة هذا خارج متناول يديك.
حتى يمكننا أن نرى الآن كيف يمكننا الوصول نوع من
وسيطات سطر الأوامر التي تم تمريرها في.
ولكن كما رأيتم السلسلة، argv هو في الواقع مجموعة السلسلة.
حتى انها في الواقع ليس صحيحا حتى الآن، ولكن في قيصر نريد للتعامل مع الأعداد الصحيحة.
لحسن الحظ، هناك وظيفة خلقت لنا أن الواقع يمكن تحويل سلسلة إلى عدد صحيح.
أيضا هنا نحن لا نتعامل مع إدخال المستخدم حيث اننا مما حدا بهم
لإدخال المفتاح هنا ل، لذلك لا يمكننا في الواقع reprompt ويقول:
"أوه، أعطني آخر صحيحا، ويقول، لو كان غير صالح."
ولكننا ما زلنا بحاجة للتأكد من الاستخدام الصحيح.
في قيصر ويسمح فقط لأنها لتمرير في 1 العدد،
وذلك لديهم لتشغيل / قيصر ثم عليهم أن أعطيك رقما.
لذلك يجب أن يكون argc عدد معين.
ماذا يكون الرقم الذي إذا كان لديهم لتمرير لك / قيصر ثم مفتاح؟
ما هو argc؟ >> [طالب] (2). >> الثانية. بالضبط.
لذلك كنت ترغب في التأكد من أن argc هو 2.
وإلا فإنك ترفض أساسا لتشغيل البرنامج.
في الرئيسية انها وظيفة الباحث الرئيسي أن يقول،
حتى ذلك الحين ونحن دائما في الممارسة الجيدة 0 عودة في نهاية برنامج ناجح.
حتى إذا، ويقول، أنها تعطي لك 3 سائط سطر الأوامر بدلا من 2
أو أعطيك 1، على سبيل المثال، ثم ما عليك القيام به هو فأنت تريد أن تحقق لهذا
والعودة ثم 1 قائلا: لا، لا أستطيع المضي قدما في هذا البرنامج.
[طالب] يمكن لا يكون هناك مساحة في النص. عفوا >>؟
[طالب] يمكن لا يكون هناك مساحة في النص الذي تحاول تشفير.
آه!
من حيث النص الذي نحاول تشفير، التي تأتي في الواقع في وقت لاحق
عندما نعطي ذلك النص.
حتى الآن نحن مجرد قبول كوسائط الأمر أن العدد الفعلي،
التحول الفعلي لتشفير قيصر.
[طالب] لماذا تحتاج 2 بدلا من argc فقط 1؟ هناك بالتأكيد 1 عدد.
الحق. السبب في أننا بحاجة 2 للargc بدلا من 1
لأن عند تشغيل برنامج ويقول / أو قيصر. / مرحبا،
كما أن تعول فعلا وسيطة سطر الأوامر.
ثم يأخذ ذلك بالفعل (1) وحتى ذلك الحين نحن إدخال 1 إضافية.
لذلك كنت في الواقع إدخال سلسلة في وسيطة سطر الأوامر.
ما تريد القيام به، لأننا نريد قيصر للتعامل مع عدد صحيح،
لذلك يمكنك استخدام هذه الوظيفة atoi.
وأساسا، يمكنك تمرير في سلسلة وبعد ذلك سيعود بك عدد صحيح
اذا كان من الممكن لجعل هذه السلسلة إلى عدد صحيح.
تذكر الآن عندما نتعامل مع الأشياء printf أو GetString، من هذا القبيل،
ندرج المكتبات التي تعتبر خاصة بالنسبة لنا.
حتى في بداية نبدأ مع شيء علامة التجزئة I / O، ح، ومعيار من هذا القبيل.
حسنا، ليست ضمن atoi واحدة من تلك المكتبات،
وذلك ما يتعين علينا القيام به هو أننا يجب أن تتضمن مكتبة المناسب لذلك.
أذكر ذلك مرة أخرى إلى 1 حيث تجول ناقشت وظيفة اليدوي.
اكتب لك رجل في محطة الخاص بك، ثم يليه اسم وظيفة.
وهكذا فإن ذلك إظهار قائمة كاملة من استخدامه،
ولكن كذلك سوف إحضار الذي ينتمي إلى مكتبة.
لذلك سأترك لكم أن لاستخدام وظيفة atoi مع دليل
ومعرفة أي مكتبة تحتاج إلى تضمين لتكون قادرة على استخدام وظيفة atoi.
لذلك نحن قد حصلت على مفتاح والآن يتعلق الأمر الحصول على نص عادي،
والواقع أن ذلك سيكون إدخال المستخدم حيث يمكنك الأوامر.
تعاملنا مع GetInt وGetFloat، وهكذا وعلى نفس المنوال
ونحن في طريقنا إلى أن التعامل مع GetString.
لكن في هذه الحالة نحن لسنا بحاجة للقيام بأي تفعل حين أو أثناء حلقات للتحقق.
سوف تعطي بالتأكيد GetString لنا سلسلة،
ونحن في طريقنا لتشفير كل ما يعطينا المستخدم.
لذلك يمكنك أن نفترض أن كل هذه السلاسل المستخدم إدخالها صحيحة.
كبيرة.
حتى مرة واحدة ثم كنت قد حصلت على مفتاح مرة واحدة وكنت قد حصلت على النص،
الآن ما تبقى هو لديك لشفر يحول الى شفرة والغير مشفرة.
فقط لتغطية أكثر من لغة بسرعة، وعادي هو ما يمنحك المستخدم،
والنص المشفر هو ما يعود لهم.
حتى السلاسل، لتكون قادرا على الذهاب من خلال الرسالة فعلا الرسالة
لأن لدينا لتحويل كل حرف،
ونحن نفهم أن سلاسل، إذا كنا نوع من قشر طبقة الظهر،
نرى انهم حقا مجرد قائمة من الأحرف.
أحد يأتي بعد الآخر.
وحتى نتمكن من علاج سلاسل كصفائف لأنها صفائف من الأحرف.
لذلك نقول لديك سلسلة اسمه النص،
وضمن هذا النص متغير يتم تخزين هذه هي CS50.
ثم النص في الفهرس 0 T سيكون رأس المال، ويكون الفهرس 1 ساعة، الخ.
ثم مع المصفوفات، في المثال argc في args.c،
رأينا أن علينا أن تكرار عبر مجموعة
وذلك كان علينا أن تكرار من ط = 0 حتى أنا أقل من الطول.
لذلك نحن بحاجة إلى طريقة لمعرفة ما طول سلسلة لدينا
إذا نحن في طريقنا للتكرار أكثر من ذلك.
مرة أخرى لحسن الحظ، هناك وظيفة هناك بالنسبة لنا، على الرغم من CS50 في وقت لاحق يوم
عليك أن تكون بالتأكيد قادرة على تنفيذ وظيفة جعل الخاصة بك
يمكن أن حساب طول سلسلة.
لكن في الوقت الراهن نحن في طريقنا للاستخدام طول السلسلة، لذلك التوابع strlen.
يمكنك تمرير في سلسلة، وبعد ذلك سيعود لك الباحث الذي يمثل طول السلسلة الخاص بك.
دعونا ننظر إلى مثال لكيفية قد تكون قادرة على تكرار عبر كل حرف في سلسلة
وتفعل شيئا مع ذلك.
ما نريد القيام به هو تكرار عبر كل حرف من السلسلة،
وما نريد أن نفعله هو أننا طباعة عودة كل شخصية 1 في موعد أقصاه 1
إلا أن نضيف شيئا لأنها المقبل.
لذلك دعونا نبدأ مع لحلقة. كثافة العمليات ط = 0.
ونحن في طريقنا لترك مساحة للشرط.
نريد تكرار حتى نصل إلى نهاية السلسلة، أليس كذلك؟
ثم ماذا في ذلك وظيفة يعطينا طول السلسلة؟
[رد الطالب غير مسموع]
هذا هو طول وسيطات سطر الأوامر.
ولكن لسلسلة نريد استخدام دالة التي يعطينا طول السلسلة.
ذلك أن طول السلسلة.
وهكذا ثم لديك لتمرير في سلسلة إليها.
فإنه يحتاج إلى معرفة ما يحتاج إلى سلسلة حساب طول.
حتى ذلك الحين في هذه الحالة نتعامل مع سلسلة ق.
كبيرة.
حتى ذلك الحين ما نريد القيام به، دعونا printf.
الآن، ونحن نريد للتعامل مع الأحرف. نحن نريد لطباعة كل حرف على حدة.
عندما تريد ذلك لطباعة عدد عشري، يمكنك استخدام العنصر النائب مثل F٪.
مع الباحث يمكنك استخدام د٪.
وعلى نحو مماثل لذلك، مع استخدام حرف C٪ ليقول انا ذاهب الى أن طباعة حرف
يتم تخزينها داخل هذا متغير.
لذلك لدينا هذا، ودعونا نضيف فترة ومسافة إليها.
أي حرف هل نستخدم؟
ونحن في طريقنا إلى استخدام كل ما نحن في حرف من السلسلة.
حتى ذلك الحين ونحن في طريقنا إلى استخدام شيء مع السلسلة،
ولكننا نريد أن يتم الوصول إلى حرف معين هناك.
حتى إذا هو مجرد سلسلة صفيف، ثم كيف يمكننا الوصول إلى عناصر المصفوفات؟
لدينا هذه الأقواس المربعة، ثم نضع المؤشر في هناك.
لذلك لدينا بين قوسين معقوفين. فهرسنا في هذه الحالة يمكننا فقط استخدام ط. بالضبط.
حتى هنا نقوله نحن في طريقنا إلى أن الطباعة حرف تليها نقطة ومسافة،
وهذا الطابع سيكون الرسالة في ليالي إيث سلسلة لدينا.
انا فقط لحفظ ذلك. حسنا.
الآن انا ذاهب لتشغيل طول السلسلة.
لذلك كان علينا سلسلة دعا OMG، والآن لمزيد من التأكيد على ذلك.
وبالمثل، دعنا نقول أننا نريد فعلا للحصول على سلسلة من المستخدم.
كيف يمكن لنا أن نفعل ذلك؟
من قبل، كيف نحصل على كثافة العمليات؟
قلنا GetInt، أليس كذلك؟ ولكن هذا ليس الباحث، لذلك دعونا GetString.
دعونا جعل طول السلسلة. هنا لم نكن إدخال الأوامر محددة.
لذلك أنا لا أعرف.
انا ذاهب الى وضع اسمي في ذلك وهنا يمكنني القيام به ثم واحدة من تلك الأشياء
حيث كنت تعيين كلمة كل حرف أو شيء من هذا القبيل. بارد.
ذلك أن طول السلسلة.
لذلك نعود لقيصر.
لدينا عدد قليل من الأدوات على كيفية تكرار عبر سلسلة،
كيف يمكننا الوصول إلى كل عنصر على حدة.
حتى الآن يمكن أن نعود إلى البرنامج.
كما ذكرت من قبل، في الجدول ASCII، أفضل صديق،
وأنت تسير لمعرفة الأرقام التي ترتبط مع كل حرف.
لذلك أقول هنا نص عادي لدينا هو أنا بالدوار!
ثم كل واحد من هذه الشخصيات ستكون لدينا عدد وقيمة ASCII المرتبطة به،
حتى الفاصلة العليا، وحتى الفضاء، حتى علامة التعجب،
لذلك عليك أن ترغب في الاحتفاظ في الاعتبار.
أقول ذلك لدينا مفتاح أن المستخدم المدرجة في بهم سيطة سطر الأوامر هو 6.
وهذا يعني الحرف الأول ل، وهو الأول الذي يمثله 73،
تريد العودة إليها مهما كانت الرسالة يمثله قيمة ASCII من 73 + 6.
في هذه الحالة من شأنه أن يكون 79.
الآن نريد أن نذهب إلى الحرف التالي.
لذلك فإن القادم في مؤشر 1 من عادي تكون الفاصلة العليا.
ولكن تذكر أننا نريد فقط لشفر يحول الى شفرة الحروف.
لذلك نحن نريد أن نتأكد من أن يبقى الفاصلة العليا في الواقع نفسه،
أننا لا تتغير مهما من 39 إلى 45 هو.
ونحن نريد أن نحافظ عليها والفاصلة العليا.
لذلك نحن نريد أن نتذكر أن شفر يحول الى شفرة فقط رسائل
لأننا جميعا نريد من الرموز الأخرى أن تبقى بدون تغيير في برنامجنا.
وشيء آخر أن ما نريده هو الحفاظ على رأس المال.
لذلك عندما يكون لديك حرف كبير، ينبغي أن تبقى بمثابة كبيرة.
يجب أن تبقى كما Lowercases صغيرة.
وحتى بعض الوظائف المفيدة لتكون قادرة على التعامل مع الرسائل تشفر فقط
والحفاظ على الحفاظ على رأس المال من الأشياء
هو وظائف islower isalpha، isupper.
وبالتالي فإن هذه هي وظائف التي ترجع لك قيمة منطقية.
في الأساس، صحيحة أو خاطئة. هل هذا كبيرة؟ هذا هو أبجدية رقمية؟
هذا هو رسالة، أساسا.
حتى هنا هي 3 أمثلة عن كيف سيكون استخدام تلك الوظيفة.
في الأساس، هل يمكن اختبار ما إذا كانت القيمة عاد اليكم من أن الوظيفة هي صحيحة أو خاطئة
على أساس أن المدخلات.
إما لا تفعل شيئا والشفرات شفر يحول الى شفرة او تأكد من أنها كبيرة، الخ.
[طالب] هل يمكن ان توضح فقط تلك أكثر من ذلك بقليل، وكيف تستخدمها؟ نعم >>، لعلى يقين.
إذا كان الأمر كذلك فإننا ننظر إلى الوراء، وهنا لدينا رأس المال الأول، أليس كذلك؟
لذلك نحن نعلم أن يذهب إلى I يا لأنني + 6 هو O.
ولكننا نريد أن نتأكد من أن هذا هو O ستكون عاصمة O.
ذلك أساسا، وهذا هو النوع من الذهاب الى تغيير مساهمتنا.
لذلك فمن سواء الكبيرة أم لا سوف نوع من تغيير الطريقة التي نتعامل معها.
ثم حتى إذا نستخدم الدالة على ذلك isupper مؤشر خاص،
isupper ذلك ("I")، وترجع لنا صحيحا، حتى نعرف أنه من العلوي.
حتى ذلك الحين بناء على ذلك، في وقت لاحق سوف نذهب إلى صيغة
التي سوف تكون تستخدم لنقل الأشياء في قيصر،
حتى ذلك الحين أساسا، وهناك ستكون صيغة مختلفة قليلا اذا كان الكبيرة
بدلا من أحرف صغيرة. معنى؟
نعم. لا تقلق.
تحدثت قليلا حول إضافة 6 إلى بريد إلكتروني، والتي لا تجعل تماما معنى
إلا أننا عندما نفهم أن نوع من هذه الأحرف
هي نوع من تبادل مع أعداد صحيحة.
ما نقوم به هو أننا نوع من الصب استخدام الضمني.
سوف نذهب إلى صب قليلا في وقت لاحق حيث كنت تأخذ قيمة وأنت تحويلها إلى نوع مختلف
مما كان عليه في الأصل.
ولكن مع هذا pset سوف نكون قادرين على استخدام نوع من الشخصيات بالتبادل
وقيمها صحيحا المقابلة.
حتى إذا كنت ببساطة يغلف شخصية مع اقتباسات من واحدة فقط،
ثم عليك أن تكون قادرا على العمل مع مع الأعداد الصحيحة، والتعامل معها كعدد.
وبالتالي فإن رأس المال C يتصل إلى 67. و صغيرة تتعلق إلى 102.
مرة أخرى، إذا كنت تريد أن تعرف هذه القيم، والنظر في الجدول الخاص بك ASCII.
لذلك دعونا الخوض في بعض الأمثلة على كيف يمكن أن تكون قادرة على طرح وإضافة،
كيف يمكنك فعلا العمل حقا مع هذه الشخصيات، واستخدامها بالتبادل.
أقول إن ASCIIMath هو الذهاب الى حساب إضافة حرف إلى عدد صحيح
ومن ثم يعرض الحرف الناتجة فضلا عن القيمة الناتجة ASCII.
وحتى هنا أنا أقول - we'll صفقة مع هذا الجزء في وقت لاحق -
ولكن في الأساس، أنا أقول أن المستخدم يجب أن أقول ASCIIMath تشغيل جنبا إلى جنب مع مفتاح،
وأنا أقول أن هذا المفتاح سيكون عدد
التي نحن في طريقنا لإضافة هذه الشخصية.
لذلك تلاحظ هنا أنه منذ اطالبهم مفتاح،
منذ اطالبهم انهم إعطائي 1 شيء،
أريد فقط لقبول / asciimath ومفتاح.
لذلك أنا ذاهب لمطالبة argc يساوي 2.
إذا لم تكن كذلك، ثم انا ذاهب الى العودة (1) والخروج من البرنامج سوف.
لذلك أنا أقول المفتاح لن يكون سطر الأوامر الأولى حجة،
انها سوف تكون ثانية واحدة، وكما ترون هنا،
انا ذاهب الى تحويل ذلك إلى عدد صحيح.
ثم أنا ذاهب لتعيين حرف R لتكون.
تلاحظ أن هذا النوع من لجنة حقوق الإنسان هو في الواقع المتغير عدد صحيح.
الطريقة التي أنا قادرة على استخدام R كعدد هي التغليف مع هذه الاقتباسات واحد.
ذلك لدعم بياننا printf حيث لدينا عنصر نائب عن حرف
وبعد ذلك نائبا لعدد صحيح،
ويمثل الطابع من قبل مركز حقوق الإنسان، وعدد صحيح هو المفتاح.
وحتى ذلك الحين ونحن في طريقنا إلى نتيجة في إضافة 2 معا.
لذلك نحن في طريقنا لإضافة + R مهما كانت المفتاح هو،
ثم ونحن في طريقنا لطباعة نتيجة لذلك.
لذلك دعونا تجعل asciimath. انها حتى الآن، لذلك دعونا فقط تشغيل asciimath.
أوه، ولكن انظر، لا تفعل أي شيء لأننا لم تعط في الواقع مفتاح.
لذلك عندما عاد لتوه 1، وظيفتنا الرئيسية، عاد لتوه لنا.
ثم دعونا حتى تمر في مفتاح. للشخص أن تعطيني رقم. >> [طالب] (4).
4. حسنا.
زيادة بنسبة 4 ص حتى يتم الانتقال إلى تعطينا الخامس، والتي تتطابق مع قيمة ASCII من 118.
ثم لذلك النوع من المنطقي أن -
في الواقع، يمكن أن أطلب منكم، ماذا كنت تعتقد أن قيمة ASCII من البحث هو إذا ص + 4 هو 118؟
ثم نعم، هو ص 114.
إذا كان الأمر كذلك كنت تبحث على الطاولة ثم ASCII، والمؤكد، سترى أن يتم تمثيل بنسبة 114 ص.
حتى الآن أن نعرف أننا يمكن أن تضيف إلى أحرف صحيحة، وهذا يبدو بسيطا جدا.
ونحن في طريقنا لمجرد تكرار عبر سلسلة كما رأينا في مثال من قبل.
سوف نتحقق ما اذا كان بريد إلكتروني.
إذا كان، ثم تحول ذلك سنقوم بأي والمفتاح هو.
بسيطة جدا، إلا عندما تحصل على مثل هذا،
ترى أن Z، ممثلة 122، ثم سوف تعطيك أحرف مختلفة.
نريد فعلا للبقاء ضمن الأبجدية لدينا، أليس كذلك؟
لذلك نحن بحاجة لمعرفة طريقة ما لنوع من الالتفاف حولها.
عندما تصل إلى زيد، وترغب في زيادة عدد معينة،
كنت لا تريد أن تذهب إلى ما وراء الباب الأبجدية ASCII؛
تريد العودة التفاف على طول الطريق إلى A.
ولكن نأخذ في الاعتبار الحفاظ كنت لا تزال القضية.
لذلك يمكن معرفة أن الرسائل لم تصبح الرموز
تماما مثل رموز لن يتم تغيير أيضا.
في الماضي كنت pset بالتأكيد لم تكن في حاجة إلى،
ولكن كان خيار لتنفيذ pset الخاص الجشع باستخدام الدالة معامل.
ولكن الآن ونحن في طريقنا إلى الواقع تحتاج إلى استخدام معامل،
لذلك دعونا نذهب قليلا فقط أكثر من هذا قليلا.
أساسا، عندما يكون لديك X Y مودولو، والتي تمنحك ما تبقى من X Y مقسوما.
وهنا بعض الأمثلة هنا. لدينا 27٪ 15.
في الأساس، وعندما تقوم بطرح 15 من 27 مرات عدد ممكن من دون الحصول على السلبية
ثم تحصل على 12 خلفها.
ولهذا النوع من مثل الرياضيات في سياق، ولكن كيف يمكننا فعلا استخدام هذا؟
انها سوف تكون مفيدة لwrapover لدينا.
لهذا، دعنا نقول فقط طلبت منكم جميعا أن تقسيمها إلى 3 مجموعات.
في بعض الأحيان القيام بذلك في مجموعات وشيء من هذا القبيل.
يقول فقلت له: "حسنا، أريد منكم جميعا أن يمكن تقسيمها إلى 3."
كيف يمكنك أن تفعل ذلك؟
[رد الطالب غير مسموع] نعم، بالضبط. عد من. حسنا.
دعونا نفعل ذلك فعلا. هل تريد أن تبدأ؟
[عد من الطلاب] 1، 2، 3، 4.
ولكن تذكر ... >> [طالب] أوه، آسف.
وهذا نقطة جيدة حقا.
قلت 4، لكننا نريد أن نقول في الواقع كنت 1 لأننا نريد فقط 3 مجموعات.
حتى ذلك الحين، كيف - لا، هذا مثال جيد حقا لثم كيف يمكن القول 1؟
ما هي العلاقة بين 4 و 1؟
كذلك، 4 وزارة الدفاع 3 هو 1.
لذلك إذا كنت لا تزال، هل هو 2.
لذلك لدينا 1، 2، 3، 1، 2.
مرة أخرى، وكنت في الواقع الشخص 5. كيف يمكنك أن تعرف أن أقول 2 بدلا من 5؟
كنت اقول 5 MOD 3 هو 2.
أريد أن أرى كم عدد مجموعات من 3 وخلفها، ثم أمر الذي صباحا I.
وحتى ذلك الحين إذا واصلنا على طول غرفة كاملة،
ثم سوف نرى أننا دائما تطبيق في الواقع وظيفة وزارة الدفاع لأنفسنا
لنوع من الاعتماد قبالة.
وهذا هو أكثر نوع من مثال ملموس عن كيفية قد تستخدم مودولو
لأنني متأكد قد ذهب معظمنا ربما من خلال هذه العملية
حيث كان لدينا لحساب من.
أي أسئلة حول مودولو؟
سيكون من المهم جدا لفهم المفاهيم من هذا،
لذلك أريد أن تأكد يا رفاق فهم.
[طالب] إذا لم يكن هناك ما تبقى، وأنها لا تعطيك العدد الفعلي؟
إذا كان أحد أول 3 منهم فعلت، لكان قد منحها لهم ما كانوا في الواقع،
أم أنه قد أعطاهم [غير مسموع] >> هذا سؤال جيد.
عندما لا يكون هناك ما تبقى لمودولو - حتى يقول لديك 6 وزارة الدفاع 3 -
الذي يعطي في الواقع كنت مرة أخرى 0.
سوف نتحدث عن ذلك قليلا في وقت لاحق.
أوه نعم، على سبيل المثال، 3rd شخص - 3 وزارة الدفاع 3 هو في الواقع 0 ولكن قالت 3.
ولهذا النوع من الصيد مثل الداخلية، على سبيل المثال،
مثل حسنا، إذا هو 0 وزارة الدفاع ثم أنا ذاهب ليكون 3rd شخص.
ولكن سوف نصل إلى نوع من الطريقة التي قد ترغب في التعامل مع ما 0 هو في وقت لاحق.
حتى الآن لدينا نحو ما وسيلة لرسم خرائط زيد على الرسالة الحق.
حتى الآن لقد مررنا هذه الأمثلة،
ونحن نرى كيف النوع من العمل قد قيصر.
ترى الحروف الهجائية 2 ثم تراهم التحول.
لذلك دعونا نحاول والتعبير عن ذلك من حيث الصيغة.
وتعطى هذه الصيغة في الواقع لك في المواصفات،
ولكن دعونا نوع من نظرة من خلال ما يعني كل متغير.
نتيجة لدينا نهاية ستكون في النص المشفر.
لذلك هذا يقول أن الحرف من النص المشفر إيث
سوف تتوافق مع الطابع إيث من عادي.
من المنطقي أن لأننا نريد أن يكون دائما بطانة هذه الامور.
لذلك سيكون من الطابع إيث من ك بالإضافة إلى النص المشفر، وهو أمر أساسي لدينا -
من المنطقي أن - ومن ثم لدينا هذا وزارة الدفاع 26.
أذكر مرة عندما كان لدينا زيد
لم نكن نريد ان نصل الى الحرف، لذلك أردنا أن وزارة الدفاع أنه
ويلتف حول نوع من الأبجدية.
بعد زيد كنت ستذهب الى أ، ب، ج، د، حتى حصلت لك العدد الصحيح.
لذلك نعرف ان زيد، إذا + 6، من شأنه أن يعطي لنا و لأنه بعد زيد يأتي أ، ب، ج، د، ه، و.
لذلك دعونا نتذكر اننا نعرف على وجه اليقين أن زيد + 6 سوف تعطينا F.
في القيم ASCII، Z هو 122 و F هو 102.
لذلك علينا أن نجد طريقة ما لجعل لدينا قيصر الصيغة تعطينا 102
بعد أخذ في 122.
إذا كان الأمر كذلك نطبق هذه الصيغة فقط، و٪ ('Z' + 6) 26، الذي يعطي فعلا لك 24
لأن 122 + 6 هو 128؛ 128 26٪ يعطي لك 24 المتبقية.
ولكن هذا لا يعني حقا و. وهذا بالتأكيد ليس 102.
وهذا أيضا لا حرف في الأبجدية 6.
من الواضح جدا، ونحن بحاجة إلى طريقة ما لهذا التغيير والتبديل قليلا قليلا.
من حيث الأبجدية العادية، ونحن نعلم أن Z هو حرف F 26 وهي 6.
ولكننا في علوم الكمبيوتر، لذلك نحن ذاهبون الى مؤشر في 0.
حتى ذلك الحين بدلا من كونها Z رقم 26، ونحن في طريقنا لذلك يقول عدد ال 25
لأن هو 0.
حتى الآن دعونا تطبيق هذه الصيغة.
لدينا Z ممثلة بنسبة 6 + 25، والتي تعطيك 31.
وزارة الدفاع 26 و 31 يعطيك 5 كما على الباقي.
هذا الكمال لأننا نعلم أن F هو حرف في الأبجدية 5.
ولكن لا يزال من غير واو، أليس كذلك؟ لا يزال من غير 102.
حتى ذلك الحين لهذا pset، سوف يكون تحديا في محاولة لمعرفة العلاقة
بين تحويل بين هذه القيم ASCII والفهرس الأبجدي.
أساسا، ما سوف تريد أن تفعل، وتريد أن تبدأ مع القيم ASCII،
ولكن بعد ذلك كنت ترغب في ترجمة بطريقة ما إلى الفهرس الأبجدي
ثم حساب ما ينبغي أن يكون خطاب - في الأساس، ما هو مؤشر على الأبجدي
من الطابع الشفرات - ترجمة بعد ذلك أن العودة إلى القيم ASCII.
حتى إذا كنت جلد خارج الجدول الخاص بك ASCII، ثم حاول إيجاد والعلاقات بين، ويقول، 102 و 5
أو 122 و 25.
حصلنا من لدينا مفتاح وسيطات سطر الأوامر، لقد حصلنا على نص عادي،
لقد مشفر نحن عليه.
الآن كل ما لم يقم القيام به هو طباعته.
يمكننا القيام بذلك عدة طرق مختلفة.
ما يمكن القيام به هو طباعة الواقع ونحن نمضي على طول.
ونحن iterate عبر الشخصيات في السلسلة،
يمكننا ببساطة طباعة فقط الحق في ذلك الحين عندما نحسب ذلك.
بدلا من ذلك، يمكنك تخزين أيضا في مجموعة ولها مجموعة من الشخصيات
وفي نهاية ذلك تكرار عبر مجموعة كاملة وطباعته.
بحيث يكون لديك اثنين من الخيارات المتاحة لذلك.
وتذكر أن ج٪ ستكون العنصر النائب لطباعة حرف.
هناك لذلك لدينا قيصر، والآن ننتقل إلى Vigenere،
التي هي مشابهة جدا لقيصر ولكن فقط قليلا أكثر تعقيدا.
أساسا حتى مع Vigenere وكنت على وشك أن يمر في كلمة رئيسية.
وذلك بدلا من عدد، وأنت تسير أن يكون سلسلة،
وحتى يحدث ليكون بمثابة الكلمة الرئيسية.
ثم، كالعادة، وأنت تسير في الحصول على موجه عن سلسلة من المستخدم
وشفر يحول الى شفرة ثم ثم منحهم عودة النص المشفر.
وذلك قلت، انها تشبه الى حد بعيد قيصر، باستثناء بدلا من تحويل عدد معين من قبل،
العدد سيرتفع لتغيير الواقع في كل مرة من حرف إلى حرف.
لتمثيل هذا العدد الفعلي للتحول، انه يمثلها الحروف لوحة المفاتيح.
إذا كان الأمر كذلك تدخلها في التحول من، على سبيل المثال، ثم التي تتوافق مع التحول من 0.
لذلك فمن العودة مرة أخرى إلى الفهرس الأبجدي.
ما قد يكون مفيدا إذا كنت ترى أن نتعامل مع الواقع قيم ASCII
وكذلك الرسائل، وكذلك الفهرس الأبجدي،
ربما تجد أو جعل الجدول الخاص بك ASCII الخاصة التي تظهر الفهرس الأبجدي من 0 إلى 25،
A إلى Z، وقيم ASCII بحيث يمكنك رؤية نوع من العلاقة
ويرسم ومحاولة العثور على بعض النقوش.
وبالمثل، إذا كنت قد تحولت على سبيل المثال بعض من و -
وهذا هو إما صغيرة أو كبيرة و - ثم التي من شأنها أن تتوافق مع 5.
نحن جيدة حتى الآن؟
صيغة Vigenere يختلف قليلا.
في الأساس، وترى أنه من مثل قيصر،
إلا ك بدلا من مجرد لدينا ك ي مؤشر.
لاحظ أننا لم تكن تستخدم أساسا لأنني، وطول الكلمة
ليس بالضرورة طول النص المشفر لدينا.
وسوف يكون هذا أكثر وضوحا قليلا عندما نرى مثال لدي قليلا في وقت لاحق.
أساسا، إذا قمت بتشغيل البرنامج مع كلمة رئيسية من ohai،
ثم وهذا يعني أن في كل مرة، ohai سيكون التحول الخاص بك.
ذلك اعتمادا على ما كنت في موقف كلماتك الرئيسية،
وأنت تسير لتحويل النص المشفر الطابع الخاص بك عن طريق بعض هذا المبلغ.
مرة أخرى، تماما مثل قيصر، ونحن نريد أن نتأكد من أننا الحفاظ على رأس المال من الأشياء
ونحن الرسائل شفر يحول الى شفرة فقط، وليس حرفا أو مسافات.
حتى ننظر إلى قيصر على الوظائف التي قد تكون استخدمت،
الطريقة التي قررت كيفية تحويل الأشياء، وتطبيق ذلك على البرنامج الخاص بك هنا.
لذلك دعونا تعيين ذلك.
لدينا نص عادي بعد أن حصلنا على من المستخدم من GetString
أقول هذا ... هو CS50!
ثم لدينا كلمة رئيسية من ohai.
أول 4 أحرف بسيطة جدا.
ونحن نعلم أن T سوف يتم نقل بواسطة س،
ثم ح سوف يتم نقل بواسطة ح، ط سوف يتم نقل من قبل.
هنا ترى أن يمثل 0،
حتى ذلك الحين قيمة النهائية هي في الواقع مجرد الرسالة نفسها كما كانت من قبل.
ثم يتم إزاحة S من أنا.
ولكن بعد ذلك لديك هذه الفترات هنا.
نحن لا نريد لشفر يحول الى شفرة أنه حتى ذلك الحين لم نغير أي شيء من قبل
وطباعة للتو فترة دون تغيير.
[طالب] أنا لا أفهم كيف تعرف أن تحول ذلك - أين أنت - >> أوه، آسف.
في الجزء العلوي هنا ترى أن سطر الأوامر ohai الحجة هنا،
أن سيكون الكلمة.
وذلك أساسا، كنت ركوب الدراجات على الأحرف في الكلمة.
[طالب] لذلك يا هو على وشك أن يتحول هو نفسه -
ذلك س يقابل عدد معين في الأبجدية.
[طالب] الحق. ولكن اين لك الجزء CS50 من؟
اه. هذا في GetString حيث كنت مثل، "أعطني سلسلة لترميز".
[طالب] انهم ذاهبون لتعطيك هذه الحجة إلى التحول من
وبعد ذلك سوف تسأل عن سلسلة الخاص بك أولا. >> نعم.
حتى عندما تشغيل البرنامج، انهم ذاهبون الى تضمين الكلمة
في حججهم سطر الأوامر عند تشغيلها عليه.
ثم مرة واحدة كنت قد تحققت أن ما منحه في الواقع كنت 1 و لا أكثر، وليس أقل،
ثم كنت تريد الذهاب لتدفعهم للسلسلة، يقول: "أعطني السلسلة."
حتى ذلك حيث في هذه الحالة انهم أعطاك هذا ... هو CS50!
حتى ذلك الحين كنت تريد الذهاب لاستخدام هذا ohai واستخدام وتكرار عبر.
تلاحظ أن أكثر من هنا نحن تخطي تشفير فترات،
ولكن من حيث موقفنا لohai، المرحلة التالية استخدمنا س.
في هذه الحالة انها قليلا من الصعب أن نرى لأن هذا هو 4،
لذلك دعونا مواصلة قليلا. مجرد عصا معي هنا.
ثم لدينا ط وق، التي تترجم بعد ذلك يا وح التوالي.
ثم لدينا الفضاء، وحتى ذلك الحين ونحن نعلم أننا لن شفر يحول الى شفرة المسافات.
ولكن لاحظ أن بدلا من الذهاب إلى هنا في هذا المكان الصحيح،
نحن تشفير من قبل - وأنا لا أعرف ما إذا كان يمكنك أن ترى أن - هنا.
حتى انها ليست مثلك محددة سلفا في الواقع، ويقول، يا غني هنا، ح يذهب هنا،
ويذهب هنا، وأنا هنا يذهب، س، ح، أ، ط، س، ح، أ، ط أنت لا تفعل ذلك.
كنت فقط تحول وضعك في الكلمة
عندما تعلم ان كنت في طريقها فعلا لتكون تشفير رسالة الفعلية.
هل هذا النوع من معنى؟
حسنا.
فقط حتى بعض التذكير.
تريد التأكد من أنك تقدم فقط إلى الحرف التالي في الكلمة الرئيسية
إذا كان الحرف في نص عادي الخاص بك هو رسالة.
لذلك نقول نحن في س.
نلاحظ أن الحرف التالي، ومؤشر الأول من نص عادي، هو رقم، على سبيل المثال.
ثم نحن لا تقدم ي، ومؤشر لالكلمات الرئيسية، حتى نصل إلى رسالة أخرى.
مرة أخرى، وتريد أيضا للتأكد من أن كنت ملفوف إلى بداية الكلمة
عندما كنت في نهاية ذلك.
إذا كنت ترى هنا نحن في الأول، واحدة المقبل يجب أن يكون س.
لذلك أنت تريد أن تجد طريقة ما لتكون قادرة على الالتفاف إلى بداية الكلمة الرئيسية
في كل مرة أن تصل إلى نهاية.
ومرة أخرى كان الأمر كذلك، ما هو نوع من المشغل مفيد في هذه الحالة لالتفاف حولها؟
كما هو الحال في عد قبالة سبيل المثال.
[طالب] وعلامة في المئة. نعم >>، علامة النسبة المئوية، التي هي مودولو.
لذلك سوف تكون في متناول اليدين مودولو هنا عندما تريد التفاف على المؤشر في ohai الخاص بك.
ومجرد تلميح سريع: حاول أن تفكر في التفاف على الكلمة قليلا قبالة مثل العد،
حيث إذا كان هناك 3 مجموعات، والشخص 4،
وكان عددهم 4 قال انهم وزارة الدفاع 3، التي كانت 1.
وذلك في محاولة والتفكير في الأمر على هذا النحو.
كما رأيتم في الصيغة، حيثما كان لديك CI ثم بي ولكن بعد ذلك كج،
تريد التأكد من أنك تتبع تلك.
لا تحتاج أن نسميها أنا، أنت لست بحاجة إلى أن نسميها ي،
ولكنك ترغب في التأكد من أنك تتبع الموقف الذي كنت في نص عادي في الخاص
فضلا عن الموقف الذي كنت في الكلمة الرئيسية في
لأن هؤلاء لن بالضرورة أن تكون هي نفسها.
لا يقتصر الأمر على الكلمة - أنها يمكن أن تكون مختلفة تماما عن طول عادي بك.
أيضا، نص عادي الخاص بك، هناك الأرقام والحروف،
حتى انها ليست الذهاب الى المباراة تماما معا. نعم.
[طالب] هل هناك وظيفة لتغيير الحالة؟
يمكنك تغيير على رأس المال A؟ نعم >>، هناك بالتأكيد.
يمكنك الاختيار من - أعتقد انها toupper، كل كلمة 1.
ولكن عندما كنت في محاولة لأشياء الشفرات والحفاظ على النص،
فمن الأفضل أن يكون أساسا قضايا منفصلة.
اذا كان لالكبيرة، ثم تريد أن تحول هذا
لأنه في الصيغة الخاصة بك، عندما ننظر إلى الوراء كيف علينا أن نوع من الذهاب
بالتبادل بين الطريقة ASCII لتمثيل الأرقام
والفهرس الأبجدي الفعلي، ونحن نريد أن نتأكد من
هناك سيكون نوعا من النمط الذي كنت تريد الذهاب لاستخدامه.
ملاحظة أخرى على نمط، في الواقع.
وأنت تسير لبالتأكيد يكون التعامل مع الأرقام.
ليس محاولة لاستخدام الأرقام السحرية، التي هي مثال للأسلوب.
لذلك نقول لكم تريد في كل مرة شيئا من التحول مثل -
حسنا، لذلك التلميح، جناح آخر هو عندما كنت على وشك أن يتحول شيئا
بمقدار معين، وليس محاولة لتمثيل ذلك من قبل العدد الفعلي
ولكن في محاولة معرفة ما إذا كان نوعا ما، ويمكنك استخدام قيمة ASCII، والتي سوف النوع من أكثر منطقية.
ملاحظة أخرى: لأننا نتعامل مع الصيغ،
على الرغم من أن لديك نوع من TF نعرف ما نمط كنت قد تستخدم،
أفضل لالعينية تعليقاتك لشرح منطق، مثل،
"أنا باستخدام هذا النمط لأن ..." وشرح نوع من نمط بإيجاز في تعليقاتكم.
[كان هذه الإرشادات التفصيلية 2] إذا لم تكن هناك أي أسئلة أخرى، ثم سوف مجرد البقاء هنا لمدة قليلا.
حظا سعيدا مع pset الخاص 2: تشفير وأشكركم على الحضور.
[طالب] شكرا لك. شكرا لك >>.
[وسائل الإعلام مقدمة غير متصل]