Archive | সি/সি++ RSS feed for this section

7 August 2011 0 Comments

চল শিখি এসটিএল

প্রশ্নঃ এসটিএল কি?

উত্তরঃ The Standard Template Libraries (STL’s) are a set of C++ template classes to provide common programming data structures and functions such as doubly linked lists (list), paired arrays (map), expandable arrays (vector), large string storage and manipulation (rope), etc. The STL library is available from the STL home page. This is also your best detailed reference for all of the STL class functions available.

  • কোথায় পাব এসটিএল? (YoLinux and Wiki)
    • Sequences:
      • vector: (this tutorial) Dynamic array of variables, struct or objects. Insert data at the end.
      • deque: Array which supports insertion/removal of elements at beginning or end of array
      • list: (this tutorial) Linked list of variables, struct or objects. Insert/remove anywhere.
    • Associative Containers:
      • set (duplicate data not allowed in set), multiset (duplication allowed): Collection of ordered data in a balanced binary tree structure. Fast search.
      • map (unique keys), multimap (duplicate keys allowed): Associative key-value pair held in balanced binary tree structure.
    • Container adapters:
      • stack LIFO
      • queue FIFO
      • priority_queue returns element with highest priority.
    • String:
      • string: Character strings and manipulation
      • rope: String storage and manipulation
    • bitset: Contains a more intuitive method of storing and manipulating bits.
  • Operations/Utilities:
    • iterator: (examples in this tutorial) STL class to represent position in an STL container. An iterator is declared to be associated with a single container class type.
    • algorithm: Routines to find, count, sort, search, … elements in container classes
    • auto_ptr: Class to manage memory pointers and avoid memory leaks.

আরও দেখুন-

18 June 2011 1 Comment

[সংগৃহীত লেখা] কোনটি প্রাইম নাম্বার জানতে চান?

লিখেছেন : মাখন। ভাল মানের  লেখা।  মূল লেখার লিংকঃ http://techtunes.com.bd/programming/tune-id/38374/

“আস্‌সালামু আলাইকুম। কেমন আছেন সবাই টেকটিউনস এটি আমার প্রথম টিউন। জানি না কোন সাহসে টিউন করছি। এ পর্যন্ত এখানে আমি এমন কোন বিষয় (আমার আগে থেকে জানা) পাই নি যা নিয়ে কোন টিউন হয়নি।

সি প্রোগ্রামিং এমন এক ভাষা…

হ্যা আমি জানি আপনারা এ সবকিছুই জানেন। যারা জানেন না তারা জাকির ভাইয়ের টিউন গুলো পড়া শুরু করুন। কারণ computer এর প্রথম শব্দই c ।  সুতরাং এটা জানতেই হবে এমন একটা বিষয়। আমার এই টিউনটি তাদের জন্য যারা এসব জানেন অথচ সি প্রোগ্রামিং বিরক্তিকর/কঠিন/ফালতু বিষয় মনে হয় তাদের জন্য।
যেকোন বিরক্তিকর/কঠিন/ফালতু বিষয় পড়ার/জানার/শেখার প্রথম শর্ত বিষয়টার মধ্যে এমন কিছু একটা খুজে বের করতে হবে যা আপনার কাছে মজার। একবার কোন কিছুতে মজা পেয়ে গেলে আপনাকে আর কোন টেনশন করতে হবে না।বিষয়টা আপনা আপনিই মজাদার/সহজ/প্রয়োজনীয় হয়ে উঠবে। বুঝলেন কিছু!!!কিছু মজার আমিই দিয়ে দিচ্ছি…

প্রথমতঃ

সি প্রোগ্রামিং দিয়ে এক কথায় আপনার মনিটরে যা কিছু দেখছেন সবকিছুই বানাতে পারবেন। এমন আস্ত একটা অপারেটিং সিস্টেম ও।
তো মজা না পাবার কি আছে।

দ্বিতীয়তঃ

