Powered by Blogger.

সি প্রোগ্রামিং শেখা [পর্বঃ০৩-ক্লাস টু'র ম্যাথ]


প্রোগ্রামিং দিয়ে ক্লাস ওয়ান টু এর ম্যাথ খুব সহজেই করে ফেলতেন আপনি…এটাকে আবার ডাটা ইনপুট আউটপুট ও বলা যাইতে পারে…প্রথম প্রথম করতে পারলে খুব ভালো লাগবে…এইটা শিখলে যে খুব লাভ হইয়া গেলো তা না…এটা আসলে নিজেকে সান্ত্বনা দেওয়ার মতো যে আপনি প্রোগ্রামিং শেখা স্টার্ট করছেন… 😛
ধরুন আমরা একটা রেসিপি বানাবো…কি কি লাগবেঃ  প্লানিং, কিছু উপকরণ,উপকরণের পরিমাণ,সময়মত বন্টন,সময়মতো ঝাকাঝাকি করা(১৮ মাইনাস 😛 ) ,তারপর নামিয়ে নেওয়া…তারপর কেউ সাজিয়ে খায়,কেউ শুধু খাইলেই হয় 😛
এখন রেসিপি বানানোর দিকে আগানো যাক…
…তাইলে খুলে ফেলি আমরা(মানে কোডব্লক্স খুলি আর কি 😛 )

রান করে দেখি…এরর দেখায়? :-/ সবই তো ঠিক লিখলাম ,তাইলে ভুল হইলো কই…? কম্পাইলার সামান্য একটা যোগ করতে পারলো না :-/

আসলে ভূলটা আমরাই করছি…main ফাংশনের প্রথম লাইনেই :-P

আসলে এইখানে a,b ইন্টিজার ডিফাইন করছি ঠিকি…কিন্তু তাদের মিলনের ফল c কে ডিফাইন করা হয় নাই :-P তাই কম্পাইলারে মাথা ঘুরাইয়া গেছে…তাহলে লাইনটা কিরকম লিখবো? বুঝা গেলো…মানে হইলো প্রথম লাইনেই int a,b,c ডিফাইন করে দিতে হবে…এরপর অংকের মাঝে সাফা কবিররেই আনেন,আর নাইলা নাইমকে আনেন…শুরুতেই ডিফাইন করে দেওয়া চাইই চাই 8|

int safa,naila,jolil; //এইরকম লিখতে হবে

তাইলে লিখি এবারঃ


রান করেন…হইলো তো 😛

আচ্ছা…ব্যাপারটাকে একটু ইন্টারেস্টিং করে তোলা যাক…

আমরা এবার একটা প্রোগ্রাম লিখবো…সেটা ইউজার যে দুটি সংখ্যা নিবে…সেই দুইটার যোগ,বিয়োগ,গুণ,ভাগ দিবে…


রান করে ও যোগ করেন :-P  আচ্ছা…আমরা প্রতিবার যে sum = num1+num2…বাঁ, a = b+c আকারে আলাদা একটা লাইন দিয়ে লেহতাছি এটা ছাড়া লেখা যায়না? ডিরেক্টলি…দেখি ট্রাই করে…


এইভাবেও করা যায় আসলে...পরেরটাতে একটা ভ্যারিয়েবল ও লাইন কম হলো এইটাই সুবিধা 😛
এইবার নিজেরা ট্রাই করি...গুণ,ভাগ,বিয়োগ এর ক্ষেত্রে...সবই সেম,খালি চিহ্ন চেঞ্জ হবিই আর কি ...
রেসিপি বানানো শেষ হলো...কিন্তু প্রতিবন্ধকতাও আছে অনেক...যেমন কেউ যদি ইনপুট দেওয়ার সময় দশমিক টাইম নাম্বার দেয় তখন কি হবে? তখন তো int বা ইন্টিজার টাইম মানই আউটপুট দিবে...তাহলে উপায়???
এইসব ক্ষেত্রে আমরা int না করে  float/double ব্যাবহার করি…তখন ডাটাও %f হিসেবে শো করি…দেখি তাহলেঃ
স্ক্রিনে দুইটা মান পাইলাম আমরা...একটাতে 18.240000 শো করে,আরেকটাতে 18.24 শো করে...কাহিনি কি? 😛
কাহিনী হইলো ক্যামন মান চাই...সেইটা ডিফাইন করতে হয়...যেমন &f শো করে পুরা দশমিক মান... %.2f দিলে কম্পাইলার বুঝে নিবে যে আমি দুই দশমিক পর্যন্ত মান চাই...
নিচেরটা দেখি...ফ্লোটের মান কিভাবে কন্ট্রোল করবো আমরা..
আউটপুট পাবো নিচের মতোঃ(প্রত্যেকটির আগে শূন্য ধরে নিবেন)
   5.890
  45.878
 400.990
এখানে আমরা %8.3f বলতে এমন মান চাইছি যা টোটাল ৮টা ক্যারেক্টর রাখার ঘর বানাবে...প্রথম চারটা দশমিকের পূর্বের সংখ্যা...পঞ্ছম ঘরটা দশমিকের ঘর এবং .3f মানে দশমিকের পরের তিনটা ঘর...
হোমওয়ার্কঃ 😛
১) বিয়োগ,গুন,ভাগ করা
২) দশমিক মান স্ক্যান করে নিয়ে যোগ বিয়োগ গুন ভাগ করা
৩) %f এর প্রয়োগ…

