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

سؤال في c++

مغلق
بدأه logo في 24 أبريل 2005 · 13 رد · 2,434 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

بسم الله الرحمن الرحيم

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

البرنامج بلغة الc++, اما على turbo أو على الvisual c++

البرنامج المطلوب هو انو البرنامج يقوم بالعمليات التي تحدث على المجموعات(sets), مثل عمليات التقاطع والاتحاد ..........الخ

أنا أريد فقط ما هي الدوال التي تقوم بعملية التقاطع وعملية الاتحاد ,اذا كان موجود في لغة الc++ دوال جاهزة لهذه العمليات .......

أرجو مساعدتي...عاجلا... لانه البرنامج مطلوب منا ضروري.........

#2

كيف تمثل المجموعات في البرنامج؟ هل تستخدم arrays؟

#3

البرنامج حيطلب من المستخدم يدخل عناصر المجموعة الاولى وعناصر المجموعة الثانية.

#4

ليس هذا ما أسأل عنه ...

ما هو تعريف المجموعة؟ المجموعة مفهوم في الرياضيات .. لكن كيف ستحوله الى كود؟ كيف ستمثل مجموعة معينة؟

سافترض انك تستخدم arrays من أجل ذلك...

السؤال, هل هناك دوال لعمل التقاطع و الاتحاد الخ؟

لا أظن ذلك, و حتى لو وجدت, فنصيحتي لك ان لا تبحث عنها بل أن تكتبها بنفسك. بما انك تدرس البرمجة في الجامعة فالأفضل لك ان تتعلم هذه الأشياء بدل من ان تجدها جاهزة.

تم تعديل هذه المشاركة بواسطة hasan_aljudy في 24 أبريل 2005 في 12:38

#5

البرنامج اكيد يعني حنستخدم فيه الarray , عشان لما يعمل عمليات التقاطع والاتحاد ....انا فاهمة معنى السؤال بس لكن بدي أعرف اذا في دالة خاصة لهيك عمليات..

#6

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

على كل الامر يتعلق بالفضاء الذي تنتمي ايه عناصر المجموعات.

فمثلا ان كانت عناصر هذه المجموعة هي هي أعداد طبيعية اصغر او تساوي 100 فان الفضاء سوف يكون 1 2 3 .....100

ففي هذه الحالة يمكن تمثيل المجموعة على شكل شعاع يتالف من 100 بت في حالة كانت قيمة البت رقم 5 القيمة 1 فهذا يعني ان العدد 5 ينتمي للمجوعة.

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

تعقيد هذه الخوارزمية على فرض ان عدد عناصر الفضاء هو l

Ө(l)

