اذهب إلى المحتوى
  • 0

هل يمكن المساعدة في مسألة برمجية في لغة C؟

عبد الغني محمدي

السؤال

 طلب منا في الجامعة كتابة برنامج عن التقاطع بين المجالين [AB] و [CD].

هناك 3 ثلاث فئات تقاطع و

*نقطة

* - مجال

* - مجموعة فارغة

كيفية كتابة هذا البرنامج لجميع الحالات (هناك العديد)بحيث تكوون محققة ؟؟

رابط هذا التعليق
شارك على الشبكات الإجتماعية

Recommended Posts

  • 1

ليس لدي خبرة جيدة بلغة الـ C ولكن يمكنني ان أعطيك فكرة الحل. وقد كتبت برنامج بلغة الجافا لتطلع عليه أيضاً.

- اولا عليك تحليل ما ادخله المستخدم لتحصل على اطراف كل مجال وتخزنها كقيمة عددية (int, float,...)
 فمثلا المجال الأول [a,b]  والثاني ]c,d]
- تقوم بتعيين بداية مجال التقاطع قيمةً وإشارةً (اي مغلق ام مفتوح [ / ] ) بأن تأخذ قيمة وإشارة القيمة الاكبر من بين بدايتي المجالين (أي  a و c )
   .اذا كانتا متساويتين ناخذ قيمتهما وإشارة المجال المفتوح ان وجدت في اي منهما والمغلق ان لم توجد.

- تقوم بتعيين نهاية مجال التقاطع قيمةً وإشارةً (اي مغلق ام مفتوح [ / ] ) بأن تأخذ قيمة وإشارة القيمة الأصغر من بين نهايتي المجالين (أي  b و d ) .اذا كانتا متساويتين ناخذ قيمتهما وإشارة المجال المفتوح ان وجدت في اي منهما والمغلق ان لم توجد.

- اذا كانت بداية مجال التقاطع اصغر من نهايته, فتقاطع المجالين هو مجال (الحالة 1)
  اذا كانت بداية مجال التقاطع تساوي نهايته, وكانت كلتا الإشارتين هما مجال مغلق( [ ] ), فتقاطع المجالين هو نقطة واحدة (الحالة 2)
  أما في ما عدا ذلك, فتقاطع المجالين هو المجموعة الخالية φ فاي (الحالة 3)
 


import java.util.Scanner;

public class Programming_problems {

    public static void main(String[] args) {
        //------------------getting input from the user-------------------------
        // input must be in this format: ]/[ a, b ]/[ (( ex. [-2,15.3[ ))
        Scanner scan = new Scanner(System.in);
        String S1 = scan.next();
        String S2 = scan.next();

        //------------------converting strings to numbers-----------------------
        String temp[];
        char sings[] = new char[2];
        //a and b are the start and end of the first range respectively.
        temp = S1.split("[,\\]\\[]");
        float a = Float.parseFloat(temp[1]);
        float b = Float.parseFloat(temp[2]);
        //c and d are the start and end of the second range respectively.
        temp = S2.split("[,\\]\\[]");
        float c = Float.parseFloat(temp[1]);
        float d = Float.parseFloat(temp[2]);
        //e and f are the start and end of the Intersection respectively.
        float e, f;

        //----------------claculating both ends of Intersection range-----------
        // assign the highest start of both ranges to the start of Intersection 
        if (a < c) {
            e = c;
            sings[0] = S2.charAt(0);
        } else if (a > c) {
            e = a;
            sings[0] = S1.charAt(0);
        } else {
            e = a;
            if (S1.charAt(0) == ']' || S2.charAt(0) == ']') {
                sings[0] = ']';
            }else{
                sings[0] = '[';
            }
        }
        // assign the lowest end of both ranges to the end of Intersection
        if (b < d) {
            f = b;
            sings[1] = S1.charAt(S1.length() - 1);
        } else if (b > d){
            f = d;
            sings[1] = S2.charAt(S2.length() - 1);
        }else {
            f=d;
            if (S1.charAt(0) == '[' || S2.charAt(0) == '[') {
                sings[1] = '[';
            }else{
                sings[1] = ']';
            }
        }

        //------------------calculating the Intersection------------------------
        //check whether f is greater than e, if so, then the Intersection is a range indeed.
        if (e < f) {
            System.out.println("" + sings[0] + e + "," + f + sings[1]);
        } //check whether f is equals to e ,if so, then the Intersection is a single element.
        else if (e == f && sings[0] == '[' && sings[1] == ']') {
            System.out.println("{" + e + "}");
        } // check whether f is less than e(which can't be a valid range), if so, then the Intersection is Phi. 
        else {
            System.out.println("ᵠ");
        }

    }
}

 

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

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...