• 0
مصطفى 36a2

مجموعة من الأسئلة مجابة , مع فهرس

سؤال

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

 

فهرس الأسئلة المجابة للأعضاء في هذا الموضوع :

 

اسم العضو ......... رابط السؤال المُجاب

bahbah             ماذا تعني* char

alaa alzoubi      ماهي rand وكيف نستخدمها ؟   موضوع مرتبط : توليد الأعداد العشوائية

m1m6               هل يمكن استخدام bit fields لتكوين نوع من أي عدد من البتات ؟  

bahbah             كيف نحدد شرط انتهاء حلقة for ؟

bahbah             مشكلة عند تعريف دالة تأخذ وسيط float ثم استدعائها

المـقـدام                 تثبيت شاشة البرنامج بعد انتهاء التنفيذ

المـقـدام                 لماذا يمكن تمثيل أرقام كبيرة في float ولا يمكن في long ?

المـقـدام                 كيف نعرف أجسام التوابع من الـ standard ?

المـقـدام                 ما هو الفرق بين endl و \n ؟

المـقـدام                 لماذا switch لا يأخذ float ؟

المـقـدام                كيف اربط قاعدة بيانات مع برنامجي ؟

المـقـدام                هل هناك طريقة لطباعة أسماء الثوابت داخل enum ?

المـقـدام                هل #C مأخوذة من ++C

المـقـدام             كيف تقوم inline بتقصير زمن التنفيذ , وماذا عن الكلمة المفتاحية register

المـقـدام             كيف يمكن طباعة عدد من نوع double بتقسيمه إلى فواصل

 

ما وظيفة الباني constructor

 

بالتوفيق

تم تعديل بواسطه مصطفى 36a2
إغلاق الموضوع
4

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

13 إجابة على هذا السؤال .

  • 0

السؤال :

 لماذ بعض أنواع المتغير أو أحد المتغيرات نضع إشارة * له ؟؟

مثل char* ..

 

الإجابة :

هذا يعني أنه مؤشر إلى خانة في الذاكرة تحوي char ..

مثلاً : لو قمنا بعمل مصفوفة من char  .. فإن كل خانة من المصفوفة ستحوي char  .. وللوصول لأي عنصر بداخلها يمكننا استخدام ما يلي :

char string_[]="Hello World!";char*pointer=&string[0];//المؤشّر احتفظ بعنوان أول عنصر في المصفوفةpointer++;//الآن صار يحتفز بعنوان العنصر الثانيputchar(*pointer);//نطبع محتوى الخانة التي يشير لها المؤشر

المؤشّرات هي أقوى ما تملكه C  ... ( لم أقل من أقوى ... بل أقوى )

بالتوفيق

تم تعديل بواسطه مصطفى 36a2
1

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

السؤال :

 ماهو عمل rand في c++ وكيف تستخدم؟!

الإجابة:

rand  تستخدم للحصول على قيمة عشوائية .. ونستخدمها كما يلي :

1- تضمّن المكتبة : cstdlib في بداية الكود

2- تستدعي الدالة() rand للحصول على قيمة عشوائية

3- تعتمد في إيجاد الأرقام العشوائية على شيء اسمه البذرة seed ونقوم بإسنادها إلى وقت النظام الحالي حتى تتغير كل مرة ..

وهذا مثال يوضح كل ما سبق :

#include<cstdlib>#include<iostream>#include<ctime>//للحصول على دوال الوقتusing namespace std;int main(){    srand(time(0));//تغيير قيمة البذرة حسب وقت النظام    cout<< rand() <<endl;}

بالتوفيق

_____________________________

Snack3r :

هذا الموضوع أيضاَ سيفيدك smile.png

تم تعديل بواسطه مصطفى 36a2
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

السؤال:

هل بإمكانك تثبيت شاشة البرنامج أثناء debug بدون استخدام system("pause") وما هو تأثيرها على البرنامج ؟؟

:)

