برنامه نويسی c++

jopeter

Member
ميشه تو نوشتن اين برنامه كمكم كنين
بايد يك ارايه پويا از ستراكت ست درست كنيم بفرستيم به توبع زير


1)get_info

اراي پويا رو به عنوان ورودي ميگيره واطلاعا ت دانشجو رو از صفحه كليد ميگيره ميذارهتو ارايه

2)average

اين تابع معدل كل كلاسرو بر ميگر ونه


3)max

اينم شماره دانشجويي كسي رو كه بيشترين معدل رو داره بر ميگردونه
هر دانشجو 8 ترم داره هر ترم 7 واحد


4)report

شماه دانشجوييرو ميگيره نمرات رو چاپ كنه


#include<iostream.h>
#include<stdlib.h>
#include<conio.h>
int i,j,k;
int n;
struct address{
char street[20];
char avenue[20];
int blook;
long int phonenum;
};
struct st{
char fname;
char lname;
long idnum;
float gr[8][7];
struct address adr;};
int menu();
void get_info(struct st*);
float average(struct st[]);
int max(struct st*);
void report(int,struct st*);
void main()
{int c,l;
cin>>n;
struct st *p;
p=new st[n];
if(p==0)
exit(1);
cin>>c;
for(;;){c=menu();
switch(c){
case 1:
get_info(p);
break;
case 2:
average(p);
break;
case 3:
max(p);
break;
case 4:
cin>>l;
report(l,p);
break;
case5:
exit(1);
}
}
}
void get_info(st &p)
{int i,j,k;
for(i=0;i<n;i++)
{
cin>>(p+i)->fname;
cin>>(p+i)->lname;
cin>>(p+i)-> idnum;
for(j=0;j<n;j++)
for(k=0;k<n;k++)
cin>>(p+i)->gr[j][k];
cin>>(p+i)->adr.street[20];
cin>>(p+i)->adr.avenue[20];
cin>>(p+i)->adr.blook;
cin>>(p+i)->adr.phonenum;

}
}
float avreage(st &p)
{
float avekol;
int f=0;
float mhn[n];
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
for(k=0;k<n;k++)
f+=(p+i)->gr[8][7];
avekol=f/56;
return avekol;
}
int max(st &p)
{float maxm,mhn[n];
float f=0;
for(i=0;i<n;i++)
{for(j=0;j<n;j++)
for(k=0;k<n;k++)
{f+=p->gr[8][7];
mhn=f/56;}
}
maxm=mhn[0];
for(i=0;i<n;i++)
{if(maxm<mhn)
maxm=mhn;}
return ((p+i)->idnum);
}
}
void report(int id, st &p)
{
for(i=0;i<n;i++){
if(((p+i)->idnum)!=id)
{cout<<"this id does not exist";
exit(1);}
else
{for(j=0;j<n;j++)
for(k=0;k<n;k++)
{cout<<(p+i)->gr[8][7];
cout<<"\n";}
}
}
}
int menu()
{int c;
gotoxy(5,5);
cout<<"1)enter the information of students";
gotoxy(5,6);
cout<<"2)what is the average of class";
gotoxy(5,7);
cout<<"3)who has max average";
gotoxy(5,8);
cout<<"4)what are the grades of this idnumber";
gotoxy(5,9);
cout<<"5)exit.";
cin>>c;
return c;

}
 

zfarhad2003

Member
باشه برنامه ای رو که نوشتی بررسی می کنم.
همینجا اگه مشکلی تو برنامه ات بود می گم.
 

jopeter

Member
zfarhad2003 گفت:
باشه برنامه ای رو که نوشتی بررسی می کنم.
همینجا اگه مشکلی تو برنامه ات بود می گم.


مکان داره زودتر جواب بدید اخه ضروریه

تو این قسمتا که باید از
(p+i) استفاده بشه مشکل دارم نمی دونم چطوری باید این قسمتا رو بنویسم
 

zfarhad2003

Member
من برنامه شما رو بررسی کردم و تقریبا اون رو بازسازی کردم تا کمی بهینه تر و البته کاملتر بشه.

برنامه رو بررسی کنین اگه باز مشکلی داشت خوشحال می شم کمکتون کنم تا چیز خوبی از آب دربیاد.
 

پیوست ها

jopeter

Member
zfarhad2003 گفت:
من برنامه شما رو بررسی کردم و تقریبا اون رو بازسازی کردم تا کمی بهینه تر و البته کاملتر بشه.

برنامه رو بررسی کنین اگه باز مشکلی داشت خوشحال می شم کمکتون کنم تا چیز خوبی از آب دربیاد.


