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

شرٍح ل البرنآمج

بدأه مبتدئه برمجه في 1 أبريل 2010 · 6 رد · 649 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

هذآ البرنآمج مع الآوت بوت تبعه ،

أبي حدآ يسآعدنيَّ ويشرح لي البرنآمج كآمل مع Trace <~ تتبع

وأكون شآكره لُكم

//The header files
#include<iostream>
#include<iomanip>
using namespace std;

//---------------------------
class Shipment{
	int number;
	string location;
	string destination;
	double weight;
	double cost;
public:
	Shipment();
	void setNumber(int);
	void setLocation(string);
	void setDestination(string);
	void setWeight(double);
	void setCost(double);
	int getNumber();
	string getLocation();
	string getDestination();
	double getWeight();
	double getCost();
};
//------------------------------
//default constructor
Shipment::Shipment(){
	 number =0;
	 location = "";
	 destination ="";
	 weight=0;
	 cost=0;
}
//------------------------------
//Set member function
void Shipment::setNumber(int n)
{
     number = n;
}

void Shipment::setLocation(string l)
{
	location = l;
}

void Shipment::setDestination( string d)
{
    destination = d;
}

void Shipment::setWeight( double w)
{
     weight=w;
}

void Shipment::setCost(double c)
{
 cost = c;
}
//-----------------------------
//get member function
double Shipment::getCost() {
	return cost;
}

int Shipment::getNumber()
{
	return number;
}

double Shipment::getWeight()
{
	return weight;
}

string Shipment::getLocation()
{
	return location;
}

string Shipment::getDestination()
{
	return destination;
}

//----------------------------
double calculateCost(double w)
{
   double result = w * 20;
   return result;
}
//---------------------------
void printShipmentDetail(Shipment s)
{
   cout<< "Displaying Shipment Information\n";
   cout<<setw(30)<<setfill('-');
   cout<<"\n Number "<<s.getNumber()
		    <<"\n Location "<< s.getLocation()
		    <<"\n Destination "<< s.getDestination()
		    <<"\n Weight "<< s.getWeight()
		    <<"\n Cost "<< s.getCost();
}
//---------------------------
int main()
{

	Shipment package;
	double cost;

	printShipmentDetail(package);

	cout<<"Setting shipment information \n";
	package.setDestination("Jeddah");
	package.setLocation("Riyadh");
	package.setNumber(87479);
	package.setWeight(40);

	cout<<"Calculating Shipment Cost \n";
	cost = calculateCost(package.getWeight());

	package.setCost(cost);

	printShipmentDetail(package);

	return 0;
}
//end of the program
//------------------------------

الآوت بوت

Displaying Shipment Information

---------------------

Number 0

Location

Destination

Weight 0

Cost 0Setting shipment information

Calculating Shipment Cost

Displaying Shipment Information

---------------------

Number 87479

Location Riyadh

Destination Jeddah

Weight 40

Cost 800

#2

ما رأيك في البداية ان تنظر الى التعديلات التالية ( لايتم ادخال البيانات . وانما تم كتابتها اثناء الكود .)

//The header files
#include<iostream>
#include<iomanip>
#include<string>
using namespace std;

//---------------------------
class Shipment{
        int number;
        string location;
        string destination;
        double weight;
        double cost;
public:
        Shipment();
        void setData(int ,string ,string ,double ,double );
		void printShipmentDetail();
};
//------------------------------
//default constructor
Shipment::Shipment(){
         number =0;
         location = "";
         destination ="";
         weight=0;
         cost=0;

}
//------------------------------
//Set member function

void Shipment::setData(int n,string l,string d,double w,double c)
{

     number = n;
	 location = l;
	 destination = d;
     weight=w;
     cost = c;   	 
}

//----------------------------
double calculateCost(double w)
{
   double result = w * 20;
   return result;
}
//---------------------------
void Shipment::printShipmentDetail()
{
   cout<< "Displaying Shipment Information\n";
   cout<<setw(30)<<setfill('-');
   cout<<"\n Number "<<number ;
   cout<<"\n Location "<<location;
   cout<<"\n Destination "<<destination;
   cout<<"\n Weight "<<weight;
   cout<<"\n Cost "<<cost<<endl;
}

//---------------------------
int main()
{

        Shipment package;
        package.printShipmentDetail();
        cout<<"Setting shipment information \n";
        package.setData(887479,"Jeddah","Riyadh",40,calculateCost(40));
        cout<<"Calculating Shipment Cost \n";
        package.printShipmentDetail();
system("pause");
        return 0;
}
//end of the program
//------------------------------

أو هذا .. ( هنا يتم ادخال البيانات أثناء تشغيل البرنامج )

//The header files
#include<iostream>
#include<iomanip>
#include<string>
using namespace std;

double calculateCost(double);
//---------------------------
class Shipment{
        int number;
        string location;
        string destination;
        double weight;
        double cost;
public:
        Shipment();
		void printShipmentDetail();
		void putData();
 };
//------------------------------
//default constructor
Shipment::Shipment(){
         number =0;
         location = "";
         destination ="";
         weight=0;
         cost=0;

}
//------------------------------
//Set member function