সি প্রোগ্রামিং শেখা [পর্বঃ০২-একটু ভুল করি !!]



কোডিং করতে গিয়ে আমরা সাধারন যে ভুল গুলো করি, আজকে থাকছে সে গুলো নিয়ে আলোচনা এবং ভুল গুলো না করে কিভাবে কোড বা প্রোগ্রাম করা যায় তার বিস্তারিত বর্ননা……

i) Statement শেষে “;”(সেমিকোলন) না দিলে কি হয়?
যা হওয়ার তাইই হয় 😛
স্টেটমেন্টের পর সেমিকোলন জিনিসটা নতুনদের জন্য এক বিভীষিকার নাম…আর এটা এতটাই সূক্ষ ভুল যে মাঝে মাঝে খুঁজেও পাওয়াই দুষ্কর হয়ে যায়…
নিচের প্রোগ্রামটি লিখিঃ
রান করে দেখি? কি দেখা গেলো? 😛
1


৬নাম্বারে গিয়ে ঘপলাটা বাধলো…লেখা উঠলোঃ
error: expected ‘;’ before ‘printf’

মানে হইলো…”ছেলের ৯৯% ই ওকে,খালি একটু………” 😛

সমাধানের উপায়ঃ প্রথম প্রথম খুব বিরক্ত লাগতো সেমিকোলন দিতে গিয়ে…আসলে printf এর পর বড় একটা স্ট্রিং লেখার পর সেমিকোলন দেওয়ার কথা মনে না থাকাটাই স্বাভাবিক…তাই ঝামেলা এড়াতে printf(”         “);         লিখে তারপর printf এর ভেতরের স্ট্রিং টা লিখুন…তাহলে ভুল হওয়ার সম্ভবনা কমে যায়…

ii) “stdio.h” বা, হেডার ট্যাগঃ
আমার ইংলিশে এ প্লাস নাই…আমি Studio কে ভুল করে “stdio” লিখতেই পারি…কিন্তু,ঝামেলাটা ওইখানেই…একটু ক্যালসিয়ামের অভাব(মনোযোগের অভাবের কারণ) প্রোগ্রামের বিসমিল্লাহয় গলদ আনলো…
1045122_558845564162406_96698912_n
এখন কথা হলো আমরা Studio ওয়ার্ড টা না ইউজ করে ক্যানই বা ভুল শব্দটা ইউজ করলাম?

