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

مساعدة قبل الأمتحان

مغلق
بدأه maro009 في 8 يونيو 2005 · 13 رد · 990 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

أخوانى لدى بعض الأسئلة أتمنى من الله أن أجد الأجابة عندكم

وجزاكم الله الف خير ,,,

1- فى البوينترز - ما هو الفرق بين * و ** و *** ؟

2- مشكلة فى الترتيب,,, لنفرض ان لدينا array بها أرقام 10 أرقام

فلو أردت أن أرتب هذه الأرقام سوف أستخدم هذا الكود :

for (int i = 0; i < 9; i++) {
  for (int k = 0; k < 9; k++)      لماذا رقم 9 نيابة عن 10؟
{
      if (Num[k] > Num [k+1]) 
      {
          int temp = Num [k];
           Num [k] = Num [k+1];
                 Num [k+1] = temp;
      }
  }
       }

السؤال : لماذا أختبر 9 أرقام فقط " i = 0; i < 9 " ؟

3 - ما هو interface ؟

4 - فى ال class لماذا نضع ال data memebers فى private ؟

شكرا مقدما .......

#2

بالنسبة للسؤال الثاني فاختبارنا للرقم 9 بدل الرقم 10 راجع الى كون ال Array مكون كما قلت من عشرة أرقام و المصفوفات كما تعلم تبدأ من رقم 0 اذا بعملية بسيطة ستعرف أن أعلى رقم في مصفوفة من 10 أرقام هو الرقم 9 ذلك راجع طبعا لاحتسابنا ال 0

اما ال Interfaces فهي واجهات المستعمل من أزرار و TextBoxs ...

بالنسبة للسؤال الأخير فالجواب على هذا السؤال سيكون بتعريف ال Private و هي تحدد استعمال أي شئ معلن داخل كلاس مثلا أي أن كل ما هو معلن Private داخل الكلاس فلن تستطيع الوصول اليه و التعامل معه خارج الكلاس اذا من هنا نستنتج ان ال Data Members يجب ان تبقى خاصة في الكلاس حتى لا تغير قيمها ...

تم تعديل هذه المشاركة بواسطة crazy-man في 8 يونيو 2005 في 03:26

#3

الinterface غير ال Graphical User Interface

الInterface هو عبارة عن تحديد شكل لclass معين باسماء الfunctions الاساسية و غيره بدون كتابة اي implementation لهذه الFunctions فقط ذكرها و تحديد انواعها و متطلباتها و عندمها يقوم المبرمج بعمل implement لهذا الInterface في class فانه يقوم بكتابة الimplementation لهذه الfunctions

Sr. Software Development Engineer
Hulu, LLC
My Blogs

#4

السلام عليكم

اهلين باخي maro009 سأرد عليك كالتالي:

2 -

كلامك سليم أنت تسأل فتقول ( لماذا قلنا i<9 ؟؟؟؟؟) ولم نقل ( i<10 ؟؟؟؟؟)

فالحقيقة هذا راجع لخوارزمية الترتيب الذي استخدمتها انت في هذا البرنامج.

فلاحظ معي لما تقول التالي:

int a[10];

فانت ستبدأ دليل المصفوفة من صفر وحتى n-1 أي وحتى عدد عناصر المصفوفة ناقص واحد وهو 9 .

ولاحظ انك في شرطي توقف التكرار for كتبت i<9 لأنك داخل الشرط if تقارن دائما بين كل عددين متجاورين فلما يصل التكرار الى 8 يكون صحيح ويتم مقارنة التالي:

if(num[8] > num[9])

وهنا فعلا تمت المقارنة حتى اخر عنصر ...

ولو كتبت الى i<9 لوقعت في خطأ انك كتبت خارج حدود المصفوفة فيظهر لك المترجم خطأ مفاده ان العنصر رقم عشرة غير موجود.......كالتالي:

if(num[9]>num[10] )

وهذا خطا .لان المصفوفة يبدا دليلها من صفر وحتى n-1 .

