الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

سؤال يتعلق بالstructure في لغة السي بلاس

بدأه samelo في 30 مارس 2009 · 9 رد · 640 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

write a program that reads information about 20 employees and store it in a array of strucures, the structure of each employee should contain : name 9does not exceed 20 characters), ID (int) , salary (double) between 200 and 4000 and address which belongs to one of the following {A,B,C,D,E} the progrem should then output the following :

1- the average of employee salaries.

2- the names of employees whose salaries are above the average.

وهذا هو الحل


#include "iostream.h"

 struct employee {
  char name[20];
  int ID;
  double 200;
 };
 void main()
 {
  int sum=0;
  float avg;
  employee a[20];
  employee a;
  a.name;
  a.salary;
 }
 for (int i=0;i<20;i++)
  sum=sum+A;
 avg=sum/20;
 cout<<avg<<endl;
 for (int i=0;i<20;i++)
  if (A.salary>avg)
  cout<<A.names<<endl;
}
}
#include "stdafx.h"

#2

محاولة طيبة أخي الكريم ، ولكن هناك بعض الاخطاء التي يجب اصلاحها ..

اولا قم باصلاح الـ struct لديك وتعريف المتغير salary بدلا من 200 ، ايضا يوجد حقل اضافي وهو العنوان address ، لذا شكل ال struct ستكون كالاتي:

struct employee {
	 char name[20];
	 int ID;
	 double salary;
	 char address;
};

بالنسبة للهيدر فايل يكفي :

#include <iostream>
using namespace std;

واما بالنسبة للعمليات المطلوبة ، فيفضل وضعها في دوال منفصلة حتى يكون الشغل اكثر عملية.

ويجب عليك تمرير المصفوفة الى هذه الدال بالاضافة الى حجمها "ان لم تعرفه كثابت عام".

دالة ادخال بيانات الموظفين

void input(employee* list,int size)
{
  for(int i=0;i<size;++i)
  {
	  cout<<"\nEmployee ["<<i+1<<"]: ";

	  cout<<"\nName: ";
	  cin>>list.name;

	  cout<<"\nID: ";
	  cin>>list.ID;

	  cout<<"\nSalary: ";
	  cin>>list.salary;

	  //etc
  }
}

دالة طباعة معلوماتهم:

void output(employee* list,int size)
{
  for(int i=0;i<size;++i)
  {
	  cout<<"\nEmployee ["<<i+1<<"] : ";
	  cout<<"\nName: " <<list.name;

	  cout<<"\nID: " <<list.ID;

	  cout<<"\nSalary: "<<list.salary;
  }
}

حساب المتوسط :

double avg(employee* list,int size)
{
	int sum = 0;
	for(int i=0;i<size;++i)
	sum+=list.salary;

return double (sum)/size;
}

ومهمة الدالة الرئيسية هي فقط استدعاء الدوال السابقة وتمرير المتغيرات لها .

int main()
{
	 employee a[2];

	 input(a,2);
	 output(a,2);
	 cout <<"\n\nAverage: " << avg(a,2);

	 return 0;
}

ويمكن تحسين الكود اكثر وذلك باستخدام الفئات classes ، وعمل فئتين واحدة للموظفين واخرى للعمليات ..

ايضا يمكنك تعريف ثابت const بدلا من استخدام القيم مباشرة وذلك حتى تستطيع التغيير في حجم الموظفين من مكان واحد.

وأبسط وأفضل حل ممكن هو استخدام أحد فئات STL مثلا vector ، وبهكذا تنتهي من مشاكل الحجم .

أي سؤال يرحب به..

#3

الف شكر اخي العزيز على الرد والمشاركة والتوضيح لكن بالنسبة للسؤال كان يراد منه الحل بدون استخدام الدول الجاهزة كا input ,output اي function ويراد بالطريقة البسيطة اي strucure of array والف شكر لك اخي العزيز على التوضيح مرة اخرى ..........

#4

الف شكر اخي العزيز على الرد والمشاركة والتوضيح لكن بالنسبة للسؤال كان يراد منه الحل بدون استخدام الدول الجاهزة كا input ,output اي function ويراد بالطريقة البسيطة اي strucure of array والف شكر لك اخي العزيز على التوضيح مرة اخرى ..........

#5

بالنسبة للشرط الثاني من السؤال هو ما يتعلق بايجاد اسماء الموظفين الذين يزيد راتبهم عن المعدل .....................

اخي العزيز هذا هو الكود واتمنى التوضيح اذا كان خطأ ...

char name(employee* list,int size)
{
	for (int i=0;i<size;i++)
	cout<<"\nName:";
		cin>>"\nName:";
		if (list.salary>avg)
		cout<<list.name<<endl;
}
#6

السلام عليكم اخوان

اتمنى منكم الرد عن السؤال ولكن بطريقة اخرى وهي الطريقة العادية مثال الحل في بداية الصفحة ولكم مني جزيل الاحترام .........

#7

وضعت في السابق الحل النهائي واتمنى المشاركة معي في حل السؤال لانه مغلب شوي وانا ما زلت اقل من المتوسط في البرمجة.................

#8

السلام عليكــم ورحمـة الله وبركاتــه ،،

char name(employee* list,int size)
{
	for (int i=0;i<size;i++)
{
		if (list.salary>avg)
		cout<<list.name<<endl;
}
}
tvquran_6.gif

#9

السلام عليكــم ورحمـة الله وبركاتــه ،،

الحل بالطريقه العاديه بدون استخدام دوال


#include <conio.h>
using namespace std;
struct employee {
char name[20];
int ID;
double salary;
char address;
};
int main()
{
employee a[5];
double sum=0;
double avg;
int i;
for(i=0;i<5;++i)
{
cout<<"\nEmployee ["<<i+1<<"]: ";
cout<<"\nName: ";
cin>>a.name;
cout<<"\nID: ";
cin>>a.ID;
cout<<"\nSalary: ";
cin>>a.salary;
sum+=a.salary;
}
avg=sum/2.0;
cout<<"the avg is : "<<avg<<endl;
for ( i=0;i<5;i++)
{
if(a.salary>avg)
cout<<a.name<<endl;
}
getch();
return 0;
}
#include <iostream>

استخدمت فيه بعض اجزاء مشاركة أخى العزيز Sudanix

تم تعديل هذه المشاركة بواسطة amin_mu123 في 1 أبريل 2009 في 00:19

اللهم صل على سيدنا محمد وعلى آله وصحبه وسلم

#10

الف شكر لكم اخوان على المشاركة والمساعدة ......

واتمنى لكم مزيد من التقدم والنجاح في خدمة المنتدى ورواد المنتدى ودائما السباقون ... . .

مواضيع مشابهة