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

s.1.8.1.18

کاربر حرفه ای
کاربر ممتاز
من به چند نفر دیگه گفتم که چجوری تابع پرینت رو تعریف کنم اون ها گفتن که این برنامه اشکال داره
اره واقعا اشکال داره؟اخه کتابمون برنامه رو اینطوری نوشته بود
یکی از دوستام برنامه رو تغییر داد اما یک چیز هایی اضافه کرده بود که فکر نکنم تا الان خونده باشم اون هارو وسربارگذاری جریان هم نخوندم وداخل کتاب تا اون جایی که دیدم نبود
میشه کمکم کنید؟
برنامه اش اینه
سر بار گذاری عملگر ضرب برای کلاس ratio
و خروجی هم اینه 22/7
66/56-
من باید تمام عملگر ها برای کلاس ratio رو بنویسم برنامه ای که اینجا گذاشتم ارور می دهد و چند تا عملگر دیگه برنامه شون ارور میدهد
ممنون میشم کمکم کنید

سلام
من این برنامه رو برات نوشتم! ولی نمیدونم چرا از x و y اش ایراد میگیره! در صورتی که فک نمیکنم مشکلی داشته باشه!
اگه کسی میتونه لطفا" 2تا ارورش رو بگیره! در ضمن با سربارگذاریه فقط هم عملگر ضرب!

#include<iostream>
#include<conio.h>
using namespace std;
class ratio{
private:
int x,y;
public:
ratio(){
x=0,y=0;
}
ratio(int ix,int iy){
x=ix,y=iy;
}
void get(){
cout<<"enter x:";
cin>>x;
cout<<"enter y:";
cin>>y;
}
friend ratio operator * (ratio&);
};//end class
ratio operator * (ratio& d2){
int i=x*d2.x;
int f=y*d2.y;
return ratio(i,f);
}
int main(){
ratio d1,d2,d3;
d1.get();
ratio d2(2,3);
d3=d1*d2;
cout<<"d3:";
getch();
return 0;
}
 

zahra1386

مدیر بازنشسته
کاربر ممتاز
سلام
من این برنامه رو برات نوشتم! ولی نمیدونم چرا از x و y اش ایراد میگیره! در صورتی که فک نمیکنم مشکلی داشته باشه!
اگه کسی میتونه لطفا" 2تا ارورش رو بگیره! در ضمن با سربارگذاریه فقط هم عملگر ضرب!
....

سلام

سحر جان اشکال برنامه ی شما اینه که وقتی داری تابع ratio رو تعریف میکنی موقع ضرب باید دو تا عملوند از یه نوع باشن تا بشه عمل ضرب انجام داد!

من ارورهای برنامه رو رفع کردم :

کد:
#include<iostream>
#include<conio.h>
using namespace std;
class ratio{
private:
int x,y;
public:
ratio(){
x=0,y=0;
}
ratio(int ix,int iy){
x=ix,y=iy;
}
void get(){
cout<<"enter x:";
cin>>x;
cout<<"enter y:";
cin>>y;
}
friend ratio operator * (ratio& ,ratio&);
};//end class
ratio operator * (ratio& d2,ratio& d1){
int i=d1.x*d2.x;
int f=d1.y*d2.y;
return ratio(i,f);
}
int main(){
ratio d1,d3;
d1.get();
ratio d2(2,3);

d3=d1*d2;
cout<<"d3:";
getch();
return 0;
}

اما بازم خروجی نداره چرا؟چون نوع خروجی هم به صورت d3(x,y) هست و به طبع با دستور cout معمولی نمیشه نمایشش داد پس باید این عملگر رو هم سر بار گذاری کنید تا بتونید خروجی رو ببینید:smile:

اصولا این نکته رو به یاد داشته باشید که بعد از سربارگذاری یک عملگر معمولا لازمه که برای خروجی هم سربارگذاری انجام بشه:gol:

پ.ن:دلیل استفاده از تابع getch() رو متوجه نشدم!!مگه برای خواندن از صفحه کلید نیست؟:warn:
 

s.1.8.1.18

کاربر حرفه ای
کاربر ممتاز
سلام

سحر جان اشکال برنامه ی شما اینه که وقتی داری تابع ratio رو تعریف میکنی موقع ضرب باید دو تا عملوند از یه نوع باشن تا بشه عمل ضرب انجام داد!