অনেক টেকটিউনার প্রায় প্রতিদিন কত কষ্ট করে মজার মজার কোড টিউন করছেন। আপনি শুধু কোডগুলো আপনার কমপাইলারে লিখুন আর Ctrl+F9 চাপুন। তাতেও না হলে Google তো আছেই। (হাজার হাজার Error মারে! TechTunes আছি কি জন্যে)। দয়া করে কপি/পেস্ট না করে দেখে দেখে নিজে লিখুন। কথায় আছে না ১বার লেখা=১০বার পড়া(≠১০০…বার কপি/পেস্ট করা)।
এখন থেকে আপনাদের কিছু কোড দিব ব্যাখ্যা সহ… আপনাদের কাজ কোড গুলোর মজাটা বের করা।

প্রাইম নাম্বার যাচাইঃ

#include<stdio.h>
#include<conio.h>
void main()
{
clrscr();
int a,prime;
printf("\n\n\t\t\t\t\"Prime Numbers Test Out\"\n\n");
printf("\t\t\t\t\"Made by ME-MAAKN\"\n\n");
printf("Enter a number to Test : ");
scanf("%d",&a);
prime=1;
for(int i=2;i<=a/2;i=i+1)
if((a%i)==0)
prime=0;
if(prime==1)
printf("\n\t\t\t\t\The Number is Prime.");
else
printf("\n\t\t\t\t\The Number is not Prime.");
getch();
}

সি প্রোগ্রমিং এ সবচেয়ে বেশি গুরুত্বপূর্ণ বিষয় হচ্ছে এখানে একটা দাড়ি-কমাও ভুল হতে পারবে না।

‌‌
আরও পড়ুন মূল লেখার লিংকঃ http://techtunes.com.bd/programming/tune-id/38374/

11 March 2011 0 Comments

জিতুক বাংলাদেশ, সি ভাষা ও বাংলাদেশ দলের জন্য ভিটামিন সি!

বিশ্বকাপ ২০১১ । প্রতিপক্ষ যে শক্তিশালী সাউথ আফ্রিকা। তবুও অপেক্ষায় আছি। বাংলাদেশ তো আগেও অনেক মিরাকল ঘটিয়েছে। সাউথ আফ্রিকার বিপক্ষেও সে রকম কিছু ঘটাতে পারে কিনা?

এর ফাঁকে সি ভাষার ও ভিটামিন সি এর কিছু জেনে নিই-

সি ভাষার কথা সিএন্ডই হতেঃ

“(…)সি প্রগ্রামিং ল্যাংগুয়েজ আমার শেখা প্রথম প্রগ্রামিং ল্যাংগুয়েজ। এটি একটু অস্বাদ লাগলেও পরবর্তি যে কোন ল্যাং শিখতে সি এর জুরি নাই।
সি প্রগ্রামিং ল্যাংগুয়েজ এর বৈশিষ্ট্য:
* ১. সি ল্যাংগুয়েজ অনেক বেশি পরিমান ফাংশন আছে এবং এর কম্পাইলার অ্যাসেম্বি ল্যাংগুয়েজ সাপোর্ট করে। তাই যে কোন প্রগামই সি ভাষায় তৈরি করা সম্ভব।
* ২. এই ল্যাংগুয়েজ অনেক দ্রুত গতিতে কাজ করে। উদাহরন স্বরূপ: ০ থেকে ১৫০০০ পর্যন্ত বৃদ্ধির প্রগ্রামে সি ল্যাংগুয়েজ এ ১ সেকেন্ড সময় লাগলে বেসিকে লাগবে ৫০ সেকেন্ড।
* ৩. এ ভাষায় লেখা প্রগ্রাম যেকোন কম্পিউটারে পরিবর্তন ছাড়া বা সামান্য পরিবর্তন করে চালানো যায়।
* ৪. স্টাকচার্ড প্রগ্রামিং ল্যাং হওয়ায় (ছোট ছোট ফাংশনে ভাগ করে ) খুব সহজেই প্রগ্রাম লেখা যায়।
* ৫. আরেকটি মজার বৈশিস্ট্য হলো নিজের তৈরি ফাংশন সি লাইব্রেরীতে যোগকরে পরে তা ব্যবহার করা যায়।

