حل مسائل ++C جلسه نخست تقدیم حضورتان باد! با سلام و خوشامد به همراهان گرامی. مژده به شما عزیزان که ما در این سلسله مقالات میخواهیم هرچه مسئله ++C به دستمان رسید حل کنیم. شما هم میتوانید از طریق کامنت گذاری در پایین صفحه مسائل خود را بدست ما برسانید تا آنها را برایتان حل کنیم. این جلسه را بنام جلسۀ صفر! نامگذاری کردیم. برای اینکه در این جلسه فقط یک سری مسئله های ابتدایی و مقدماتی ++C را حل میکنیم تا هم دست شما و هم ما برای ورود به مسائل حرفه ای تر ++C گرم شود. لام به ذکر است که این جلسات همینطور تا بی نهایت ادامه دارد و ما در هر جلسه در حدود 10 الی 15 مسئله را حل خواهیم کرد.

 

 

برنامه جمع دو عدد در ++C

 بعنوان اولین برنامه دراينجا یک مسئله ساده ++C را مینويسيم که دو عدد را از ورودی دريافت کند و آنها را جمع کند و حاصل را درخروجی نمايش بدهد.

  //Addition program.
  #include <iostream.h>

  //function main begins program execution
  int main()
 {
    int integer1;   //first number to be input by user
    int integer2;   //second number to be input by user
    int sum;   //variable in which sum will be stored

    cout << "Enter first integer\n";   //prompt
    cin >> integer1;   //read an integer

    cout << "Enter second integer\n";   //prompt
    cin >> integer2;   //read an integer

    sum = integer1 + integer2;   //assignment result to sum

    cout << "Sum is " << sum << endl;   //print sum

    return 0;   //indicate that program ended successfully

  }   //end function main

 

 در تکمیل و توضیح مثال بالا مثال دیگری در همین ارتباط: برنامه اي به زبان سی پلاس پلاس بنویسید که عددي را بگیرد و مجذور آنرا نمایش دهد

#include <iostream>
using namespace std;
main()
{
double x, y;
    cin >> x;
    y = x * x;
    cout << y << endl;
}

 

 

 

این برنامه سی پلاس پلاس در واقع کامل شدۀ دو برنامۀ قبلی است. پس خوب توجه کنید:

برنامه ای در C++ بنویسید که دو مقدار اعشاری (غیر صحیح) را از ورودی دریافت کند و  حاصلضرب و تفاضل و حاصل تقسیم آنها را محاسبه و در خروجی نشان دهد

#include <iostream.h>
#include <conio.h>
#include <math.h>
int main(){
            float a , b ,result ;
            cout << "please enter 2 float number \n";
            cout << " enter a : ";
            cin >> a ;
            cout << " enter b : ";
            cin >> b ;
            while (a!=0 || b!=0){
                        result = (a*b)-(a/b);
                        cout << " result = " << result ;
                        cout << "\n please enter 2 float number ";
                        cout << " enter a : ";
                        cin >> a ;
                        cout << " enter b : ";
                        cin >> b ;
            }
getch();
return 0 ;
}

 

 

 

برنامه مقدماتی دیگری به زبان سی پلاس پلاس بدون استفاده از حلقه ها و ساختار شرطی

برنامه اي به زبان سی پلاس پلاس بنویسید که قطر یا شعاع دایره را دریافت کرده و مساحت و محیط آن را نمایش دهد

#include <iostream>
using namespace std;
main()
{
    double r, s, p;
    cin >> r;
    s = 3.14 * r * r;
    p = 2 * 3.14 * r;
    cout << s << endl << p << endl;
}

 

 

 

نخستین برنامۀ سی پلاس پلاس در مورد کاربرد ساختارهای شرطی

برنامه ای در C++ بنویسید که ضرایب یک معادله درجه دوم را دریافت کرده و آن معادله را حل کند

#include <iostream.h>
#include <conio.h>
#include <math.h>
int main(){
            int a,b,c;
            int d;
            double r1,r2;
            cout << "enter 3 number (a,b,c) for ax^2+bx+c  \n" ;
            cout << " please enter a :" ;
            cin >> a ;
            cout << " please enter b :" ;
            cin >> b ;
            cout << " please enter c :" ;
            cin >> c ;
            d= (b*b) - (4*a*c);
            if (d>0){
                        r1=((-b)-sqrt(d))/(2*a);
                        r2= ((-b)+sqrt(d))/(2*a);
                        cout << "r1 : " << r1 <<'\t'<< "r2 : " << r2;
            }
            else if (d==0){
                        r1 = (-b)/(2*a);
                        cout << " r1,r2 : " << r1;
            }
            else if (d<0)
                        cout << " rishe nadarim " ;
getch();
return 0 ;
}

 

 

 

برنامه سی پلاس پلاس ساده ای در مورد حلقه های تودرتو

برنامه C++ بنویسید که با استفاده از حلقه For خروجی مقابل را تولید کند:

o o o o o

o o o o o

o o o o o

o o o o o

#include <iostream.h>
#include <conio.h>
int main(){
            int i , j ;
            for (i=0 ; i<4 ; i++}(
                        for (j=0 ; j<5 ; j++){
                                    cout << ' ' << 'o';
                                    }
                        cout << '\n';
            }
 
getch();
return 0 ;
}

 

 

 

مثالی از حلقه های تودرتو درمسائل ++C

در این مثال میخواهیم شکل زیر را با استفاده از حلقه تکرار for تودرتو در برنامه نویسی ++C رسم کنیم:      

            *            
          * * *          
        * * * * *        
      * * * * * * *      
    * * * * * * * * *    
  * * * * * * * * * * *  
