C++

Books

Online edit, compile, and run

Compilers

در این بخش فهرست تعدادی از کامپایلرهای مناسب برای انجام تمرین‌ها و پروژه‌های درسی آورده شده است.

List of compilers

Windows

Pre-Built Binaries:

https://releases.llvm.org/download.html

https://github.com/llvm/llvm-project/releases/

Editors

Integrated Development Environments (IDEs)

یکی از مشکل‌هایی که اغلب برنامه نویسان در مبانی برنامه نویسی با آن روبرو هستند به کار بردن ابزارهایی است که بتواند کار آنها را ساده‌تر نماید و به سادگی بتوانند پروژه‌های خود را انجام دهند. البته گزینهٔ شخصی من برای نوشتن کدهای ساده به کار بردن ترکیب geany به عنوان ویرایشگر و کامپایلر gcc است.

به هر حال چون بیشتر برنامه نویسان مبانی علاقه‌مند هستند که بتوانند تمرین‌ها و پروژه‌های خود را انجام دهند در این بخش پیشنهادهایی به آنها می‌شود که به سادگی بتوانند کار خود را انجام دهند.

یکی از مسأله‌هایی که دانشجویان به آن توجه ندارند این است که نوشتن برنامه‌ها با ابزارهایی که روی رایانهٔ آنها نصب می‌شود و اغلب به کار می‌برند این است که شاید دیگران آن ابزارها را به کار نبرند و از سوی دیگر کسی که می‌خواهد برنامهٔ آنها را تحویل بگیرد نتواند آنها اجرا کند زیرا استاندارد را رعایت نکرده‌اند. بنابراین پیشنهاد می‌شود به صورت استاندارد برنامه نویسی کنند تا برنامهٔ آنها بتواند در هر جایی اجرا شود. همچنین به این توجه نمایند که در هنگام تحویل پروژه‌های‌شان بتوانند به سادگی برنامهٔ خود را بر روی رایانه‌هایی تحویل دهند که نیاز است که کامپایلر روی آنها نیست و باید در همان زمان برنامه را روی آن رایانه تغییر دهند و تحویل دهند. بنابراین پیشنهادهایی که برای نوشتن کد به کمک محیط‌های مجتمع اجرا دارم به ترتیب به قرار زیر است:

  • orwelldevcpp نسخه‌های تازه‌تری از DevCpp است. نسخهٔ قابل حمل آن در Portable orwelldevcpp گذاشته شده است.

  • codeblocks این نرم افزار به خوبی بر روی سیستم عامل‌های گوناگون نصب می‌شود و می‌تواند کار خود را انجام دهد. در بخش Downloads می‌توان نسخه‌‌های گوناگون آن را اجرا نمود.

  • Ch : یکی از محیط‌های جالب یکپارچه برنامه نویسی است که شاید بهترین ویژگی آن مفسر بودن آن برای زبان C است که به خوبی مشکل‌های کار با اشاره‌گرها را گزارش می‌کند و البته بدی آن این است که پس از گزارش اخطار برای یک اشاره‌گر یا بیرون زدن از آرایه برای آن حافظه‌ای اختصاص می‌دهد تا برنامه کار خود را ادامه دهد و شاید برنامه نویس متوجه نشود که مشکلی برایش پیش آمده است. این نرم افزار توانمند بر روی سیستم عامل‌های گوناگون اجرا می‌شود و دارای نسخه‌های گوناگونی است. نسخه‌ای که برای انجام کارهای آموزشی بسیار مناسب است ولی نمی‌توان آن را برای کارهای تجاری به کار برد نسخهٔ student آن است که همراه ویرایشگر ChIDE است.

  • Qt Creator

  • kdevelop

  • cbuilder

  • DevCpp : یکی از محیط‌های اجرای یکپارچه مناسب دیگر است.ولی چند سال است که به روز نشده است و البته مشکل‌هایی دارد. گمان می‌کنم پشتیبانی این نرم افزار از conio.h به دلیل استاندارد نبودن چندان خوب نیست.

  • Visual Studio Express : فقط برای سیستم عامل ویندوز است و البته نرم افزار سنگینی است که روی رایانه‌های قدیمی نمی‌تواند اجرا شود.

  • xcode : فقط برای سیستم عامل‌های شرکت مکینتاش است.

Samples

simple complex number class

#include<iostream>
using namespace std;

struct ComplexCls{
   double re, img;
   void input(void){
      cout<<"Enter real part of complex number: ";
      cin>>re;
      cout<<"Enter imaginary part of complex number: ";
      cin>>img;
   }
   void display(void){
      cout<<re<<" + i "<<img<<endl;
   }
   void init(double real, double imaginary){
      re = real;
      img= imaginary;
   }
   void Negation(void){
      re = - re ;
      img= - img;
   }
   ComplexCls Add(ComplexCls a){
      ComplexCls b;
      b.re = a.re + re ;
      b.img= a.img+ img;
      return b;
   }
};

int main(){
   ComplexCls x,y,z;
   x.input();
   x.display();
   y.input();
   y.display();
   z=x.Add(y);
   z.display();
   return 0;
}

simple matrix class

#include<iostream>
using namespace std;
const int n=4 , m=4;
void transpose(int a[][m]){
   for(int i=0; i<n ; i++)
      for(int j=0 ; j<i; j++)
      {
         int temp =  a[i][j];
           a[i][j] = a[j][i];
         a[j][i] = temp;
      }

}
void show(int a[][m]){
   for(int i = 0 ; i< n ; i++){
      cout<<"\n";
      for(int j=0 ; j<m ; j++)
         cout<< a[i][j]<<'\t';
   }
}

struct Matrix{
   int a[n][m];
  void transpose(){
   for(int i=0; i<n ; i++)
      for(int j=0 ; j<i; j++)
      {
         int temp =  a[i][j];
           a[i][j] = a[j][i];
         a[j][i] = temp;
      }
}
void show(){
   for(int i = 0 ; i< n ; i++){
      cout<<"\n";
      for(int j=0 ; j<m ; j++)
         cout<< a[i][j]<<'\t';
   }
   cout<<endl;
}
 void init(void){
 for(int i =0 ;i<n; i++)
  for(int j =0 ; j<m ; j++)
     a[i][j] = i*10 +j;
}
void input(void){
   cout<<"Enter data"<<endl;
   for(int i = 0 ; i < n; i++)
      for(int j=0 ; j<m ; j++){
          cout<<"Enter A["<<i<<"]["<<j<<"] : ";
          cin>>a[i][j];
    }
 }
};
int main(){
 int a[n][m];
 for(int i =0 ;i<n; i++)
  for(int j =0 ; j<m ; j++)
     a[i][j] = i*10 +j;
 show(a);
 transpose(a);
 cout << endl;
 show(a);
 int b[n][m];
 for(int i =0 ;i<n; i++)
  for(int j =0 ; j<m ; j++)
     b[i][j] = i*i +j;
  show(b);
  transpose(b);
  show(b);


  Matrix m1;
  m1.init(); // m1.input();
  m1.show();
  m1.transpose();
  m1.show();
  cout<<endl;
  Matrix m2;
  m2.init(); // m2.input();
  m2.show();
  m2.transpose();
  m2.show();

 return 0;
}