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

[ تمت الإجابة ]مشكلة : استخدام المصفوفات الديناميكية

مغلق
بدأه before_190 في 16 أكتوبر 2013 · 2 رد · 586 مشاهدة · في ارشيف قسم C/C++
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

لدي مشكلة في طريقة تعامل مع  "dynamically in the parameteized constructor" الفقرة المظلل عليها  .

وأذا كان فية أخطاء أخرى أيضاً بالكود  أخبروني رجاءً .

هذا نَص السؤال :

 bqLIO.jpg
 
الكود:
  
#include <iostream>#include<string>using namespace std; class employee{	string name, ID,  *name_of_pro;	int age ;	float salary ; public:	employee(){};//defult	employee ( string n,int ag, float sa ,  string &name_pro){		name=n;		age=ag;		salary=sa;		name_of_pro= new string(name_pro) ;// Here	}	employee(const employee &ob) {		*name_of_pro=*ob.name_of_pro;		}	~employee(){}	void set1 (string s ){		  name=s; }	void set2 (string d){		 ID=d ;}	void set3( int aa ){		age=aa;}	void set4 (float s){		 salary=s;  }	void set5( string na ){		 name_of_pro=&na  ;}	void print(){		cout<<"The name is"<<name;		cout<<"the id is "<<ID;		cout<<"the salart is "<<salary;		cout<<"the age is "<<age;         for(int i=0;  name_of_pro!='\0';i++){//Here			 cout<< "the name of project is "<< name_of_pro; }		}	void Calculatesalary (int tax, int payrate){   (salary=salary+( payrate*salary)-tax);	}};	int main(){		int tax; int praraty; string name1, id ,namepro;int age1; float sla;		employee obj;		cout<<"enter your name ";cin>>name1 ;		obj.set1(name1);		cout<<"enter your id"; cin>>id;		obj.set2(id);		cout<<"enter your age ";cin>>age1;		obj.set3(age1);		cout<<"enter your salary";cin>>sla;		obj.set4(sla);		cout<<"enter your name of number your projects";cin>>namepro;		obj.set5(  namepro); //here		cout<<"Enter your tax and payrate";		cin>>tax>>praraty;		obj.Calculatesalary (tax,praraty);obj. print(); system("pause"); return 0;	}

تم تعديل هذه المشاركة بواسطة before_190 في 16 أكتوبر 2013 في 12:52

#2

أخي الكريم ..

أولا أعتذر للتأخر في الرد ..

مشكلتك بسيطة كما أرى ..

فأنت تريد تعريف مصفوفة من نوع string  ولفعل ذلك .. قمت بكتابة :

name_of_pro= new string(name_pro) ;

الكود السابق يُعرّف مؤشرا إلى سلسلة نصية وحيدة فقط .. وبالتالي تحتوي اسما واحدا ..

أما إذا أردت ادخال اسم أكثر من مشروع واحد ..

فالصحيح أن تكتب :

name_of_pro= new string[number_of_projects] ;for(int i=0;i<number_of_projects;i++){    cout<<    "Enter the name of project " << i <<endl;    cin>> name_of_pro;}

المعنى من الكود السابق :

حسب ما فهمت .. المطلوب هو ادخال أسماء المشاريع للشخص الذي سيتك تسجيله ..

ولفعل ذلك .. يجب أن نعرف عدد المشاريع أولاً ... (إذا كنت ستستخدم مصفوفة )

وبعد ذلك نستخدم تعليمة new كما ذكرت :

name_of_pro= new string[number_of_projects] ;

أما المكان الثاني الذي وضعت عنده العلامة here فالخطأ هنا ناتج عن الخطأ الأول ...

تذكر :

عندما تستخدم مؤشراً .. فعليك استخدام العملية * عند طلب المحتوى .. أو ضع الأقواس المربعة [ ] لجلب عنصر ذو رقم معين ..

أترك لك تعديل الكود .. وانتبه إلى كل الأماكن المتعلقة بالخطأ السابق مثل :

employee(const employee &ob) {
    
    *name_of_pro=*ob.name_of_pro;
    
    }

باحتصار : عليك حفظ عدد المشاريع في متحول جديد والتعامل دوماً مع مصفوفة والمرور على جميع عناصرها وليس فقط اسناد اول عنصر كما يحدث في الباني السابق ..

 

أرجو أن تكون المشكلة قد حُلّت :)

بالتوفيق :)

تم تعديل هذه المشاركة بواسطة مصطفى 36a2 في 21 أكتوبر 2013 في 21:10

#3

يُمنع وضع السؤال بغير اللغة العربية !


هذا الموضوع مغلق.

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

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…