সি ভাষার সহজ উদাহরন:
#include<stdio.h>
int main()
{
printf( “I am alive! Beware.\n” );
getchar();
return 0;
}
ব্যাখ্যা:
* ১. #include<stdio.h>
এটির মাধ্যমে একটি লাইব্রেরী ফাংশন stdio.h কে ডাকা হয় যেখানে অন্যান্য ফাংশন সম্পর্কে তথ্য রয়েছে।
* ২. main(){….}
এটি প্রগ্রামের প্রধান ফাংশন, এখান থেকেই প্রগ্রাম চালু হয়।
* ৩. printf( “I am alive! Beware.\n” );
এটি I am alive! Beware. বক্যটি স্ক্রিনে প্রদশর্ন করায়।
* ৪. \n দিয়ে নতুন লাইন বুঝানো হয়েছে।
* ৪. getchar();
একটি কী প্রেস না করা পর্যন্ত আউটপুট প্রদর্শন করতে থাকে।(…)”

আর ভিটামিন সি? জেনে নিই এখান থেকে-

ভিটামিন ‘সি’র কথা আমরা কে না জানি ? এর অভাবে স্কার্ভি রোগ হয়। ঠোঁট ফেটে যায়; সবুজ ফলমূল থেকে আমরা ভিটামিন ‘সি’ পেয়ে থাকি ইত্যাদি তথ্য আজ আর কারোরই অজানা নয় । এক কথায় বলা যায়, ভিটামিন ‘সি’র পুরোটা অংশই আমরা পাই সবুজ উদ্ভিদ থেকে।…. ভ্যা ভ্যা……ভ্যা…. কোথায় সি ভাষা আর কোথায় ভিটামিন সি? হাঃ হাঃ

26 December 2010 2 Comments

প্রোগ্রামিং করুন Eclipse IDE দিয়ে

লিখেছেন – আহমেদ শামসুল আরেফীন

এক্কেবারে নতুন প্রোগ্রামারদের জন্য এই পোষ্টটি। কারণ পুরানপাপি কোডগুরুরা এইসব কাজে সিদ্ধহস্ত।

চমৎকার এই আইডিই টি ডাউনলোড করুন এক্কেবারে ফ্রি। http://www.eclipse.org থেকে। পারলে উবুন্তুতে ইন্সটল করে নিন। ফলে আর GCC নিয়ে মাথা ঘামাতে হবে না। শুধু উবুন্তুতে Compiler হিসেবে GCC ইন্সটল করে নিন। পুরোন ল্যাপটপেও দারুন প্রোগ্রাম বানাতে পারবেন- এই গ্যারান্টি দিতে পারি। একই কাজ উইন্ডোজে করতে চাইলে Cygwin ইন্সটল করা লাগবে।

তবে উবুন্তুই কেন জানি খুবই ভাল পাই প্রোগ্রামিং কাজের জন্য।

26 December 2010 1 Comment

প্যারালাল প্রোগ্রামিং – ১

লিখেছেন – আহমেদ শামসুল আরেফীন

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

এই জন্যে আমাদের জানতে হবে C++ ও OpenMP। একটি প্যারাল্যাল প্রোগ্রামিং কোড ?

int main(int argc, char *argv[]) {
    const int N = 100000;
    int i, a[N];

    #pragma omp parallel for
    for (i = 0; i < N; i++)
        a[i] = 2 * i;

    return 0;
}

এইখানে for-loop টি প্যারালাল ভাবে চালিত হবে।

Open-MP শিখতে চাইলে নিচের রেফারেন্সঃ
http://openmp.org/wp/

আজকে আর সময় নেই। আবার ফিরে আসবো আরেকটু বিস্তারিত অ্যাডভান্সড প্রোগ্রামিং/ হাই পারফর্মেন্স প্রোগ্রামিং নিয়ে। আপাতত শিখতে থাকুনঃ GPU Programming, Open MP, Open MPI ইত্যাদি।

4 October 2010 0 Comments

