DAVID MALAN: ٹھیک ہے، پھر سے خوش آمدید. یہ CS50 ہے. اس ہفتے سات کے آغاز ہے. تو اس وقت ہو گیا، تو میں ہم نے سوچا ہے ہم کہاں کے ایک بونڈر ٹور دور کو چھوڑ دیا اور اب ہم کہاں جا رہے ہیں. یہ بات یہاں ہو سکتا ہے تو سب سے پہلے میں کچھ غصے کی وجہ سے. لیکن امید ہے کہ، آپ کو شروع کر رہے ہیں یہ یہاں پر کرنا کیا acclimate - ہے جو پوائنٹر، کی نمائندگی کرنے والے اسٹار زیادہ عام آدمی کی شرائط میں صرف کیا،؟ تو یہ ایک ایڈریس ہے. تو اس کا پتہ ہے یاد میں کچھ. اور ہم واپس چھیل تہوں کرنا شروع کر دیا ہفتے کے ایک جوڑے پہلے، چیزیں پسند GetString اور اس جیسے دیگر کام کرتا ہے یہ سب وقت واپس آ گیا ہے طرح یاد میں چیزوں کے پتے، میں سب سے پہلے کردار کا پتہ کچھ ترتیب. تو ہم بھی valgrind متعارف کرایا جس میں آپ اس مسئلہ کے لئے استعمال کرنے کے لئے شروع کریں گے خاص طور پر اگلے کے لئے مقرر مسئلہ کے طور پر اچھی طرح سے قائم کی. اور valgrind ہمارے لئے کیا کرتا ہے؟ یہ میموری لیک کے لئے چیک کرتا ہے، اور یہ بھی میموری کے استعمال کی اطلاع دیں کے لئے چیک کرتا ہے. یہ کچھ امکان کے ساتھ، کا پتہ لگانے کے کر سکتے ہیں اپنے کوڈ میموری چھو جا رہا ہے یہ صرف نہیں ہونا چاہئے. تو ایک لیک ضروری ہے، لیکن آپ تو نہیں کچھ کی حدود سے باہر جانا سرنی، اور آپ کو اصل میں چلانے valgrind اور اس رویے کی حوصلہ افزائی کرتے ہوئے valgrind ہے آپ کے پروگرام میں چل رہا ہے اس کے اندر چل رہا ہے، آپ کو ملے گا اس طرح پیغامات - "باطل کے لکھنا ، کے ایک جوڑے کو یاد ہے جس سائز 4، " ہفتے قبل میں نے غلطی سے تھا کا مطلب ہے کہ بہت دور ایک INT پر پسند ایک سرنی کی حدود سے باہر. اور اس طرح سائز 4 یہاں سائز کا مطلب ہے اس مخصوص INT کی. تو حقیقت میں یقین دہانی لے کہ valgrind کی پیداوار، اس کی شکل، صرف atrocious ہے. یہ گندگی کے ذریعے دیکھنے کے لئے واقعی مشکل ہے دلچسپ معلومات کے لئے. تو کیا ہم یہاں کیا ہے صرف اقتباس ہے سے زیادہ کے جوڑے میں سے کچھ دلچسپ لائنوں. لیکن احساس ہے کہ valgrind کی 80 فیصد پیداوار ایک تھوڑا سا ہونے جا رہا ہے تباہی. بس اس طرح کے نمونوں کے لئے نظر آتے ہیں - حق باطل، باطل، 40 بائٹس پڑھیں اور بلاکس میں سے کچھ تعداد کو یقینی طور پر ہیں اس طرح مطلوبہ الفاظ، کھو دیا. اور کیا آپ کو امید ہے کہ دیکھ لیں گے کچھ ہے کام کیا ٹریس کی قسم غلطی اندر اصل میں ہے یہاں اس صورت میں، کیا قطار میں میرا کوڈ بظاہر غلطی تھی؟ تھا جو memory.c نامی ایک فائل، میں 26 ہم کے ساتھ کھیل رہے تھے مثال کے طور پر وقت. تو یہ malloc میں شاید نہیں ہے. اس کی بجائے اپنے کوڈ میں شاید تھا. تو ہم نے پھر سے یہ دیکھیں گے اور پھر طویل عرصے سے اس سے پہلے. scanf تو، یہ ایک میں آیا ابھی تک فارم کے جوڑے. ہم مختصر طور پر sscanf دیکھا. یہ کچھ کی ایک بڑی تعداد تھی تم اپنے میں dived کوئز کی تیاری. اور scanf اصل میں کیا ہے CS50 لائبریری کے نیچے کا استعمال کرتے ہوئے کیا گیا ہے ترتیب میں کافی عرصے سے ڈاکو صارف کی طرف سے ان پٹ حاصل کرنے کے لئے. مثال کے طور پر، میں CS50 کے منتقل اگر آلات یہاں، ایک مجھے کھول دیں scanf-0.c کہا جاتا ہے کہ مثال کے طور پر آج اور یہ سپر آسان ہے. یہ صرف کوڈ کا ایک چند لائنوں ہے. لیکن اس کا ثبوت ہے کہ کس طرح واقعی getInt اس وقت کے تمام کام کر رہی ہے. لائن 16 میں یہاں اس پروگرام میں، ، میں نے ایک INT کا اعلان ہے کہ نوٹس. تو کوئی اشارہ، جادو کچھ بھی نہیں وہاں صرف ایک INT. پھر لائن 17 میں، میں فوری طور پر ایک بڑی تعداد کے لئے صارف، براہ مہربانی. پھر دیر سے 18 میں، میں یہاں scanf استعمال کرتے ہیں. اور میں نے وضاحت کی، طرح printf کے، میں امید کر رہا ہوں کہ اقتباس فیصد میں unquote. فیصد میں بہت ظاہر ہے، ایک INT پر کرنا. لیکن محسوس کیا دوسرے scanf پر دلیل ہے. تم کس طرح دوسرے بیان کریں گے کوما کے بعد دلیل؟ یہ کیا ہے؟ یہ X کا پتہ ہے. تو اس وجہ سے فراہم کی طرف سے مفید ہے X کے ایڈریس کے ساتھ scanf، کیا کرتا ہے ایسا کرنے کے لئے اس تقریب کو بااختیار بنانے کے؟ نہ صرف وہاں جانے، لیکن یہ بھی کیا کرنا ہے؟ یہ کرنے کے لئے ایک تبدیلی. آپ وہاں جا سکتے ہیں کیونکہ اس طرح کی ہے یاد میں کسی جگہ پر ایک نقشہ کی طرح. اور اتنی دیر تک آپ کی فراہم کردہ کے طور پر scanf، یا اس طرح کے ایک نقشہ، اس کے ساتھ کسی بھی تقریب تقریب وہاں جانے، اور کر سکتے ہیں نہ صرف قیمت کی طرف دیکھو، لیکن یہ بھی کر سکتے ہیں اگر مفید ہے جو اس قیمت کو تبدیل scanf کی زندگی میں مقصد کے لئے ہے خاص طور پر، صارف کی طرف سے ان پٹ کو اسکین کی بورڈ سے. اور F، جیسا فارمیٹ کرنا printf، چ ایک فارمیٹ کرنا آپ کو پرنٹ کرنے کے لئے چاہتے ہیں سٹرنگ. تو میں مختصر، اس لائن 18 صرف کا کہنا ہے کہ، صارف کی جانب سے ایک INT پڑھنے کی کوشش کی بورڈ اور میں، ایکس کے اندر یہ ذخیرہ X میں رہنے کے لئے جو کچھ ہوتا ہے ایڈریس. اور پھر آخر میں، لائن 19 صرف کا کہنا ہے کہ، اس کیس میں INT کے لئے شکریہ،. تو مجھے آگے بڑھو اور اس کے بنانے کے لئے ہیں. تو scanf 0 بناتے ہیں. مجھ سے آگے بڑھو اور اندر زوم چلو میں کے ساتھ جاؤ اور اس کو چلانے گے بندیاں scanf 0 سلیش. نمبر، براہ مہربانی؟ 50. 50 کے لئے شکریہ. تو یہ بہت آسان ہے. اب یہ کیا کر رہی ہے؟ یہ ایک پورے گچرچھی نہیں کر رہی غلطی چیکنگ کی. مثال کے طور پر، میں تعاون نہیں کرتے ہیں تو، اور میں نے ایک بڑی تعداد میں ٹائپ کریں، لیکن نہیں کرتے اس کی بجائے میں "ہیلو" کی طرح کچھ لکھ یہ عجیب سے صرف طرح ہے. چیزوں CS50 کی اور اس طرح ایک لائبریری کچھ کے لئے ہمارے لئے کر دیا گیا ہے وقت ہے کہ reprompting ہے اور reprompting. دوبارہ کوشش جملے یاد cs50.c میں تھا اور یہ کہ اس getInt میں وجہ ہے CS50 لائبریری اصل میں ایک پوری ہے طویل لائنوں کی جتھا، ہم ہیں کیونکہ اس طرح پاگل سامان کے لئے جانچ پڑتال. صارف نہیں دیا ہم سے، اصل میں، ایک INT؟ وہ ہم سے کچھ دے دیا ایک حروف تہجی کے خط کی طرح؟ اگر ایسا ہے تو، ہم پتہ لگانے کے لئے چاہتے ہیں اور یہ کہ ان پر چللاو. لیکن چیزوں کو زیادہ دلچسپ ہو جاؤ یہ اگلے مثال میں. میں scanf-1.c کرنے کے لئے جاتے ہیں، کیا ایک ہے بنیادی طور پر میں تبدیل کر دیا گیا ہے کہ بات یہ اگلے مثال کے طور پر؟ میں، یقینا، چار * استعمال کر رہا ہوں بجائے INT کی. کیونکہ چار * تو یہ،، دلچسپ ہے یاد ہے، صرف سچ میں ہے سٹرنگ کے طور پر ایک ہی بات. تو یہ ہو سکتا ہے جیسے یہ ایک سپر ہے محسوس ہوتا ہے GetString کی سادہ عمل درآمد. لیکن میں واپس پرت کھلی ہے CS50 لائبریری کا، مجھے تو اب اس چار * بلا. تو دیکھتے ہیں، جہاں کہیں بھی ہو، ہم غلط جانا. لائن 17 - میں ایک بار پھر، مجھے کچھ دو، براہ مہربانی کا کہنا ہے کہ اس صورت میں، ایک تار. اور پھر اگلا لائن میں، میں، scanf فون ایک بار پھر، یہ ایک فارمیٹ کوڈ دے، لیکن اس بار فیصد ے. اور پھر اس وقت، میں ہوں یہ بفر دے. اب میں استعمال نہیں کر رہا ہوں، نوٹس ایمپرسینڈ. لیکن کیوں کہ یہاں شاید ٹھیک ہے؟ پہلے ہی بفر کیا ہے کیونکہ؟ یہ پہلے سے ہی ایک پوائنٹر ہے. یہ پہلے سے پتہ ہے. لشکر طیبہ اور اس لفظ مجھے دو "، الجھانے" ہے صرف کے لئے مثال کے طور پر، اس کا فون سادگی. لیکن میں یہ بفر بلایا ہے کیونکہ میں جنرل پروگرامنگ میں، آپ کو ایک ہے تو میموری کا حصہ ہے، جس کے ایک تار واقعی بس، تم اسے ایک بفر فون کر سکتے ہیں ہے. یہ معلومات جمع کرنے کے لئے ایک جگہ ہے. جب یو ٹیوب، جیسی چیزوں کی طرح انہوں نے،، تو بات کرنے بفرن رہے ہیں صرف اس سے بٹس ڈاؤن لوڈ کا مطلب انٹرنیٹ اور ایک میں ان کے محفوظ کرنے کے مقامی سرنی، تو میموری کی ایک مقامی حصہ آپ کے بغیر بعد میں دیکھ سکتے ہیں کہ یہ اچٹیں یا پھانسی تم واپس کھیلتے وقت. تو ایک مسئلہ ہے، اگرچہ یہاں میں scanf بتا رہا ہوں، کیونکہ ایک کی توقع صارف سے سٹرنگ. یہاں کا ایڈریس ہے میموری کا ایک حصہ. وہاں اس سٹرنگ رکھو. کیوں کہ جانے دینا ہے اگرچہ ہمیں مصیبت،؟ وہ کیا ہے؟ میں تک رسائی حاصل کرنے کی اجازت کر رہا ہوں میموری کا وہ حصہ ہے؟ تم جانتی ہو، مجھے پتہ نہیں ہے. بفر initialized کیا گیا ہے کیونکہ کچھ بھی ہے؟ واقعی نہیں. اور اس طرح ہم بلا رہا ہے کیا ہے ردی کی ٹوکری میں ایک قدر جس ایک رسمی لفظ نہیں ہے. یہ صرف ہم کیا بٹس کوئی اندازہ نہیں ہے کا مطلب کہ چار بائٹس کے اندر ہیں میں بفر کے طور پر مختص کر دیا ہے. میں malloc نہیں بلایا ہے. میں ضرور GetString کے لئے نہیں بلایا ہے. تو جو اصل میں کیا ہے جانتا ہے بفر کے اندر؟ اور ابھی تک scanf کہہ آنکھ بند کر کے، وہاں جانے اور صارف ٹائپ جو کچھ بھی رکھ دیا. تو اس کی وجہ سے کرنے کا امکان کیا ہے ہمارے کوڈ میں ہم اسے چلانے کے تو کیا ہوگا؟ شاید ایک segfault. شاید نہیں، لیکن شاید ایک segfault. اور میں کا کہنا ہے کہ ہو سکتا ہے کہ نہیں کیونکہ کبھی کبھی اگر آپ کبھی کبھی کرتے ہیں آپ کو ایک segfault نہیں ملتا. کبھی کبھی آپ کو صرف خوش ہو جاؤ، لیکن اس کے باوجود ہونے جا رہا ہے ہمارے پروگرام میں ایک بگ کی. تو مجھے آگے بڑھو اور اس کے مرتب کرتے ہیں. میں نے اس کے پرانے اسکول طریقے سے کرنے کے لئے جا رہا ہوں. تو بجنا ڈیش 0، scanf-1، scanf-1.c، درج کریں. افوہ، بہت پرانے اسکول. چلو دیکھتے ہیں. میں کہاں چلا گیا؟ اوہ، چار * بفر. اوہ، آپ کا شکریہ - ٹھیک ہے، محفوظ کریں - بہت پرانے اسکول. ٹھیک ہے، یہ ایک وقت ہو گیا ہے. تو میں صرف فائل کے بعد محفوظ کر لیا ہے کہ عارضی طور پر بنانے ایک لمحے پہلے تبدیل کریں. اور اب میں اس کے مرتب کی ہے دستی طور پر بجنا کے ساتھ. اور اب میں آگے بڑھو کرنے جا رہا ہوں اور درج، scanf-1 چلائیں. سلک براہ مہربانی. میں ٹائپ کریں گے "ہیلو." اور اب، یہاں printf، واضح طور سے، جہاں ہے تھوڑا پریشان کن ہے کر سکتے ہیں. یہ اصل میں کرنے کے لئے نہیں جا رہا ہے اس کیس میں segfault. Printf ایک چھوٹی سی خاص ہے کیونکہ یہ عام طور پر استعمال تو سپر ہے بنیادی طور پر printf کر رہا ہے ہمیں حق اور احساس، کہ ایک درست پوائنٹر نہیں ہے. اپنے آپ کو صرف پرنٹ کرنے کے لئے صلی اللہ علیہ وسلم مجھے یہ لینے دو قوسین اتارنا null میں، یہاں تک کہ یہ ضروری نہیں ہے اگرچہ کیا ہم نے خود کو توقع. لہذا ہم آسانی سے ایک دلانا نہیں کر سکتے ہیں یہ واضح طور پر اس کے ساتھ segfault، لیکن میں چاہتا تھا رویے نہیں ہے. بہت آسان حل کیا ہے؟ ٹھیک ہے، scanf-2 میں، مجھے تجویز کرتے ہیں کہ بجائے اس کے کہ اصل میں صرف ایک مختص چار *، مجھے ایک چھوٹی سی کے بارے میں ہوشیار رہنے دو اس، اور مجھے بفر مختص دو 16 حروف کی ایک ہی تسلسل کے طور پر. تو میں نے طریقوں میں سے ایک جوڑے میں ایسا کر سکتے ہیں. میں پوری طرح سے malloc استعمال کر سکتے ہیں. لیکن میں نے دو ہفتے میں واپس جا سکتے ہیں جب میں صرف کے پورے گچرچھی کی ضرورت حروف. یہ صرف ایک سرنی ہے. تو مجھے اس کی بجائے بفر کی وضاحت کرتے ہیں 16 حروف کی ایک سرنی ہو. اور اب، جب میں میں بفر پاس - اور یہ کہ ہم نے ایسا نہیں کیا چیز ہے ہفتے میں دو کے بارے میں بات - لیکن آپ نے ایک سرنی کے طور پر علاج کر سکتے ہیں یہ ایک ایڈریس ہے اگرچہ. ہم نے دیکھا کے طور پر تکنیکی طور پر،، وہ کر رہے ہیں تھوڑا سا مختلف. تم اس کے پاس لیکن اگر scanf برا نہیں لگے گا ایک صف کے نام پر، اس کی وجہ کیا ہمیں بنیادی طور پر ہے کے لئے بجنا کروں گا کے طور پر اس سرنی کے نام کا علاج 16 بائٹس کی حصہ کا ایڈریس. تو یہ بہتر ہے. یہ اب مجھے امید ہے کہ مطلب ہے کہ مندرجہ ذیل کریں. مجھے ایک لمحے کے لئے باہر زوم اور دو ٹھیک مرتب scanf-2، بنانے کے لئے کرتے ہیں. اب مجھے سلیش scanf-2 ملا کرتے ہیں. سلک براہ مہربانی. "ہیلو." اور یہ اس وقت کام کرنے کے لئے لگ رہا تھا. لیکن کسی ایک منظر نامے تجویز کر سکتے ہیں جس میں یہ اب بھی کام نہیں کر سکتے ہیں؟ جی ہاں؟ 16 حروف سے زیادہ طویل کچھ. اور اصل میں، ہم ہو سکتا ہے تھوڑا سا زیادہ عین مطابق. اب تو 15 حروف کچھ، واقعی ہمارے ذہن میں رکھنے کی ضرورت ہے کیونکہ ہم اس الٹا سلیش صفر کی ضرورت ہے لپیٹ سٹرنگ کے آخر میں، جس میں ایک طرف scanf عام طور پر مرضی ہے ہمارے لئے کا خیال رکھو. تو مجھے کچھ اس طرح کرتے ہیں - کبھی کبھی ہم صرف کر سکتے ہیں اس طرح اسے چھوڑ. ٹھیک ہے، تو اب ہم حوصلہ افزائی ہے ہمارے انقطاع غلطی. کیوں؟ میں نے 15 سے زیادہ کرنے کے لئے ٹائپ کیونکہ حروف، اور تاکہ ہم اصل میں ہے چھو یاد ہے کہ میں واقعی میں نہیں ہونا چاہئے. تو کیا واقعی یہاں حل ہے؟ اچھا، ہم ایک طویل سٹرنگ کیا ضرورت ہے تو کیا ہوگا؟ ٹھیک ہے، ہم شاید یہ 32 بائٹس بناتے ہیں. ٹھیک ہے، کیا ہے کہ طویل عرصے سے کافی نہیں ہے تو کیا ہوگا؟ کس طرح کے بارے میں 64 بائٹس؟ کیا ہے کہ طویل عرصے سے کافی نہیں ہے تو کیا ہوگا؟ کس طرح کے بارے میں 128 یا 200 بائٹس؟ کیا واقعی میں یہاں حل ہے عام کیس، ہم میں نہیں جانتے تو صارف کی قسم کے لئے کیا ہو رہا ہے آگے بڑھانے؟ یہ گدا میں ایک بڑا درد کی صرف قسم ایماندار ہو، جس وجہ ہے CS50 لائبریری کے چند درجن لائنوں ہے اجتماعی طور پر عمل درآمد اس کوڈ ہم ایسا نہیں کرتے کہ ایک طرح سے سٹرنگ GetString پیشگی جاننا ضروری ہے کیا صارف کی قسم جا رہا ہے. خاص طور پر، اگر آپ کو واپس دیکھ cs50.c دو ہفتے قبل کی طرف سے، آپ کو نظر آئے گا کہ GetString اصل میں کرتا ہے اس طرح scanf کا استعمال نہیں. بلکہ یہ ایک کردار پڑھتا ہے ایک وقت میں. کیونکہ کے بارے میں ایک اچھی بات ایک کردار پڑھنے ہم کر سکتے ہیں ہے ہمیشہ خود کو اس بات کی ضمانت کم از کم ایک چار ہے. میں نے ابھی لے پھر ایک چار کا اعلان، اور کر سکتے ہیں صرف کرنے کے لئے ان اقدامات پر صحیح معنوں میں بچے ایک وقت میں ایک کریکٹر کو پڑھ کی بورڈ کی طرف سے وقت. اور پھر، تم کس چیز GetString دیکھیں گے کرتا ہے، اس سے باہر چلتا ہے ہر وقت ہے ، میموری کے 16 بائٹس کا کہنا ہے کہ اس کا استعمال کرتا ہے malloc، یا ایک چچیرا بھائی اس کے، پر پرانے کاپی، زیادہ میموری مختص پھر نئے اور داخلے میں میموری کے ساتھ ساتھ،، ایک وقت میں ایک کردار ہو رہی ہے اور یہ کہ ختم جب میموری کا حصہ،، گرپس اسے دور پھینک دے میموری کا ایک بڑا حصہ، پرانی نقل کرتا ہے نئے اور دوہراتا میں. اور اس سے اصل میں حقیقی معنوں میں ایک درد ہے. جتنا آسان کچھ پر عمل درآمد ایک صارف کی طرف سے ان پٹ حاصل کرنے. تو کیا تم scanf استعمال کر سکتے ہیں. آپ دیگر اسی طرح کے کام کرتا ہے استعمال کر سکتے ہیں. اور ایک نصابی کتابوں کی بہت اور آن لائن مثال کے طور پر کرتے ہیں، لیکن وہ سب کے سب ہیں اس طرح کے مسائل کا شکار. اور آخر میں، ایک segfault رہی قسم کی پریشان کن ہے. یہ صارف کے لئے اچھا نہیں ہے. لیکن بدترین صورت میں، کیا کرتا ہے یہ بنیادی طور پر آپ کی ڈال کا خطرہ کوڈ؟ حملے میں کسی قسم کا، ممکنہ طور پر. ہم ایسے ہی ایک حملے کے بارے میں بات کی - اسٹیک overflowing. لیکن عام طور پر، اگر آپ کی اجازت ہو تو اتپرواہ ایک بفر، جیسے ہم نے کیا تھا صرف لکھنے سے پہلے ہفتے کے جوڑے، مزید اسٹیک پر "ہیلو" کے مقابلے میں، آپ واقعی، ممکنہ طور پر، پر قبضہ کر سکتے ہیں کمپیوٹر، یا کم از کم اعداد و شمار کو حاصل ہے کہ آپ کا تعلق نہیں ہے. ہم کیوں اس لئے مختصر میں، یہ ہے ان کی تربیت کے پہیوں. لیکن اب، ہم نے ان کو اتار شروع ہمارے پروگراموں کو اب مزید نہیں کی ضرورت کے طور پر، صارف سے ضروری، ان پٹ. لیکن مسئلہ کی صورت میں، چھ سیٹ آپ ان پٹ کی ایک بہت بڑی سے آئے گا 150 کے ساتھ ڈکشنری فائل کچھ عجیب ہزار الفاظ. تو آپ کے بارے میں فکر کرنے کی ضرورت نہیں رکھا جائے صارف کے صوابدیدی ان پٹ. ہم نے آپ کو کچھ مفروضات دے گا جو کہ فائل کے بارے میں. اشارہ یا scanf پر کوئی سوال یا عام میں صارف ان پٹ؟ ٹھیک ہے، تو ایک میں اس وقت ایک فوری نظر دو ہفتے پہلے سے موضوع پشت بندی. اور یہ کہ ایک struct کے اس تصور تھا. ایسا نہیں ہے کہ - ایک کے اس تصور کیا تھا، جو struct؟ struct ہمارے لئے کیا کیا؟ وضاحت کریں - افسوس ہے؟ ایک متغیر کی قسم کی وضاحت کریں. تو اس طرح کی. ہم اصل میں دو موضوعات کو یکجا کر رہے ہیں. typedef کے ساتھ تو، کہ ہم کر سکتے ہیں یاد ایک کی طرح، ہماری اپنی ایک قسم کا اعلان * کے لئے چار سٹرنگ کی طرح متبادل،. لیکن typedef اور struct کا استعمال کرتے ہوئے، ہم کر سکتے ہیں صحیح معنوں میں ہمارے اپنے اعداد و شمار کے ڈھانچے تشکیل دیں. مثال کے طور پر، میں واپس جانا تو gedit میں یہاں صرف ایک لمحے کے لئے، اور میں آگے بڑھو اور کچھ کی طرح کرتے ہیں، مجھ سے محفوظ کرنے دیں اس کے طور پر، structs.c، کی کہنے دو عارضی طور پر، میں نے ابھی جا رہا ہوں آگے بڑھو اور شامل کرنے کے لئے standardio.h، INT اہم صفر. اور پھر یہاں، میں چاہتا ہوں کہ فرض ذخیرہ ہے کہ ایک پروگرام لکھنے کے لئے ایک سے زیادہ کی طرف سے ایک سے زیادہ طالب علموں کو گھروں، مثال کے طور پر. تو یہ ایک registrarial کی طرح ہے کسی قسم کے ڈیٹا بیس. میں نام کے ایک طالب علم کی ضرورت ہے اگر ایسا ہے تو میں ، چار * نام ایسا کچھ ہو سکتا ہے اور میں ایسا کچھ کروں گا - اصل میں، کی CS50 لائبریری کو استعمال کرنے دو صرف ایک لمحے کے لئے یہ ایک بنانے کے لئے تھوڑا آسان، تو ہم قرضے لے سکتا ہوں کوڈ کی لائنوں کی ان درجنوں. اور لشکر طیبہ صرف یہ آسان رکھنے کے لئے ہے. ہم نے ہی سٹرنگ کرتے رہیں گے اور اب GetString. تو میں نے نام محفوظ کیا جاتا ہے کہ اب دعوی کچھ طالب علم، اور گھر کے صرف متغیر کا استعمال کرتے ہوئے کچھ طالب علم، ہم نے کیا اور ہفتے میں سے ایک میں. کی طرح لیکن اب میں حمایت کرنے کے لئے کرنا چاہتے ہیں لگتا ہے ایک سے زیادہ طالب علموں کو. ٹھیک ہے، تو میری instincts کرنا ہیں سٹرنگ NAME2، GetString، سٹرنگ ہو جاتا ہے house2 GetString ہو جاتا ہے. اور پھر ہماری تیسری طالب علم، NAME3 GetString کرتے ہیں. ٹھیک ہے، تو یہ امید ہے کہ ذکر ہے پاگل کی طرح کے طور پر آپ، اس عمل کو واقعی کبھی نہیں ہے کیونکہ ختم کرنے کے لئے جا رہے ہیں، اور یہ صرف جا رہا ہے میرا کوڈ بھی بدتر نظر اور بھی بدتر اور بدتر. لیکن ہم ہفتے میں دو میں بھی اس کے حل. ہمارے نسبتا صاف حل کیا تھا ہم کے ایک سے زیادہ متغیر تھا ایک ہی اعداد و شمار کے تمام متعلقہ رہے ہیں کی قسم، لیکن ہم اس atrocious گندگی نہیں چاہتے تھے اسی طرح کا نام متغیرات میں سے؟ ہم بجائے کیا کیا؟ تو میں نے چند ایک مقامات پر سنا لگتا ہے. ہم ایک سرنی تھا. تم میں سے ایک سے زیادہ مثال کے طور پر کرنا چاہتے ہیں تو کچھ، ہم کیوں یہ سب صاف نہیں کرتے اپ اور صرف مجھے دے دیں، کا کہنا ہے کہ سرنی ناموں کو کہا جاتا ہے؟ اور اب کے لئے، کی سخت کوڈ 3 ہیں. اور پھر مجھے ایک سرنی دے گھروں کہا جاتا ہے، اور اس کے لئے مجھے دو اب مشکل کوڈ 3. اور میں بڑے پیمانے پر صاف کر دیا ہے میں نے ابھی پیدا کیا ہے کہ پنگا. اب، میں اب بھی مشکل 3 کوڈت، لیکن ہے بھی 3 متحرک طور پر کی طرف سے آ سکتا ہے صارف، یا argv، یا جیسے. تو یہ پہلے سے ہی صاف ستھرا ہے. لیکن کیا اس کے بارے میں پریشان کن ہے وہ یہ ہے کہ اب، اگرچہ ایک کا نام کسی نہ کسی طرح ہے بنیادی طور سے منسلک ایک طالب علم کے گھر - یہ ہے کہ میں واقعی میں ایک طالب علم ہے کی نمائندگی کرنا چاہتے ہیں - اب میں متوازی ہیں کہ دو arrays ہے وہ لوگ اس معنی میں ایک ہی سائز، اور ناموں بریکٹ 0 گھروں بریکٹ 0 شاید نقشے، اور ناموں بریکٹ 1 نقشے گھروں بریکٹ 1. میں دوسرے الفاظ میں، اس طالب علم کی زندگی اس کے گھر، اور یہ کہ دوسرے طالب علم دوسرے کے گھر میں رہتا ہے. لیکن یہ ضرور ہو سکتا ہے اس سے بھی زیادہ cleanly کیا. ٹھیک ہے، یہ کر سکتے ہیں، حقیقت میں. اور میرے آگے بڑھو اور کھول دیں structs.h اپ، اور تمہیں یہاں اس خیال دیکھتے ہیں. آپ کے طور پر، میں typedef کا استعمال کیا ہے کہ نوٹس پہلے اعلان کرنے کے لئے ایک لمحے کے لئے alluded ہماری خود کے اعداد و شمار کی قسم. لیکن میں نے بھی اس دوسرے مطلوبہ الفاظ استعمال کر رہا ہوں struct کہا جاتا ہے جس نے مجھے ایک نئی دیتا ہے آنکڑا ڈھانچہ. اور میں دعوی یہ آنکڑا ڈھانچہ جا رہا ہے کے اندر دو چیزوں کا ہونا اس - کا نام نامی ایک سٹرنگ، اور گھر نامی ایک سٹرنگ. اور میں جا رہا ہوں کے نام دینے کے لئے یہ آنکڑا ڈھانچہ جا رہا ہے طالب علم کو بلایا جائے. میں نے اس میں جو چاہو کہہ سکتے ہیں لیکن یہ semantically بنانا میرے دماغ میں میرے لئے محسوس. تو اب، میں ایک بہتر ورژن کھلیں تو پروگرام کی میں نے لکھنا شروع کیا وہاں، مجھے سب سے اوپر سکرال ہیں. اور کوڈ کے کچھ مزید لائنیں ہے یہاں، لیکن کے لئے میرے توجہ مرکوز کرتے ہیں ایک پر پل. میں نے ایک مسلسل نام نہاد طالب علموں کا اعلان کر دیا ہے اور سخت اب اس کی 3 کوڈت. لیکن اب، توجہ کس طرح صاف میرا کوڈ حاصل کرنے کے لئے شروع ہوتا ہے. لائن 22 میں، میں اعلان طالب علموں کی سرنی. اور طالب علم بظاہر یہ ہے کہ نوٹس اب ایک اعداد و شمار کی قسم. اس فائل کے سب سے اوپر، توجہ کیونکہ میں اس ہیڈر فائل میں شامل کر دیا ہے میں نے صرف ایک لمحے پہلے نکالا ہے. اور یہ کہ ہیڈر فائل کافی صرف تھا ایک طالب علم کی اس تعریف. تو اب، میں خود اپنی مرضی کے مطابق ڈیٹا کو تشکیل دے دیا ہے قسم ہے کہ سی سال کے مصنفین پہلے پیشگی کے بارے میں سوچنا نہیں کیا. لیکن کوئی مسئلہ نہیں. میں خود ہی کر سکتے ہیں. تو یہ، طالب علموں سے ملاقات کی ایک سرنی ہے جس کے ارکان میں سے ہر ایک ایک طالب علم کی ساخت ہے. اور میں ان کے تین کرنا چاہتے ہیں سرنی میں. اور اب، باقی کیا ہے اس پروگرام کے ہیں؟ میں نے ایک چھوٹی سی صوابدیدی کچھ کی ضرورت ہے. اس لیے آن لائن 24 سے آگے، میں 0 سے 3 iterate. میں اس وقت کے لئے صارف سے پوچھو طالب علم کے نام. اور پھر میں نے پہلے کی طرح GetString استعمال کرتے ہیں. پھر میں، طالب علم کے گھر کے لئے سے دعا گو ہیں اور میں پہلے کی طرح GetString استعمال کرتے ہیں. لیکن نوٹس - تھوڑا سا نیا نحو کا ٹکڑا - مجھے-ویں طالب علم اب بھی انڈیکس کر سکتے ہیں لیکن میں مخصوص اعداد و شمار پر کس طرح حاصل کروں struct کے میدان کے اندر؟ ٹھیک ہے، بظاہر کیا ہے نئے نحو کا ٹکڑا؟ یہ صرف ڈاٹ آپریٹر ہے. ہم واقعی اس سے پہلے نہیں دیکھا. آپ نے تو آپ pset پانچ میں دیکھا ہے بٹ نقشہ فائلوں کے ساتھ پہلے سے ہی میں dived. لیکن نقطہ صرف اس کے اندر کا مطلب struct یا ایک سے زیادہ شعبوں، ڈوٹ دے نام، یا مجھے ڈاٹ گھر دے. struct کے اندر جانے کا مطلب ہے کہ اور ان شعبوں خاص طور پر ملتا ہے. اس پروگرام کے باقی کیا کرتا ہے؟ یہ سب کہ سیکسی نہیں ہے. میں دوبارہ 0 سے 3 iterate کہ نوٹس اور میں صرف ایک انگریزی تشکیل فلاں کی طرح اس طرح کے جملے اور میں ہے کی طرف سے نقطہ کے نام میں گزر ایسے گھر، I-ویں طالب علم اور ان کے گھر کے طور پر اچھی طرح سے. اور پھر آخر میں، اب ہم حاصل کرنے کے لئے شروع کریں گے ہم اب اس کے بارے میں مقعد، کیا malloc اور سے واقف دیگر افعال رہے ہیں یہ سب وقت کر رہا. میں کیوں دونوں کا نام آزاد کرنا ہے اور گھر، اگرچہ میں malloc فون نہیں کیا؟ GetString کیا. اور اس کے لئے گندی چھوٹے سے رہسی تھا کئی ہفتوں، لیکن GetString ہے سب سے زیادہ میموری لیک کر دیا گیا ابھی تک تمام سمسٹر رکھیں. اور valgrand آخر میں کرے گا ہمیں یہ ظاہر. کیونکہ مجھے پتہ ہے لیکن یہ ایک بڑا سودا نہیں ہے میں صرف نام کی آزاد کر سکتا ہے اور گھر، اگرچہ تکنیکی طور پر، پر سپر، سپر محفوظ، میں ہونا چاہئے کچھ غلطی کر یہاں کی جانچ پڑتال. آپ instincts آپ کیا کہہ رہے ہو؟ میں کی جانچ پڑتال کے لئے کیا جانا چاہئے میں نے کیا ہے اس سے پہلے آزاد سٹرنگ، ارف جو چار *؟ مجھے سچ میں کی جانچ پڑتال کی جانی چاہئے اگر طالب علموں کو بریکٹ میں ڈاٹ نام نہیں کرتا برابر، اتارنا null. اس وقت یہ آگے اور مفت جانے کے لئے ٹھیک ہو جائے گا کہ پوئینٹر، اور ایک ہی یا دوسرے ایک کے طور پر اچھی طرح سے. طالب علموں کو بریکٹ میں ڈاٹ گھر نہیں ہے تو شہوت انگیز null کے برابر ہے، یہ اب کی حفاظت کریں گے کونے کیس کے خلاف ہے جس میں GetString اتارنا null کچھ اس طرح واپس. اور ہم نے printf گا، ایک لمحے پہلے دیکھا صرف کہہ کر ہمیں یہاں اپ کی حفاظت شہوت انگیز null، جو عجیب دیکھ بھال کے لئے جا رہا ہے. لیکن کم سے کم یہ segfault نہیں رکھا جائے ہم نے دیکھا کے طور پر. ٹھیک ہے، مجھے یہاں ایک دوسرے کام کرتے ہیں. structs-0 پاگل پروگرام کی قسم ہے پھر میں اس سب کے اعداد و شمار میں داخل، اور اس کی وجہ پروگرام ختم ہوتا ہے ایک بار اسے کھو دیا ہے. لیکن میرے آگے بڑھو اور اس کے کرتے ہیں. مجھے ٹرمینل کرنے دو تھوڑا بڑا ونڈو. ، مجھے structs-1 کرنے دو جو اس کا ایک نیا ورژن ہے. میں نے تھوڑا سا میں زوم کریں گے. اور اب مجھے ڈاٹ چلانے دو structs-1 سلیش. طالب علم کے نام - ڈیوڈ Mather،، روب Kirkland کے کرتے ہیں لارین Leverett کرتے ہیں. کیا دلچسپ ہے اب نوٹس ہے - اور میں نے صرف اس کی وجہ سے جانتے ہیں میں نے پروگرام لکھا تھا - ایک فائل اپنے موجودہ پر اب نہیں ہے ڈائریکٹری students.csv ملاقات کی. تم میں سے کچھ دیکھا ہے ہو سکتا ہے حقیقی دنیا میں ان. CSV فائل کیا ہے؟ اقدار کی علامت سے علیحدہ. یہ ایک غریب آدمی کی طرح طرح کی ہے ایک ایکسل فائل کے ورژن. یہ قطاروں اور کالموں کا ایک جدول ہے آپ، ایکسل کی طرح ایک پروگرام میں کھول سکتے ہیں ایک میک پر یا نمبر. اور میں gedit پر یہاں اس فائل کو کھولنے، اگر نوٹس - اور اعداد وہاں نہیں ہیں. یہ صرف کہہ gedit ہے مجھے لائن نمبرز. اس کی پہلی لائن پر نوٹس فائل داؤد اور Mather ہے. اگلی لائن روب کوما Kirkland کے ہے. اور تیسری لائن لارین ہے کوما Leverett. تو میں کیا پیدا کیا ہے؟ میں اب ایک سی پروگرام لکھا ہے کہ مؤثر طریقے سے سپریڈ شیٹ پیدا کر سکتے ہیں ایک میں کھولی جا سکتا ہے ایکسل جیسے پروگرام. نہیں وہ سب مجبور ایک ڈیٹا سیٹ، لیکن تم میں سے بہت بڑی مقدار ہے تو آپ اصل میں چاہتے ہیں کہ اعداد و شمار جوڑتوڑ اور گرافس اور بنانے پسند ہے، یہ شاید ایک ہے کہ اعداد و شمار تخلیق کرنے کے لئے طریقہ. اس کے علاوہ، CSVs عام اصل سپر ہیں صرف سادہ ڈیٹا محفوظ کرنے کے لئے - Yahoo کے خزانہ، مثال کے طور پر، آپ کو ملتا ہے تو ان نام نہاد کے ذریعے اسٹاک کی قیمتیں API، آپ کو اجازت دیتا ہے کہ مفت سروس موجودہ اپ ڈیٹ اسٹاک حاصل کمپنیوں کے لئے کی قیمت درج کرنے، ان پیٹھ میں اعداد و شمار دے سپر سادہ CSV شکل. تو ہم کس طرح کیا؟ ٹھیک ہے، اس پروگرام کی سب سے زیادہ توجہ تقریبا ایک ہی. لیکن یہاں نیچے نوٹس بجائے پرنٹ کریں لائن 35 پر طالب علموں کو باہر، مستقبل میں، میں بچا رہا ہوں کا دعوی ہے کہ ڈسک پر طالب علموں کو، تو ایک فائل کی بچت. تو میں نے ایک فائل * اعلان کر رہا ہوں کا نوٹس - اب، اس سی میں ایک اسنگتی کی قسم ہے جو کچھ بھی وجہ سے، فائل، تمام بڑے حروف ہے جس میں سب سے زیادہ دیگر اعداد و شمار اقسام کی طرح نہیں ہے سی میں لیکن یہ ہے ایک بلٹ میں ڈیٹا کی قسم، فائل *. اور میں، ایک فائل کرنے کے لئے ایک پوائنٹر اعلان کر رہا ہوں آپ اس کے بارے میں سوچ سکتے ہیں. fopen کھلی فائل کا مطلب ہے. تم نے کیا فائل کو کھولنے کے چاہتے ہیں؟ میں نے ایک فائل کو کھولنے کے چاہتے ہیں میں کروں گا کہ منمانے students.csv کہتے ہیں. میں چاہتا ہوں کہ کچھ بھی کہہ سکتے ہیں. اور پھر ایک اندازہ لے. دوسری دلیل کیا ہے fopen شاید مطلب ہے؟ ٹھیک ہے، لکھنے کے لئے W، سکتا پڑھنے کے لئے ر ہو. اگر ایک کے لئے شامل ہے آپ قطار اور نہیں شامل کرنا چاہتے ہیں پوری بات ادلیکھت. لیکن میں صرف اس فائل کو پیدا کرنے کے لئے چاہتے ہیں ایک بار، تو میں اقتباس unquote W استعمال کریں گے. اور میں پڑھ کرنے سے صرف یہی جانتے ہیں دستاویزات، یا آدمی کے صفحے. فائل شہوت انگیز null نہیں ہے تو - دوسرے الفاظ میں، کوئی بات نہیں غلط ہو گیا تو - مجھ پر iterate دو 0 سے 3 طالب علموں کو. اور اب وہاں کچھ کے نوٹس کبھی تو تھوڑا سا مختلف یہاں کے بارے میں لائن 41. یہ printf نہیں ہے. یہ printf فائل کے لئے fprintf ہے. تو یہ دائر کرنے کے لکھنے کے لئے جا رہی ہے. کون سی فائل؟ جن پوائنٹر آپ کی وضاحت ایک پہلی دلیل کے طور پر. پھر ہم ایک کی شکل سٹرنگ کی وضاحت. اس کے بعد ہم چاہتے ہیں سٹرنگ کی وضاحت پہلی فیصد کے لئے میں پلگ، اور پھر ایک اور متغیر یا دوسری فیصد ے. پھر ہم fclose کے ساتھ فائل بند. میں اگرچہ اس سے پہلے کے طور پر میموری آزاد سے زیادہ میں واپس جا کر شامل کرنا چاہئے شہوت انگیز null لئے کچھ چیک. اور بس. fopen، fprintf، fclose مجھے دیتا ہے متن فائلوں کی تخلیق کرنے کی صلاحیت. اب، تم، مسئلہ سیٹ پانچ میں نظر آئیں گے تصاویر شامل ہیں، جو آپ کو استعمال کرتے ہوئے کی جائے گی بائنری فائلوں کی بجائے. لیکن بنیادی طور پر، خیال، ایک ہی ہے اگرچہ تمہیں افعال تھوڑا سا مختلف ہیں دیکھتے ہیں. بونڈر دورے تو، لیکن آپ کو مل جائے گا فائل کے ساتھ سب بھی واقف I/O-- ان پٹ اور آؤٹ پٹ - pset پانچ کے ساتھ. اور کے بارے میں کوئی سوالات یہاں ابتدائی مبادیات؟ جی ہاں؟ کیا آپ کو ایک شہوت انگیز null قیمت آزاد کرنے کی کوشش کریں تو کیا ہوگا؟ مفت ایک ہو گیا ہے جب تک کہ میں یقین رکھتے ہیں تھوڑا زیادہ صارف دوست، آپ کر سکتے ہیں ممکنہ طور پر segfault. میں نہیں کرتا کیونکہ یہ شہوت انگیز null پاسنگ خراب ہے مفت یقین رکھتے ہیں، آپ کے لئے چیک کرنے کے لئے پریشان یہ ممکنہ طور پر ضائع ہو جائے گا کیونکہ اس کے لئے خود کو ایسا کرنے کے لئے وقت کی دنیا میں سب. اچھا سوال ہے، اگرچہ. ٹھیک ہے، اس طرح کا ہو جاتا ہے تو ہمیں ایک دلچسپ موضوع ہے. مسئلہ سیٹ کی مرکزی خیال، موضوع پانچ عدالتی ہے. کم سے کم اس ایک حصہ ہے مسئلہ سیٹ کی. عدالتی عام طور سے مراد کہ ہو سکتا ہے یا معلومات کی وصولی خارج کر دیا گیا ہے نہیں کر سکتے ہیں جان بوجھ کر. اور اس طرح میں آپ کو ایک فوری دے سوچا کیا ذائقہ واقعی سب پر جا رہا ہے نیچے اس وقت آپ کے کمپیوٹر کے ہڈ. مثال کے طور پر، آپ اندر ہیں تو آپ کی لیپ ٹاپ یا ڈیسک ٹاپ کمپیوٹر میں ایک ہارڈ ڈرائیو، یہ یا تو ایک میکانی ہے اصل میں گھماؤ کہ آلہ - تالی بلایا سرکلر چیزیں ہے کافی ہے کہ کس طرح نظر آتے میں صرف اگرچہ یہاں کی سکرین پر اپ تھا اس تیزی سے پرانے اسکول ہے. یہ ایک تین اور ساڑھے انچ ہے ہارڈ ڈرائیو. اور ساڑھے تین انچ کی مراد اگر آپ اسے انسٹال جب چیز کے ساتھ ایک کمپیوٹر میں. اب آپ اپنے لیپ ٹاپ میں آپ میں سے بہت سے لوگ ، ٹھوس ریاست ڈرائیوز، یا SSDs ہے جو حصوں میں منتقل نہیں ہے. انہوں نے رام کی طرح زیادہ سے کم کی طرح ہو ان میکانی آلات. لیکن خیالات، اب بھی ایک جیسے ہیں یقینی طور پر وہ تعلق کے طور پر مسئلہ پانچ قائم کرنے کے لئے. اور آپ کو ایک کی ہارڈ ڈرائیو اب کے بارے میں سوچتے ہیں تو جس میں ایک دائرے کی مانند، کیا جا رہا ہے کی نمائندگی کرتا ہے میں یہاں اس طرح اپنی طرف متوجہ کریں گے. آپ کو آپ کے کمپیوٹر پر ایک فائل تخلیق کریں تو یہ ایک SSD ہے، یا چاہے وہ اس کیس، ایک پرانے اسکول کی ہارڈ ڈرائیو، وہ فائل ایک سے زیادہ بٹس پر مشتمل ہے. کی یہ 0 اور 1 ہے کہنے دو، 0s اور 1s کے پورے گچرچھی. تو اس نے اپنی پوری ہارڈ ڈرائیو ہے. یہ بظاہر بہت بڑا فائل ہے. اور یہ کہ میں 0s اور 1s کو استعمال کر رہا ہے جسمانی تالی کے حصے. ٹھیک ہے، کہ جسمانی حصہ کیا ہے؟ ٹھیک ہے، یہ ایک ہارڈ ڈرائیو پر کہ باہر کر دیتا ہے اس قسم کے کم از کم، وہاں ہے ان چھوٹی چھوٹی سی مقناطیسی ذرات. اور وہ بنیادی طور پر شمال میں ہے اور ان کے جنوب کے کھمبے، تاکہ اگر آپ ان مقناطیسی ذرات میں سے ایک کی باری اس طرح، آپ کو یہ کہنا ہے کہ ہو سکتا ہے ایک 1 کی نمائندگی. اور یہ الٹا جنوب میں ہو تو شمال میں، آپ یہ کہتے ہیں کہ ہو سکتا ہے ایک 0 کی نمائندگی. لہذا حقیقی جسمانی دنیا میں، کہ ہے اگر آپ میں کچھ کی نمائندگی کرتے ہیں کس طرح بائنری 0 کی ریاست اور ایک 1. تو یہ سب ایک فائل ہے ہے. مقناطیسی کے پورے گچرچھی ہے ان کے اس طرح یا ہے کہ ذرات اس طرح، پیدا پیٹرن کے 0s اور 1s. لیکن یہ آپ کو ایک فائل کو بچانے کے جب باہر کر دیتا ہے کچھ معلومات کو علیحدہ سے بچا لیا ہے. تو یہ، ایک چھوٹی سی میز ہے ایک ڈائریکٹری، تو بات کرنے کے لئے. اور میں نے اس کالم کا نام کال کریں گے، اور میں اس کالم کے محل وقوع کو بلاتا ہوں. اور مجھے لگتا ہے، کا کہنا ہے کہ جا رہا ہوں یہ اپنے تجربے کی فہرست ہے. میرا resume.doc میں محفوظ کیا جاتا ہے محل وقوع، 123 کہتے ہیں. میں نے ہمیشہ اس نمبر کے لئے جانا. لیکن صرف پسند کا کہنا ہے کہ یہ کافی RAM میں، آپ کو ایک کی ہارڈ ڈرائیو لے جا سکتے ہیں کہ ایک گیگا بائٹ یا 200 گیگا بائٹس ہے یا ایک terabyte، اور آپ کر سکتے ہیں تعداد بائٹس کی تمام. آپ 8 بٹس کے تمام حصوں تعداد میں کر سکتے ہیں. تو ہم یہ کہیں گے مقام 123 ہے. تو میری آپریٹنگ کے اس ڈائریکٹری کے اندر نظام یاد ہے کہ میرے تجربے کی فہرست میں 123 مقام پر ہے. لیکن یہ جب دلچسپ ہو جاتا ہے آپ کو ایک فائل کو خارج کر دیں. مثال کے طور پر تو - اور شکر ہے کہ دنیا کے سب سے زیادہ ہے اس پر پکڑا - کیا ہوتا ہے جب اگر آپ اپنے میک OS ردی کی ٹوکری میں ایک فائل ھیںچیں یا آپ کے ونڈوز ردی ٹوکری؟ ایسا کرنے کا مقصد کیا ہے؟ یہ فائل سے چھٹکارا حاصل کرنے کے لئے ظاہر ہے لیکن کیا گھسیٹنے کے ایکٹ کرتا ہے اور آپ کے ردی کی ٹوکری یا میں گر آپ ردی ٹوکری سے ایک کمپیوٹر پر کرتے ہیں؟ واقعی میں بالکل کچھ بھی نہیں،. یہ صرف ایک فولڈر کی طرح ہے. یہ اس بات کا یقین کرنے کے لئے، ایک خاص فولڈر ہے. لیکن یہ اصل میں فائل کو حذف کرتا ہے؟ نہیں، ٹھیک ہے، کیونکہ آپ شاید میں سے کچھ کی طرح کیا گیا ہے، لات اوہ، تم نے نہیں کیا ایسا کرنے کا مطلب ہے. تو آپ ڈبل کلک کریں ردی کی ٹوکری یا ردی ٹوکری. آپ کے ارد گرد poked ہوں اور تم ٹھیک ہے بس اسے گھسیٹ کی طرف سے فائل وہاں سے باہر. تو واضح طور پر، یہ ضروری نہیں ہے اسے خارج کرنے کی. ٹھیک ہے، تم اس سے زیادہ ہوشیار ہیں. تمہیں پتہ ہے کہ صرف میں گھسیٹنے ردی کی ٹوکری یا ردی ٹوکری مطلب یہ نہیں ہے آپ کو ردی کی ٹوکری خالی کرنے کی کر رہے ہیں. تو آپ کو مینو پر جا کر، اور آپ کا کہنا ہے کہ خالی ردی کی ٹوکری یا ردی ٹوکری خالی کریں. اس کے بعد کیا ہوتا ہے؟ جی ہاں، تو یہ مزید اتنی خارج کر دیا جاتا ہے. لیکن ہوتا یہ سب ہے. کمپیوٹر جہاں بھول resume.doc تھا. لیکن بظاہر نہیں بدلا ہے تصویر میں؟ بٹس، میں دعوی ہے کہ 0s اور 1s ہیں میں سے بعض جسمانی پہلو کی ویب سائٹ پر ہارڈ ویئر. وہ وہاں اب بھی ہیں. یہ صرف کمپیوٹر کی ہے بھلا کیا وہ کر رہے ہیں. تو یہ بنیادی طور پر آزاد ہے فائل کی وہ دوبارہ استعمال کیا جا سکتا ہے تاکہ بٹس. لیکن آپ کو، زیادہ فائلوں کو پیدا نہیں جب تک اور زیادہ فائلوں، اور زیادہ فائلوں گے probabilistically، ان 0s اور 1s، ان مقناطیسی ذرات، دوبارہ استعمال ہو جاتے ہیں، کے لئے الٹا یا دائیں جانب اپ، دیگر فائلیں، 0s اور 1s. تو آپ وقت کے اس ونڈو ہے. اور یہ امکانات کی نہیں ہے لمبائی، واقعی. یہ آپ کی مشکل کا سائز پر منحصر ہے ڈرائیو اور کتنے فائلوں کو آپ کے پاس اور کتنی جلدی آپ نئے بناتے ہیں. لیکن وقت کے اس ونڈو کے دوران وہاں ہے وہ فائل بالکل بھی ہے جو وصولی. کیا تم نے کبھی McAfee جیسے پروگراموں کا استعمال کرتے ہیں تو اگر یا نورٹن کی وصولی کے لئے کوشش کرنے کے لئے اعداد و شمار، وہ کر رہے ہیں سب کے لئے کوشش کر رہی ہے اس نام نہاد ڈائریکٹری کی وصولی آپ کی فائل کہاں تھی پتہ. اور کبھی کبھی نورٹن اور کہیں گے فائل 93٪ وصولی ہے. ٹھیک ہے، اس کا کیا مطلب ہے؟ صرف اس کا مطلب ہے کہ کسی اور فائل اتفاق، کا کہنا ہے کہ، کا استعمال کرتے ہوئے ختم آپ کی اصل فائل سے باہر ان بٹس. تو اصل میں کیا شامل ہے ڈیٹا کی وصولی میں؟ ٹھیک ہے، اگر آپ کی طرح کچھ نہیں ہے تو نورٹن، آپ کے کمپیوٹر پر پہلے سے نصب اگر آپ کبھی کبھی کر سکتے ہیں سب سے اچھی لگتی ہے پوری ہارڈ ڈرائیو کے لئے تلاش میں بٹس کے پیٹرن. اور مسئلہ سیٹ کے موضوعات کے حوالے سے ایک پانچ آپ کو تلاش کرے گا یہ ہے کہ ایک ہارڈ ڈرائیو کے مساوی ہے، ایک فارنسک ایک کی طرف سے ایک کامپیکٹ فلیش کارڈ کی تصویر 0s کے لئے تلاش ڈیجیٹل کیمرے، اعلی کے ساتھ ہے کہ عام طور پر اور 1s، امکان، کی نمائندگی کرتے ہیں ایک JPEG تصویر کے شروع. اور تم لوگوں کی طرف سے ان تصاویر کی وصولی کر سکتے ہیں میں اس پیٹرن دیکھتے ہیں، تو سنبھالنے فارنسک تصویر پر بٹس، کے ساتھ پرتیک ہے کہ اعلی امکان، ایک JPEG کے آغاز. اور میں پھر سے اسی پیٹرن دیکھتے ہیں، تو کہ شاید کے آغاز کے نشان ایک اور JPEG، اور دوسرے JPEG، اور ایک JPEG. اور یہ عام طور پر کس طرح ہے اعداد و شمار وصولی کے کام کرے گا. کیا JPEGs کے بارے میں اچھی بات ہے اگرچہ ہے فائل کی شکل خود کو کسی حد تک ہے ہر اس طرح کے پیچیدہ، آغاز فائل اصل میں منصفانہ طور پر قابل شناخت ہے ، آپ دیکھیں گے کے طور پر، اور سادہ اگر آپ پہلے ہی نہیں ہے تو. تو کی کے نیچے ایک دوسرے کے قریب دیکھنے دو رہا ہے بالکل وہی جو کے طور پر ڈاکو چل رہا ہے، اور ان 0s اور 1s کیا آپ کو ایک تھوڑا سا زیادہ دینے کے لئے ہیں، یہ خاص طور سے چیلنج کے لئے سیاق و سباق. [ویڈیو پلے بیک] آپ کے کمپیوٹر کے سب سے زیادہ ذخیرہ-کہاں اس کے مستقل ڈیٹا کی. ایسا کرنے کے لئے، اعداد و شمار کے رام سے سفر بتا کہ سگنل سافٹ ویئر کے ساتھ ساتھ کس طرح ہے کہ اعداد و شمار کے ذخیرہ کرنے کے لئے ہارڈ ڈرائیو. ہارڈ ڈرائیو سرکٹس ترجمہ وولٹیج میں ان لوگوں سگنل اتار چڑھاو. یہ، کے نتیجے میں، ہارڈ ڈرائیو کے کنٹرول منتقل حصوں، چند میں سے کچھ میں چھوڑ منتقل حصوں جدید کمپیوٹر. سگنل میں سے کچھ ایک موٹر کنٹرول جس دھاتی لیپت تالی گھماؤ. آپ کا ڈیٹا اصل میں محفوظ کیا جاتا ہے ان تالی پر. دیگر سگنل پڑھنا / لکھنا منتقل پڑھنے یا سر تالی پر ڈیٹا لکھتے ہیں. یہ مشینری تاکہ عین مطابق ایک انسان ہے کہ بالوں کے درمیان بھی پاس نہیں کر سکتے ہیں سر اور کتائی تالی. پھر بھی، یہ سب لاجواب رفتار پر کام کرتا ہے. [END ویڈیو پلے بیک] DAVID MALAN: ایک چھوٹی سی میں زوم گہرے اب کیا ہے میں اصل میں ان لوگوں کو تالی پر. [ویڈیو پلے بیک] کی نظر کرتے ہیں کیا ہم صرف میں سست رفتار سے دیکھا. بجلی کی ایک مختصر پلس ہے جب flips، اگر پڑھنا / لکھنا سر کرنے کے لئے بھیجا کے لئے ایک چھوٹا سا برقی پر ایک سیکنڈ کا ایک حصہ. مقناطیس جو ایک فیلڈ، تخلیق تبدیلیاں ایک چھوٹے، چھوٹے کی polarity دھات کے ذرات کی حصہ جو کوٹ ہر تالی سطح. ان چھوٹے کی ایک پیٹرن سیریز، ڈسک پر الزام عائد کیا اپ علاقوں کے ایک بٹ کی نمائندگی کرتا ہے بائنری تعداد میں اعداد و شمار کمپیوٹرز کی طرف سے استعمال کے نظام. اب، موجودہ بھیجا جاتا ہے تو ایک ہی راستہ پڑھنے کے ذریعے /، علاقے سر لکھنا ایک سمت میں پولرائزڈ ہے. موجودہ میں بھیجا جاتا ہے تو مخالف سمت، بروویکرن الٹ ہے. اگر آپ ہارڈ ڈسک بند معلومات حاصل کس طرح؟ صرف عمل کو الٹا. تو یہ ڈسک پر ذرات ہے کہ میں موجودہ حاصل سر منتقل پڑھنا / لکھنا. ان میں سے لاکھوں افراد کو ایک ساتھ رکھ دو چمبکیی طبقوں، اور آپ کو ایک فائل میں مل گیا ہے. اب، ایک فائل کے ٹکڑے کر سکتے ہیں سب ایک ڈرائیو کی میں بکھری جائے گندگی کی طرح قسم کی تالی، اپنی میز پر کاغذات کی. تو ایک خصوصی اضافی فائل کے ٹریک رکھتا ہے سب کچھ ہے جہاں. تم پڑا نہیں کرنا چاہتے کچھ اس طرح؟ [END ویڈیو پلے بیک] DAVID MALAN: ٹھیک ہے، شاید نہیں. تو تم کس طرح کے بہت سے لوگ ان کے ساتھ پلا بڑھا؟ ٹھیک ہے، تو یہ کم اور کم ہے ہاتھوں ہر سال. لیکن میں آپ کو کم از کم واقف ہیں خوش ہوں ان کے ساتھ، اس کی وجہ سے اور ہمارے اپنے کتاب کی ڈیمو، دکھ کی بات ہے، ایک بہت ہی مر رہے ہیں واقف یہاں موت سست. لیکن یہ کم از کم، پیٹھ میں، کیا میں ہے ہائی اسکول، بیک اپ کے لئے استعمال کیا استعمال. اور یہ حیرت انگیز تھا، کیونکہ آپ پر 1.4 میگا بائٹس کی دکان کر سکتے ہیں یہ خاص طور پر ڈسک. اور یہ، اعلی کثافت ورژن تھا کے طور پر ہے جس میں ایچ ڈی، دلالت آج کی HD ویڈیوز سے پہلے کا مطلب ہے. سٹینڈرڈ کثافت 800 کلو بائٹ تھا. اور اس سے پہلے، وہاں تھے 400-kilobyte ڈسک. اور اس سے پہلے، 5 اور 1/4 وہاں تھے واقعی فلاپی تھے جس انچ ڈسک،، اور تھوڑا وسیع تر اور طویل یہاں ان چیزوں سے بھی زیادہ. لیکن اگر آپ اصل میں نام نہاد دیکھ سکتے ہیں ان ڈسکوں کی فلاپی پہلو. اور فعل کے، وہ اصل میں ہیں میں کی ہارڈ ڈرائیوز کے لئے اسی طرح کے خوبصورت کم از کم اس قسم کے. جدید کمپیوٹر میں ایک بار پھر، SSDs مختلف طریقے سے ایک چھوٹا سا کام کرتے ہیں. لیکن آپ کو اس چھوٹے دھاتی کے ٹیب پر منتقل کرتے ہیں تو، آپ اصل میں، ایک چھوٹی کوکی دیکھ سکتے ہیں یا تالی. یہ اس طرح دھات نہیں ہے. یہ ایک اصل میں کچھ سستا ہے مواد پلاسٹک. اور تم wiggle یہ ایک طرح سے کر سکتے ہیں. اور تم trully صرف کچھ ختم کر دیا ہے بٹیں یا مقناطیسی ذرات کی تعداد اس ڈسک سے. تو شکر ہے کہ اس پر کوئی بات نہیں ہے. وہ چیز جو راہ میں ہے تو - اور کا احاطہ اپنی آنکھوں اور اپنے پڑوسی کے ان لوگوں کو - صرف یہ کیسا ھیںچو آپ کر سکتے ہیں اس طرح پورے میان سے دور. لیکن ایک چھوٹا سا موسم بہار ہے، تو ہو اپنی آنکھوں سے اس کے بارے میں علم. تو اب اگر آپ واقعی ایک فلاپی ڈسک ہے. اور کیا اس کے بارے میں قابل ذکر ہے یہ ہے کے طور پر اس کے طور پر زیادہ سے زیادہ میں ہے ایک ایک بڑے سے چھوٹے پیمانے پر نمائندگی ہارڈ ڈرائیو، ان چیزوں کو، سپر ہیں سپر آسان. اب آپ کو، اس کے سب سے نیچے چوٹکی تو ہے کہ کہ دھات کی چیز سے دور ہے، اور چھیل ان کو کھولنے کے، نہیں ہے سب سے دو ٹکڑے ہے محسوس کیا اور نام نہاد فلاپی ڈسک اندر دھات کا ایک ٹکڑا کے ساتھ. اور کے نصف وہاں جاتا ہے میرے ڈسک کے مواد. ان میں سے ایک دوسرے نصف آمدید جاتا ہے. لیکن اس کے اندر کتائی تھا کہ تمام ہے yesteryear میں آپ کے کمپیوٹر کے. اور پھر،، نقطہ نظر میں یہ ڈال کتنا بڑا ہے، آپ کی سب سے زیادہ مشکل ان دنوں چلتی ہے؟ 500 گیگا بائٹس، ایک terabyte، شاید میں ایک ڈیسک ٹاپ کمپیوٹر، 2 terabytes، 3 terabytes، 4 terabytes، ہے نا؟ یہ ایک میگا بائٹ ہے،، دے یا لے یہاں تک کہ ایک عام MP3 قابل نہیں کر سکتے ہیں اب ان دنوں، یا کچھ اسی طرح کی موسیقی فائل. تو ایک چھوٹا سا آپ کے لئے آج سمارکا، اور بھی کیا contextualize مدد کرنے کے لئے ہم نے حاصل کی جاچکی کے لئے لے جا رہا ہو جائیں گے اب مسئلہ میں پانچ قائم کی. لہذا ان کو رکھنے کے لئے تمہارے ہیں. تو ہو جائے گا جہاں مجھے منتقلی دو اگلے pset خرچ کے طور پر اچھی طرح سے. تو کیا اب ہم اس صفحہ کے لئے مقرر کیا ہے - اوہ، فوری طور پر اعلانات کے ایک جوڑے. یہ جمعہ، اگر آپ چاہیں تو CS50 میں شامل دوپہر کے کھانے کے لئے،، معمول کی جگہ جانا cs50.net/rsvp. اور آخری پروجیکٹ - تو نصاب کے مطابق، ہم نے پوسٹ کیا ہے پہلے سے ہی حتمی منصوبے کی تفصیلات. مطلب یہ نہیں ہے کہ احساس ہے کہ یہ خاص طور پر جلد ہی وجہ سے ہے. یہ صرف حاصل کرنے کے لئے، سچ میں، پوسٹ کیا ہے تم لوگوں کو اس کے بارے میں سوچ. اور یقینا، ایک سپر اہم آپ کی شرح سے نمٹنے کی جائے گی مواد پر حتمی منصوبوں کہ ہم یہاں تک کہ کلاس میں کرنے کے لئے ہو نہیں کیا ہے، لیکن کے طور پر ابتدائی طور پر اگلے ہفتے کرے گی. نوٹس تاہم رپورٹ کا مطالبہ ہے کہ کے چند مختلف اجزاء حتمی منصوبے. سب سے پہلے، چند ہفتوں میں، ہے پہلے سے تجویز کرنے کے لئے ایک بہت آرام دہ اور پرسکون ای میل آپ اسے بتانا TF یا تم کیا ہو کے ساتھ، آپ کے منصوبے کے لئے کے بارے میں سوچ کوئی عزم. تجویز آپ کی خاص طور پر ہو جائے گا عزم، کہہ، یہاں، یہ کیا ہے میں اپنے منصوبے کے لئے کرنا چاہتے ہیں. آپ کو کیا لگتا ہے؟ بہت بڑی؟ بہت چھوٹا؟ یہ انتظام ہے؟ اور آپ کو مزید تفصیلات کے لئے رپورٹ ملاحظہ کریں. ہفتے کے جوڑے اس کے بعد کا درجہ ہے ایک اسی طرح ہے جس کی رپورٹ، کس طرح کا کہنا ہے کہ کرنے کے لئے اپنے TF کرنے کے لئے آرام دہ اور پرسکون ای میل آپ کو آپ کے فائنل میں بہت پیچھے ہیں اس کے بعد منصوبے کے عمل درآمد، CS50 Hackathon جس سے سب کو دعوت دی ہے، کی طرف سے ایک تقریب ہو گی جس میں 7:00 تک ایک شام 8:00 بجے اگلی صبح صبح. میں ہفتے میں نے ذکر کیا ہے ہو سکتا ہے کے طور پر پزا، صفر، wil، 9:00 بجے کی خدمت کی جائے 1:00 میں چینی کھانا AM. اور تم 5:00 میں ابھی تک جاگ رہے ہیں تو صبح، ہم ناشتا کے لئے IHOP کے لئے آپ کو لے جائیں گے. تو Hackathon زیادہ میں سے ایک ہے کلاس میں یادگار تجربات. پھر اس پر عمل درآمد کی وجہ سے ہے، اور پھر climactic CS50 میلے. ان میں سے سب پر مزید تفصیلات ہفتوں میں آنے کے لئے. لیکن کچھ کرنے کے لئے واپس جانے دو پرانے اسکول - ایک بار پھر، ایک سرنی. یہ حل کرتی ہے کیونکہ تو ایک سرنی، اچھا تھا ہم جیسے مسائل کا صرف ایک دیکھا طالب علم کے ڈھانچے کے ساتھ پہلے لمحے قابو سے تھوڑا سا باہر نکل رہا تو ہم ایک طالب علم، طالب علم دو، کرنا چاہتے ہیں طالب علم، تین تین، طالب علم ڈاٹ ڈاٹ ڈاٹ، طالب علموں کے کچھ صوابدیدی تعداد. arrays تو، چند ہفتے پہلے، میں swooped اور ہمارے مسائل حل نہیں تمام پیشگی علم کس طرح بہت سی چیزیں بعض قسم کی ہم چاہتے ہیں کر سکتے ہیں. اور ہم structs ہماری مدد کر سکتا ہے دیکھا ہے مزید ہمارے کوڈ کو منظم اور برقرار رکھنے کے ایک طرح conceptually اسی طرح متغیر، نام اور ایک گھر، ایک ساتھ مل کر، تاکہ ہم اندر ایک ہستی، کے طور پر ان کا علاج کر سکتے ہیں جن میں چھوٹے ٹکڑوں ہیں. لیکن arrays کچھ نقصانات ہیں. نقصانات میں سے کچھ کیا ہیں ہم کا سامنا کرنا پڑا ہے arrays کے ساتھ ابھی تک؟ وہ کیا ہے؟ فکسڈ سائز - تو تم بھی سکتا ہے اگرچہ ایک میموری کے لئے مختص کرنے کے قابل ہو سرنی، ایک بار آپ کو معلوم ہے کہ کتنے طالب علموں کو آپ کو آپ کے پاس کتنے حروف ہیں صارف کی طرف سے، ایک بار آپ کی رقم مختص کی ہے سرنی، آپ کو قسم کی پینٹ ہے ایک کونے میں اپنے آپ کو. آپ نئے عناصر داخل نہیں کرسکتے ہیں کیونکہ ایک صف کے وسط میں. آپ مزید عناصر داخل نہیں کرسکتے ہیں ایک صف کے آخر میں. سچ میں، آپ کو ایک پیدا کرنے پر مائل کرنے کی ضرورت ہم نے بات چیت کی ہے کے طور پر پوری نئی سرنی،، نئے میں پرانے کاپی. اور پھر، اس کے سر میں درد ہے آپ کے لئے ساتھ سودے GetString. لیکن پھر، آپ کو بھی داخل نہیں کرسکتے ہیں سرنی کے وسط میں کچھ شرح مکمل طور پر بھرا ہوا نہیں ہے تو. مثال کے طور پر، اس سرنی اگر یہاں سائز کی صرف چھ، اس میں پانچ چیزیں ہیں ساتھ ساتھ، آپ کو صرف سمت سکتا ختم ہونے پر کچھ. لیکن آپ کو کچھ داخل کرنے کے لیے کیا کرنا چاہتے ہیں تو کے وسط میں سرنی، یہ ہو سکتا ہے اگرچہ اس میں چھ چیزوں کے پانچ باہر؟ ٹھیک ہے، ہم ہم سب تھا کیا کیا ہمارے انسانی رضاکاروں کی فورم میں ہفتے کے ماضی؟ ہم یہاں کسی کو ڈال کرنے کے لئے چاہتا تھا، تو یا تو یہ کس طرح منتقل کرنے کے لئے ان لوگوں کو راستہ، یا اس کو کس طرح منتقل کرنے کے لئے ان لوگوں کو راستہ، اور یہ کہ مہنگا ہو گیا. ایک کے اندر لوگوں کی منتقلی سرنی تک کا اضافہ اور لاگت ختم ہمیں وقت، اس وجہ سے بہت سے ہمارے (ن) کے مربع کے کے لئے، اندراج ترتیب دیں طرح اوقات چلانے مثال کے طور پر، سب سے خراب صورت میں. تو arrays عظیم ہیں، لیکن آپ کو کرنا پڑے تم ان سے چاہتے ہیں کتنا بڑا پیشگی جانتے ہیں. تو ٹھیک ہے، یہاں ایک حل ہے. میں پیشگی نہیں جانتے تو کتنے طالب علموں میں ہو سکتا ہے، اور میں نے ایک بار جانتے میں فیصلہ، اگرچہ، میں نے اس کے ساتھ پھنس گیا ہوں کیوں میں نے صرف ہمیشہ بہت سے طالب علموں کو نہیں دو مرتبہ کے طور پر زیادہ سے زیادہ کی جگہ مختص مجھے لگتا ہے کہ ہو سکتا ہے کے طور پر میں نے کی ضرورت ہے؟ کہ ایک مناسب حل نہیں ہے؟ حقیقت پسندانہ، میں ہم ہیں کہ نہیں لگتا 50 سے زائد دورانیے کی ضرورت پڑے گی ایک درمیانے سائز کے طبقے کے لئے ایک سرنی میں، تو صرف مہاسرا ہیں. میں صرف، میری سرنی میں 100 سلاٹ بنا دیں گے تاکہ ہم یقینی طور پر حاصل کر سکتے ہیں میں کی توقع طلباء کی تعداد کچھ درمیانے سائز کے کلاس میں ہو. تو کیوں بس چپ گول اور مختص نہیں ایک سرنی کے لئے زیادہ میموری، عام طور پر، آپ کو بھی ضرورت ہو سکتی ہے لگتا ہے کے مقابلے میں؟ اس سادہ pushback کیا ہے اس خیال ہے؟ آپ کو صرف میموری برباد کر رہے ہو. اگر آپ کو لکھنے کے لفظی ہر پروگرام شاید دو بار کے طور پر زیادہ سے زیادہ میموری کے طور پر استعمال کر رہا ہے آپ کو واقعی ضرورت ہے. اور صرف ایک کی طرح محسوس نہیں کرتا خاص طور پر مزین حل. اس کے علاوہ، یہ صرف کمی واقع ہوتی ہے ایک مسئلہ کے امکانات. اگر آپ کو ایک مقبول کورس ہے ہو تو ایک سمسٹر اور آپ کو 101 ہے طالب علموں کو، آپ کے پروگرام اب بھی ہے بنیادی طور پر ایک ہی مسئلہ کا سامنا ہے. تو شکر ہے، کرنے کے لئے ایک حل ہے شکل میں اس اشتھار کو اپنے تمام مسائل کو ہیں کہ اعداد و شمار کے ڈھانچے کی والوں کے مقابلے میں زیادہ پیچیدہ ہم نے ابھی تک دیکھا ہے. یہ، میں دعوی کرتے ہیں، ایک سے منسلک فہرست ہے. یہ اعداد کی ایک فہرست ہے - 9، 17، 22، 26، اور 34 - راہ کی طرف سے ایک دوسرے کے ساتھ منسلک کر دیا گیا ہے کیا میں تیر کے طور پر تیار کی ہے. دوسرے الفاظ میں، تو میں کی نمائندگی کرنا چاہتا تھا ایک سرنی، میں کر سکتا تھا کچھ اس طرح. اور میں زمین کے اوپر پر اس ڈال دیتا ہوں ایک پل میں. میں کر سکتا - ہیلو، ٹھیک ہے. کی طرف سے کھڑے ہو جاؤ. یہاں نئے کمپیوٹر، واضح - ٹھیک ہے. تو میں نے صف میں ان کی تعداد ہے تو - 9، 17، 22، 26، 24 - پیمانے کے ضروری نہیں. ٹھیک ہے، تو یہاں میری سرنی ہے - اوہ میرے خدا. ٹھیک ہے، تو یہاں میری سرنی ہے. ہے بھگوان. [ہنسی] DAVID MALAN: دکھاوا. یہ واپس جانے کے لئے بہت زیادہ کوشش کی ہے اور تو وہاں، اس کو ٹھیک - 26. تو ہم اس سرنی کی ہے 9، 17، 22، 26، اور 34. تم میں سے ان لوگوں کو دیکھ سکتے ہیں کے لئے شرمناک غلطی میں صرف کر دیا، وہاں ہے. تو میں نے یہ دعوی ہے کہ ایک بہت موثر حل. میں کے طور پر کئی کے طور پر ints مختص ہے مجھے ضرورت ہے - ایک، دو، تین، چار، پانچ یا چھ - اور میں تو تعداد ذخیرہ ہے اس صف کے اندر. لیکن لگتا ہے، پھر، میں داخل کرنا چاہتے ہیں نمبر 8 کی طرح ایک قیمت؟ ٹھیک ہے، یہ کہاں جاتا ہے؟ میں داخل کرنا چاہتے ہیں مان لیں 20 کی طرح ایک بڑی تعداد. ٹھیک ہے، یہ کہاں جاتا ہے؟ وہیں کہیں وسط میں، یا نمبر 35 جانا ہے کہیں آخر میں. لیکن میں خلا کے سب باہر ہوں. اور اس طرح یہ ایک بنیادی چیلنج ہے حل ہیں ہے کہ arrays کی. میں GetString، ایک لمحے پہلے دعوی کیا اس مسئلہ کو حل کرتی ہے. آپ کو ایک چھٹے نمبر داخل کرنا چاہتے ہیں تو اس صف میں، کم از کم ایک کیا ہے حل آپ، اس بات کا یقین کے لئے پر واپس گر کر سکتے ہیں ہم GetString کے ساتھ کی طرح؟ وہ کیا ہے؟ ٹھیک ہے، یہ بڑا ہے بنا آسان سے زیادہ کیا ہے. ہم ضروری سرنی نہیں کر سکتے ہیں بڑا، لیکن ہم کیا کر سکتے ہیں؟ سائز کے بڑا ہے کہ ایک نئی صف، بنائیں 6، یا شاید سائز 10 ہے، ہم چاہتے ہیں تو آگے کی چیزوں میں سے ہو جاؤ، اور پھر کاپی کرنے کے لئے پرانے نئے میں سرنی، اور پھر پرانے سرنی مفت. لیکن رننگ ٹائم کیا ہے اب اس عمل کی وجہ سے؟ یہ (ن) کے بڑے اے ہے کیونکہ کاپی تم میں سے بعض یونٹس کی قیمت جا رہی ہے ہم کرنے کی ضرورت کا وقت ہے، تو اتنا مثالی نہیں تو جا رہی ہے جس میں ایک نئی صف، مختص دو مرتبہ کے طور پر زیادہ سے زیادہ خرچ عارضی طور پر میموری. نئے میں پرانے کاپی کریں - میرا مطلب ہے، یہ صرف ایک سر میں درد ہے، جس ، ایک بار پھر، ہم کیوں لکھا ہے آپ کے لئے GetString. ہم اس کی بجائے تو کیا کیا کر سکتے ہیں؟ ٹھیک ہے، اگر ہمارے اعداد و شمار کے ڈھانچے اصل میں اس میں فرق ہے؟ میں رکھنے کا میرا مقصد آرام کہ مان لیں میموری کی ملحق حصوں، جہاں 9 ہے جو 17، حق اگلے ہے حق 22 کرنے کے لئے اگلے، اور اسی طرح کی. اور 9 یہاں میں ختم ہو سکتا ہے کہ لگتا ہے رام، اور 17، RAM میں یہاں پر کیا جا سکتا ہے اور 22 RAM میں یہاں جا سکتا ہے. دوسرے الفاظ میں، میں نے ان کی ضرورت نہیں ہے یہاں تک کہ اب واپس کرنے کے لئے واپس. میں صرف کسی نہ کسی طرح ایک انجکشن موضوع کو ہے ان نمبروں میں سے ہر ایک، یا ہر ایک کے ذریعے ان مراکز کی، کے طور پر ہم فون کروں گا میں نے ان کو تیار کیا ہے کے طور پر rectangles، پر گزشتہ حاصل کرنے کے لئے کس طرح یاد پہلے سے ایسے نوڈ. تو پروگرامنگ کی تعمیر کیا ہے ہم بالکل حال ہی میں دیکھا ہے جس کے ساتھ میں نے اس دھاگے میں پوسٹ ہوئے عمل درآمد، یا کر سکتے ہیں ، یہاں تیار کی میں کر سکتا ہوں جس کے ساتھ ان لوگوں کے تیر پر عمل درآمد؟ تو اشارہ، ہے نا؟ میں ایک نہیں تو مختص INT، لیکن ایک نوڈ - اور کی طرف سے نوڈ، میں صرف کنٹینر مطلب ہے. اور نابینا، میں نے ایک مستطیل مطلب ہے. ایک نوڈ بظاہر کی ضرورت ہے تو دو اقدار پر مشتمل ہے - INT خود کو، اور پھر، کے طور پر کی طرف سے تقاضا مستطیل کے سب سے نیچے نصف، ایک INT کے لئے کافی جگہ. تو، یہاں سے آگے سوچ یہ نوڈ یہ کتنا بڑا ہے سوال میں کنٹینر؟ INT کے لئے کتنے بائٹس؟ شاید 4، ہے تو معمول کے طور پر ایک ہی. اور پھر کتنے بائٹس پوائنٹر کے لئے؟ 4. تو یہ کنٹینر، یا اس نوڈ، ہے ایک 8 بائٹ ساخت ہونے جا رہا. اوہ، اور یہ کہ ایک خوش اتفاق ہے کہ ہم صرف اس تصور متعارف کرایا ایک struct، یا ایک سی ساخت. تو میں نے ایک قدم آگے لے جانا چاہتا ہوں کا دعوی ہے کہ یہ زیادہ بہتر کی طرف اعداد کی ایک فہرست ہے، ایک کا نفاذ نمبروں کی فہرست سے منسلک، میں نے ایک کرنے کی ضرورت ہے تھوڑا زیادہ سامنے سوچ اور نہ صرف ایک INT، لیکن ایک struct کا اعلان میں فون کروں گا، کہ روایتی یہاں، نوڈ. ہم نے اسے ہم چاہتے کچھ کو فون، لیکن کر سکتے ہیں نوڈ بہت میں موضوعاتی ہونے جا رہا ہے چیزوں کی اب ہم دیکھ شروع. کہ نوڈ کے اندر ایک INT ن ہے. اور پھر یہ نحو، تھوڑا سا پہلی نظر میں عجیب - struct نوڈ * اگلے. ویسے pictorially، وہ کیا ہے؟ کہ اس کے نچلے حصے نصف ہے ہم نے دیکھا کہ مستطیل صرف ایک لمحے پہلے. لیکن کیوں کہ میں * struct نوڈ کہہ رہا ہوں کے طور پر صرف نوڈ * کی مخالفت؟ کہ پوائنٹر کی طرف اشارہ ہے کیونکہ اگر ایک اور نوڈ پر، یہ صرف ہے ایک نوڈ کا ایڈریس. ہم نے کیا کے مطابق ہے اس طرح اب تک کے اشارہ کے بارے میں تبادلہ خیال کیا. میں دعوی کرتے ہیں لیکن اگر اسی وجہ سے، اس کی ساخت ہے نوڈ کو بلایا، میں struct کیا کہنا ہے یہاں اندر نوڈ؟ بالکل ٹھیک. یہ سی کے ایک بیوکوف حقیقت کی طرح ہے typedef، تو بات کرنے کے لیے، نہیں ہے ابھی ہوا ہے. سی لغوی سپر ہے. یہ آپ کے کوڈ کو اوپر کی پڑھتا ہے نیچے، بائیں سے دائیں. اور جب تک اس پر ہے کہ نیم وقفہ مار دیتی ہے سب سے نیچے لائن، نہیں کیا کرتا ہے لگتا ہے ایک قسم کے طور پر اعداد و شمار موجود ہیں؟ گھنڈی، اقتباس unquote نوڈ. لیکن کیونکہ زیادہ شبدبہل کے اعلامیہ میں پہلی لائن پر تھا - typedef struct نوڈ - اس سے پہلے، سب سے پہلے آیا کیونکہ گھوبگھرالی منحنی خطوط وحدانی، طرح طرح کی ہے پری تعلیم بجنا ہے، آپ کیا پتہ، مجھے ایک struct دے struct نوڈ سے ملاقات کی. سچ کہوں تو، مجھے بلا چیزیں پسند نہیں کرتے struct نوڈ، struct نوڈ تمام میرا کوڈ بھر میں. لیکن میں صرف، صرف کے اندر، ایک بار اسے استعمال کریں گے تاکہ میں مؤثر طریقے سے کر سکتے ہیں سرکلر میں ریفرنس کی ایک طرح سے نہیں پیدا ایک SE فی خود پوائنٹر، لیکن ایک کسی دوسرے کی پر پوائنٹر ایک جیسی قسم. تو یہ باہر کر دیتا ہے کہ ایک ڈیٹا ڈھانچے پر اس طرح، چند ہے ہو سکتا ہے کہ آپریشن ہمیں سود کی. ہم داخل کرنا چاہتے ہیں کر سکتے ہیں اس طرح ایک فہرست میں. ہم کو حذف کرنا چاہتے ہو سکتا ہے اس طرح ایک فہرست میں سے. ہم نے ایک کے لئے کی فہرست میں تلاش کرنا چاہتے ہیں کر سکتے ہیں قیمت، یا ایک سے زیادہ عام طور پر، گزرنا. اور گزرنا کا صرف ایک طریقہ ہے پسند ہیں بائیں سے شروع کہہ اور تمام منتقل حق کا راستہ. اور یہ بھی تھوڑا سا اور زیادہ کے ساتھ نوٹس، جدید ترین اعداد و شمار کے ڈھانچے، دو میرے ہم میں سے کچھ قرضے لے سکتا ہوں کہ تجویز گزشتہ دو ہفتوں کے خیالات اور نامی ایک تقریب پر عملدرآمد اس طرح تلاش. یہ سچ ہے یا واپس جا رہا ہے ، جھوٹے اشارہ، ہاں یا نہیں، (ن) کی فہرست میں ہے. اپنی دوسری دلیل ایک پوائنٹر ہے فہرست خود، تو ایک ایک نوڈ پر پوائنٹر. میں اس وقت کیا کرنے جا رہا ہوں تمام کا اعلان ہے ایک عارضی متغیر. ہم نے کنونشن کی طرف سے اس PTR فون کروں گا پوائنٹر کے لئے. اور میں نے اسے برابر تفویض فہرست کے شروع. اور اب جبکہ لوپ نوٹس. اتنی دیر پوائنٹر کے برابر نہیں ہے شہوت انگیز null، میں چیک کرنے کے لئے جا رہا ہوں. ہے پوائنٹر تیر (ن) کے برابر میں منظور کیا گیا تھا کہ ن؟ نئے - اور ایک منٹ رکو نحو کا ٹکڑا. تیر اچانک کیا ہے؟ جی ہاں؟ بالکل ٹھیک. تو جبکہ چند منٹ پہلے، ہم استعمال کیا جاتا ہے کچھ تک رسائی حاصل کرنے ڈاٹ سنکیتن ایک struct کے اندر، متغیر تو آپ struct نہیں ہے خود، لیکن ایک struct کے لئے ایک پوائنٹر، شکر ہے کہ نحو کا ایک ٹکڑا ہے کہ آخر بدیہی احساس کرتا ہے. تیر، پوائنٹر کی پیروی کرنے کا مطلب ہے کہ ہمارے تیر عام طور پر مطلب کی طرح pictorially، اور میں جانا اعداد و شمار کے میدان کے اندر. تو تیر نقطہ کے طور پر ایک ہی بات ہے، لیکن آپ کو ایک پوائنٹر ہے جب آپ اسے استعمال. تو، پھر recap اگر (ن) کے خانے struct کے اندر پوائنٹر کہا جاتا ہے برابر (ن) کے برابر ہے، سچ واپس. دوسری صورت میں، یہاں پر اس لائن - پوائنٹر اگلے پوائنٹر برابر ہے. تو یہ کیا کر رہا ہے، نوٹس، ہے تو میں فی الحال struct طرف اشارہ کر رہا ہوں 9، اور 9 پر مشتمل نمبر نہیں ہے میں دیکھ رہا ہوں - میں دیکھ رہا ہوں لگتا ہے کے لئے (ن) کے 50 برابر ہے - میں اپنے عارضی پوائنٹر کو اپ ڈیٹ کرنے جا رہا ہوں یہ نوڈ میں اشارہ نہیں کرنے کے لئے اب، لیکن پوائنٹر تیر اگلے، جو مجھے یہاں پیش کیا جا رہا ہے. اب، میں نے ایک بونڈر ہے احساس ہوا تعارف. بدھ کے روز، ہم اصل میں یہ کروں گا کچھ انسانوں کے ساتھ اور کچھ اور کے ساتھ ایک سست رفتار سے کوڈ. لیکن احساس ہے، اب ہم ہمارے اعداد و شمار کر رہے ہیں ڈھانچے زیادہ پیچیدہ ہے تاکہ ہماری الگورتھم، زیادہ موثر حاصل کر سکتے ہیں جس میں کے لئے ضروری ہونے جا رہا ہے pset چھ، ہم ایک بار پھر، میں لوڈ، جب ان لوگوں کو 150،000 الفاظ، لیکن ایسا کرنے کی ضرورت ہے مؤثر طریقے سے، اور مثالی طور پر، ایک تخلیق ہمارے صارفین نہیں میں چلاتی ہے پروگرام لکیری، نہیں مربع (ن) میں، لیکن میں مثالی میں مسلسل وقت،. ہم نے بدھ کے روز آپ کو نظر آئے گا. اسپیکر: اگلے CS50، ڈیوڈ میں اس کی بنیاد کیس بھول جاتا ہے. DAVID MALAN: اور وہ تم بھیجنے کا طریقہ یہ ہے کے ساتھ ٹیکسٹ پیغامات سی کیا - [مختلف ٹیکسٹ پیغام نوٹیفکیشن آواز]