[Powered by Google Translate] arrays کے بارے میں بات کرنے دو کیوں تو کبھی ہم arrays استعمال کرنے کے لئے کرنا چاہتے ہیں کریں گے؟ چلو کا کہنا ہے کہ آپ کو ایک پروگرام ہے کہ 5 طالب علم کی شناخت کو محفوظ کرنے کی ضرورت ہے ہے. یہ مناسب لگتا 5 علیحدہ متغیر کر سکتا ہے. وجوہات کی بنا پر ہم اس ملک کے تھوڑا سا میں نظر آئے گا کے لئے، ہم 0 سے گنتی شروع کر دیں گے. متغیر ہم کریں گے int id0، int id1، اور اسی طرح کی ہو جائے گا. کوئی منطق ہے ہم نے ایک طالب علم ID پر انجام دینے کے لئے چاہتے ہیں کو کاپی اور چسپاں رکھا جائے کی ضرورت ہو گی یہ طالب علم کی شناخت میں سے ہر ایک کے لئے. اگر ہم چیک کرنے کے لیے چاہتے ہیں جو طلباء کو CS50 میں ہونے ہیں، ہم اگر id0 نصاب میں طالب علم کی نمائندگی کرتا ہے چیک کرنے کے لیے سب سے پہلے کی ضرورت ہو گی. اس کے بعد اگلے طالب علم کے لئے بھی کرتے ہیں، ہم اور پیسٹ کرنے کی id0 کے لئے کوڈ کی کاپی کی ضرورت ہو گی اور id2، 3، اور 4 کے لئے id1 کے ساتھ اور اس id0 کے تمام واقعات کی جگہ لے لیں. جیسے ہی آپ نے سنا ہے کہ ہم میں کاپی اور پیسٹ کریں کی ضرورت ہے، تم سوچ رہا تھا کہ وہاں ایک بہتر حل ہے شروع کر دینا چاہئے. اب کیا اگر تمہیں احساس ہے آپ کو 5 طالب علم کی شناخت کی ضرورت نہیں ہے بلکہ 7؟ آپ کو آپ کے منبع کوڈ میں واپس جاؤ اور id5 میں شامل کرنے کی ضرورت ہے، id6 ایک اور پیسٹ پرکھنے کے لئے منطق کی کاپی اگر شناخت ان 2 نئی شناخت کے لئے کلاس سے تعلق رکھتے ہیں. ان تمام کی شناخت کے ساتھ منسلک کچھ بھی نہیں ہے، اور تو کہنے کا کوئی طریقہ نہیں ہے پروگرام 0 IDs کے لئے 6 کے ذریعے اس کے. ویسے اب تمہیں احساس ہے آپ کو 100 طالب علم کی شناخت ہے. یہ مثالی سے کم الگ الگ ان کی شناخت میں سے ہر ایک کا اعلان کرنے کی ضرورت پر لگتا شروع ہو رہا ہے، اور ان نئے کی شناخت کے لئے کوئی منطق کاپی پیسٹ. لیکن شاید ہم نے تعین کیا، کر رہے ہیں اور ہم نے اس کے تمام 100 طلباء کے لئے کرتے ہیں. لیکن کیا اگر تم نہیں جانتے کہ کتنے طالب علموں کو اصل میں ہیں؟ صرف کچھ ن طلباء اور آپ کے پروگرام صارف کیا ہے کہ (ن) ہے پوچھنا ہے. اہ اوہ. یہ بہت اچھی طرح سے کام کرنے والا نہیں ہے. آپ کا پروگرام صرف طالب علموں میں سے کچھ مسلسل نمبر کے لئے کام کرتا ہے. ان تمام مسائل کے حل arrays کی خوبصورتی ہے. تو جو ایک صف ہے؟ کچھ پروگرامنگ زبانوں میں ایک صف کی قسم تھوڑا ایسا کرنے کے قابل ہو سکتا ہے، لیکن یہاں ہم بنیادی صف آنکڑا ڈھانچہ پر توجہ مرکوز کے طور پر تم نے اسے C. میں دیکھیں گے ایک صف میں میموری کا ایک بڑا بلاک ہے. کہ یہ ہے. ہم کہتے ہیں کہ جب ہم 10 integers کے ایک صف ہے، یہ صرف کا مطلب ہے کہ ہم نے کچھ بلاک ہے میموری کا 10 علیحدہ integers منعقد کرنے کے لئے کافی بڑی ہے. یہ سمجھتے ہوئے کہ ایک عددی 4 بائٹس ہے، اس کا مطلب یہ ہے کہ 10 integers کے ایک صف 40 بائٹس کی یاد میں ایک مسلسل بلاک ہے. یہاں تک کہ جب آپ بہوایامی arrays، جو ہم یہاں میں نہیں جائیں گے کے لئے استعمال کرتے ہیں، یہ اب بھی میموری کا ایک بڑا بلاک ہے. بہوایامی سنکیتن صرف ایک سہولت ہے. اگر آپ کو 3 integers کثیرالابعاد سرنی کی طرف سے 3، تو آپ کے پروگرام 36 بائٹس کی ایک بڑی بلاک کے طور پر صرف سچ میں اس کا علاج کریں گے. integers کی کل تعداد 3 3 مرتبہ ہے، اور ہر عددی 4 بائٹس لیتا ہے. چلو بنیادی مثال کے طور پر ایک نظر ڈالیں. ہم یہاں اعلان arrays کے 2 مختلف طریقوں کو دیکھ سکتے ہیں. ہم ان میں سے 1 مرتب پروگرام کے لئے باہر تبصرہ کرنا پڑے گا چونکہ ہم X دو بار اعلان. ہم نے کا اعلان ان کی 2 اقسام کے درمیان تھوڑا سا مختلف میں سے کچھ پر ایک نظر لے لیں گے. ان دونوں لائنوں کے سائز N کی ایک صف کا اعلان، ہم 10 # (ن) کی وضاحت کریں. ہم آسانی کے طور پر صرف ایک مثبت عدد صحیح کے لئے صارف سکتا تھا اور ہمارے صف میں عناصر کی ایک بڑی تعداد کے طور پر عددی استعمال کیا جاتا ہے. یہ ہمارے طالب علم ID مثال کے طور پر پہلے کی طرح، مکمل طور پر الگ الگ 10 اعلان کی طرح ہے غیر حقیقی متغیر، x0، x1، x2، اور xN 1 پر. لائنز کو نظر انداز کرتے جہاں ہم صف کا اعلان، مربع بریکٹ کو برقرار نوٹس loops کے لئے اندر ہے. جب ہم X کی طرح کچھ لکھ [3] جس، میں X 3 بریکٹ کے طور پر پڑھیں گے، آپ اس کے بارے میں سوچ کر سکتے ہیں خیالی x3 کے لئے مطالبہ پسند ہے. سائز کہ، بریکٹ کے اندر تعداد (ن)، اس کا مطلب ایک صف کے ساتھ سے نوٹس جو ہم انڈیکس میں فون کروں گا، 0 سے N-1 کے لئے کچھ بھی کر سکتے ہیں، جو N سوچکانکوں کی کل ہے. کس طرح یہ اصل میں کام کرتا ہے کے بارے میں سوچنا یاد رکھیں کہ صف میموری کا ایک بڑا بلاک ہے. یہ سمجھتے ہوئے کہ ایک عددی 4 بائٹس ہے، پوری صف X میموری کا ایک بائٹ 40 بلاک ہے. تو x0 بلاک کی بہت پہلے 4 بائٹس سے مراد ہے. X [1] اگلے 4 بائٹس اور اس سے مراد ہے. اس کا مطلب یہ ہے کہ ایکس کے آغاز میں تمام پروگرام ہے کبھی کا ٹریک رکھنے کے لئے کی ضرورت ہے ہے. اگر آپ X [400] استعمال کرنا چاہتے ہیں، تو پروگرام جانتا ہے کہ اس کے برابر ہے X کے آغاز کے بعد صرف 1،600 بائٹس. کہاں ہم سے 1،600 بائٹس حاصل ہے؟ یہ عددی فی 400 4 مرتبہ بائٹس ہے. پر منتقل کرنے سے پہلے، یہ بہت ضروری ہے احساس ہے کہ سی انڈیکس ہے کہ ہم صف میں استعمال کرتے ہیں کوئی نافذ کرنے والے ہے. ہمارا بڑا بلاک صرف 10 integers طویل ہے، لیکن کچھ بھی نہیں ہم پر چللانا اگر ہم X [20] لکھیں گے یا اس سے بھی X [-5]. انڈیکس ایک نمبر بھی نہیں ہے. یہ کسی بھی صوابدیدی اظہار ہو سکتا ہے. پروگرام میں ہم سے صف میں انڈیکس پر لوپ کے لئے متغیر میں استعمال کرتے ہیں. یہ ایک بہت عام پیٹرن ہے، میں = 0 سے صف کی لمبائی کے looping اور پھر میں صف کے لئے سوچکانک کے طور پر استعمال کر رہے ہیں. ، اس طرح آپ کو پوری صف پر مؤثر طریقے سے لوپ میں اور آپ کو صف میں ہر جگہ یا کچھ حساب کتاب کے لئے اس کا استعمال تفویض کر سکتے ہیں. لوپ کے لئے سب سے پہلے میں، میں نے 0 سے شروع ہوتی ہے، اور تو اس صف میں 0 کی جگہ، قدر 0 اوقات 2 تفویض کریں گے. تو میں increments، اور ہم صف قیمت 1 اوقات 2 میں پہلی جگہ دیتےہیں. پھر اپ میں بار اور اس increments جب تک ہم صف میں N-1 کی پوزیشن تفویض قیمت N-1 2 مرتبہ. تو ہم نے پہلے 10 بھی تعداد کے ساتھ ایک صف کو تشکیل دے دیا ہے. شاید evens X سے ویرئیےبل کے لئے تھوڑا بہتر نام ہوتا لیکن یہ چیزیں دور دیا ہوتا. لوپ کے لئے دوسری تو اقدار ہے کہ ہم نے پہلے سے ہی صف کے اندر محفوظ ہیں پرنٹ ہے. چلو صف کا اعلان دونوں اقسام کے ساتھ پروگرام چلا رہا کرنے کی کوشش کریں اور پروگرام کی پیداوار میں ایک نظر رکھنا. جہاں تک ہم کے طور پر دیکھ سکتے ہیں، پروگرام کا اعلان دونوں اقسام کے لئے اسی طرح برتاؤ کرتی ہے. چلو بھی کیا ہوتا ہے پر ایک نظر اگر ہم پہلے لوپ (ن) کو نہیں روک تبدیل بلکہ 10،000 کہنا. صف کے آخر سے باہر راستہ. افوہ. ہو سکتا ہے آپ کو یہ پہلے بھی دیکھا ہے. ایک انقطاع غلطی کا مطلب ہے کہ آپ کا پروگرام گر کر تباہ ہو گیا ہے. آپ ان کو دیکھ کر شروع جب آپ میموری کے علاقوں میں آپ کو چھو نہیں کیا جانا چاہئے چھو. یہاں ہم ایکس کے آغاز سے باہر 10،000 مقامات کو چھو رہے ہیں، جو واضح یاد میں ایک جگہ ہم چھونے نہیں رکھا جائے ہے. لہذا ہم میں سے سب سے زیادہ شاید غلطی سے 10،000 (ن) کے بجائے ڈال دیں گے، لیکن کیا ہوا اگر ہم طرح ٹھیک ٹھیک کچھ کرنا لکھنے سے کم یا (ن) کے برابر کا کہنا ہے کہ کے لئے لوپ حالت کے طور پر کی مخالفت میں N. سے کم ، یاد رکھیں کہ صرف ایک صف 0 سے N-1 کے سوچکانکوں ہے جس کا مطلب یہ ہے کہ انڈیکس N صف کے آخر سے باہر ہے. پروگرام کے تحت اس کیس میں کریش نہیں، لیکن ہو سکتا ہے یہ اب بھی ایک خامی ہے. اصل میں، یہ غلطی بہت عام ہے کہ یہ اس کا اپنا نام ہے ہے، 1 خرابی کی طرف سے ایک دور ہے. یہ مبادیات کے لئے ہے. تو صف کا اعلان 2 اقسام کے درمیان بڑے فرق ہیں؟ ایک فرق ہے جہاں میموری کا بڑا بلاک جاتا ہے. پہلی اقرار نامے میں، جو میں نے قسم بریکٹ صف میں فون کروں گا، لیکن اس کی طرف سے ہے کوئی روایتی نام کا مطلب ہے کہ، اسٹیک پر جانا جائے گا. جبکہ دوسری ہے، جو میں نے قسم پوائنٹر صف میں فون کروں گا میں، یہ ڈھیر پر جانا جائے گا. اس کا مطلب یہ ہے کہ جب تقریب کی واپسی، بریکٹ صف خود کار طریقے سے deallocated رکھا جائے گا، کے طور پر آپ پوائنٹر صف مفت explicitily رابطہ کرنا چاہئے جبکہ یا کوئی اور آپ کو ایک میموری لیک ہے. کے علاوہ، بریکٹ صف اصل میں ایک متغیر نہیں ہے. یہ بہت اہم ہے. یہ صرف ایک نشانی ہے. آپ اس کی مسلسل کہ کمپائلر آپ کے لئے منتخب کے طور پر سوچ سکتے ہیں. اس کا مطلب یہ ہے کہ ہم X + + بریکٹ قسم کے ساتھ ایسا کچھ نہیں کر سکتے، اگرچہ اس پوائنٹر قسم کے ساتھ بالکل درست ہے. پوائنٹر قسم متغیر ہے. پوائنٹر کی قسم کے لئے، ہم نے میموری 2 الگ الگ بلاکس ہیں. متغیر x خود اسٹیک میں جمع کیا ہے اور صرف ایک واحد پوائنٹر ہے، لیکن میموری کے بڑے بلاک ڈھیر پر محفوظ کیا جاتا ہے. اسٹیک پر متغیر x ایڈریس ذخیرہ ڈھیر پر میموری کے بڑے بلاک کی. اس کا ایک مطلب آپریٹر کے سائز کے ساتھ ہے. اگر آپ بریکٹ صف کے سائز کے لئے سے دعا گو ہیں، اس آپ میموری کے بڑے بلاک کا سائز دے گا، 40 بائٹس کی طرح کچھ، لیکن اگر آپ صف پوائنٹر قسم کے سائز کے لئے سے دعا گو ہیں، آپ کو متغیر x کو خود، جس کے آلے پر ہونے کا امکان صرف 4 بائٹس ہے کا سائز دے گا. قسم پوائنٹر صف کا استعمال کرتے ہوئے، یہ ناممکن ہے کہ براہ راست کے لئے میں پوچھنا میموری کے بڑے بلاک کا سائز. یہ عام طور پر پابندیوں کے زیادہ نہیں ہے کیونکہ ہم بہت کم سائز چاہتا میموری کے بڑے بلاک، اور ہم نے اسے عام طور پر اگر ہم اس کی ضرورت کا حساب کر سکتے ہیں. آخر میں، بریکٹ صف ہمیں ایک صف کی ابتدا کے لئے ایک شارٹ کٹ کے ساتھ فراہم کرنے کے لئے ہوتا ہے. چلو دیکھتے ہیں کہ کس طرح ہم نے پہلے 10 شارٹ کٹ initilization کا استعمال کرتے ہوئے بھی integers لکھ سکتے تھے. پوائنٹر صف کے ساتھ، اس طرح ایک شارٹ کٹ کا کوئی راستہ نہیں ہے. یہ صرف آپ arrays کے ساتھ کیا کر سکتے ہیں کے لئے ایک تعارف ہے. وہ تقریبا ہر پروگرام آپ کے لکھنے میں دکھاتے ہیں. امید ہے کہ اب آپ طالب علم آئی ڈیز مثال کے طور پر کرنے کے بہتر طریقے سے دیکھ سکتے ہیں ویڈیو کے شروع سے ہی. میرا نام Rob Bowden ہے، اور اس CS50 ہے.