1 00:00:07,360 --> 00:00:09,360 [Powered by Google Translate] arrays کے بارے میں بات کرنے دو 2 00:00:09,360 --> 00:00:12,780 کیوں تو کبھی ہم arrays استعمال کرنے کے لئے کرنا چاہتے ہیں کریں گے؟ 3 00:00:12,780 --> 00:00:17,210 چلو کا کہنا ہے کہ آپ کو ایک پروگرام ہے کہ 5 طالب علم کی شناخت کو محفوظ کرنے کی ضرورت ہے ہے. 4 00:00:17,210 --> 00:00:21,270 یہ مناسب لگتا 5 علیحدہ متغیر کر سکتا ہے. 5 00:00:21,270 --> 00:00:24,240 وجوہات کی بنا پر ہم اس ملک کے تھوڑا سا میں نظر آئے گا کے لئے، ہم 0 سے گنتی شروع کر دیں گے. 6 00:00:24,240 --> 00:00:30,700 متغیر ہم کریں گے int id0، int id1، اور اسی طرح کی ہو جائے گا. 7 00:00:30,700 --> 00:00:34,870 کوئی منطق ہے ہم نے ایک طالب علم ID پر انجام دینے کے لئے چاہتے ہیں کو کاپی اور چسپاں رکھا جائے کی ضرورت ہو گی 8 00:00:34,870 --> 00:00:36,870 یہ طالب علم کی شناخت میں سے ہر ایک کے لئے. 9 00:00:36,870 --> 00:00:39,710 اگر ہم چیک کرنے کے لیے چاہتے ہیں جو طلباء کو CS50 میں ہونے ہیں، 10 00:00:39,710 --> 00:00:43,910 ہم اگر id0 نصاب میں طالب علم کی نمائندگی کرتا ہے چیک کرنے کے لیے سب سے پہلے کی ضرورت ہو گی. 11 00:00:43,910 --> 00:00:48,070 اس کے بعد اگلے طالب علم کے لئے بھی کرتے ہیں، ہم اور پیسٹ کرنے کی id0 کے لئے کوڈ کی کاپی کی ضرورت ہو گی 12 00:00:48,070 --> 00:00:54,430 اور id2، 3، اور 4 کے لئے id1 کے ساتھ اور اس id0 کے تمام واقعات کی جگہ لے لیں. 13 00:00:54,430 --> 00:00:57,560 >> جیسے ہی آپ نے سنا ہے کہ ہم میں کاپی اور پیسٹ کریں کی ضرورت ہے، 14 00:00:57,560 --> 00:01:00,440 تم سوچ رہا تھا کہ وہاں ایک بہتر حل ہے شروع کر دینا چاہئے. 15 00:01:00,440 --> 00:01:05,360 اب کیا اگر تمہیں احساس ہے آپ کو 5 طالب علم کی شناخت کی ضرورت نہیں ہے بلکہ 7؟ 16 00:01:05,360 --> 00:01:09,570 آپ کو آپ کے منبع کوڈ میں واپس جاؤ اور id5 میں شامل کرنے کی ضرورت ہے، id6 ایک 17 00:01:09,570 --> 00:01:14,260 اور پیسٹ پرکھنے کے لئے منطق کی کاپی اگر شناخت ان 2 نئی شناخت کے لئے کلاس سے تعلق رکھتے ہیں. 18 00:01:14,260 --> 00:01:19,600 ان تمام کی شناخت کے ساتھ منسلک کچھ بھی نہیں ہے، اور تو کہنے کا کوئی طریقہ نہیں ہے 19 00:01:19,600 --> 00:01:22,040 پروگرام 0 IDs کے لئے 6 کے ذریعے اس کے. 20 00:01:22,040 --> 00:01:26,120 ویسے اب تمہیں احساس ہے آپ کو 100 طالب علم کی شناخت ہے. 21 00:01:26,120 --> 00:01:30,770 یہ مثالی سے کم الگ الگ ان کی شناخت میں سے ہر ایک کا اعلان کرنے کی ضرورت پر لگتا شروع ہو رہا ہے، 22 00:01:30,770 --> 00:01:33,760 اور ان نئے کی شناخت کے لئے کوئی منطق کاپی پیسٹ. 23 00:01:33,760 --> 00:01:38,380 لیکن شاید ہم نے تعین کیا، کر رہے ہیں اور ہم نے اس کے تمام 100 طلباء کے لئے کرتے ہیں. 24 00:01:38,380 --> 00:01:42,240 لیکن کیا اگر تم نہیں جانتے کہ کتنے طالب علموں کو اصل میں ہیں؟ 25 00:01:42,240 --> 00:01:47,320 صرف کچھ ن طلباء اور آپ کے پروگرام صارف کیا ہے کہ (ن) ہے پوچھنا ہے. 26 00:01:47,320 --> 00:01:50,250 اہ اوہ. یہ بہت اچھی طرح سے کام کرنے والا نہیں ہے. 27 00:01:50,250 --> 00:01:53,820 آپ کا پروگرام صرف طالب علموں میں سے کچھ مسلسل نمبر کے لئے کام کرتا ہے. 28 00:01:53,820 --> 00:01:57,520 >> ان تمام مسائل کے حل arrays کی خوبصورتی ہے. 29 00:01:57,520 --> 00:01:59,930 تو جو ایک صف ہے؟ 30 00:01:59,930 --> 00:02:04,480 کچھ پروگرامنگ زبانوں میں ایک صف کی قسم تھوڑا ایسا کرنے کے قابل ہو سکتا ہے، 31 00:02:04,480 --> 00:02:09,960 لیکن یہاں ہم بنیادی صف آنکڑا ڈھانچہ پر توجہ مرکوز کے طور پر تم نے اسے C. میں دیکھیں گے 32 00:02:09,960 --> 00:02:14,030 ایک صف میں میموری کا ایک بڑا بلاک ہے. کہ یہ ہے. 33 00:02:14,030 --> 00:02:17,770 ہم کہتے ہیں کہ جب ہم 10 integers کے ایک صف ہے، یہ صرف کا مطلب ہے کہ ہم نے کچھ بلاک ہے 34 00:02:17,770 --> 00:02:20,740 میموری کا 10 علیحدہ integers منعقد کرنے کے لئے کافی بڑی ہے. 35 00:02:29,930 --> 00:02:33,410 یہ سمجھتے ہوئے کہ ایک عددی 4 بائٹس ہے، اس کا مطلب یہ ہے کہ 10 integers کے ایک صف 36 00:02:33,410 --> 00:02:37,180 40 بائٹس کی یاد میں ایک مسلسل بلاک ہے. 37 00:02:42,660 --> 00:02:46,280 یہاں تک کہ جب آپ بہوایامی arrays، جو ہم یہاں میں نہیں جائیں گے کے لئے استعمال کرتے ہیں، 38 00:02:46,280 --> 00:02:49,200 یہ اب بھی میموری کا ایک بڑا بلاک ہے. 39 00:02:49,200 --> 00:02:51,840 بہوایامی سنکیتن صرف ایک سہولت ہے. 40 00:02:51,840 --> 00:02:55,640 اگر آپ کو 3 integers کثیرالابعاد سرنی کی طرف سے 3، 41 00:02:55,640 --> 00:03:00,650 تو آپ کے پروگرام 36 بائٹس کی ایک بڑی بلاک کے طور پر صرف سچ میں اس کا علاج کریں گے. 42 00:03:00,650 --> 00:03:05,460 integers کی کل تعداد 3 3 مرتبہ ہے، اور ہر عددی 4 بائٹس لیتا ہے. 43 00:03:05,460 --> 00:03:07,750 >> چلو بنیادی مثال کے طور پر ایک نظر ڈالیں. 44 00:03:07,750 --> 00:03:10,660 ہم یہاں اعلان arrays کے 2 مختلف طریقوں کو دیکھ سکتے ہیں. 45 00:03:15,660 --> 00:03:18,580 ہم ان میں سے 1 مرتب پروگرام کے لئے باہر تبصرہ کرنا پڑے گا 46 00:03:18,580 --> 00:03:20,900 چونکہ ہم X دو بار اعلان. 47 00:03:20,900 --> 00:03:25,140 ہم نے کا اعلان ان کی 2 اقسام کے درمیان تھوڑا سا مختلف میں سے کچھ پر ایک نظر لے لیں گے. 48 00:03:25,140 --> 00:03:28,560 ان دونوں لائنوں کے سائز N کی ایک صف کا اعلان، 49 00:03:28,560 --> 00:03:30,740 ہم 10 # (ن) کی وضاحت کریں. 50 00:03:30,740 --> 00:03:34,460 ہم آسانی کے طور پر صرف ایک مثبت عدد صحیح کے لئے صارف سکتا تھا 51 00:03:34,460 --> 00:03:37,250 اور ہمارے صف میں عناصر کی ایک بڑی تعداد کے طور پر عددی استعمال کیا جاتا ہے. 52 00:03:37,250 --> 00:03:41,960 یہ ہمارے طالب علم ID مثال کے طور پر پہلے کی طرح، مکمل طور پر الگ الگ 10 اعلان کی طرح ہے 53 00:03:41,960 --> 00:03:49,000 غیر حقیقی متغیر، x0، x1، x2، اور xN 1 پر. 54 00:03:57,270 --> 00:04:00,840 لائنز کو نظر انداز کرتے جہاں ہم صف کا اعلان، مربع بریکٹ کو برقرار نوٹس 55 00:04:00,840 --> 00:04:02,090 loops کے لئے اندر ہے. 56 00:04:02,090 --> 00:04:09,660 جب ہم X کی طرح کچھ لکھ [3] جس، میں X 3 بریکٹ کے طور پر پڑھیں گے، 57 00:04:09,660 --> 00:04:13,090 آپ اس کے بارے میں سوچ کر سکتے ہیں خیالی x3 کے لئے مطالبہ پسند ہے. 58 00:04:13,090 --> 00:04:17,519 سائز کہ، بریکٹ کے اندر تعداد (ن)، اس کا مطلب ایک صف کے ساتھ سے نوٹس 59 00:04:17,519 --> 00:04:22,630 جو ہم انڈیکس میں فون کروں گا، 0 سے N-1 کے لئے کچھ بھی کر سکتے ہیں، 60 00:04:22,630 --> 00:04:25,660 جو N سوچکانکوں کی کل ہے. 61 00:04:25,660 --> 00:04:28,260 >> کس طرح یہ اصل میں کام کرتا ہے کے بارے میں سوچنا 62 00:04:28,260 --> 00:04:31,260 یاد رکھیں کہ صف میموری کا ایک بڑا بلاک ہے. 63 00:04:31,260 --> 00:04:37,460 یہ سمجھتے ہوئے کہ ایک عددی 4 بائٹس ہے، پوری صف X میموری کا ایک بائٹ 40 بلاک ہے. 64 00:04:37,460 --> 00:04:41,360 تو x0 بلاک کی بہت پہلے 4 بائٹس سے مراد ہے. 65 00:04:45,810 --> 00:04:49,230 X [1] اگلے 4 بائٹس اور اس سے مراد ہے. 66 00:04:49,230 --> 00:04:53,760 اس کا مطلب یہ ہے کہ ایکس کے آغاز میں تمام پروگرام ہے کبھی کا ٹریک رکھنے کے لئے کی ضرورت ہے ہے. 67 00:04:55,660 --> 00:04:59,840 اگر آپ X [400] استعمال کرنا چاہتے ہیں، تو پروگرام جانتا ہے کہ اس کے برابر ہے 68 00:04:59,840 --> 00:05:03,460 X کے آغاز کے بعد صرف 1،600 بائٹس. 69 00:05:03,460 --> 00:05:08,780 کہاں ہم سے 1،600 بائٹس حاصل ہے؟ یہ عددی فی 400 4 مرتبہ بائٹس ہے. 70 00:05:08,780 --> 00:05:13,170 >> پر منتقل کرنے سے پہلے، یہ بہت ضروری ہے احساس ہے کہ سی 71 00:05:13,170 --> 00:05:17,080 انڈیکس ہے کہ ہم صف میں استعمال کرتے ہیں کوئی نافذ کرنے والے ہے. 72 00:05:17,080 --> 00:05:23,180 ہمارا بڑا بلاک صرف 10 integers طویل ہے، لیکن کچھ بھی نہیں ہم پر چللانا اگر ہم X [20] لکھیں گے 73 00:05:23,180 --> 00:05:26,060 یا اس سے بھی X [-5]. 74 00:05:26,060 --> 00:05:28,240 انڈیکس ایک نمبر بھی نہیں ہے. 75 00:05:28,240 --> 00:05:30,630 یہ کسی بھی صوابدیدی اظہار ہو سکتا ہے. 76 00:05:30,630 --> 00:05:34,800 پروگرام میں ہم سے صف میں انڈیکس پر لوپ کے لئے متغیر میں استعمال کرتے ہیں. 77 00:05:34,800 --> 00:05:40,340 یہ ایک بہت عام پیٹرن ہے، میں = 0 سے صف کی لمبائی کے looping 78 00:05:40,340 --> 00:05:43,350 اور پھر میں صف کے لئے سوچکانک کے طور پر استعمال کر رہے ہیں. 79 00:05:43,350 --> 00:05:46,160 ، اس طرح آپ کو پوری صف پر مؤثر طریقے سے لوپ میں 80 00:05:46,160 --> 00:05:50,600 اور آپ کو صف میں ہر جگہ یا کچھ حساب کتاب کے لئے اس کا استعمال تفویض کر سکتے ہیں. 81 00:05:50,600 --> 00:05:53,920 >> لوپ کے لئے سب سے پہلے میں، میں نے 0 سے شروع ہوتی ہے، 82 00:05:53,920 --> 00:05:58,680 اور تو اس صف میں 0 کی جگہ، قدر 0 اوقات 2 تفویض کریں گے. 83 00:05:58,680 --> 00:06:04,370 تو میں increments، اور ہم صف قیمت 1 اوقات 2 میں پہلی جگہ دیتےہیں. 84 00:06:04,370 --> 00:06:10,170 پھر اپ میں بار اور اس increments جب تک ہم صف میں N-1 کی پوزیشن تفویض 85 00:06:10,170 --> 00:06:13,370 قیمت N-1 2 مرتبہ. 86 00:06:13,370 --> 00:06:17,810 تو ہم نے پہلے 10 بھی تعداد کے ساتھ ایک صف کو تشکیل دے دیا ہے. 87 00:06:17,810 --> 00:06:21,970 شاید evens X سے ویرئیےبل کے لئے تھوڑا بہتر نام ہوتا 88 00:06:21,970 --> 00:06:24,760 لیکن یہ چیزیں دور دیا ہوتا. 89 00:06:24,760 --> 00:06:30,210 لوپ کے لئے دوسری تو اقدار ہے کہ ہم نے پہلے سے ہی صف کے اندر محفوظ ہیں پرنٹ ہے. 90 00:06:30,210 --> 00:06:33,600 >> چلو صف کا اعلان دونوں اقسام کے ساتھ پروگرام چلا رہا کرنے کی کوشش کریں 91 00:06:33,600 --> 00:06:36,330 اور پروگرام کی پیداوار میں ایک نظر رکھنا. 92 00:06:51,450 --> 00:06:57,020 جہاں تک ہم کے طور پر دیکھ سکتے ہیں، پروگرام کا اعلان دونوں اقسام کے لئے اسی طرح برتاؤ کرتی ہے. 93 00:06:57,020 --> 00:07:02,230 چلو بھی کیا ہوتا ہے پر ایک نظر اگر ہم پہلے لوپ (ن) کو نہیں روک تبدیل 94 00:07:02,230 --> 00:07:05,040 بلکہ 10،000 کہنا. 95 00:07:05,040 --> 00:07:07,430 صف کے آخر سے باہر راستہ. 96 00:07:14,700 --> 00:07:17,210 افوہ. ہو سکتا ہے آپ کو یہ پہلے بھی دیکھا ہے. 97 00:07:17,210 --> 00:07:20,440 ایک انقطاع غلطی کا مطلب ہے کہ آپ کا پروگرام گر کر تباہ ہو گیا ہے. 98 00:07:20,440 --> 00:07:24,430 آپ ان کو دیکھ کر شروع جب آپ میموری کے علاقوں میں آپ کو چھو نہیں کیا جانا چاہئے چھو. 99 00:07:24,430 --> 00:07:27,870 یہاں ہم ایکس کے آغاز سے باہر 10،000 مقامات کو چھو رہے ہیں، 100 00:07:27,870 --> 00:07:31,920 جو واضح یاد میں ایک جگہ ہم چھونے نہیں رکھا جائے ہے. 101 00:07:31,920 --> 00:07:37,690 لہذا ہم میں سے سب سے زیادہ شاید غلطی سے 10،000 (ن) کے بجائے ڈال دیں گے، 102 00:07:37,690 --> 00:07:42,930 لیکن کیا ہوا اگر ہم طرح ٹھیک ٹھیک کچھ کرنا لکھنے سے کم یا (ن) کے برابر کا کہنا ہے کہ 103 00:07:42,930 --> 00:07:46,830 کے لئے لوپ حالت کے طور پر کی مخالفت میں N. سے کم 104 00:07:46,830 --> 00:07:50,100 ، یاد رکھیں کہ صرف ایک صف 0 سے N-1 کے سوچکانکوں ہے 105 00:07:50,100 --> 00:07:54,510 جس کا مطلب یہ ہے کہ انڈیکس N صف کے آخر سے باہر ہے. 106 00:07:54,510 --> 00:07:58,050 پروگرام کے تحت اس کیس میں کریش نہیں، لیکن ہو سکتا ہے یہ اب بھی ایک خامی ہے. 107 00:07:58,050 --> 00:08:01,950 اصل میں، یہ غلطی بہت عام ہے کہ یہ اس کا اپنا نام ہے ہے، 108 00:08:01,950 --> 00:08:03,970 1 خرابی کی طرف سے ایک دور ہے. 109 00:08:03,970 --> 00:08:05,970 >> یہ مبادیات کے لئے ہے. 110 00:08:05,970 --> 00:08:09,960 تو صف کا اعلان 2 اقسام کے درمیان بڑے فرق ہیں؟ 111 00:08:09,960 --> 00:08:13,960 ایک فرق ہے جہاں میموری کا بڑا بلاک جاتا ہے. 112 00:08:13,960 --> 00:08:17,660 پہلی اقرار نامے میں، جو میں نے قسم بریکٹ صف میں فون کروں گا، 113 00:08:17,660 --> 00:08:20,300 لیکن اس کی طرف سے ہے کوئی روایتی نام کا مطلب ہے کہ، 114 00:08:20,300 --> 00:08:22,480 اسٹیک پر جانا جائے گا. 115 00:08:22,480 --> 00:08:27,450 جبکہ دوسری ہے، جو میں نے قسم پوائنٹر صف میں فون کروں گا میں، یہ ڈھیر پر جانا جائے گا. 116 00:08:27,450 --> 00:08:32,480 اس کا مطلب یہ ہے کہ جب تقریب کی واپسی، بریکٹ صف خود کار طریقے سے deallocated رکھا جائے گا، 117 00:08:32,480 --> 00:08:36,419 کے طور پر آپ پوائنٹر صف مفت explicitily رابطہ کرنا چاہئے جبکہ 118 00:08:36,419 --> 00:08:38,010 یا کوئی اور آپ کو ایک میموری لیک ہے. 119 00:08:38,010 --> 00:08:42,750 کے علاوہ، بریکٹ صف اصل میں ایک متغیر نہیں ہے. 120 00:08:42,750 --> 00:08:45,490 یہ بہت اہم ہے. یہ صرف ایک نشانی ہے. 121 00:08:45,490 --> 00:08:49,160 آپ اس کی مسلسل کہ کمپائلر آپ کے لئے منتخب کے طور پر سوچ سکتے ہیں. 122 00:08:49,160 --> 00:08:52,970 اس کا مطلب یہ ہے کہ ہم X + + بریکٹ قسم کے ساتھ ایسا کچھ نہیں کر سکتے، 123 00:08:52,970 --> 00:08:56,240 اگرچہ اس پوائنٹر قسم کے ساتھ بالکل درست ہے. 124 00:08:56,240 --> 00:08:58,270 >> پوائنٹر قسم متغیر ہے. 125 00:08:58,270 --> 00:09:01,510 پوائنٹر کی قسم کے لئے، ہم نے میموری 2 الگ الگ بلاکس ہیں. 126 00:09:01,510 --> 00:09:06,060 متغیر x خود اسٹیک میں جمع کیا ہے اور صرف ایک واحد پوائنٹر ہے، 127 00:09:06,060 --> 00:09:08,620 لیکن میموری کے بڑے بلاک ڈھیر پر محفوظ کیا جاتا ہے. 128 00:09:08,620 --> 00:09:11,010 اسٹیک پر متغیر x ایڈریس ذخیرہ 129 00:09:11,010 --> 00:09:14,010 ڈھیر پر میموری کے بڑے بلاک کی. 130 00:09:14,010 --> 00:09:17,370 اس کا ایک مطلب آپریٹر کے سائز کے ساتھ ہے. 131 00:09:17,370 --> 00:09:22,480 اگر آپ بریکٹ صف کے سائز کے لئے سے دعا گو ہیں، اس آپ میموری کے بڑے بلاک کا سائز دے گا، 132 00:09:22,480 --> 00:09:24,620 40 بائٹس کی طرح کچھ، 133 00:09:24,620 --> 00:09:26,920 لیکن اگر آپ صف پوائنٹر قسم کے سائز کے لئے سے دعا گو ہیں، 134 00:09:26,920 --> 00:09:32,740 آپ کو متغیر x کو خود، جس کے آلے پر ہونے کا امکان صرف 4 بائٹس ہے کا سائز دے گا. 135 00:09:32,740 --> 00:09:36,530 قسم پوائنٹر صف کا استعمال کرتے ہوئے، یہ ناممکن ہے کہ براہ راست کے لئے میں پوچھنا 136 00:09:36,530 --> 00:09:38,530 میموری کے بڑے بلاک کا سائز. 137 00:09:38,530 --> 00:09:42,530 یہ عام طور پر پابندیوں کے زیادہ نہیں ہے کیونکہ ہم بہت کم سائز چاہتا 138 00:09:42,530 --> 00:09:46,980 میموری کے بڑے بلاک، اور ہم نے اسے عام طور پر اگر ہم اس کی ضرورت کا حساب کر سکتے ہیں. 139 00:09:46,980 --> 00:09:51,490 >> آخر میں، بریکٹ صف ہمیں ایک صف کی ابتدا کے لئے ایک شارٹ کٹ کے ساتھ فراہم کرنے کے لئے ہوتا ہے. 140 00:09:51,490 --> 00:09:56,130 چلو دیکھتے ہیں کہ کس طرح ہم نے پہلے 10 شارٹ کٹ initilization کا استعمال کرتے ہوئے بھی integers لکھ سکتے تھے. 141 00:10:11,220 --> 00:10:14,470 پوائنٹر صف کے ساتھ، اس طرح ایک شارٹ کٹ کا کوئی راستہ نہیں ہے. 142 00:10:14,470 --> 00:10:18,120 یہ صرف آپ arrays کے ساتھ کیا کر سکتے ہیں کے لئے ایک تعارف ہے. 143 00:10:18,120 --> 00:10:20,990 وہ تقریبا ہر پروگرام آپ کے لکھنے میں دکھاتے ہیں. 144 00:10:20,990 --> 00:10:24,390 امید ہے کہ اب آپ طالب علم آئی ڈیز مثال کے طور پر کرنے کے بہتر طریقے سے دیکھ سکتے ہیں 145 00:10:24,390 --> 00:10:26,710 ویڈیو کے شروع سے ہی. 146 00:10:26,710 --> 00:10:29,960 >> میرا نام Rob Bowden ہے، اور اس CS50 ہے.