কম্পিউটারগুলি শূন্য থেকে গণনা করবে কেন?


55

কম্পিউটারগুলি শূন্য থেকে শুরু করে traditionতিহ্যগতভাবে সংখ্যাসূচক মানগুলি। উদাহরণস্বরূপ, সি-ভিত্তিক প্রোগ্রামিং ভাষাগুলিতে অ্যারেগুলি সূচক শূন্য থেকে শুরু হয়।

এর জন্য কোন historicalতিহাসিক কারণ বিদ্যমান এবং শূন্য থেকে গণনা করা কোন ব্যবহারিক সুবিধাগুলির মধ্যে একটির চেয়ে বেশি গণনা করতে পারে?

দ্রষ্টব্য: এই প্রশ্নটি কেবলমাত্র মতামত নয়, সুস্পষ্টরূপে প্রযুক্তিগত উত্তর চেয়েছে এবং কেবল প্রোগ্রামিংয়ের পরিবর্তে কম্পিউটারগুলিকে সাধারণভাবে কভার করার উদ্দেশ্য। প্রোগ্রামারদের প্রশ্নের উপরে এই প্রশ্নটি প্রসারিত হয় "স্ট্রাইক / অ্যারেগুলি শূন্য-ভিত্তিক কেন?"



9
কম্পিউটার ভাষার কয়েকটি উদাহরণ রয়েছে যা 1-উত্স অ্যারে ব্যবহার করেছিল।
ড্যানিয়েল আর হিক্স

23
মানুষ 0 থেকে গণনা করেন না কেন?
শিরোনামহীন

47
ওহো, ওহো, শূন্য থেকে কেউ গণনা করে না, আমরা শূন্য থেকে সূচক করি । কেউ "জিরোথ" উপাদান বলে না। আমরা সূচক 0 এ "প্রথম" উপাদানটি বলি an সূচকটি সম্পর্কে চিন্তা করুন যে কোনও উপাদান প্রথম অবস্থান থেকে কতদূর অফসেট রয়েছে। ঠিক আছে, প্রথম উপাদানটি প্রথম অবস্থানে রয়েছে, তাই এটি মোটেও অফসেট হয় না, সুতরাং এটির সূচক 0 হয় it সুতরাং এটির আগে একটি উপাদান হিসাবে দ্বিতীয় উপাদান, সুতরাং এটি 1 উপাদানটিকে অফসেট করে এবং সূচীতে 1
মওউওয়াকার

14
@ রামহাউন্ড না, এটি না। জিরো-ভিত্তিক সূচক বাইনারি ব্যবহারের সাথে সম্পূর্ণ সম্পর্কিত নয়।
পিটার ওলসন

উত্তর:


88

0 থেকে অ্যারে গণনা প্রতিটি উপাদানের মেমরি ঠিকানার গণনা সহজতর করে।

যদি অ্যারে মেমোরিতে একটি নির্দিষ্ট অবস্থানে সংরক্ষণ করা হয় (এটিকে ঠিকানা বলা হয়) প্রতিটি উপাদানটির অবস্থান হিসাবে গণনা করা যেতে পারে

element(n) = address + n * size_of_the_element

আপনি যদি প্রথম উপাদানটিকে প্রথম বিবেচনা করেন তবে গণনাটি হয়ে যায়

element(n) = address + (n-1) * size_of_the_element

একটি বিশাল পৃথক নয় তবে এটি প্রতিটি অ্যাক্সেসের জন্য একটি অপ্রয়োজনীয় বিয়োগ যোগ করে।

সম্পাদন করা

  • অফসেট হিসাবে অ্যারে সূচকটি ব্যবহার করা প্রয়োজন নয়, কেবল একটি অভ্যাস। প্রথম এলিমেন্টের অফসেটটি সিস্টেম দ্বারা গোপন করা যেতে পারে এবং যখন উপাদানকে বরাদ্দ এবং রেফারেন্সিং করা হয় তখন বিবেচনা করা হত।

  • ডিজকস্ট্রা একটি কাগজ প্রকাশ করেছিলেন "কেন সংখ্যাটি শূন্য থেকে শুরু করা উচিত" ( পিডিএফ ) যেখানে তিনি ব্যাখ্যা করেছেন যে কেন 0 দিয়ে শুরু করা ভাল পছন্দ। শূন্য থেকে শুরু করলে ব্যাপ্তির আরও ভাল প্রতিনিধিত্ব করা যায়।


8
সঠিক উত্তরের জন্য +1। নোট করুন যে 0-ভিত্তিক সূচীকরণটি ব্যবহৃত হচ্ছে ভাষার একটি (খুব সাধারণ) কনভেনশন; এটা সর্বজনীন নয়। উদাহরণস্বরূপ, লুয়া 1-ভিত্তিক সূচক ব্যবহার করে । "অপ্রয়োজনীয় বিয়োগ" পুরানো দিনগুলিতে 0-ভিত্তিক সূচকের পিছনে যুক্তি হতে পারে তবে এখন বেশিরভাগ ভাষাগুলি কেবল এটি ব্যবহার করে কারণ এটি ইতিমধ্যে প্রত্যেকেরই ব্যবহৃত হয় (মূলত সি এর জন্য ধন্যবাদ) , এবং এটি পরিবর্তন করার কোন বাধ্যতামূলক কারণ নেই there's সম্মেলন।
ব্লুরাজা - ড্যানি পিফ্লুঘুফ্ট

2
এর কোন মানে নেই. address + n * size_of_elementযতক্ষণ পর্যন্ত "ঠিকানা "টি শিরোথ উপাদানটির ঠিকানা হয় ততক্ষণ প্রতিটি উপাদানের অবস্থান গণনা করা যায়। জেরোথ উপাদান অ্যারের উপাদান হিসাবে বিদ্যমান কিনা তা পুরোপুরি কাজ করে। প্রশ্নটি হ'ল কেন জিরোথ উপাদান বিদ্যমান, কেন আমরা ঠিকানাগুলিকে (সম্ভবত ধারণাগত) জিরোথ উপাদানটির ঠিকানা হিসাবে সংরক্ষণ করি না। (যা এই উত্তর দেয়।)
ডেভিড শোয়ার্জ

3
@ ডেভিডশওয়ার্টজ আসুন একটি পুরানো ভাষা সি হিসাবে নেওয়া যাক মেমরি বরাদ্দ করা হলে আপনি একটি ঠিকানা পাবেন যেখানে মেমরিটি শুরু হয়। কোনও সংকলক যদি কিছু দেখতে পান v[n]তবে এটির মত প্রকাশের ঠিকানাটি গণনা করতে হবে। যদি সূচকগুলি 0 শুরু করে তবে গণনাটি v + x * আকার। যদি 1 তে গণনাটি v + (x-1) * আকার হয়। উদাহরণস্বরূপ, v [1] v + (1-1) * আকারের সাথে মিলে যা v
মাত্তেও

4
@ ডেভিড: সি-তে (যে ভাষাটি 0-ভিত্তিক সূচকে প্রকৃতপক্ষে জনপ্রিয় করেছে) , অ্যারে এবং পয়েন্টারগুলি মূলত আন্তঃবঙ্গ পরিবর্তনযোগ্য, তাই বেশ কয়েকটি কারণের জন্য এটি গুরুত্বপূর্ণ যা *arrayআসলে প্রথম উপাদানটিকে বোঝায়। একটি উদাহরণ: যদি আমাদের প্রথম উপাদানটির আগেarray মেমরির অবস্থানের দিকে ইঙ্গিত করা হয় তবে ভিন্ন ধরণের অ্যারেতে কাস্টিং করা সমস্যাযুক্ত যেমন। এর অ্যারেতে দ্বিতীয় বাইটের অবস্থানটি intশব্দ-আকারের উপর নির্ভরশীল হয়ে উঠবে; একটি 32 বিট মেশিনে, এটি হবে ((char*)intArray + 5)!!
ব্লুরাজা - ড্যানি পিফ্লুঘুফ্ট