3 اما كتابت المتغيرات في الclass على انها private فهذا للحماية ولمنع الوصول إلى هذه المتغيرات بشكل مباشر .بل لابد من استخدام الدوال لكي تصل الى متغير خاص . عكس المتغير العام public فيمكن الوصول اليه بشكل مباشر.

ارجو اني وضحت لك المطلوب ولا اكون ضيعتك.

بالتوفيق.

اللهم علمنا ما ينفعنا وأنفعنا بما علمتنا أنك أنت العليم الحكيم

سبحان الله وبحمده سبحان الله العظيم

لاحول ولاقوة الا بالله( كنز من كنوز الجنة ).

#5

أسف لعدم الاجابة فورا و هذا لانشغالي

بالنسبة للسؤال الاول الفرق بين ال* و ** و *** فان معناها

مثلا في ** فهذا يعتبر pointer على Pointer عندما يكون لديك Pointer يشير على Pointer يشير على مكان في الMemory و من الPointer الاول تريد ان تعرف قيمة ما يشير عليه الPointer الثاني

وهذا مثال للتوضيح

char a;
char * b;
char ** c;
a = 'z';
b = &a;
c = &b;

في المثال السابق فرضا ان عنوان a هو 1000 و عنوانb هو 2000 و عنوان c هو 3000

انتبه انا قلت عنوان و ليس قيمة

و ايضا القيمة المخزنة في a هي 1

فعند تنفيذ هذا السطر

b = &a;

تصبح القيمة المخزنة في b هي عنوان a اي ان قيمة b الان 1000

و عند تنفيذ السطر

c = &b;

يصبح قيمة c هي عنوان b اي 2000

و بالتالي فان القيمة c* (انتبه * واحدة فقط و قد عرفنا الc على انه char** c ) تكون عنوان a المخزن في قيمة b اي انها تكون 1000

و بالتالي فان القيمة c** تحتوي على مايحتويه العنوان 1000 و هي قيمة a اي 'z'

هذا بالنسبة للسؤال الأول

بالنسبة للسؤال الثاني

الarrays في ال++C/C هي zero based او للاساس صفؤ اي ان اول قيمة في array طوله 10 قيم هي القيمة عند الindex بالقيمة 0 و لهذا فتكون اخر قيمة للarray هي عند 9 و ليس 10

السؤال الثالث اجبت عليه من قبل في مشاركة سابقة في نفس الصفحة

السؤال الرابع

الOOP او الObject Oriented Programming يعتمد على مبدأ الData Encabsulation و هدفه هو حماية الdata من الاستخدام اذا كان المبرمج لا يريد ان يستخدمها احد الا داخل نفس الclass اي ان البparivate members لا يمكن استخدامها الا داخل الclass فقط في الكود الخاص بالfunctions الخاصة بهذه الclass فقط اما الpublic فهي تستخدم من اي جهة سواء داخل الclass او خارجها و يوجد ايضا protected عندما تريد ان تسمح للclasses التي تم عمل inheritence لها من نفس الclass باستخدام مجموعة من المتغيرات و لكن اي class اخرى لا تسمح لها

أرجو ان اكون قد اجبت عن الاسئلة بشكل مفهوم

تم تعديل هذه المشاركة بواسطة bashmohandes في 8 يونيو 2005 في 04:15

Sr. Software Development Engineer
Hulu, LLC
My Blogs

#6

طبعا في ناس جاوبوا قبلي لكن هذا لا يمنع :P

* تعني مؤشر, ** تعني مؤشر الى مؤشر (يعني مؤشر يشير الى مؤشر آخر), و *** تعني مؤشر الى مؤشر الى مؤشر .. و هكذا **** و ***** و ... و ..

السؤال الثاني:

حجم المصفوفة هو 10, لكن آخر عنصر فيها رقمه 9 و ليس 10, و ذلك لأن اول عنصر رقمه 0

السؤال الثالث:

الـ interface هو class لا يحتوي على شي سوى pure virtual functions, يعني لا يحتوي على متغيرات ولا شي من ذلك.

مثلا:

