1 00:00:07,360 --> 00:00:09,360 [Powered by Google Translate] চলুন অ্যারে সম্পর্কে কথা বলুন. 2 00:00:09,360 --> 00:00:12,780 তাই কেন আমরা যাও অ্যারে ব্যবহার করতে চান কি? 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 কোন যুক্তি আমরা একটি ছাত্র আইডি উপর কর্ম সঞ্চালন করতে চান, কপি করা এবং আটকানো করতে হবে 8 00:00:34,870 --> 00:00:36,870 এই জন্য ছাত্র ID-র প্রতিটি. 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 এবং id1 সঙ্গে এবং তাই id2, 3, এবং 4 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 ছাত্র ID-র পরিবর্তে 7 না? 16 00:01:05,360 --> 00:01:09,570 আপনি আপনার সোর্স কোড ফিরে যান এবং একটি id5 মধ্যে যুক্ত করার প্রয়োজন একটি id6,, 17 00:01:09,570 --> 00:01:14,260 কপি এবং পেস্ট করুন এবং পরীক্ষণের জন্য যুক্তিবিজ্ঞান যদি এই ID-2 নতুন আইডিতে শ্রেণীর অন্তর্গত. 18 00:01:14,260 --> 00:01:19,600 সমস্ত কিছুই এই ID-র সাথে সংযোগ একসঙ্গে আছে, তাই না থাকাতে কোন উপায় আছে 19 00:01:19,600 --> 00:01:22,040 প্রোগ্রাম ID-র জন্য 0 যাও 6 মাধ্যমে এই করবেন. 20 00:01:22,040 --> 00:01:26,120 অবশ্য, এখন আপনি বোঝেন যে আপনি 100 ছাত্র ID উপস্থিত রয়েছে. 21 00:01:26,120 --> 00:01:30,770 এটা আদর্শ কম আলাদাভাবে এই ID-র প্রতিটি ঘোষণা করা প্রয়োজন বলে মনে হচ্ছে এর শুরু, 22 00:01:30,770 --> 00:01:33,760 এবং কপি এবং যারা নতুন ID-র জন্য কোনো যুক্তি পেস্ট করুন. 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 শুধু কিছু n ছাত্র এবং আপনার প্রোগ্রামের ইউজার কি যে n হল জিজ্ঞাসা আছে. 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 >> এই সমস্ত সমস্যার সমাধান হয় অ্যারে সৌন্দর্য. 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 কিন্তু এখানে আমরা অ্যারে মৌলিক তথ্য কাঠামো মাত্র হিসাবে আপনি সি তা দেখতে পাবেন মনোনিবেশ করব 32 00:02:09,960 --> 00:02:14,030 একটি অ্যারের শুধু মেমরি বড় ব্লক. এটা এটি. 33 00:02:14,030 --> 00:02:17,770 যখন আমরা বলতে আমরা 10 পূর্ণসংখ্যার একটি শ্রেণীবিন্যাস আছে, যে অর্থ আমরা কিছু ব্লক আছে 34 00:02:17,770 --> 00:02:20,740 যে মেমরি হয় পর্যাপ্ত স্থান 10 পূর্ণসংখ্যার পৃথক রাখা. 35 00:02:29,930 --> 00:02:33,410 Assuming যে একটি পূর্ণসংখ্যা হয় 4 বাইট, এই এর মানে হল 10 পূর্ণসংখ্যার একটি শ্রেণীবিন্যাস 36 00:02:33,410 --> 00:02:37,180 একটি মেমরি 40 বাইট একটানা ব্লক. 37 00:02:42,660 --> 00:02:46,280 এমনকি যখন আপনি বহুমাত্রিক অ্যারে, যা আমরা এখানে যেতে না ব্যবহার করা, 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 ইন্টিজার এর বহুমাত্রিক অ্যারের দ্বারা একটি 3 আছে, 41 00:02:55,640 --> 00:03:00,650 তারপরে শুধু আপনার একটি প্রোগ্রাম সত্যিই 36 বাইট বড় ব্লক হিসাবে এই বিবেচনা করবে. 42 00:03:00,650 --> 00:03:05,460 পূর্ণসংখ্যার মোট সংখ্যা 3 বার 3, এবং প্রতিটি পূর্ণসংখ্যা লাগে 4 বাইট আপ. 43 00:03:05,460 --> 00:03:07,750 >> যাক এর একটি মৌলিক উদাহরণ কটাক্ষপাত করা. 44 00:03:07,750 --> 00:03:10,660 আমরা এখানে 2 প্রকাশক অ্যারে বিভিন্ন উপায়ে দেখতে পারেন. 45 00:03:15,660 --> 00:03:18,580 আমরা তাদের মধ্যে 1 মন্তব্য প্রোগ্রাম কম্পাইল জন্য আউট করতে হবে 46 00:03:18,580 --> 00:03:20,900 যেহেতু আমরা দুইবার এক্স ডিক্লেয়ার. 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 আমাদের ছাত্র আইডি উদাহরণ আগে যাচ্ছে, এই 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 সঙ্গে আকার N যে বন্ধনী ভিতরে নম্বর,, এই হল একটি অ্যারের তুলনায় বিজ্ঞপ্তি 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 Assuming যে একটি পূর্ণসংখ্যা হয় 4 বাইট, সম্পূর্ণ অ্যারে x এর একটি মেমরি 40 বাইট ব্লক. 64 00:04:37,460 --> 00:04:41,360 সুতরাং খুব x0 প্রথম ব্লক 4 বাইট বোঝায়. 65 00:04:45,810 --> 00:04:49,230 এক্স [1] পরবর্তী 4 বাইট ইত্যাদি বোঝায়. 66 00:04:49,230 --> 00:04:53,760 এর মানে হল x শুরু হয় সমস্ত প্রোগ্রাম কখনও ট্র্যাক রাখা প্রয়োজন. 67 00:04:55,660 --> 00:04:59,840 যদি আপনি এক্স [400] ব্যবহার করতে চান, তাহলে প্রোগ্রাম জানেন যে এই সমতূল্য 68 00:04:59,840 --> 00:05:03,460 যাও X আরম্ভের পরে মাত্র 1,600 বাইট. 69 00:05:03,460 --> 00:05:08,780 Where'd আমরা থেকে 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 পূর্ণসংখ্যার দীর্ঘ, কিন্তু আমাদের কিছুই যদি আমরা 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 এটি একটি খুব সাধারণ প্যাটার্ন, looping থেকে আমি = 0 অ্যারে দৈর্ঘ্যের 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 তারপর আমি বাড়তি, এবং আমরা অ্যারে মান 1 2 বার প্রথম স্পট নির্ধারণ করুন. 84 00:06:04,370 --> 00:06:10,170 তারপর আমি তার উপরে আবার বাড়তি এবং তাই পর্যন্ত আমরা অ্যারের মধ্যে 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 কিন্তু যে দূরে things ছিল. 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 চলুন এছাড়াও কি কটাক্ষপাত যদি আমরা N লাগা না প্রথম লুপ পরিবর্তন গ্রহণ 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 এখানে আমরা x শুরু অতিক্রম 10,000 জায়গা স্পর্শ করা হয়, 100 00:07:27,870 --> 00:07:31,920 যা স্পষ্ট হয় মেমরির এমন একটি জায়গায় আমরা স্পর্শ করা উচিত নয়. 101 00:07:31,920 --> 00:07:37,690 সুতরাং আমাদের অধিকাংশ দূর্ঘটনাক্রমে সম্ভবত 10,000 না করা পরিবর্তে N চাই, 102 00:07:37,690 --> 00:07:42,930 আমরা যদি এরকম কিছু আরো সূক্ষ্ম কি বলতে কিন্তু লেখার চেয়ে কম বা সমান N যাও 103 00:07:42,930 --> 00:07:46,830 এ জন্য লুপ শর্ত হিসাবে এন বিরোধিতা কম 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 শর্টকাট ব্যবহার করে পূর্ণসংখ্যার লিখতে পারেন দেখুন. 141 00:10:11,220 --> 00:10:14,470 পয়েন্টার অ্যারের সাথে, একটি উপায় ভালো একটি শর্টকাট কি আছে না. 142 00:10:14,470 --> 00:10:18,120 এটা কি আপনি অ্যারে করতে পারেন একটি ভূমিকা. 143 00:10:18,120 --> 00:10:20,990 তারা প্রায় প্রতিটি প্রোগ্রাম আপনাকে লিখতে দেখা. 144 00:10:20,990 --> 00:10:24,390 আশা করি আপনি এখন একজন ছাত্র ID-র উদাহরণ করছেন ভাল উপায় দেখতে পারেন 145 00:10:24,390 --> 00:10:26,710 থেকে ভিডিওর শুরুতে. 146 00:10:26,710 --> 00:10:29,960 >> আমার নাম Rob Bowden, এবং এই CS50.