الإجابة

نعم بإمكانك فعل ذلك بعدة طرق ..

1- أي تابع للدخل يفيدك ..

2- يمكنك استخدام حلقات لانهائية

3- استخدم getch إن كنت تريد أن يضغط فتخرج فوراً .. (لا تستخدمها مع cout )

4- استخدم cmd (افتحها من ابدأ - البرامج الملحقة - موجّه الأوامر ) ثم شغل برنامجك من هناك ( يمكنك سحب البرنامج إلى نافذة الـcmd ثم اضغط Enter )

 

بالنسبة لسؤالك عن system  راجع هذا الموضوع

 

بالتوفيق

تم تعديل بواسطه مصطفى 36a2
2

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

السؤال :

المخزن long يأخذ مساحة 4 byte بينما المخزن float يأخذ مساحة 4 byte 

long أعلى رقم فيه 2147483747 وأدنى رقم فيه 2147483747- 

بينما float أعلى رقم فيه 1038*3.4 وأدنى رقم فيه 10-38*3.4

هل معنى هذا أن مخزن float لا يأخذ سالب لأن السالب يتحول إلى مقام ؟

كيف لمخزن float يستطيع تخزين هذا الرقم الهائل بينما long من المفترض يستطيع تخزين عدد أكبر منه ؟؟

 

الإجابة :

الأخوة الخبراء أقدر مني على الإجابة .. سأجيب بما عندي ..

المخزن long يستخدم جميع البتات فيه لتخزين الرقم الصحيح ..

بينما يتم تقسيم بتات المخزن float إلى عدة أجزاء .. أحد الأجزاء خاص بالجزء الصحيح , وجزء آخر للجزء الكسري . وجزء خاص بالقوة (أي بالجزء الأسي : عشرة مرفوعة للقوة كذا) وجزء للإشارة  (أو شيئا كهذا)

صحيح أن floatيتيح التعامل مع أرقام كبيرة . ولكن هذا على حساب الدقة ( رقم كبير دقة قليلة )

انتظر باقي الإجابات

بالتوفيق

_____________

بالمناسبة : يوجد أرقام سالبة في float بشكل طبيعي .. ولكن ما ذكرته من أبعاد هي أبعاد دقّة float وهي بالموجب والسالب على السواء :)

 

أليس العدد 1038*3.4  عبارة عن المدى ولم أفهم معنى أبعاد في هذه الجملة

في الواقع تستطيع تكتب float موجب وسالب لكن حسب standard عكس ذلك

 

أقصد بالمدى .. يعني ( القيمة المطلقة ) سواء موجبة أو سالبة ..

بالنسبة لدقة float .. جميع الأنواع الكسرية يتم تمثيلها  بالنظام الثنائي باستخدام قوى العدد 2 السالبة .. نصف . ربع ..ثمن .. 1/16 وهكذا ..

انظر المثال التالي

    printf("%X %X = %.30f\n",0.00000095367431640625f,0.00000095367431640625f);    printf("%X %X = %.10f\n",0.0078125f,0.0078125f);    printf("%X %X = %.10f\n",0.015625f,0.015625f);    printf("%X %X = %.10f\n",0.03125f,0.03125f);    printf("%X %X = %.10f\n",0.0625f,0.0625f);    printf("%X %X = %.10f\n",0.125f,0.125f);    printf("%X %X = %.10f\n",0.25f,0.25f);    printf("%X %X = %.10f\n",0.5f,0.5f);    printf("%X %X = %.10f\n",1.0f,1.0f);    printf("%X %X = %.10f\n",2.0f,2.0f);    printf("%X %X = %.10f\n",4.0f,4.0f);    printf("%X %X = %.10f\n",8.0f,8.0f);    float x=3.4;    for(int i=0;i<100;i++)    {        printf("%X %X = %f\n",x,x);        x*=10;    }    x=3.4;    for(int i=0;i<100;i++)    {        printf("%X %X = %.30f\n",x,x);        x/=10;    }    printf("%X %X = %.50f\n",0.5f,0.5f);    printf("%X %X = %.50f\n",0.3f,0.3f);    printf("%X %X = %.50f\n",0.2f,0.2f);    printf("%X %X = %.50f\n",0.34f,0.34f); 

