প্রধান মেনু খুলুন

সি (প্রোগ্রামিং ভাষা)

প্রোগ্রামিং ভাষা

সি একটি প্রোগ্রামিং ভাষা। সি নির্মাণ করেন ডেনিস রিচি, বেল ল্যাবে ৭০এর দশকে কাজ করার সময়। ভাষাটি তৈরির প্রথম উদ্দেশ্য ছিল ইউনিক্স- অপারেটিং সিস্টেম এর কোড লেখায় এর ব্যবহার, কিন্তু অচিরেই এটি একটি বহুল ব্যবহৃত ভাষায় পরিণত হয়। সি++জাভা সহ পরিবর্তীকালের অনেক প্রোগ্রামিং ভাষার উপর সি'র গভীর প্রভাব পড়েছে। সি এর সবচেয়ে আকর্ষণীয় দিক হচ্ছে এর বহনযোগ্যতা। সি দিয়ে রচিত প্রোগ্রাম যেকোন অপাররেটিং সিস্টেমের কম্পিউটারে চালানো যায়। ৭০ এবং ৮০ দশকের দিকে সি এর জনপ্রিয়তা বাড়ার সাথে সাথে এর অনেকগুলো ভার্সন তৈরি হয়। ১৯৮৩ সালে আমেরিকান মাননিয়ন্ত্রক সংস্থা সি এর ১টি আদর্শ ভার্সন তৈরির জন্য কমিটি গঠন করে। দীর্ঘ ৬ বছর পরে ১৯৮৯ সালে সেই আদর্শ সি ভাষাটি তৈরি হয়, যা আমেরিকান মাননিয়ন্ত্রক সংস্থা সি (আনসি সি (ANSI C)) নামে পরিচিত। পরবর্তিতে আন্তর্জাতিক মাননিয়ন্ত্রক সংস্থা ১৯৯০ সালে সি এর এই আদর্শ ভার্সনটি গ্রহণ করে, যা সি৯০ নামে পরিচিত। মুলত "সি৮৯" এবং "সি৯০" একই ভাষা। যুগের প্রয়োজনে আন্তর্জাতিক মাননিয়ন্ত্রক সংস্থা ১৯৯৫ সালে এই সংস্করণকে বর্ধিত করে এবং পরবর্তিতে ১৯৯৯ সালে সম্পূর্ণ নতুন একটি সংস্করণ প্রকাশ করে যা সি৯৯ নামে পরিচিত। সর্বশেষ ২০১১ সালে সি প্রোগ্রামিং ল্যাঙ্গুয়েজের নবীনতম সংস্করণ সি১১ প্রকাশিত হয়।

সি
K&R C.jpg
দ্য সি প্রোগ্রামিং ল্যাঙ্গুয়েজ, ব্রায়ান কার্নিগানডেনিস রিচি-র লেখা মূল সংস্করণের প্রচ্ছদ; এই বইটি সুদীর্ঘ সময় ধরে ভাষাটির একটি অ-প্রমিত বিবরণ হিসেবে ধরা হত।
প্যারাডাইমনির্দেশমূলক (পদ্ধতিমূলক) সিস্টেম্‌স বাস্তবায়ন ভাষা
নকশাকারডেনিস রিচি
বিকাশকারীডেনিস রিচি এবং বেল ল্যাব্‌স
প্রথম প্রদর্শিত১৯৭২
ধরণের শৃঙ্খলাস্থির, দুর্বল
মুখ্য বাস্তবায়নসমূহ
ক্ল্যাং, জিসিসি, মাইক্রোসফট ভিজুয়্যাল সি/সি++, বোরল্যান্ড সি, ওয়াটকম সি
যার দ্বারা প্রভাবিত
বি (বিসিপিএল, সিপিএল), অ্যালগল ৬৮, অ্যাসেম্বলি ভাষা
যাকে প্রভাবিত করেছে
অক, সি শেল, সি++, সি শার্প, অবজেক্টিভ সি, বিটসি, ডি, কনকারেন্ট সি, জাভা, জাভাস্ক্রিপ্ট, লিম্বো, পার্ল, পিএইচপি

পরিচ্ছেদসমূহ

উৎপত্তিসম্পাদনা

১৯৬০-এর দশকে বেশ কিছু কম্পিউটার প্রোগ্রামিং ভাষা তৈরি করা হয়েছিল। মার্কিন কম্পিউটারবিদ গ্রেস হপার Mathematic, Flowmatic এবং A2 নামে তিনটি প্রোগ্রামিং ভাষা উদ্ভাবন করেন। এরপর জেম্‌স ব্যাকাস তৈরি করেন ForTran। তারও পরে ALGOL, COBOL, Ada ইত্যাদি প্রোগ্রামিং ভাষা উদ্ভাবন করা হয়। মূলত এই ভাষাগুলিই আধুনিক প্রোগ্রামিং ভাষাগুলির পূর্বসূরী। কিন্তু ঐ ভাষাগুলিকে ভিন্ন ভিন্ন কাজে ব্যবহার করা হত। তাই কম্পিউটার বিজ্ঞানীরা এমন একটি প্রোগ্রামিং ভাষার কথা ভাবতে থাকেন যার মাধ্যমে সব ধরনের সফটওয়্যার তৈরি করা সম্ভব হবে। এরই ফলশ্রুতিতে বিজ্ঞানীরা তৈরি করেন ALGOL 60 (Algorithmic Language) এবং এরপর Combined Programming Language (CPL), কিন্তু CPL শেখা এবং ব্যবহার করা ছিল বেশ কঠিন। তাই এটা জনপ্রিয়তা পায়নি।