من ارورهای برنامه رو رفع کردم :

کد:
#include<iostream>
#include<conio.h>
using namespace std;
class ratio{
private:
int x,y;
public:
ratio(){
x=0,y=0;
}
ratio(int ix,int iy){
x=ix,y=iy;
}
void get(){
cout<<"enter x:";
cin>>x;
cout<<"enter y:";
cin>>y;
}
friend ratio operator * (ratio& ,ratio&);
};//end class
ratio operator * (ratio& d2,ratio& d1){
int i=d1.x*d2.x;
int f=d1.y*d2.y;
return ratio(i,f);
}
int main(){
ratio d1,d3;
d1.get();
ratio d2(2,3);

d3=d1*d2;
cout<<"d3:";
getch();
return 0;
}

اما بازم خروجی نداره چرا؟چون نوع خروجی هم به صورت d3(x,y) هست و به طبع با دستور cout معمولی نمیشه نمایشش داد پس باید این عملگر رو هم سر بار گذاری کنید تا بتونید خروجی رو ببینید:smile:

اصولا این نکته رو به یاد داشته باشید که بعد از سربارگذاری یک عملگر معمولا لازمه که برای خروجی هم سربارگذاری انجام بشه:gol:

پ.ن:دلیل استفاده از تابع getch() رو متوجه نشدم!!مگه برای خواندن از صفحه کلید نیست؟:warn:


سلام زهرا جون
خ خ ممنون.
اگه بخوام مثلا" اون عملگر رو به صورت bool بگم منظورم اینه:
(bool operator == (rect a
که class rect طول و عرض مستطیله! اون موقع میشه یه عملوند باشه؟ یکی که شی جاریه یکی هم پارامتر! من کامل گیج شدم! چون استاد خودمون عملگر== رو اون طوری که من بالا نوشتم نوشته!
یعنی با یه عملوند.
میشه بیشتر برام توضیح بدین؟!
getch() رو برای این گذاشتم که وقتی نمایش میده تو ص تا وقتی دکمه ای نزدم از برنامه خارج نشه!!!!!!!!!!!
ممنون
 

zahra1386

مدیر بازنشسته
کاربر ممتاز
سلام زهرا جون
خ خ ممنون.
اگه بخوام مثلا" اون عملگر رو به صورت bool بگم منظورم اینه:
(bool operator == (rect a
که class rect طول و عرض مستطیله! اون موقع میشه یه عملوند باشه؟ یکی که شی جاریه یکی هم پارامتر! من کامل گیج شدم! چون استاد خودمون عملگر== رو اون طوری که من بالا نوشتم نوشته!
یعنی با یه عملوند.
میشه بیشتر برام توضیح بدین؟!
getch() رو برای این گذاشتم که وقتی نمایش میده تو ص تا وقتی دکمه ای نزدم از برنامه خارج نشه!!!!!!!!!!!
ممنون

سلام عزیزم

خواهش میکنم...

نمیدونم سوالتو درست متوجه شدم یا نه!ولی این طور که توضیح دادی این اپراتور قراره بررسی کنه که طول و عرض برابرن یا نه درسته؟اگر این طور باشه چون کلاس rect شامل طول و عرض هست و این مقایسه قراره بر روی عناصر همون یک شی انجام بشه یه عملوند کافیه...مثلا میشه این طور گفت که:

کد:
bool operator ==(rect a)
{
    if(a.x=a.y)
        return true;
    else
        return false;
}

که در این جا x و y طول و عرضن...
 

s.1.8.1.18

کاربر حرفه ای
کاربر ممتاز
سلام عزیزم

خواهش میکنم...

نمیدونم سوالتو درست متوجه شدم یا نه!ولی این طور که توضیح دادی این اپراتور قراره بررسی کنه که طول و عرض برابرن یا نه درسته؟اگر این طور باشه چون کلاس rect شامل طول و عرض هست و این مقایسه قراره بر روی عناصر همون یک شی انجام بشه یه عملوند کافیه...مثلا میشه این طور گفت که:

کد:
bool operator ==(rect a)
{
    if(a.x=a.y)
        return true;
    else
        return false;
}

که در این جا x و y طول و عرضن...

نه زهراجون میخواد بررسی کنه 2تا مستطیل با هم برابرند یا نه!
استادمون از یه عملوند استفاده میکنه!
کتاب لیفور هم همین طور.
من چی کنم؟
 

s.1.8.1.18

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

zahra1386

مدیر بازنشسته
کاربر ممتاز
نه زهراجون میخواد بررسی کنه 2تا مستطیل با هم برابرند یا نه!
استادمون از یه عملوند استفاده میکنه!
کتاب لیفور هم همین طور.
من چی کنم؟

والا من خیلی فکر کردم ولی به نتیجه ای نرسیدم!

آخه شما نگاه کن...تابعی که برای سربارگذاری می نویسی فرند کلاس خاصی هست پس برای این که بتونه از خواص اون کلاس استفاده کنه حتما باید یه شی از اون کلاس ایجاد کنه دیگه!البته میشه یک شی رو داخل خود تابع تعریف کرد و یکی رو به عنوان ورودی بهش داد ولی آخه چه کاریه؟!!حالا حتما باید با یه عملوند باشه؟

راستی یه سوال دیگه شما از برنامه ی خاصی برای عکس گرفتن از ویژوال استفاده میکنید؟
من بلد نیستم همون طور که دیدید عکسی که من گرفتم وقتی گذاشتمش اینجا خ کوچیک شده.

اگر عکست رو آپلود کنی و بذاری اینجا بزرگ نشون میده گلم:smile:
 

s.1.8.1.18

کاربر حرفه ای
کاربر ممتاز
والا من خیلی فکر کردم ولی به نتیجه ای نرسیدم!

آخه شما نگاه کن...تابعی که برای سربارگذاری می نویسی فرند کلاس خاصی هست پس برای این که بتونه از خواص اون کلاس استفاده کنه حتما باید یه شی از اون کلاس ایجاد کنه دیگه!البته میشه یک شی رو داخل خود تابع تعریف کرد و یکی رو به عنوان ورودی بهش داد ولی آخه چه کاریه؟!!حالا حتما باید با یه عملوند باشه؟

من تقریبا یه نتیجه گرفتم از حرفاتون اگه سربارگذاری با استفاده ازتابع غیرعضو(فرند) بود 2 عملوند ولی اگه با استفاده از تابع عضو بود یکی هم کافیه!
الان 2باره جزوه ام رو نگاه کردم حرف شما صحیح با فرند استادمون هم 2 عملوند استفاده کرده.
یه عملوند میشه دیگه برای تابع عضو؟!
خ خ ممنون
 

iust2699

عضو جدید
سلام
برنامه اي بنويسيد كه تا موقعي كه يك عدد متقارن را از ورودي نگيرد از ورودي
عدد بگيرد و تعداد دفعات ورودي عدد را بشمارد و آن را چاپ كرده و سپس خارج شود.( عدد متقارن
با مغلوبش برابر است)؟باwhile
 

H.r.Ghanbari

عضو جدید
reply

reply

سلام
برنامه اي بنويسيد كه تا موقعي كه يك عدد متقارن را از ورودي نگيرد از ورودي
عدد بگيرد و تعداد دفعات ورودي عدد را بشمارد و آن را چاپ كرده و سپس خارج شود.( عدد متقارن
با مغلوبش برابر است)؟باwhile

1234321
اگه ورودیت باینری باشه به رشته تبدیل کن و لی اگه ورودیت رشته باشه =>
دو تا شمارنده بذار بکی ار اندیس صفر سروع کنه و اونیکی از طول رشته منهی 1، محنوای این خونه هارو با هم مقایسه کن اگه با هم فرق داشتن بپر بیرون خروجی NOK, اگه اندیسها از همدیگه رد شدن بپر بیرونو Ok چاپ کن.:confused:
 

zahra1386

مدیر بازنشسته
کاربر ممتاز
من تقریبا یه نتیجه گرفتم از حرفاتون اگه سربارگذاری با استفاده ازتابع غیرعضو(فرند) بود 2 عملوند ولی اگه با استفاده از تابع عضو بود یکی هم کافیه!
الان 2باره جزوه ام رو نگاه کردم حرف شما صحیح با فرند استادمون هم 2 عملوند استفاده کرده.
یه عملوند میشه دیگه برای تابع عضو؟!
خ خ ممنون

آره برای تابع عضو یه عملوند میشه اما اون طور که من یادم میاد برای سربارگذاری از فرند و تابع غیر عضو استفاده می کردیم (البته خیلی وقت از اون موقع ها گذشته پیر شدم زیاد یادم نمیاد شایدم اشتباه کنم:D)

قربونت عزیزم;):gol:
 

s.1.8.1.18

کاربر حرفه ای
کاربر ممتاز
آره برای تابع عضو یه عملوند میشه اما اون طور که من یادم میاد برای سربارگذاری از فرند و تابع غیر عضو استفاده می کردیم (البته خیلی وقت از اون موقع ها گذشته پیر شدم زیاد یادم نمیاد شایدم اشتباه کنم:D)

قربونت عزیزم;):gol:

اختیار دارین ما که از الان همه چی رو یادمون رفته.
 
سلام میشه یکی به من یه کمکی بکنه مبنی بر اینکه
الگوریتم شبیه سازی اعداد اعشاری را برای من بنویسه
اینم صورت سواله با کمک اعداد صحیح در زبان c++نوع داده ای بسازید که اعداد اعشاری را نگاعه دارد .
در ضمن باید از گرانبار کردن استفاده بشه
اگه جایی خوندین یا مثالی در موردش بلد هستین هم بگین اشکالی نداره ،:w10:
حالا اگه خیلی میخواستین لطف کنین و برنامه رو هم نوشتید که دیگه خیلی خیلی ممنون میشم :w42:
 

reza roshandel

عضو جدید
سلام دوستان عزیز من دنبال یک پروژه برنامه نویسی به زبان c ++ میگردم که حداکثر 70 خط کد داشته باشد
برنامه ای که زیبا و در عین حال زیاد هم پیچیده نباشد
ممنون میشم راهنماییم کنید
 

Aligholivand

عضو جدید
این که برنامه ای یا کلاس رو بخونه بعد کاراکترهای مقابل int و double و ... و تو کلاس اعضای public و private رو چاپ کنه مثلا int:a,b یا مثلا
public:
int:sum,f,d
 

reza roshandel

عضو جدید
سلام دوستان میخوام برنامه ای بنویسم که اعداد تاس را شبیه سازی کند اعداد 1 تا 6
ممنون میشم راهنماییم کنید
 

هستیا

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

هستیا

عضو جدید
سلام می خوام دو تا عدد n رقمی رو در هم ضرب کنم .مثلا  n 100 باشه.برای خوندن دو عدد باید از آرایه کمک بگیرم یا به صورت رشته ای بخونم؟تو خوندن اعداد مشکل دارم.
 

H.r.Ghanbari

عضو جدید
اعمال محاسباتی

اعمال محاسباتی

سلام می خوام دو تا عدد n رقمی رو در هم ضرب کنم .مثلا n 100 باشه.برای خوندن دو عدد باید از آرایه کمک بگیرم یا به صورت رشته ای بخونم؟تو خوندن اعداد مشکل دارم.

سلام دوست عزیز
قرض کنیم عدد 985641 عددی بزرگ است. ( فرض کنیم ورودی ما رشته است )
روش 1. شما این عدد می تونید طوی یک ارایه از نوع unsigned char ذخیره کنید.
یعنی طو خانه 0 عدد 1 ( نه کاراکتر '1' ) و در خانه 1 عدد 4 و در خانه 2 عدد 6 و ... ( یعنی هر کاراکتر منهی 0x30 بکنید تا مقدار عددیش بدست بیاد)
حالا شما در زمان خطی می تونید دو تا عدد بزرگ رو با هم جمع یا تفریق کنید ( طوی اخرین بایت هم علامت عدد نگه دارید )
و اما ضرب!!!:confused:
 

joghd123

عضو جدید
کاربر ممتاز
سلام می خوام دو تا عدد n رقمی رو در هم ضرب کنم .مثلا n 100 باشه.برای خوندن دو عدد باید از آرایه کمک بگیرم یا به صورت رشته ای بخونم؟تو خوندن اعداد مشکل دارم.
باید از آرایه از نوع char استفاده کنی و رقمارو یکی یکی میگیره و منهای 48 میکنه تا به مقدار عددی برگرده..قسمت Initializeکه حافظه میگیره از سیستم و مقدار اولیه 0 میده.این برنامرو خط به خط اجرا کن متوجه میشی خودت.


PHP:
#include <iostream>
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
using namespace std;
int digitlen;
int *n1,*n2,*r;int i1,i2;
void revers(int *ragham , int t);
void Initialize(int digit);
void getFirstNumber();
void getSecondNumber();
void mul();
void printresult();
void main()
{
 while (1) {
  cout << "--(ba character (*) az barname kharej mishavid)--" << endl;
  Initialize(100);
  getFirstNumber();
  getSecondNumber();
  mul();
  printresult();
 }
}
void Initialize(int digit)
{
 int i;
 digitlen=digit;
 n1 = new int [digit];
 n2 = new int [digit];
 r=new int [2 * digit];
 for(i=0 ; i<digitlen ; i++)
  n1[i] = n2[i] = r[i] = 0;
 for(i=digitlen ; i< (2 * digitlen) ; i++)
  r[i]=0;
}
void revers (int *ragham, int t)
{
 int i;
 for(i=0 ; i<=(t-1)/2 ; i++)
 {
  int temp=ragham[i];
  ragham[i]=ragham[t-i-1];
  ragham[t-i-1]=temp;
 }
}
void getFirstNumber()
{
 char ch;
 cout << "ADAD(1) ra vared kon:";
 
 for (i1=0 ; (i1<digitlen) &&((ch=getche())!=13) ; i1++)  {
  if (ch=='*') {
   cout << endl;
   exit(0);
  }
  n1[i1] = ch-48;
 }
 cout << endl;
 revers(n1,i1);
}
void getSecondNumber()
{
 char ch;
 cout << "ADAD(2) ra vared kon:";
 for (i2=0 ; (i2<digitlen) &&((ch=getche())!=13) ; i2++)  {
  if (ch=='*') {
   cout << endl;
   exit(0);
  }
  n2[i2] = ch-48;
 }
 cout << endl;
 revers (n2 , i2);
}
void mul()
{
 int carry=0,sumcarry=0;
 int index=0;
 int *temp,j,i;
 int m;
 temp=new int [digitlen + 1];
 for(j=0;j<digitlen+1;j++)
  temp[j]=0;
 
 for(i=0;i<i2;i++)
 {
  index=i;
  for(m=0;m<i;m++)
   temp[m]=0;
  for(j=0;j<i1;j++)
  {
   temp[index++]=(((n2[i])*(n1[j]))+carry)%10;
   carry=(((n2[i])*(n1[j]))+carry)/10;
  }
  temp[index]=carry;
  carry=0;
  sumcarry=0;
  for(j=0;j<=index;j++)
  {
   int tresult=r[j]+temp[j]+sumcarry;
   r[j]=tresult%10;
   sumcarry=tresult/10;
  }
  r[index+1]=sumcarry;
  sumcarry=0;
  for(j=0;j<digitlen+1;j++)
   temp[j]=0;
 }
}
void printresult()
{
 int i=0,j;
 for(i=digitlen-1 ; (r[i]==0 && i>=0) ; i--) ;
 cout << "HASELZARB= ";
 for(j=i;j>=0;j--)
  cout << r[j];
 cout << "\n" << endl;
}
 

شهریاری 2

کاربر فعال تالار اسلام و قرآن
کاربر ممتاز
سلام من فکر می کنم شما باید از تابع random استفاده کنید که بازش اعداد تصادفی بین 1تا 6 باشه.اگر کتاب دیتل c++ رو داشته باشین آخراش توضیح داده.

توی کتاب پیام نور نوشته نیک مهر هم برنامه شو نوشته!
 

Aligholivand

عضو جدید
سلام
بگو سوالتو شاید من بتونم جواب بدم!
ببخشید چون الان اومدم ، نمیدونم سوالت چیه!

:que: برنامه ای که یک کلاس رو بخونه بعد بگه که تو این کلاس تو اعضای public و private و protected تابع ها کدومند یا متغیر ها کدوم ها هستند یا تابع های دوست کدومند.... :warn:
اگه برای شروع کمک کنید بقیه رو خودم می نویسم
 

joghd123

عضو جدید
کاربر ممتاز
سلام
این پیام یعنی چه
out of memory
خوب دلایل مختلفی می تونه داشته باشه..شاید کمبود حافظه..شاید نوع متغیرات شایدم بخاطر فایل resource.فایل resource رو پاک کن..بعد پروژتو باز کنو دوباره build کن.
 

Similar threads

بالا