سئوالات و مشکلات برنامه نویسی به زبان C و ++C

ahhe

عضو جدید
سلام، من به برنامه محاسبه مقادیر ویژه ماتریس 3*3 متقارن حقیقی به زبان سی نیاز دارم
مقدار ویژه = Eigenvalue
لطفا کمکم کنید
 

شهریاری 2

کاربر فعال تالار اسلام و قرآن
کاربر ممتاز
مرسی. اونوقت میدونید که ساختار تابع چطوریه؟ یعنی تابع توی c++ چطور تعریف شده؟

نیگا دیدی وقتی به برنامه میخایم توی سی پلاس بنویسیم، اولش مینوسیم:

PHP:
int main()
{.
.
.

}

این یه تابع به اسم main() هست که خروجیش یه عدد صحیح هست.
حالا اگه یه برنامه دیگه به اسم مثلا MUL بسازیم ، میتونیم توی برنامه اصلیمون که همون main هست، با استفاده از صدازدنش، ازش استفاده کنیم.
حالا کچای برنامه بنویسیم دیگه باید یکی دیگه بیاد بهت بگه!
 

mahshid.rahjou

عضو جدید
سوال من یه چیز دیگه بود. من سوالمو اینطور میپرسم . int یه کلاسه که یکسری ویژگی و متد واسش تعریف شده. یکی از متدهایی که واسش تعریف شده متدی به اسم + هست که ورودی اون یه عدد از نوع int و خروجی اون یه عدد از نوع int.
PHP:
 int I , j;  I+j;
الان این خط کد از زبان کامپایلر اینطوره که وقتی من واسش گفتم int I , j; برای کامپایلر اینطور بیان میشه که کامپایلر دوتا شی از کلاس int تعریف کردم. وقتی میگم int I+j; برای کامپایلر این کد انگار نوشته شده
کد:
I.+(j);
اوکی؟ حالا سوال من اینه که تابع rand برای کامپایلر چطور تعریف شده. امیدوارم منظور رسونده باشم اگه گیج نکرده باشم:d
 

ُShiri

عضو جدید
لطفاً راهنماییم کنید

لطفاً راهنماییم کنید