ক্যামব্রিজ বিশ্ববিদ্যালয় এর মার্টিন রিচার্ড CPL কে ভিত্তি করে ১৯৬৭ সালে তৈরি করেন Basic Combined Programming Language (BCPL) কিন্তু এটি ছিল মূলত Less Powerful to Specific এবং টাইপবিহীন একটি প্রোগ্রামিং ভাষা।

এ সময়েই যুক্তরাষ্ট্রের বেল গবেষণাগারে বিজ্ঞানী টমসন তৈরি করেন বি (B) নামক একটি প্রোগ্রামিং ভাষা; এটি ছিল পূর্বের BCPL-এর একটি উন্নত সংস্করণ। ডেনিস রিচি পরবর্তীতে B এবং BCPL অনুসরণ করেন এবং নিজে থেকে আরো কিছু কৌশল ব্যবহার করে তৈরি করেন "সি" (C)। মূলত B-এর সীমাবদ্ধতা গুলো দূর করার উদ্দেশ্যেই "সি" এর উৎপত্তি।

সিনট্যাক্সসম্পাদনা

কীওয়ার্ডসম্পাদনা

সি প্রোগ্রামিং ভাষায় কীওয়ার্ড বলতে বোঝায় সেইসব সংরক্ষিত শব্দসমূহকে যেগুলো একটি বিশেষ অর্থ প্রকাশ করে। সি৮৯ এ এরকম ৩২টি কীওয়ার্ড আছে।

সি৯৯ এ এরকম আরো পাঁচটি কীওয়ার্ড যুক্ত হয়।

সি১১ তে যুক্ত হয় আরো সাতটি কীওয়ার্ড।

অপারেটরসম্পাদনা

সি এর অপারেটরগুলো হল -

  • অ্যারিথমেটিক: +, -, *, /, %
  • অ্যাসাইনমেন্ট: =
  • অগমেন্টেড অ্যাসাইনমেন্ট: +=, -=, *=, /=, %=, &=, |=, ^=, <<=, >>=
  • বিটওয়াইজ লজিক: ~, &, |, ^
  • বিটওয়াইজ শিফট্‌: <<, >>
  • বুলিয়ান লজিক: !, &&, ||
  • কন্ডিশনাল ইভালুয়েশন: ? :
  • ইকুয়ালিটি টেস্টিং: ==, !=
  • কলিং ফাংশন: ( )
  • ইনক্রিমেন্ট ও ডিক্রিমেন্ট অপারেটর: ++, --
  • মেম্বার সিলেকশন: ., ->
  • অবজেক্ট সাইজ: sizeof
  • অর্ডার রিলেশন: <, <=, >, >=
  • রেফারেন্স ও ডিরেফারেন্স: &, *, [ ]
  • সিকুয়েন্সিং: ,
  • সাবএক্সপ্রেসন গ্রুপিং: ( )
  • টাইপ কনভার্সন: (typename)

উদাহরণ কোডসম্পাদনা

সি প্রোগ্রামিং ভাষার উদাহরন : Hello World হল একটি সাধারণ প্রোগ্রামিং কোড যা সকল প্রোগ্রামার প্রোগ্রামিং কোড লিখার সময় লিখে থাকে ।

এই কোডের অংশটুকুতে "main()" নামের ফাংশন লোড হলে একটি লাইনে Hello World লেখা দেখাবে:

main()
{
    printf("'Hello World\n");
}

সি প্রোগ্রামিং কোডের আদর্শ উদাহরণ

#include <stdio.h>
int main(void)
{
    printf("Hello World\n");
    return 0;
}
  • এখানে #include <stdio.h> লিখার মাধ্যমে কম্পেইলার কে stdio.h নামের হেডার ফাইল পড়তে বলা হয়েছে ।
  • int main(void) মানে মূল ফাংশন ইন্টেজার (গাণিতিক পূর্ণ সংখ্যা) প্রদান করবে । আর (void) লিখার কারনে মূল ফাংশনে কোন কিছু ইনপুট করতে হবে না ।
  • printf("Hello World\n") এখানে printf হল একটি ফাংশন যার বিস্তারিত stdio.h হেডার ফাইলের মধ্যে লিখা আছে । সাধারণত printf এর মাধ্যমে স্ট্রিং উপাত্ত কম্পিউটারের পর্দায় দৃশ্যমান করার জন্য ব্যবহার হয় । এর মানে Hello World লিখাটি কম্পিউটারের পর্দায় দৃশ্যমান হবে।

