basic c++ and difference between c and c++ syntax [part 2]

basic c++ and difference between c and c++ syntax [part 2]

18 নাম্বার পয়েন্ট থেকে ম্যাট্রিক্স শুরু ।

introducing c++

c++ almost c language এঁর মতোই ।এটা object oriented programming language . এবং এটা standard template library (STL) সাপোর্ট করে ।

c++ নিয়ে কাজ করার জন্য আমাদের file extension দিতে হবে introduction.cpp এভাবে ।

basic difference between C and C++

  1. আমরা যেমন c programming language এ #include <stdio.h> ইম্পোরট করে নিতে হয় ঠিক c++ এ কাজ করার জন্য আমাদের #include <iostream> ইম্পোরট করে নিতে হবে । iostream mean input output stream . এবং stream এঁর মানে প্রোগ্রামিং এঁর ভাষায় অনেকগুলো বাইটের একটা গ্রুপ ।

  2. আমরা c programming language কিছু প্রিন্ট করার জন্য printf() ব্যাবহার করতাম কিন্তু c++ এ কিছু প্রিন্ট করার জন্য আমরা ব্যাবহার করব cout << "hello world " এমন সিনট্যাক্স

    এটা করলে একটা এররর দিবে কারণ cout নামে সে কাওকে চিনে না । তাকে চিনাতে হবে std এঁর একটা প্রপার্টি হচ্ছে cout । এভাবে বললে সে বুঝতে পারবে ।

     এখানে এক লাইনে কিভাবে মাল্টিপল কিছু প্রিন্ট করা যায় সেটাও দেখানো হয়েছে ।/ 
     #include <iostream>
     int main(){
      std::cout << "hello world " << "another text\n"; 
      std::cout << 1 + 3;
      return 0;
     }
    
  3. আমরা একটা কিছু নতুন লাইনে প্রিন্ট করার জন্য \n ব্যাবহার করতাম সেঁতা c++ এ endl এঁর মাধ্যমে বুঝানো হয় । এখানে \n দেওয়া যেই কথা এটা করাও সেই কথা । thats up to you .

     int main(){
      std::cout << "hello world " << std::endl
                << "another text";
      return 0;
     }
    
  4. c++ এ কিছু প্রিন্ট করার সময় format specifier দিতে হয় না । সে নিজেই বুঝেই নেয় ।

     int a = 100;
     std::cout << a;
     std::cout << "there have a value. thats is " << a << std::endl;
    
  5. এইযে বার বার std::cout তারপর std::endl এভাবে লেখতে হচ্ছে এটার ঝামেলা না করতে চাইলে । গ্লোবালি ডিক্লার করে রেখে দিতে পারি ।

     #include <iostream>
     using namespace std;
     int main(){
        cout <<"hi" << endl
     }
    
  6. কিভাবে c++ এ float নাম্বার প্রিন্ট করব । c programming এ আমরা format specifier এঁর মাধ্যমে বলে দিতে পারতাম যে দ্শমিকের পর কত ঘর দেখবে । কিন্তু c++ এতো format specifier নেই । তার জন্য আমরা কি করতে পারি .

     steps 1 : #include <iomanip>
     steps 2 : float a = 10.1289;
               cout << fixed << setprecision(2) << a << endl;
    
     // setprecision এঁর জন্য আলাদা একটা header অ্যাড করতে হচ্ছে <iomanip>
    
  7. এই যে আমরা এত এত header আলাদা আলাদা করে অ্যাড করতেছি । এটা সব সময় মনে রাখা অনেক কঠিন । এঁর জন্য কি করা যেতে পারে ? সব header file একসাথে লোড করে নিতে পারি । এটা একটু মেমরি কমজিউমিং একটা ব্যাপার । তবে কাজ করতে করতে যে আটকে যাবে তেমন না । তাই আমরা এভাবে অ্যাড করতে পারি । এটার মাধ্যমে c programming এঁর header গুলো অ্যাড হয়ে যাবে । তখন আমরা c programming এঁর printf() ব্যাবহার করতে পারব ।

     #include <bits/stdc++.h> 👈👈👈👈 এই হেডারটা অ্যাড করে নিব শুধু ।  
     using namespace std;
     int main()
     {
      float a = 10.1289;
      cout << fixed << setprecision(2) << a <<endl;
      return 0;
     }
    
  8. c++ এ কিভাবে ইউজার থেকে ইনপুট নিতে হয় ।

     #include <bits/stdc++.h> 👈👈👈👈 এই হেডারটা অ্যাড করে নিব শুধু ।  
     using namespace std;
     int main(){
          int num, num2;
          char name[100]
          /* char ইনপুট নেওয়ার ক্ষেত্রে স্পেস পাইলে সে মনে করে এখানে char টা শেষ 
             । আমরা c এঁর gets() ব্যাবহার করতে পারি । তাছাড়া c++ এ করতে চাইলে 
             cin.getline(name, 100); ব্যাবহার করব 
          */;
          cin >> num; // cin এঁর মাধ্যমে ইনপুট নেওয়া যায় 
          cin >> num >> num2; // to take input multiple 
          cin.getline(name, 100); // এঁর মাধ্যমে স্ট্রিং space সহ ইনপুট নেওয়া জায় 
          return 0;
     }
    
  9. typecasting

      int double a = 12.13445;
      int  x = int(a);
    
  10. nameSpace

    আমরা এগের উদাহরণ গুলোতে namespace নিয়ে কাজ করেছি । আসলে এই namespace কি ? namespace হচ্ছে একটা গ্রুপ । যেমন আমরা c তে struct ব্যাবহার করেছি । সেরকম এটা একটা জিনিস অনেক কিছুকে সে হোল্ড করে রাখে ।

    #include <bits/stdc++.h>
    using namespace std;
    namespace one { void fun() { cout << "i am namespace 1";}}
    namespace two { void fun() { cout << "i am namespace 2";}}
    // namespace variable নিয়ে কাজ করা যায় 
    using namespace one; // 👈👈👈👈👈👈👈
    int main()
    {
     one::fun(); 
       // অথবা 
      fun()
     return 0;
    }
    
  11. condition, switch statement

    সব প্রোগ্রামিং ল্যাঙ্গুয়েজের মতোই . মনে রাখবে char প্রকাশ করা হয় single quatation দিয়ে ' '

  12. loop

    সব প্রোগ্রামিং ল্যাঙ্গুয়েজের মতোই . for, while, do while, etc etc

  13. array

    #include <iostream>
    using namespace std;
    int main(){
     int n[5] = {3, 2, 3, 4, 5};
     // for (int i = 0; i < sizeof(n) / sizeof(n[0]); i++){n[i] = i;}
     for (int i = 0; i < sizeof(n) / sizeof(n[0]); i++){ cout << n[i] << endl;}
     return 0;
    }
    
    // string
    int main(){
        char name[100] = "rash\0edul";
        cout << name << endl;
        /* input নেওয়ার ক্ষেত্রে খেয়াল রাখতে হবে না cin কিন্তু স্পেস পাইলে সেখানে নাল ধরে সেখানেই 
           স্ট্রিংটাকে শেষ করে দিবে  । এঁর জন্য gets() বা একটু আগে যে মেথড দেখানো হয়েছে সেঁটা করতে
           পারেন ।  
        */
    }
    
  14. function and pointer in c++

    c তে যেমন কনসেপ্ট ছিল ঠিক তেমনি c++ এও

    #include <iostream>
    using namespace std;
    void withOutPointer(int x) { x = 10;}
    void withPointer(int *x) { *x = 100;}
    int main(){
     int x = 1; withOutPointer(x);
     cout << "from main function -> value is " << x << " no effect " << endl; // no effect
     withPointer(&x);
     cout << "from main function -> value is " << x << " effected for pointer" << endl; // no effect
     return 0;
    }
    
  15. pointer to/of pointer

    c programming এর মতোই । যদি ভুলে যেয়ে থাক তাহলে এই লিঙ্ক এ ক্লিক করে দেখে নাও ।