بينما في حالة كان الفضاء كبيرا جدا بالنسبة للعد المتوسط من العناصر في كل مجموعة(مثلا مجموعات تتحتوي بشكل اعظمي على 100 عنصر بينما الفضاء الشعاعي يحتوي على ملايين العناصر فعندها هذه الطريقة لن تكون مفيدة جدا وذلك بسبب بطئها. في هذه الحالة يمكن تخزين العناصر في مصفوفة عادية ومن ثم البدء باحدى المجموعتين ومن اجل كل عنصر فيها مقارنته مع كل عنصر من المجموعة الثانية. على فرض ان متوسط عدد العناصر في الاولى l وفي الثانية k فان تعقيد هذه الخوارزمية سيكون

O(l.k)

يمكن تسريع هذه الخوارزمية عن طريق ترتيب العناصر في المجموعتين قبل البدء

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

ان كان الهدف فقط هو حل واجب مدرسي فاي طريقة سوف تكفي

تحياتي

وحدن بيبقو متل زهر البيلسان وحدهن بيقطفو وراق الزمان

بيسكرو الغابي بيضلهن متل الشتي يدقوا على بوابي على بوابي

يا زمان يا عشب داشر فوق هالحيطان ضويت ورد الليل عكتابي

برج الحمام مسور و عالي هج الحمام بقيت لحالي لحالي

يا ناطرين التلج ما عاد بدكن ترجعو صرخ عليهن بالشتي يا ديب بلكي بيسمعو

http://www.mazikana.com/Songs/F/Fayrouz/mp...uz---Wahdon.mp3

#7

أنا مبتدئة في الc++ ولسه ما اخدنا الخوارزميات , علشان هيك انا اسفة اني ماني فاهمة كل الكلام اللي انت كاتبه فيا ريت توضح اكتر .......وعلى العموم شكرا كتير.....وخاصة للاخ المشرف(DotNetExpert).

#8

أرجو من أي أحد المساعدة لأني أريد البرنامج ضروري......الرجااااااااااااء الرد......

#9

حسنا ساوضح الطريقة الاولى بمثال

المثال هنا يقوم بطلب ادخال عناصر مجموعتين. المجموعتين هنا يتالفان من اعداد اكبر من 0 واصغر من 32. ومن ثم يقوم بتمثيل هذه العناصر ضمن شعاع bit vector (في المثال هنا الشعاع مجرد unsigned ) و من ثم لحساب اجتماع المجموعتين يقوم البرنامج بالقيام بعملية bitwise or . ولحساب التقاطع فالعملية هنا هي bitwise and.

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

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

المثال التالي مكتوب ب c++. بما ان c++ ليست من نقاط قوتي ارجو من الجميع تنبيهي في حالة وجود خطأ ما

#include <cstdlib>
#include <iostream>

using namespace std;
void PrintElements(unsigned long);
void GetElements(unsigned long *h);
const unsigned short N = sizeof(unsigned long) * 8;

int main(int argc, char *argv[])
{
    unsigned long i = 0x0;
    unsigned long j = 0x0;
    unsigned long result;
    
    result = i & j;
    printf("Please enter the elements of the first set!\n");
    GetElements( &i);
    printf("\n\n\nPlease enter the elements of the second set!\n");
    GetElements( &j);
    result = j | i;
    printf("\nThe disjunction of the first and second set: ");
    PrintElements(result);  

    result = j & i;    
    printf("\nThe conjunction of the first and second set: ");
    PrintElements(result);  
    
    system("PAUSE");
    return EXIT_SUCCESS;
}
void PrintElements(unsigned long n)
{
     string s;
     for(int k = 0; k < N; ++k)
             if(n & (1 << k))
             {
                   printf("%d ",k);
             }
     printf("\n");
}
void GetElements(unsigned long *h)
{
     unsigned long p;
     printf("Please enter the next elements. 0 to stop:  ");
     scanf("%d", &p);
     while(p)
     {
             if (p < 32)
                *h = *h | (1 << p);
             printf("Please enter the next elements. 0 to stop:  ");
             scanf("%d", &p);       
     }
}

وحدن بيبقو متل زهر البيلسان وحدهن بيقطفو وراق الزمان

بيسكرو الغابي بيضلهن متل الشتي يدقوا على بوابي على بوابي

يا زمان يا عشب داشر فوق هالحيطان ضويت ورد الليل عكتابي

برج الحمام مسور و عالي هج الحمام بقيت لحالي لحالي

يا ناطرين التلج ما عاد بدكن ترجعو صرخ عليهن بالشتي يا ديب بلكي بيسمعو

http://www.mazikana.com/Songs/F/Fayrouz/mp...uz---Wahdon.mp3

#10

شكرا كتير للاخ المشرف DotNetExpert على المساعدة.....

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

مكتوب بلغة الC وليس c++ .........بالنسبة الي ما في مشكلة انا حولته

لc++ , واكرر شكري الجزيل للاخ المشرف على المساعدة السريعة

والمفيدة ايضا.............

بارك الله فيك....وجزاك كل خير.......

وكتر من أمثالك........

#11

يسعدني أن ردي كان مفيدا لك.

لكنني ولأول مرة اعرف أن أستطيع كتابة برنامج بلغة C. :D

البرنامج كتبته عن طريق فتح مشروع c++ جديد في برنامج dev c++ ومن ثم استخدام معلوماتي المحدودة في c++. فما هو وجه ال C فيه ؟

وحدن بيبقو متل زهر البيلسان وحدهن بيقطفو وراق الزمان

بيسكرو الغابي بيضلهن متل الشتي يدقوا على بوابي على بوابي

يا زمان يا عشب داشر فوق هالحيطان ضويت ورد الليل عكتابي

برج الحمام مسور و عالي هج الحمام بقيت لحالي لحالي

يا ناطرين التلج ما عاد بدكن ترجعو صرخ عليهن بالشتي يا ديب بلكي بيسمعو

http://www.mazikana.com/Songs/F/Fayrouz/mp...uz---Wahdon.mp3

#12

السلام عليكم...........

أول شي اللي بيدل على انو البرنامج ع الC الاتي:

أولا: المكتبات(cstdlib) يقابلها في الC++ هي (stdlib.h)

وايضا كذلك (iostream.h) لازم نضع الامتداد .h

ثانيا: الاوامر printf , scanf يقابلها في الC++ الاوامر

cout يستخدم لاخراج البيانات والقيم وطباعة الجمل على الuserscreen

, اما cin يستخدم لادخال البيانات ............

وبحب انبه انو الجملة using namespace std; لما باكتبها بيطلع

error وانا مو عارفة شو البديل الها لاني مش عارفة شو وظيفتها....

هادا كل اللي عندي ..........

تحياتي...........

#13

السلام عليكم..........

أولا: أريد أن أقدم اعتذاري لاني استعجلت في الرد على الاخ المشرفDotNetExpert , على ان البرنامج مكتوب بلغة السي, فكان توضيحي

للاسباب فيه شيء من الخطأ :

المكتبات يصح كتابتها بدون الامتداد .h ولكن يجب ان نضع الجملة

using spacename std; لاني رجعت الى كتاب c++ وقرأت

ذلك , اما المكتبة الثانية cstdlib انا اعرف اننا نستخدم في الC++

المكتبة stdlib, اما اوامر printf وscanf , فهي في السي.....

فقط اردت التوضيح لذلك........

#14

شكرا لك على التوضيح. في الحقيقة انا ايضا لم اكن اعرف ما معنى using namespace.

بالنسبة الى sscanf و printf فلقد اضطررت الى استعمالهم وذلك لن مصرف مايكروسوف لا يتعرف على cin و cout

وحدن بيبقو متل زهر البيلسان وحدهن بيقطفو وراق الزمان

بيسكرو الغابي بيضلهن متل الشتي يدقوا على بوابي على بوابي

يا زمان يا عشب داشر فوق هالحيطان ضويت ورد الليل عكتابي

برج الحمام مسور و عالي هج الحمام بقيت لحالي لحالي

يا ناطرين التلج ما عاد بدكن ترجعو صرخ عليهن بالشتي يا ديب بلكي بيسمعو

http://www.mazikana.com/Songs/F/Fayrouz/mp...uz---Wahdon.mp3

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

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