class IVehicle
{
    public:
    virtual void tunrOn() = 0;
    virtual void tunrOff() = 0;
    virtual bool isOn() = 0;
    virtual void turnLeft() = 0;
    virtual void turnRight() = 0;
};

السؤال الرابع:

المتغيرات داخل الكلاس يجب ان تكون private لكي لا يستطيع اي function خارج الكلاس تغييرها, و السبب في ذلك ان المتغيرات عادة تكون حساسة جدا داخل الكلاس, و اذا تم تغييرها بشكل غير مناسب فستحدث مشاكل في البرنامج .. و الكلاس هو الوحيد اللذي يعرف كيف يغير المتغيرات بالشكل المناسب, لذلك لا نريد اي احد ان يصل الى هذه المتغيرات غير الكلاس نفسه.

و كذلك هناك اسباب أخرى, مثلا, لتقليل الـ coupling (التداخل او الترابط) بين الكلاسس المختلفة, فبدل من ان يحصل coulping على مستوى المتغيرات, يحصل على مستوى الـ functions.

و كذلك من اجل information hiding, لانه ممكن ان يأتي شخص آخر يستخدم الكود اللذي قمت انت بكتابته, وهذا الشخص طبعا لن يعرف ما وظيفة المتغيرات الداخلية في الكلاس, و اذا قام بتغيررها بمزاجه فإنه أكيد ستحصل مشاكل, لذلك نمنعه من ذلك و نفرض عليه ان يستخدم الـ functions الخاصة بذلك.

#7
اقتباس
class لا يحتوي على شي سوى pure virtual functions

هذه تسمى Abstract base class ولا يمكنك انشاء كانئنات منها.

#8

و من قال ان الـ interface يمكن انشاء كائنات منها :P

عموما هذا هو تعريف الـ interface في جافا, و قد رأيته مطبقا في بعض البرامج المكتوبة في السي بلص بلص. و أعتقد انه مطبق في COM و الله أعلم. (لا اعرف الكثير عن COM, و لكني اظن اني قرأت عن interfaces فيها او شي من هالقبيل).

أعتقد انه نفس الشي في السي بلص بلص, لأنه اصلا مفهوم متعلق بالـ object oriented programming يعني حتى ان له رمز خاص في UML يعني UML تعترف فيه كبمدأ في الـ oop. فلا اعتقد انه يختلف من لغة الى اخرى.

تم تعديل هذه المشاركة بواسطة hasan_aljudy في 8 يونيو 2005 في 13:21

#9

أشكركم أخوانى جميعا على الأهتمام جزاكم الله خير أن شاء الله,,,

بالنسبة للسؤال الثانى...

اقتباس
حجم المصفوفة هو 10, لكن آخر عنصر فيها رقمه 9 و ليس 10, و ذلك لأن اول عنصر رقمه 0
اقتباس
بالنسبة للسؤال الثاني فاختبارنا للرقم 9 بدل الرقم 10 راجع الى كون ال Array مكون كما قلت من عشرة أرقام و المصفوفات كما تعلم تبدأ من رقم 0 اذا بعملية بسيطة ستعرف أن أعلى رقم في مصفوفة من 10 أرقام هو الرقم 9 ذلك راجع طبعا لاحتسابنا ال 0
اقتباس
الarrays في ال++C/C هي zero based او للاساس صفؤ اي ان اول قيمة في array طوله 10 قيم هي القيمة عند الindex بالقيمة 0 و لهذا فتكون اخر قيمة للarray هي عند 9 و ليس 10
اقتباس
فانت ستبدأ دليل المصفوفة من صفر وحتى n-1 أي وحتى عدد عناصر المصفوفة ناقص واحد وهو 9 .

ولاحظ انك في شرطي توقف التكرار for كتبت i<9 لأنك داخل الشرط if تقارن دائما بين كل عددين متجاورين فلما يصل التكرار الى 8 يكون صحيح ويتم مقارنة التالي:

if(num[8] > num[9])

وهنا فعلا تمت المقارنة حتى اخر عنصر ...