* * * * * * * * * * * * *
  * * * * * * * * * * *  
    * * * * * * * * *    
      * * * * * * *      
        * * * * *        
          * * *          
            *            


 راهنمایی: برای رسم این شکل ما ابتدا شکل را به دو بخش تقسیم کرده ایم و برای رسم هربخش از دستور حلقه تکرار for تودرتو استفاده میکنیم:

for ( int i = 6 ; i>0 ; i-- )
{
    for ( int j = i ; j>0 ; j-- )        cout << " ";

    for ( j = i ; j<6 ; j++ )        cout << "*";

    for ( j = i ; j<=6 ; j++ )       cout << "*";

    for ( j = i ; j>0 ; j-- )        cout << " ";

    cout << "\n";
}

for ( i = 6 ; i>=0 ; i-- )
{
    for ( j = i ; j<6 ; j++ )        cout << " ";

    for ( j = i ; j>0 ; j-- )        cout << "*";

    for ( j = i ; j>=0 ; j-- )      cout << "*";

    for ( j = i ; j<6 ; j-- )        cout << " ";

     cout << "\n";
}

 عزیزان اگر کمی دقت کنید و با حوصله کد بالا را بررسی کنید حتما مطلب را یادگرفته و با کمی تمرین براحتی میتوانند در ++C  دستورات حلقه تکرار for تودرتوی پیچیده را براحتی حل کنید.

 

 

 

  محاسبه مجموع اعداد به کمک ++C

 در اینجا یک مثال ساده را از حلقه while در ++C مطرح میکنیم. برنامه ای به زبان ++C بنويسيد تا مجموع اعداد يک تا صد را محاسبه کند.

#include <iostream.h>
int main( )
  {  
    int n=1, sum=0;
    while (n <= 100)
      {
        sum += n;       // sum = sum + n;
        ++n;            // n = n + 1;
      }
    cout << "1 + 2 + ... + 100 =" << sum << endl;
    return 0;
  }

 

 



برنامه ای به زبان ++C که میانگین اعداد را محاسبه کند

برنامه ای بنويسيد که تعداد نامشخصی عدد مثبت را از ورودی دريافت نمايد و ميانگين آنها را محاسبه کند. عدد 1- را برای مشخص کردن انتهای ليست اعداد درنظر بگيريد.

  #include <iostream.h>

  int main( )
  {
    int num, counter = 0;
    float average, sum = 0;

    cout << "Enter a number (-1 to end):";
    cin >>num;

    while (num != -1){
        sum += num ; // sum = sum + sum;
        ++counter;
        cout << "Enter a number (-1 to end):";
        cin >> num;
    }

    if (counter != 0){
        average = sum / counter;
        cout << "The average is " << average << endl;
    }
    else
        cout << "No numbers were entered." << endl;

    return 0;

  }

 خروجی برنامۀ بالا ، بصورت زير خواهد بود:

  Enter a number (-1 to end):20
  Enter a number (-1 to end):50
  Enter a number (-1 to end):65
  Enter a number (-1 to end):70
  Enter a number (-1 to end):90
  Enter a number (-1 to end):100
  Enter a number (-1 to end):1
  Enter a number (-1 to end):6
  Enter a number (-1 to end):-1
  The average is 50.25

 

 



برنامۀ دیگری به زبان ++C

برنامه ای بنويسيد که ليست نمرات يک کلاس را دريافت کرده و تعداد قبولی ها و مردودی ها را مشخص کند. ضمنا در ابتدای برنامه تعداد نمرات ليست پرسيده شود.

#include <iostream.h>
int main( )
{
  float mark;
  int howmany,counter=1;
  int passes=0,failures=0;

  cout << "How many marks : ";
  cin >> howmany;

  do {
      cout << "Enter mark "<<counter<<" : ";
      cin>>mark;
      if (mark>=10)
         ++passes;
      else
         ++failures;
     }while (++counter <= howmany);

  cout<<"Passed : "<<passes<<endl;
  cout<<"Failed : "<<failures<<endl;

  return 0;
}

 خروجی برنامه بصورت زير می باشد:

How many marks : 10
Enter mark 1 : 18
Enter mark 2 : 15
Enter mark 3 : 9
Enter mark 4 : 17.5
Enter mark 5 : 9.75
Enter mark 6 : 8
Enter mark 7 : 11
Enter mark 8 : 13
Enter mark 9 : 5
Enter mark 10 : 13
Passed : 6

 

 

برنامه کاربردی پیشرفته ای در سی پلاس پلاس که در آن هم ار حلقه و هم ار ساختار تصمیم استفاده شده است

برنامه ای بنویسید که شماره پرسنلی و حقوق تعدادی از کارگران کارخانه ای را دریافت کرده ، براساس قانون زیر ، مالیات حقوق آنها را محاسبه کند و به خروجی ببرد. سپس مشحص کند که بیشترین دریافتی متعلق به کدام کارگر بوده است:

تا حقوق کمتر از 500 هزار تومان معاف از مالیات باشد.

و اگر حقوق کار گر مابین 500 و 900 هزارتومان بود ، به مازاد 500 هزارتومان به میزان 5% مالیات تعلق گیرد.

و اگر حقوق کارگر مابین 900 و 1200 هزارتومان بود ، به مازاد 500 هزارتومان به میزان 10% مالیات.

و اگر حقوق کارگر بیش از 1200 هزارتومان بود ، به مازاد 500 هزارتومان به میزان 20% مالیات از حقوق کارگر بیچاره کم کند!