Dynamic memory allocation

আমাদের কম্পিউটারে ২ ধরণের মেমরি থাকে একটা stack আর একটা heap,

stack কি করে ? আমরা যখন কোণ variable or array ডিক্লার করি তখন সেগুলোকে এই এখানে থাকে । বা কম্পাইল টাইমে যেগুলো পায় সেগুলোকে এখানে রেখে দেয় ।

heap কি? heap হচ্ছে আমরা যখন রান টাইমে ডাইন্যামিক্যালি এলোকেট করি সেগুলো heap এ আসে । heap, stack এঁর তুলনায় একটু বড় । যদি আমরা stack এ কোণ array ডিক্লার করি তাহলে সাইজের বাহিরে আমরা আর কিছু করতে পারব না । কিন্তু Heap এ চাইলেই পরবর্তীতে জাইগা বাড়ীয়ে নেওয়া যায় ।

প্রথমে c তে কিভাবে কাজ করতাম সেঁটা দেখে নেই ।

// malloc
int main(){
int *p = (int *)malloc(10 * sizeof(int));
 for (int i = 0; i < 10; i++){
  cout << p[i] << endl;
 }
}
// calloc সব ইনডেক্স এ ০ বসিয়ে দিবে ডিফল্ট ভাবে । , দিতে হয়  । 
int main(){
int *p = (int *)calloc(10, izeof(int));
 for (int i = 0; i < 10; i++){
  cout << p[i] << endl;
 }
}
// free কি করে? heap e যে dynamic memory allocate হইছিল সেটা মুছে ফেলে ।

