EOF মানে কী ?
যারা প্রোগ্রামিং প্রবলেম সলভিং এর জগতে নতুন, তাদের অধিকাংশের মনে প্রশ্ন আসে :
আমার এই লেখায় এই প্রশ্নের সহজ উত্তর দেওয়ার চেষ্টা করবো ।
EOF কে elaborate করলে দাঁড়ায় End Of File. একটা ফাইল (হতে পারে সেটা কোনো টেক্সট ফাইল কিংবা কোনো বাইনারি ফাইল) যেকোনো একটা জায়গায় গিয়ে যে শেষ হয়, সেটা কম্পিউটার বুঝে নেয় এই EOF এর মাধ্যমে । সহজ কথায়, EOF দিয়ে একটা ফাইলের ending indicate করা হয় ।
প্রোগ্রামিং ল্যাঙ্গুয়েজের ভাষায়, এটি একটি marker বা pre-defined Macro, সাধারণত যার মান -1.
যারা প্রবলেম সলভিং করে, তারা বেশ কিছু প্রবলেমের ইনপুট স্পেসিফিকেশানে দেখতে পায় - Input will be terminated by EOF. এর মানে হলো, কতোগুলো টেস্ট কেসের জন্য ঐ প্রোগ্রাম রান করবে তা আগে জানানো হবে না, যতোক্ষণ ইনপুট দেওয়া হচ্ছে (মানে যতোক্ষণ ইনপুট ফাইলের শেষ পর্যন্ত না যাচ্ছে), ততোক্ষণ পর্যন্ত ইনপুটগুলো প্রসেসিং করতে হবে ।
আবার কোনো কোনো প্রব্লেমের স্পেসিফিকেশানে EOF এর কথা সরাসরি লিখা থাকে না আবার কয়টা টেস্ট কেস রান করাতে হবে সেটাও বলে দেওয়া থাকে না । সেক্ষেত্রেও আমাদের ধরে নিতে হবে, EOF না পাওয়া পর্যন্ত ইনপুট প্রসেসিং করে যেতে হবে ।
এবার আসি কাজের কথায় । থিউরি দিয়ে একটা বিষয় পুরোপুরি বুঝা যায় না, তাই আমি এখানে একটা সিম্পল স্যাম্পল কোড দিলাম যেটা থেকে EOF নিয়ে কীভাবে কাজ করতে হয় তার ধারণা পাওয়া যাবে ।
প্রব্লেম হলো - তোমাকে অনেকগুলো সংখ্যা ইনপুট দেওয়া হবে । প্রতিটি ইনপুটের জন্য সংখ্যাটি জোড় না বিজোড় সেটা আউটপুটে বলে দিতে হবে ।
প্রোগ্রামটা অনেক সিম্পল, তার চাইতেও সিম্পল তার সলুশান । কিন্তু মূল সমস্যা হলো, মোট টেস্ট কেসের সংখ্যা বলে দেওয়া হবে না !
সলুশান :
যতোক্ষণ না পর্যন্ত ইনপুট ফাইলের শেষ পর্যন্ত যাচ্ছে, এই কোড ততোক্ষণ পর্যন্ত চলবে !
আরেকটা নতুন সমস্যা হচ্ছে, আমরা নিজেরা টেস্ট করার সময় কীভাবে কম্পিউটারকে EOF বুঝাতে পারি ? আমরা কীভাবে ইনপুট টার্মিনেট করতে পারি ?
Windows Operating System এ Command Prompt এ Ctrl + Z প্রেস করে তারপর Enter Key প্রেস করলে ইনপুট টার্মিনেট হয়ে যাবে । UNIX ভিত্তিক Operating System (Generally macOS) এবং LINUX ভিত্তিক যেকোনো Operating System এ Terminal এ Ctrl + D প্রেস করে তারপর Enter Key প্রেস করলে ইনপুট টার্মিনেট হয়ে যাবে ।
P.S. : macOS এ একবার Ctrl + D প্রেস করলে ইনপুট টার্মিনেট হয় না, দুবার প্রেস করতে হয় কারণ macOS একটু ভিন্নভাবে EOF কে handle করে ।
আশা করি, EOF সম্পর্কে কিছুটা হলেও ধারণা দিতে পারলাম ।
- EOF মানে কী ?
- Input will be terminated by EOF এর মানে কী ?
আমার এই লেখায় এই প্রশ্নের সহজ উত্তর দেওয়ার চেষ্টা করবো ।
EOF কে elaborate করলে দাঁড়ায় End Of File. একটা ফাইল (হতে পারে সেটা কোনো টেক্সট ফাইল কিংবা কোনো বাইনারি ফাইল) যেকোনো একটা জায়গায় গিয়ে যে শেষ হয়, সেটা কম্পিউটার বুঝে নেয় এই EOF এর মাধ্যমে । সহজ কথায়, EOF দিয়ে একটা ফাইলের ending indicate করা হয় ।
প্রোগ্রামিং ল্যাঙ্গুয়েজের ভাষায়, এটি একটি marker বা pre-defined Macro, সাধারণত যার মান -1.
যারা প্রবলেম সলভিং করে, তারা বেশ কিছু প্রবলেমের ইনপুট স্পেসিফিকেশানে দেখতে পায় - Input will be terminated by EOF. এর মানে হলো, কতোগুলো টেস্ট কেসের জন্য ঐ প্রোগ্রাম রান করবে তা আগে জানানো হবে না, যতোক্ষণ ইনপুট দেওয়া হচ্ছে (মানে যতোক্ষণ ইনপুট ফাইলের শেষ পর্যন্ত না যাচ্ছে), ততোক্ষণ পর্যন্ত ইনপুটগুলো প্রসেসিং করতে হবে ।
আবার কোনো কোনো প্রব্লেমের স্পেসিফিকেশানে EOF এর কথা সরাসরি লিখা থাকে না আবার কয়টা টেস্ট কেস রান করাতে হবে সেটাও বলে দেওয়া থাকে না । সেক্ষেত্রেও আমাদের ধরে নিতে হবে, EOF না পাওয়া পর্যন্ত ইনপুট প্রসেসিং করে যেতে হবে ।
এবার আসি কাজের কথায় । থিউরি দিয়ে একটা বিষয় পুরোপুরি বুঝা যায় না, তাই আমি এখানে একটা সিম্পল স্যাম্পল কোড দিলাম যেটা থেকে EOF নিয়ে কীভাবে কাজ করতে হয় তার ধারণা পাওয়া যাবে ।
প্রব্লেম হলো - তোমাকে অনেকগুলো সংখ্যা ইনপুট দেওয়া হবে । প্রতিটি ইনপুটের জন্য সংখ্যাটি জোড় না বিজোড় সেটা আউটপুটে বলে দিতে হবে ।
প্রোগ্রামটা অনেক সিম্পল, তার চাইতেও সিম্পল তার সলুশান । কিন্তু মূল সমস্যা হলো, মোট টেস্ট কেসের সংখ্যা বলে দেওয়া হবে না !
সলুশান :
1 2 3 4 5 6 7 8 9 10 11 12 13 | #include <stdio.h> int main() { int n; while (scanf("%d", &n) != EOF) { if (n % 2 == 0) printf("even\n"); else printf("odd\n"); } return 0; } |
যতোক্ষণ না পর্যন্ত ইনপুট ফাইলের শেষ পর্যন্ত যাচ্ছে, এই কোড ততোক্ষণ পর্যন্ত চলবে !
আরেকটা নতুন সমস্যা হচ্ছে, আমরা নিজেরা টেস্ট করার সময় কীভাবে কম্পিউটারকে EOF বুঝাতে পারি ? আমরা কীভাবে ইনপুট টার্মিনেট করতে পারি ?
Windows Operating System এ Command Prompt এ Ctrl + Z প্রেস করে তারপর Enter Key প্রেস করলে ইনপুট টার্মিনেট হয়ে যাবে । UNIX ভিত্তিক Operating System (Generally macOS) এবং LINUX ভিত্তিক যেকোনো Operating System এ Terminal এ Ctrl + D প্রেস করে তারপর Enter Key প্রেস করলে ইনপুট টার্মিনেট হয়ে যাবে ।
P.S. : macOS এ একবার Ctrl + D প্রেস করলে ইনপুট টার্মিনেট হয় না, দুবার প্রেস করতে হয় কারণ macOS একটু ভিন্নভাবে EOF কে handle করে ।
আশা করি, EOF সম্পর্কে কিছুটা হলেও ধারণা দিতে পারলাম ।
Comments
Post a Comment