# include <iostream.h>
# include <conio.h>
long int main(){
            int i , n ;
            long int number , maxnumber, price , acord ;
            float  salary , tax , maxsalary = 0 ;
 
            cout << " please tell sum employers : " ;
            cin >> n ;
            for (i = 1 ; i <=n ; i++ ) {
                        cout << "\n please number employer : " ;
                        cin >> number ;
                        cout << "\n please salary employer : " ;
                        cin >> price ;
                                    if (price <= 500000) {
                                                cout << "\n salary is " << price ;
                                                cout << " \n ----------------------------------" ;
                                    }
                                    else if ( 500000 < price && price < 900000 ) {
                                                acord = price - 500000;
                                                tax = (5 * acord)/ 100 ;
                                                salary = tax + price ;
                                                cout << "\n salary is " << salary  ;
                                                cout << " \n" ;
                                    }
                                    else if ( 900000 < price && price < 1200000 ) {
                                                acord = price - 500000;
                                                tax = (10 * acord)/ 100 ;
                                                cout << "tax " << tax ;
                                                salary = tax + price ;
                                                cout << "\n salary is " << salary ;
                                                cout << " \n" ;
                                    }
                                    else if  ( price > 1200000 ) {
                                                acord = price - 500000;
                                                tax = (20 * acord)/ 100 ;
                                                salary = tax + price ;
                                                cout << "\n salary is " << salary ;
                                                cout << " \n" ;
                                    }
                                    if (price > maxsalary){
                                                maxsalary = salary ;
                                                maxnumber = number ;
                                    }
            }
            cout << " \n" ;

            cout << " ====================================" ;
            cout << " \n maixmum salary is : " << maxsalary ;
            cout << " \n maixmum salary number  is : " << maxnumber ;
getch();
return 0;
}

 

 

 

برنامه ای به زبان ++C برای محاسبه نسبت های مثلثاتی

برنامه ای بنويسيد که sin و cos وtan زاويه های زوج 1 تا 90 درجه را درخروجی بصورت جدولبندی شده تا سه رقم اعشار چاپ نمايد.

#include <iostream.h>
#include <math.h>

int main( )
{
  float r;
  for (int d=2;d<=90;d+=2)
  {
    r = 3.1415 * d / 180;
    cout<<"sin("<<d<<")="
        <<floor(sin(r)*1000 + 0.5)/1000;
    cout<<"\tcos("<<d<<")="
        <<floor(cos(r)*1000 + 0.5)/1000;
    cout<<"\ttan("<<d<<")="
        <<floor(tan(r)*1000 + 0.5)/1000;
    cout<<endl;
  }
  return 0;
}

 خروجی برنامه بصورت زير می باشد:

sin(2)=0.035    cos(2)=0.999    tan(2)=0.035
sin(4)=0.07     cos(4)=0.998    tan(4)=0.07
sin(6)=0.105    cos(6)=0.995    tan(6)=0.105
sin(8)=0.139    cos(8)=0.99     tan(8)=0.141
sin(10)=0.174   cos(10)=0.985   tan(10)=0.176
sin(12)=0.208   cos(12)=0.978   tan(12)=0.213
sin(14)=0.242   cos(14)=0.97    tan(14)=0.249

       .               .               .
       .               .               .
       .               .               .

sin(86)=0.998   cos(86)=0.07    tan(86)=14.292
sin(88)=0.999   cos(88)=0.035   tan(88)=28.599
sin(90)=1       cos(90)=0       tan(90)=21584.891

دربرنامه فوق توسط فرمول

 r = 3.1415 * d / 180

زاويه برحسب درجه را به راديان تبديل شده و توسط فرمول

 floor(sin(r)*1000 + 0.5)/1000

خروجی را تا سه رقم اعشار محاسبه شده است. همانطورکه مشاهده میفرمایید ورودی تابع ، علاوه برمتغير  و عدد ثابت ، میتواند  توابع  ديگر نیز  باشد. بعنوان  مثال:

sqrt(pow(2,2))

برابر با 2 خواهدبود و ترکيب توابع به اين شکل کاملاً مجاز است و بنابه نياز میتوانيد از اين روش استفاده کنيد.

 

 


 


توابع در زبان ++C

برنامه ای به زبان ++C بنویسید که با استفاده از توابع 2 عدد را در درون تابع main دریافت کند و بعنوان آرگومان به تابعی بفرستد. تابع آنها را باهم جمع کند و نتیجه را به تابع main برگرداند و درنهایت نتیجه درخروجی چاپ شود.

#include <iostream.h>
#include <conio.h>

float sum(float , float);      // = float sum(float num1, float num2);

int main()
{
    float num1, num2 ,numSum;

    cout << "Enter first number :" ;
    cin >> num1;
    cout << "Enter second number :" ;
    cin >> num2;

    numSum = sum(num1, num2);             
    cout << numSum;

    getch();
    return 0;
}

float sum(float f1 , float f2)       // float sum(float num1, float num2);
{
    float fSum = f1 + f2;
    return fSum;
}

 

توضیح: در تابع main دو عدد را دریافت شده و درفراخوانی تابع  آن دو عدد را بعنوان آرگومانهای تابع استفاده کردیم. چون تابع sum مقداری از نوع float برمیگرداند لازم است که تابع را برابر با همان مقدار برگشتی قراردهیم تا حاصل جمع اعداد در numSum ذخیره بشود. میشود دراعلان یک تابع اسم پارامترها را نوشت یا ننوشت ولی ذکر انواع ضروری است. نام پارامترها دراعلان و درتعریف توابع هم میتواند یکسان باشد و هم نباشد. اما مهم  است که نوع و تعداد و ترتیب آنها یکسان باشد.

 

 