c++ এত কিছু করতে হয় না একটা জাস্ট keyword ব্যাবহার করলেই হয় । new নামে একটা keyword .

#include <iostream>
using namespace std;
int main(){
 int *p = new int[10];
// int *p = new int[10]{0}; // with define value
 for (int i = 0; i < 10; i++){
  cout << p[i] << " " << endl;
 }
 delete p  // for delete dynamic allocation 
 return 0;
}

built in functions

আমরা c programming language এ কিছু ফাংশনের কাজ ম্যানুয়ালি করতাম । যেমন swap(), min(), max(), sort(), ইত্যাদি । এগুলো c++ এ ম্যানুয়ালি করতে হবে না এঁর জন্য ইতিমধ্যেই ফাংশন বানানো আছে ।

  1. swap()

     #include <iostream>
     using namespace std;
     int main(){
      int p[] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
      swap(p[0], p[1]); // swap function
      for (size_t i = 0; i < sizeof(p) / sizeof(p[0]); i++){ cout << p[i] << " ";}
      int a = 10; int b = 200;
      swap(a, b); cout << "a: " << a << " b: " << b << endl;
      return 0;
     }
    
  2. min(), max()

     int main(){
      int a = 10, b = 20;
      int resultMin = min(a, b);  int resultMax = max(a, b);
      cout << resultMin << resultMax << endl;
     // array তে min, max খুঁজে বের করতে চাইলে প্রথমে । array first index কে ছোট ধরে নিবে 
     // তারপর লুপ চালাবে int max = max(firstIndex, arr[i])
         int num[] = {2, 36, 12, 46, 46, 1, 1, 90, 10};
          int mn = num[0];
          for (int i = 0; i < sizeof(num) / sizeof(num[0]); i++){
           mn = min(mn, num[i]);
           mx = max(mn, num[i]);
          };
          cout << mn << endl; 
    
      return 0;
     }
    

sort()

sort করার সময় ২ তা জিনিস তাকে দিতে হয় , starting point, ending point. , যদি ending point এমন হয় n+3 তাহলে ২ ইনডেক্স পরজন্তু সর্ট হবে ।

#include <iostream>
using namespace std;
int main(){
 int num[] = {2, 36, 12, 46, 46, 90, 10};
 sort(num,
      (num + sizeof(num) / sizeof(num[0]))
     );
 for (int i = 0; i < sizeof(num) / sizeof(num[0]); i++){ cout << num[i] << endl;}
 return 0;
}

Matrix

