[Powered by Google Translate] [القسم 4] [أقل راحة]
[نيت Hardison] [جامعة هارفارد]
[هذا CS50.] [CS50.TV]
>> كل الحق، نرحب مرة أخرى إلى القسم.
في القسم هذا الاسبوع ونحن في طريقنا للقيام زوجين من الأشياء.
ونحن في طريقنا إلى أول مجموعة خلاصة المشكلة 2،
الذي هو مجموعة قيصر المشكلة وVigenère.
ثم ونحن في طريقنا ليغوص في 0 مشاركة مسابقة
وتنفق قليلا من الوقت لتلخيص ما تحدثنا عن
في كل من المحاضرات حتى الآن، وسوف نفعل أيضا بعض المشاكل
من مسابقات العام الماضي.
بهذه الطريقة يا رفاق لديهم طريقة جيدة للتحضير لذلك.
>> للبدء، لقد تمهيد حتى انني زوجين من الحلول الجيدة
لمجموعة المشكلة السابقة، تعيين المشكلة 2، في هذا الفضاء.
إذا كنت ضرب جميع اللاعبين على هذا الرابط،
وإذا قمت بالنقر فوق اسمي وانقر على أول مراجعة
سترى caesar.c، وهو بالضبط ما أنا أبحث في.
دعونا نتحدث عن هذا بسرعة حقا.
هذا هو مجرد حل العينة.
هذا ليس بالضرورة الحل الأمثل.
هناك العديد من الطرق المختلفة لكتابة هذا،
ولكن هناك عدد قليل من الأشياء التي أردت أن أسلط الضوء
أن رأيت كما كنت الدرجات، الأخطاء الشائعة التي أعتقد
هذا الحل يقوم بعمل جيد جدا من التعامل معها.
>> أول هو وجود نوع من تعليق رأس في الأعلى.
على خطوط 1 إلى 7 ترى التفاصيل،
بالضبط ما يقوم به هذا البرنامج.
A معيار الممارسات الجيدة عندما كنت تكتب رمز C
بغض النظر إذا ويرد البرنامج ضمن ملف واحد أو
سواء كان تقسيمه على ملفات متعددة هو أن يكون نوعا من
توجيه تعليق في الأعلى.
وهذا هو أيضا للأشخاص الذين يخرجون وكتابة التعليمات البرمجية في العالم الحقيقي.
هذا هو المكان الذي سوف أضع معلومات حقوق النشر.
يقعون تحت يشمل #.
على السطر 16 هناك هذا تعريف #، والتي سنعود إليها في بت واحد فقط.
ثم مرة واحدة وظيفة يبدأ، يبدأ الرئيسية مرة واحدة،
لأنه قد تم هذا البرنامج الواردة في كل وظيفة واحدة
أول شيء جدا أن يحدث، وهذا هو اصطلاحي جدا ونموذجية من برنامج C
التي تأخذ في سطر الأوامر-الحجج هو أنه يتحقق على الفور
>> لفرز وسيطة، argc.
الحق هنا نرى أن هذا البرنامج يتوقع الحجج بالضبط 2.
تذكر أن هناك الوسيطة الأولى هذا واحد خاص
هذا دائما اسم البرنامج الذي يجري تشغيل،
اسم الملف القابل للتنفيذ.
وهذا ما يفعله ذلك هو أنه يمنع المستخدم من تشغيل البرنامج
مع الحجج أكثر أو أقل.
السبب في أننا نريد للتحقق من هذا الحق بعيدا لأن
لا يمكننا الوصول إلى الواقع هذه المجموعة argv الحق موثوق هنا
حتى لقد بحثنا لنرى كيف كبيرة هو عليه.
>> كان واحدا من الأخطاء الشائعة رأيت الناس سوف تذهب مباشرة في
والمسكة argv [1].
وكانوا الاستيلاء على الحجة الرئيسية من مجموعة والقيام ألف إلى طاء تحقق من ذلك،
ثم انها تريد القيام اختبار لargc فضلا عن الاختبار التالي،
أم لا كان الوسيطة الأولى في الواقع عددا صحيحا في نفس الوقت،
وأن لا يعمل لأنه في حالة عدم وجود الحجج المقدمة
فسوف يكون الاستيلاء على حجة أن ليست هناك أو محاولة للاستيلاء على واحد هو أن لا هناك.
>> والشيء الآخر الكبير الذي يجب أن نلاحظه هو أن
تريد دائما لطباعة نوعا من رسالة الخطأ مفيدة
للمستخدم لتوجيههم.
أنا متأكد من أنك قد قمت جميع برامج التشغيل حيث فجأة تعطل،
وتحصل هذه سخيفة قليلا الحوار التي دفعها ويقول
شيء خفي فظيعة، وربما يعطيك رمز خطأ أو شيء من هذا القبيل
أن لا معنى له.
هذا هو المكان الذي كنت تريد حقا أن تقديم شيء مفيد
وتستهدف المستخدم بحيث عندما يذهبون تشغيله "أوه،" وجه النخيل.
"أنا أعرف بالضبط ما يجب القيام به، وأنا أعرف كيفية إصلاح ذلك".
>> إذا لم يكن لطباعة رسالة، ثم ينتهي بك الأمر الواقع
ترك المستخدم للذهاب دراسة التعليمات البرمجية المصدر
لمعرفة ما حدث من خطأ.
هناك أيضا بعض الأوقات أن عليك استخدام رموز الخطأ المختلفة.
هنا كنا واحد فقط أن أقول كان هناك خطأ،
كان هناك خطأ، كان هناك خطأ.
أكبر برامج، برامج التي تسمى في كثير من الأحيان من قبل برامج أخرى،
سيعود نوعا من رموز الخطأ خاصة في سيناريوهات مختلفة
للاتصال برمجيا ما كنت على خلاف ذلك
مجرد استخدام رسالة لطيفة الإنجليزية لل.
بارد.
ونحن نعمل باستمرار، يمكنك مشاهدة سحب من نحن الرئيسية.
نحن اختبار لمعرفة إذا كان مفتاح تناسبها.
نحصل على رسالة من المستخدم.
السبب في أننا نفعل ذلك في هذا الوقت القيام حلقة، وهذا هو الشيء الذي نحن سوف تغطي
في قليلا قليلا، ولكن اتضح أنه إذا قمت بكتابة السيطرة D
عندما تحصل على هذا GetString بسرعة في محطة
ما هو في الواقع لا أن يرسل حرف خاص
إلى البرنامج.
انه دعا لELF أو حرف نهاية الملف.
وفي هذه الحالة، سوف يكون سلسلة لدينا رسالة فارغة،
لذلك كان هذا لا شيء بحثنا عنه في المشكلة حددت لنفسها.
>> ولكن ونحن نمضي على، والآن بعد أن بدأنا الحديث عن مؤشرات
وتخصيص ذاكرة ديناميكية على كومة،
التحقق من وجود فارغة كلما كان لديك وظيفة التي قد
العودة فارغة كقيمة هو الشيء الذي عليك أن ترغب في الحصول في العادة من القيام.
هذا هو في المقام الأول هنا للتوضيح.
ولكن عندما تفعل انظر GetString في المستقبل،
لذلك من مشكلة تعيين 4 على، فأنت تريد أن تضع ذلك في الاعتبار.
مرة أخرى، هذه ليست قضية لمشكلة المجموعة 3 إما لأننا لم تغط حتى الآن.
وأخيرا، نصل الى هذا الجزء حيث نصل ​​إلى حلقة التشفير الرئيسي،
وهناك بضعة أشياء يجري هنا.
أولا، نحن تكرار عبر سلسلة الرسالة بالكامل نفسه.
هنا لقد حافظنا الدعوة التوابع strlen في حالة،
فيه عدد من أوضحتم ليست وسيلة رائعة للذهاب.
تبين في هذه الحالة أيضا ليست كبيرة،
ويرجع ذلك جزئيا أننا تعديل محتويات الرسالة نفسها
داخل لحلقة، لذلك إذا كان لدينا رسالة هذا 10 حرفا،
أول مرة أن نبدأ لحلقة التوابع strlen سيعود ماذا؟
10.
>> ولكن إذا كنا ثم تعديل الرسالة، نقول تعديل طابعها 5،
ونلقي في حرف 0 \ 5 في الموقف،
على التكرار اللاحقة سوف التوابع strlen (الرسالة) لن يعود ما فعلته
أول مرة نحن يتحرك،
ولكن بدلا من ذلك فإنه سيعود 5 لأننا ألقوا في ذلك فاصل فارغة،
ويتم تعريف طول السلسلة
من موقف 0 \ ذلك.
في هذه الحالة، وهذا هو وسيلة رائعة للذهاب لأننا تعديله في المكان.
ولكن لاحظت أن هذا هو في الواقع بسيط من المستغرب لتشفير
إذا يمكنك الحصول على الرياضيات الصحيح.
كل ما هو مطلوب هو للتحقق ما إذا كان الحرف الذي كنت تبحث في
هو كبيرة أو صغيرة.
>> السبب ليس لدينا سوى للتحقق من ذلك وليس لدينا للتحقق من
حالة ألفا هي لأن
إذا كان الحرف هو كبيرة أو صغيرة إذا كان
ثم انها بالتأكيد حرف أبجدي،
لأننا لم يكن لديك أرقام الكبيرة والصغيرة.
والشيء الآخر نقوم به وهذا هو صعبة قليلا،
ولقد قمنا تعديل معيار التشفير قيصر الصيغة
التي أعطت نحن في مشكلة مواصفات الموضوعة.
ما هو مختلف هنا هو أننا طرح
في العاصمة حالة الأحرف الكبيرة A، ومن ثم أضفنا العاصمة A
نسخ في في نهاية المطاف.
>> أنا أعرف عدد قليل من كنت قد فعلت ذلك في التعليمات البرمجية.
لم أي من القيام بذلك في العروض الخاصة بك؟
هل هذا. يمكنك شرح هذا ما يفعله، Sahb؟
عن طريق طرح بها، لأنك فعلت وزارة الدفاع مباشرة بعد ذلك،
عليك أن تأخذ بها، لذلك بهذه الطريقة تحصل [السعال] الموقف.
ومن ثم عن طريق إضافته لاحقا تحولت لك أكثر من تلك التي أردت.
نعم، بالضبط.
وقال ما كان Sahb أنه عندما نريد أن نضيف
لدينا رسالة والمفتاح لدينا معا
ومن ثم وزارة الدفاع أن وزارة الدفاع التي كتبها NUM_LETTERS،
إذا كنا لا حجم رسالتنا في نطاق 0-25 المناسبة الأولى،
ثم نحن في نهاية المطاف قد الحصول على عدد غريب حقا
لأن القيم التي نحن نبحث في عندما ننظر إلى رسالة [أنا]،
عندما ننظر إلى الحرف إيث من رسالة النص العادي لدينا،
هو قيمة في مكان ما في هذا النطاق 65 حتي 122
استنادا إلى القيم الكبيرة لASCII A إلى Z صغيرة.
وهكذا عندما كنا زارة الدفاع من قبل 26 أو بواسطة NUM_LETTERS،
منذ أن كان لدينا تعريف # في أعلى يمين هنا حتى،
وهذا سوف يعطينا قيمة هذا في النطاق من 0 إلى 25،
ونحن بحاجة إلى وسيلة لتوسيع نطاق ثم أن ما يصل إلى الوراء
وسهولة الحصول عليها في النطاق ASCII المناسبة.
وأسهل طريقة لذلك هي فقط لتوسيع نطاق كل شيء إلى أسفل
في النطاق من 0 إلى 25 إلى بادئ ذي بدء،
وتحول بعد ذلك كل شيء احتياطي في نهاية المطاف.
>> خطأ آخر شائع أن رأيت الناس هو أن تصل الى
إذا كنت في الواقع لا نفعل هذا التحجيم على الفور
وقمت بإضافة رسالة والمفتاح معا وإضافتها، ويقول،
شار إلى متغير، ومشكلة في ذلك
هو رسالة منذ [أنا] هو عدد كبير نسبيا لتبدأ-
تذكر أنه لا يقل عن 65 اذا كان لأحرف كبيرة
إذا كان لديك مفتاح كبير، ويقول، شيء من هذا القبيل 100،
وقمت بإضافة تلك 2 معا إلى شار وقعت وأنت تسير في الحصول على تجاوز.
وأنت تسير في الحصول على قيمة أكبر من هذا 127،
وهو أكبر قيمة متغير يمكن أن تعقد شار.
مرة أخرى، لهذا السبب كنت تريد أن تفعل هذا النوع من الاشياء لتبدأ.
حصلت على بعض الناس حول هذه الحالة عن طريق القيام على والا اذا واختبار
لمعرفة ما اذا كان تجاوز قبل القيام بذلك،
ولكن بهذه الطريقة يحصل حول ذلك.
ثم طبعت في هذا الحل ونحن من السلسلة بأكملها في نهاية جدا.
أشخاص آخرين تطبع حرف في كل مرة. كلاهما ممتاز.
عند هذه النقطة، هل لديك أي أسئلة الرجال، أي تعليقات حول هذا الموضوع؟
الأشياء التي تحب، وأشياء كنت لا تحب؟
>> كان لي سؤال.
ربما غاب I أثناء تفسيركم، ولكن كيف يفعل هذا البرنامج
تخطي المسافات لربط مفتاح لطول النص؟
هذا هو مجرد قيصر الشفرات. >> أوه، آسف، نعم.
نعم، سنرى ذلك.
في الشفرات قيصر وصلنا حول ذلك بسبب
نحن فقط انقلبت حرفا.
نحن فقط تناوب عليها إذا كانت كبيرة أو صغيرة.
يا رفاق شعور جيد جدا عن هذا؟
لا تتردد في نسخ هذا الوطن، أعتبر،
ذلك لمقارنة ما كتب يا رفاق.
بالتأكيد يشعر حر أن يرسل الأسئلة حول هذا الموضوع أيضا.
ومرة أخرى، ندرك أن الهدف هنا مع مشكلتك يحدد
ليس لتحصل على اللاعبين لكتابة التعليمات البرمجية مثالية لمجموعات مشكلتك.
انها تجربة التعلم. نعم.
>> عودة إلى القيام به أثناء الحلقة، إذا كان يساوي فارغة،
ذلك يعني فقط فارغة لا شيء، فهي مجرد ضرب أدخل؟
فارغة هي قيمة مؤشر خاص،
ونحن نستخدم فارغة عندما نريد أن نقول
لدينا متغير المؤشر الذي يشير إلى أي شيء.
وعادة ذلك فهذا يعني أن هذا المتغير، هذا المتغير رسالة
فارغة، وهنا، لأننا باستخدام CS50 نوع السلسلة الخاصة
ما هو نوع سلسلة CS50؟
هل رأيت ما هو عليه عند ديفيد انسحبت غطاء محرك السيارة في محاضرة؟
انها غير تقليدي، انها مؤشر، أليس كذلك؟
حسنا، نعم. >> انها تشار *.
وهكذا يمكننا حقا استبدال هذا
هنا مع رسالة * شار،
وبالتالي فإن وظيفة GetString، إذا أنها لا تحصل على بنجاح سلسلة من المستخدم،
فإنه لا يمكن تحليل سلسلة، وحالة واحدة في التي لا يمكن تحليل سلسلة
هو إذا كان المستخدم أنواع نهاية حرف الملف، D السيطرة،
وهي ليست شيئا تفعل عادة، ولكن اذا ما حدث ذلك
ثم سوف الدالة بإرجاع قيمة فارغة مثل هذه طريقة للقول
"مهلا، أنا لم تحصل على السلسلة."
ماذا سيحدث إذا لم نضع رسالة = فارغة،
وهو أمر نحن لم تفعل حتى الآن؟
لماذا أن تكون مشكلة هنا؟
لأنني أعرف أن تحدثنا قليلا في محاضرة عن التسرب في الذاكرة.
نعم، دعونا نفعل ذلك، ودعونا نرى ما سيحدث.
>> كان السؤال باسيل ماذا يحدث إذا لم يكن لدينا في الواقع
هذه الرسالة = اختبار فارغة؟
دعونا انتقل لأعلى إلى الأعلى.
يمكنك التعليق الرجال ذلك.
في الواقع، أنا حفظه في المراجعة.
سيكون هذا التنقيح 3.
ما عليك القيام به لتشغيل هذا البرنامج سيكون لديك لفوق هذا الرمز هنا والعتاد حتى،
وسيكون لديك لإضافة وسيطة لها.
سيكون لديك لإعطائه الحجة الرئيسية لأننا نريد أن يمر في وسيطة سطر الأوامر.
هنا أنا ذاهب لاعطائها الرقم 3. أود 3.
التكبير الآن من العودة، تشغيل البرنامج.
انها تعمل، وتجميع، وبناء.
هنا نذهب. انها في انتظار أن تتم مطالبتك.
إذا كنت اكتب في شيء من هذا القبيل حيث لم مرحبا، أن تذهب؟
أوه، استغرق وقتا طويلا برنامجي لتشغيل. كنت jawing لفترة طويلة جدا.
هنا يذهب.
الآن أنا اكتب في مرحبا.
ونحن نرى أنه يرمز بشكل مناسب.
ما يحدث الآن إذا فعلنا GetString موجه للعودة فارغة؟
تذكر، قلت إن فعلنا ذلك عن طريق الضغط على السيطرة D في نفس الوقت.
أنا هنا انتقل لأعلى. سنقوم تشغيله مرة أخرى.
المبنى. هناك تذهب.
الآن عندما ضرب السيطرة D
حصلت على هذا الخط الذي يقول opt/sandbox50/bin/run.sh، خطأ الإنقسام.
لقد رأينا أن يا رفاق من قبل؟
>> [طالب] لماذا لا يوجد عفوا، >>؟
[طالب] لماذا لا يوجد تفريغ الأساسية في هذه الحالة؟
تفريغ الأساسية هي، السؤال هو لماذا لا يوجد تفريغ الأساسية هنا؟
السؤال هو أنه قد يكون هناك، ولكن تفريغ الأساسية هو ملف
المخزن الذي يحصل على القرص الصلب.
في هذه الحالة فقد عطلنا مقالب الأساسية
على الملقم البعيد بحيث أننا لا يخطأ والناس SEG
وبناء طن من مقالب الأساسية.
ولكن قد تحصل على واحد.
مقالب الأساسية هي نوع من الشيء الذي يمكنك تعطيل كثير من الأحيان،
وأحيانا كنت تفعل.
خطأ تجزئة، للإجابة على سؤالك، باسيل،
يقول ان حاولنا الوصول إلى مؤشر
لم يتم تعيين للإشارة إلى أن أي شيء.
تذكر Binky في الفيديو عندما يحاول Binky
انتقل الوصول إلى مؤشر هذا لا يشير إلى أي شيء؟
في هذه الحالة أعتقد من الناحية الفنية المؤشر يشير إلى شيء.
انها تشير الى فارغة، التي هي 0 من الناحية الفنية،
ولكن يعرف أن تكون في وضع القطعة التي لا يمكن الوصول إليه
حسب البرنامج الخاص بك، حتى تحصل على خطأ تجزئة
لأنك غير الوصول إلى الذاكرة هذا في قطعة صالحة
مثل الجزء كومة أو قطعة مكدس أو مقطع البيانات.
بارد.
أي أسئلة أخرى حول قيصر؟
>> دعنا ننتقل. دعونا ننظر في التنقيح 2 بسرعة حقا.
هذا Vigenère.
هنا في Vigenère
سنقوم من خلال المشي هذا واحد بسرعة نظرا لانه، مرة أخرى،
Vigenère وقيصر مماثلة تماما.
تعليق الرأس من قبل،
# تعريف هو قبل لتجنب استخدام هذه الأرقام السحرية.
الشيء الجميل هو يقول كنا نريد للانتقال إلى
أبجدية مختلفة أو شيء من هذا القبيل.
بدلا من الاضطرار للذهاب يدويا تغيير جميع ال 26 في كود
يمكننا تغيير هذا إلى 27 أو إسقاط عليه
إذا كنا باستخدام الحروف الهجائية مختلفة، لغات مختلفة.
مرة أخرى، لقد حصلت على هذا الاختيار من عدد حجة،
وحقا يمكنك أن تأخذ تقريبا هذا كقالب.
ينبغي الى حد كبير كل برنامج تكتب لها،
إذا كان يأخذ سطر الأوامر-الحجج بعض تسلسل خطوط
الذي يقرأ مثل هذا في البداية.
وهذا واحد من الاختبارات التعقل الأول الذي تريد القيام به.
>> هنا ما فعلته هو أننا تأكدنا من أن
وكان الكلمة صحيحة، وهذا هو الاختيار الثاني الذي قمنا به.
لاحظت مرة أخرى أن هذا انفصلنا من argc و 2.
لاحظ أنه في هذه الحالة شيء واحد كان علينا أن نفعل كان بدلا من ذلك
من استخدام لط أردنا للتحقق من صحة السلسلة بأكملها،
ومن أجل ذلك عليك أن تذهب في الواقع حرف بحرف
على السلسلة.
ليس هناك طريقة جيدة للاتصال شيء عليه
لأنه حتى، على سبيل المثال، لكنني لن بإرجاع 0
إذا كان لا يمكن تحليل عدد صحيح، بحيث لا يعمل حتى.
مرة أخرى، رسالة لطيفة تشرح للمستخدم ما حدث بالضبط.
ثم هنا، مرة أخرى، ونحن أيضا التعامل مع الحالة حيث
يقوم المستخدم بكتابة حرف D في السيطرة عشوائي.
>> وكان تشارلوت ثم سؤال في وقت سابق حول كيفية تمكنا من تخطي المسافات
في سلسلة لدينا هنا.
وكان هذا النوع من غرار ما فعلنا مع برنامج ماي سبيس
فعلنا ذلك في الفرع، وعملت هذه الطريقة
هو أننا تعقب عدد الرسائل التي رأيناه.
كما مشينا على مدى سلسلة الرسالة، كما مشينا على حرف بحرف،
تتبعنا المؤشر كجزء من حلقة لدينا، وبعد ذلك تعقب أيضا
عدد الرسائل، بحيث غير أحرف خاصة، غير أرقام، غير البيض الفضاء
أن كنت رأينا في متغير منفصلة.
ومن ثم يعدل هذا الحل المفتاح
للحصول على عدد صحيح المفتاح الفعلي، وأنه يفعل ذلك على الطاير،
قبل ذلك الحق ثم يذهب لتشفير الحرف الرسالة الفعلية.
هناك بعض الحلول التي كانت كبيرة جدا تماما
من شأنها أن تعديل مفتاح يصل عند اختبار لصلاحية المفتاح ل.
بالإضافة إلى التأكد من أن حرف والكلمة الرئيسية
وكان من حرف أبجدي اتضح أيضا أن إلى عدد صحيح
في النطاق من 0 إلى 25 إلى تخطي ثم الاضطرار إلى فعل ذلك في وقت لاحق في هذا لحلقة.
مرة أخرى، تشاهد هنا وهذا هو حقا رمز بالضبط نفس
أن كنا في قيصر في هذه المرحلة.
كنت تفعل الشيء نفسه بالضبط، وبالتالي فإن الخدعة الحقيقية هو معرفة
كيفية تحويل الكلمة إلى عدد صحيح.
>> الشيء الوحيد الذي قمنا به هنا هو أن قليلا كثيفة
هو أننا تتكرر هذه العبارة، أعتقد أنك يمكن أن يطلق عليه،
3 مرات منفصلة على خطوط 58، 59، و 61.
شخص ما يمكن أن يفسر بالضبط ما هذه العبارة لا؟
انها شخصية الوصول، مثل قلته.
نعم، انها (غير مسموع) حرف في الكلمة،
وذلك من عدد من الخطابات ينظر لأنك تتحرك فقط على طول
الكلمة مرة واحدة كنت قد رأيت هذه الرسالة،
بحيث يجري بصورة فعالة لتخطي المسافات وأشياء من هذا القبيل.
نعم، بالضبط.
ثم مرة واحدة كنت قد رأيت فارغة الكلمات الرئيسية التي زارة الدفاع فقط حتى قمت بنقل عودة حولها.
بالضبط. وهذا هو التفسير المثالي.
ما هو كيفن وقال أننا نريد أن الفهرس في الكلمة.
نريد للحصول على حرف num_letters_seen، اذا صح التعبير،
ولكن إذا num_letters_seen يتجاوز طول الكلمة،
الطريقة نعود إلى مجموعة مناسبة هي أننا استخدام مشغل وزارة الدفاع
التفاف حول فعال.
على سبيل المثال، كما هو الحال في المدى القصير، الكلمة الرئيسية لدينا هي لحم الخنزير المقدد،
وانها 5 رسائل طويلة.
ولكن شاهدنا 6 رسائل في نصنا سهل في هذه المرحلة
والمشفرة 6.
ونحن في نهاية المطاف الوصول إلى num_letters_seen،
الذي هو 6، وزارة الدفاع طول الكلمة، 5،
وهكذا لن نحصل على 1، وذلك ما سنقوم به هو أننا سوف
وصول إلى داخل الحرف الأول من الكلمات الرئيسية في تلك المرحلة.
>> حسنا، على أية أسئلة Vigenère
قبل أن ننتقل؟
يا رفاق شعور جيد جدا عن هذا؟
بارد، عظيم.
أريد أن تأكد من أن الرجال يحصلون على فرصة لرؤية رمز
التي نعتقد أنها تبدو جيدة وتتاح لهم الفرصة لنتعلم منها.
هذا وستكون مشاركة سنكون باستخدام المساحات في الوقت الراهن،
ونحن في طريقنا إلى التحول الآن، وانا ذاهب للذهاب إلى cs50.net/lectures
حتى نتمكن من القيام قليلا من مسابقة الاستعراض.
أفضل طريقة أعتقد أن تبدأ في فعل مسابقة الاستعراض
هو أن يأتي إلى هذه الصفحة محاضرات، cs50.net/lectures،
وتحت كل من العناوين الأسبوع، لذلك إذا كنت انظر هنا في أسبوع 0،
أرى أن لدينا قائمة من الموضوعات التي غطينا في أسبوع 0.
>> إذا كان أي من هذه المواضيع يبدو غير مألوف لك
فأنت تريد بالتأكيد للعودة ونظف مذكرات محاضرات، وربما
المقشود حتى من خلال المحاضرات ومشاهدتها مرة أخرى إذا كنت تريد
لالتعود على ما يحدث مع كل واحد من هذه المواضيع.
وبالإضافة إلى ذلك سوف أقول هذا سنة واحدة من الموارد باردة لدينا
هو أن هذه السراويل التي انشأناها، وإذا نظرتم ليلة 0
ليس لدينا كل الموضوعات التي يتم تناولها، ولكن لدينا عدد غير قليل منهم،
بعض من اصعب منها، ومشاهدة ذلك هذه السراويل مرة أخرى
هو وسيلة جيدة للحصول على ما يصل الى سرعة.
على وجه الخصوص، وأنا ذاهب إلى وضعها في المكونات ل3 على القاع، منذ تلك فعلت.
ولكن إذا كنت تعاني من ثنائي، بت، عرافة، وهذا النوع من الاشياء،
ثنائي هو مكان عظيم للبدء.
ASCII هو آخر واحد هذا امر جيد جدا لمشاهدة.
يمكنك حتى مشاهدة لي في سرعة 1.5x إذا أنا ذاهب بطيئة جدا بالنسبة لك.
منذ الاستعراض انها، لا تتردد في القيام بذلك.
>> فقط للبدء سريعا حقا، ونحن في طريقنا للذهاب من خلال زوجين من هذه المشاكل الاختبار
فقط لتنتج بسرعة من خلال هذه.
على سبيل المثال، دعونا ننظر في مشكلة ال 16 التي أنا عندي الحق هنا على اللوح.
ونحن قد حصلت على هذا الحساب التالي في ثنائي،
ونحن نريد أن تظهر أي عمل.
حسنا، انا ذاهب لإعطاء هذه رصاصة واحدة.
يجب عليك متابعة مع الرجال ورقة،
وسوف نفعل ذلك بسرعة حقا.
نريد لأداء الحساب التالي في ثنائي.
أنا عندي 00110010.
وانا ذاهب لإضافة إليها 00110010.
لعباقرة الرياضيات بعد طول في المنزل،
هذا هو ضرب فعال بنسبة 2.
دعونا نبدأ.
ونحن في طريقنا لمتابعة خوارزمية بالإضافة نفسه الذي نقوم به
عندما نضيف الأرقام العشرية معا.
حقا الفرق الوحيد هنا هو أننا حلقة حول العودة
مرة واحدة لدينا 1 + 1 بدلا من مرة واحدة نصل الى 10.
>> إذا بدأنا من اليمين، بسرعة حقا، ما هو الرقم الأول؟
[طالب] 0. >> [نيت H.] 0.
كبيرة، والرقم الثاني؟
[طالب] (1).
[نيت H.] هل هي 1؟ 1 + 1 هو؟
[طالب] 10.
[نيت H.] بالضبط، وذلك ما هو الرقم الصحيح أن أكتب تحت تلك 2 أضيف معا؟
[طالب] 1، 0 أو 0 ثم حمل 1.
[نيت H.] 0 وتحمل 1، بالضبط.
القادم واحد حتى، باسل، كنت.
ما هي الثالثة؟ >> [باسل] 1.
[نيت H.] 1، والكمال. كيفن؟
[كيفن] 0. >> [نيت H.] 0، شارلوت؟
[شارلوت] 0. >> [نيت H.] نعم، وماذا أفعل؟
[طالب] إن 1.
[نيت H.] وماذا أفعل؟ ثم احمل 1.
الكمال، Sahb؟ >> [Sahb] الآن لديك 1.
[نيت H.] وأفعل أي شيء هنا؟
[Sahb] ثم لاحد المقبل لديك 1 لأنك رحلت 1.
[نيت H.] كبيرة، لذلك هنا يمكننا إنهاء عنه.
بارد.
[طالب] 0 + هل 0 = 0؟
0 + 0 = 0.
1 + 1، وقال مثلك، هو 10، أو 1، 0، إلى حد ما.
10 هو تسمية خاطئة لأن لي 10 يعني الرقم 10،
وانها شاءت قيامنا يمثلها في وقت نواجه فيه كتابة هذا التقرير.
نمثلها عدد 2 من 0، 1، وعدد 10 هو مختلفة قليلا.
>> ما هو نوع من لطيفة عن ثنائي هو أن هناك في الحقيقة ليست أن العديد
الحالات تحتاج إلى تعلم.
هناك 0 + 0 = 0، 0 + 1 = 1،
1 + 1 0، والقيام بعد ذلك 1،
ثم يمكنك ان ترى هنا على العمود الثالث من اليمين
كان لدينا هذا 1، 1، و 1.
و 1 + 1 + 1 هو 1،
وكنت تحمل آخر 1.
عندما كنت تفعل بالإضافة إلى ذلك ثنائي، بسيطة جدا.
كنت أفعل أكثر زوجين من هذه إلى التعقل تحقق أنفسكم
قبل أن تذهب لأن هذا هو في
ربما ما سنرى في هذه المسابقة.
الآن دعونا نفعل هذا واحد القادم أيضا.
دعونا نفعل المشكلة 17.
ونحن في طريقنا لتحويل رقم ثنائي إلى عشري التالية.
لقد حصلت على 10100111001.
تذكر في الفيديو الثنائية التي فعلت
مشيت من خلال زوجين من الأمثلة، وأظهر لي كيف
كل شيء يعمل عندما كنت أفعل ذلك في العشرية.
عندما كنت تعمل في التمثيل العشري اعتقد اننا
في هذه المرحلة من حياتنا بطلاقة حتى في أن
فإنه من السهل جدا للتعتيم على اليات كيف تعمل في الواقع.
>> ولكن للقيام خلاصة سريعة، إذا كان لدي عدد 137
يعني حقا ومرة ​​أخرى، وهذا هو في التمثيل العشري
عدد 137 في العشرية يعني أن لدي 1 × 3 × 100 + 10 + 7 × 1.
هذا هو كل شيء البقاء على الشاشة.
ثم إذا نظرت إلى هذه الأرقام هنا،
100، 10 و 1، ترى أنهم في الواقع كل القوى من 10.
I ² دينا 10، 10 ¹، و 10 إلى الصفر.
لدينا نوع من الشيء مماثلة في ثنائي،
إلا أن لدينا قاعدة، كما نسميها، هو 2 بدلا من 10.
هذه 10S التي كتبت إلى هنا في الأسفل،
هذا ² 10، 10 ¹، 10 إلى 10، صفر هو قاعدتنا،
والأس، 0، 1، أو 2،
فهذا يعني ضمنا من موقف للأرقام في الرقم الذي نكتب.
1، إذا كان لنا أن ننظر في الأمر، وهذا 1 هو في موقف 2.
ال 3 في الموضع 1، و7 هو في موقف 0.
هذه هي الطريقة نحصل على الأسس المختلفة أدناه للحصول على قواعدنا.
>> بعد كل هذا الواقع، we'll، أنت تعرف لماذا؟
سنفعل-أين لي التراجع عن زر تذهب؟
هناك تذهب.
أنا أحب هذا الشيء التراجع.
بعد هذا أعتقد بالنسبة لي على الأقل
أسهل طريقة لبدء تحويل رقم ثنائي
أو عدد عشري حيث القاعدة هي 16
وليس 10 أو 2 هو المضي قدما والكتابة خارج
القواعد والأسس لكافة الأرقام في رقم هاتفي ثنائي في الأعلى.
إذا بدأنا من اليسار إلى اليمين مرة أخرى،
وهو نوع من الحدس،
سوف تتغير إلى الأسود هنا، لدينا 2 إلى الموقف 0،
ثم لدينا 2 ¹، 2 ²،
ثم 2 إلى 3، 2 إلى 4، 2 إلى 5، 6،
7، 8، 9، و 10.
هذه الأرقام التي كتبتها كلها من الدعاه.
كتبت فقط القواعد هنا في أول 3 فقط لمسافة.
>> عند هذه النقطة انا ذاهب الى المضي قدما وأنا ذاهب فعلا لمحو
الاشياء التي قمنا به في العشرية، إذا هذا ما يرام.
كنت قد حصلت على كل ذلك.
وأولئك منكم مشاهدة على الانترنت أنا متأكد من أن تكون قادرة على ترجيع لي إذا كنت ترغب.
التبديل إلى القلم.
الآن، ماذا يمكننا أن نفعل، إذا يا رفاق لا ترقى تماما إلى سرعة على قدراتك على 2،
هذا باردة تماما.
يحدث ذلك. وأنا أفهم.
كان لي مرة واحدة في مقابلة عمل حيث قيل لي أنني يجب أن تعرف كل القوى من 2
من خلال 2 إلى 30.
لم يكن وظيفة وصلت.
على أي حال، يمكنك المضي قدما والرجال تفعل الرياضيات هنا،
ولكن مع ثنائي لا يجعل حقا المعنى،
وكما أنه لا معنى مع العشرية أو الست عشرية سواء،
لتفعل الرياضيات من حيث لديك الأصفار.
تستطيع أن ترى I ديك 0 هنا، هنا A 0، 0 هنا، 0 هنا، 0 هنا، 0 هنا.
لماذا قد لا معنى لتفعل الرياضيات الفعلية
لحساب الطاقة المناسبة من 2 لهذا الموقف؟
بالضبط، مثل شارلوت قال، سيكون من 0.
كذلك قد توفر على نفسك الوقت إذا حساب القوى من 2 الدعوى ليست متينة.
في هذه الحالة نحن بحاجة فقط لحساب ذلك لمدة 2 إلى ال 0 التي هي-؟
[طالب] (1).
[نيت H.] 1، 2 إلى 3 التي،؟
[طالب] (8). >> [نيت H.] (8).
2 إلى 4؟
[طالب] (2). أنا آسف، 1.
[نيت H.] 2 إلى 4 هو 16، بالضبط.
2 إلى 5، كيفن؟ >> 32.
[نيت H.] 32، 2 إلى 8؟
[طالب] 32 × 8، 256.
[نيت H.] الكمال.
و2 إلى 10؟
[طالب] 1024.
[نيت H.] نعم، 1024.
>> مرة واحدة لدينا هذه الأرقام يمكننا تلخيص كل منهم ما يصل.
وهذا هو المكان الذي من المهم حقا أن تفعل بضعة أشياء.
واحد هو الذهاب والتحقق من بطء العمل الخاص بك.
يمكن أن أقول لكم أن هناك 1 في نهاية هذا العدد،
لذلك ينبغي أن أحصل على عدد فردي بالتأكيد نتيجة بلدي،
لأن جميع تلك هي آخر سيكون حتى أرقام
نظرا لأنه من رقم ثنائي.
والشيء الآخر القيام به هو إذا كنت تحصل على هذه النقطة في الاختبار
وكنت قد كتبت بها إلى هذا الحد
وكنت نفاد الوقت
النظر في عدد من النقاط التي تستحق هذه المشكلة.
هذه المشكلة، كما ترون، إذا كنت الوجه مرة أخرى إلى جهاز الكمبيوتر المحمول بسرعة حقا،
هذه المشكلة الجدير 2 نقطة، لذلك ليست هذه هي نوع من إضافة
يجب أن يمر إذا كنت حقا ضغطت لك على الوقت.
ولكن سوف نتحول إلى جهاز آي باد، وسوف تذهب من خلال ذلك بسرعة حقا.
>> أود القيام الأرقام الصغيرة أولا
لأنني وجدت أن أسهل.
I مثل 32 و 8 لأنها تسير جنبا الى جنب بسهولة جدا، وحصلنا على 50.
16 و 1 يحصل 17.
هناك نحصل على 57،
ومن ثم يمكننا أن نفعل ما تبقى من هذا، حتى نتمكن من القيام 57، 156.
هيا.
الرجل، حسنا، دعونا نرى.
كان لدينا 57، 256، و 1024.
عند هذه النقطة، فما استقاموا لكم فاستقيموا بدلا اذهبوا من خلال.
ليس لدي أدنى فكرة. ولست بحاجة لقراءة بوضوح على هذا.
7، 6، و 4، وتحصل على 17.
1، 5، 5، 2، 13.
ثم نحصل على 3، ومن ثم نحصل على 1.
1337.
بيضة عيد الفصح، أي شخص؟
أي شخص التعرف على هذا الرقم؟
كريس يعترف الرقم. ماذا يعني ذلك، كريس؟
[كريس] ليت.
ليت، لذلك إذا نظرت إلى هذا، يبدو ليت.
القراصنة الاشياء. احترس من هذا النوع من الاشياء على التجديد النصفي أو الاصعب في العالم، إلى حد ما.
إذا كنت ترى هذا النوع من الاشياء وكنت أتساءل كنت "هوه"
قد يعني ذلك في الواقع شيئا.
لا أعرف. ديفيد يحب وضعه فيه.
انها وسيلة جيدة لسلامة العقل التحقق من ذلك.
مثل حسنا، أستطيع أن أرى ما يحدث.
>> هذا الأسبوع 0/Week 1 الاشياء.
إذا كان لنا أن يعود مرة أخرى إلى جهاز الكمبيوتر المحمول لدينا الآن،
تصغير، وبضعة أشياء أخرى.
هناك ASCII، التي كنا نقوم به مع الكثير من مجموعات المشكلة.
هذه الفكرة من رأس المال A. ما هو هذا حقا؟
مع العلم انها صحيح عشري.
65 هي ما لتعيينها في الجدول ASCII،
وهذا بالتالي كيف يمكن للكمبيوتر يكتب عليه،
وهذه هي الطريقة التي كنا الحصول بعيدا مع كتابة الواقع
حرف A العاصمة وشخصية صغيرة على
في بعض هذه الحلول ومجموعات المشكلة التي كنت قد تم القيام.
وقبل بضعة أمور أخرى.
لدينا البيانات، تعبيرات منطقية، والظروف، وأعمدة، والمتغيرات المواضيع.
>> يبدو أن جميع تلك لمعنى بالنسبة للجزء الأكبر؟
بعض من هذه المصطلحات هو غير تقليدي قليلا في بعض الأحيان.
أود أن أفكر في بيان أما بالنسبة للجزء الاكبر شيء أن ينتهي بفاصلة منقوطة.
عبارات مثل X = 7، والذي يحدد متغير،
دعا يفترض X = 7.
يفترض x هو أيضا نوع التي يمكن تخزين عدد 7،
لذلك فمن وكثافة العمليات أو ربما طوف أو قصيرة أو حرف A،
شيء من هذا القبيل.
A التعبير منطقية تستخدم هذه المزدوجة يساوي
والانفجار يساوي أو لا يساوي، أقل من، أكبر من،
أقل من أو يساوي، النوع أن جميع من الاشياء.
الشروط هي البيانات ثم إذا آخر.
وأود أن أذكر أنه لا يمكن لها دون آخر المقابلة إذا.
وبالمثل، لا يمكن لها الا اذا بدون المقابلة إذا.
الحلقات، وأذكر أنواع 3 من حلقات كنا يدق لك في
للزوجين الأخير من أقسام ومجموعات المشكلة.
في حين لم تستخدم عندما كنت الحصول على مدخلات المستخدم،
بينما تستخدم الحلقات حتى شرط معين صحيح،
ثم استخدام تلك الحلقات لإذا كنت بحاجة إلى
تعرف أي تكرار للحلقة انت حاليا فى هو كيف أفكر في ذلك.
أو إذا كنت تفعل لكل حرف في سلسلة أريد أن أفعل شيئا،
لكل عنصر في صفيف أريد أن أفعل شيئا لذلك العنصر.
>> المواضيع والأحداث.
هذه أننا لم تتطرق صراحة بذلك في C،
ولكن تذكر هذا من البداية.
هذا هو مفهوم وجود نصوص مختلفة.
وهذا هو أيضا هذه الفكرة من بث هذا الحدث.
لم بعض الناس لا تستخدم البث في مشاريعها في البداية،
وهو بارد تماما،
ولكن هذه هي 2 طرق مختلفة للتعامل مع هذه القضية الأكبر يسمى التزامن،
وهو كيف يمكن الحصول على برامج لتنفيذ
أو تنفيذ ما يبدو في نفس الوقت؟
مهام مختلفة قيد التشغيل أثناء مهام أخرى تقوم بتشغيل أيضا.
هذه هي الطريقة التي يبدو نظام التشغيل في العمل.
هذا هو السبب على الرغم من ذلك، على سبيل المثال،
لقد حصلت على متصفحي التشغيل، يمكنك أيضا تشغيل I سبوتيفي وتشغيل أغنية.
وهذا أكثر من شيء المفاهيمي لفهم.
وأود أن نلقي نظرة على المواضيع قصيرة
إذا كنت ترغب في معرفة المزيد عن ذلك.
>> دعونا نرى، وأعتقد ربما كانت هناك
مشكلة في هذا الشأن في واحدة من هذه.
مرة أخرى، وأعتقد أن المواضيع والأحداث ليست شيئا أننا سوف تغطي في C
لمجرد انها بشكل ملحوظ أكثر صعوبة مما كانت عليه في سكراتش.
يجب أن لا تقلق بشأن ذلك هناك، ولكن بالتأكيد فهم المفاهيم،
فهم ما يجري.
قبل أن ننتقل، أي أسئلة على ليلة 0 المواد؟
الجميع يشعر جيدة؟
المتغيرات التفاهم وما هو متغير؟
>> الانتقال. الأسبوع 1.
وقبل بضعة أشياء هنا لم يتناولها خاصة
في استعراض وأيضا مسابقة بالضرورة من الأشياء أكثر المفاهيمي للتفكير.
الأول هو هذه الفكرة ما شفرة المصدر، والقائمون على رمز الكائن هي.
أي شخص؟ ريحان.
والكائن رمز-I يعني شفرة المصدر هو ما كنت وضعت رنة،
ورمز الكائن هو ما يضع بها رنة بحيث يتمكن الكمبيوتر من قراءة البرنامج.
بالضبط.
شفرة المصدر هو رمز C التي تكتبها فعليا حتى.
رمز الكائن هو ما تحصل عليه من رنة.
انها 0S و1S في هذا التنسيق الثنائي.
ثم ما يحدث هو عندما يكون لديك مجموعة من الملفات الكائن،
كنت أقول ترجمة مشروع أو برنامج يستخدم عدة ملفات شفرة المصدر،
من الاتفاقية التي تمنح الملف ج. التمديد.
هذا هو السبب لدينا caesar.c، vigenère.c.
إذا كنت تكتب برامج جافا كنت لهم التمديد. جافا.
برامج بيثون يكون التمديد. PY كثير من الأحيان.
>> مرة واحدة لديك عدة ملفات C، يمكنك ترجمة لها.
رنة يبصق كل هذا غير المرغوب فيه ثنائي.
لأن ثم تريد فقط 1 برنامج
لديك رابط رابط كل هذه الملفات معا كائن
في الملف التنفيذي 1.
وهذا هو أيضا ما يحدث عند استخدام مكتبة CS50، على سبيل المثال.
مكتبة CS50 على حد سواء ذلك. ح ملف الرأس
أن تقرأ، أن includecs50.h #.
وبعد ذلك أيضا مكتبة خاصة ملف ثنائي
انها جمعت أن هذا هو 0S و1S،
وأن-L العلم، حتى إذا عدنا إلى فضاءات لدينا، ونحن نتطلع حقا بسرعة
على ما يجري هنا عندما ننظر إلى الأمر رنة لدينا،
ما لدينا هو هذا الملف لدينا شفرة المصدر هنا.
هذه هي مجموعة من الأعلام المترجم.
ثم في النهاية، وهذه الأعلام-L الرابط في
الملفات الثنائية الفعلية لهذه المكتبات 2، مكتبة CS50 ثم مكتبة الرياضيات.
>> فهم الغرض من كل نوع الملفات '
في عملية تجميع شيء سترغب في أن تكون قادرة على
تعطي لمحة على الأقل مستوى عال من.
شفرة المصدر يأتي فيها رمز الكائن يخرج.
ملفات التعليمات البرمجية لكائن ربط معا، وتحصل على جميل، ملف قابل للتنفيذ.
بارد.
وهذا هو أيضا حيث يمكنك الحصول على أخطاء في نقاط متعددة
في عملية التجميع.
هذا هو المكان، على سبيل المثال، إذا كنت تأخذ بها هذه العلامة ربط،
علم CS50، وحذفت في الفراغات أو عندما كنت تشغل التعليمات البرمجية،
هذا هو المكان الذي سوف تحصل على خطأ في مرحلة ربط،
وسوف رابط يقول: "مهلا، أنت تسمى GetString ظيفة
هذا في مكتبة CS50. "
"قلت لي كان في مكتبة CS50، وأنا لا يمكن العثور على رمز لذلك."
حيث ان لديك لربط في، وهذا منفصل
من خطأ المترجم لأن المترجم هو يبحث في بناء الجملة وهذا النوع من الاشياء.
أنه من الجيد أن نعرف ما يحدث عندما.
>> أمور أخرى لمعرفة.
وأود أن أقول لكم بالتأكيد نريد أن نلقي نظرة على المدى القصير على تلبيس الذي قام به الاردن
لفهم ما هي رجات تحت غطاء محرك السيارة،
ما هي أحرف تحت غطاء محرك السيارة.
عندما نتحدث عن ASCII ونحن ننظر في الواقع على طاولة ASCII،
ما الذي يفعل تعطي لنا نظرة تحت غطاء محرك السيارة
في كيفية الكمبيوتر يمثل في الواقع رأس المال وA 7 أرقام
وفاصلة وعلامة استفهام.
لدى الكمبيوتر أيضا بطرق خاصة لتمثيل
الرقم 7 كعدد.
لديه طريقة خاصة لتمثيل الرقم 7 كرقم النقطة العائمة،
وتلك هي مختلفة جدا.
تلبيس هو كيف نقول للكمبيوتر "مهلا، أنا أريد منك أن تحويل
من التمثيل إلى آخر التمثيل. "
لماذا لا نلقي نظرة على ذلك.
>> وأود أن أنتهز أيضا نظرة على المدى القصير على المكتبات وعلى المدى القصير على المجمعين.
تلك الحديث عن عملية تجميع،
ما هو مكتبة، ويذهب أكثر من بعض من هذه الأسئلة التي قد يطلب منك الحصول على.
أسئلة حول المواد 1 أسبوع؟
هل هناك أي المواضيع في هنا أن تبدو شاقة كنت ترغب في تغطية؟
أنا أحاول أن يفجر من خلال أكثر من هذه المواضيع في وقت سابق حتى نتمكن من الوصول إلى
مؤشرات والقيام قليلا من العودية.
الأفكار؟
أي شيء لتغطية؟
حان الوقت لبعض الشوكولاتة ربما؟
يا رفاق تعمل من خلال ذلك.
انا ذاهب للحفاظ على يحتسي القهوة في بلدي.
أسبوع 2.
الكلمة الطيبة، الكلمة الطيبة.
في الأسبوع 2 تحدثنا قليلا المزيد عن وظائف.
>> في مجموعات مشكلة القليلة الأولى لم نكن حقا أية وظائف الكتابة على الإطلاق
وظيفة أخرى غير التي؟
[طالب] الرئيسية. >> الرئيسي، بالضبط.
وهكذا رأينا الأزياء المختلفة التي ترتدي الرئيسية.
هناك واحد الذي يأخذ بدون وسائط،
ونحن نقول فقط في الفراغ بين قوسين،
وبعد ذلك هناك واحدة أخرى حيث أننا لا نريد أن نأخذ سائط سطر الأوامر،
وكما رأينا، حيث ان لديك argc الباحث ومجموعة سلسلة argv
والآن بعد أن قمت أو نتعرض في الواقع أن تكون سلسلة * شار أنه من
ونحن في طريقنا للبدء في كتابة بأنه تشار * argv ثم بين قوسين.
في مجموعة المشكلة 3، رأيت الرجال حفنة من الوظائف،
وأنت تنفذ مجموعة من المهام، رسم، بحث عن، والتدافع.
كانت كلها مكتوبة على النماذج هناك لك.
>> ما أردت أن تتحدث عن وظائف هنا بسرعة حقا
هو أن هناك 3 أجزاء لهم كلما كنت كتابة دالة.
لديك لتحديد نوع الإرجاع للدالة.
لديك لتحديد اسم للدالة، ومن ثم لديك لتحديد
قائمة الوسائط أو قائمة المعلمة.
على سبيل المثال، إذا كان لي أن كتابة دالة لتلخيص مجموعة من الأعداد الصحيحة
ثم يعود لي المبلغ ما يمكن أن يكون نوع عودتي
إذا أردت أن ألخص صحيحة ومن ثم إعادة المبلغ؟
ثم اسم الدالة.
إذا كنت المضي قدما في الكتابة باللون الأخضر، هذا الجزء هو نوع الإرجاع.
هذا الجزء هو اسم.
ثم بين قوسين في
حيث أعطي الحجج،
وغالبا ما يختصر سائط، وتسمى أحيانا params للمعلمات.
وإذا كان لديك واحدة، يمكنك تحديد واحد فقط.
إذا كان لديك عدة يمكنك فصل كل واحد مع فاصلة.
ولكل حجة تعطيه 2 الأشياء التي هي كيفن؟
[كيفن] لديك لإعطاء نوع ومن ثم الاسم.
ثم الاسم، واسم هو الاسم الذي كنت تنوي استخدام
للإشارة إلى أن الحجة داخل الدالة SUM،
داخل الدالة التي كنت تكتب حاليا.
>> لم يكن لديك ل، على سبيل المثال، إذا أنا ذاهب إلى خلاصة القول،
يقول مجموعة من الأعداد الصحيحة، we'll القيام الباحث مجموعة،
وسوف أعطي نفسي بعض الأقواس المتعرجة هناك،
بعد ذلك عندما تمرير صفيف إلى دالة SUM
أمرر في المركز الأول من قائمة الوسيطة.
لكن مجموعة التي أمرر في لا يكون لديك اسم ARR.
آر ستكون كيف أود أن أشير إلى أن هذه الحجة داخل الجسم وظيفة.
والشيء الآخر أننا بحاجة إلى أن تأخذ في الاعتبار،
وهذا يختلف قليلا عن وظائف، ولكن اعتقد انه من نقطة مهمة،
هو أنه في حين C أنا أكتب وظيفة مثل هذه
كيف يمكنني معرفة عدد العناصر في هذه المجموعة؟
هذا هو إلى حد ما من سؤال خدعة.
تحدثنا عن هذا قليلا في القسم الأسبوع الماضي.
كيف يمكنني معرفة عدد العناصر داخل صفيف في C؟
هل هناك طريقة؟
>> تبين أن ليس هناك طريقة لمعرفة.
لديك لتمرير ذلك في حدة.
هناك خدعة التي يمكنك القيام به
إذا كنت في نفس الوظيفة التي أعلنت الصفيف،
وكنت تعمل مع مجموعة المكدس.
ولكن هذا لا تعمل إلا إذا كنت في نفس الوظيفة.
بمجرد تمرير صفيف إلى دالة أخرى أو إذا كنت قد أعلنت مجموعة
وكنت وضعت هذا الصفيف على كومة، كنت قد استخدمت malloc
وهذا النوع من الاشياء، ثم كل الرهانات.
ثم لديك فعلا لتمرير حول
حجة أخرى خاصة أو المعلمة
أقول لك كيف كبيرة الصفيف.
في هذه الحالة، كنت ترغب في استخدام بفواصل أنا آسف، انه سيكون خارج الشاشة هنا،
ويهمني ان تمر في حجة أخرى
والذي يطلق عليه ليون الباحث عن طول.
>> الشيء الوحيد الذي قد يأتي على هذه المسابقة
يطلب منك كتابة أو تنفيذ وظيفة معينة تسمى شيء.
إذا كنا لا تعطيك النموذج، لذلك هذا كل شيء هنا،
وتسمى هذه الفوضى كلها إعلان وظيفة أو وظيفة النموذج الأولي،
هذا هو واحد من أول الأشياء التي سترغب في أسفل الأظافر إذا لم تعطى
لك الحق بعيدا عن هذه المسابقة.
خدعة أخرى تعلمت أن
ويقول نحن لا تعطيك نموذج أولي لوظيفة، ونحن نقول، "يا، كنت قد حصلت على الكتابة."
داخل الأقواس المتعرجة التي لديك على هذه المسابقة
إذا لاحظت أن هناك نوع وتلاحظ عودة لكم أن عودة نوع
هو شيء آخر غير الفراغ، وهو ما يعني أن وظيفة لا يقوم بإرجاع أي شيء،
ثم شيء واحد كنت تريد بالتأكيد القيام به هو كتابة
نوعا من بيان عودة في نهاية جدا من وظيفة.
مقابل ذلك، وفي هذه الحالة، سوف نضع فارغة لأننا نريد أن ملء الفراغ.
ولكن هذا يحصل لك التفكير في الطريق الصحيح حول كيفية أنا ذاهب لتناول هذه المشكلة؟
ويذكرك وأنت تسير لدينا لإرجاع قيمة
إلى الطالب وظيفة.
>> نعم. >> [طالب] هل أسلوب تطبيق في وقت نواجه فيه كتابة التعليمات البرمجية في هذه المسابقة؟
مثل المسافة البادئة وهذا النوع من الأشياء؟ >> [طالب] نعم.
لا، ليس بقدر.
اعتقد ان الكثير من هذا شيء، سنقوم بتوضيح هذه المسابقة على يوم،
ولكن عادة القلق بشأن تتضمن # وهذا النوع من الاشياء، انها نوع من الخارج.
[طالب] هل تحتاج إلى تعليق التعليمات البرمجية المكتوبة بخط اليد؟
هل تحتاج إلى تعليق التعليمات البرمجية المكتوبة بخط اليد؟
التعليق هو دائما جيدة إذا كنت قلقة بشأن الائتمان الجزئي
أو كنت ترغب في التواصل القصد الخاص بك إلى آلة تسوية الأرض.
لكنني، ومرة ​​أخرى، وسوف توضح هذه المسابقة على نفسها ويوم الاختبار،
لكنني لا أعتقد أن سوف تكون هناك حاجة لكتابة التعليقات، لا.
عادة لا، ولكن هذا بالتأكيد نوع من الشيء حيث
يمكنك التواصل القصد الخاص بك، مثل "مهلا، هذا هو المكان الذي أنا ذاهب معها."
وأحيانا يمكن أن تساعد في الائتمان الجزئي.
بارد.
>> ريحان.
[باسل] ما الفرق بين إعلان، ويقول، وكثافة العمليات لانج
في مقابل الحجج أو معلمات يعلن متغير داخل الدالة؟
نجاح باهر، وذهب إلى أسفل القصبة الهوائية القهوة.
[باسل] مثل الأشياء التي نريد أن نضع في الحجج.
نعم، هذا سؤال عظيم.
كيف يمكنك اختيار ما الأشياء التي تريد أن تضع في الحجج
في مقابل ما يجب عليك القيام به الأشياء داخل وظيفة؟
في هذه الحالة نحن شملت كل من هذه كوسائط
لأنهم شيء أن كل من هو ذاهب لاستخدام الدالة SUM
يجب أن تحدد تلك الأشياء.
>> الدالة SUM، مثل تحدثنا عن، لا يوجد لديه وسيلة لمعرفة
كيف كبيرة الصفيف هو الذي تحصل عليه من المتصل به أو من يقوم باستخدام الدالة SUM.
انه ليس لديها وسيلة لمعرفة كيف الكبيرة التي الصفيف.
السبب في أننا تمرير في هذا طول هنا كحجة
لأن هذا شيء ونحن نقول في الأساس المتصل وظيفة،
لمن هو ذاهب الى استخدام الدالة SUM، "مهلا، ليس فقط لديك لتعطينا مجموعة
من رجات، لديك أيضا ليقول لنا كيف كبيرة الصفيف الذي قدمتموه لنا هو. "
[باسل] تلك سيكونان سائط سطر الأوامر؟
لا، وهذه هي الحجج الفعلية التي ستنتقل إلى الدالة.
>> اسمحوا لي أن تفعل صفحة جديدة هنا.
[باسل] يود اسم PASS-
[نيت H.] إذا كان لدي الباحث الرئيسي (الفراغ)،
وانا ذاهب الى وضع في 0 عودتي إلى هنا في الأسفل،
ويقول أريد أن استدعاء الدالة SUM.
أريد أن أقول الباحث س = SUM ()؛
لاستخدام الدالة SUM لدي لتمرير مجموعة في كل من أنني أريد أن نلخص
وطول الصفيف، لذلك هذا هو المكان
على افتراض كان لي مجموعة من رجات،
يقول الباحث numbaz كان لي [] = 1، 2، 3،
نوع الاستخدام التي تصل جملة اخترق هناك حق،
ثم ما يمكن أن نفعله هو باختصار أريد أن تمر في
كل numbaz والرقم 3
لقول الدالة SUM "حسنا، هنا هو مجموعة أريدك أن المبلغ."
"إليك حجمها."
هل هذا معقول؟ هل هذا الإجابة على سؤالك؟
>> في نواح كثيرة هو الحال موازية ما نقوم به مع الرئيسية
عندما يكون لدينا وسيطات سطر الأوامر.
برنامج مثل الشفرات قيصر، على سبيل المثال، هناك حاجة إلى
وسيطات سطر الأوامر لن تكون قادرة على فعل أي شيء.
فإنه لا يعرف كيفية تشفير إذا لم يقولوا ذلك ما مفتاح لاستخدام
أو إذا كنت لم يقولوا ذلك ما كنت تريد سلسلة لتشفير.
المطالبة المدخلات، هذا هو المكان الذي قد حصلت على 2 الآليات المختلفة
لأخذ مدخلات من المستخدم في، لاخذ المعلومات من المستخدم في.
1 تعيين لمشكلة رأينا هذا GetInt، GetString، طريقة GetFloat
من المطالبة المدخلات، وهذا يدعى أن استخدام دفق الإدخال القياسية.
الأمر مختلف قليلا.
انه شيء يمكنك القيام به في وقت واحد بدلا من
عند استدعاء البرنامج، عند بدء تشغيل البرنامج.
وسيطات سطر الأوامر كل المحددة عند بدء تشغيل تشغيل البرنامج.
كنا خلط اثنين من هؤلاء.
عندما نستخدم الحجج إلى وظيفة، انها مثل الكثير من الحجج الرئيسية لسطر الأوامر.
انها عند استدعاء الدالة التي تحتاج إليها ليقولوا ذلك
بالضبط ما يحتاج من أجل أداء مهامها.
آخر شيء جيد أن ننظر إلى وسوف تسمح لك ننظر في الأمر في وقت فراغك،
وتمت تغطية ذلك في هذه المسابقة، وكان هذا المفهوم من نطاق
والمتغيرات المحلية مقابل المتغيرات العالمية.
يدفع إنتباه إلى ذلك.
>> نحن الآن أن الحصول على هذه الاشياء لأخرى،
في الأسبوع 3 بدأنا نتحدث عن البحث والفرز.
البحث والفرز، على الأقل في CS50،
إلى حد كبير مقدمة لبعض من أكثر الأجزاء النظرية لعلوم الكمبيوتر.
مشكلة البحث، فإن مشكلة الفرز
كبيرة، ومشاكل الكنسي.
كيف يمكنك العثور على عدد معين في مجموعة من الأعداد الصحيحة مليارات؟
كيف يمكنك العثور على اسم معين داخل دليل الهاتف
أن يتم تخزينها على الكمبيوتر المحمول؟
وهكذا ونحن نقدم هذه الفكرة من المرات المدى مقارب
لتحديد كم من الوقت حقا، مدى صعوبة هذه المشكلة هي،
متى اتخاذها لحلها.
في، في اعتقادي، 2011 في مسابقة هناك مشكلة أعتقد أن مزايا
تغطي بشكل سريع جدا، والذي هو هذا واحد، مشكلة 12.
O لا، انها أوميغا.
>> نحن هنا نتحدث عن وقت التشغيل أسرع وقت ممكن
لخوارزمية معينة ثم وقت التشغيل أبطأ ممكن.
هذا وأوميغا O هي في الواقع مجرد اختصارات.
انهم اختصارات لقوله الترميزية
مدى السرعة في حالة أفضل وجه ممكن سيتم تشغيل خوارزمية لدينا،
وكيف بطيئة في حالة أسوأ ما يمكن تشغيل أنظمتنا؟
دعونا نفعل اثنين من هذه، وكانت مغطاة أيضا هذه
في الأجل القصير على ترميز مقارب، وأنا في غاية يوصي.
لم جاكسون بعمل جيد حقا.
البحث مع ثنائي، نتحدث عن البحث الثنائية بأنها خوارزمية،
وعادة ما نتحدث عن ذلك من حيث O. لها كبير
ما هو O الكبيرة؟
ما هو وقت التشغيل أبطأ ممكن من البحث الثنائي؟
[طالب] ² N؟
إغلاق، وأنا أعتقد مماثلة لذلك.
انها أسرع كثيرا من ذلك.
[طالب] الثنائية؟ >> نعم، البحث الثنائية.
[طالب] إنه لا يوجد السجل.
تسجيل الدخول N، فماذا يعني تسجيل ن؟
ذلك أنه نصفين كل تكرار.
بالضبط، لذلك في حالة أبطأ ممكن،
ويقول إذا كان لديك مجموعة ومصنفة
من الأعداد الصحيحة مليون وعدد ما تبحث عنه
إما العنصر الأول في الصفيف جدا أو العنصر الأخير جدا في الصفيف.
تذكر، خوارزمية البحث الثنائي يعمل من خلال النظر في عنصر الأوسط،
رؤية اذا كان ذلك المباراة التي كنت تبحث عنها.
إذا كان، ثم كبيرة، وجدت عليه.
>> في حالة أفضل وجه ممكن، ومدى سرعة ثنائي لا تشغيل البحث؟
[الطلاب] 1.
1، وحان الوقت مستمر، كبير O 1. نعم.
[طالب] لدي سؤال. عندما تقول سجل ن، يعني فيما يتعلق قاعدة 2، أليس كذلك؟
نعم، حتى هذا الشيء الآخر.
نقول لا يوجد سجل، واعتقد عندما كنت في المدرسة الثانوية
توليت دائما أن سجل كان الأساس 10.
نعم، لذلك نعم، تسجيل 2، قاعدة عادة ما نستخدمه.
مرة أخرى، يعود إلى بحث ثنائية، إذا كنت تبحث عن إما
العنصر في نهاية جدا أو العنصر في البداية،
لأنك تبدأ في منتصف ثم تجاهل
أيهما 1/2 لا يلبي المعايير التي تبحث عنها،
وتذهب إلى النصف والنصف المقبلة القادمة والنصف القادمة.
إذا أنا في البحث عن أكبر عنصر في صفيف صحيحا مليون
أنا ذاهب إلى النصف على الأكثر من دخول من 1 مليون مرة
وأخيرا قبل أن اختبار ونرى أن العنصر أنا أبحث عن
هو في اكبر أو في أعلى مؤشر للمجموعة،
وسوف تأخذ السجل ن، قم بتسجيل الدخول من 1 مليون مرة.
>> نوع فقاعة.
لا يا رفاق تذكر خوارزمية فرز الفقاعة؟
كيفن، هل يمكن ان تعطيني خلاصة سريعة لما حدث في فقاعة خوارزمية الفرز؟
[كيفن] أساسا أنه يمر كل شيء في القائمة.
فإنه يبحث في الأولين.
إذا كان الأول هو أكبر من ثانية واحدة أنها التبادل لهم.
ثم يقارن الثاني والثالث، ونفس الشيء، التبادل،
الثالث والرابع، على طول الطريق.
سوف أعداد أكبر متابعة حتى النهاية.
وبعد العديد من الحلقات ولكن الانتهاء من ذلك.
بالضبط، لذلك ما هو كيفن وقال أننا سوف مشاهدة أعداد أكبر
فقاعة تصل إلى نهاية الصفيف.
على سبيل المثال، هل تمانع المشي لنا من خلال هذا المثال إذا كان هذا هو مجموعة لدينا؟
[كيفن] عليك اتخاذ 2 و 3.
3 هو أكبر من 2، لذلك كنت مقايضتهم.
[نيت H.] الحق، لذلك نحن مبادلة هذه، وهكذا نحصل على 2، 3، 4، 6، و 9.
[كيفن] ثم قارنت 3 و 6.
3 هو أصغر من 6 سنوات، وتركت لهم،
و 6 و 4، وكنت مقايضتهم لأن 4 أصغر من 6.
[نيت H.] الحق، حتى أحصل على 2، 3، 4، 6، 9.
[كيفن] و 9 أكبر من 6، لذلك كنت اتركها.
وكنت أعود من خلال ذلك مرة أخرى.
>> [نيت H.] أنا فعلت في هذه المرحلة؟ >> [كيفن] رقم
ولماذا أنا لم تفعل في هذه المرحلة؟
لأنه يبدو وكأنه يتم فرز مجموعة بي. أنا أبحث في ذلك.
[كيفن] الذهاب من خلال ذلك مرة أخرى وتأكد من أن هناك مقايضات لا أكثر
قبل أن تتمكن من وقف كامل.
بالضبط، لذلك تحتاج إلى الاستمرار في عملهم من خلال وتأكد من عدم وجود مقايضة
التي يمكن أن تقوم بها في هذه المرحلة.
إلا أنه في الحقيقة مجرد محظوظ، مثل قلته، لقد انتهى الأمر
وجود فقط لجعل 1 بالمرور وكنت قمنا بفرز.
ولكن للقيام بذلك في حالة عامة سيكون لدينا في الواقع القيام بذلك مرارا وتكرارا.
في واقع الأمر، كان هذا مثالا على حالة أفضل وجه ممكن،
رأينا في مثل هذه المشكلة.
رأينا أن ن حالة أفضل وجه ممكن.
ذهبنا من خلال مجموعة الأول 1.
ما هي الحالة أسوأ ما يمكن لهذه الخوارزمية؟
[كيفن] N ².
وماذا تشبه؟ فماذا نظرة مثل مجموعة التي من شأنها أن تأخذ الوقت ن ²؟
[كيفن] [غير مسموع] فرزها.
بالضبط، لذلك إذا كان لي مجموعة 9، 7، 6، 5، 2،
أولا ستطلب في 9 فقاعة على طول الطريق حتى.
بعد 1 التكرار كنت لدينا 7، 6، 5، 2 و 9.
عندئذ يصل فقاعة ال 7، 6، 5، 2، 7، 9، وهلم جرا وهكذا دواليك.
>> كنا يجب أن تمر من خلال مجموعة كاملة n مرة،
ويمكنك الحصول على الواقع قليلا أكثر دقة من هذا
لأنه بمجرد أننا قد انتقلت في 9 كل وسيلة تصل إلى مكانه ممكن مشاركة
ونحن نعلم أننا لا داعي للمقارنة ضد هذا العنصر مرة أخرى.
مرة واحدة نبدأ محتدما حتى ال 7
ونحن نعلم أننا يمكن أن يوقف مرة واحدة في 7 هو الحق قبل ال 9
منذ لقد قارنا بالفعل 9 إلى ذلك.
إذا كنت تفعل ذلك بطريقة ذكية انها ليست حقا، وأنا أعتقد أن الكثير من الوقت.
كنت لن مقارنة جميع ممكن [غير مسموع] تركيبات
في كل مرة تذهب من خلال كل تكرار.
ولكن لا يزال، وعندما نتحدث عن هذا الحد الأعلى نقول أن
كنت تبحث في ن ² مقارنات على طول الطريق من خلال.
>> دعونا نعود، ومنذ بدأنا الحصول على القليل في وقت قصير
وأود أن أقول لكم بالتأكيد يجب ان تذهب من خلال ما تبقى من هذا الجدول،
ملء كل شيء.
اعتقد من الأمثلة. التفكير في أمثلة ملموسة.
هذا مفيد حقا ومفيدة للقيام به.
رسم من ذلك.
هذا هو نوع من الجدول الذي كما تذهب من خلال في علوم الكمبيوتر
يجب أن تبدأ حقا أن تعرف هذه من القلب.
هذه هي أنواع الأسئلة تحصل في المقابلات.
هذه هي أنواع الأشياء التي هي جيدة لمعرفة،
والتفكير في هذه الحالات الحافة، كشف حقا كيفية التفكير
مع العلم أن لفقاعة فرز مجموعة أسوأ ما يمكن
لفرز التي هي واحدة مع هذا في ترتيب عكسي.
>> المؤشرات. دعونا نتحدث قليلا عن المؤشرات.
في الدقائق القليلة الماضية لدينا هنا
أعرف أن هذا شيء مع ملف I / O ما هو جديد إلى حد ما.
عندما نتحدث عن مؤشرات السبب في أننا نريد أن نتحدث عن مؤشرات
لأنه، واحد، عندما كنا نعمل في C
نحن حقا في مستوى منخفض نسبيا بالمقارنة مع لغات البرمجة الحديثة.
نحن فعلا قادرة على التعامل مع المتغيرات في الذاكرة،
معرفة أين كنت في الواقع تقع في غضون RAM لدينا.
مرة كنت قد ذهبت إلى أخذ دروس نظام التشغيل سترى
ان هذا، مرة أخرى، نوع من التجريد.
هذا ليس واقع الحال.
لقد حصلنا على الذاكرة الظاهرية التي يختبئ هذه التفاصيل منا.
>> لكن في الوقت الراهن يمكن أن نفترض أنه عندما يكون لديك برنامج،
على سبيل المثال، عند بدء تشغيل البرنامج الخاص الشفرات قيصر
أنا يعود مرة أخرى الى بلدي باد بسرعة حقا،
أنه في البرنامج منذ البداية، إذا كان لديك، ويقول،
4 غيغا بايت من ذاكرة الوصول العشوائي على جهاز الكمبيوتر المحمول الخاص بك،
الحصول على تعيين جانبا هذه قطعة، ونحن سوف نسمي هذا RAM.
ويبدأ في مكان ونحن في طريقنا للدعوة 0،
وينتهي في مكان أننا سوف ندعو 4 غيغا بايت.
أنا حقا لا يمكن الكتابة. الرجل، واخترق ذلك.
عندما ينفذ البرنامج الخاص بك
نظام التشغيل تقتطع من ذاكرة الوصول العشوائي،
وتحدد شرائح مختلفة لأجزاء مختلفة من البرنامج للعيش فيه.
إلى هنا هذا المجال هو نوع من الحرام.
عندما تذهب أبعد قليلا هنا
كنت قد حصلت فعلا المكان الذي
رمز للحياة البرنامج.
أن الشفرة الثنائية الفعلي، وهذا في الواقع يحصل الملف القابل للتنفيذ تحميلها في الذاكرة
عند تشغيل البرنامج، وأنه يعيش في مقطع التعليمات البرمجية.
وينفذ كبرنامج المعالج يبدو في هذا الجزء من الشفرة
لمعرفة ما هو التعليمة التالية؟
ما هو السطر التالي من التعليمات البرمجية ولست بحاجة لتنفيذ؟
>> هناك أيضا شريحة البيانات، وهذا هو المكان تلك ثوابت السلسلة
الحصول على المخزن الذي كنت تستخدم.
وبعد ذلك أبعد هذا هناك مكان يسمى الكومة.
نحن في الوصول إلى الذاكرة باستخدام malloc هناك،
ومن ثم نحو أعلى جدا من البرنامج
هناك المكدس،
وحيث ان كنا اللعب لأكثر من بداية.
هذه ليست لحجم أو أي شيء.
وهناك الكثير من هذه الآلة التي تعتمد جدا،
يعتمد نظام التشغيل، ولكن هذه هي الطريقة نسبيا الحصول على المقسم الامور.
عند تشغيل البرنامج وقمت بتعريف متغير يسمى X-
أنا ذاهب لرسم مربع آخر في الأسفل، وهذا سيكون RAM أيضا.
وانا ذاهب للنظر.
سنقوم رسم خطوط خشنة للإشارة إلى هذا هو مجرد جزء صغير من ذاكرة الوصول العشوائي
وليس كل من هو أننا نقترب في الأعلى.
>> إذا أعلن متغير عدد صحيح يسمى X،
ثم ما يحصل في الواقع هو رسم الخرائط
التي تم تخزينها في الجدول رمز برنامجي
الذي يربط X اسم لهذه المنطقة من الذاكرة التي قمت رسمها
هنا بين القضبان الرأسية.
إذا كان لدي سطر من التعليمات البرمجية في برنامجي أن يقول X = 7
المعالج يعرف "أوه، حسنا، أنا أعرف أن حياة X في هذا الموقع في الذاكرة."
"انا ذاهب الى المضي قدما في الكتابة ج 7 هناك."
كيف تعرف ما هذا المكان هو في الذاكرة؟
حسنا، انها فعلت كل ما في وقت الترجمة.
المترجم يعتني تخصيص كل واحد من حيث المتغيرات في سبيلنا للذهاب
وخلق رسم الخرائط الخاصة أو الاتصال بدلا النقاط
وبين رمز حيث انه سيكون، اسم متغير
وحيث انه سيكون للعيش في الذاكرة.
ولكن تبين أن نتمكن من الوصول فعلا في برامجنا أيضا.
هذا يحصل عندما المهم أن نبدأ الحديث عن بعض هياكل البيانات،
وهو المفهوم الذي نحن ذاهبون لتقديم وقت لاحق.
>> لكن في الوقت الراهن، ما يمكن أن نعرفه هو أن أستطيع إنشاء مؤشر إلى هذا الموقع، X.
على سبيل المثال، يمكن أن أقوم بإنشاء متغير المؤشر.
عندما نقوم بإنشاء متغير مؤشر نستخدم منهج نجوم.
في هذه الحالة، وهذا يقول أنا ذاهب إلى إنشاء مؤشر إلى int.
انها تماما مثل أي نوع آخر.
اعطيناها متغير مثل Y،
ثم قم بتعيين أنه مساوية نحن العنوان، إلى عنوان.
في هذه الحالة، فإننا يمكن أن يحدد Y للإشارة إلى X
من خلال اتخاذ عنوان X، وهو ما كنا نفعله مع هذا الضم،
ثم قم بتعيين نحن Y للإشارة إلى ذلك.
ما هو هذا الأساس لا إذا نظرنا إلى RAM لدينا
وهذا يخلق متغير مستقل.
انها سوف يطلق عليه Y،
وعندما يكون هذا السطر من التعليمات البرمجية ينفذ
انها في طريقها فعلا لإنشاء مؤشر القليل الذي عادة ما نقوم برسم سهم،
ويحدد Y للإشارة إلى X.
نعم.
[طالب] إذا كانت x هو بالفعل مؤشر، هل يفعل
* الباحث ص = س بدلا من وجود العطف؟
نعم.
إذا كانت x هو بالفعل مؤشر، ثم يمكنك مجموعة 2 مؤشرات مساوية لبعضها البعض،
وفي هذه الحالة سوف لا تشير إلى Y X،
ولكن سيكون إشارة إلى ما يتم الإشارة إلى X.
للأسف، نحن في الخارج من الزمن.
>> ما أود أن أقول في هذه المرحلة، يمكن أن نتحدث عن هذا حاليا،
ولكن أود أن أقول من خلال بدء العمل على هذه المشكلة، رقم 14.
يمكنك ان ترى هناك بالفعل قليلا في شغل لك هنا.
تستطيع أن ترى أنه عندما نعلن 2 المؤشرات، وكثافة العمليات * X Y * و،
وكان لافتا أن لاحظ أن * المقبل لمتغير ما حدث في العام الماضي.
وتبين أن هذا يشبه ما نقوم به هذا العام.
لا يهم أين أنت تكتب * عندما كنت معلنا المؤشر.
ولكن قد كتبت * نحن بجانب نوع
لأن ذلك يجعل من الواضح جدا أن كنت معلنا متغير المؤشر.
يمكنك أن ترى أن الإعلان عن مؤشرات 2 تعطي لنا 2 مربعات.
هنا عندما وضعنا X يساوي malloc
ما هو هذا القول هو وضع جانبا في كومة الذاكرة.
يقع هذا المربع قليلا هنا، هذه الدائرة، على الكومة.
X يتم الإشارة إلى ذلك.
لاحظ أن y لا يزال عدم الإشارة إلى أي شيء.
للحصول على الذاكرة لتخزين رقم 42 إلى X
ونحن نستخدم ما التدوين؟
[طالب] * س = 42.
بالضبط، * س = 42.
وهذا يعني اتباع سهم ورمي 42 في هناك.
هنا حيث وضعنا Y و X لدينا مشيرا إلى X Y.
مرة أخرى، وهذا هو تماما مثل ما قال كيفن حيث أننا تعيين يساوي Y إلى X.
Y هو عدم الإشارة إلى X.
بدلا من ذلك، انها تشير الى ما يتم الإشارة إلى X كذلك.
>> ثم أخيرا في هذا المربع الماضي هناك 2 الأشياء الممكنة التي يمكننا القيام به.
واحد هو أننا يمكن أن نقول * س = 13.
والشيء الآخر هو أننا يمكن أن نقول، أليكس، هل تعرف ماذا يمكن أن نفعل هنا؟
* هل يمكن القول X = 13 OR-
[طالب] هل يمكن أن يقول ما كثافة العمليات.
[نيت H.] إذا كان يشار إلى ذلك متغير الباحث أننا يمكن أن نفعل ذلك.
يمكن أن نقول أيضا * Y = 13 لانهم على حد سواء مشيرا إلى نفس المكان،
حتى نتمكن من استخدام أي متغير للوصول إلى هناك.
نعم. >> [طالب] ما الذي جعلها تبدو وكأنها إذا كنا نقول فقط X الباحث هو 13؟
وأن يعلن متغير جديد يسمى X، والتي لن تنجح.
كنت لدينا لأننا الاصطدام أعلن X ليكون المؤشر هنا.
[طالب] إذا كان لدينا فقط هذا البيان في حد ذاته ما يمكن أن تبدو وكأنها من حيث الدائرة؟
لو كان لدينا X = 13 ثم كنت لدينا مربع، وبدلا من وجود سهم
القادمة من خارج منطقة الجزاء لكنا استدراجه إلى 13 فقط.
[طالب] في المربع. حسنا.
>> شكرا للمشاهدة، وحظا سعيدا في المسابقة 0.
[CS50.TV]