سلام من باید با استفاده از دستور switch یک برنامه بنویسم که یک عدد را از کاربر بگیرد و مشخص کند که عدد مذکور یک رقمی است، دو رقمی است، سه رقمی است و یا بیش از سه رقم؟؟
برای نوشتن caseها مشکل دارم میشه کمکم کنید :(
 

iaidin

عضو جدید
برنامه ای بنویسید که یک اسکناس صدریالی را خرد کند.(بصورت سکه های 2ریالی،5ریالی،10ریالی،25ریالی،50ریالی)
تمام حالتهای ممکن در messageBox نمایش داده می شود. البته این کد به صورت بهینه نوشته نشده و برای بهینه کردن بایستی تغییراتی در کد داده بشه و در صورت لزوم بفرمایید تا کد را بهینه کنیم.

کد:
for (int i2 = 0; i2 <= 50; i2++)
{
            for (int i5 = 0; i5 <= 20; i5++)
            {
                for (int i25 = 0; i25 <= 4; i25++)
                {
                    for (int i50 = 0; i50 <= 2; i50++)
                    {
                        int num = 0;
                        num = (i2 * 2) + (i5 * 5) + (i25 * 25) + (i50 * 50);
                        if (num == 100)
                        {
                            messagebox::show(std::wstring(L"2:") + i2 + std::wstring(L"  5:") + i5 + std::wstring(L"   25:") + i25 + std::wstring(L"  50:") + i50);
                        }
                    }
                }
            }
}
این مساله کاملا با آنچه در این تایپیک مطرح شده متفاوت هست.
 

ناآشنا

عضو جدید
کاربر ممتاز
سلام من باید با استفاده از دستور switch یک برنامه بنویسم که یک عدد را از کاربر بگیرد و مشخص کند که عدد مذکور یک رقمی است، دو رقمی است، سه رقمی است و یا بیش از سه رقم؟؟
برای نوشتن caseها مشکل دارم میشه کمکم کنید :(

سلام شکل کلی اگه منظورته به این صورته:
کد:
switch (reply)
 { case "three": cout << "3";  

   break;
 case "two": cout << "2";  
   break;
 case "one": cout << "1"; 
    break; default: cout << "qwerty"; 

    break; 
}
 

saeedeh1

عضو جدید
سلام خوبین من ی سوال برنامه نویسی داشتم
پیاده سازی پشته با آرایه به زبان سی پلاس پلاس ممنون میشم تا ساعت 9 جواب بدین چون باید به استادم ایمیلم کنم ممنون
 
آخرین ویرایش توسط مدیر:

ناآشنا

عضو جدید
کاربر ممتاز
سلام خوبین من ی سوال برنامه نویسی داشتم
پیاده سازی پشته با آرایه به زبان سی پلاس پلاس ممنون میشم تا ساعت 9 جواب بدین چون باید به استادم ایمیلم کنم ممنون
این ایمیلمه لطف کنید بفرستین با ایمیلمsaeediengineer@yahoo.com
سلام
پشته رو به روشهای متفاوتی میشه پیاده سازی کرد که آسونترین راهش استفاده از آرایه است. نمونه ای اینجا میارم امید که به درد بخوره.

و اینم یه مثال :
Example C++ Code: Stacks Using Arrays

 
آخرین ویرایش:

irmacfa

عضو جدید
دوستان من بخوام کلاس TIME رو بطور کامل پیاده سازی کنم چطوریه؟
 

ناآشنا

عضو جدید
کاربر ممتاز
دوستان من بخوام کلاس TIME رو بطور کامل پیاده سازی کنم چطوریه؟

سلام
هر شی این کلاس زمان مشخصی از روز را نشان میدهد که در آن ساعت و دقیقه و ثانیه اعداد صحیح هستند.از یک سازنده ، تابع های دسترسی و تابع
advance() برای افزایش زمان فعلی و تابع reset() برای تنظیم مجدد زمان فعلی و تابع print() و توابع دیگر استفاده میشه.


کد:
[SIZE=2][FONT=Arial][SIZE=2] [LEFT]class Time{[/LEFT]
 [LEFT]public :[/LEFT]
 [LEFT]Time(int h=0, int m=0 , int s=0):hr(h),min(m),sec(s){normalize();}[/LEFT]
 [LEFT]int hours()const{return hr;}[/LEFT]
 [LEFT]int minuts()const;[/LEFT]
 [LEFT]int seconds()const{return sec;}[/LEFT]
 [LEFT]void advance(int ,int ,int );[/LEFT]
 [LEFT]void print(){cout << hr <<" : "<<min<<" : "<<sec <<endl;}[/LEFT]
 [LEFT]private:[/LEFT]
 [LEFT]int hr,min,sec;[/LEFT]
 [LEFT]void normalize();[/LEFT]
 [LEFT]};[/LEFT]
 [LEFT]int Time :: minutes()const (){ return min;}[/LEFT]
 [LEFT]void Time :: normalize(){[/LEFT]
 [LEFT]min+=sec/60;[/LEFT]
 [LEFT]hr+=min/60;[/LEFT]
 [LEFT]hr=hr%24;[/LEFT]
 [LEFT]min=min%60;[/LEFT]
 [LEFT]sec=sec%60;[/LEFT]
 [LEFT]}[/LEFT]
 [LEFT]void Time :: advance(int h=0, int m=0,int s=1){[/LEFT]
 [LEFT]hr+=h;[/LEFT]
 [LEFT]min+=m;[/LEFT]
 [LEFT]sec+=s;[/LEFT]
 [LEFT]normalize();[/LEFT]
 [LEFT]}[/LEFT]
 [LEFT]void Time :: reset(int h=0,int m=0,int s=0){[/LEFT]
 [LEFT]hr=h;[/LEFT]
 [LEFT]min=m;[/LEFT]
 [LEFT]sec=s;[/LEFT]
 [LEFT]normalize();[/LEFT]
 [LEFT]}[/LEFT]
 [/SIZE][/FONT][/SIZE]




 

irmacfa

عضو جدید

سلام
هر شی این کلاس زمان مشخصی از روز را نشان میدهد که در آن ساعت و دقیقه و ثانیه اعداد صحیح هستند.از یک سازنده ، تابع های دسترسی و تابع
advance() برای افزایش زمان فعلی و تابع reset() برای تنظیم مجدد زمان فعلی و تابع print() و توابع دیگر استفاده میشه.


کد:
[SIZE=2][FONT=Arial][SIZE=2] [LEFT]class Time{[/LEFT]
 [LEFT]public :[/LEFT]
 [LEFT]Time(int h=0, int m=0 , int s=0):hr(h),min(m),sec(s){normalize();}[/LEFT]
 [LEFT]int hours()const{return hr;}[/LEFT]
 [LEFT]int minuts()const;[/LEFT]
 [LEFT]int seconds()const{return sec;}[/LEFT]
 [LEFT]void advance(int ,int ,int );[/LEFT]
 [LEFT]void print(){cout << hr <<" : "<<min<<" : "<<sec <<endl;}[/LEFT]
 [LEFT]private:[/LEFT]
 [LEFT]int hr,min,sec;[/LEFT]
 [LEFT]void normalize();[/LEFT]
 [LEFT]};[/LEFT]
 [LEFT]int Time :: minutes()const (){ return min;}[/LEFT]
 [LEFT]void Time :: normalize(){[/LEFT]
 [LEFT]min+=sec/60;[/LEFT]
 [LEFT]hr+=min/60;[/LEFT]
 [LEFT]hr=hr%24;[/LEFT]
 [LEFT]min=min%60;[/LEFT]
 [LEFT]sec=sec%60;[/LEFT]
 [LEFT]}[/LEFT]
 [LEFT]void Time :: advance(int h=0, int m=0,int s=1){[/LEFT]
 [LEFT]hr+=h;[/LEFT]
 [LEFT]min+=m;[/LEFT]
 [LEFT]sec+=s;[/LEFT]
 [LEFT]normalize();[/LEFT]
 [LEFT]}[/LEFT]
 [LEFT]void Time :: reset(int h=0,int m=0,int s=0){[/LEFT]
 [LEFT]hr=h;[/LEFT]
 [LEFT]min=m;[/LEFT]
 [LEFT]sec=s;[/LEFT]
 [LEFT]normalize();[/LEFT]
 [LEFT]}[/LEFT]
[/SIZE][/FONT][/SIZE]




مرسی دوست عزیز آما میشه ساده تر بگین ؟
مثن مثل این هست که کلاس اعداد کسری را با توابع ورودی و خروجی و معکوس کردن کسر و تبدیل کسر به اعشاری و توابع Set , Get?????
درسته که در ساعت ما تبدیل و معکوس و کسری نداریم اما چیزی که مثل اینا باشه چطوری نوشته میشه؟ اینم مثال این نرم افزارclass ratio {
public:
void read(){cin>>num>>denum;}
void print(){cout<<num<<"/"<<denum;}
void invert(){int t=num; num=denum; denam=t;}
floot convertor() {return (floot) num/denum;}
void set_num (int x){num = x;}
void set_denum (int y){denum = y;}
int get_num(){return num;}
int get_denum(){return denum;}
private:
int num;denum;
}
main () {
ratio r;
r.ratio ();
r.inver ();
cout <<r.convert ();
r.set_num ();
r.set_denum ();
cout<<r.get_num ();
cou<<r.get_denum; ()

اون چیزی که مده نظرمه در مورده پیاده سازی کلاس Time یه سورسی مثل اینه :*
 

ناآشنا

عضو جدید
کاربر ممتاز
مرسی دوست عزیز آما میشه ساده تر بگین ؟
مثن مثل این هست که کلاس اعداد کسری را با توابع ورودی و خروجی و معکوس کردن کسر و تبدیل کسر به اعشاری و توابع Set , Get?????
درسته که در ساعت ما تبدیل و معکوس و کسری نداریم اما چیزی که مثل اینا باشه چطوری نوشته میشه؟ اینم مثال این نرم افزارclass ratio {
public:
void read(){cin>>num>>denum;}
void print(){cout<<num<<"/"<<denum;}
void invert(){int t=num; num=denum; denam=t;}
floot convertor() {return (floot) num/denum;}
void set_num (int x){num = x;}
void set_denum (int y){denum = y;}
int get_num(){return num;}
int get_denum(){return denum;}
private:
int num;denum;
}
main () {
ratio r;
r.ratio ();
r.inver ();
cout <<r.convert ();
r.set_num ();
r.set_denum ();
cout<<r.get_num ();
cou<<r.get_denum; ()

اون چیزی که مده نظرمه در مورده پیاده سازی کلاس Time یه سورسی مثل اینه :*

سلام دوست عزیز
من دقیقا منظور شما رو متوجه نشدم که چه کاری میخواین انجام بدین اعداد کسری رو میخواین به چی تبدیل کنید؟ چه خروجی ای مدنظرتون هست؟
 

R.Shiri

عضو جدید
سلام شکل کلی اگه منظورته به این صورته:
کد:
switch (reply)
 { case "three": cout << "3";  

   break;
 case "two": cout << "2";  
   break;
 case "one": cout << "1"; 
    break; default: cout << "qwerty"; 

    break; 
}

این کد هم جواب نمیده!!! من باید caseهارو طوری تعریف کنم که بتونه تشخیص بده عددی که کاربر وارد کرده یک رقمی، دو رقمی، سه رقمی و یا بیش از سه رقم:(
 

ناآشنا

عضو جدید
کاربر ممتاز
این کد هم جواب نمیده!!! من باید caseهارو طوری تعریف کنم که بتونه تشخیص بده عددی که کاربر وارد کرده یک رقمی، دو رقمی، سه رقمی و یا بیش از سه رقم:(

http://www.www.www.iran-eng.ir/images/smilies/icon_biggrin.gifگفته یک رقمی 2 رقمی 3 رقمی نگته عدد یک دو سه!!!!
http://www.www.www.iran-eng.ir/images/smilies/icon_biggrin.gif

دوست عزیز
این کد جواب برنامه ی شما نیست فقط نمونه ای برای به کارگیری case هست . شما گفتین در طرز استفاده مشکل دارید من اینطور برداشت کردم که شما شکل دستور مدنظرتون هست.
 

silver light

عضو جدید
کاربر ممتاز
switch (reply) { case reply<10: cout << "3"; break; case 100<reply>10: cout << "2"; break; case 100<reply>100: cout << "1"; break; default: cout << "qwerty"; break; }مطمئن نیستم ها اما باید اینجوری باشه
 

R.Shiri

عضو جدید
دوست عزیز
این کد جواب برنامه ی شما نیست فقط نمونه ای برای به کارگیری case هست . شما گفتین در طرز استفاده مشکل دارید من اینطور برداشت کردم که شما شکل دستور مدنظرتون هست.

من دستور کلی switch را بلدم چند تا برنامه هم با استفاده از این دستور نوشتم ولی در این برنامه باید به caseها بازه بدم که قبول نمیکنم هر راهی به ذهنم می رسیده انجام دادم. نمیگم کسی کل برنامه رو بهم بده حتی اگر راهنماییم کنید که caseهارو باید چطوری تعریف کنم ممنون میشم
 

irmacfa

عضو جدید
سلام دوست عزیز
من دقیقا منظور شما رو متوجه نشدم که چه کاری میخواین انجام بدین اعداد کسری رو میخواین به چی تبدیل کنید؟ چه خروجی ای مدنظرتون هست؟


ببخشید دیر جواب داد
من میخوام کلاس ساعت رو به آسان ترین شکل روی کاغذ نه برنامه پیاده کنم با استفاده از توابع SET GET و ... ./ با تشکر :redface:
 

لیختن اشتاین

عضو جدید
سلام..
ببخشید دستور return که اخر برنامه مینویسن برا چیه؟؟
و دستور int که اول برنامه قبل main مینویسن برا چیه؟؟؟
 

zahra1386

مدیر بازنشسته
کاربر ممتاز
من دستور کلی switch را بلدم چند تا برنامه هم با استفاده از این دستور نوشتم ولی در این برنامه باید به caseها بازه بدم که قبول نمیکنم هر راهی به ذهنم می رسیده انجام دادم. نمیگم کسی کل برنامه رو بهم بده حتی اگر راهنماییم کنید که caseهارو باید چطوری تعریف کنم ممنون میشم

سلام

ینی شما کار مقایسه رو حتما باید با این دستور انجام بدین؟!نمیشه قبل از استفاده از این دستور if یا for به کار ببرین؟!

به نظرم اگر فقط بخواین با این دستور کار کنین امکان مقایسه توی case ها وجود نداشته باشه چون کلا ساختار case به گونه ای هست که باید یه مقدار ثابت داشته باشه نمیشه بازه بهش داد!

فکر میکنم تنها راهی که میمونه استفاده از فرمول ریاضی پیدا کردن تعداد ارقام عدد هست که به این صورته:

کد:
result=floor(log(input)/log(10))+1;

توضیح اینکه در اینجا input عددی هست که کاربر وارد میکنه و result نتیجه بررسی می باشد که یک عدد از نوع int است.

برای استفاده از این تابع باید هدر
کد:
# include <math>

رو به برنامه اضافه کنید..حالا نتیجه این فرمول رو میتونید در switch ...case به کار ببرید!

البته به احتمال خیلی زیاد شما نباید از فرمول ریاضی استفاده کنید ولی خب اینو گفتم تا شاید جرقه ای تو ذهنتون زده بشه و به راه حلی برسید:smile:

اگر امکان استفاده از if یا for وجود داشت میشد بازه ها رو با استفاده از این ها تعریف و نتیجه رو در case ها استفاده کرد!

راستی شما هم مثل من از همون روش تقسیم بر 10 و مقایسه خارج قسمت برای تعداد ارقام استفاده میکنید؟

:gol:

سلام..
ببخشید دستور return که اخر برنامه مینویسن برا چیه؟؟
و دستور int که اول برنامه قبل main مینویسن برا چیه؟؟؟

سلام

int main() ساختار یه تابع رو معرفی میکنه که int نشون دهنده ی نوع خروجی اون هست!
از اونجایی که این تابع بنا به تعریفش حتما باید یه خروجی از نوع int داشته باشه پس همیشه آخر عملیات هایی که توش انجام میدیم return 0 یا return -1 (که معمول تر هستن) رو قرار میدیم:gol:
 

ناآشنا

عضو جدید
کاربر ممتاز
من دستور کلی switch را بلدم چند تا برنامه هم با استفاده از این دستور نوشتم ولی در این برنامه باید به caseها بازه بدم که قبول نمیکنم هر راهی به ذهنم می رسیده انجام دادم. نمیگم کسی کل برنامه رو بهم بده حتی اگر راهنماییم کنید که caseهارو باید چطوری تعریف کنم ممنون میشم

سلام دوست عزیز
به قول دوستمون واقعا مجبورین با این دستور حتما بنویسین؟ آدمو میذارین تو آمپاس ها.(شوخی) .مثلا نمیشه با while نوشت.
این برنامه یک عدد ورودی میگیره تعداد ارقامش رو حساب میکنه:
کد:
#include <iostream.h>
int main()
{
    long int x;
    int count=0;
    cin>>x;
    while(x>=1)
    {
        count++;
        x/=10;
    }
    cout<<"Tedade argham: "<<count;
    return 0;
}
اگه بخواین در چاپ از case استفاده کنین می تونین ولی برای تشخیص چند رقمی بودن باید از یه دستور دیگه استفاده کنید. مثلا می تونین تعداد ارقام رو با همین برنامه که نوشتم به دست بیارین بعد با یک حلقه ی for ودستور case بگید مثلا اگه یک بود در خروجی چاپ کنه یک رقمی , اگه دو بود بگه دورقمی تا الی آخر .

خوب این برنامه بعدی که میذارم تعداد ارقام به علاوه ی فضای خالی و کاراکترها رو هم میشماره:
کد:
#include <stdio.h> 
 /* 
 * count the number of each digit, whitespace, 
 * and all other chars  */
 void main(void)
 {  
   register int c; 
               /* input char */ 
    register int nwhite = 0;   
     /* whitespace count */ 
    register int nother = 0;
        /* other count */   
  register int i;   
             /* counter in a for loop */  
   int ndigit[10];         
       /* digit counts */   
   /*      * initialize the ndigit array      */  
   for(i = 0; i < 10; i++)   
      ndigit[i] = 0;   
   /*      * handle input a char at a time      */  
   while((c = getchar()) != EOF)
{     
    /* see what it is */     
    switch(c)
{   
      case '0': case '1': case '2': case '3':   
 /* digit */     
    case '4': case '5': case '6': case '7':   
      case '8': case '9':     
        ndigit[c - '0']++;      
       break;     
    case ' ': case '\t': case '\n': 
   /* whitespace */          
    nwhite++;      
       break;    
     default: 
   /* neither a digit nor whitespace */   
          nother++;      
       break;    
     }  
   }  
    /*      * announce the results and quit      */    
 printf("digits: ");  
   for(i = 0; i < 10; i++)
{   
      printf("'%c' %3d\t", i + '0', ndigit[i]);  
       /* put 5 digits per line, for neat output */    
     if (i == 4)         
    printf("\n        ");   
  }     putchar('\n');  
   printf("whitespace: %d\nother:      %d\n", nwhite, nother);  
   exit(0); 
}


موفق باشین.
 
آخرین ویرایش:

لیختن اشتاین

عضو جدید
سلام

ینی شما کار مقایسه رو حتما باید با این دستور انجام بدین؟!نمیشه قبل از استفاده از این دستور if یا for به کار ببرین؟!

به نظرم اگر فقط بخواین با این دستور کار کنین امکان مقایسه توی case ها وجود نداشته باشه چون کلا ساختار case به گونه ای هست که باید یه مقدار ثابت داشته باشه نمیشه بازه بهش داد!

فکر میکنم تنها راهی که میمونه استفاده از فرمول ریاضی پیدا کردن تعداد ارقام عدد هست که به این صورته:

کد:
result=floor(log(input)/log(10))+1;

توضیح اینکه در اینجا input عددی هست که کاربر وارد میکنه و result نتیجه بررسی می باشد که یک عدد از نوع int است.

برای استفاده از این تابع باید هدر
کد:
# include <math>

رو به برنامه اضافه کنید..حالا نتیجه این فرمول رو میتونید در switch ...case به کار ببرید!

البته به احتمال خیلی زیاد شما نباید از فرمول ریاضی استفاده کنید ولی خب اینو گفتم تا شاید جرقه ای تو ذهنتون زده بشه و به راه حلی برسید:smile:

اگر امکان استفاده از if یا for وجود داشت میشد بازه ها رو با استفاده از این ها تعریف و نتیجه رو در case ها استفاده کرد!

راستی شما هم مثل من از همون روش تقسیم بر 10 و مقایسه خارج قسمت برای تعداد ارقام استفاده میکنید؟

:gol:



سلام

int main() ساختار یه تابع رو معرفی میکنه که int نشون دهنده ی نوع خروجی اون هست!
از اونجایی که این تابع بنا به تعریفش حتما باید یه خروجی از نوع int داشته باشه پس همیشه آخر عملیات هایی که توش انجام میدیم return 0 یا return -1 (که معمول تر هستن) رو قرار میدیم:gol:

خوب یه برنامه استاد داده بود که خروجی محیط دایره بود.... ولی اونم int نوشته بود....
return رو متوجه نشدم./.
 

ناآشنا

عضو جدید
کاربر ممتاز
ببخشید دیر جواب داد
من میخوام کلاس ساعت رو به آسان ترین شکل روی کاغذ نه برنامه پیاده کنم با استفاده از توابع SET GET و ... ./ با تشکر :redface:

سلام
خوب طبق برنامه ای که گذاشتین:
کد:
void    read(){cin>>num>>denum;}
void    print(){cout<<num<<"/"<<denum;}
void    invert(){int t=num; num=denum; denam=t;}
floot convertor() {return (floot) num/denum;}

void set_num (int x){num = x;}

 void set_denum (int y){denum = y;}
int get_num(){return num;}
int get_denum(){return denum;}
private:
int num;denum;
}
main () {
ratio r;
r.ratio ();
r.inver ();
cout <<r.convert ();
r.set_num ();
r.set_denum ();
cout<<r.get_num ();
cou<<r.get_denum; ()

set مقدار میده به متغیر و به اصطلاح اون رو ست میکنه و get هر مقداری که متغیر داشته باشه رو بر میگردونه.
خود کلاس ساعت هم که فکر میکنم خیلی ساده باشه ولازم نباشه خط به خط توضیح بدم. اگه بازم کمکی از دستم بربیاد در خدمتم.
 
آخرین ویرایش:

Similar threads

بالا