[Powered by Google Translate] চলুন অ্যারে সম্পর্কে কথা বলুন.
তাই কেন আমরা যাও অ্যারে ব্যবহার করতে চান কি?
ভাল কিছু বলতে আপনি একটি প্রোগ্রাম যা 5 ছাত্রদের পরিচয় সঞ্চয় প্রয়োজন আছে.
এটি 5 পৃথক ভেরিয়েবল আছে যুক্তিসঙ্গত মনে হতে পারে.
কারণ আমরা কিছুক্ষণের মধ্যে দেখতে পাবেন যে, আমরা 0 থেকে গণনা শুরু করব.
ভেরিয়েবল আমরা করতে হবে int-id0, int-id1, এবং তাই করা হবে.
কোন যুক্তি আমরা একটি ছাত্র আইডি উপর কর্ম সঞ্চালন করতে চান, কপি করা এবং আটকানো করতে হবে
এই জন্য ছাত্র ID-র প্রতিটি.
যদি আমরা যা ছাত্র CS50 করা ঘটতে চেক করতে চান,
আমরা প্রথমে যদি id0 উপস্থাপন কোর্সে ছাত্র চেক করতে হবে.
তারপর পরবর্তী ছাত্র জন্য একই না, আমরা এবং কপি id0 জন্য কোড কপি করে পেস্ট করতে হবে
এবং id1 সঙ্গে এবং তাই id2, 3, এবং 4 id0 জন্য সব ঘটনার প্রতিস্থাপন করুন.
>> যত তাড়াতাড়ি আপনি শুনতে যে আমরা এবং কপি ও পেস্ট করতে,
আপনি চিন্তা যে একটি ভাল সমাধান পাওয়া শুরু করা উচিত.
এখন কি যদি আপনি বোঝেন যে আপনি কিন্তু প্রয়োজন নেই 5 ছাত্র ID-র পরিবর্তে 7 না?
আপনি আপনার সোর্স কোড ফিরে যান এবং একটি id5 মধ্যে যুক্ত করার প্রয়োজন একটি id6,,
কপি এবং পেস্ট করুন এবং পরীক্ষণের জন্য যুক্তিবিজ্ঞান যদি এই ID-2 নতুন আইডিতে শ্রেণীর অন্তর্গত.
সমস্ত কিছুই এই ID-র সাথে সংযোগ একসঙ্গে আছে, তাই না থাকাতে কোন উপায় আছে
প্রোগ্রাম ID-র জন্য 0 যাও 6 মাধ্যমে এই করবেন.
অবশ্য, এখন আপনি বোঝেন যে আপনি 100 ছাত্র ID উপস্থিত রয়েছে.
এটা আদর্শ কম আলাদাভাবে এই ID-র প্রতিটি ঘোষণা করা প্রয়োজন বলে মনে হচ্ছে এর শুরু,
এবং কপি এবং যারা নতুন ID-র জন্য কোনো যুক্তি পেস্ট করুন.
কিন্তু হয়তো আমরা, নির্ধারিত এবং আমরা সকল 100 ছাত্র জন্য এটা করা হয়.
কিন্তু যদি আপনি না জানেন কিভাবে অনেক ছাত্র আসলে আছে?
শুধু কিছু n ছাত্র এবং আপনার প্রোগ্রামের ইউজার কি যে n হল জিজ্ঞাসা আছে.
উঃ ওহঃ. এই জন্য খুব ভাল কাজ হবে না.
আপনার প্রোগ্রামটি শুধুমাত্র কিছু ছাত্র ধ্রুব সংখ্যা জন্য কাজ করে.
>> এই সমস্ত সমস্যার সমাধান হয় অ্যারে সৌন্দর্য.
তাহলে একটি অ্যারের?
কিছু প্রোগ্রামিং ভাষায় একটি অ্যারের ধরনের একটি বিট আরও অনেক কিছু করতে পারেন,
কিন্তু এখানে আমরা অ্যারে মৌলিক তথ্য কাঠামো মাত্র হিসাবে আপনি সি তা দেখতে পাবেন মনোনিবেশ করব
একটি অ্যারের শুধু মেমরি বড় ব্লক. এটা এটি.
যখন আমরা বলতে আমরা 10 পূর্ণসংখ্যার একটি শ্রেণীবিন্যাস আছে, যে অর্থ আমরা কিছু ব্লক আছে
যে মেমরি হয় পর্যাপ্ত স্থান 10 পূর্ণসংখ্যার পৃথক রাখা.
Assuming যে একটি পূর্ণসংখ্যা হয় 4 বাইট, এই এর মানে হল 10 পূর্ণসংখ্যার একটি শ্রেণীবিন্যাস
একটি মেমরি 40 বাইট একটানা ব্লক.
এমনকি যখন আপনি বহুমাত্রিক অ্যারে, যা আমরা এখানে যেতে না ব্যবহার করা,
এটি এখনও ঠিক একটি মেমরি বড় ব্লক.
বহুমাত্রিক স্বরলিপি শুধু একটি সুবিধার্থে.
যদি আপনি 3 ইন্টিজার এর বহুমাত্রিক অ্যারের দ্বারা একটি 3 আছে,
তারপরে শুধু আপনার একটি প্রোগ্রাম সত্যিই 36 বাইট বড় ব্লক হিসাবে এই বিবেচনা করবে.
পূর্ণসংখ্যার মোট সংখ্যা 3 বার 3, এবং প্রতিটি পূর্ণসংখ্যা লাগে 4 বাইট আপ.
>> যাক এর একটি মৌলিক উদাহরণ কটাক্ষপাত করা.
আমরা এখানে 2 প্রকাশক অ্যারে বিভিন্ন উপায়ে দেখতে পারেন.
আমরা তাদের মধ্যে 1 মন্তব্য প্রোগ্রাম কম্পাইল জন্য আউট করতে হবে
যেহেতু আমরা দুইবার এক্স ডিক্লেয়ার.
আমরা এই ঘোষণা 2 ধরনের মধ্যে একটি বিট ক্ষেত্রে পার্থক্যও কিছু কটাক্ষপাত করা হবে.
এই লাইন দুটি আকার N একটি শ্রেণীবিন্যাস ঘোষণা,
যেখানে আমরা 10 # হিসাবে এন সংজ্ঞায়িত.
আমরা শুধু হিসাবে সহজে একটি ধনাত্মক পূর্ণসংখ্যা জন্য পারে ব্যবহারকারীকে জিজ্ঞাসা
এবং উপাদানের একটি অ্যারের মধ্যে আমাদের সংখ্যা হিসাবে ব্যবহৃত যে পূর্ণসংখ্যা.
আমাদের ছাত্র আইডি উদাহরণ আগে যাচ্ছে, এই 10 সম্পূর্ণরূপে পৃথক প্রকাশক মত ধরনের
কল্পিত ভেরিয়েবল; x0, X1, x2, এবং তাই xN-1 উপর পর্যন্ত.
লাইন উপেক্ষা যেখানে আমরা অ্যারে ডিক্লেয়ার, বর্গাকার বন্ধনী অক্ষত বিজ্ঞপ্তি
ভিতরে loops জন্য.
যখন আমরা x এর মত কিছু লিখুন [3], যা আমি শুধু x বন্ধনী 3 হিসাবে পড়া হবে,
আপনি তা চান কল্পিত X3 জন্য জিজ্ঞাসা মনে করতে পারেন.
সঙ্গে আকার N যে বন্ধনী ভিতরে নম্বর,, এই হল একটি অ্যারের তুলনায় বিজ্ঞপ্তি
যা আমরা সূচক ডাকবো, 0 থেকে n-1 যাও কিছু হতে পারে,
যা N সূচক মোট.
>> কিভাবে আসলে এই কাজ সম্পর্কে চিন্তা
মনে রাখবেন, যে অ্যারের একটি মেমরি বড় ব্লক.
Assuming যে একটি পূর্ণসংখ্যা হয় 4 বাইট, সম্পূর্ণ অ্যারে x এর একটি মেমরি 40 বাইট ব্লক.
সুতরাং খুব x0 প্রথম ব্লক 4 বাইট বোঝায়.
এক্স [1] পরবর্তী 4 বাইট ইত্যাদি বোঝায়.
এর মানে হল x শুরু হয় সমস্ত প্রোগ্রাম কখনও ট্র্যাক রাখা প্রয়োজন.
যদি আপনি এক্স [400] ব্যবহার করতে চান, তাহলে প্রোগ্রাম জানেন যে এই সমতূল্য
যাও X আরম্ভের পরে মাত্র 1,600 বাইট.
Where'd আমরা থেকে 1,600 বাইট পেতে পারি? এটা শুধুমাত্র পূর্ণসংখ্যা প্রতি 400 বার 4 বাইট.
>> সরানোর আগে, এটা খুবই গুরুত্বপূর্ণ বুঝতে পারি যে এ সি
সূচক যে আমরা অ্যারে ব্যবহারের জন্য কোন প্রয়োগকারী আছে.
আমাদের বড় বড় ব্লক শুধুমাত্র 10 পূর্ণসংখ্যার দীর্ঘ, কিন্তু আমাদের কিছুই যদি আমরা x [20] লিখুন চিত্কার করা
অথবা এমনকি x [-5].
সূচক একটি নম্বর আছে এমনকি না.
এটা কোন অবাধ অভিব্যক্তি হতে পারে.
এই অনুষ্ঠানে আমরা থেকে অ্যারের মধ্যে সূচক যাও লুপ জন্য আমি ব্যবহার পরিবর্তনশীল.
এটি একটি খুব সাধারণ প্যাটার্ন, looping থেকে আমি = 0 অ্যারে দৈর্ঘ্যের
এবং তারপর অ্যারের জন্য সূচক হিসাবে ব্যবহার করা হবে.
এই ভাবে আপনি কার্যকরভাবে সমগ্র অ্যারের উপর লুপ,
হয় আপনি এবং অ্যারের মধ্যে প্রতিটি স্পটে দায়িত্ব অর্পণ করা বা কিছু হিসাব জন্য এটি ব্যবহার করতে পারেন.
>> লুপ জন্য প্রথম ইঞ্চি, তোমার 0 আরম্ভ,
এবং তাই অ্যারের মধ্যে 0 স্পট, মান 0 বার 2 ধার্য হবে.
তারপর আমি বাড়তি, এবং আমরা অ্যারে মান 1 2 বার প্রথম স্পট নির্ধারণ করুন.
তারপর আমি তার উপরে আবার বাড়তি এবং তাই পর্যন্ত আমরা অ্যারের মধ্যে n-1 অবস্থা ধার্য
মান n-1 বার 2.
তাই আমরা প্রথম এমনকি 10 সংখ্যার একটি অ্যারে তৈরি করেছি.
হয়তো evens হয়েছে একটি পরিবর্তনশীল জন্য বিট x এর চেয়ে ভাল নাম হবে,
কিন্তু যে দূরে things ছিল.
লুপ জন্য দ্বিতীয় তখনই মান যে আমরা ইতিমধ্যে অ্যারে এর ভিতর আছে সঞ্চিত ছাপে.
>> চলুন শুরু করা যাক অ্যারের ঘোষণা উভয় ধরনের প্রোগ্রাম সহ চলমান চেষ্টা
এবং প্রোগ্রামের আউটপুট কটাক্ষপাত করা.
যতদুর হিসাবে আমরা দেখতে পারেন, প্রোগ্রাম ঘোষণা উভয় প্রকারের জন্য একই ভাবে আচরণ করবে.
চলুন এছাড়াও কি কটাক্ষপাত যদি আমরা N লাগা না প্রথম লুপ পরিবর্তন গ্রহণ
বরং 10,000 বলে.
অ্যারে শেষে অতিক্রম উপায়.
ওহো. হতে পারে আপনি এই পাচ্ছি আগে.
একটি সেগমেন্টেশন ফল্ট মানে আপনার প্রোগ্রামটি ক্র্যাশ করেছে.
আপনি এই এইজন্য শুরু যখন আপনি এলাকাসমূহ মেমরি আপনাকে স্পর্শ করা উচিত না স্পর্শ.
এখানে আমরা x শুরু অতিক্রম 10,000 জায়গা স্পর্শ করা হয়,
যা স্পষ্ট হয় মেমরির এমন একটি জায়গায় আমরা স্পর্শ করা উচিত নয়.
সুতরাং আমাদের অধিকাংশ দূর্ঘটনাক্রমে সম্ভবত 10,000 না করা পরিবর্তে N চাই,
আমরা যদি এরকম কিছু আরো সূক্ষ্ম কি বলতে কিন্তু লেখার চেয়ে কম বা সমান N যাও
এ জন্য লুপ শর্ত হিসাবে এন বিরোধিতা কম
যে শুধুমাত্র একটি অ্যারের সূচকগুলি থেকে 0 n-1 যাও আছে মনে রাখবেন,
যার মানে সূচক N অ্যারের শেষ বাইরে.
প্রোগ্রাম এই ক্ষেত্রে বিপর্যস্ত হতে পারে না, কিন্তু এটি এখনও একটি ত্রুটি.
বস্তুত, এই ত্রুটি এত সাধারণ যে তা এর নিজস্ব নামে আছে,
1 ত্রুটি দ্বারা একটি বন্ধ.
>> এটা উঠানোর জন্য এটি.
তাই কি অ্যারের ঘোষণা 2 ধরনের মধ্যে প্রধান পার্থক্য?
এক পার্থক্য হল যেখানে মেমরি বড় ব্লক যায়.
প্রথম ঘোষণায় যা, আমি বন্ধনী-অ্যারের টাইপ ডাকবো,
যদিও এই দ্বারা কোনো প্রচলিত নামের মানে হল,
এটি স্ট্যাক যেতে হবে.
দ্বিতীয়, যা আমি পয়েন্টার-অ্যারের টাইপ ডাকবো যেহেতু, এটি হিপ যেতে হবে.
এর মানে হল এই যে যখন ফাংশন আয়, স্বয়ংক্রিয়ভাবে বন্ধনী অ্যারের করা deallocated,
যেহেতু হিসাবে আপনি explicitily পয়েন্টার শৃঙ্খলার বিনামূল্যে কল করতে হবে
অথবা আপনি অন্য একটি মেমরি লিক আছে.
উপরন্তু, বন্ধনী অ্যারের হয় প্রকৃতপক্ষে একটি পরিবর্তনশীল না.
এটি গুরুত্বপূর্ণ. এটি শুধু একটি প্রতীক.
আপনি এটি একটি ধ্রুবক যে কম্পাইলার আপনার জন্য চয়ন হিসাবে মনে করতে পারেন.
এর অর্থ এই যে আমরা x + সঙ্গে বন্ধনী টাইপ ভালো কিছু করতে পারবেন না,
যদিও এই পয়েন্টার টাইপ সঙ্গে পুরোপুরি বৈধ.
>> পয়েন্টার টাইপ একটি পরিবর্তনশীল.
পয়েন্টার টাইপ জন্য, আমরা 2 মেমরি পৃথক ব্লক আছে.
পরিবর্তনশীল x নিজেই স্ট্যাকের মধ্যে সংরক্ষিত হয় এবং কেবলমাত্র একটি পয়েন্টার হয়,
কিন্তু মেমরি বড় ব্লক গাদা মধ্যে সংরক্ষিত হয়.
স্ট্যাকের উপর পরিবর্তনশীল x ঠিক ঠিকানা সঞ্চয়
এর হিপ মেমরি বড় ব্লক.
এই এক নিহিতার্থ অপারেটর মাপ হয়.
আপনি যদি বন্ধনী অ্যারের আকার জন্য অনুরোধ, এটি মেমরি বড় ব্লকের মাপ দিতে হবে,
40 বাইট মত,
কিন্তু যদি আপনি অ্যারের পয়েন্টার টাইপ মাপ জন্য অনুরোধ,
এটি পরিবর্তনশীল x নিজেই, যা প্রয়োগ হয় সম্ভবত মাত্র 4 বাইট আকার দিতে হবে.
পয়েন্টার-অ্যারে ব্যবহার করে টাইপ, এটা সরাসরি জন্য জিজ্ঞাসা করা অসম্ভব
মেমরি বড় ব্লকের মাপ.
এটি যেহেতু আমরা খুব কমই আকার চান একটি সীমাবদ্ধতার কারণে সাধারণত না
স্মৃতি বড় ব্লক, এবং আমরা সাধারণত এটি আমরা যদি এটা প্রয়োজন নিরূপণ করতে পারেন.
>> অবশেষে, বন্ধনী অ্যারের একটি অ্যারের আরম্ভের জন্য একটি শর্টকাট প্রদান হবে.
যাক কিভাবে আমরা এর প্রথম 10 এমনকি initilization শর্টকাট ব্যবহার করে পূর্ণসংখ্যার লিখতে পারেন দেখুন.
পয়েন্টার অ্যারের সাথে, একটি উপায় ভালো একটি শর্টকাট কি আছে না.
এটা কি আপনি অ্যারে করতে পারেন একটি ভূমিকা.
তারা প্রায় প্রতিটি প্রোগ্রাম আপনাকে লিখতে দেখা.
আশা করি আপনি এখন একজন ছাত্র ID-র উদাহরণ করছেন ভাল উপায় দেখতে পারেন
থেকে ভিডিওর শুরুতে.
>> আমার নাম Rob Bowden, এবং এই CS50.