stdio = Standard Input Outputআর এটি একটি Header File তাই এর এক্সটেনশন হিসেবে আছে .h । অর্থাৎ এর থেকে কি বুঝা যায় না যে Header ফাইল গুলো ইনপুট এবং আউটপুট এর সাথে সম্পর্কিত । এরা সাধারনত Printf, Scanf, classes, variables, Subroutines চিন্হিত করতে এবং Standard আউটপুট পেতে ব্যবহৃত হয়।


iii) Return 0 না দিলে কি হয়ঃ

নিচের প্রথম ছবিতে প্রোগ্রাম টি return 0;সহ আর লাল চিন্হিত অংশে 0(0x0) দেখা যাচ্ছে, মানে এই প্রোগ্রামটি কোন প্রকার এরর বা বাগ ছাড়া ই রান করেছে।
11

আর দ্বিতীয় ছবিতে লাল চিন্হিত অংশে ২২(0x১৬) দেখা যাচ্ছে। এইটা Run Time Error নামে পরিচিত। কিন্তু এটি থাকলে ও একটা প্রোগ্রাম রান করবে। তাই এই প্রোগ্রাম টা যদি কোন প্রোগ্রামিং কনটেষ্ট এর প্রোগ্রাম হত, তা হলে এই প্রোগ্রাম টি ঠিক হওয়া সত্তে ও ওরা Run Time Error হিসেবে
এই প্রোগ্রামটিকে গ্রহন করত না ।
estfhjqsdrfgjh


পরিশেষেঃ ভেঙ্গেছো কলসির কানা,তা বলে কি প্রেম দেবোনা 😉  প্রেম তো দিতেই হবে 😛
প্রোগ্রামিং শুরুতে শুরুতে অনেক প্যারা দিবে আপনাকে…তাও কাজ চালিয়ে যেতে হবে…একটা প্রোগ্রামের বিভিন্ন এরর ফিক্স করতে করতে মাথা নষ্ট হয়ে যাবে মাঝে মাঝে…তবুও চেষ্টা করতে হবে…অনেকেই যখন পারে,তখন আপনিও পারবেন 8|

ব্রায়ান এডামস এর একটা গানের লিরিক্সঃ
“Don’t give up Keep on trying,
You’re gonna make it,
I ain’t lying
Don’t give up,
don’t ever quit,
Try and try and you can do it,
Don’t give up, yeah” 8|

সি প্রোগ্রামিং শেখা [পর্বঃ০১-A B C D]




সূচনা লিখে একটা পর্ব নষ্ট করলাম না,,,কারণ আপনারা সেটা পড়বেনওনা,বরং সময় নষ্ট করার জন্য ১০১টা গালি দিবেন :-P কাজেই প্রথম পর্বেই আমরা মোটামুটিভাবে রণক্ষেত্রে নামতে যাচ্ছি  :lol: যদি আপনি একেবারেই নতুন হন তবে জীবনের প্রথম প্রোগ্রামটা মনে হয় আজকেই লিখতে যাচ্ছেন ;-)

আচ্ছা…কিছু ব্যাসিক কথাবার্তা বলে ফেলা ভালো । প্রোগ্রামিং করতে কি কি লাগে?

উত্তর হলো, শুধু একটা কম্পাইলার,যেটিতে আপনি প্রোগ্রাম লিখে রান করে দেখবেন । প্রোগ্রাম যেহেতু একটা ভাষা,তাই কম্পাইলারে শুধু আপনি লেখালেখিই করে থাকবেন । প্রত্যেক ভাষার যেমন ব্যাকরণ আছে,তেমনি সি প্রোগ্রামিং ভাষার ও ‘ব্যাকরণ’ আছে । সেই ব্যাকরন বুঝেই আমরা কম্পাইলারে কোড লিখবো,কম্পাইল করবো,তারপর রান করবো :-)

সি প্রোগ্রাম করার জন্য যে সব IDE ব্যবহৃত হয় সেগুলো হল,ডাউনলোড করতে নামের উপর ক্লিক করুনঃ