3
না, এটি অ্যারের শূণ্য উপাদান রয়েছে কিনা তা কোনও সমস্যা নয়। কারণ, আপনি দেখুন, স্কেলিংও আছে। আমার কাছে যদি 8 বাইট অবজেক্টের অ্যারে থাকে এবং আমি বাইট অ্যারে দিয়ে ওভারলে করি তবে অবজেক্টের বাইট ইনডেক্সটি কী? কেন এটি সহজ: 42 * 8. 1 ভিত্তিক সমস্যাটি হ'ল আমি বাইট অ্যারের দিকে তাকালে 1 এর এই অফসেটটি 1 বাইট হয় এবং আমি 8 টি বাইট-ইউনিট অ্যারেটি দেখে যখন এটি 8 বাইট হয়।
কাজ

38

নীচের নীতিগুলি দশমিক পাশাপাশি অন্য যে কোনও বেসের ক্ষেত্রেও প্রযোজ্য, কম্পিউটারে 0 থেকে গণনা সহজেই কম্পিউটারে ব্যবহৃত সংখ্যার প্রতিনিধিত্বের স্থির-অঙ্কের বাইনারি সিস্টেম থেকে সহজেই বোঝা যায়। যদি আপনার কাছে 8 টি বিট থাকে তবে 1s এবং 0 এর 256 টি সম্ভাব্য সংমিশ্রণ প্রকাশ করা যেতে পারে। আপনি এই 8-বিটটি 1-256 সংখ্যাটি প্রকাশ করতে ব্যবহার করতে পারেন তবে এটি 0 ছাড়বে যা গণিতের ক্ষেত্রে এবং নিজের হিসাবে একটি সংখ্যা হিসাবে কার্যকর, তাই তারা 0-255 সংখ্যাটি প্রকাশ করতে ব্যবহৃত হয়।

এটি ইতিমধ্যে 0 (বাইনারি উপস্থাপনায় সমস্ত 0 এর) থেকে 255 (8-বিট সংখ্যায় সমস্ত 1 এর) থেকে শুরু করে প্রাকৃতিক অর্ডারের নজির স্থাপন করে। সংখ্যার উপস্থাপনের সিস্টেমটি বিবেচনা করে 0 থেকে শুরু করে বোঝা যায় কারণ 0 সিস্টেমে "প্রথম" সংখ্যা, সুতরাং 1 হ'ল "দ্বিতীয়" সংখ্যা এবং আরও অনেক কিছু।

অফসেটের ধারণার কারণে কম্পিউটারে 0 থেকে শুরু করা এত সুবিধাজনক কেন একটি অতিরিক্ত কারণ। একটি অফসেট এমন একটি সংখ্যা যা মেমরি বা হার্ড ডিস্ক বা অন্য কোনও "ঠিকানাযোগ্য" মাধ্যমের কোনও অবস্থান থেকে দূরত্ব উপস্থাপন করে। কম্পিউটারগুলিতে, কার্যত সমস্ত ডেটা রৈখিকভাবে সংরক্ষণ করা হয়, যার অর্থ ডেটাগুলিতে অর্ডার থাকে, প্রথম বাইট, একটি দ্বিতীয় বাইট ইত্যাদি off ডেটা ব্লকে প্রথম বাইটটি কী? এটি অফসেট '0' এ রয়েছে, যার অর্থ এটি ডেটা ব্লকে প্রথম বাইটের পরে 0 বাইট পাওয়া যায়। "1" প্রথম বাইট নির্ধারণ করা সম্ভব হলেও এটি বেশ কয়েকটি কারণে ডেটার উপস্থাপনে জটিলতা সৃষ্টি করে:

  • ডেটা সম্বোধন করতে 0 ব্যবহার ব্যতীত, আপনি 8-বিট সংখ্যা দিয়ে যে জিনিসগুলিতে সম্বোধন করতে পারেন তার সংখ্যা হ্রাস করুন।
  • অফসেট গণনা করতে, যা ডেটা অ্যাক্সেসের হার্ডওয়্যার স্তরে প্রয়োজনীয়, কোনও সময়ে আপনাকে সংখ্যায়ন থেকে একটি বিয়োগ করতে হবে, যা একটি জটিলতার পরিচয় দেয়।
  • ডেটাগুলির একটি ব্লকের দিকে পয়েন্টারগুলি সর্বদা প্রথম ব্লকের দিকে নির্দেশ করে, সুতরাং আপনি 0 থেকে শুরু করার পরে অঙ্কগুলি গাণিতিকগুলি সোজা হয় (অর্থাত, প্রথম ক্লাস্টারের প্রথম ব্লকের 1 ম বাইট 0 + 0 + 0 হয় যখন আপনি 0 থেকে শুরু করেন , আপনি 1 থেকে শুরু করার সময় এটি 1 + 1 + 1 - 1 -1 হয়)

31
বাইনারি প্রতিনিধিত্বের সাথে কিছুই করার নেই। উভয় বাইনারি এবং দশমিক সংখ্যা 0 থেকে শুরু হয়
ম্যাটটিও

2
আপনি যদি 0 থেকে গণনা শুরু করেন তবে আপনি যে ঠিকানাগুলিতে (তাত্ত্বিকভাবে) যেতে পারেন তা হ্রাস করবেন না 1 থেকে 257
ম্যাটটিও

6
@ মাত্তিও একক বাইটে না আপনি পারলেন না
মনিকা মনিকা

8
@ দৌগভিজ জিরো-ভিত্তিক গণনা বাইনারি সাথে একেবারে কিছুই করার নেই । আপনি যে বিষয়টিটি তৈরি করছেন তা হ'ল একটি নির্দিষ্ট অঙ্কের উপস্থাপনায় প্রতিটি সংখ্যার ব্যবহার করা যা আপনি বেস 2, বেস 10 বা বেস 23517 ব্যবহার করছেন তা নির্বিশেষে উদ্বেগের বিষয়।
পিটার ওলসন

2
-1 এটি বাইনারি উপস্থাপনের সাথে একেবারেই করার মতো নয়।
ব্লুরাজা - ড্যানি পিফ্লুঘুফুট

26

আমার মতো কোনও আর্মচেয়ার দার্শনিকের জন্য সুপারউজারের জন্য কোনও সুযোগ আসবে তা কখনই ভাবেনি। হৃদয়ে এখানে একটি মৌলিক ভুল ধারণা রয়েছে, কারণ অ দার্শনিকরা মিনিটের বিশদ বিবরণ ছাড়েন। সংক্ষেপে: কম্পিউটারগুলি শূন্য থেকে গণনা করা হয় না, তবে পজিশনগুলির সংখ্যাটি শূন্য থেকে শুরু হয়।

কম্পিউটার এবং মানব (যে কোনও) গণনা কৌশলগুলির মধ্যে এই অনুভূত অসঙ্গতি সম্পর্কে বিভ্রান্ত হওয়ার কিছু নেই। আসুন প্রশ্নটি পচন করি।

কম্পিউটারগুলি শূন্য থেকে গণনা করবে কেন?

  • এগুলি শূন্য থেকে গণনা করা হয় না

কম্পিউটারগুলি শূন্য থেকে শুরু করে ট্যালি মানগুলি। উদাহরণস্বরূপ, সি তে অ্যারে।

  • সূচক (অবস্থানের নির্দেশক ট্যালি) শূন্য থেকে শুরু হয়। গণনা একটি অ্যারের মধ্যে উপাদানের যেখানে সূচিতে একটি একক উপাদান শূন্য এক

শূন্য কোনও শূন্য বা কোনও স্কেলের মাঝের বিন্দুকে উপস্থাপন করতে ব্যবহারিক। এটি কোনও কিছুর গণনা করার জন্য ব্যবহারিক নয় কারণ শূন্যের সংজ্ঞা দিয়ে এটি অসম্ভব।

কোনও স্কেলের মধ্য বিন্দু হিসাবে একই অর্থে শূন্যটি একটি সংগ্রহের খুব প্রান্ত (পরম সূচনা) উপস্থাপন করতে ব্যবহার করা যেতে পারে। প্রশ্নটি অর্থহীন কারণ এটি "তালিকার মানগুলি" এবং "শূন্য থেকে গণনা" এর মধ্যে অসামঞ্জস্যপূর্ণ।

হ্যাঁ, কম্পিউটারগুলি শূন্য থেকে ট্যালি করে তবে তারা এক থেকে গণনা করে। দুটি শব্দ পৃথক অর্থ বহন করে।