void Shipment::putData()
{
	cout<<"Enter Number :";
	cin>>number;
	cout<<"Enter Location:";
	cin>>location;
	cout<<"Enter Distination:";
	cin>>destination;
	cout<<"Enter Weight:";
	cin>>weight;
    cost=calculateCost(weight);
}

//----------------------------
double calculateCost(double w)
{
   double result = w * 20;
   return result;
}
//---------------------------
void Shipment::printShipmentDetail()
{
   cout<< "Displaying Shipment Information\n";
   cout<<setw(30)<<setfill('-');
   cout<<"\n Number "<<number ;
   cout<<"\n Location "<<location;
   cout<<"\n Destination "<<destination;
   cout<<"\n Weight "<<weight;
   cout<<"\n Cost "<<cost<<endl;
}

//---------------------------
int main()
{

        Shipment package;
        package.printShipmentDetail();
        cout<<"Setting shipment information \n";
        package.putData();
        cout<<"\nCalculating Shipment Cost \n";
        package.printShipmentDetail();
system("pause");
        return 0;
}
//end of the program
//------------------------------

لاحظ معي من خلال المثالين أعلاه فقد قمنا بتقليص عدد الفنكشن الى 2 فقط . واحدة لاعداد ( توضيع ) البيانات والاخرى لعرض البيانات . دون الحاجة أن ننشئء لكل متغير فنكشن خاص به .

سبق وان ناقشت هذا الموضوع سابقا مع احد اعضاء المنتدى .. وأفاد بأن الدكتور يقول بأنه يجب انشاء فنكشن خاص لكل عنصر يبدأ ب set أو get وفي الحقيقة كنت أظن ان الشخص أخطأ فهم الدكتور ولكن مثالك الان يؤكد كلام العضو السابق .

لا داعي لأن ننشئ فانكشن لكل عنصر . وان كان كذلك .. فما فائدة الكلاس اذا ؟

أيضا ماذا لو كان لدينا مجموعة كبيرة من العناصر لنقل مائة عنصر مثلا .. ففي طريقتك نحن بحاجة لانشائ 200 فانكشن فقط لاعداد البيانات وعرضها . ناهيك عن بقية الوظائف الاخرى .

انظري للامثله التالية وتابعي البرنامج كيف يعمل ( مع ملاحظة أن البرنامج يبدأ من Main ) يعني عليك التتبع أعتباراً من Main فقط .

ملاحظة أخرى . الكونستركتر ( يعمل بشكل تلقائي بمجرد اسناد الكائن ) مثال .

        Shipment package;

بعد تنفيذ هذا السطر .. سوف يعمل الكونستركتر تلقائيا.. ويقوم بتنفيذ مايوجد به من أوامر .

تحياتي

1

OMANI FOR EVER

-------------------------------------------------

post-12787-12780191801974.jpg

-------------------------------------------------

#3

omani

مشكووور وجزآك الله خيرآ

أعلم بـ أنه لآدآعيّ أن ننشىء فآنكشن لكُل عنصر

وٍلكن أنآ أريد التتبع لهذآ البرنآمج كآمل فـ يآليت تسآعدونيَّ

#4
مبتدئه برمجه كتب:

omani

مشكووور وجزآك الله خيرآ

أعلم بـ أنه لآدآعيّ أن ننشىء فآنكشن لكُل عنصر

وٍلكن أنآ أريد التتبع لهذآ البرنآمج كآمل فـ يآليت تسآعدونيَّ

لكي تستطيعي التتبع بشكل صحيح .. فقط قومي بالأتي

أحضري ورقة وقلم نظيفين .. ( الورقه بس نظيفه القلم مب مشكلة أهم شي يكتب )

حطي الورقة قدامك بالعرض ( landscape ) وارسمي خط من الاعلى للاسفل في منتصف الورقة

راح يكون عندنا نصفين في متساويين . نسمي الأول OutPut أو الشاشة

نسمي الثاني Memory أو الذاكرة

نبدأ التتبع من إعتباراً من الدالة Main

الان سأعتبر انك جاهزة

int main()
{

1        Shipment package;
2        package.printShipmentDetail();
3        cout<<"Setting shipment information \n";
4        package.setData(887479,"Jeddah","Riyadh",40,calculateCost(40));
5        cout<<"Calculating Shipment Cost \n";
6        package.printShipmentDetail();
7     system("pause");
8        return 0;
}
//end of the program
//------------------------------

السطر الأول يقوم هذا السطر بإنشاء الكائن من نوع class ولن نرى اي شي على الشاشة .. أي ان العمل يتم في الذاكرة .

وبما اننا قلنا كلاس . اذا يذهب لبناء الكلاس بجميع عناصره . ( يقوم بإنشاء المتغيرات الموجودة في Private ) .

بعدها يقوم بالبحث عن وحدات البناء ان وجدت ( cosnstructor ) وسيجد هذا :

Shipment::Shipment(){
         number =0;
         location = "";
         destination ="";
         weight=0;
         cost=0;

}