যেকোন একটা IDE ইউজ করলেই হয়…আমরা এখানে কোডব্লক্স ব্যাবহার করবো…
আশা করি আপনি সফলভাবে   Codeblocks সেটাপ করতে পেরেছেন… না পারলে এখান থেকে দেখে নিন  8-)

এবার ওপেন করুন…কিবোর্ডে একসাথে Control+Shift+N চেপে  Empty file তৈরি করুন…এরপর সেটিকে আপনার কম্পিউটারের যেকোন ড্রাইভে সেভ করে রাখুন…সেভ করার সময় ফাইলনেমের শেষে .c এক্সটেনশন যোগ করে দিবেন…তাহলে কম্পাইলার বুঝে নিবে আপনি সি লিখতে চাচ্ছেন…তখন লেখার সময় অনেক সাজেশন দিবে…কপাইলারের মাঝখানে নোটপ্যাডের মতো জায়গাটাতে কোড লিখবেন…ঘাবড়ে যাবার কিছুই নাই…জাস্ট লিখতে থাকেন…এখানে কোড যেমন করে লেখা আছে সেইভাবেই লিখুন…আচ্ছা,নিচের কোডটা লিখি আমরাঃ

এখন কিছু বোঝার দরকার নাই,জাস্ট বিল্ড করেন এন্ড রান করেন… কি আসলো?? ডিস্প্লে তে কিছু দেখতে পেলেন?
পাওয়া গেলো না । কারণ,আমরা উপরের কোডে ৫টি ব্যাসিক জিনিস নিয়ে ছিনিমিনি খেলেছি :p
১) আমরা শুরুতে “int main” এর পরেই “return 0″ দিয়েছি…ফলে প্রোগ্রামটি শুরুতেই তার কাজ শেষ করেছে
২) “int main”  এর সাথে প্রথম বন্ধনী  () দেই নাই
৩) ৫ নাম্বার লাইনে Digital Bangladesh এর সাথে ” ” চিহ্ন দেই নি ।
৪) Return 0 ও  printf(“Digital Bangladesh!\n”) এই দুইটা স্টেটমেন্টের পর সেমিকোলন দেই নাই…উল্লেখ্য,প্রতিটা স্টেটমেন্টের পর সেমিকোলন দিতে হয়
৫) আর, “int main” কে লিখেছি “Int Main” … যা কোডিং এর ব্যাকরণ  মানবে না…কোন বাক্যের শুরুতে ক্যাপিটাল লেটার দিবেন…তা হবেনা,তা হবেনা :-P যেটা যেভাবে লেখা হয়,সেভাবেই লিখতে হবে…
মানুষ ভূল করতে করতেই শেখে,তাই প্রথমেই সবচেয়ে কমন  ৫ টা ভূল করায়া দিলাম যাতে পরে প্রোগ্রাম এরর দেখাইলে সহজেই ভূল খুজে পান :-)
যাইহোক,এবার নিচের মতো করে লিখেন,কম্পাইল করেন ও রান করেন…
নাও,ইউ আর দ্যা বস  8-)
আচ্ছা…অনেক তো লিখলাম…এইবার  কোডের গঠন ও বিভিন্ন অংশের কাজ বুঝাঁ যাক  8|
১. আপনি একটি টেইলার্স এ গেলেন কলেজ ইউনিফর্ম তৈরি করতে । আপনি ওইখান থেকে কোয়ালিটি অনুযায়ী কাপড় পছন্দ করলেন,এরপর আপনার জামাকাপড়ের মাপ নিলেন টেইলার্সের ডেস্কে থাকা এক লোক ।
২. ওয়েটার মেনু নিয়ে চলে গেল দর্জির কাছে । এই ইউনিফর্ম তৈরিতে যেসব কাপড় লাগবে সব দর্জিকে দেওয়া হল ।
৩. দর্জি মাপ অনুযায়ী ইউনিফর্ম তৈরি করল ।
৪. নির্ধারিত সময়ে আপনি আপনার ইউনিফর্ম পেলেন ।
এইবার উপরের লাইনগুলার সাথে আমাদের প্রোগ্রামটার লাইনগুলা মিলিয়ে পড়ুনঃ