أي عدد كسري ليس من قوى العدد 2 ..سيكون هناك حدود لدقته ..مثلاً بعد 10 أرقام بعد الفاصلة يعطي قيم خاطئة .. وهكذا ..

كما قلت الخبراء لديهم إجابة أكثر دقة من إجابتي smile.png

بالتوفيق

تم تعديل بواسطه مصطفى 36a2
3

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

السؤال :

 

ماذا عن المكتبة process.h ليست هي بالتحديد لكن هي التي أوقفتني

كيف يمكن معرفة الأكواد التي بداخل المكتبة ؟

 

كيف يمكن معرفة الدوال التي تستخدم مع المكتبة ؟

 

طبعا اتحدث الان عن c++ standard 

اقصد المكاتب الأساسية ليست Qt  وغيرها؟؟

 

:)سؤالك جيد جداً .. أتمنى ان أجيبه بشكل جيد ..

إذا كان سؤالك

 


 

كيف يمكن معرفة الأكواد التي بداخل المكتبة ؟

كيف يمكن معرفة الدوال التي تستخدم مع المكتبة ؟

فالجواب سهل .. ابحث عن process.h في جهازك وافتح الملف واقرأ الأكواد .. وستجد فيه غالباً تصريحات prototype فقط للدوال .. ومنها تعرف الاسم والقيمة المعادة والوسطاء .. بدون جسم التابع

والآن ..

أظن أن سؤالك الحقيقي هو كيف أعرف جسم التابع أليس كذلك ؟

لا يوجد شيء اسمه جسم التابع في الـStrandard فهي تحدد فقط وظيفة التابع (إن اعترَفَت به أصلاً ) وتحدد طريقة استعماله أيضاً ..

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

يعني ستجد جسم التابع rand مثلاً مختلفاً بين بيئة وأخرى .. من مترجم إلى آخر .. وقد يختلف بين إصدار وآخر للبيئة (مثلاً Visual Studio ) والأجسام تكون موجودة في ملفات .cpp وليس .h ..

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

المهم ..

جسم التابع ليس حكراً على أحد وقد تركت الـstandard للمبرمجين كتابته .. فظرت شركات توفره كلّ كما يحلو له .. المهم أن تقوم بالوظيفة المطلوبة وتحافظ على نفس الـ prototype المذكور في الـ standrad

 

هذا ما أعرفه .. وأنتظر أن يجبينا باقي الأخوة أو يصححوا أي خطأ ..

بالتوفيق

تم تعديل بواسطه مصطفى 36a2
إضافة السؤال
1

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

السؤال :

ما هو الفرق بين endl   &   '\n'  وأيهما أفضل أداء ؟؟وهل يستخدم جميعهما في c ؟

 

الإجابة:

 

ما هو الفرق بين endl   &   '\n' 

 

 

\n تُسمى Escape Sequence و تقوم بالعودة إلى السطر (من خلال عمل newline) و std::endl تقوم بعمل newline بالإضافة إلى تنظيف محتوى الـ output buffering من خلال استدعاء الدالة ostream::flush (و التي تقابلها fflush في C).

std::endl = os.widen + flush, الدالة os.widen تقوم بطباعة سطر جديد حسب نظام التشغيل (في Win32 تكو العودة إلى السطر من خلال \r\n بينما في Linux تكون \n فقط)

بالمناسبة, أنصحك بمراجعة الفقرة 27.7.3.8 من الـ standard.

تجدها في الموقع الرسمي للسي++, يُمكنك تحميل الـ Working Draft من هذه الصفحة.