تابع محاسبه اکسترمم در++C

تابعی به زبان ++C بنويسيد که سه عدد را بعنوان ورودی دريافت کرده و بزرگترين آنها را بعنوان خروجی برگرداند و اين تابع را در برنامه ای بکاربريد.

#include <iostream.h>
//---------------------------------------------
int maximum (int A,int B, int C)
{
  int max=A;

  if (B>max)     max=B;
  if (C>max)     max=C;

  return max;
}
//-----------------------------------------------
int main ()
{
  int num1,num2,num3;

  cout << "Enter three numbers: ";
  cin >> num1 >> num2 >> num3;
  cout << "Max is :"
       << maximum(num1,num2,num3)<<endl;
  cout << "Max of 3,10,1 is "
       << maximum(3,10,1)<<endl;

  return 0;
}

 

تابع maximum دارای سه آرگومان هست. وقتی که اعداد num1 و num2 و num3 در برنامه از ورودی دريافت میشوند با فراخوانی تابع

maximun(num1,num2,num3)

اعداد آرگومانهای num1 و num2 و num3 بترتيب درمتغير های A و B و C قرارمیگيرند و مقادير توسط تابع مقايسه میشوند و نهايتاً بزرگترين عدد درمتغير max قرارمیگيرد که توسط دستور return max بعنوان خروجی تابع برگردانده میشود. سپس دستور cout خروجی تابع را برروی صفحه نمايش چاپ میکند.

 

 



تابع محاسبه اکسترمم در ++C به روش پیش تعریف تابع

درمورد پيش تعريف توابع باید گفت در برنامه قبلی تابع مورد استفاده در برنامه را قبل از اولين فراخوانی آن تعريف کرديم و چون این فراخوانی درتابع main بود تابع main را بعنوان آخرين تابع دربرنامه نوشتيم. اما اگر بخواهيد تابع main را قبل از هرتابع ديگری دربرنامه بنويسيد و سایر توابع مورد استفاده در تابع main را از قبل اعلان یا "پیش تعریف" نکرده باشید هنگام اجرای برنامه يک پيغام خطا دريافت خواهيدکرد. چراکه وقتی تابعی فراخوانی میشود بايد قبلا تعريف شده باشد. البته يک راه حل برای اجتناب از نوشتن کد همه توابع قبل از استفاده آنها در تابع main يا ساير توابع وجود پيش تعريف توابع است. مثلا در آخرین برنامه ای که دیدید اگر بخواهیم تابع maximum را بعداز تابع  main تعریف کنیم ، پيش تعريف آن بصورت زير است:

int maximum( int, int, int );

توجه داشته باشيد که پيش تعريف تابع شامل دستورات تابع نمیشود و تنها شامل نوع داده خروجی ، نام تابع و نوع آرگومانها ست و در پايان حتما نياز به علامت سیمیکالن(;) دارد. در اينجا برنامه تابع maximum در مبحث قبلی را با روش پيش تعريف تابع ازنو مینویسیم:

#include <iostream.h>

int maximum (int ,int ,int);

int main ()
{
  int num1,num2,num3;

  cout << "Enter three numbers: ";
  cin >> num1>>num2>>num3;
  cout << "Max is :"
       << maximum(num1,num2,num3)<<endl;
  cout << "Max of 5,20,1 is "
       << maximum(5,20,1)<<endl;

  return 0;
}

int maximum (int x,int y, int z)
{
  int max=x;
  if (y>max)      max=y;
  if (z>max)      max=z;
  return max;
}

 همانطورکه در برنامه می بينيد ، تابع main قبل از تابع maximum نوشته شده است و اين امکانی است که پيش تعريف تابع maximum بما داده است. بیاد داشته باشید که در بعضی از برنامه ها ، گاهی نياز پيدا میشود که دو تابع يکديگر را فراخوانی کنند. درچنين حالتی ناچار به استفاده از پيش تعريف تابع هستیم. اما بعنوان يک روش برنامه نويسی همواره از پيش تعريف توابع استفاده کنيد ، حتی اگر نیاز به استفاده از آن نداشتید.

 

 

 


توابع بدون خروجی و آرگومان در ++C

برای آشنايی با نحوه کاربرد توابع بدون آرگومان به برنامه زير توجه کنيد.همانطور که در این برنامه  مشاهده میکنيد تابع function از نوع توابع بدون آرگومان است و خروجی صحيح دارد. اين تابع در برنامه دوبار فراخوانی شده. وظيفه اين تابع دريافت متغيری از صفحه کليد و برگرداندن آن متغير بعنوان خروجی تابع است.

#include <iostream.h>

int function(void);

void main( )
{
   int num, counter = 0;
   float average, sum = 0;

   num=function();

   while (num != -1){
          sum += num ;
          ++counter;
          num=function();
   }

   if (counter != 0){
          average = sum / counter;
          cout << "The average is " << average << endl;
   }
   else
          cout << "No numbers were entered." << endl;
}

int function(void){
  int x;
  cout << "Enter a number (-1 to end):";
  cin >>x;
  return x;
}

 

 

 

 

 ارسال آرگومانها به تابع ، با ارجاع

تابحال ، درتمام توابعی که نوشتيم آرگومانها با مقدار به توابع فرستاده شدند. اين یعنی هنگامیکه توابع با آرگومانها فراخوانی میشدند چيزیکه ما بعنوان ورودی به تابع ارسال میکرديم مقدار يا عدد بود و هرگز خود متغير به تابع فرستاده نشد. بعنوان مثال تابع maximum درمسئله قبل را بصورت زير فراخوانی کردیم:

int a=5, b=6, c=7, max;
max = maximum(a,b,c);

آنچه دراينجا صورت میگيرد فراخوانی تابع و فرستادن مقادير موجود در a و b و c يعنی 5 و 6 و 7 به تابع هست. در واقع خود متغيرها فرستاده نمیشوند بلکه مقادیر موجود درمتغیرها در آرگومانهای تابع کپی میشوند. بدين صورت هنگامیکه تابع maximum فراخوانی میشود مقدار متغيرهای x و y و z بترتيب برابر 5 و 6 و 7 خواهند شد و هرگونه تغييری روی متغيرهای x و y و z درتابع ، تأثيری روی متغيرهای a و b و c نخواهد داشت. زيرا خود متغيرهای a و b و c به تابع فرستاده نشده اند بلکه  مقادير موجود درآنها به تابع  ارسال گشته اند.

در برنامه نويسی مواردی پيش می آيد که بخواهيد از داخل تابع ، مقادير متغيرهای خارجی را تغييردهيم. بعنوان مثال درتابع maximum مقدار متغير a را از داخل تابع تغييردهيم. برای رسیدن به اين مقسود بايد از روش ارسال آرگومانها با ارجاع استفاده کنيم. برای آنکه آرگومان تابعی با ارجاع فرستاده شود ، کافیست در "پيش تعريف تابع" بعد از تعيين نوع آرگومان يک علامت & بگذاريم وهمچنین درتعريف تابع قبل از نام آرگومان يک علامت & قراردهيم. برای آشنايی با نحوه ارسال آرگومانها با ارجاع به برنامه زير توجه کنيد:

#include <iostream.h>

void duplicate (int & , int & );

void main ( )
{
    int a=1 , b=2 ;
    cout << "a = " << a << " and b = " << b << endl;
    duplicate(a,b);
    cout << "a = " << a << " and b = " << b << endl;
}

void duplicate(int &x , int &y)
{
    x*=2;
    y*=2;
}

 خروجی برنامه بصورت زير می باشد:

a = 1 and b = 2
a = 2 and b = 4

 

در برنامه فوق متغيرهای a و b به تابع ارسال میگردند و سپس در دو ضرب میشوند. دراين برنامه مقدار متغيرهای a و b فرستاده نمیشود بلکه خود متغير فرستاده میشود و لذا هنگامی که دستورهای

x*=2;
y*=2;

اجرا میگردند مقادير دومتغير a و b دوبرابر میشود. درحقيقت x و y مانند نام مستعاری برای a و b هستند. هنگامیکه متغيری با ارجاع فرستاده میشود هرگونه تغييری که درمتغير معادل آن درتابع صورت گيرد عيناً آن تغيير برروی متغير ارسالی نيز اعمال میگردد.

 

 

 

مثالی از توابع ارجاعی در ++C

تابعی بنويسيد که دو متغير را بعنوان ورودی دريافت کرده و مقادير آنها را جابجا کند و از اين تابع در برنامه ای استفاده کنيد.

#include <iostream.h>
void change (int & , int &);
int main ( )
 {
      int a=1 , b=2 ;
      cout << "a is " << a << " and b is " << b << endl;
      change (a,b);
      cout << "a is " << a << " and b is " << b << endl;
      return 0;
  }
void change (int &x , int &y)
 {
      int temp;
      temp = y;
      y = x;
      x = temp;
 }

 خروجی برنامه بصورت زير است:

a is 1 and b is 2
a is 2 and b is 1

 برنامه فوق مقادير دو متغير a و b را توسط change باشيوه ارسال آرگومان با ارجاع جابجا میکند.


گاهی نیاز داریم که از توابع بیش از یک خروجی بگیریم. يکی ديگر از کاربردهای ارسال با ارجاع ، دريافت بيش از يک خروجی از تابع می باشد. بعنوان مثال در اینجا تابع prev_next در برنامه زير مقادير صحيح قبل و بعد از اولين آرگومان را بعنوان خروجی برمیگرداند.

#include <iostream.h>

void prev_next (int ,int & , int &);

void main ( )
{
    int x = 100 , y , z ;
    cout << "The input of prevnext function is "
         << x << endl;
    prev_next (x,y,z) ;
    cout << "previous =" << y <<",Next =" << z;
}

void prev_next (int input , int & prev , int & next)
{
    prev = input - 1 ;
    next = input + 1 ;
}

 خروجی برنامه فوق بصورت زير می باشد:

The input of prevnext function is 100
previous =99,Next =101

 

 

 

 

 برنامه تولید اعداد تصادفی در++C

 برنامه زير 50 عدد تصادفی بين 1 تا 6 را ايجاد میکند. اين برنامه را میتوان برای شبیه سازی 50 بار پرتاب يک تاس درنظرگرفت:

#include <iostream.h>
#include <stdlib.h>

int main()
{
   for (int i = 1; i<= 50; i++ )
    {
     cout << rand() % 6 + 1<<"\t";

     if ( i % 5 == 0 )
        cout << endl;
    }
   return 0;
}

 

 اگر يکبار ديگر برنامه فوق را اجرا کنيد وخروجی را مجدداً بررسی کنيد. خواهيدديد خروجی دقيقاً همان اعداد قبلی می باشد. خروجی تابع ()rand اعداد تصادفی می باشد ولی با اجرای دوباره برنامه همان اعداد مجدداً بهمان ترتيب قبلی تکرار میشوند. اين تکرار يکی از قابليتهای تابع می باشد و در اشکالزدايی برنامه کاربرد دارد. اگر بخواهيم که تابع ()rand اعداد کاملاً تصادفی ايجادکند بايد از تابع ()srand استفاده کنيم. اين تابع ورودی از نوع اعداد صحيح بدون علامت میگيرد وباعث تصادفی شدن تابع ()rand براساس مقدار ورودی تابع ()srand میشود. تابع ()srand نيز درفايل کتابخانه ای stdlib.h قراردارد. در برنامه زير به نحوه استفاده از تابع ()srand پی خواهيد برد:

