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

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

مثبّتمغلق
بدأه مصطفى 36a2 في 16 نوفمبر 2013 · 13 رد · 6,967 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

 

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

 

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

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 في 7 مارس 2014 في 16:11 — السبب: إغلاق الموضوع

4
#2

السؤال :

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

مثل char* ..

 

الإجابة :

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

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

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

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

بالتوفيق

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

1
#3

السؤال :

 ماهو عمل 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 في 5 ديسمبر 2013 في 01:12

#4

السؤال:

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

:)

الإجابة

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

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

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

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

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

 

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

 

بالتوفيق

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

2
#5

السؤال :

المخزن 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 في 14 ديسمبر 2013 في 09:21

3
#6

السؤال :

اقتباس

 

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

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

 

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

 

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

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

 

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

إذا كان سؤالك

 

اقتباس

 

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

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

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

والآن ..

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

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

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

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

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

المهم ..

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

 

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

بالتوفيق

تم تعديل هذه المشاركة بواسطة مصطفى 36a2 في 19 ديسمبر 2013 في 21:36 — السبب: إضافة السؤال

1
#7

السؤال :

ما هو الفرق بين 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 في 15 ديسمبر 2013 في 00:03 — السبب: إضافة رابط الـ standard

1
#8

السؤال :

اقتباس

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

 

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

تم تعديل هذه المشاركة بواسطة مصطفى 36a2 في 15 ديسمبر 2013 في 00:02 — السبب: إضافة السؤال ونقل إجابة

1
#9
اقتباس
كيف يمكن لي ربط قاعدة بيانات ب ++c ؟

 

 

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

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

 

بالمناسبة :

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

________________________________

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

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

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

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

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

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

 

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

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

بالتوفيق

 

 

 

بالتوفيق.

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

1
#10
اقتباس

ما الفكره من بناء ال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 في 17 يناير 2014 في 13:39 — السبب: دمج السؤال

#11
المـقـدام كتب:

سؤال

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

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

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

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

لا

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

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

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

تحياتي

(إجابة أخرى )

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

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

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

تم تعديل هذه المشاركة بواسطة مصطفى 36a2 في 7 مارس 2014 في 16:02

رجعت ومازال الفريق خاملاَ  :( 


 


abPuw.1.gif

#12
اقتباس

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

inline function 

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

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

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

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

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

/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 في 7 مارس 2014 في 15:50

1
#13

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

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

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

وشكرا لك :D

#14

@EMAG

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

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

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

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

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

 

بالتوفيق

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

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