سوف يقوم بتغيير قيم المتغيرات اللتي قام بإنشاءها . لتصبح كما هو واضح اعلاه . ( ما زلنا في الذاكرة )

ننتقل للسطر الثاني

يقوم باستدعاء الدالة المسماة

        package.printShipmentDetail();

يذهب للدالة لينفذ مافيها .. لاحظي ان بها cout أي أنها مخرجات من الجهاز للشاشة .

void Shipment::printShipmentDetail()
{
   cout<< "Displaying Shipment Information\n";
   cout<<setw(30)<<setfill('-');
   cout<<"\n Number "<<number ;
   cout<<"\n Location "<<location;
   cout<<"\n Destination "<<destination;
   cout<<"\n Weight "<<weight;
   cout<<"\n Cost "<<cost<<endl;
}

يقوم بالتنفيذ على الشاشة .. كل سطر على حدة . وعندما يجد المتغيير يطلب قيمته من الذاكرة ( لا تنسى وضعناها على يسار الورقة )

بعد ان ينتهي من الدالة يعود لنفس الموقع الذي تم استدعاء الدالة منه ليكمل بقية العمل

يصل للسطر الثالث . ( حسب الترقيم اعلاه في الدالة الرئيسية Main)

cout إذا بديهياً اخراج النتيجة على الورقة قصدي على الشاشة ( نكتب كل هذا على الورق )

السطر الرابع يستدعي الدالة المسماة setData والتابعة للأوبجكت (الكائن ) الذي انشأناه في السطر الاول . ويحمل معه المتغيرات التالية الرقم الموقع وموقع التسليم والوزن ( ثم يستدعي الدالة لحساب القيمة ) قبل أن يرحل بهذه الشحنه ليفرغها في جسم الدالة function body على حسب البارميتر في رأس الدالة . لتقوم الدالة بتغيير قيمة المتغيرات على الذاكرة ( أمسحي القيم السابقة الاصفار لتحل محلها القيم الجديدة)

يعود بعد الانتهاء . لنفس مكان الاستدعاء . ( لاتنسي ماذا فعل في الذاكرة يجب ان يكتب في النصف الايسر من الورقه )

السطر الخامس ( يطبع الجملة على الشاشة ) طبعاً لن أكرر حسب cout ( يبدو انني كررتها ) . ماعليه زيادة الخير خيرين . بس الخيرين مادري أذا يتضاعفوا ولا.

السطر السادس .. يكرر السطر الثاني ( يطبع القيم مرة اخرى على الشاشة .. ولكن يجب أن نرى ماهي القيم الجديدة في الذاكرة ) اللي أعدنا مسحها وكتابتها في السطر الرابع .

السطر السابع يقف لنستمتع بالنتيجة .

الثامن يقول لنا سوف نتوقف هنا .. وبلا مطرود ..

الان وبعد أن كتبنا ( نقوم بالخطوة التالية )

الخط الذي رسمناه في وسط الورقة .. نقوم بثني الورقة للخلف ( بحيث تصبح الذاكرة في الخلف والشاشة امامنا ( مب هذي قصدي الورقة ) .. ننفذ البرنامج . ونضع الورقة جنب الشاشة . اذا حصلنا على نفس المكتوب إذا نحن تتبعنا بشكل صحيح . وان لم نحصل على المطلوب ( معنى ذلك في خلل في الشرح * ) أو ربما في التطبيق .

ولا تنسي توافيني بالنتيجة بعد التطبيق .

تحياتي

2

OMANI FOR EVER

-------------------------------------------------

post-12787-12780191801974.jpg

-------------------------------------------------

#5

شرٍح جمـيل جدآ و ممتع

وهذآ التتبع وإن شآالله يكوٍن بـ الشكل الصحيح

:happy:

Memory

number 0 887479

location ? Jeddah

destination ? Riyadh

[weight 0 40

cost 0 800

OutPut

Displaying Shipment Information

---------------------

Number 0

Location

Destination

Weight 0

Cost 0Setting shipment information

Calculating Shipment Cost

Displaying Shipment Information

---------------------

Number 87479

Location Riyadh

Destination Jeddah

Weight 40

Cost 800

#6
مبتدئه برمجه كتب:

شرٍح جمـيل جدآ و ممتع

وهذآ التتبع وإن شآالله يكوٍن بـ الشكل الصحيح

:happy:

Memory

location ? Jeddah

destination ? Riyadh

التتبع صحيح .. الان عرفتي كيف تصلين لأي جزء من البرنامج .

بالنسبة لعلامة الاستفهام ليست موجودة .. وانما نعوضها بقيمة فارغة "" هكذا . لان علامة الاستفهام تعني وجود char . اي انه توجد قيمة وليست فارغة .

الآن بنفس الطريقة السابقة .. تتبعي برنامجك الذي وضعتيه في بداية هذا الموضوع .. وكذلك عند تتبع أي برنامج أخر .. كل البرامج تبدأ من الدالة main

وفقك الله .

تحياتي

تحياتي ..

OMANI FOR EVER

-------------------------------------------------

post-12787-12780191801974.jpg

-------------------------------------------------

#7

مشكوووور ومآقصرت

ٍ[ :happy: ]

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