ممنونم که برنامه رو اصلاح کردید
چند جا مشکل داشتم:
در قسمت هایی که پرو تایپها رو می خوایم بنویسیم
(st p[])


در هر کدام از 4 تابع میشه به این شکل نوشت؟
(st *)

در این صورت باید در ارسال پارامتر ها بنویسم
(st *p)
?
وموقع فراخوانی هم بنویسم
)p)
؟
در موقع استفاده از پی در بدنه اون 4 تابع اگه پی رو به صورت اشاره گر در قسمت پرو تایپ بنویسیم
ایا میشه نوشت
p.field

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


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

zfarhad2003

Member
بله شما می تونین پروتوتایپ ها رو برای آرایه ها به صورت اشاره گر هم مشخص کنین.
یه نکته ای رو می خوام بگم و اون اینه که در واقع یک آرایه که با حرف P مشخص می شه نوعش از نوع اشاره گر است یعنی اصلا عبارت p[] با *p در هنگام استفاده به عنوان پارامتر در تابع هیچ فرقی نمی کنه حتی شما نمی تونین آرایه ای رو که به تابع می فرستین تغییر بدین چون در این صورت خود اصل آرایه هم تغییر می کنه چون هخونطور که گفتن آرایه در واقع یک اشاره گره و وقتی به عنوان پارامتر استفاده می شه خاصیت call by pointer رو با خودش داره که در نتیجه تغییرات درون تابع در کل برنامه رو آرایه تاثیر می زاره.
پس همونطور که گفتم فرق نمی کنه از *p یا P[] استفاده کنی و در هردو حالت می تونی از p.field به راحتی استفاده کنی. در ضمن هیچ وقت هیچ آرایه ای با خودش اندازه خودش رو منتقل نمی کنه و شما یا باید n که اندازه آرایه است رو خودت منتقل کنی و یا اینکه با محاسبات ریاضی اون رو توی خود تابع محاسبه کنی.
 

jopeter

Member
zfarhad2003 گفت:
بله شما می تونین پروتوتایپ ها رو برای آرایه ها به صورت اشاره گر هم مشخص کنین.
یه نکته ای رو می خوام بگم و اون اینه که در واقع یک آرایه که با حرف P مشخص می شه نوعش از نوع اشاره گر است یعنی اصلا عبارت p[] با *p در هنگام استفاده به عنوان پارامتر در تابع هیچ فرقی نمی کنه حتی شما نمی تونین آرایه ای رو که به تابع می فرستین تغییر بدین چون در این صورت خود اصل آرایه هم تغییر می کنه چون هخونطور که گفتن آرایه در واقع یک اشاره گره و وقتی به عنوان پارامتر استفاده می شه خاصیت call by pointer رو با خودش داره که در نتیجه تغییرات درون تابع در کل برنامه رو آرایه تاثیر می زاره.
پس همونطور که گفتم فرق نمی کنه از *p یا P[] استفاده کنی و در هردو حالت می تونی از p.field به راحتی استفاده کنی. در ضمن هیچ وقت هیچ آرایه ای با خودش اندازه خودش رو منتقل نمی کنه و شما یا باید n که اندازه آرایه است رو خودت منتقل کنی و یا اینکه با محاسبات ریاضی اون رو توی خود تابع محاسبه کنی.




خيلي از جوابتون ممنونم
مي تونم برنامه هاييرو كه مينويسم براي رفع اشكال اينجا بزارم?
سعي مكنم برنمه ها ي كاملي رو بزارم
 

zfarhad2003

Member
حتما می تونین بزارین . من سعی می کنم در حد توان علمی خودم کمکتون کنم.
 
انجمن تخصصی C موجود است

سلام.

دوست عزیز اگر لطف کنید و مسائل مربوط به C رو در انجمن اختصاصی C مطرح کنید، افراد بیشتری برای کمک پیدا خواهید کرد :)
البته فرهاد جان سرور همه ی ما هستند :)

با سپاس از همکاری و فعالیت شما.
 

jopeter

Member
stranger_in_rain گفت:
سلام.

دوست عزیز اگر لطف کنید و مسائل مربوط به C رو در انجمن اختصاصی C مطرح کنید، افراد بیشتری برای کمک پیدا خواهید کرد :)
البته فرهاد جان سرور همه ی ما هستند :)

با سپاس از همکاری و فعالیت شما.



سلام
ضمن تشكر بسيار از فرهاد عزيز
معذرت مي خوام كه تاپيك جدا و تازه اي از سي باز كردم
و خوشحال ميشم كه در گروه هاي تخصصي سي فعاليت كنم
 

جدیدترین ارسال ها

بالا