الفقرة ستجدها بعنوان Standard basic_ostream manipulators في الصفحة 1016.

 

 

وأيهما أفضل أداء ؟

 

 

هذا يتوقف على طبيعة الاستخدام الذي تريده.

std::endl قد تكون مكلفة عند التعامل مع الملفات, لأن إفراغ ذاكرة الـ buffer قد يأخذ وقتاً, لذا قد تكون \n أفضل في هذه الحالة.

 

وهل يستخدم جميعهما في c ؟

 

 

لا ! في C نستخدم \n فقط و في CPP يُمكن استخدام std::endl أو \n.

تم تعديل بواسطه مصطفى 36a2
إضافة رابط الـ standard
1

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

السؤال :

لماذا switch لا يأخذ float
فأحيانا نحتاج قيم صغيرة ؟

 

لأن switch أصلا تدعم قيم أعداد صحيحة فقط (int, char, enum ..)

تم تعديل بواسطه مصطفى 36a2
إضافة السؤال ونقل إجابة
1

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0
كيف يمكن لي ربط قاعدة بيانات ب ++c ؟

 

 

ماهو نوع قاعدة البيانات التي تريد التعامل معها ؟

راجع هذا الموضوع, سيُفيدك : كيف اربط قاعدة بيانات مع برنامجي ؟

 

بالمناسبة :

  • حاول أن تبحث عن جواب سؤالك في المنتدى قبل طرحه في هذا الموضوع.
  • إن لم تجده في المنتدى, يُستحسن أن تبحث في النت فربما تجد جواباً كافياً لسؤالك.
  • لا يكن هدفك هو أن تسأل فقط.
  • ركز على الأساسيات قبل الشروع في الأمور المتقدمة في اللغة.

________________________________

إضافة من  : مصطفى 36a2

لا أعرف إجابة السؤال , ولكن عليك بالبحث على النت عن ذلك فلا بد أن الموضوع يطول ..

ملاحظة : ربط قاعدة بيانات مع برنامج أمر مختلف عن إنشاء قاعدة بيانات خاصة بك ( مثلاً في ملفات نصية عادية )

فإن كنت تسأل عن ربط SQL مثلاً مع ++C فأظن أن الإجابة ستكون أحد أمرين :

1- بيئة تطوير توفّر لك مكاتب خاصة بذلك وعليك تعلّم طريقة استعمال البيئة

2- مكاتب خاصة متوفرة يمكنك تضمينها ببرنامجك واستعمال الدوال بداخلها بعد تعلمها

 

ابحث على النت  انظر

http://stackoverflow...a-database-in-c

بالتوفيق

 

 

 

بالتوفيق.

تم تعديل بواسطه مصطفى 36a2
1

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

ما الفكره من بناء الconstructor؟
ومتى ممكن بضبط استدعي ملف معين ؟ 

 

الباني constructor هو تابعfunction يقوم بإنشاء كائنobject من الفئة class

ويتم استدعاؤه فوراً عند إنشاء الكائن ( إن صح التعبير )

هذا مثال

#include<cstdio>class Hello{public:    int x;    Hello(){        x=5;    }};void Get(Hello x){    printf("%i\n",x.x);}int main(){    Get(Hello());    return 0;}

لم أفهم السؤال الثاني

تم تعديل بواسطه مصطفى 36a2
دمج السؤال
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

سؤال

سي بلس بلس يقبل أكواد سي

إذا ماذا عن سي شارب

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

هل تأخذ سي شارب أكواد سي بلس بلس ؟

لا

سي شارب صحيح أن الـSyntax الخاص بها مقارب للسي بلس بلس ..

ولكنها لغة آخرى عن السي بلس بلس .. لا تقبل أكوادها ..

إذا أردت العمل على بيئة الدوت نيت ، فلديك C++.net ..

تحياتي

(إجابة أخرى )

لغة جافا مأخوذة من لغة ++C ولغة #C مشابهة كثيراً لجافا وهكذا ..