তালি [তাল-ই]

বিশেষ্য

  1. একটি অ্যাকাউন্ট বা গণনা; ডেবিট এবং ক্রেডিটের রেকর্ড, কোনও গেমের স্কোর বা এর মতো।
  2. স্কোর বা অ্যাকাউন্ট রাখা আছে এমন কোনও কিছু ..
  3. একটি নম্বর বা আইটেমের গ্রুপ নথিভুক্ত।

গণনা [ গণনা ]

ক্রিয়া (বস্তুর সাথে ব্যবহৃত)

  1. মোট সংখ্যা নির্ধারণের জন্য একের পর এক (সংগ্রহের পৃথক ইউনিট বা গোষ্ঠীগুলি) পরীক্ষা করা; যোগ করা; গণনা করুন: তিনি তার টিকিট গণনা করেছেন এবং দেখতে পেয়েছেন তাঁর দশটি আছে।
  2. গণনা করা; নিরূপণ; গনা।
  3. সংখ্যার তালিকা বা নাম পর্যন্ত রাখতে: আপনার চোখ বন্ধ করুন এবং দশটি গণনা করুন।

(Dictionary.com)


ব্যবহারিক কারণগুলি পর্যাপ্ত পরিমাণে ডগভজ বর্ণনা করেছেন, আমার সেখানে যুক্ত করার মতো কিছুই নেই। কেবলমাত্র যদি আমরা কোনও সিএস অধ্যাপক (ষাটের দশক থেকে) historicalতিহাসিক অ্যাকাউন্ট দেওয়ার জন্য থাকতে পারি ...


আসলে, আপনি কীভাবে জানবেন যে কম্পিউটারটি কিছু শুরু করে? আপনারা সমস্ত জানেন যে আপনি যখন এটি ব্যবহার করেন, আপনি এটি শূন্য থেকে শুরু করতে বলবেন।
ড্যানিয়েল আর হিক্স

আমি এখানে ধারণাগুলি এবং যুক্তিগুলির সংজ্ঞা বলছি, কম্পিউটারগুলি প্রতি প্রতি কীভাবে কাজ করে তা নয়। কম্পিউটারগুলি যেখানে কিছু শুরু করে সে সম্পর্কে আমি কিছুটা জানি কারণ আমি সিএস কোর্স নিয়েছি।
Рахматуллин

1
পুরোপুরি পেডেন্টিক হওয়ার জন্য, আপনি একটি ক্রিয়াটি একটি বিশেষ্যের সাথে তুলনা করছেন আমি "টেলি" এবং "গণনা" সত্যিই সমার্থক বলে মনে করি এবং উভয়ই ক্রিয়া বা বিশেষ্য হিসাবে ব্যবহৃত হতে পারে।
ব্রায়ান

1
@ ব্রায়ান একটি নিখুঁত পর্যবেক্ষণ এবং এবং আমার উদ্দেশ্যটি ব্যাখ্যা করা (একটি পেডেন্টিক পদ্ধতিতে) যে বিভ্রান্তি শর্তাবলীর ভুল ব্যাখ্যা থেকে আসে। "1 ম উপাদান" এবং "0 অবস্থানের উপাদান" এর মধ্যে আসলেই কোনও পার্থক্য নেই। তারা উভয় উপাদান এক। প্রথম , না " zeroth "। শূন্য থেকে গণনা করার মতো জিনিস নেই । সংজ্ঞাটি সংজ্ঞা অনুসারে এক থেকে শুরু হয় , যখন ঠিকানাটি a-> 1, b-> 2 হতে পারে। c-> 3 বা 0-> 1, 1-> 2, 2-> 3। "শূন্য থেকে গণনা" এর সর্বাধিক সাধারণ উদাহরণটি মধ্য বিদ্যালয়ের গণিত বইগুলিতে {x₀, x₁, x₂} আকারে পাওয়া যায় - তবে সাবস্ক্রিপ্টটি একটি সূচক

1
এটি কেবলমাত্র বর্তমান স্কিমে স্থির হওয়ার আগে ডিজাইনাররা আসলে বেশ খানিকটা ঘুরে বেড়াত। যা এখন "সুস্পষ্ট" বলে মনে হচ্ছে তা ছিল না। এবং সম্ভবত কিছুটা আলাদা স্কিম বেছে নেওয়া যেতে পারে এবং এখন আমাদের কাছে যা আছে তার চেয়ে বেশি "স্পষ্ট" মনে হবে।
ড্যানিয়েল আর হিক্স

12

আমি মনে করি এটা আগে দ্বারা "আবৃত করা হয়েছে prof.dr. Edsger ডব্লিউ Dijkstra " - বারোজ রিসার্চ ফেলো একটি চিঠি তারিখের 11 আগস্ট 1982: CF EWD831

শিরোনাম: কেন শূন্য থেকে সংখ্যা শুরু করা উচিত"একটি সম্মেলনকে অন্যের চেয়ে পছন্দ করার কারণ রয়েছে কি? হ্যাঁ, আছে ...."