ولو كتبت الى i<9 لوقعت في خطأ انك كتبت خارج حدود المصفوفة فيظهر لك المترجم خطأ مفاده ان العنصر رقم عشرة غير موجود.......كالتالي:

if(num[9]>num[10] )

وهذا خطا .لان المصفوفة يبدا دليلها من صفر وحتى n-1

كلام جميل لكن عندى تعليق .

مثلا أذا أردت أن أصنع array بها 10 عناصر سيكون كالتالى :

for (int i =0; i<10; i++ )

فهنا أبدأ من 0 الى الأقل من 10 وهو 9 
0 1 2 3 4 5 6 7 8 9
المجموع 10 عناصر,,,,,,

ولكن فى حالة الترتيب تكون هكذا

for (int i=0; i<9; i++)

فهنا أبدأ من 0 الى الأقل من 9 وهو 8
0 1 2 3 4 5 6 7 8
المجموع 9 عناصر فقط...................؟

هذا هو ما يحيرنى

:( :s

#10

السلام عليكم

اولاً البرنامج فيه خطاء بسيط والمفروض يكون هكذا

for (int i = 0; i < 9; i++) {
 for (int k = 0; k < 9-i; k++)      
{
     if (Num[k] > Num [k+1])
     {
         int temp = Num [k];
          Num [k] = Num [k+1];
                Num [k+1] = temp;
     }
 }
      }

والان لو فكرت بالامر لوجدت ان عدد المقارنات هى 9 لترتيب 10 اعداد.

الرقم

الصفر و الاول

الاول و الثانى

الثانى و الثالث

الثالث و الرابع

الرابع و الخامس

الخامس و السادس

السادس و السابع

السابع و الثامن

الثامن و التاسع

احسب عدد المقارنات تحدها 9 مقارنات لترتيب عشرة اعداد, والبنامج بداء بترتيب الاعداد من الخانه صفر إلى الخانه 8 وعددهم 9 مقارنات

ارجو تكون المسئله وضحت الان..

ملحوظه مهمه اخر رقم موجود فى الخانه 9 يعنى 8+1 او k+1

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

لا إله إلا الله محمد رسول الله

busbar : يجب ان تدرك انه هناك حد ادنى للمعرفة المطلوبة قبل البدء في عمل أي شئ.

#11

أشكرك أخى

نعم لقد وضحت.

أشكرك وأشكر جميع الأخوة

#12

بالنسبة للـ interface هي ممكن تعني عدة اشياء ..

المعنى اللذي ذكرته هو الشائع في جافا و بعض اللغات الأخرى ..

و لكن هناك معاني اخرى .. فالـ interface قصد يقصد بها واجهة الكلاس, يعني مجموعة الـ public member functions في الكلاس. و تسمى كذلك لانها الواجهة اللتي يستطيع العالم الخارجي من خلالها التعامل مع الكلاس.

#13

عموما هذا هو تعريف الـ interface في جافا, و قد رأيته مطبقا في بعض البرامج المكتوبة في السي بلص بلص. و أعتقد انه مطبق في COM

" و هو ما مُطبق في مكونات الدايركت اكس المبنية علي COM " و فكرة الوصلات Interfaces .

BEng , Electronics and communications.

Embedded systems engineer.

Graphics Programmer

عالم الكومبيوتر هو من لديه المعرفة في علوم الكومبيوتر ، الرياضيات ، هندسة الالكترونيات -احمد صالح

#14

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

يوجد اخطاء في الكود الأساسي

الكود بعد التصحيح

#include<iostream.h>

int main()
{
	int i,k,temp,Num[10]={9,5,8,2,3,1,4,7,0,6};

	for (i=0; i<=9; i++) {
  for (k=i; k<=9; k++){
  	
  	if (Num > Num[k])
  	{
    temp = Num;
    Num = Num[k];
    Num[k] = temp;
  	}

  }
	}

	for(i=0;i<10;i++) cout<<"\t"<<Num;

	return 0;
}

تم تعديل هذه المشاركة بواسطة Hosain21 في 13 يونيو 2005 في 08:50

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

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