#include <iostream.h>
#include <stdlib.h>

int main()
{
  unsigned int num;

  cout<<"Enter a number: ";
  cin>>num;

  srand(num);

  for (int i = 1; i<= 50; i++ )
   {
    cout << rand() % 6 + 1<<"\t";

    if ( i % 5 == 0 )
      cout << endl;
   }
  return 0;
}

 اگر بخواهيم بدون نيازبه واردکردن عددی توسط کاربر، اعداد تصادفی داشته باشيم میتوانيم از تابع time که درفايل کتابخانه ای time.h قراردارد استفاده کنيم. تابع time ساعت کامپيوتر را میخواند و زمان را برحسب ثانيه برمیگرداند و باعث میشود که تابع ()rand درهربار اجرای برنامه اعداد متفاوتی را ايجاد کند. اگر برنامه فوق را بصورت زير بازنويسی کنيم با هربار اجرای برنامه اعداد تصادفی متفاوتی خواهيم داشت:

#include <iostream.h>
#include <stdlib.h>
#include <time.h>

int main()
{
  srand(time(0));

  for (int i = 1; i<= 20; i++ )
   {
    cout << rand() % 6 + 1<<"\t";
    
    if ( i % 5 == 0 )
      cout << endl;
   }
  return 0;
}

 

 

 

 

برنامه شبیه سازی پرتاب سکه در ++C

برنامه ای بنويسيد که پرتاب سکه ای را شبيه سازی کند ، به اینصورت که سکه را 2000 بار پرتاب کند و دفعات رو يا پشت آمدن سکه را چاپ کند.

#include <iostream.h>
#include <stdlib.h>
#include <time.h>

int main()
{
  int back=0,front=0,face;

  srand(time(0));

  for (int i = 1; i<= 2000; i++ )
    {
      face=rand()%2+1;
      switch(face)
        {
          case 1:
            ++back;
            break;
          case 2:
            ++front;
            break;
          default:
            cout<<"Error!";
        }
    }

  cout<<"Front: "<< front<<endl;
  cout<<"Back : "<< back<<endl;

  return 0;
}

 

 

 


مثالی از توابع بازگشتی در ++C

برنامه ای به زبان ++C با استفاده از تابع بازگشتی بنویسید که حاصلضرب دوعدد را با استفاده از حاصلجمع آنها بدست آورد. 

#include <iostream.h>
#include <conio.h>

int product(int, int);      

int main()
{
    int a, b;

    cout << "Enter first number :" ;
    cin >> a;
    cout << "Enter second number :" ;
    cin >> b;
            
    cout << product(a, b);

    getch();
    return 0;
}

int product(int a, int b)       
{
    if(b == 1)
        return a;
    return (a + product(a, b-1));
}


         //////////////////مثال\\\\\\\\\\\\\\\\\\\\
/*    a=4, b=3

1) if(3==1)
    return 4;
return(4+product(4,3-1))

2) if(2==1)
    return 4;
return(4+product(4,2-1))

3) if(1==1)
    return 4;
return(4+product(4,1-1))    */

 

Enter first number :4
Enter second number :3
12

 

 


 

برنامه محاسبه فاکتوریل در ++C با استفاده ازتوابع بازگشتی

در اینجا برنامۀ محاسبه فاکتوریل را باهم بوسیله توابع بازگشتی در ++C بررسی میکنیم

#include <iostream.h>
#include <conio.h>

long factorial(int);      

int main()
{
    long number;

    cout << "Please type a number :" ;
    cin >> number;
            
    getch();
    return 0;
}

long factorial(int a)       
{
    if(a > 1)
        return ( a*factorial(a-1) );
    else
        return (1);
}


 

 

 


نخستین مسئله آرایه ها در ++C

برنامه ای بنويسيد که 6 عدد صحيح را ورودی دريافت کرده و در آرايه ای قرارداده سپس مجموع عناصر آرايه را محاسبه کرده و درخروجی چاپ نمايد.

#include <iostream.h>
#include <conio.h>

int main()
{
    int num[6];
    int sum = 0, count;

    for(count = 0 ; count < 6 ; count++)
    {
        cout << "Enter number " << count+1 << " :";
        cin >> num[count];

        sum += num[count];
    }
    cout << "\nSum of numbers is " << sum;
    getch();
    return 0;
}

Enter number 1 : 1
Enter number 2 : 5
Enter number 3 : 9
Enter number 4 : 0
Enter number 5 : 18

Sum of numbers is 33

 

 

 


دومین مثال آرایه ها در ++C

برنامه ای که با تعریف یک آرایه بطول 12 ، مقدار هرعنصر آنرا برابر با اندیس آن قرارداده و سپس با محاسبه مجموع مربعات عناصر آرایه آنها را درخروجی چاپ میکند .

#include <stdio.h>
#include <conio.h>
void main()
{
float list[12],max ;
int i , j ;
for(i=0 ; i<5 ; i++)
{
    cout<< "\n enter moadel: "<<i+1;
    cin>>list[i];
}
max=list[0];
j=1 ;
for(i=1 ; i<12 ; i++)
{
    if(list[i] > max)
    {
        max=list[i];
        j=i+1;
    }
}
cout<<"\n max= " << max <<"position="<< j ;
getch();
}

 

 

 