সি++ ভাষার টিউটোরিয়াল সমগ্র

লিখছেন- আহমেদ শামসুল আরেফীন

এই সি++ (ANSI-C++) ভাষার টিউটোরিয়ালগুলোতে সাধারণ কনসেপ্ট থেকে শুরু করে অ্যারে, ক্লাস, এমনকি পলিমরফিসম ও টেমপ্লেটও ব্যখ্যা করা আছে।

[ Download পুরো টিউটোরিয়াল  PDF  আকারে ]

শুরুর কথা:
Instructions for use
বেসিক C++:
Structure of a program
Variables. Data Types.
Constants
Operators
Basic Input/Output
কন্ট্রোল স্ট্রাকচার:
Control Structures
Functions (I)
Functions (II)
আরও কম্পাউন্ড ডাটা টাইপ:
Arrays
Character Sequences
Pointers
Dynamic Memory
Data Structures
Other Data Types
Object Oriented প্রোগ্রামিং:
Classes (I)
Classes (II)
Friendship and inheritance
Polymorphism
অ্যাডভান্সড Concepts:
Templates
Namespaces
Exceptions
Type Casting
Preprocessor directives
C++ ইন/আউট:
Input/Output with files

আরও শিখতে চাও? তবে ঢুঁ মারোঃ

১. http://www.cplusplus.com/doc/tutorial/
২. http://www.cprogramming.com/tutorial.html

17 September 2010 0 Comments

সি নিয়ে আলোচনা

লিখেছেন- শিশির

সি দিয়ে কথা বলতে দুইটা হাত লাগে, মুখ না হলেও চলে। আমি এটা পছন্দ করি কারন এই না যে আমি একটা আঁতেল, কারন এই যে যখন নটরডেমে থাকতে অন্ধের মত একটা প্রোগ্রামিং ল্যাঙ্গুয়েজ খুঁজছিলাম তখন বুয়েটের সংগ্রাম ভাই হার্বার্ট শিল্ড সাহেবের একটা সবুজ রঙয়ের নীলক্ষেত এডিশন বইয়ের নাম বলেছিলেন। বইয়ের ভিতরের জিনিসগুলো কি, কিভাবে কাজ করে- এগুলো বোঝার আগেই আমি বুঝে নিয়েছিলাম printf( ) এর মধ্যে ” ” এর ভেতর কোন কিছু লিখলে সেটা কনসোলে কি সুন্দর করে প্রিন্ট করে দেয়। এই জিনিসটা দেখে এত খুশি হয়েছিলাম যে বইয়ের ভিতরের জিনিসগুলো পড়তে ভীষণ আগ্রহ জমে গেল। সেটা শুরু। এরপর সি থেকে মজা লুটতে থাকলাম।

এখানে সি নিয়ে আমার লেখা কিছু টিউটোরিয়াল আছে। বাংলায়। বিগেনারদের জন্য কন্সেপচুয়াল ব্যাপার স্যাপার গুলোকে জোর দিয়েছি। লিংক

23 August 2010 1 Comment

সি++ স্ট্যান্ডার্ড টেম্প্লেট লাইব্রেরী

সি++ স্ট্যান্ডার্ড টেম্প্লেট লাইব্রেরী

লিখেছেন- ইকরাম মাহমুদ (smilitude)

STL হল একটা বেশ বড়সড় একটা লাইব্রেরী। মোটামুটি বেশিরভাগ ডাটা স্ট্রাকচার আর হাবিজাবি এটার মধ্যে লিখে রাখা আছে, তোমাকে শুধু জানতে হবে সেটা তুমি কিভাবে ব্যবহার করবে।

ভেক্টর

মাঝে মাঝে এমন হয় – আমাদের একটা 2D অ্যারে দরকার, যেটায় মোটামুটি প্রতিটায় সর্বোচ্চ ১০০০০ টা ডাটা রাখতে হবে, আর প্রতিটা ডাটায় সর্বোচ্চ ১০০০০টা করে ডাটা রাখা লাগবে। কিন্তু আমাকে এটাও বলা আছে যে সর্বোচ্চ ১০০০০০ টা ডাটা থাকতে পারে।

