ليس لدي خبرة جيدة بلغة الـ 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("ᵠ");
}
}
}