مثال دیگری از مسائل آرایه ها در ++C

برنامه ای بنويسيد که يک تاس را 2000 بار پرتاب کرده و توسط آرايه ای تعداد دفعات آمدن هروجه را حساب کند.( تعداد دفعات آمدن هر وجه را يک عنصر آرايه ای درنظربگيريد)

#include <iostream.h>
#include <stdlib.h>
#include <time.h>

void main()
{
  const int arraySize = 7;
  int frequency[ arraySize ] = { 0 };

  srand( time( 0 ) );

  for ( int roll = 1; roll <= 2000 ; roll++ )
     ++frequency[1 + rand() % 6 ];

  cout << "Face Frequency" << endl;

  for ( int face = 1; face < arraySize ; face++ )
     cout << face << "\t" << frequency[face] << endl;

}

 

 

 

 

مثالی  از مسائل رشته ها در ++C

برنامه زير نحوه بکارگيری آرايه های رشته ای را نشان میدهد:

#include <iostream.h>

void main()
{
  char name[ 20 ];

  cout << "Please Enter your name : ";
  cin >> name;

  cout << "Welcome, " << name
       << " to this program. \n" ;

  cout << "Your separated name is\n";

  for ( int i = 0 ; name[ i ] != '\0' ; i++ )
       cout << name[ i ] << ' ';

}

 

 

 

 

نوع استاتیک در برنامه نویسی++C

 اگربخواهيم يک متغير محلی تابع ، مقدار خود را حفظ کرده و برای دفعات بعدی فراخوانی تابع نيز نگه دارد از نوع دادۀ static استفاده میکنم. نوع static را برای آرايه ها نيز میتوان بکاربرد و از همان قوانين گفته شده درمبحث مذکور پيروی میکند. به برنامه زير و خروجی آن توجه کنيد:

#include <iostream.h>

void staticArrayInit( void );
void automaticArrayInit( void );

int main()
{
  cout << "First call to each function:\n";
  staticArrayInit();
  automaticArrayInit();

  cout << "\n\nSecond call to each function:\n";

  staticArrayInit();
  automaticArrayInit();
  cout << endl;

return 0;
}


// function to demonstrate a static local array
void staticArrayInit( void )
{
  // initializes elements to 0
  // first time function is called
  static int array1[ 3 ]={0};

  cout << "\nValues on entering staticArrayInit:\n";

  // output contents of array1
  for ( int i = 0; i < 3; i++ )
     cout << "array1[" << i << "] = "
          << array1[ i ] << " ";

  cout << "\nValues on exiting staticArrayInit:\n";

  // modify and output contents of array1
  for ( int j = 0; j < 3; j++ )
     cout << "array1[" << j << "] = "
          << ( array1[ j ] += 5 ) << " ";

} // end function staticArrayInit

// function to demonstrate an automatic local array
void automaticArrayInit( void )
{
  // initializes elements each time function is called
  int array2[ 3 ] = { 1, 2, 3 };
 
  cout << endl << endl;
  cout << "Values on entering automaticArrayInit:\n";

  // output contents of array2
  for ( int i = 0; i < 3; i++ )
     cout << "array2[" << i << "] = "
          << array2[ i ] << " ";

  cout << "\nValues on exiting automaticArrayInit:\n";

  // modify and output contents of array2
  for ( int j = 0; j < 3; j++ )
    cout << "array2[" << j << "] = "
         << ( array2[ j ] += 5 ) << " ";
}

 خروجی برنامه بصورت زير می باشد :

First call to each function:

Values on entering staticArrayInit:
array1[0] = 0  array1[1] = 0  array1[2] = 0
Values on exiting staticArrayInit:
array1[0] = 5  array1[1] = 5  array1[2] = 5

Values on entering automaticArrayInit:
array2[0] = 1  array2[1] = 2  array2[2] = 3
Values on exiting automaticArrayInit:
array2[0] = 6  array2[1] = 7  array2[2] = 8

Second call to each function:

Values on entering staticArrayInit:
array1[0] = 5  array1[1] = 5  array1[2] = 5
Values on exiting staticArrayInit:
array1[0] = 10  array1[1] = 10  array1[2] = 10

Values on entering automaticArrayInit:
array2[0] = 1  array2[1] = 2  array2[2] = 3
Values on exiting automaticArrayInit:
array2[0] = 6  array2[1] = 7  array2[2] = 8

 

 

ارسال آرایه به عنوان پارامتر برای تابع در برنامه نویسی ++C