উপাত্তের ধরনসম্পাদনা

সি তে উপাত্তের ধরন মুলত তিন প্রকারঃ

  1. ব্যবহারকারী সংজ্ঞায়িত উপাত্তের ধরন
  2. অন্তর্নির্মিত বা বিল্ট ইন উপাত্তের ধরন
  3. উদ্ভূত উপাত্তের ধরন

অন্তর্নির্মিত উপাত্তের ধরনসম্পাদনা

ANSI কর্তৃক নির্ধারিত উপাত্তের ধরন সমুহ কে অন্তর্নির্মিত বা বিল্ট ইন উপাত্তের ধরন বা অপরিহার্য উপাত্তের ধরন বলে।

অন্তর্নির্মিত উপাত্তের ধরন সাধারনত ৪ প্রকারঃ

  • ক্যারেক্টার ধরনের উপাত্ত - সাধারনত ক্যারেক্টার বা স্ট্রিং জাতীয় কোন উপাত্ত ঘোষণার জন্য ক্যারেক্টার ধরনের উপাত্ত ব্যবহার করা হয় । ক্যারেক্টার ধরনের উপাত্ত মেমোরিতে ১ বাইট জায়গা দখল করে । কোন উপাত্তকে ক্যারেক্টার হিসাবে ঘোষণা করার জন্য 'char' কীওয়ার্ড ব্যবহৃত হয় যেমনঃ char abc; char xya;। এর বিন্যাস নির্দিষ্টকারী হিসেবে '%c' ব্যবহার করা হয় ।
  • ইন্টিজার ধরনের উপাত্ত - পূর্ণসংখ্যা জাতীয় কোন উপাত্ত ঘোষণার জন্য এই উপাত্তের ধরন ব্যবহার করা হয় । এই উপাত্তের ধরন মেমোরিতে ২ বাইট জায়গা দখল করে । এর কীওয়ার্ড হচ্ছেঃ 'int' । যেমনঃ int abc; int xyz; । বিন্যাস নির্দিষ্টকারী হিসেবে '%d' ব্যবহার করা হয়।
  • ফ্লোটিং পয়েন্ট ধরনের উপাত্ত -
  • দ্বৈত ধরনের উপাত্ত -

পয়েন্টারসম্পাদনা

চলকসম্পাদনা

অ্যারেসম্পাদনা

একই ধরণের বা সমপ্রকৃতির ডেটা টাইপের গুচ্ছকে অ্যারে বলা হয়। [তথ্যসূত্র প্রয়োজন] অ্যারের একটি নির্দিষ্ট নাম থাকে। '[ ]' তৃতীয় বন্ধনীর সাহায্যে অ্যারের নামের সাথে অ্যারে সাইজ লেখা হয়, যা অ্যারে ভেরিয়েবলের(Variable) সর্বোচ্চ ডেটার সংখ্যা নির্দেশ করে। এই সংখ্যাকে অ্যারের ইনডেক্স(Index) বলা হয়। যেমন, একটি অ্যারে— int num[4]; এখানে [4] দ্বারা অ্যারের ইনডেক্স প্রকাশ করে। int num[4]; অ্যারেটিতে মোট পাঁচটি চলক(Variable) আছে। যেমন, ১ম— num[0] , ২য়— num[1] , ৩য়— num[2] , ৪র্থ— num[3] , ৫ম— num[4]

একই ধরণের অনেকগুলো ভেরিয়েবলের জন্য অ্যারে ব্যবহার করা হয়। ধরা যাক, ৬টি সংখ্যার জন্য ৬টি ভেরিয়েবল ঘোষণা করতে হবে। যেমন, int num0, num1, num2, num3, num4, num5; এভাবে ভেরিয়েবল ঘোষণা করা বেশ সময়সাপেক্ষ এবং কষ্টকর। তাই এটাকে সহজ করার জন্য অ্যারে ব্যবহার করা হয়। যেমন, int num[6];

অ্যারে ব্যবহারের সুবিধাসম্পাদনা

[তথ্যসূত্র প্রয়োজন]

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

অ্যারে ব্যবহারের অসুবিধাসম্পাদনা

[তথ্যসূত্র প্রয়োজন]

  • প্রোগ্রাম নির্বাহের সময়ে অ্যারের সাইজ কখনো পরিবর্তন করা যায় না।
  • প্রকৃত ডেটা অপেক্ষা অ্যারের সাইজ অনেক বেশি ঘোষণা করা হলে মেমোরির অপচয় হয়।
  • প্রকৃত ডেটা অপেক্ষা অ্যারের সাইজ কম ঘোষণা করা হলে অ্যারেতে ডেটার পর্যাপ্ত স্থান সংকুলান হয়না।
  • বিভিন্ন ধরণের ডেটা অ্যারেতে রাখা যায় না।