এও লক্ষ করুন যে ডিজকস্ট্রা ১৯ 19৮ সাল পর্যন্ত দেরি করে ALGOL 68 ডিজাইন দলে ছিলেন Al অ্যালগল68 0, 1 বা প্রোগ্রামারটিকে অ্যালগোরিদমের জন্য উপযুক্ত বলে মনে করেন এমন কোনও সংখ্যক থেকে অ্যারেগুলিকে অনুমতি দেয়। সিএফ ( "দ্য মেকিং অফ অ্যালগল "৮" রেকর্ডস "" আপনি কি ত্রিভুজাকার অ্যারেগুলি সংজ্ঞায়িত করতে পারেন? "কেউ (টনি হোয়ার?) বাধা দিয়েছে।" কেবল ত্রিভুজাকার নয়, এমনকি উপবৃত্তাকারও "আড উত্তর দিয়েছিলেন এবং কীভাবে দেখিয়েছেন।

বিশেষত, অ্যালগল 6868 এ, অ্যারেগুলি (এবং ম্যাট্রিকেস) কেটে ফেলা হলে তারা @ 1 সূচক পান, সুতরাং [1: ...] অ্যারের দিকে পক্ষপাত রয়েছে। তবে "1 " নীচু বাউন্ডটি "@ 0" উল্লেখ করে "0 " অবস্থানের সাথে শুরু করতে সরানো যেতে পারে , যেমন ভেক্টর এক্স [4: 99 @ 2], ম্যাট্রিক্স ওয় [4: 99 @ 1,4: 99 @ 0]। একইভাবে সেখানে একটি ডিফল্ট / এর পক্ষপাত নয় থেকে 1 Do ~ আদ্যাশক্তি লুপ (যদি না " থেকে 0" স্পষ্টভাবে বিবৃত করা হয়), এবং 1 থেকে পূর্ণসংখ্যা জন্য কেস আমি ~ ~ ~ esac এবং $ গ (~ ~ ~ ) $ পছন্দ ধারা।

দেখে মনে হয় যে মার্চ 1968 খসড়া রিপোর্ট ( এমআর 98 ) সম্পর্কে ডিজকস্ট্রার মন্তব্য এবং তার জেদটি তর্কাতীতভাবে একটি প্রাক-ইউজনেট শিখা যুদ্ধকে উস্কে দিয়েছে : "এমন কিছু লেখা রয়েছে যেগুলি অযৌক্তিক হলেও প্রেমময়, এবং অন্যান্য লেখাগুলিও অত্যন্ত ব্যাকরণিক, তবে ঘৃণ্য। এটি এমন কিছু যা আমি পৃষ্ঠের ব্যক্তিকে ব্যাখ্যা করতে পারি না। " EWD230

অ্যালগল 68 ফাইনাল রিপোর্ট (এফআর) 20 ডিসেম্বর 1968 এ প্রকাশিত হয় যখন এটি মিউনিখ সভায় রাজি হয় এবং তারপরে ওয়ার্কিং গ্রুপ দ্বারা গৃহীত হয়। পরবর্তীকালে ইউনেস্কোর আইএফআইপি- র জেনারেল অ্যাসেমব্লির দ্বারা প্রকাশের জন্য প্রতিবেদনটি অনুমোদিত হয় ।

২৩ শে ডিসেম্বর (?) ১৯৮ D সালের দিকে ডিজকস্ট্রা , ডানকান, গারউইক, হোয়ার , র্যান্ডেল , সিগমুলার, তুরস্কি, উডগার এবং গারউইক এ বি ৩১.১.১.১ "সংখ্যালঘু প্রতিবেদন", পৃষ্ঠা ((প্রকাশিত 1970) তে স্বাক্ষর করেছিলেন ।


10

অন্য যে কোনও দূরত্বের সাদৃশ্যটি এনেছে তা নিজেকে একটি বাস্তব ব্যবহারিক দৃষ্টান্তের জন্য ধার দেয়:

"আপনার বাড়িটি নিকটতম গ্যাস স্টেশন থেকে কত দূরে?"

"1 মাইল."

"আপনি গ্যাস স্টেশনে থাকেন?"

"না, যদি আমি গ্যাস স্টেশনে থাকতাম তবে এটি 0 মাইল হত"

"কেন আপনি একজনের পরিবর্তে শূন্য থেকে গণনা করছেন?"

আর একটি ভাল উদাহরণ জন্মদিন হবে - আমরা বলি না যে কারও জন্মের দিন তার এক বছরের পুরানো, আমরা বলি এটি এক বছর পরে।

আমরা বলি যে লিপ বছর বা মার্কিন রাষ্ট্রপতি নির্বাচন প্রতি চার বছরে হয়, যদিও আপনি এক থেকে গণনা করুন: 2000 , 2001, 2002, 2003, 2004 পাঁচ বছর। (ঘটনাক্রমে, রোমানরা কিছুক্ষণের জন্য এটিকে ঘিরে রেখেছে, এবং বছরগুলিও খুব কাছাকাছি এসেছিল)

আমার বক্তব্যটি হ'ল, আমরা বাস্তব জগতের সর্বদা শূন্য থেকে "গণনা" করি - "[অ্যারে শুরু করার পরে] কতগুলি পদার্থ আপনি চাইছেন উপাদানটি" ​​কেবল আপনি যে প্রশ্নটি উত্তর দিয়ে যাচ্ছেন তা শূন্য থেকে শূন্যের সাথে দেখা হয় অনেক কম্পিউটার প্রোগ্রামে। আপনি বলবেন না যে প্রথম উপাদানটি শুরুর পরে একটি অবস্থান , তাই না? এটা তোলে হয় শুরু।


1
নির্বাচনের বিষয়ে আপনার গণিত এক বছরের মধ্যে বন্ধ রয়েছে। আপনার উদাহরণটিতে 5 বছরের মেয়াদে 2 টি নির্বাচনী বছর রয়েছে; সঠিক চিত্রণটি হ'ল যে একটি নির্বাচন থেকে পরের বারের মতো 4 বছর কেটে যাবে - যেমন 2000 -> 2001 (1 বছরকাল), 2001 -> 2002, 2002 -> 2003, 2003 -> 2004.
জিমি

1
@ জিমি এটি আমার বক্তব্য ছিল - লোকেরা কম্পিউটারটিকে যে দিক থেকে বোঝাতে "একটি থেকে গণনা করা হয়েছে", তারা শূন্যের পরিবর্তে ২০০০ গণনা করবে। ঘটনাচক্রে, প্রাচীন রোমানরা আসলে এটি কীভাবে করেছিল (এবং "2000, 2004, 2008" এর মতো একটি চক্রকে পাঁচ বছরের চক্র হিসাবে বর্ণনা করবে)।
র্যান্ডম 832

2
আপনার জন্মদিনের উদাহরণ সর্বজনীনভাবে সত্য নয়। উদাহরণস্বরূপ, দক্ষিণ কোরিয়ায় জীবনের প্রথম বছর শূন্যের পরিবর্তে এক হিসাবে গণনা করা হয়
BennyMcBenBen

6

যেমন ইতিমধ্যে অন্যেরা বলেছে কম্পিউটারগুলি শূন্য থেকে গণনা করে না

0 থেকে কিছু ভাষা সূচকের 0 থেকে সূচকের দুটি প্রধান সুবিধা রয়েছে:

  1. এটি একটি প্রাকৃতিক ফ্যাশনে সমাবেশে রূপান্তর করে কারণ এটি পয়েন্টার থেকে প্রথম অবস্থানে অফসেট হিসাবে ব্যাখ্যা করা যেতে পারে।

  2. নেতিবাচকতা চাইলে আপনি অদ্ভুততা পান না। 1 বিবিসি এবং 1 এডি এর মধ্যে কত বছর? কোনটিই নয়। কারণ বিসি কার্যকরভাবে নেতিবাচক তারিখগুলি হলেও, কোনও বছর শূন্য নেই। 0 এড থাকলে এখানে কোনও সমস্যা হত না। আপনি বিজ্ঞানের পুরো জায়গা জুড়ে একই সমস্যা দেখতে পাবেন যেখানে লোকরা নির্বিচারে প্রথম সেটটিকে +1 হিসাবে সংজ্ঞায়িত করেছে।


হ্যাঁ, এবং নতুন মেলিনিয়ামের জন্য 2001 পর্যন্ত অপেক্ষা করার সম্পূর্ণ বোকামি। এই ঠিক ঠিক সেই লোকেরা যারা প্রোগ্রামিংয়ে ছিটকে যাওয়ার সময় শূন্যভিত্তিক অ্যারেগুলি "পায়" না তা হতাশ হয়ে পড়ে। :)
কাজ

3
এছাড়াও, যদি "1 মাইল" এর অর্থ "ঠিক এখানে", তবে যেহেতু একটি মাইল 1760 ফুট, এর অর্থ "1760 ফুট" এরও অর্থ "ডান এখানে", তাই না? ভুল, "1 ফুট" মানে ঠিক এখানে, উফ! এই এক ভিত্তিক মূর্খতায় "ডান এখানে" একটি পা, এক ইঞ্চি, একটি সেন্টিমিটার ইত্যাদি
কাজ

1
@ kaz যেখানে ফুট => গজ। 1760 গজ এক মাইল।
ব্র্যাড

3

স্বাভাবিকভাবে গণনা শূন্য থেকে শুরু হয়

ঝুড়িতে আপেল গণনা করার জন্য এখানে অ্যালগরিদম রয়েছে:

count := 0

for each apple in basket
   count := count + 1

উপরের মৃত্যুদন্ড কার্যকর করার পরে, countআপেল সংখ্যা ধরে। এটি শূন্য হতে পারে, কারণ ঝুড়িগুলি খালি থাকতে পারে।

আপনি যদি পুরো এক মাসের জন্য আপনার ক্রেডিট কার্ড ব্যবহার না করেন তবে আপনি কি 1 ডলারের বিল পান? নাকি 1 সেন্ট?

আপনি যখন নিজের গাড়ির ওডোমিটারে ট্রিপ মিটারটি পুনরায় সেট করেন, এটি কি 0001 বা 0000 এ যায়?

অ্যারে একই ডেটার একাধিক মতামত সরবরাহ করতে পারে

32 বিট কাঠামোর একটি অ্যারে বিবেচনা করুন d, যা প্রতিটি 16 বিট শব্দের দ্বারা তৈরি w। প্রতিটি শব্দ দুটি 8 বিট বাইট নিয়ে গঠিত b। শূন্য সূচকের নিচে, ওভারলেটি খুব সুবিধাজনক দেখাচ্ছে:

d: |   0   |   1   |
w: | 0 | 1 | 2 | 3 |
b: |0|1|2|3|4|5|6|7|

32 বিট অবজেক্টটি d[1]শব্দের ঠিকানায় w[2]যা সূচককে 2 দিয়ে সহজেই গুণতে পারে যা 32 এবং 16 বিট অবজেক্টের আকারের অনুপাত। তদ্ব্যতীত, বাইট সম্বোধনে, এটি b[4]

এটি পরিমাপের প্রতিটি ইউনিটে শূন্য হওয়ায় এটি কাজ করে: বাইট, শব্দ, দ্বিগুণ শব্দ এবং আরও।

উপরের চিত্রটি দেখুন: এটি অনেকটা কোনও শাসকের মতো দেখাচ্ছে, যেখানে ইউনিট রূপান্তরগুলি স্বজ্ঞাত।

একটি ভিত্তিক সূচক সহ, এটি বিরতি:

d: |   1   |   2   |
w: | 1 | 2 | 3 | 4 |
b: |1|2|3|4|5|6|7|8|

এখন আমরা dসূচকটি পেতে সূচকটি কেবল 2 দিয়ে wবা 4 দ্বারা সূচক পেতে গুণতে পারি না b। ইউনিটের মধ্যে রূপান্তর আনাড়ি হয়ে যায়। উদাহরণ হিসেবে বলা যায় থেকে যেতে জন্য d[2]করতে b[4], আমরা নিরূপণ করতে হবে ((2 - 1) * 4) + 1 = 5

আমাদের dইউনিটগুলিতে সেই জটিল 1 পক্ষপাতাকে বিয়োগ করতে হবে , তারপরে প্রাকৃতিক শূন্য-ভিত্তিক স্থানাঙ্ক ব্যবস্থায় স্কেলিং করতে হবে এবং তারপরে pesky 1 যুক্ত করতে হবে bলক্ষ্য করুন যে এটি একই 1 নয়! আমরা একটি দ্বিগুণ শব্দের প্রস্থ বিয়োগ করি, তবে তারপরে একটি বাইট প্রস্থে যুক্ত করি

ডেটার বিভিন্ন দর্শনগুলির মধ্যে রূপান্তর করা সেলসিয়াস-ফারেনহাইট রূপান্তরগুলির মতো হয়ে যায়।

যারা বলে যে এক-ভিত্তিক অ্যারেগুলি বাস্তবায়ন স্তরে মোকাবিলা করা সহজ, কারণ কেবলমাত্র 1 এর সাধারণ বিয়োগফল নিজেকে বোকা বানাচ্ছে। এটি শুধুমাত্র সত্য যদি আমরা বিভিন্ন ডেটা ধরণের মধ্যে কোনও স্কেলিং গণনা না করি। এই জাতীয় গণনাগুলি এমন কোনও প্রোগ্রামে ঘটে থাকে যা ডেটাগুলির উপর নমনীয় দৃষ্টিভঙ্গি থাকে (যেমন একটি বহুমাত্রিক অ্যারে এছাড়াও এক-মাত্রিক হিসাবে অ্যাক্সেস করা হয়) বা স্টোরেজটি হেরফের করে: উদাহরণস্বরূপ, একটি মেমরি বরাদ্দকারী, ফাইল সিস্টেম বা ভিডিও ফ্রেম বাফার লাইব্রেরি।

সংখ্যা হ্রাস করা হচ্ছে

যে কোনও বেসে, আমরা যদি বেসের শক্তি যা মানগুলির একটি ব্যাপ্তি প্রয়োগ করতে কয়েকটি সংখ্যার ব্যবহার করতে চাই, আমাদের অবশ্যই শূন্য থেকে শুরু করতে হবে। উদাহরণস্বরূপ, দশ দশকে তিনটি অঙ্ক আমাদের 0 থেকে 999 এর মধ্যে এক হাজার স্বতন্ত্র মান প্রদানের জন্য যথেষ্ট 1

এটি কম্পিউটারে গুরুত্বপূর্ণ, কারণ বাইনারিতে সংখ্যাগুলির সংখ্যা হার্ডওয়্যার অ্যাড্রেস লাইনে অনুবাদ করে। উদাহরণস্বরূপ এর মধ্যে 256 শব্দের সাথে একটি রম চিপ 0 থেকে 255 পর্যন্ত সম্বোধন করা যেতে পারে, যার জন্য 8 টি বিট প্রয়োজন: 00000000 থেকে 11111111। এটি যদি 1 থেকে 256 পর্যন্ত সম্বোধন করা হয়, তবে নয়টি বিট প্রয়োজন। আমাদের অপ্রয়োজনীয়ভাবে সার্কিট বোর্ড বা ইন্টিগ্রেটেড সার্কিটের সাথে আরও একটি ঠিকানার ট্রেস যুক্ত করতে হবে। সুতরাং বাস্তবে যা ঘটবে তা কেবল 0 নামে ডাকা হবেসেই চিপটি অ্যাক্সেস করার জন্য সফ্টওয়্যার এপিআই স্তরে 1 1 শব্দের জন্য একটি অনুরোধ আসলে 8 বিট ঠিকানা বাসে 00000000 লাগবে। অন্যথায়, 1 এর অনুরোধটি 00000001 ঠিকানা হিসাবে প্রত্যাশা হিসাবে অনুবাদ করবে, তবে 256 এর জন্য একটি অনুরোধ 9 বিট ঠিকানার 100000000 এর চেয়ে অন্যথায় অব্যবহৃত 8 বিট ঠিকানা 00000000 এ মানচিত্র করবে these এই ব্যাগ-কামড়ানো ক্লোজেস উভয়ই সত্যই সমাধান কোনও সমস্যার সন্ধান করা এবং হার্ডওয়্যার, সফ্টওয়্যার এবং সমস্ত ব্যবহারকারীর ইন্টারফেস এবং ডকুমেন্টেশনে নিয়মিত 0 থেকে 255 ব্যবহার করে এড়ানো যায়।

এক-ভিত্তিক স্থানচ্যুতি মৌলিকভাবে বোকা

উদাহরণস্বরূপ পশ্চিমা সংগীত তত্ত্বটি বিবেচনা করুন। আমাদের কাছে সাতটি নোট সহ ডায়াটোনিক স্কেল রয়েছে তবে আমরা সেই স্থানটিকে কল করি যা তারা একটি অষ্টককে আচ্ছাদন করে ! অন্তরগুলির বিপরীতকরণ তখন নয়টির বিধি অনুসরণ করে : উদাহরণস্বরূপ তৃতীয়টির বিপরীতটি একটি ষষ্ঠ (নয়টি থেকে তিনটি বিয়োগ) করা হয়। সুতরাং তিনটি পৃথক সংখ্যা এত সাধারণ কোনও কিছুর জন্য খেলছে: সাতটি (একটি স্কেলে নোট), আটটি (অষ্টক) এবং নয়টি (বিপরীত দিকে বিয়োগ)।

যদি সাতটি নোট একটি সেপ্টেভ বা হেপটাভ তৈরি করে এবং অন্তরগুলি শূন্য ভিত্তিক হয়, তবে আমরা সাতটি থেকে বিপরীতে বিয়োগ করব। সাত উপর ভিত্তি করে সবকিছু।

তদুপরি, অন্তরগুলি সহজেই স্ট্যাক করা যায়। বর্তমান সিস্টেমে, আমরা যদি একটি পঞ্চম দ্বারা লাফিয়ে এবং তারপরে আবার চতুর্থ দ্বারা, এবং তারপর তৃতীয় দ্বারা, আমরা কেবল এগুলি যুক্ত করতে পারি না। ফলাফল বিরতি দুটি কম। এটি দ্বিগুণ নয়, আসলে দশম! প্রতিটি পর্যায়ে, আমাদের একটিকে বিয়োগ করতে হবে। পঞ্চম এবং তারপরে চতুর্থ দ্বারা উপরে যাওয়া নবম নয়, তবে কেবল একটি অষ্টক।

একটি বুদ্ধিমানভাবে নকশা করা সংগীত সিস্টেমে, ফলাফলের লাফগুলি নির্ধারণের জন্য আমরা কেবল অন্তরগুলি যুক্ত করতে পারি। নোটগুলির ক্রম যা একই নোটে শুরু হয় এবং শেষ হয় তারপরে একটি সার্কিটের চারপাশে ভোল্টেজ আইনের অনুরূপ একটি সম্পত্তি থাকবে: সমস্ত অন্তর শূন্যের সাথে যুক্ত হবে।

সংগীত তত্ত্ব এবং লেখা খারাপভাবে পুরানো। মোমবাতির আলোতে কুইল কলম দিয়ে রচনা করার দিনগুলি বেশিরভাগের সাথে পরিবর্তিত হয়নি।

এক-ভিত্তিক সিস্টেমগুলি একই লোককে বিভ্রান্ত করে যারা শূন্য-ভিত্তিক অ্যারে পরিচালনা করতে পারে না

২০০০ সাল যখন ঘুরে দেখা গেল, কেন নতুন সহস্রাব্দ শুরু হয়নি, তাই অনেকে বিভ্রান্ত হয়ে পড়েছিলেন। যারা ইঙ্গিত করছেন যে এটি 2001 সাল না হওয়া পর্যন্ত শুরু হবে না তাকে দলীয় poopers এবং dweebs হিসাবে গণ্য করা হয়েছিল। সর্বোপরি, আপনি যখন 20 বছর বয়সে পরিণত হন, ঠিক? আপনি যখন 21 বছর বয়সী হন না, যদি আপনি ভেবেছিলেন যে সহস্রাব্দ 1 জানুয়ারী, 2000 এ শুরু হয়েছিল, তবে আপনার কোনও প্রোগ্রামিং ভাষায় শূন্য ভিত্তিক অ্যারে সম্পর্কে অভিযোগ করার অধিকার নেই। আপনি ঠিক কীভাবে পছন্দ করেন সেগুলি তারা কাজ করে। (তবে, হ্যাঁ, এক-ভিত্তিক স্থানচ্যুতি এবং অ্যারেগুলির সমর্থকরা দ্বিজ এবং পার্টি-পোপাররা Cent

ক্যালেন্ডারগুলি বোবা, তবে দিনের কমপক্ষে সময় শূন্য ভিত্তিক

আপনার ঘড়ির প্রতিটি নতুন মিনিট: 00 সেকেন্ডের সাথে শুরু হয়। প্রতিটি নতুন ঘন্টা শুরু হয় 00:00 মিনিট এবং সেকেন্ডের সাথে। এবং, কমপক্ষে ২৪ ঘন্টা ঘড়িতে, দিনটি প্রায় মধ্যরাতের ধর্মঘটের সময় ঘুরে বেড়ায় এবং 11:59:59 এ 00:00:00 পর্যন্ত বৃদ্ধি পায়।

সুতরাং আপনি যদি মধ্যরাত থেকে 13:53:04 এর মতো সময়ের জন্য সেকেন্ড গণনা করতে চান তবে আপনাকে কেবল মূল্যায়ন করতে হবে 13 * 3600 + 53 * 60 + 4। কোনও ইনসিপিড 1সংযোজন বা বিয়োগফল নেই।

এমআইডিআই সম্পর্কে কান্ড বন্ধ

ঠিক আছে, সংগীতজ্ঞদের সাথে এটি কী, এমনকি অনুমিত প্রযুক্তিগতও রয়েছে?

এখন MIDI! এটি বার্তাগুলির প্রকৃত তারের উপস্থাপনায় প্রোগ্রাম এবং চ্যানেলগুলির জন্য শূন্য-ভিত্তিক নম্বর ব্যবহার করে তবে গিয়ার এটিকে 1 ভিত্তিক হিসাবে প্রদর্শন করে! উদাহরণস্বরূপ 0 থেকে 127 প্রোগ্রামগুলিকে বেশিরভাগ গিয়ারে 1 থেকে 128 বলা হয় তবে কিছু তাদের 0 থেকে 127 বলে বা এমনকি ব্যবহারকারীকে একটি পছন্দ দেয়।

71১ থেকে ৮০ পর্যন্ত প্রোগ্রামগুলি দশজনের একটি "ব্যাংক" হিসাবে বিবেচিত। উদাহরণস্বরূপ, এটি আমার মিডি পেডেলে ঠিক তাই বলে। পাদদেশগুলির সুইচগুলি 1 থেকে 10 পর্যন্ত লেবেলযুক্ত এবং যদি আমি সপ্তম ব্যাঙ্কে থাকি তবে তারা 71১ থেকে ৮০ এর মধ্যে প্রোগ্রামগুলি বেছে নেয় However তবে, কিছু ডিভাইস বা কম্পিউটার সফ্টওয়্যার 1-128 প্রোগ্রামের সংখ্যা 0 থেকে 127 হিসাবে প্রদর্শন করে বা এমনকি ব্যবহারকারীকে দেয় পছন্দ! আরও খারাপটি কী: এক-ভিত্তিক সিস্টেমগুলি, বা একই সাথে একই সাথে শূন্য উভয় ব্যবহার করে তৈরি করা বিশৃঙ্খলা?

এমআইডিআই চ্যানেল নম্বরগুলিকে 1 থেকে 16 বলা হয় তবে 0 থেকে 15 বাইনারি দ্বারা প্রতিনিধিত্ব করা হয়। যেমন এক-ভিত্তিক উপস্থাপনাটির বাইরে থাকা, কিছু গিয়ার একটি চ্যানেল নম্বর কনফিগার করার জন্য একটি ডিসপসচিচ ব্যবহার করে এবং প্রায়শই থিস স্যুইচগুলি কেবল শূন্য ভিত্তিক বাইনারি কোড ব্যবহার করে। সুতরাং আপনি যদি চ্যানেল 3 চান, আপনার অবশ্যই এটি 0010 (বাইনারি 2) এ টগল করতে হবে।


1

যদি আমি আমার প্রোগ্রামিং ল্যাঙ্গুয়েজ কনসেপ্ট ক্লাস থেকে সঠিকভাবে স্মরণ করি ... ভাষাগুলি 0-সূচিযুক্ত এবং অন্যদের 1-সূচক হওয়ার কারণে historicalতিহাসিক কারণগুলি সহ করতে হয়েছিল। অ্যালগল -68, প্রোগ্রামিং ভাষার গ্র্যান্ড-বাবা আসলে 1-ইনডেক্সড, পাশাপাশি ফোর্টরান এবং কয়েকটি অন্যান্য "ব্যবসায়" ভাষা কোবল-এর মতো ছিল। তবে এর মধ্যে কয়েকটি ভাষায়, আপনি প্রকৃতপক্ষে আপনার সূচনা সূচকটি কী হতে পারে তা নির্দিষ্ট করে বলতে পারেন। এখানে একটি আকর্ষণীয় টেবিল আছে

মূলত " ইয়ে ওল্ড ডেজ " গণিতবিদ, বিজ্ঞানী এবং অন্যান্য "একাডেমিকস" এর মধ্যে সাধারণত 0-সূচী ভাষা ব্যবহার করা হত, যখন সিওবিওএল এর মতো ভাষার ব্যবহারকারীগণ 0 তে গণনা শুরু করার কোনও লাভই করেননি, সুতরাং সেই ভাষাগুলিতে এটি আরও বোধগম্য হয়েছিল 1 এ শুরু করা (এটি কম বিভ্রান্ত বলে মনে হয়েছিল)।

এখন যদি আপনার প্রশ্নটি বোঝায় যে কেন কম্পিউটার ( কোনও ভাষা নয় ) কেন স্বাভাবিকভাবেই শূন্য থেকে গণনা শুরু করে ... ভাল আমি এটি বাইনারিতে অন্তর্নিহিত সত্যিই অনুমান করি: প্রাক্তন: 0000= শূন্য 0001= এক ... তাই এবং আরও বের ...


4
বাইনারি প্রতিনিধিত্বের সাথে কিছুই করার নেই। উভয় বাইনারি এবং দশমিক সংখ্যা 0 থেকে শুরু হয় (যেমন আপনি আপনার উদাহরণ হিসাবে দেখান)।
মাত্তেও

ভাল, এটি বাইনারি সঙ্গে অন্য কিছু করার আছে। চার বিট সহ, 0000 থেকে 1111, আপনি 16 শব্দের একটি মেমরি ব্যাঙ্ককে সম্বোধন করতে পারেন। আপনি যদি এটি এক-ভিত্তিক করেন, তবে আপনার 0001 থেকে 10000 উপস্থাপনের জন্য পাঁচটি ঠিকানা লাইন দরকার Or হার্ডওয়্যার যদি দশমিক ভিত্তিক হয় তবে এটি একই সমস্যা হবে। আপনি যদি শূন্য থেকে শুরু করেন তবে তিনটি সংখ্যা আপনাকে এক হাজার ঠিকানা দেয় তবে আপনি যদি 1 থেকে শুরু করেন তবে আপনার চার অঙ্কের প্রয়োজন।
কাজ

1

সংখ্যা 0 বিভিন্ন অর্থ বোঝাতে পারে: সাংখ্যিক মান, অর্ডিনাল, মেমরি ঠিকানা, ইত্যাদি den

'সূচক শূন্য' এর অর্থ প্রোগ্রামাররা শূন্য থেকে গণনা করে না। এটি বরাদ্দ হওয়া মেমরি ব্লকের প্রথম স্থান চিহ্নিত করে এবং '0' এর ঠিকানা the

সি-তে, একটি অ্যারের মাধ্যমে লুপিং নীচে লেখা যেতে পারে:

int arr[N];
for (i=0; arr[N]; ++i) {
...
}

সি # তে একই কাজ করা যেতে পারে:

Object[] arr;

for (Object o in arr) {
...
}

আমি মনে করি উভয় উদাহরণে কোনও গণনা নেই।


1

কোনও কিছুর দূরত্ব বর্ণনা করার সময় শূন্য থেকে শুরু করা ব্যবহারিক। সুতরাং এই অ্যারে:

[4,9,25,49]

অ্যারের শুরু থেকে 25 পর্যন্ত দূরত্ব 2 - সেখানে যাওয়ার জন্য আপনাকে দুটি ধাপ এড়িয়ে যেতে হবে। 4 এর দূরত্ব শূন্য - আপনার একেবারে শুরু থেকে সরানোর দরকার নেই।

দূরত্ব (বা সূচকগুলি) যুক্ত করার সময় এটির মতো চিন্তা করা व्यावहारिक - আমি এক ধাপ এগিয়ে, পরে শূন্য পদক্ষেপ, তারপর দুটি পদক্ষেপ, আমি কোথায়? আমি সূচক 1 + 0 + 2 = 3 এ রয়েছি three তিনটি পদক্ষেপ এড়িয়ে, আমি উপরের অ্যারেতে 49 এ শেষ।


কোনও বিল্ডিংয়ে মেঝে গণনা করা একইভাবে হওয়া উচিত (যদিও আমরা মার্কিন যুক্তরাষ্ট্রে এটি করি না) তল তল শূন্য হওয়া উচিত কারণ আপনি উপরে বা নিচে যান নি; এটি একটি শুরুর অবস্থান।

তবুও তলটি আপনি প্রথমে আসেন। আপনি ভবনের তলায় যখন ভবনে প্রবেশ করবেন তখন আপনি গণনা শুরু করবেন এবং উপরে উঠার সাথে যুক্ত করুন। আপনি যদি "বিল্ডিংয়ে" কে ডিফল্ট / স্বাভাবিক / প্রাকৃতিক অবস্থা হিসাবে বিবেচনা করেন তবে শূন্য থেকে শুরু করা অর্থবহ, যা নগর সমাজ সম্পর্কে আকর্ষণীয় ভাষ্য। একাধিক সাব-লেভেল যদি সাধারণ হয় তবে গ্রাউন্ড লেভেলের জিরোও অনেক কিছু বোঝায়।

1

কম্পিউটারে সংখ্যাগুলি কীভাবে উপস্থাপিত হয় তা মনে রাখবেন। আসুন একটি byteপরিবর্তনশীল নেওয়া যাক । 0 বাইনারি মধ্যে 00000000 1 হিসাবে প্রতিনিধিত্ব করা হয় । 1 হ'ল 00000001. 2 হ'ল 00000010. এবং আরও।

নোট করুন যে একটি সর্বনিম্ন সংখ্যা যেটি byteসংরক্ষণ করতে পারে তা 0 হয় we ( intগুলি সাধারণত unsigned intঅ্যারে সূচকগুলিতে থাকে), এটি আরও দক্ষ হওয়ায় 0 টি সূচনা সূচক হিসাবে ব্যবহার করা স্বাভাবিক বলে মনে হয়।

এছাড়া সি ++ এ, a[p]করতে unfolds *(a+p*n), যেখানে nডাটাটাইপ মাপ। অন্য কথায়, এর a[p]অর্থ "আমাকে সূচকে উপাদান দিন a+n*p"। যদি এটি দিয়ে pশুরু করা হয় 1, তবে আমাদের সূচীতে একটি ফাঁকা / অব্যবহৃত অংশ থাকতে হবে a

1. অবশ্যই, স্পষ্ট প্রশ্ন "কেন" উত্থাপিত হয়। কেন 00000000 to1 সেট করবেন না? সহজ: বাইনারি সংযোজন (পূর্ণ সংযোজক ইউনিটগুলির ক্যাসকেড দ্বারা সম্পন্ন) হার্ডওয়্যারে সহজ হয় যখন 00000000 হয় 0 বাইনারি সংযোজন সমস্ত পাটিগণিত ক্রিয়াকলাপগুলির একটি অবিচ্ছেদ্য অঙ্গ। আপনি যদি এটি 1 টি প্রতিনিধিত্ব করেন তবে আপনাকে সংকলকটি সমস্ত সংখ্যার 1 থেকে বিয়োগ করতে বলা উচিত, অথবা সংযোজনকারীদের থেকে প্রথমে একটি বিয়োগ করতে এবং যোগফলটিকে আবার যোগ করার জন্য আপনাকে সংযোজনকারী সার্কিটকে শক্তভাবে বলতে হবে। (দ্রষ্টব্য যে আপনি কেবল পরে একটি বিয়োগ করতে পারবেন না, কারণ ক্যারি বিট জড়িত থাকতে পারে)


@ সেকেন্ড কারণ এটি হার্ডওয়্যার স্তরে অযৌক্তিক হয়ে ওঠে (সম্পাদনা দেখুন)
মণীশার্থ

1

মডুলো

বিদ্যমান ভাল উত্তরগুলির মধ্যে এখনও একটি জিনিস উল্লেখ করা হয়নি: শূন্য-ভিত্তিক সূচকগুলি মডুলো ক্রিয়াকলাপগুলির সাথে একসাথে ভালভাবে কাজ করে, যার ফলে চক্রীয় তালিকা তৈরিতে মিলিত হতে পারে। যেমন কিছু সম্পর্কে উদাহরণস্বরূপ চিন্তা করুন

color = colors[i % colors.length]

যা প্রতিটি বস্তুকে (সূচিকৃত i) তালিকা থেকে আলাদা রঙ দিতে পারে colors, যতক্ষণ না সমস্ত রঙ ব্যবহার না করা হয়, সেই বিন্দুতে এটি শুরু থেকে আবার শুরু হবে। এক ভিত্তিক সূচকে একই প্রকাশ করা বেশ আনাড়ি is

color = colors[(i - 1) % colors.length + 1]

মোড়কের আশেপাশে স্থির আকারের স্বাক্ষরযুক্ত বাইনারি গাণিতিক দ্বারা আরোপিত স্বয়ংক্রিয় মডুলো ক্রিয়াকলাপগুলি কেন এটি বোধগম্য of

উভয়ের জন্য পূরণ

আরেকটি বিষয় বিবেচনা করার বিষয়টি হ'ল সত্য যে শূন্য-ভিত্তিক অ্যারের প্রথম উপাদানটি ব্যবহার না করা বেশ সহজ । (এটি foreachস্টাইল পুনরাবৃত্তি এবং একইরকম ভাষার কন্সট্রাকশনগুলির জন্য ধারণ করে না যা সম্পূর্ণরূপে অ্যারের সাথে আচরণ করে)) অনেক প্রোগ্রামার, আমার নিজের অন্তর্ভুক্ত, নষ্ট স্থান সম্পর্কে কিছুটা বিশ্রী বোধ করতে পারে তবে বেশিরভাগ ক্ষেত্রেই পরিমাণটি এতটাই ক্ষুদ্র যে এই উদ্বেগগুলি ভিত্তিহীন। অন্যদিকে, ভাষা যদি ওয়ান-ভিত্তিক সূচক ব্যবহার করে থাকে তবে অনেকগুলি কোড ছাড়াই সূচক শূন্যে কোনও উপাদান অনুকরণ করার কোনও উপায় নেই। সুতরাং দেওয়া আছে যে কিছু পরিস্থিতিতে শূন্য-ভিত্তিক সূচকগুলি এক-ভিত্তিকের চেয়ে ভাল, সর্বত্র শূন্যকে ভিত্তি হিসাবে বেছে নেওয়া সর্বত্র এক-ভিত্তিকের বিপরীতে আরও নমনীয় পন্থা এবং এটি কনফিগারযোগ্য প্রারম্ভিক অবস্থানগুলির চেয়ে আরও সুসংগত।


0

কম্পিউটার সিস্টেম দুটি প্রাকৃতিক সংখ্যা (0 থেকে গণনা) এবং পুরো সংখ্যা (1 থেকে গণনা) ব্যবহার করে। লোকেরা পুরো সংখ্যায় জিনিসগুলি গণনা করে, যা তাদের তালিকা সংখ্যার জন্য স্বজ্ঞাত করে তোলে এবং অনেক প্রোগ্রামিং ল্যাঙ্গুয়েজগুলি এর সুবিধা নেয়: বেসিক, কোবল, ফোর্টরান, লুয়া এবং পাস্কাল সমস্ত গণনা ১ থেকে from এই ভাষাগুলি ডেটা প্রসেসিং, সংখ্যা বিশ্লেষণের মতো কুলুঙ্গিগুলি লক্ষ্য করে, এবং শিক্ষণ, যেখানে সহজ, স্বজ্ঞাত তালিকাগুলি একটি সুবিধা।

আপনি কেবলমাত্র সমস্ত কিছুকে ক্রমবর্ধমানভাবে সাজানোর পরিবর্তে ডেটা কাঠামো বিশ্লেষণ করতে এবং পরিচালনা করতে শুরু করলে পুরো সংখ্যাগুলি বিশ্রী হয়ে ওঠে। যখন আপনাকে কোনও সূত্র বা অ্যালগরিদমে সিকোয়েন্সগুলি উল্লেখ করতে হবে তখন 0 থেকে সংখ্যাটি নির্ধারণ করা সহজ এবং কম ত্রুটি-ঝুঁকির মতো, যেমন গণিতবিদরা করেন: a 0 , 1 , একটি এন ইত্যাদি Otherwise অন্যথায়, আপনাকে প্রায়শই +1 দ্বারা সামঞ্জস্য করতে হবে এবং সঠিক ডেটা পেতে –1 এবং বাগগুলি তৈরি করে ভুল হওয়া সহজ। সুতরাং, কম্পিউটার বিজ্ঞানীদের জন্য ডিজাইন করা ভাষাগুলি সাধারণত প্রাকৃতিক সংখ্যা ব্যবহার করে: সি, জাভা এবং লিস্প সমস্ত 0 থেকে গণনা করে।

প্রোগ্রামিং ভাষার বাইরেও, প্রচুর কম্পিউটার সিস্টেম 0 থেকে জিনিসগুলিকে নম্বর দেয় কারণ কম্পিউটার বিজ্ঞানীরা এটাই ব্যবহার করেন। এছাড়াও, যেহেতু 1 থেকে সংখ্যাটি অনেকগুলি কুখ্যাত বাগের দিকে পরিচালিত করে, তাই আমাদের মধ্যে অনেকে এটিকে ইন্টারফেসের উপাদানগুলির বাইরে এড়াতে সক্ষম করে তোলে যারা অ প্রযুক্তিগত শেষ ব্যবহারকারীদের জন্য কঠোরভাবে নকশা করা হয়েছিল।


জাভা ... কম্পিউটার বিজ্ঞানীদের জন্য হাঃ হাঃ হাঃ!
কাজ

0

সহজ উত্তরটি হ'ল প্রথম সংখ্যাটি 1 নয় এটি 0 হয়।

ব্যাখ্যা: যে কোনও বেসে বহু অঙ্কের সংখ্যা গণনা করার সূত্রটি হ'ল:

n = sum(i=0 to n, Di^i)

WHERE 
n = numeric result
i = index (starting with 0)
Di = is the digit at index i

দশমিক সিস্টেমটি নেওয়া যাক, এটিই আমরা সবচেয়ে বেশি ব্যবহার করি।

1234 নম্বরের দিকে তাকিয়ে আমরা এটি লিখতে পারি:

4 x 10^0 = 4
3 x 10^1 = 30
2 x 10^2 = 200
1 x 10^3 = 1000

in other words, sum of digits raised to the power if their index.

সুতরাং, এটি কেবল কম্পিউটার নয়, আমরা, লোকেরা 0 থেকেও গণনা করি।


0

একটি অ্যারের সূচক হ'ল বেস মেমরি অবস্থান থেকে উপাদানটির মেমরি অবস্থানের অফসেট। এলিমেন্ট i এর পরে বেস + i। প্রথম উপাদানটি বেসের অবস্থানে অবস্থিত, সুতরাং এটি 0 (বেস + 0) অবস্থান।


0

গণনার দক্ষতা ছাড়াও গণনা করার আরও একটি দিক রয়েছে। অনুক্রমের প্রতিটি উপাদানকে একটি অনুক্রমিক নম্বর দেওয়ার দুটি উপায় রয়েছে:

  1. পূর্ববর্তী (পুরো) উপাদানগুলির সংখ্যা (কার্ডিনাল সংখ্যা)
  2. উপাদানটির অবস্থান (সাধারণ সংখ্যা)

মানুষের বয়সগুলি মূল সংখ্যা: একটি শিশুর জন্মের পরে প্রথম বছরে এটি 0 বছর বয়সী হয়, কারণ এটি পুরো বছর শূন্যের জন্য জীবিত।

তারিখের বছরগুলি মূল সংখ্যা: প্রথম বছরে আনো ডোমিনি (AD), বছরটি 1 খ্রি। 0 বছর নেই, যেমন কোনও জেরোথ কিছুই নেই is

প্রোগ্রামিং ভাষা (যেমন মতলব এবং ম্যাথমেটিকা) যেখানে কোনও উপাদানের সূচক অ্যারের মধ্যে তার অবস্থানের প্রতিনিধিত্ব করে 1: প্রথম উপাদান থেকে গণনা শুরু করে । অন্যান্য ভাষায় (যেমন সমস্ত সি-ভিত্তিক ভাষা) কোনও উপাদানের সূচক পূর্ববর্তী উপাদানগুলির সংখ্যা এবং তাই প্রথম উপাদানটি 0 হয়।


অবশ্যই শূন্য-ভিত্তিক সূচক আরও দক্ষ বলে উল্লেখ করে মাত্তিও আংশিকভাবে সঠিক

element(n) = address + n * element_size

ওয়ান-বেসড ইনডেক্সিং ঠিক তেমন দক্ষ হতে পারে যদি সমস্ত অ্যারে ঠিকানার মধ্যে ইতিমধ্যে তাদের একটি element_sizeবাদ পড়ে যায়। অ্যারে বরাদ্দ করা হলে এটি করা যেতে পারে, এক্ষেত্রে এটি ঠিক তত দ্রুত:

array_address = address - element_size
element(n) = array_address + n * element_size

-1

কম্পিউটারগুলি শূন্য থেকে শুরু করে traditionতিহ্যগতভাবে সংখ্যাসূচক মানগুলি। উদাহরণস্বরূপ, সি-ভিত্তিক প্রোগ্রামিং ভাষাগুলিতে অ্যারেগুলি সূচক শূন্য থেকে শুরু হয়।

0… আপনি বিভিন্ন ধারণাটি জাগ্রত করছেন: প্রোগ্রামিং ভাষা, কম্পিউটার এবং গণনা।

  1. 2 টি স্টেট ব্যবহার করে (তাদের বেশিরভাগ স্কিমিটিক্যালি হুবহু এটি করে) এর অর্থ আপনি এগুলি ম্যাপ করার জন্য 2 টি সংখ্যা বেছে নিতে পারেন (বলতে, বলতে চান)। "3" এবং "5" (বা "এফ" এবং ",") ঠিক আছে তবে আপনি কেন জিজ্ঞাসা করবেন কম্পিউটারগুলি "3" (বা "এফ" থেকে) কেন গণনা করে? প্রাকৃতিক পছন্দটি অবশ্যই 0 এবং 1।
  2. পাস্কলে অ্যারেগুলি ১ থেকে শুরু হয় That ভাষাটি নিম্ন-স্তরের সি এর চেয়ে বেশি বিমূর্ত।
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.