খুব সাধারণভাবে যেটা মাথায় আসে, সেটা হচ্ছে এরকম কিছু একটা

int array[10000][10000];

তাই না? এটা কিন্তু বেশ বড়সড় একটা অ্যারে। আমার কম্পিউটার মাথা ঘুরে পড়ে যাবে তাকে এই পরিমান মেমরি অ্যালোকেট করতে বললে, কিন্তু আমার আসলে এত বেশি জায়গা লাগছে না, কারণ আমাকে বলেই দেয়া হয়েয়ে ডাটা সবমিলে সর্বোচ্চ ১০০০০০ টা থাকে পারে।

এধরণের সময়, আমরা ডাইনামিক মেমরি অ্যালোকেট করি – ঠিক যতটুকু মেমরি দরকার ঠিক ততটুকুই নেই। যেটা ম্যানুয়ালি করা বেশ ঝক্কি, আর সেটায় মেমরি পরিষ্কারও করে দিতে হয় কাজ শেষে, নইলে সব ডাটা জমতে জমতে কম্পিউটারের গলা চিপে ধরে।

ভেক্টর হলো একটা অ্যারে, যেটায় ডাইনামিকালি জিনিসপাতি ঢুকিয়ে রাখা যায়। মানে, এটাও একটা অ্যারে, কিন্তু সেটা ঠিক ততটুকু মেমরি খায়, যতটুকু খাওয়া লাগে।

ভেক্টর ডিক্লেয়ার করে এভাবে

vector< int > array;

তুমি যদি অন্য কোন টাইপের ডাটা নিতে চাও তাইলে int এর জায়গায় সেই ডাটার নাম লিখতে হবে। যেমন এটা আরো কিছু অ্যারে।

vector< double > water;
vector< long long > balance;
vector< char > characters;
vector< day > diary;

ভেক্টরে কোন ডাটা রাখতে হলে, সেই ভেক্টরের শেষে ডাটাটাকে পুশ করতে হয়।
array.push_back( 100 );

আর ভেক্টরে কটা ডাটা আছে সেটা আমরা জানতে পারি .size() ফাংশনকে কল করে। যেমন ধরো, আমি একটা ভেক্টরে কিছু ইন্টেজার ঢুকাবো, তারপর সবাইকে প্রিন্ট করবো, সেটার কোড হবে এরকম।

int main() {
vector< int > v;
v.push_back( 1 );
v.push_back( 2 );
v.push_back( 3 );
v.push_back( 4 );

for(int i=0; i<v.size(); i++)

cout << v[i] << endl;

return 0;
}

বাকি সব কিছুতে ভেক্টরকে সাধারণ অ্যারের মত ব্যবহার করা যায়। যেমন আমি 0th এলিমেন্টটা পাল্টে দিতে পারি v[0] = 10000 লিখে। আরেকটা মজা হচ্ছে আমরা অ্যারেতে ধাম করে সরাসরি কপি করতে পারি না । কিন্তু ভেক্টরে সেটা করা যায়।

int main() {
vector< int > v, t;
v.push_back( 1 );
v.push_back( 2 );
v.push_back( 3 );
v.push_back( 4 );

t = v; // copying
for(int i=0; i<t.size(); i++)

cout << t[i] << endl;

return 0;
}

ভেক্টরে যদি আমি 2D ডাটা রাখতে চাই তাহলে সেটা দুভাবে করা যায়। আমি প্রথমটা প্রেফার করি, পরেরটা দেখতে আমার ভয় ভয় লাগে। কিন্তু মাঝে মাঝে কোন পথ থাকে না সেটা লেখা ছাড়া।

vector< int > v[100];

vector< vector< int > > v;

vector< vector< vector< int > > > v; // 3D

একটা জিনিসে একটা সাবধান থেকো, vector<vector<int>> v; এভাবে লিখলে >> এর জন্য কিছু কম্পাইলর কিন্তু এরর মারে।

[...]