১. #include<stdio.h> : এই লাইনটি দর্জিকে দেওয়া কাপড়ের সাথে তুলনা করা যায় । সি প্রোগ্রামের কিছু কমান্ড কম্পাইলারে দেওয়া থাকে। সেই কমান্ডগুলা আপনার প্রোগ্রামে সংযুক্ত করতে #include<stdio.h> লিখা হয়েছে। দর্জিকে যেমন জামা তৈরি করতে কাপড় দিতে হয়েছে, একইভাবে printf(“Digital Bangladesh!”); লাইনটি কাজ করার জন্য যেই কমান্ডগুলা দরকার সেগুলো #include<stdio.h> লাইনটার মাধ্যমে সংযুক্ত করে দেওয়া হয়েছে।
stdio মানে হলঃ Standard Input Output. এটাকে হেডার ফাইল বলে .h দিয়ে header file বুঝানো হচ্ছে।

২. int main() : এই লাইনটাকে আপনি ডেস্কে থাকা ওই লোকটার সাথে তুলনা করতে পারেন। ইউনিফর্ম বানানো থেকে শুরু করে আপনার কাছে ইউনিফর্ম আসা পর্যন্ত সম্পূর্ন প্রক্রিয়াটা শুরু করে দিয়েছে ওই ব্যাক্তি,এরপর বাকিকাজ দর্জির । একইভাবে int main() ‘{ }’ এর ভেতরে যে লাইনগুলো আছে সেগুলকে কম্পাইলারের কাছে দেয়,যা প্রোগ্রামটির এক্সিকিউশন শুরু করে দিয়েছে।
উল্লেখ্য যে, ‘{‘ কে বলা হয় ওপেনিং কার্লি ব্রেস এবং ‘}’ কে বলা হয় ক্লোসিং কার্লি ব্রেস। int main() এর পর যে ওপেনিং কার্লি ব্রেস আছে সেখান থেকে এক্সিকিউশন শুরু হয় এবং ক্লোসিং কার্লি ব্রেস এ এক্সিকিউশন টার্মিনেট হয়।

৩.
{
printf(“Digital Bangladesh!\n”);
return 0;
}
এই লাইনগুলোকে আপনার পছন্দ করা কাপড়ের সাথে তুলনা করতে পারেন। আপনি যেমন আপনার পছন্দ অনুযায়ী সেই কোয়ালিটির কাপড় দিয়ে বানানো ইউনিফর্ম পেতে পারেন, একই ভাবে একজন প্রোগ্রামার তার পছন্দের কোন কাজ করতে ‘{}’ এর ভেতরে সি এর কোড লিখতে পারে। সেটি হতে পারে ২ লাইনের সহজ কোন প্রোগ্রাম আবার ১০০০ লাইনের জটিল কোন প্রোগ্রাম।
উল্লেখ্য যে, printf(); কে বলা হয় লাইব্রেরী ফাংশন যেটি কম্পাইলারের সাথে stdio.h ফাইলে থাকে। এই printf(); ফাংশনটি কাজ করার জন্যই শুরুতে #include লাইনটি লিখে দিতে হয়েছে। printf(); ফাংশনের ভেতরে ডাবল ইনভার্টেট কমার ভেতরে যা লিখে দেওয়া হয় তাই আউটপুটে দেখায়। আমি Digital Bangladesh! দেখতে চেয়েছি তাই
printf(“Digital Bangladesh!”); লিখেছি…

নোটঃ যে কোন সি প্রোগ্রাম লিখার জন্য int main() এই ফাংশন টা লিখতে হয়।এরপর যেখান থেকে “{” শুরু হয় তার পর থেকে প্রোগ্রাম টা এক্সিকিউট করা(কোন লাইন এক্সিকিউট করা মানে হলো সেই লাইন এর যে কাজ সেই কাজটি করা) শুরু করে এবং একটি একটি করে লাইন এক্সিকিউট করার পর যেখানে “}”আছে সেখানে টার্মিনেট করবে । লক্ষ্য রাখতে হবে যে int এবং main এর মাঝে যেন কমপক্ষে একটা space থাকে ।