اللغات عالية المستوى تتشابه كثيراً .. ويمكن أن تتعلم جافا بعد ++C ويمكنك تعلم #C بسهولة وهكذا .. فالمفاهيم الأساسية نفسها غالباً ..

يمكنك فهم الأمر بأنه : " ربما تتشابه لهجة أهل الخليج مع لهجة أهل العراق ولكن سيظل الاختلاف واضحاً "

تم تعديل بواسطه مصطفى 36a2
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

سؤال من المقدام  :

inline function 

حسب ما فهمت أنها تقصر من زمن تنفيذ البرنامج 

وتستخدم مع الدوال الصغيرة

لكن لم أفهم كيف يتم تنفيذها بحيث يجعلها أسرع من الدوال الأخرى؟؟

يقوم الــcompiler بنسخ محتوى الدالة إلى مكان التنفيذ وبذلك نوفّر زمن تمرير الوسطاء والذهاب للتابع ثم العودة .. ( ولكن على حساب تكبير الملف التنفيذي )

والعملية اختيارية بالنسبة للمترجم وليست إجبارية

http://arabteam2000-forum.com/index.php/topic/282485-%D8%AA%D9%85%D8%AA-%D8%A7%D9%84%D8%A5%D8%AC%D8%A7%D8%A8%D8%A9-%D9%84%D8%A7-%D8%A3%D8%B1%D9%89-%D9%81%D8%A7%D8%A6%D8%AF%D8%A9%D9%8B-%D9%84%D9%83%D9%84-%D9%85%D9%86-register-inline/

 

أنا استخدم vs c++ كيف أستطيع أن أعرف مدة تنفيذ البرنامج ليمكنني المقارنة في السرعة؟؟

 

المشكلة أنه قد لا يقوم المترجم بتنفيذ الـinline

بالنسبة لي فقد كنت أستخدم دالة في ويندوز اسمها

GetTickCount

كما يلي

long a,b;    a=GetTickCount();    for(int i=0;i<0x36a2*0x36a2;i++)/*do nothing*/;    b=GetTickCount();

موجودة في المكتبة windows.h

 

هل الممكن أن يكون منها فائدة ؟

في الحقيقة أرى أن استخدامها شبه معدوم ؟

 

http://arabteam2000-...egister-inline/

تم تعديل بواسطه مصطفى 36a2
1

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

السلام عليكم ممكن حضرتك تقولى ازاى ابقى محترف فى لغة c++  بحيث استطيع التعامل معى اى برنامج بهذه اللغه او استخدامها فى صنع العاب ولو بسيطه 

انا لسه مبتدىء اعرف القواعد البسيطه فقط يعنى مثلا  if , for, array 
يعنى اعرف استخدم مثل هذه القواعد البسيط 
ممكن حضرتك تضع رابط حتى اتعلم تدريجى ومن وين اتعلم

 لانى مش عارف منين ابدأ 
 

وشكرا لك :D

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

@EMAG

لا يمكنني ان ادلك كيف تحترف البرمجة فأنا لست محترفاً ..

ولكن ما قمت به هو انني درست كتاب الاكسير (تجده في موقع kutob.info ).. ثم بدأت بتنفيذ مشاريع صغيرة , الالعاب كلمة واسعة ليس لها حدود , إذا أردت رسوميات 3D تحتاج إلى ان تدرس openGl وتوجد لها مراجع عربية جيدة جداً

هناك MFC للواجهات الرسومية في ويندوز

وهناك winAPI إذا أردت كتابة برامج تتحكم في كل شيء في الحاسب (بما يتيحه لك ويندوز )

المجال واسع جداً وعليك تحديد ما تريد والتوقف عن السؤال والبدء في الدراسة

 

بالتوفيق

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
زوار
This topic is now closed to further replies.

  • يستعرض القسم حالياً   0 members

    لا يوجد أعضاء مسجلين يشاهدون هذه الصفحة .