در این مثال به ارسال آرایه ها بعنوان پارامتر درتابع بپردازیم. از آرایه ها هم میتوان در پارامترهای توابع استفاده کرد. برای اینکار میتوان آرایه را با طول ارسال نمود و یا آرایه را بدون طول ارسال کرد و با یک پارامتر دیگری طول را تعیین و ارسال کرد. اما بهتر آنستکه آرایه را بدون طول ارسال کنیم و طول را با یک پارامتر دیگر ارسال کنیم. درهرصورت مانند تعریف آرایه ها هم نام ، هم طول و هم نوع آرایه برای تابع و بطورکل برنامه ++C باید مشخص باشد. برای روشن شدن موضوع مثالی را در این زمینه بررسی میکنیم:

 #include <iostream.h>
 #include <conio.h>

 int minFunction(int[], int);  //------------------> اعلان تابع با پارامترهای نام آرایه و طول آن

 void main()
 {
     const int k=4;
     int array[k];
 
     cout << "\nMinimum of array elements is " << minFunction(array, k);  //------> فراخوانی تابع
     getch();
 }

 int mainFunction(int arr[], int length)  //------> تعریف تابع با تمامی متعلقات
 {
     for(count = 0 ; count < length ; count++)
     {
         cout << "Enter number [" << count+1 << "] :";
         cin >> arr[cout]
     }

     int minNum = arr[0];

     for(count = 1 ; count < length ; count++)
     {
         if (arr[count] < minNum)
             minNum = arr[cout]
     }

     return minNum;
 }

 Enter number 1 : 12
 Enter number 2 : 3
 Enter number 3 : 28
 Enter number 4 : 109

 Minimum of array elements is 3

 
 

 

 

 مقایسه ارسال آرایه و عنصری از یک آرایه در ++C

برنامه زير نحوه ارسال يک آرايه را به تابع و تفاوت ارسال يک عنصر آرايه به تابع و ارسال کل آرايه به تابع را نشان میدهد:

 #include <iostream.h>

 void modifyArray( int [], int );
 void modifyElement( int );

 void main()
 {
   const int arraySize = 5;
   int a[ arraySize ] = { 0, 1, 2, 3, 4 };

   cout<<"Effects of passing entire array by reference:"
       <<"\n\nThe values of the original array are:\n";

   // output original array
   for ( int i = 0; i < arraySize; i++ )    cout << "\t"<< a[ i ];

   cout << endl;

   // pass array a to modifyArray by reference
   modifyArray( a, arraySize );

   cout << "The values of the modified array are:\n";

   // output modified array
   for ( int j = 0; j < arraySize; j++ )    cout << "\t" << a[ j ];

   // output value of a[ 3 ]
   cout<<"\n\n\n"
       <<"Effects of passing array element by value:"
       <<"\n\nThe value of a[3] is " << a[ 3 ] << '\n';

   // pass array element a[ 3 ] by value
   modifyElement( a[ 3 ] );

   // output value of a[ 3 ]
   cout << "The value of a[3] is " << a[ 3 ] << endl;
 }

 // in function modifyArray, "b" points to the original array "a" in memory
 void modifyArray( int b[], int sizeOfArray )
 {
   // multiply each array element by 2
   for ( int k = 0; k < sizeOfArray; k++ )  b[ k ] *= 2;
 }

 // in function modifyElement, "e" is a local copy of array element a[ 3 ] passed from main
 void modifyElement( int e )
 {
   // multiply parameter by 2
   cout << "Value in modifyElement is " << ( e *= 2 ) << endl;
 }

 خروجی برنامه فوق بصورت زير می باشد:

 Effects of passing entire array by reference:

 The values of the original array are:
        0       1       2       3       4
 The values of the modified array are:
        0       2       4       6       8


 Effects of passing array element by value:

 The value of a[3] is 6
 Value in modifyElement is 12
 The value of a[3] is 6

 

 

 


مثالی از آرایه دوبعدی در++C

در برنامه زير آرايه 2 بعدی 10 در 10 را با مقادير جدول ضرب ، مقداردهی میکنيم و سپس آنرا برروی صفحه نمايش چاپ میکنيم:

 #include <iostream.h>
 void main( )
 {

   int a[10][10],i,j;

   for (i=0;i<10;i++)
     for (j=0;j<10;j++)
       a[i][j]=(i+1)*(j+1);


   for (i=0;i<10;i++){
     for (j=0;j<10;j++)
       cout <<a[i][j]<<"\t";
     cout<<endl;
   }
 }

  خروجی برنامه فوق بصورت زير می باشد:

 1   2   3   4   5   6   7   8   9   10

 2   4   6   8   10  12  14  16  18  20

 3   6   9   12  15  18  21  24  27  30

 4   8   12  16  20  24  28  32  36  40

 5   10  15  20  25  30  35  40  45  50

 6   12  18  24  30  36  42  48  54  60

 7   14  21  28  35  42  49  56  63  70

 8   16  24  32  40  48  56  64  72  80

 9   18  27  36  45  54  63  72  81  90

 

 

 

مثالی دیگر از آرایه دوبعدی در++C

برنامه ای با آرایه دو بعدی بنویسید که شماره هر سطر را نوشته و در مقابل آن جمع عناصر آن سطر را هم محاسبه و چاپ نماید

#include <iostream.h>
#include <conio.h>

void sum(int[][2], int);  //------------------> اعلان تابع با پارامترهای نام آرایه و طول آن

void main()
{
    const int m=3, n=2;
    int matrix[m][n] = {{2,5}, {15,9}, {0,32}};

    sum(matrix, m);
    getch();
}

void sum(int x[][2], int a)
{
    int i, j;
    cout << "Row\t\t" << "Sum\t";
    cout << "---------------------\n";

    for (i=0 ; i<a ; i++)
    {
        int sum = 0;
        for (j=0 ; j<2 ; j++)
            sum += x[i][j];
        cout << i+i << "\t\t" << sum << "\n";
    }
}

Row      Sum
---------------
1           7
2           24
3           32

 


 

  ***

دیدگاه‌ها  

+1 # fateme 1397-08-23 09:44
سلام ببخشین میخواستم یه تابع برگشتی بنویسم که یک عدد از ورودی بگیرد و بزرگ ترین رقم آن را بازگشت دهد .
میشه برا نوشتنش کمکم کنین
تشکر
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن

نوشتن دیدگاه


تصویر امنیتی
تصویر امنیتی جدید