আচ্ছা…এইটা শেষ …এবার একটু বকবকানি স্টার্ট করা যাক…বকবকানি হবে প্রোগ্রামের ডাটা টাইপ…কোনটা ক্যামন মেমরী খাইয়ার গঠন ম্যামন হয়…
ডাটা টাইপ বলে সাধারনত কম্পিউটারকে যে ইন্সট্রাকসন দেয়া হবে সেটা কোন ধরনের তাই বুঝায়। ডাটা টাইপ মুলত চার ধরনের হয়।
  • integer(পুর্নসংখা)                                     || গঠনঃ int x;
  • character(অক্ষর)                                    || গঠনঃ char (variable);
  • float(দশমিক বা ভগ্নাংশ)  গঠনঃ                 || গঠনঃ  float x;
  • double(দশমিক বা ভগ্নাংশ কিন্তু এর মেমোরি float টাইপের ডাটার চেয়ে বেশি)      || গঠনঃ double x;
prinf ফাংশনের গঠনঃ
মান শো করানোর সময় Character হলে “%c” ,…Integer হলে “%d”…float হলে “%f…double হলে “%lf” দিয়ে অলটারনেট করবো…এগুলোর ব্যাবহার পরবর্তীতে অংক করার সময় কাজে লাগবে…
scanf ফাংশনের গঠনঃ(prinf এর মতই গঠন,খালি ” ” চিহ্নের বাইরে একটা কমা দিয়ে যে মানটা নিবো সেটা ইনক্লুড করে দিতে হবে)
যেমনঃ
যা যা বুঝি নাইঃ :p
>>  \n \t এগুলা ক্যানো দিলাম? ফায়দা কি?
উত্তরঃ আসলে ত্যামন কিছু না,printf ফাংশনে তোর আর enter রাখা যায়না,তাই enter বাটনের বিকল্প হিসেবে এই \n কাজ করে…ফলে enter এর কাজের মতো নিচের এক লাইন ফাকা থাকে…\t এর কাজ হইলো tab এর মতো,মানে চারটা স্পেসের কাজ করবে…এগুলা যে ইউজ করতেই হবে এমন না,তবে ইউজ করলে দেখতে সুন্দর লাগে আর কি :p

>>  প্রোগ্রামের পাশে ” // ” চিহ্ন দিয়ে এসব কি লিখছি? প্রোগ্রামে কি তাহলে বাংলা লেখা যায়?
উত্তরঃ যায় না…তবে প্রোগ্রাম ব্যাখ্যা করতে কমেন্ট লিখতে পারবেন…অনেকসময় বড় প্রোগ্রামে ছোট ছোট অংশে কি কাজ করছি তা যাতে অন্য একজন সহজে বুঝতে পারে এজন্য কমেন্ট ব্যাবহার করা হয়…কমেন্টের গঠন এইরকমঃ
/* this is a comment */     বা       // this is comment line1
তবেঁ… /* এবং */ এর মাঝে যতগুলো লাইনই লিখেন সবগুলোই কমেন্ট হিসাবে গন্য হবে,কিন্তু // চিহ্ন ব্যবহার করলে প্রতিটি ভিন্ন  লাইনে // চিহ্ন দিতে হবে…দুই লাইনে লিখতে চাইলে কমেন্ট এরকম লিখতে হবেঃ
// this is comment line1
// this is comment line2

অনুশীলনীঃ

১.১ঃ একটি প্রোগ্রাম তৈরি করুন যেটি “Code is poetry” প্রিন্ট করবে?
১.২ঃ একটি প্রোগ্রাম তৈরি করুন যেটি আপনার টাইপ করা অক্ষর প্রিন্ট করবে?
১.৩ঃ একটি প্রোগ্রাম তৈরি করুন যেটি আপনার টাইপ করা ইন্টিজার নাম্বার প্রিন্ট করবে?