matrix এ row এবং col থাকে । row এবং col আমরা কোণ একটা ভেলুকে অ্যাক্সেস করতে পারব । ক্লাস ইন্টারে যেমনটা পরেছিলাম । ম্যাট্রিক্স এঁর অনেক প্রকার আছে । যেমন:

  1. Square Matrix [ ex:3 by 3 ],

  2. কর্ণ ম্যাট্রিক্স [diagonal]: কর্ণ বাদে ব্যাকই গুলো শুন্য হবে । (অবশ্যয় square matrix হতে হবে তাছাড়া কর্ণ মিলবে না ) . primary diagonal and secondary diagonal কাকে বলে দেখে নাও

  3. স্কেলার ম্যাট্রিক্সঃ এটা এমন একটা কর্ণ ম্যাট্রিক্স যার সব গুলো কর্ণ সমান হয় ।

  4. Identity Matrix: এটা একটা স্কেলার ম্যাট্রিক্স এঁর মতো কিন্তু এঁর কর্ণের সবগুলোর মান হবে

  5. transpose matrix: row, column হবে আর column, row হবে

  6. Symmetric Matrix: A = transpose of A সমান হবে (অবশ্যয় square matrix হতে হবে )

  7. two dimensional matrix ( 2D )

    এটা তেমন কিছুই না এটা একটা ম্যাট্রিক্স ।

     #include <bits/stdc++.h>
     /*
     int a [row][col]
           [ 2 ] [ 4 ]
    
           1 2 3 4 --> cols
      1 -> 0 0 0 0
      2 -> 0 0 0 0
     */
     using namespace std;
     int main() {
      int row = 4, col = 4;  int a[row][col];
      for (int i = 0; i < row; i++){
       for (int j = 0; j < col; j++){
     //         রো কলাম  
        cin >> a[i][j];
       }
      }
      // output
      for (int i = 0; i < row; i++){
       for (int j = 0; j < col; j++){
     //          রো কলাম  
        cout << a[i][j]; 
       }
       cout << endl;
      }
      return 0;
     }
    
  8. 4-3 Sum of Diagonal of a Matrix in C++

    ইনপুট নিবে row, col, declare a matrix a[row][col] then nested loop, input নিবে a[i][j].

    একটা সাম নামে ভেরিয়েবল ডিক্লার কর । সেখানে আগের মতো নেস্টেড লুপ চালাবে । যদি row ==col হয় তবেই সেটা diagonal। তখন তুমি sum+= a[i][j]

    video

  9. Get by Row or Colum from an array or matrix : নিচের ছবিটা দেখ এবং কিভাবে কি করতে হবে বুঝে নাও

    এখানে দেখ কলাম সেম মানে অ্যাক্সেস এঁর সময় কলাম চেঞ্জ হচ্ছে না । কিন্তু রো চেঞ্জ হচ্ছে । তাহলে তুমি বুঝতেই পাচ্ছ তোমাকে আগে জানতে হবে কোন কলাম টার ভেলুগুলো দেখতে চাচ্ছে । তার জন্য তুমি একটা ইনপুট নিয়ে নিবে । তারপর row এঁর উপর লুপ চালাবে । তারপর সেগুলোর ভেলু আউটপুট দিবে ।

    একই কাজ তুমি রোএঁর জন্যও করতে পার ।

  10. কিভাবে একটা ম্যাট্রিক্স diagonal (কর্ণ বাদে সব মান শুন্য হবে ) কিনা সেটা সফটওয়্যার এঁর মাধ্যমে বুঝতে পারব ?

    এই কয়টা ধাপ ঠিক থাকলেই আমরা বুঝতে পারব ।

    1. suare matrix কিনা

    2. row column same অ্যান হলে সেখান থেকেই বের করে দিব ,

    3. i==j হলে continue করব

    4. a[i][j]>0 হয় তাহলে বলব No

    5. তারপর লুপের বাহিরে গিয়ে বলব YES

      আরও কিছু কাজ করা যেতে পারি যেমনঃ এটা scalar or indentity matrix কিনা .

Did you find this article valuable?

Support Rashedul Islam by becoming a sponsor. Any amount is appreciated!